avionic design with actual uboot and tooling
submodule of avionic design uboot bootloader and with included tools to get you started , read readme.md and readme-tk1-loader.md
This commit is contained in:
12
u-boot/board/8dtech/eco5pk/Kconfig
Normal file
12
u-boot/board/8dtech/eco5pk/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
if TARGET_ECO5PK
|
||||
|
||||
config SYS_BOARD
|
||||
default "eco5pk"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "8dtech"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "eco5pk"
|
||||
|
||||
endif
|
||||
6
u-boot/board/8dtech/eco5pk/MAINTAINERS
Normal file
6
u-boot/board/8dtech/eco5pk/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
ECO5PK BOARD
|
||||
M: Raphael Assenat <raph@8d.com>
|
||||
S: Maintained
|
||||
F: board/8dtech/eco5pk/
|
||||
F: include/configs/eco5pk.h
|
||||
F: configs/eco5pk_defconfig
|
||||
10
u-boot/board/8dtech/eco5pk/Makefile
Normal file
10
u-boot/board/8dtech/eco5pk/Makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
#
|
||||
# (C) Copyright 2000, 2001, 2002
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# Adapted from ti/evm/Makefile
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := eco5pk.o
|
||||
49
u-boot/board/8dtech/eco5pk/eco5pk.c
Normal file
49
u-boot/board/8dtech/eco5pk/eco5pk.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* eco5pk.c - board file for 8D Technology's AM3517 based eco5pk board
|
||||
*
|
||||
* Based on am3517evm.c
|
||||
*
|
||||
* Copyright (C) 2011-2012 8D Technologies inc.
|
||||
* Copyright (C) 2009 Texas Instruments Incorporated
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <netdev.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/mem.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/emac_defs.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <i2c.h>
|
||||
#include <crc.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include "eco5pk.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* Routine: board_init
|
||||
* Description: Early hardware init.
|
||||
*/
|
||||
int board_init(void)
|
||||
{
|
||||
gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
|
||||
gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
|
||||
|
||||
gpio_request(30, "RESOUT");
|
||||
gpio_direction_output(30, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Routine: set_muxconf_regs
|
||||
* Description: Setting up the configuration Mux registers specific to the
|
||||
* hardware. Many pins need to be moved from protect to primary
|
||||
* mode.
|
||||
*/
|
||||
void set_muxconf_regs(void)
|
||||
{
|
||||
MUX_ECO5_PK();
|
||||
}
|
||||
392
u-boot/board/8dtech/eco5pk/eco5pk.h
Normal file
392
u-boot/board/8dtech/eco5pk/eco5pk.h
Normal file
@@ -0,0 +1,392 @@
|
||||
/*
|
||||
* eco5.h - Header file for the 8D Technologies ECO5 board.
|
||||
*
|
||||
* Based on am3517evm.h
|
||||
* Based on ti/evm/evm.h
|
||||
*
|
||||
* Copyright (C) 2011 8D Technologies inc.
|
||||
* Copyright (C) 2009 Texas Instruments Incorporated
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _ECO5PK_H__
|
||||
#define _ECO5PK_H__
|
||||
|
||||
const omap3_sysinfo sysinfo = {
|
||||
DDR_DISCRETE,
|
||||
"ECO5 Board",
|
||||
"NAND",
|
||||
};
|
||||
|
||||
/*
|
||||
* IEN - Input Enable
|
||||
* IDIS - Input Disable
|
||||
* PTD - Pull type Down
|
||||
* PTU - Pull type Up
|
||||
* DIS - Pull type selection is inactive
|
||||
* EN - Pull type selection is active
|
||||
* M0 - Mode 0
|
||||
* The commented string gives the final mux configuration for that pin
|
||||
*/
|
||||
#define MUX_ECO5_PK() \
|
||||
/* SDRC */\
|
||||
MUX_VAL(CP(SDRC_D0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D3), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D4), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D5), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D6), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D7), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D8), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D9), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D10), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D11), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D12), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D13), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D14), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D15), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D16), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D17), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D18), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D19), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D20), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D21), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D22), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D23), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D24), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D25), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D26), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D27), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D28), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D29), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D30), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_D31), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_CLK), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_DQS0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_DQS1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_DQS2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_DQS3), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SDRC_DQS0N), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(SDRC_DQS1N), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(SDRC_DQS2N), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(SDRC_DQS3N), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(SDRC_CKE0), (M0)) \
|
||||
MUX_VAL(CP(SDRC_CKE1), (M0)) \
|
||||
MUX_VAL(CP(STRBEN_DLY0), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(STRBEN_DLY1), (IEN | PTD | EN | M0)) \
|
||||
/* GPMC */\
|
||||
MUX_VAL(CP(GPMC_A1), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A2), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A3), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A4), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A5), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A6), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A7), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A8), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A9), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_A10), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D0), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D1), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D2), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D3), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D4), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D5), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D6), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D7), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D8), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D9), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D10), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D11), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D12), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D13), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D14), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_D15), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NCS0), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NCS1), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NCS2), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NCS3), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NCS4), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NCS5), (IDIS | PTU | DIS | M3)) \
|
||||
MUX_VAL(CP(GPMC_NCS6), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(GPMC_NCS7), (IEN | PTU | DIS | M4)) \
|
||||
MUX_VAL(CP(GPMC_CLK), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NADV_ALE), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(GPMC_NOE), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(GPMC_NWE), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(GPMC_NBE0_CLE), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NBE1), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_NWP), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(GPMC_WAIT0), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_WAIT1), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(GPMC_WAIT2), (IEN | PTU | EN | M4)) \
|
||||
/* - ETH_nRESET*/\
|
||||
MUX_VAL(CP(GPMC_WAIT3), (IEN | PTU | EN | M0)) \
|
||||
/* DSS */\
|
||||
MUX_VAL(CP(DSS_PCLK), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_HSYNC), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_VSYNC), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_ACBIAS), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_DATA0), (IEN | PTD | DIS | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA1), (IEN | PTD | DIS | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA2), (IEN | PTD | DIS | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA3), (IEN | PTD | DIS | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA4), (IEN | PTD | DIS | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA5), (IEN | PTD | DIS | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA6), (IEN | PTD | DIS | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA7), (IEN | PTD | DIS | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA8), (IDIS | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA9), (IDIS | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA10), (IDIS | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA11), (IDIS | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA12), (IDIS | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA13), (IDIS | PTD | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA14), (IDIS | PTD | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA15), (IDIS | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA16), (IDIS | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA17), (IDIS | PTD | EN | M4)) \
|
||||
MUX_VAL(CP(DSS_DATA18), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_DATA19), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_DATA20), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_DATA21), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_DATA22), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(DSS_DATA23), (IDIS | PTD | DIS | M0)) \
|
||||
/* CAMERA */\
|
||||
MUX_VAL(CP(CAM_HS), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(CAM_VS), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(CAM_XCLKA), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_PCLK), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(CAM_FLD), (IDIS | PTD | DIS | M4)) /*GPIO_98*/\
|
||||
/* - CAM_RESET*/\
|
||||
MUX_VAL(CP(CAM_D0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D3), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D4), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D5), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D6), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D7), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D8), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D9), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D10), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_D11), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_XCLKB), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CAM_WEN), (IEN | PTD | DIS | M4)) /*GPIO_167*/\
|
||||
MUX_VAL(CP(CAM_STROBE), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CSI2_DX0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CSI2_DY0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CSI2_DX1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CSI2_DY1), (IEN | PTD | DIS | M0)) \
|
||||
/* MMC */\
|
||||
MUX_VAL(CP(MMC1_CLK), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(MMC1_CMD), (IEN | PTU | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC1_DAT0), (IEN | PTU | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC1_DAT1), (IEN | PTU | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC1_DAT2), (IEN | PTU | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC1_DAT3), (IEN | PTU | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC1_DAT4), (IEN | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(MMC1_DAT5), (IEN | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(MMC1_DAT6), (IEN | PTU | EN | M4)) \
|
||||
MUX_VAL(CP(MMC1_DAT7), (IEN | PTU | EN | M4)) \
|
||||
\
|
||||
MUX_VAL(CP(MMC2_CLK), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(MMC2_CMD), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC2_DAT0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC2_DAT1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC2_DAT2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MMC2_DAT3), (IEN | PTD | DIS | M0)) \
|
||||
/* McBSP */\
|
||||
MUX_VAL(CP(MCBSP_CLKS), (IEN | PTU | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP1_CLKR), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP1_FSR), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(MCBSP1_DX), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP1_DR), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP1_FSX), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP1_CLKX), (IEN | PTD | DIS | M0)) \
|
||||
\
|
||||
MUX_VAL(CP(MCBSP2_FSX), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP2_CLKX), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP2_DR), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP2_DX), (IDIS | PTD | DIS | M0)) \
|
||||
\
|
||||
MUX_VAL(CP(MCBSP3_DX), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCBSP3_DR), (IEN | PTD | DIS | M0)) \
|
||||
\
|
||||
MUX_VAL(CP(MCBSP3_CLKX), (IEN | PTD | DIS | M4)) /* LED ACT */ \
|
||||
\
|
||||
MUX_VAL(CP(MCBSP3_FSX), (IEN | PTD | DIS | M0)) \
|
||||
\
|
||||
MUX_VAL(CP(MCBSP4_CLKX), (IDIS | PTD | DIS | M4)) /*GPIO_152*/\
|
||||
/* - LCD_INI*/\
|
||||
MUX_VAL(CP(MCBSP4_DR), (IDIS | PTD | DIS | M4)) /*GPIO_153*/\
|
||||
/* - LCD_ENVDD */\
|
||||
MUX_VAL(CP(MCBSP4_DX), (IDIS | PTD | DIS | M4)) /*GPIO_154*/\
|
||||
/* - LCD_QVGA/nVGA */\
|
||||
MUX_VAL(CP(MCBSP4_FSX), (IDIS | PTD | DIS | M4)) /*GPIO_155*/\
|
||||
/* - LCD_RESB */\
|
||||
/* UART */\
|
||||
MUX_VAL(CP(UART1_TX), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(UART1_RTS), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(UART1_CTS), (IEN | PTU | DIS | M0)) \
|
||||
\
|
||||
MUX_VAL(CP(UART1_RX), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(UART2_CTS), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(UART2_RTS), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(UART2_TX), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(UART2_RX), (IEN | PTD | DIS | M0)) \
|
||||
\
|
||||
MUX_VAL(CP(UART3_CTS_RCTX), (IEN | PTU | DIS | M0)) \
|
||||
MUX_VAL(CP(UART3_RTS_SD), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(UART3_RX_IRRX), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(UART3_TX_IRTX), (IDIS | PTD | DIS | M0)) \
|
||||
/* I2C */\
|
||||
MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(I2C1_SDA), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(I2C2_SCL), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(I2C2_SDA), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(I2C3_SCL), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(I2C3_SDA), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(I2C4_SCL), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(I2C4_SDA), (IEN | PTU | EN | M0)) \
|
||||
/* McSPI */\
|
||||
MUX_VAL(CP(MCSPI1_CLK), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCSPI1_SIMO), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCSPI1_SOMI), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCSPI1_CS0), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(MCSPI1_CS1), (IEN | PTD | EN | M4)) /*GPIO_175*/\
|
||||
MUX_VAL(CP(MCSPI1_CS2), (IEN | PTU | DIS | M4)) /*GPIO_176*/\
|
||||
/* - LAN_INTR*/\
|
||||
MUX_VAL(CP(MCSPI1_CS3), (IEN | PTD | EN | M0)) \
|
||||
\
|
||||
MUX_VAL(CP(MCSPI2_CLK), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCSPI2_SIMO), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCSPI2_SOMI), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(MCSPI2_CS0), (IEN | PTD | EN | M4)) \
|
||||
/* LCD_EN_BACKLIGHT */\
|
||||
MUX_VAL(CP(MCSPI2_CS1), (IDIS | PTD | EN | M4)) \
|
||||
/* CCDC */\
|
||||
MUX_VAL(CP(CCDC_PCLK), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(CCDC_FIELD), (IEN | PTD | DIS | M1)) \
|
||||
MUX_VAL(CP(CCDC_HD), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(CCDC_VD), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(CCDC_WEN), (IEN | PTD | DIS | M1)) \
|
||||
MUX_VAL(CP(CCDC_DATA0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CCDC_DATA1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CCDC_DATA2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CCDC_DATA3), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CCDC_DATA4), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CCDC_DATA5), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CCDC_DATA6), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(CCDC_DATA7), (IEN | PTD | DIS | M0)) \
|
||||
/* RMII */\
|
||||
MUX_VAL(CP(RMII_MDIO_DATA), (IEN | M0)) \
|
||||
MUX_VAL(CP(RMII_MDIO_CLK), (M0)) \
|
||||
MUX_VAL(CP(RMII_RXD0) , (IEN | PTD | M0)) \
|
||||
MUX_VAL(CP(RMII_RXD1), (IEN | PTD | M0)) \
|
||||
MUX_VAL(CP(RMII_CRS_DV), (IEN | PTD | M0)) \
|
||||
MUX_VAL(CP(RMII_RXER), (PTD | M0)) \
|
||||
MUX_VAL(CP(RMII_TXD0), (PTD | M0)) \
|
||||
MUX_VAL(CP(RMII_TXD1), (PTD | M0)) \
|
||||
MUX_VAL(CP(RMII_TXEN), (PTD | M0)) \
|
||||
MUX_VAL(CP(RMII_50MHZ_CLK), (IEN | PTD | EN | M0)) \
|
||||
/* HECC */\
|
||||
MUX_VAL(CP(HECC1_TXD), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(HECC1_RXD), (IEN | PTU | EN | M0)) \
|
||||
/* HSUSB */\
|
||||
MUX_VAL(CP(HSUSB0_CLK), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_STP), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DIR), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_NXT), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DATA0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DATA1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DATA2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DATA3), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DATA4), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DATA5), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DATA6), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(HSUSB0_DATA7), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(USB0_DRVBUS), (IEN | PTD | EN | M0)) \
|
||||
/* HDQ */\
|
||||
MUX_VAL(CP(HDQ_SIO), (IEN | PTU | EN | M0)) \
|
||||
/* Control and debug */\
|
||||
MUX_VAL(CP(SYS_32K), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SYS_CLKREQ), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SYS_NIRQ), (IEN | PTU | EN | M0)) \
|
||||
/* SYS_nRESWARM */\
|
||||
MUX_VAL(CP(SYS_NRESWARM), (IDIS | PTU | DIS | M4)) \
|
||||
/* - GPIO30 */\
|
||||
MUX_VAL(CP(SYS_BOOT0), (IEN | PTD | DIS | M4)) /* GPIO_2 */\
|
||||
/* - PEN_IRQ */\
|
||||
MUX_VAL(CP(SYS_BOOT1), (IEN | PTD | DIS | M4)) /* GPIO_3 */\
|
||||
MUX_VAL(CP(SYS_BOOT2), (IEN | PTD | DIS | M4)) /* GPIO_4 */\
|
||||
MUX_VAL(CP(SYS_BOOT3), (IEN | PTD | DIS | M4)) /* GPIO_5 */\
|
||||
MUX_VAL(CP(SYS_BOOT4), (IEN | PTD | DIS | M4)) /* GPIO_6 */\
|
||||
MUX_VAL(CP(SYS_BOOT5), (IEN | PTD | DIS | M4)) /* GPIO_7 */\
|
||||
MUX_VAL(CP(SYS_BOOT6), (IDIS | PTD | DIS | M4)) /* GPIO_8 */\
|
||||
/* - VIO_1V8*/\
|
||||
MUX_VAL(CP(SYS_BOOT7), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(SYS_BOOT8), (IEN | PTD | EN | M0)) \
|
||||
\
|
||||
MUX_VAL(CP(SYS_OFF_MODE), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SYS_CLKOUT1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(SYS_CLKOUT2), (IEN | PTU | EN | M0)) \
|
||||
/* JTAG */\
|
||||
MUX_VAL(CP(JTAG_NTRST), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(JTAG_TCK), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(JTAG_TMS), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(JTAG_TDI), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(JTAG_EMU0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(JTAG_EMU1), (IEN | PTD | DIS | M0)) \
|
||||
/* ETK (ES2 onwards) */\
|
||||
MUX_VAL(CP(ETK_CLK_ES2), (IDIS | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(ETK_CTL_ES2), (IDIS | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D0_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D1_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D2_ES2), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(ETK_D3_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D4_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D5_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D6_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D7_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D8_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D9_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D10_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D11_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D12_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D13_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D14_ES2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(ETK_D15_ES2), (IEN | PTD | DIS | M0)) \
|
||||
/* Die to Die */\
|
||||
MUX_VAL(CP(D2D_MCAD34), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_MCAD35), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_MCAD36), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_CLK26MI), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_NRESPWRON), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_NRESWARM), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_ARM9NIRQ), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_UMA2P6FIQ), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_SPINT), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_FRINT), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_DMAREQ0), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_DMAREQ1), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_DMAREQ2), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_DMAREQ3), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_N3GTRST), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_N3GTDI), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_N3GTDO), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_N3GTMS), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_N3GTCK), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_N3GRTCK), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_MSTDBY), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_SWAKEUP), (IEN | PTD | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_IDLEREQ), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_IDLEACK), (IEN | PTU | EN | M0)) \
|
||||
MUX_VAL(CP(D2D_MWRITE), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_SWRITE), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_MREAD), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_SREAD), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_MBUSFLAG), (IEN | PTD | DIS | M0)) \
|
||||
MUX_VAL(CP(D2D_SBUSFLAG), (IEN | PTD | DIS | M0))
|
||||
|
||||
#endif
|
||||
18
u-boot/board/AndesTech/adp-ag101p/Kconfig
Normal file
18
u-boot/board/AndesTech/adp-ag101p/Kconfig
Normal file
@@ -0,0 +1,18 @@
|
||||
if TARGET_ADP_AG101P
|
||||
|
||||
config SYS_CPU
|
||||
default "n1213"
|
||||
|
||||
config SYS_BOARD
|
||||
default "adp-ag101p"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "AndesTech"
|
||||
|
||||
config SYS_SOC
|
||||
default "ag101"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "adp-ag101p"
|
||||
|
||||
endif
|
||||
6
u-boot/board/AndesTech/adp-ag101p/MAINTAINERS
Normal file
6
u-boot/board/AndesTech/adp-ag101p/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
ADP-AG101P BOARD
|
||||
M: Andes <uboot@andestech.com>
|
||||
S: Maintained
|
||||
F: board/AndesTech/adp-ag101p/
|
||||
F: include/configs/adp-ag101p.h
|
||||
F: configs/adp-ag101p_defconfig
|
||||
9
u-boot/board/AndesTech/adp-ag101p/Makefile
Normal file
9
u-boot/board/AndesTech/adp-ag101p/Makefile
Normal file
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# Copyright (C) 2011 Andes Technology Corporation
|
||||
# Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
|
||||
# Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := adp-ag101p.o
|
||||
81
u-boot/board/AndesTech/adp-ag101p/adp-ag101p.c
Normal file
81
u-boot/board/AndesTech/adp-ag101p/adp-ag101p.c
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Andes Technology Corporation
|
||||
* Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
|
||||
* Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <netdev.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#include <faraday/ftsdc010.h>
|
||||
#include <faraday/ftsmc020.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* Miscellaneous platform dependent initializations
|
||||
*/
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/*
|
||||
* refer to BOOT_PARAMETER_PA_BASE within
|
||||
* "linux/arch/nds32/include/asm/misc_spec.h"
|
||||
*/
|
||||
gd->bd->bi_arch_number = MACH_TYPE_ADPAG101P;
|
||||
gd->bd->bi_boot_params = PHYS_SDRAM_0 + 0x400;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
unsigned long sdram_base = PHYS_SDRAM_0;
|
||||
unsigned long expected_size = PHYS_SDRAM_0_SIZE + PHYS_SDRAM_1_SIZE;
|
||||
unsigned long actual_size;
|
||||
|
||||
actual_size = get_ram_size((void *)sdram_base, expected_size);
|
||||
|
||||
gd->ram_size = actual_size;
|
||||
|
||||
if (expected_size != actual_size) {
|
||||
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
|
||||
actual_size >> 20, expected_size >> 20);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dram_init_banksize(void)
|
||||
{
|
||||
gd->bd->bi_dram[0].start = PHYS_SDRAM_0;
|
||||
gd->bd->bi_dram[0].size = PHYS_SDRAM_0_SIZE;
|
||||
gd->bd->bi_dram[1].start = PHYS_SDRAM_1;
|
||||
gd->bd->bi_dram[1].size = PHYS_SDRAM_1_SIZE;
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bd)
|
||||
{
|
||||
return ftmac100_initialize(bd);
|
||||
}
|
||||
|
||||
ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info)
|
||||
{
|
||||
if (banknum == 0) { /* non-CFI boot flash */
|
||||
info->portwidth = FLASH_CFI_8BIT;
|
||||
info->chipwidth = FLASH_CFI_BY8;
|
||||
info->interface = FLASH_CFI_X8;
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int board_mmc_init(bd_t *bis)
|
||||
{
|
||||
ftsdc010_mmc_init(0);
|
||||
return 0;
|
||||
}
|
||||
36
u-boot/board/Arcturus/ucp1020/Kconfig
Normal file
36
u-boot/board/Arcturus/ucp1020/Kconfig
Normal file
@@ -0,0 +1,36 @@
|
||||
if TARGET_UCP1020
|
||||
|
||||
config SYS_BOARD
|
||||
string
|
||||
default "ucp1020"
|
||||
|
||||
config SYS_VENDOR
|
||||
string
|
||||
default "Arcturus"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
string
|
||||
default "UCP1020"
|
||||
|
||||
choice
|
||||
prompt "Target image select"
|
||||
|
||||
config TARGET_UCP1020_NOR
|
||||
bool "NOR flash u-boot image"
|
||||
|
||||
config TARGET_UCP1020_SPIFLASH
|
||||
bool "SPI flash u-boot image"
|
||||
|
||||
endchoice
|
||||
|
||||
if TARGET_UCP1020_SPIFLASH
|
||||
config UCBOOT
|
||||
bool
|
||||
default y
|
||||
|
||||
config SPIFLASH
|
||||
bool
|
||||
default y
|
||||
endif
|
||||
|
||||
endif
|
||||
7
u-boot/board/Arcturus/ucp1020/MAINTAINERS
Normal file
7
u-boot/board/Arcturus/ucp1020/MAINTAINERS
Normal file
@@ -0,0 +1,7 @@
|
||||
UCP1020 BOARD
|
||||
M: Oleksandr Zhadan and Michael Durrant <arcsupport@arcturusnetworks.com>
|
||||
S: Maintained
|
||||
F: board/Arcturus/ucp1020/
|
||||
F: include/configs/UCP1020.h
|
||||
F: configs/UCP1020_defconfig
|
||||
F: configs/UCP1020_SPIFLASH_defconfig
|
||||
33
u-boot/board/Arcturus/ucp1020/Makefile
Normal file
33
u-boot/board/Arcturus/ucp1020/Makefile
Normal file
@@ -0,0 +1,33 @@
|
||||
#
|
||||
# Copyright 2013-2015 Arcturus Networks, Inc.
|
||||
# based on board/freescale/p1_p2_rdb_pc/Makefile
|
||||
# original copyright follows:
|
||||
# Copyright 2010-2011 Freescale Semiconductor, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
MINIMAL=
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
ifdef CONFIG_SPL_INIT_MINIMAL
|
||||
MINIMAL=y
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef MINIMAL
|
||||
|
||||
obj-y += spl_minimal.o tlb.o law.o
|
||||
|
||||
else
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
obj-y += spl.o
|
||||
endif
|
||||
|
||||
obj-y += ucp1020.o
|
||||
obj-y += ddr.o
|
||||
obj-y += law.o
|
||||
obj-y += tlb.o
|
||||
obj-y += cmd_arc.o
|
||||
|
||||
endif
|
||||
54
u-boot/board/Arcturus/ucp1020/README
Normal file
54
u-boot/board/Arcturus/ucp1020/README
Normal file
@@ -0,0 +1,54 @@
|
||||
The uCP1020 product family (ucp1020) is an Arcturus Networks Inc. System on Modules
|
||||
product featuring a Freescale P1020 CPU, optionally populated with 1, 2 or 3 Gig-Ethernet PHYs,
|
||||
DDR3, NOR Flash, eMMC NAND Flash and/or SPI Flash.
|
||||
|
||||
Information on the generic product family can be found here:
|
||||
http://www.arcturusnetworks.com/products/ucp1020
|
||||
|
||||
The UCP1020 several configurable options
|
||||
========================================
|
||||
|
||||
- the selection of populated phy(s):
|
||||
KSZ9031 (current default for eTSEC 1 and 3)
|
||||
|
||||
- the selection of boot location:
|
||||
SPI Flash or NOR flash
|
||||
|
||||
The UCP1020 includes 2 default configurations
|
||||
=============================================
|
||||
NOR boot image:
|
||||
configs/UCP1020_defconfig
|
||||
SPI boot image:
|
||||
configs/UCP1020_SPIFLASH_defconfig
|
||||
|
||||
The UCP1020 adds an additional command in cmd_arc.c to access and program
|
||||
SPI resident factory defaults for serial number, and 1, 2 or 3 Ethernet
|
||||
HW Addresses.
|
||||
|
||||
|
||||
Build example
|
||||
=============
|
||||
|
||||
make distclean
|
||||
make UCP1020_defconfig
|
||||
make
|
||||
|
||||
Default Scripts
|
||||
===============
|
||||
A default upgrade scripts is included in the default environment variable example:
|
||||
|
||||
B$ run tftpflash
|
||||
|
||||
Dual Environment
|
||||
================
|
||||
|
||||
This build enables dual / failover environment environment.
|
||||
|
||||
NOR Flash Partition declarations and scripts
|
||||
============================================
|
||||
Several scripts are available to allow TFTP of images and programming directly
|
||||
into defined NOR flash partitions. Examples:
|
||||
|
||||
B$ run program0
|
||||
B$ run program1
|
||||
B$ run program2
|
||||
231
u-boot/board/Arcturus/ucp1020/cmd_arc.c
Normal file
231
u-boot/board/Arcturus/ucp1020/cmd_arc.c
Normal file
@@ -0,0 +1,231 @@
|
||||
/*
|
||||
* Command for accessing Arcturus factory environment.
|
||||
*
|
||||
* Copyright 2013-2015 Arcturus Networks Inc.
|
||||
* http://www.arcturusnetworks.com/products/ucp1020/
|
||||
* by Oleksandr G Zhadan et al.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause
|
||||
*
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <div64.h>
|
||||
#include <malloc.h>
|
||||
#include <spi_flash.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#ifndef CONFIG_SF_DEFAULT_SPEED
|
||||
# define CONFIG_SF_DEFAULT_SPEED 1000000
|
||||
#endif
|
||||
#ifndef CONFIG_SF_DEFAULT_MODE
|
||||
# define CONFIG_SF_DEFAULT_MODE SPI_MODE0
|
||||
#endif
|
||||
#ifndef CONFIG_SF_DEFAULT_CS
|
||||
# define CONFIG_SF_DEFAULT_CS 0
|
||||
#endif
|
||||
#ifndef CONFIG_SF_DEFAULT_BUS
|
||||
# define CONFIG_SF_DEFAULT_BUS 0
|
||||
#endif
|
||||
|
||||
#define MAX_SERIAL_SIZE 15
|
||||
#define MAX_HWADDR_SIZE 17
|
||||
|
||||
#define FIRM_ADDR1 (0x200 - sizeof(smac))
|
||||
#define FIRM_ADDR2 (0x400 - sizeof(smac))
|
||||
#define FIRM_ADDR3 (CONFIG_ENV_SECT_SIZE + 0x200 - sizeof(smac))
|
||||
#define FIRM_ADDR4 (CONFIG_ENV_SECT_SIZE + 0x400 - sizeof(smac))
|
||||
|
||||
static struct spi_flash *flash;
|
||||
char smac[4][18];
|
||||
|
||||
static int ishwaddr(char *hwaddr)
|
||||
{
|
||||
if (strlen(hwaddr) == MAX_HWADDR_SIZE)
|
||||
if (hwaddr[2] == ':' &&
|
||||
hwaddr[5] == ':' &&
|
||||
hwaddr[8] == ':' &&
|
||||
hwaddr[11] == ':' &&
|
||||
hwaddr[14] == ':')
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int set_arc_product(int argc, char *const argv[])
|
||||
{
|
||||
int err = 0;
|
||||
char *mystrerr = "ERROR: Failed to save factory info in spi location";
|
||||
|
||||
if (argc != 5)
|
||||
return -1;
|
||||
|
||||
/* Check serial number */
|
||||
if (strlen(argv[1]) != MAX_SERIAL_SIZE)
|
||||
return -1;
|
||||
|
||||
/* Check HWaddrs */
|
||||
if (ishwaddr(argv[2]) || ishwaddr(argv[3]) || ishwaddr(argv[4]))
|
||||
return -1;
|
||||
|
||||
strcpy(smac[3], argv[1]);
|
||||
strcpy(smac[2], argv[2]);
|
||||
strcpy(smac[1], argv[3]);
|
||||
strcpy(smac[0], argv[4]);
|
||||
|
||||
flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
|
||||
CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
|
||||
|
||||
/*
|
||||
* Save factory defaults
|
||||
*/
|
||||
|
||||
if (spi_flash_write(flash, FIRM_ADDR1, sizeof(smac), smac)) {
|
||||
printf("%s: %s [1]\n", __func__, mystrerr);
|
||||
err++;
|
||||
}
|
||||
if (spi_flash_write(flash, FIRM_ADDR2, sizeof(smac), smac)) {
|
||||
printf("%s: %s [2]\n", __func__, mystrerr);
|
||||
err++;
|
||||
}
|
||||
|
||||
if (spi_flash_write(flash, FIRM_ADDR3, sizeof(smac), smac)) {
|
||||
printf("%s: %s [3]\n", __func__, mystrerr);
|
||||
err++;
|
||||
}
|
||||
|
||||
if (spi_flash_write(flash, FIRM_ADDR4, sizeof(smac), smac)) {
|
||||
printf("%s: %s [4]\n", __func__, mystrerr);
|
||||
err++;
|
||||
}
|
||||
|
||||
if (err == 4) {
|
||||
printf("%s: %s [ALL]\n", __func__, mystrerr);
|
||||
return -2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_arc_info(void)
|
||||
{
|
||||
int location = 1;
|
||||
char *myerr = "ERROR: Failed to read all 4 factory info spi locations";
|
||||
|
||||
flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
|
||||
CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
|
||||
|
||||
if (spi_flash_read(flash, FIRM_ADDR1, sizeof(smac), smac)) {
|
||||
location++;
|
||||
if (spi_flash_read(flash, FIRM_ADDR2, sizeof(smac), smac)) {
|
||||
location++;
|
||||
if (spi_flash_read(flash, FIRM_ADDR3, sizeof(smac),
|
||||
smac)) {
|
||||
location++;
|
||||
if (spi_flash_read(flash, FIRM_ADDR4,
|
||||
sizeof(smac), smac)) {
|
||||
printf("%s: %s\n", __func__, myerr);
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (smac[3][0] != 0) {
|
||||
if (location > 1)
|
||||
printf("Using region %d\n", location);
|
||||
printf("SERIAL: ");
|
||||
if (smac[3][0] == 0xFF) {
|
||||
printf("\t<not found>\n");
|
||||
} else {
|
||||
printf("\t%s\n", smac[3]);
|
||||
setenv("SERIAL", smac[3]);
|
||||
}
|
||||
}
|
||||
|
||||
if (strcmp(smac[2], "00:00:00:00:00:00") == 0)
|
||||
return 0;
|
||||
|
||||
printf("HWADDR0:");
|
||||
if (smac[2][0] == 0xFF) {
|
||||
printf("\t<not found>\n");
|
||||
} else {
|
||||
char *ret = getenv("ethaddr");
|
||||
|
||||
if (strcmp(ret, __stringify(CONFIG_ETHADDR)) == 0) {
|
||||
setenv("ethaddr", smac[2]);
|
||||
printf("\t%s (factory)\n", smac[2]);
|
||||
} else {
|
||||
printf("\t%s\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
if (strcmp(smac[1], "00:00:00:00:00:00") == 0) {
|
||||
setenv("eth1addr", smac[2]);
|
||||
setenv("eth2addr", smac[2]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
printf("HWADDR1:");
|
||||
if (smac[1][0] == 0xFF) {
|
||||
printf("\t<not found>\n");
|
||||
} else {
|
||||
char *ret = getenv("eth1addr");
|
||||
|
||||
if (strcmp(ret, __stringify(CONFIG_ETH1ADDR)) == 0) {
|
||||
setenv("eth1addr", smac[1]);
|
||||
printf("\t%s (factory)\n", smac[1]);
|
||||
} else {
|
||||
printf("\t%s\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
if (strcmp(smac[0], "00:00:00:00:00:00") == 0) {
|
||||
setenv("eth2addr", smac[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
printf("HWADDR2:");
|
||||
if (smac[0][0] == 0xFF) {
|
||||
printf("\t<not found>\n");
|
||||
} else {
|
||||
char *ret = getenv("eth2addr");
|
||||
|
||||
if (strcmp(ret, __stringify(CONFIG_ETH2ADDR)) == 0) {
|
||||
setenv("eth2addr", smac[0]);
|
||||
printf("\t%s (factory)\n", smac[0]);
|
||||
} else {
|
||||
printf("\t%s\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int do_arc_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
const char *cmd;
|
||||
int ret = -1;
|
||||
|
||||
cmd = argv[1];
|
||||
--argc;
|
||||
++argv;
|
||||
|
||||
if (strcmp(cmd, "product") == 0) {
|
||||
ret = set_arc_product(argc, argv);
|
||||
goto done;
|
||||
}
|
||||
if (strcmp(cmd, "info") == 0) {
|
||||
ret = get_arc_info();
|
||||
goto done;
|
||||
}
|
||||
done:
|
||||
if (ret == -1)
|
||||
return CMD_RET_USAGE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
U_BOOT_CMD(arc, 6, 1, do_arc_cmd,
|
||||
"Arcturus product command sub-system",
|
||||
"product serial hwaddr0 hwaddr1 hwaddr2 - save Arcturus factory env\n"
|
||||
"info - show Arcturus factory env\n\n");
|
||||
161
u-boot/board/Arcturus/ucp1020/ddr.c
Normal file
161
u-boot/board/Arcturus/ucp1020/ddr.c
Normal file
@@ -0,0 +1,161 @@
|
||||
/*
|
||||
* Copyright 2013-2015 Arcturus Networks, Inc.
|
||||
* http://www.arcturusnetworks.com/products/ucp1020/
|
||||
* based on board/freescale/p1_p2_rdb_pc/spl.c
|
||||
* original copyright follows:
|
||||
* Copyright 2013 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/mmu.h>
|
||||
#include <asm/immap_85xx.h>
|
||||
#include <asm/processor.h>
|
||||
#include <fsl_ddr_sdram.h>
|
||||
#include <fsl_ddr_dimm_params.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/fsl_law.h>
|
||||
|
||||
#ifdef CONFIG_SYS_DDR_RAW_TIMING
|
||||
#if defined(CONFIG_UCP1020) || defined(CONFIG_UCP1020T1)
|
||||
/*
|
||||
* Micron MT41J128M16HA-15E
|
||||
* */
|
||||
dimm_params_t ddr_raw_timing = {
|
||||
.n_ranks = 1,
|
||||
.rank_density = 536870912u,
|
||||
.capacity = 536870912u,
|
||||
.primary_sdram_width = 32,
|
||||
.ec_sdram_width = 8,
|
||||
.registered_dimm = 0,
|
||||
.mirrored_dimm = 0,
|
||||
.n_row_addr = 14,
|
||||
.n_col_addr = 10,
|
||||
.n_banks_per_sdram_device = 8,
|
||||
.edc_config = 2,
|
||||
.burst_lengths_bitmask = 0x0c,
|
||||
|
||||
.tckmin_x_ps = 1650,
|
||||
.caslat_x = 0x7e << 4, /* 5,6,7,8,9,10 */
|
||||
.taa_ps = 14050,
|
||||
.twr_ps = 15000,
|
||||
.trcd_ps = 13500,
|
||||
.trrd_ps = 75000,
|
||||
.trp_ps = 13500,
|
||||
.tras_ps = 40000,
|
||||
.trc_ps = 49500,
|
||||
.trfc_ps = 160000,
|
||||
.twtr_ps = 75000,
|
||||
.trtp_ps = 75000,
|
||||
.refresh_rate_ps = 7800000,
|
||||
.tfaw_ps = 30000,
|
||||
};
|
||||
|
||||
#else
|
||||
#error Missing raw timing data for this board
|
||||
#endif
|
||||
|
||||
int fsl_ddr_get_dimm_params(dimm_params_t *pdimm,
|
||||
unsigned int controller_number,
|
||||
unsigned int dimm_number)
|
||||
{
|
||||
const char dimm_model[] = "Fixed DDR on board";
|
||||
|
||||
if ((controller_number == 0) && (dimm_number == 0)) {
|
||||
memcpy(pdimm, &ddr_raw_timing, sizeof(dimm_params_t));
|
||||
memset(pdimm->mpart, 0, sizeof(pdimm->mpart));
|
||||
memcpy(pdimm->mpart, dimm_model, sizeof(dimm_model) - 1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_SYS_DDR_RAW_TIMING */
|
||||
|
||||
#ifdef CONFIG_SYS_DDR_CS0_BNDS
|
||||
/* Fixed sdram init -- doesn't use serial presence detect. */
|
||||
phys_size_t fixed_sdram(void)
|
||||
{
|
||||
sys_info_t sysinfo;
|
||||
char buf[32];
|
||||
size_t ddr_size;
|
||||
fsl_ddr_cfg_regs_t ddr_cfg_regs = {
|
||||
.cs[0].bnds = CONFIG_SYS_DDR_CS0_BNDS,
|
||||
.cs[0].config = CONFIG_SYS_DDR_CS0_CONFIG,
|
||||
.cs[0].config_2 = CONFIG_SYS_DDR_CS0_CONFIG_2,
|
||||
#if CONFIG_CHIP_SELECTS_PER_CTRL > 1
|
||||
.cs[1].bnds = CONFIG_SYS_DDR_CS1_BNDS,
|
||||
.cs[1].config = CONFIG_SYS_DDR_CS1_CONFIG,
|
||||
.cs[1].config_2 = CONFIG_SYS_DDR_CS1_CONFIG_2,
|
||||
#endif
|
||||
.timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3,
|
||||
.timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0,
|
||||
.timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1,
|
||||
.timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2,
|
||||
.ddr_sdram_cfg = CONFIG_SYS_DDR_CONTROL,
|
||||
.ddr_sdram_cfg_2 = CONFIG_SYS_DDR_CONTROL_2,
|
||||
.ddr_sdram_mode = CONFIG_SYS_DDR_MODE_1,
|
||||
.ddr_sdram_mode_2 = CONFIG_SYS_DDR_MODE_2,
|
||||
.ddr_sdram_md_cntl = CONFIG_SYS_DDR_MODE_CONTROL,
|
||||
.ddr_sdram_interval = CONFIG_SYS_DDR_INTERVAL,
|
||||
.ddr_data_init = CONFIG_SYS_DDR_DATA_INIT,
|
||||
.ddr_sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL,
|
||||
.ddr_init_addr = CONFIG_SYS_DDR_INIT_ADDR,
|
||||
.ddr_init_ext_addr = CONFIG_SYS_DDR_INIT_EXT_ADDR,
|
||||
.timing_cfg_4 = CONFIG_SYS_DDR_TIMING_4,
|
||||
.timing_cfg_5 = CONFIG_SYS_DDR_TIMING_5,
|
||||
.ddr_zq_cntl = CONFIG_SYS_DDR_ZQ_CONTROL,
|
||||
.ddr_wrlvl_cntl = CONFIG_SYS_DDR_WRLVL_CONTROL,
|
||||
.ddr_sr_cntr = CONFIG_SYS_DDR_SR_CNTR,
|
||||
.ddr_sdram_rcw_1 = CONFIG_SYS_DDR_RCW_1,
|
||||
.ddr_sdram_rcw_2 = CONFIG_SYS_DDR_RCW_2
|
||||
};
|
||||
|
||||
get_sys_info(&sysinfo);
|
||||
printf("Configuring DDR for %s MT/s data rate\n",
|
||||
strmhz(buf, sysinfo.freq_ddrbus));
|
||||
|
||||
ddr_size = CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
|
||||
|
||||
fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
|
||||
|
||||
if (set_ddr_laws(CONFIG_SYS_DDR_SDRAM_BASE,
|
||||
ddr_size, LAW_TRGT_IF_DDR_1) < 0) {
|
||||
printf("ERROR setting Local Access Windows for DDR\n");
|
||||
return 0;
|
||||
};
|
||||
|
||||
return ddr_size;
|
||||
}
|
||||
#endif
|
||||
|
||||
void fsl_ddr_board_options(memctl_options_t *popts,
|
||||
dimm_params_t *pdimm,
|
||||
unsigned int ctrl_num)
|
||||
{
|
||||
int i;
|
||||
|
||||
popts->clk_adjust = 6;
|
||||
popts->cpo_override = 0x1f;
|
||||
popts->write_data_delay = 2;
|
||||
popts->half_strength_driver_enable = 1;
|
||||
/* Write leveling override */
|
||||
popts->wrlvl_en = 1;
|
||||
popts->wrlvl_override = 1;
|
||||
popts->wrlvl_sample = 0xf;
|
||||
popts->wrlvl_start = 0x8;
|
||||
popts->trwt_override = 1;
|
||||
popts->trwt = 0;
|
||||
|
||||
if (pdimm->primary_sdram_width == 64)
|
||||
popts->data_bus_width = 0;
|
||||
else if (pdimm->primary_sdram_width == 32)
|
||||
popts->data_bus_width = 1;
|
||||
else
|
||||
printf("Error in DDR bus width configuration!\n");
|
||||
|
||||
for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
|
||||
popts->cs_local_opts[i].odt_rd_cfg = FSL_DDR_ODT_NEVER;
|
||||
popts->cs_local_opts[i].odt_wr_cfg = FSL_DDR_ODT_CS;
|
||||
}
|
||||
}
|
||||
25
u-boot/board/Arcturus/ucp1020/law.c
Normal file
25
u-boot/board/Arcturus/ucp1020/law.c
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2013-2015 Arcturus Networks, Inc.
|
||||
* http://www.arcturusnetworks.com/products/ucp1020/
|
||||
* based on board/freescale/p1_p2_rdb_pc/spl.c
|
||||
* original copyright follows:
|
||||
* Copyright 2013 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/fsl_law.h>
|
||||
#include <asm/mmu.h>
|
||||
|
||||
struct law_entry law_table[] = {
|
||||
#ifdef CONFIG_VSC7385_ENET
|
||||
SET_LAW(CONFIG_SYS_VSC7385_BASE_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_LBC),
|
||||
#endif
|
||||
SET_LAW(CONFIG_SYS_FLASH_BASE_PHYS, LAW_SIZE_64M, LAW_TRGT_IF_LBC),
|
||||
#ifdef CONFIG_SYS_NAND_BASE_PHYS
|
||||
SET_LAW(CONFIG_SYS_NAND_BASE_PHYS, LAW_SIZE_32K, LAW_TRGT_IF_LBC),
|
||||
#endif
|
||||
};
|
||||
|
||||
int num_law_entries = ARRAY_SIZE(law_table);
|
||||
127
u-boot/board/Arcturus/ucp1020/spl.c
Normal file
127
u-boot/board/Arcturus/ucp1020/spl.c
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright 2013-2015 Arcturus Networks, Inc.
|
||||
* http://www.arcturusnetworks.com/products/ucp1020/
|
||||
* based on board/freescale/p1_p2_rdb_pc/spl.c
|
||||
* original copyright follows:
|
||||
* Copyright 2013 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <console.h>
|
||||
#include <ns16550.h>
|
||||
#include <malloc.h>
|
||||
#include <mmc.h>
|
||||
#include <nand.h>
|
||||
#include <i2c.h>
|
||||
#include <fsl_esdhc.h>
|
||||
#include <spi_flash.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
static const u32 sysclk_tbl[] = {
|
||||
66666000, 7499900, 83332500, 8999900,
|
||||
99999000, 11111000, 12499800, 13333200
|
||||
};
|
||||
|
||||
phys_size_t get_effective_memsize(void)
|
||||
{
|
||||
return CONFIG_SYS_L2_SIZE;
|
||||
}
|
||||
|
||||
void board_init_f(ulong bootflag)
|
||||
{
|
||||
u32 plat_ratio, bus_clk;
|
||||
ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
|
||||
|
||||
console_init_f();
|
||||
|
||||
/* Set pmuxcr to allow both i2c1 and i2c2 */
|
||||
setbits_be32(&gur->pmuxcr, in_be32(&gur->pmuxcr) | 0x1000);
|
||||
setbits_be32(&gur->pmuxcr,
|
||||
in_be32(&gur->pmuxcr) | MPC85xx_PMUXCR_SD_DATA);
|
||||
|
||||
/* Read back the register to synchronize the write. */
|
||||
in_be32(&gur->pmuxcr);
|
||||
|
||||
#ifdef CONFIG_SPL_SPI_BOOT
|
||||
clrbits_be32(&gur->pmuxcr, MPC85xx_PMUXCR_SD_DATA);
|
||||
#endif
|
||||
|
||||
/* initialize selected port with appropriate baud rate */
|
||||
plat_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_PLAT_RATIO;
|
||||
plat_ratio >>= 1;
|
||||
bus_clk = CONFIG_SYS_CLK_FREQ * plat_ratio;
|
||||
gd->bus_clk = bus_clk;
|
||||
|
||||
NS16550_init((NS16550_t)CONFIG_SYS_NS16550_COM1,
|
||||
bus_clk / 16 / CONFIG_BAUDRATE);
|
||||
#ifdef CONFIG_SPL_MMC_BOOT
|
||||
puts("\nSD boot...\n");
|
||||
#elif defined(CONFIG_SPL_SPI_BOOT)
|
||||
puts("\nSPI Flash boot...\n");
|
||||
#endif
|
||||
|
||||
/* copy code to RAM and jump to it - this should not return */
|
||||
/* NOTE - code has to be copied out of NAND buffer before
|
||||
* other blocks can be read.
|
||||
*/
|
||||
relocate_code(CONFIG_SPL_RELOC_STACK, 0, CONFIG_SPL_RELOC_TEXT_BASE);
|
||||
}
|
||||
|
||||
void board_init_r(gd_t *gd, ulong dest_addr)
|
||||
{
|
||||
/* Pointer is writable since we allocated a register for it */
|
||||
gd = (gd_t *)CONFIG_SPL_GD_ADDR;
|
||||
bd_t *bd;
|
||||
|
||||
memset(gd, 0, sizeof(gd_t));
|
||||
bd = (bd_t *)(CONFIG_SPL_GD_ADDR + sizeof(gd_t));
|
||||
memset(bd, 0, sizeof(bd_t));
|
||||
gd->bd = bd;
|
||||
bd->bi_memstart = CONFIG_SYS_INIT_L2_ADDR;
|
||||
bd->bi_memsize = CONFIG_SYS_L2_SIZE;
|
||||
|
||||
probecpu();
|
||||
get_clocks();
|
||||
mem_malloc_init(CONFIG_SPL_RELOC_MALLOC_ADDR,
|
||||
CONFIG_SPL_RELOC_MALLOC_SIZE);
|
||||
|
||||
#ifndef CONFIG_SPL_NAND_BOOT
|
||||
env_init();
|
||||
#endif
|
||||
#ifdef CONFIG_SPL_MMC_BOOT
|
||||
mmc_initialize(bd);
|
||||
#endif
|
||||
/* relocate environment function pointers etc. */
|
||||
#ifdef CONFIG_SPL_NAND_BOOT
|
||||
nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
|
||||
(uchar *)CONFIG_ENV_ADDR);
|
||||
gd->env_addr = (ulong)(CONFIG_ENV_ADDR);
|
||||
gd->env_valid = 1;
|
||||
#else
|
||||
env_relocate();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SYS_I2C
|
||||
i2c_init_all();
|
||||
#else
|
||||
i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
|
||||
#endif
|
||||
|
||||
gd->ram_size = initdram(0);
|
||||
#ifdef CONFIG_SPL_NAND_BOOT
|
||||
puts("Tertiary program loader running in sram...");
|
||||
#else
|
||||
puts("Second program loader running in sram...\n");
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SPL_MMC_BOOT
|
||||
mmc_boot();
|
||||
#elif defined(CONFIG_SPL_SPI_BOOT)
|
||||
spi_boot();
|
||||
#elif defined(CONFIG_SPL_NAND_BOOT)
|
||||
nand_boot();
|
||||
#endif
|
||||
}
|
||||
67
u-boot/board/Arcturus/ucp1020/spl_minimal.c
Normal file
67
u-boot/board/Arcturus/ucp1020/spl_minimal.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright 2013-2015 Arcturus Networks, Inc.
|
||||
* http://www.arcturusnetworks.com/products/ucp1020/
|
||||
* based on board/freescale/p1_p2_rdb_pc/spl_minimal.c
|
||||
* original copyright follows:
|
||||
* Copyright 2011 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <ns16550.h>
|
||||
#include <asm/io.h>
|
||||
#include <nand.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <asm/fsl_law.h>
|
||||
#include <fsl_ddr_sdram.h>
|
||||
#include <asm/global_data.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
void board_init_f(ulong bootflag)
|
||||
{
|
||||
u32 plat_ratio;
|
||||
ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
|
||||
|
||||
#if defined(CONFIG_SYS_NAND_BR_PRELIM) && defined(CONFIG_SYS_NAND_OR_PRELIM)
|
||||
set_lbc_br(0, CONFIG_SYS_NAND_BR_PRELIM);
|
||||
set_lbc_or(0, CONFIG_SYS_NAND_OR_PRELIM);
|
||||
#endif
|
||||
|
||||
/* initialize selected port with appropriate baud rate */
|
||||
plat_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_PLAT_RATIO;
|
||||
plat_ratio >>= 1;
|
||||
gd->bus_clk = CONFIG_SYS_CLK_FREQ * plat_ratio;
|
||||
|
||||
NS16550_init((NS16550_t)CONFIG_SYS_NS16550_COM1,
|
||||
gd->bus_clk / 16 / CONFIG_BAUDRATE);
|
||||
|
||||
puts("\nNAND boot... ");
|
||||
|
||||
/* copy code to RAM and jump to it - this should not return */
|
||||
/* NOTE - code has to be copied out of NAND buffer before
|
||||
* other blocks can be read.
|
||||
*/
|
||||
relocate_code(CONFIG_SPL_RELOC_STACK, 0, CONFIG_SPL_RELOC_TEXT_BASE);
|
||||
}
|
||||
|
||||
void board_init_r(gd_t *gd, ulong dest_addr)
|
||||
{
|
||||
puts("\nSecond program loader running in sram...");
|
||||
nand_boot();
|
||||
}
|
||||
|
||||
void putc(char c)
|
||||
{
|
||||
if (c == '\n')
|
||||
NS16550_putc((NS16550_t)CONFIG_SYS_NS16550_COM1, '\r');
|
||||
|
||||
NS16550_putc((NS16550_t)CONFIG_SYS_NS16550_COM1, c);
|
||||
}
|
||||
|
||||
void puts(const char *str)
|
||||
{
|
||||
while (*str)
|
||||
putc(*str++);
|
||||
}
|
||||
101
u-boot/board/Arcturus/ucp1020/tlb.c
Normal file
101
u-boot/board/Arcturus/ucp1020/tlb.c
Normal file
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright 2013-2015 Arcturus Networks, Inc
|
||||
* http://www.arcturusnetworks.com/products/ucp1020/
|
||||
* based on board/freescale/p1_p2_rdb_pc/tlb.c
|
||||
* original copyright follows:
|
||||
* Copyright 2010-2011 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/mmu.h>
|
||||
|
||||
struct fsl_e_tlb_entry tlb_table[] = {
|
||||
/* TLB 0 - for temp stack in cache */
|
||||
SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR,
|
||||
CONFIG_SYS_INIT_RAM_ADDR_PHYS,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, 0,
|
||||
0, 0, BOOKE_PAGESZ_4K, 0),
|
||||
SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024,
|
||||
CONFIG_SYS_INIT_RAM_ADDR_PHYS + 4 * 1024,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, 0,
|
||||
0, 0, BOOKE_PAGESZ_4K, 0),
|
||||
SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024,
|
||||
CONFIG_SYS_INIT_RAM_ADDR_PHYS + 8 * 1024,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, 0,
|
||||
0, 0, BOOKE_PAGESZ_4K, 0),
|
||||
SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024,
|
||||
CONFIG_SYS_INIT_RAM_ADDR_PHYS + 12 * 1024,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, 0,
|
||||
0, 0, BOOKE_PAGESZ_4K, 0),
|
||||
|
||||
/* TLB 1 */
|
||||
/* *I*** - Covers boot page */
|
||||
SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_I,
|
||||
0, 0, BOOKE_PAGESZ_4K, 1),
|
||||
|
||||
/* *I*G* - CCSRBAR */
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_I | MAS2_G,
|
||||
0, 1, BOOKE_PAGESZ_1M, 1),
|
||||
|
||||
#ifndef CONFIG_SPL_BUILD
|
||||
/* W**G* - Flash/promjet, localbus */
|
||||
/* This will be changed to *I*G* after relocation to RAM. */
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE_PHYS,
|
||||
MAS3_SX | MAS3_SR, MAS2_W | MAS2_G,
|
||||
0, 2, BOOKE_PAGESZ_64M, 1),
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
/* *I*G* - PCI memory 1.5G */
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT, CONFIG_SYS_PCIE1_MEM_PHYS,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_I | MAS2_G,
|
||||
0, 3, BOOKE_PAGESZ_1G, 1),
|
||||
|
||||
/* *I*G* - PCI I/O effective: 192K */
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_IO_VIRT, CONFIG_SYS_PCIE1_IO_PHYS,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_I | MAS2_G,
|
||||
0, 4, BOOKE_PAGESZ_256K, 1),
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_VSC7385_ENET
|
||||
/* *I*G - VSC7385 Switch */
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_VSC7385_BASE, CONFIG_SYS_VSC7385_BASE_PHYS,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_I | MAS2_G,
|
||||
0, 5, BOOKE_PAGESZ_1M, 1),
|
||||
#endif
|
||||
#endif /* not SPL */
|
||||
|
||||
#ifdef CONFIG_SYS_NAND_BASE
|
||||
/* *I*G - NAND */
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_I | MAS2_G,
|
||||
0, 7, BOOKE_PAGESZ_1M, 1),
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SYS_RAMBOOT) || \
|
||||
(defined(CONFIG_SPL) && !defined(CONFIG_SPL_COMMON_INIT_DDR))
|
||||
/* *I*G - eSDHC/eSPI/NAND boot */
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, 0,
|
||||
0, 8, BOOKE_PAGESZ_1G, 1),
|
||||
|
||||
#endif /* RAMBOOT/SPL */
|
||||
|
||||
#ifdef CONFIG_SYS_INIT_L2_ADDR
|
||||
/* *I*G - L2SRAM */
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L2_ADDR, CONFIG_SYS_INIT_L2_ADDR_PHYS,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_G,
|
||||
0, 11, BOOKE_PAGESZ_256K, 1),
|
||||
#if CONFIG_SYS_L2_SIZE >= (256 << 10)
|
||||
SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L2_ADDR + 0x40000,
|
||||
CONFIG_SYS_INIT_L2_ADDR_PHYS + 0x40000,
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_I | MAS2_G,
|
||||
0, 12, BOOKE_PAGESZ_256K, 1)
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
int num_tlb_entries = ARRAY_SIZE(tlb_table);
|
||||
363
u-boot/board/Arcturus/ucp1020/ucp1020.c
Normal file
363
u-boot/board/Arcturus/ucp1020/ucp1020.c
Normal file
@@ -0,0 +1,363 @@
|
||||
/*
|
||||
* Copyright 2013-2015 Arcturus Networks, Inc.
|
||||
* http://www.arcturusnetworks.com/products/ucp1020/
|
||||
* by Oleksandr G Zhadan et al.
|
||||
* based on board/freescale/p1_p2_rdb_pc/spl.c
|
||||
* original copyright follows:
|
||||
* Copyright 2013 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include <hwconfig.h>
|
||||
#include <pci.h>
|
||||
#include <i2c.h>
|
||||
#include <miiphy.h>
|
||||
#include <libfdt.h>
|
||||
#include <fdt_support.h>
|
||||
#include <fsl_mdio.h>
|
||||
#include <tsec.h>
|
||||
#include <ioports.h>
|
||||
#include <netdev.h>
|
||||
#include <micrel.h>
|
||||
#include <spi_flash.h>
|
||||
#include <mmc.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <asm/fsl_serdes.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/mmu.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/immap_85xx.h>
|
||||
#include <asm/fsl_pci.h>
|
||||
#include <fsl_ddr_sdram.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/fsl_law.h>
|
||||
#include <asm/fsl_lbc.h>
|
||||
#include <asm/mp.h>
|
||||
#include "ucp1020.h"
|
||||
|
||||
void spi_set_speed(struct spi_slave *slave, uint hz)
|
||||
{
|
||||
/* TO DO: It's actially have to be in spi/ */
|
||||
}
|
||||
|
||||
/*
|
||||
* To be compatible with cmd_gpio
|
||||
*/
|
||||
int name_to_gpio(const char *name)
|
||||
{
|
||||
int gpio = 31 - simple_strtoul(name, NULL, 10);
|
||||
|
||||
if (gpio < 16)
|
||||
gpio = -1;
|
||||
|
||||
return gpio;
|
||||
}
|
||||
|
||||
void board_gpio_init(void)
|
||||
{
|
||||
int i;
|
||||
char envname[8], *val;
|
||||
|
||||
for (i = 0; i < GPIO_MAX_NUM; i++) {
|
||||
sprintf(envname, "GPIO%d", i);
|
||||
val = getenv(envname);
|
||||
if (val) {
|
||||
char direction = toupper(val[0]);
|
||||
char level = toupper(val[1]);
|
||||
|
||||
if (direction == 'I') {
|
||||
gpio_direction_input(i);
|
||||
} else {
|
||||
if (direction == 'O') {
|
||||
if (level == '1')
|
||||
gpio_direction_output(i, 1);
|
||||
else
|
||||
gpio_direction_output(i, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val = getenv("PCIE_OFF");
|
||||
if (val) {
|
||||
gpio_direction_input(GPIO_PCIE1_EN);
|
||||
gpio_direction_input(GPIO_PCIE2_EN);
|
||||
} else {
|
||||
gpio_direction_output(GPIO_PCIE1_EN, 1);
|
||||
gpio_direction_output(GPIO_PCIE2_EN, 1);
|
||||
}
|
||||
|
||||
val = getenv("SDHC_CDWP_OFF");
|
||||
if (!val) {
|
||||
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
||||
|
||||
setbits_be32(&gur->pmuxcr,
|
||||
(MPC85xx_PMUXCR_SDHC_CD | MPC85xx_PMUXCR_SDHC_WP));
|
||||
}
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
return 0; /* Just in case. Could be disable in config file */
|
||||
}
|
||||
|
||||
int checkboard(void)
|
||||
{
|
||||
printf("Board: %s\n", CONFIG_BOARDNAME_LOCAL);
|
||||
board_gpio_init();
|
||||
printf("SD/MMC: 4-bit Mode\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
void pci_init_board(void)
|
||||
{
|
||||
fsl_pcie_init_board(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
|
||||
const u8 flash_esel = find_tlb_idx((void *)flashbase, 1);
|
||||
|
||||
/*
|
||||
* Remap Boot flash region to caching-inhibited
|
||||
* so that flash can be erased properly.
|
||||
*/
|
||||
|
||||
/* Flush d-cache and invalidate i-cache of any FLASH data */
|
||||
flush_dcache();
|
||||
invalidate_icache();
|
||||
|
||||
/* invalidate existing TLB entry for flash */
|
||||
disable_tlb(flash_esel);
|
||||
|
||||
set_tlb(1, flashbase, CONFIG_SYS_FLASH_BASE_PHYS, /* tlb, epn, rpn */
|
||||
MAS3_SX | MAS3_SW | MAS3_SR, MAS2_I | MAS2_G, /* perms, wimge */
|
||||
0, flash_esel, BOOKE_PAGESZ_64M, 1);/* ts, esel, tsize, iprot */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
{
|
||||
#if defined(CONFIG_PHY_MICREL_KSZ9021)
|
||||
int regval;
|
||||
static int cnt;
|
||||
|
||||
if (cnt++ == 0)
|
||||
printf("PHYs address [");
|
||||
|
||||
if (phydev->addr == TSEC1_PHY_ADDR || phydev->addr == TSEC3_PHY_ADDR) {
|
||||
regval =
|
||||
ksz9021_phy_extended_read(phydev,
|
||||
MII_KSZ9021_EXT_STRAP_STATUS);
|
||||
/*
|
||||
* min rx data delay
|
||||
*/
|
||||
ksz9021_phy_extended_write(phydev,
|
||||
MII_KSZ9021_EXT_RGMII_RX_DATA_SKEW,
|
||||
0x6666);
|
||||
/*
|
||||
* max rx/tx clock delay, min rx/tx control
|
||||
*/
|
||||
ksz9021_phy_extended_write(phydev,
|
||||
MII_KSZ9021_EXT_RGMII_CLOCK_SKEW,
|
||||
0xf6f6);
|
||||
printf("0x%x", (regval & 0x1f));
|
||||
} else {
|
||||
printf("0x%x", (TSEC2_PHY_ADDR & 0x1f));
|
||||
}
|
||||
if (cnt == 3)
|
||||
printf("] ");
|
||||
else
|
||||
printf(",");
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_PHY_MICREL_KSZ9031_DEBUG)
|
||||
regval = ksz9031_phy_extended_read(phydev, 2, 0x01, 0x4000);
|
||||
if (regval >= 0)
|
||||
printf(" (ADDR 0x%x) ", regval & 0x1f);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int last_stage_init(void)
|
||||
{
|
||||
static char newkernelargs[256];
|
||||
static u8 id1[16];
|
||||
static u8 id2;
|
||||
struct mmc *mmc;
|
||||
char *sval, *kval;
|
||||
|
||||
if (i2c_read(CONFIG_SYS_I2C_IDT6V49205B, 7, 1, &id1[0], 2) < 0) {
|
||||
printf("Error reading i2c IDT6V49205B information!\n");
|
||||
} else {
|
||||
printf("IDT6V49205B(0x%02x): ready\n", id1[1]);
|
||||
i2c_read(CONFIG_SYS_I2C_IDT6V49205B, 4, 1, &id1[0], 2);
|
||||
if (!(id1[1] & 0x02)) {
|
||||
id1[1] |= 0x02;
|
||||
i2c_write(CONFIG_SYS_I2C_IDT6V49205B, 4, 1, &id1[0], 2);
|
||||
asm("nop; nop");
|
||||
}
|
||||
}
|
||||
|
||||
if (i2c_read(CONFIG_SYS_I2C_NCT72_ADDR, 0xFE, 1, &id2, 1) < 0)
|
||||
printf("Error reading i2c NCT72 information!\n");
|
||||
else
|
||||
printf("NCT72(0x%x): ready\n", id2);
|
||||
|
||||
kval = getenv("kernelargs");
|
||||
|
||||
mmc = find_mmc_device(0);
|
||||
if (mmc)
|
||||
if (!mmc_init(mmc)) {
|
||||
printf("MMC/SD card detected\n");
|
||||
if (kval) {
|
||||
int n = strlen(defkargs);
|
||||
char *tmp = strstr(kval, defkargs);
|
||||
|
||||
*tmp = 0;
|
||||
strcpy(newkernelargs, kval);
|
||||
strcat(newkernelargs, " ");
|
||||
strcat(newkernelargs, mmckargs);
|
||||
strcat(newkernelargs, " ");
|
||||
strcat(newkernelargs, &tmp[n]);
|
||||
setenv("kernelargs", newkernelargs);
|
||||
} else {
|
||||
setenv("kernelargs", mmckargs);
|
||||
}
|
||||
}
|
||||
get_arc_info();
|
||||
|
||||
if (kval) {
|
||||
sval = getenv("SERIAL");
|
||||
if (sval) {
|
||||
strcpy(newkernelargs, "SN=");
|
||||
strcat(newkernelargs, sval);
|
||||
strcat(newkernelargs, " ");
|
||||
strcat(newkernelargs, kval);
|
||||
setenv("kernelargs", newkernelargs);
|
||||
}
|
||||
} else {
|
||||
printf("Error reading kernelargs env variable!\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
struct fsl_pq_mdio_info mdio_info;
|
||||
struct tsec_info_struct tsec_info[4];
|
||||
#ifdef CONFIG_TSEC2
|
||||
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
||||
#endif
|
||||
int num = 0;
|
||||
|
||||
#ifdef CONFIG_TSEC1
|
||||
SET_STD_TSEC_INFO(tsec_info[num], 1);
|
||||
num++;
|
||||
#endif
|
||||
#ifdef CONFIG_TSEC2
|
||||
SET_STD_TSEC_INFO(tsec_info[num], 2);
|
||||
if (is_serdes_configured(SGMII_TSEC2)) {
|
||||
if (!(in_be32(&gur->pordevsr) & MPC85xx_PORDEVSR_SGMII2_DIS)) {
|
||||
puts("eTSEC2 is in sgmii mode.\n");
|
||||
tsec_info[num].flags |= TSEC_SGMII;
|
||||
tsec_info[num].phyaddr = TSEC2_PHY_ADDR_SGMII;
|
||||
}
|
||||
}
|
||||
num++;
|
||||
#endif
|
||||
#ifdef CONFIG_TSEC3
|
||||
SET_STD_TSEC_INFO(tsec_info[num], 3);
|
||||
num++;
|
||||
#endif
|
||||
|
||||
if (!num) {
|
||||
printf("No TSECs initialized\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
mdio_info.regs = (struct tsec_mii_mng *)CONFIG_SYS_MDIO_BASE_ADDR;
|
||||
mdio_info.name = DEFAULT_MII_NAME;
|
||||
|
||||
fsl_pq_mdio_init(bis, &mdio_info);
|
||||
|
||||
tsec_eth_init(bis, tsec_info, num);
|
||||
|
||||
return pci_eth_init(bis);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF_BOARD_SETUP
|
||||
int ft_board_setup(void *blob, bd_t *bd)
|
||||
{
|
||||
phys_addr_t base;
|
||||
phys_size_t size;
|
||||
const char *soc_usb_compat = "fsl-usb2-dr";
|
||||
int err, usb1_off, usb2_off;
|
||||
|
||||
ft_cpu_setup(blob, bd);
|
||||
|
||||
base = getenv_bootm_low();
|
||||
size = getenv_bootm_size();
|
||||
|
||||
fdt_fixup_memory(blob, (u64)base, (u64)size);
|
||||
|
||||
FT_FSL_PCI_SETUP;
|
||||
|
||||
#if defined(CONFIG_HAS_FSL_DR_USB)
|
||||
fdt_fixup_dr_usb(blob, bd);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SDCARD) || defined(CONFIG_SPIFLASH)
|
||||
/* Delete eLBC node as it is muxed with USB2 controller */
|
||||
if (hwconfig("usb2")) {
|
||||
const char *soc_elbc_compat = "fsl,p1020-elbc";
|
||||
int off = fdt_node_offset_by_compatible(blob, -1,
|
||||
soc_elbc_compat);
|
||||
if (off < 0) {
|
||||
printf
|
||||
("WARNING: could not find compatible node %s: %s\n",
|
||||
soc_elbc_compat, fdt_strerror(off));
|
||||
return off;
|
||||
}
|
||||
err = fdt_del_node(blob, off);
|
||||
if (err < 0) {
|
||||
printf("WARNING: could not remove %s: %s\n",
|
||||
soc_elbc_compat, fdt_strerror(err));
|
||||
}
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Delete USB2 node as it is muxed with eLBC */
|
||||
usb1_off = fdt_node_offset_by_compatible(blob, -1, soc_usb_compat);
|
||||
if (usb1_off < 0) {
|
||||
printf("WARNING: could not find compatible node %s: %s.\n",
|
||||
soc_usb_compat, fdt_strerror(usb1_off));
|
||||
return usb1_off;
|
||||
}
|
||||
usb2_off =
|
||||
fdt_node_offset_by_compatible(blob, usb1_off, soc_usb_compat);
|
||||
if (usb2_off < 0) {
|
||||
printf("WARNING: could not find compatible node %s: %s.\n",
|
||||
soc_usb_compat, fdt_strerror(usb2_off));
|
||||
return usb2_off;
|
||||
}
|
||||
err = fdt_del_node(blob, usb2_off);
|
||||
if (err < 0) {
|
||||
printf("WARNING: could not remove %s: %s.\n",
|
||||
soc_usb_compat, fdt_strerror(err));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
44
u-boot/board/Arcturus/ucp1020/ucp1020.h
Normal file
44
u-boot/board/Arcturus/ucp1020/ucp1020.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 2013-2015 Arcturus Networks, Inc.
|
||||
* http://www.arcturusnetworks.com/products/ucp1020/
|
||||
* by Oleksandr G Zhadan et al.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __UCP1020_H__
|
||||
#define __UCP1020_H__
|
||||
|
||||
#define GPIO0 31
|
||||
#define GPIO1 30
|
||||
#define GPIO2 29
|
||||
#define GPIO3 28
|
||||
#define GPIO4 27
|
||||
#define GPIO5 26
|
||||
#define GPIO6 25
|
||||
#define GPIO7 24
|
||||
#define GPIO8 23
|
||||
#define GPIO9 22
|
||||
#define GPIO10 21
|
||||
#define GPIO11 20
|
||||
#define GPIO12 19
|
||||
#define GPIO13 18
|
||||
#define GPIO14 17
|
||||
#define GPIO15 16
|
||||
#define GPIO_MAX_NUM 16
|
||||
|
||||
#define GPIO_SDHC_CD GPIO8
|
||||
#define GPIO_SDHC_WP GPIO9
|
||||
#define GPIO_USB_PCTL0 GPIO10
|
||||
#define GPIO_PCIE1_EN GPIO11
|
||||
#define GPIO_PCIE2_EN GPIO10
|
||||
#define GPIO_USB_PCTL1 GPIO11
|
||||
|
||||
#define GPIO_WD GPIO15
|
||||
|
||||
static char *defkargs = "root=/dev/mtdblock1 rootfstype=cramfs ro";
|
||||
static char *mmckargs = "root=/dev/mmcblk0p1 rootwait rw";
|
||||
|
||||
int get_arc_info(void);
|
||||
|
||||
#endif
|
||||
12
u-boot/board/Barix/ipam390/Kconfig
Normal file
12
u-boot/board/Barix/ipam390/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
if TARGET_IPAM390
|
||||
|
||||
config SYS_BOARD
|
||||
default "ipam390"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "Barix"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "ipam390"
|
||||
|
||||
endif
|
||||
6
u-boot/board/Barix/ipam390/MAINTAINERS
Normal file
6
u-boot/board/Barix/ipam390/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
IPAM390 BOARD
|
||||
M: Heiko Schocher <hs@denx.de>
|
||||
S: Maintained
|
||||
F: board/Barix/ipam390/
|
||||
F: include/configs/ipam390.h
|
||||
F: configs/ipam390_defconfig
|
||||
10
u-boot/board/Barix/ipam390/Makefile
Normal file
10
u-boot/board/Barix/ipam390/Makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
#
|
||||
# (C) Copyright 2000, 2001, 2002
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += ipam390.o
|
||||
229
u-boot/board/Barix/ipam390/README.ipam390
Normal file
229
u-boot/board/Barix/ipam390/README.ipam390
Normal file
@@ -0,0 +1,229 @@
|
||||
Summary
|
||||
=======
|
||||
The README is for the boot procedure on the ipam390 board
|
||||
|
||||
In the context of U-Boot, the board is booted in three stages. The initial
|
||||
bootloader which executes upon reset is the ROM Boot Loader (RBL) and sits
|
||||
in the internal ROM. The RBL initializes the internal memory and then
|
||||
depending on the exact board and pin configurations will initialize another
|
||||
controller (such as NAND) to continue the boot process by loading
|
||||
the secondary program loader (SPL). The SPL will initialize the system
|
||||
further (some clocks, SDRAM). As on this board is used the falcon boot
|
||||
mode, now 2 ways are possible depending on the GPIO 7_14 input pin,
|
||||
connected with the "soft reset switch"
|
||||
|
||||
If this pin is logical 1 (high level):
|
||||
spl code starts the kernel image without delay
|
||||
|
||||
If this pin is logical 0 (low level):
|
||||
spl code starts the u-boot image
|
||||
|
||||
AIS is an image format defined by TI for the images that are to be loaded
|
||||
to memory by the RBL. The image is divided into a series of sections and
|
||||
the image's entry point is specified. Each section comes with meta data
|
||||
like the target address the section is to be copied to and the size of the
|
||||
section, which is used by the RBL to load the image. At the end of the
|
||||
image the RBL jumps to the image entry point. The AIS format allows for
|
||||
other things such as programming the clocks and SDRAM if the header is
|
||||
programmed for it. We do not take advantage of this and instead use SPL as
|
||||
it allows for additional flexibility (run-time detect of board revision,
|
||||
loading the next image from a different media, etc).
|
||||
|
||||
Compilation
|
||||
===========
|
||||
run "./MAKEALL ipam390" in the u-boot source tree.
|
||||
Once this build completes you will have a u-boot.ais file that needs to
|
||||
be written to the nand flash.
|
||||
|
||||
Flashing the images to NAND
|
||||
==========================
|
||||
The AIS image can be written to NAND flash using the following commands.
|
||||
Assuming that the network is configured and enabled and the u-boot.ais file
|
||||
is tftp'able.
|
||||
|
||||
U-Boot > print upd_uboot
|
||||
upd_uboot=tftp c0000000 ${u-boot};nand erase.part u-boot;nand write c0000000 20000 ${filesize}
|
||||
U-Boot >
|
||||
U-Boot > run upd_uboot
|
||||
Using DaVinci-EMAC device
|
||||
TFTP from server 192.168.1.1; our IP address is 192.168.20.71
|
||||
Filename '/tftpboot/ipam390/u-boot.ais'.
|
||||
Load address: 0xc0000000
|
||||
Loading: ##################################
|
||||
1.5 MiB/s
|
||||
done
|
||||
Bytes transferred = 493716 (78894 hex)
|
||||
|
||||
NAND erase.part: device 0 offset 0x20000, size 0x160000
|
||||
Erasing at 0x160000 -- 100% complete.
|
||||
OK
|
||||
|
||||
NAND write: device 0 offset 0x20000, size 0x78894
|
||||
493716 bytes written: OK
|
||||
U-Boot >
|
||||
|
||||
Recovery
|
||||
========
|
||||
|
||||
In the case of a "bricked" board, you need to use the TI tools found
|
||||
here[1] to create an uboot-uart-ais.bin file
|
||||
|
||||
- cd to the u-boot source tree
|
||||
|
||||
- compile the u-boot for the ipam390 board:
|
||||
$ ./MAKEALL ipam390
|
||||
|
||||
-> Now we shall have u-boot.bin
|
||||
|
||||
- Create u-boot-uart-ais.bin
|
||||
$ mono HexAIS_OMAP-L138.exe -entrypoint 0xC1080000 -ini
|
||||
ipam390-ais-uart.cfg -o ./uboot-uart-ais.bin ./u-boot.bin@0xC1080000;
|
||||
|
||||
Note: The ipam390-ais-uart.cfg is found in the board directory
|
||||
for the ipam390 board, u-boot:/board/Barix/ipam390/ipam390-ais-uart.cfg
|
||||
|
||||
- We can now run bootloader on IPAM390 via UART using the command below:
|
||||
|
||||
$ mono ./slh_OMAP-L138.exe -waitForDevice -v -p /dev/tty.UC-232AC uboot-uart-ais.bin
|
||||
NOTE: Do not cancel the command execution! The command takes 20+ seconds
|
||||
to upload u-boot over serial and run it!
|
||||
Outcome:
|
||||
Waiting for the OMAP-L138...
|
||||
(AIS Parse): Read magic word 0x41504954.
|
||||
(AIS Parse): Waiting for BOOTME... (power on or reset target now)
|
||||
(AIS Parse): BOOTME received!
|
||||
(AIS Parse): Performing Start-Word Sync...
|
||||
(AIS Parse): Performing Ping Opcode Sync...
|
||||
(AIS Parse): Processing command 0: 0x5853590D.
|
||||
(AIS Parse): Performing Opcode Sync...
|
||||
(AIS Parse): Executing function...
|
||||
(AIS Parse): Processing command 1: 0x5853590D.
|
||||
(AIS Parse): Performing Opcode Sync...
|
||||
(AIS Parse): Executing function...
|
||||
(AIS Parse): Processing command 2: 0x5853590D.
|
||||
(AIS Parse): Performing Opcode Sync...
|
||||
(AIS Parse): Executing function...
|
||||
(AIS Parse): Processing command 3: 0x5853590D.
|
||||
(AIS Parse): Performing Opcode Sync...
|
||||
(AIS Parse): Executing function...
|
||||
(AIS Parse): Processing command 4: 0x5853590D.
|
||||
(AIS Parse): Performing Opcode Sync...
|
||||
(AIS Parse): Executing function...
|
||||
(AIS Parse): Processing command 5: 0x58535901.
|
||||
(AIS Parse): Performing Opcode Sync...
|
||||
(AIS Parse): Loading section...
|
||||
(AIS Parse): Loaded 326516-Byte section to address 0xC1080000.
|
||||
(AIS Parse): Processing command 6: 0x58535906.
|
||||
(AIS Parse): Performing Opcode Sync...
|
||||
(AIS Parse): Performing jump and close...
|
||||
(AIS Parse): AIS complete. Jump to address 0xC1080000.
|
||||
(AIS Parse): Waiting for DONE...
|
||||
(AIS Parse): Boot completed successfully.
|
||||
|
||||
Operation completed successfully.
|
||||
|
||||
Falcon Bootmode (boot linux without booting U-Boot)
|
||||
===================================================
|
||||
|
||||
The Falcon Mode extends this way allowing to start the Linux kernel directly
|
||||
from SPL. A new command is added to U-Boot to prepare the parameters that SPL
|
||||
must pass to the kernel, using ATAGS or Device Tree.
|
||||
|
||||
In normal mode, these parameters are generated each time before
|
||||
loading the kernel, passing to Linux the address in memory where
|
||||
the parameters can be read.
|
||||
With Falcon Mode, this snapshot can be saved into persistent storage and SPL is
|
||||
informed to load it before running the kernel.
|
||||
|
||||
To boot the kernel, these steps under a Falcon-aware U-Boot are required:
|
||||
|
||||
1. Boot the board into U-Boot.
|
||||
Use the "spl export" command to generate the kernel parameters area or the DT.
|
||||
U-Boot runs as when it boots the kernel, but stops before passing the control
|
||||
to the kernel.
|
||||
|
||||
Here the command sequence for the ipam390 board:
|
||||
- load the linux kernel image into ram:
|
||||
|
||||
U-Boot > nand read c0100000 2 200000 400000
|
||||
|
||||
NAND read: device 0 offset 0x200000, size 0x400000
|
||||
4194304 bytes read: OK
|
||||
|
||||
- generate the bootparms image:
|
||||
|
||||
U-Boot > spl export atags c0100000
|
||||
## Booting kernel from Legacy Image at c0100000 ...
|
||||
Image Name: Linux-3.5.1
|
||||
Image Type: ARM Linux Kernel Image (uncompressed)
|
||||
Data Size: 2504280 Bytes = 2.4 MiB
|
||||
Load Address: c0008000
|
||||
Entry Point: c0008000
|
||||
Verifying Checksum ... OK
|
||||
Loading Kernel Image ... OK
|
||||
subcommand not supported
|
||||
subcommand not supported
|
||||
Argument image is now in RAM at: 0xc0000100
|
||||
|
||||
- copy the bootparms image into nand:
|
||||
|
||||
U-Boot > mtdparts
|
||||
|
||||
device nand0 <davinci_nand.0>, # parts = 6
|
||||
#: name size offset mask_flags
|
||||
0: u-boot-env 0x00020000 0x00000000 0
|
||||
1: u-boot 0x00160000 0x00020000 0
|
||||
2: bootparms 0x00020000 0x00180000 0
|
||||
3: factory-info 0x00060000 0x001a0000 0
|
||||
4: kernel 0x00400000 0x00200000 0
|
||||
5: rootfs 0x07a00000 0x00600000 0
|
||||
|
||||
active partition: nand0,0 - (u-boot-env) 0x00020000 @ 0x00000000
|
||||
|
||||
defaults:
|
||||
mtdids : nand0=davinci_nand.0
|
||||
mtdparts: mtdparts=davinci_nand.0:128k(u-boot-env),1408k(u-boot),128k(bootparms),384k(factory-info),4M(kernel),-(rootfs)
|
||||
U-Boot > nand erase.part bootparms
|
||||
|
||||
NAND erase.part: device 0 offset 0x180000, size 0x20000
|
||||
Erasing at 0x180000 -- 100% complete.
|
||||
OK
|
||||
U-Boot > nand write c0000100 180000 20000
|
||||
|
||||
NAND write: device 0 offset 0x180000, size 0x20000
|
||||
131072 bytes written: OK
|
||||
U-Boot >
|
||||
|
||||
You can use also the predefined U-Boot Environment variable "setbootparms",
|
||||
which will do all the above steps in one command:
|
||||
|
||||
U-Boot > print setbootparms
|
||||
setbootparms=nand read c0100000 200000 400000;spl export atags c0100000;nand erase.part bootparms;nand write c0000100 180000 20000
|
||||
U-Boot > run setbootparms
|
||||
|
||||
NAND read: device 0 offset 0x200000, size 0x400000
|
||||
4194304 bytes read: OK
|
||||
## Booting kernel from Legacy Image at c0100000 ...
|
||||
Image Name: Linux-3.5.1
|
||||
Image Type: ARM Linux Kernel Image (uncompressed)
|
||||
Data Size: 2504280 Bytes = 2.4 MiB
|
||||
Load Address: c0008000
|
||||
Entry Point: c0008000
|
||||
Verifying Checksum ... OK
|
||||
Loading Kernel Image ... OK
|
||||
subcommand not supported
|
||||
subcommand not supported
|
||||
Argument image is now in RAM at: 0xc0000100
|
||||
|
||||
NAND erase.part: device 0 offset 0x180000, size 0x20000
|
||||
Erasing at 0x180000 -- 100% complete.
|
||||
OK
|
||||
|
||||
NAND write: device 0 offset 0x180000, size 0x20000
|
||||
131072 bytes written: OK
|
||||
U-Boot >
|
||||
|
||||
Links
|
||||
=====
|
||||
[1]
|
||||
http://sourceforge.net/projects/dvflashutils/files/OMAP-L138/
|
||||
202
u-boot/board/Barix/ipam390/ipam390-ais-uart.cfg
Normal file
202
u-boot/board/Barix/ipam390/ipam390-ais-uart.cfg
Normal file
@@ -0,0 +1,202 @@
|
||||
; General settings that can be overwritten in the host code
|
||||
; that calls the AISGen library.
|
||||
[General]
|
||||
|
||||
; Can be 8 or 16 - used in emifa
|
||||
busWidth=8
|
||||
|
||||
; SPIMASTER,I2CMASTER,EMIFA,NAND,EMAC,UART,PCI,HPI,USB,MMC_SD,VLYNQ,RAW
|
||||
BootMode=UART
|
||||
|
||||
; 8,16,24 - used for SPI,I2C
|
||||
;AddrWidth=8
|
||||
|
||||
; NO_CRC,SECTION_CRC,SINGLE_CRC
|
||||
crcCheckType=NO_CRC
|
||||
|
||||
; This section allows setting the PLL0 system clock with a
|
||||
; specified multiplier and divider as shown. The clock source
|
||||
; can also be chosen for internal or external.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; PLL0CFG0: | CLKMODE| PLLM | PREDIV | POSTDIV|
|
||||
; PLL0CFG1: | RSVD | PLLDIV1| PLLDIV3| PLLDIV7|
|
||||
;[PLL0CONFIG]
|
||||
;PLL0CFG0 = 0x00180001
|
||||
;PLL0CFG1 = 0x00000205
|
||||
|
||||
[PLLANDCLOCKCONFIG]
|
||||
PLL0CFG0 = 0x00180001
|
||||
PLL0CFG1 = 0x00000205
|
||||
PERIPHCLKCFG = 0x00000051
|
||||
|
||||
; This section allows setting up the PLL1. Usually this will
|
||||
; take place as part of the EMIF3a DDR setup. The format of
|
||||
; the input args is as follows:
|
||||
; |------24|------16|-------8|-------0|
|
||||
; PLL1CFG0: | PLLM| POSTDIV| PLLDIV1| PLLDIV2|
|
||||
; PLL1CFG1: | RSVD | PLLDIV3|
|
||||
[PLL1CONFIG]
|
||||
PLL1CFG0 = 0x18010001
|
||||
PLL1CFG1 = 0x00000002
|
||||
|
||||
; This section lets us configure the peripheral interface
|
||||
; of the current booting peripheral (I2C, SPI, or UART).
|
||||
; Use with caution. The format of the PERIPHCLKCFG field
|
||||
; is as follows:
|
||||
; SPI: |------24|------16|-------8|-------0|
|
||||
; | RSVD |PRESCALE|
|
||||
;
|
||||
; I2C: |------24|------16|-------8|-------0|
|
||||
; | RSVD |PRESCALE| CLKL | CLKH |
|
||||
;
|
||||
; UART: |------24|------16|-------8|-------0|
|
||||
; | RSVD | OSR | DLH | DLL |
|
||||
[PERIPHCLKCFG]
|
||||
PERIPHCLKCFG = 0x00000051
|
||||
|
||||
; This section can be used to configure the PLL1 and the EMIF3a registers
|
||||
; for starting the DDR2 interface.
|
||||
; See PLL1CONFIG section for the format of the PLL1CFG fields.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; PLL1CFG0: | PLL1CFG |
|
||||
; PLL1CFG1: | PLL1CFG |
|
||||
; DDRPHYC1R: | DDRPHYC1R |
|
||||
; SDCR: | SDCR |
|
||||
; SDTIMR: | SDTIMR |
|
||||
; SDTIMR2: | SDTIMR2 |
|
||||
; SDRCR: | SDRCR |
|
||||
; CLK2XSRC: | CLK2XSRC |
|
||||
[EMIF3DDR]
|
||||
PLL1CFG0 = 0x18010001
|
||||
PLL1CFG1 = 0x00000002
|
||||
DDRPHYC1R = 0x000000C2
|
||||
SDCR = 0x0017C432
|
||||
SDTIMR = 0x26922A09
|
||||
SDTIMR2 = 0x4414C722
|
||||
SDRCR = 0x00000498
|
||||
CLK2XSRC = 0x00000000
|
||||
|
||||
; This section can be used to configure the EMIFA to use
|
||||
; CS0 as an SDRAM interface. The fields required to do this
|
||||
; are given below.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; SDBCR: | SDBCR |
|
||||
; SDTIMR: | SDTIMR |
|
||||
; SDRSRPDEXIT: | SDRSRPDEXIT |
|
||||
; SDRCR: | SDRCR |
|
||||
; DIV4p5_CLK_ENABLE: | DIV4p5_CLK_ENABLE |
|
||||
;[EMIF25SDRAM]
|
||||
;SDBCR = 0x00004421
|
||||
;SDTIMR = 0x42215810
|
||||
;SDRSRPDEXIT = 0x00000009
|
||||
;SDRCR = 0x00000410
|
||||
;DIV4p5_CLK_ENABLE = 0x00000001
|
||||
|
||||
; This section can be used to configure the async chip selects
|
||||
; of the EMIFA (CS2-CS5). The fields required to do this
|
||||
; are given below.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; A1CR: | A1CR |
|
||||
; A2CR: | A2CR |
|
||||
; A3CR: | A3CR |
|
||||
; A4CR: | A4CR |
|
||||
; NANDFCR: | NANDFCR |
|
||||
;[EMIF25ASYNC]
|
||||
;A1CR = 0x00000000
|
||||
;A2CR = 0x00000000
|
||||
;A3CR = 0x00000000
|
||||
;A4CR = 0x00000000
|
||||
;NANDFCR = 0x00000000
|
||||
[EMIF25ASYNC]
|
||||
A1CR = 0x00000000
|
||||
A2CR = 0x04202110
|
||||
A3CR = 0x00000000
|
||||
A4CR = 0x00000000
|
||||
NANDFCR = 0x00000012
|
||||
|
||||
; This section should be used in place of PLL0CONFIG when
|
||||
; the I2C, SPI, or UART modes are being used. This ensures that
|
||||
; the system PLL and the peripheral's clocks are changed together.
|
||||
; See PLL0CONFIG section for the format of the PLL0CFG fields.
|
||||
; See PERIPHCLKCFG section for the format of the CLKCFG field.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; PLL0CFG0: | PLL0CFG |
|
||||
; PLL0CFG1: | PLL0CFG |
|
||||
; PERIPHCLKCFG: | CLKCFG |
|
||||
;[PLLANDCLOCKCONFIG]
|
||||
;PLL0CFG0 = 0x00180001
|
||||
;PLL0CFG1 = 0x00000205
|
||||
;PERIPHCLKCFG = 0x00010032
|
||||
|
||||
; This section should be used to setup the power state of modules
|
||||
; of the two PSCs. This section can be included multiple times to
|
||||
; allow the configuration of any or all of the device modules.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; LPSCCFG: | PSCNUM | MODULE | PD | STATE |
|
||||
;[PSCCONFIG]
|
||||
;LPSCCFG=
|
||||
|
||||
; This section allows setting of a single PINMUX register.
|
||||
; This section can be included multiple times to allow setting
|
||||
; as many PINMUX registers as needed.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; REGNUM: | regNum |
|
||||
; MASK: | mask |
|
||||
; VALUE: | value |
|
||||
;[PINMUX]
|
||||
;REGNUM = 5
|
||||
;MASK = 0x00FF0000
|
||||
;VALUE = 0x00880000
|
||||
|
||||
; No Params required - simply include this section for the fast boot
|
||||
; function to be called
|
||||
;[FASTBOOT]
|
||||
|
||||
; This section allows setting up the PLL1. Usually this will
|
||||
; take place as part of the EMIF3a DDR setup. The format of
|
||||
; the input args is as follows:
|
||||
; |------24|------16|-------8|-------0|
|
||||
; PLL1CFG0: | PLLM| POSTDIV| PLLDIV1| PLLDIV2|
|
||||
; PLL1CFG1: | RSVD | PLLDIV3|
|
||||
;[PLL1CONFIG]
|
||||
;PLL1CFG0 = 0x15010001
|
||||
;PLL1CFG1 = 0x00000002
|
||||
|
||||
; This section can be used to configure the PLL1 and the EMIF3a registers
|
||||
; for starting the DDR2 interface on ARM-boot D800K002 devices.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; DDRPHYC1R: | DDRPHYC1R |
|
||||
; SDCR: | SDCR |
|
||||
; SDTIMR: | SDTIMR |
|
||||
; SDTIMR2: | SDTIMR2 |
|
||||
; SDRCR: | SDRCR |
|
||||
; CLK2XSRC: | CLK2XSRC |
|
||||
;[ARM_EMIF3DDR_PATCHFXN]
|
||||
;DDRPHYC1R = 0x000000C2
|
||||
;SDCR = 0x0017C432
|
||||
;SDTIMR = 0x26922A09
|
||||
;SDTIMR2 = 0x4414C722
|
||||
;SDRCR = 0x00000498
|
||||
;CLK2XSRC = 0x00000000
|
||||
|
||||
; This section can be used to configure the PLL1 and the EMIF3a registers
|
||||
; for starting the DDR2 interface on DSP-boot D800K002 devices.
|
||||
; |------24|------16|-------8|-------0|
|
||||
; DDRPHYC1R: | DDRPHYC1R |
|
||||
; SDCR: | SDCR |
|
||||
; SDTIMR: | SDTIMR |
|
||||
; SDTIMR2: | SDTIMR2 |
|
||||
; SDRCR: | SDRCR |
|
||||
; CLK2XSRC: | CLK2XSRC |
|
||||
;[DSP_EMIF3DDR_PATCHFXN]
|
||||
;DDRPHYC1R = 0x000000C4
|
||||
;SDCR = 0x08134632
|
||||
;SDTIMR = 0x26922A09
|
||||
;SDTIMR2 = 0x0014C722
|
||||
;SDRCR = 0x00000492
|
||||
;CLK2XSRC = 0x00000000
|
||||
|
||||
;[INPUTFILE]
|
||||
;FILENAME=u-boot.bin
|
||||
;LOADADDRESS=0xC1080000
|
||||
;ENTRYPOINTADDRESS=0xC1080000
|
||||
337
u-boot/board/Barix/ipam390/ipam390.c
Normal file
337
u-boot/board/Barix/ipam390/ipam390.c
Normal file
@@ -0,0 +1,337 @@
|
||||
/*
|
||||
* (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
|
||||
* Based on:
|
||||
* U-Boot:board/davinci/da8xxevm/da850evm.c
|
||||
*
|
||||
* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
* Based on da830evm.c. Original Copyrights follow:
|
||||
*
|
||||
* Copyright (C) 2009 Nick Thompson, GE Fanuc, Ltd. <nick.thompson@gefanuc.com>
|
||||
* Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <i2c.h>
|
||||
#include <net.h>
|
||||
#include <netdev.h>
|
||||
#include <spi.h>
|
||||
#include <spi_flash.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/ti-common/davinci_nand.h>
|
||||
#include <asm/arch/emac_defs.h>
|
||||
#include <asm/arch/pinmux_defs.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/davinci_misc.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <hwconfig.h>
|
||||
#include <bootstage.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifdef CONFIG_DRIVER_TI_EMAC
|
||||
#ifdef CONFIG_DRIVER_TI_EMAC_USE_RMII
|
||||
#define HAS_RMII 1
|
||||
#else
|
||||
#define HAS_RMII 0
|
||||
#endif
|
||||
#endif /* CONFIG_DRIVER_TI_EMAC */
|
||||
|
||||
void dsp_lpsc_on(unsigned domain, unsigned int id)
|
||||
{
|
||||
dv_reg_p mdstat, mdctl, ptstat, ptcmd;
|
||||
struct davinci_psc_regs *psc_regs;
|
||||
|
||||
psc_regs = davinci_psc0_regs;
|
||||
mdstat = &psc_regs->psc0.mdstat[id];
|
||||
mdctl = &psc_regs->psc0.mdctl[id];
|
||||
ptstat = &psc_regs->ptstat;
|
||||
ptcmd = &psc_regs->ptcmd;
|
||||
|
||||
while (*ptstat & (0x1 << domain))
|
||||
;
|
||||
|
||||
if ((*mdstat & 0x1f) == 0x03)
|
||||
return; /* Already on and enabled */
|
||||
|
||||
*mdctl |= 0x03;
|
||||
|
||||
*ptcmd = 0x1 << domain;
|
||||
|
||||
while (*ptstat & (0x1 << domain))
|
||||
;
|
||||
while ((*mdstat & 0x1f) != 0x03)
|
||||
; /* Probably an overkill... */
|
||||
}
|
||||
|
||||
static void dspwake(void)
|
||||
{
|
||||
unsigned *resetvect = (unsigned *)DAVINCI_L3CBARAM_BASE;
|
||||
u32 val;
|
||||
|
||||
/* if the device is ARM only, return */
|
||||
if ((readl(CHIP_REV_ID_REG) & 0x3f) == 0x10)
|
||||
return;
|
||||
|
||||
if (hwconfig_subarg_cmp_f("dsp", "wake", "no", NULL))
|
||||
return;
|
||||
|
||||
*resetvect++ = 0x1E000; /* DSP Idle */
|
||||
/* clear out the next 10 words as NOP */
|
||||
memset(resetvect, 0, sizeof(unsigned) * 10);
|
||||
|
||||
/* setup the DSP reset vector */
|
||||
writel(DAVINCI_L3CBARAM_BASE, HOST1CFG);
|
||||
|
||||
dsp_lpsc_on(1, DAVINCI_LPSC_GEM);
|
||||
val = readl(PSC0_MDCTL + (15 * 4));
|
||||
val |= 0x100;
|
||||
writel(val, (PSC0_MDCTL + (15 * 4)));
|
||||
}
|
||||
|
||||
int misc_init_r(void)
|
||||
{
|
||||
dspwake();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct pinmux_config gpio_pins[] = {
|
||||
/* GP7[14] selects bootmode*/
|
||||
{ pinmux(16), 8, 3 }, /* GP7[14] */
|
||||
};
|
||||
|
||||
const struct pinmux_resource pinmuxes[] = {
|
||||
#ifdef CONFIG_DRIVER_TI_EMAC
|
||||
PINMUX_ITEM(emac_pins_mdio),
|
||||
#ifdef CONFIG_DRIVER_TI_EMAC_USE_RMII
|
||||
PINMUX_ITEM(emac_pins_rmii),
|
||||
#else
|
||||
PINMUX_ITEM(emac_pins_mii),
|
||||
#endif
|
||||
#endif
|
||||
PINMUX_ITEM(uart2_pins_txrx),
|
||||
PINMUX_ITEM(uart2_pins_rtscts),
|
||||
PINMUX_ITEM(uart0_pins_txrx),
|
||||
PINMUX_ITEM(uart0_pins_rtscts),
|
||||
#ifdef CONFIG_NAND_DAVINCI
|
||||
PINMUX_ITEM(emifa_pins_cs3),
|
||||
PINMUX_ITEM(emifa_pins_nand),
|
||||
#endif
|
||||
PINMUX_ITEM(gpio_pins),
|
||||
};
|
||||
|
||||
const int pinmuxes_size = ARRAY_SIZE(pinmuxes);
|
||||
|
||||
const struct lpsc_resource lpsc[] = {
|
||||
{ DAVINCI_LPSC_AEMIF }, /* NAND, NOR */
|
||||
{ DAVINCI_LPSC_EMAC }, /* image download */
|
||||
{ DAVINCI_LPSC_UART2 }, /* console */
|
||||
{ DAVINCI_LPSC_UART0 }, /* console */
|
||||
{ DAVINCI_LPSC_GPIO },
|
||||
};
|
||||
|
||||
const int lpsc_size = ARRAY_SIZE(lpsc);
|
||||
|
||||
#ifndef CONFIG_DA850_EVM_MAX_CPU_CLK
|
||||
#define CONFIG_DA850_EVM_MAX_CPU_CLK 300000000
|
||||
#endif
|
||||
|
||||
#define REV_AM18X_EVM 0x100
|
||||
|
||||
/*
|
||||
* get_board_rev() - setup to pass kernel board revision information
|
||||
* Returns:
|
||||
* bit[0-3] Maximum cpu clock rate supported by onboard SoC
|
||||
* 0000b - 300 MHz
|
||||
* 0001b - 372 MHz
|
||||
* 0010b - 408 MHz
|
||||
* 0011b - 456 MHz
|
||||
*/
|
||||
u32 get_board_rev(void)
|
||||
{
|
||||
char *s;
|
||||
u32 maxcpuclk = CONFIG_DA850_EVM_MAX_CPU_CLK;
|
||||
u32 rev = 0;
|
||||
|
||||
s = getenv("maxcpuclk");
|
||||
if (s)
|
||||
maxcpuclk = simple_strtoul(s, NULL, 10);
|
||||
|
||||
if (maxcpuclk >= 456000000)
|
||||
rev = 3;
|
||||
else if (maxcpuclk >= 408000000)
|
||||
rev = 2;
|
||||
else if (maxcpuclk >= 372000000)
|
||||
rev = 1;
|
||||
#ifdef CONFIG_DA850_AM18X_EVM
|
||||
rev |= REV_AM18X_EVM;
|
||||
#endif
|
||||
return rev;
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/*
|
||||
* Power on required peripherals
|
||||
* ARM does not have access by default to PSC0 and PSC1
|
||||
* assuming here that the DSP bootloader has set the IOPU
|
||||
* such that PSC access is available to ARM
|
||||
*/
|
||||
if (da8xx_configure_lpsc_items(lpsc, ARRAY_SIZE(lpsc)))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
#ifndef CONFIG_USE_IRQ
|
||||
irq_init();
|
||||
#endif
|
||||
|
||||
/* arch number of the board */
|
||||
gd->bd->bi_arch_number = MACH_TYPE_DAVINCI_DA850_EVM;
|
||||
|
||||
/* address of boot parameters */
|
||||
gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
|
||||
|
||||
/* setup the SUSPSRC for ARM to control emulation suspend */
|
||||
writel(readl(&davinci_syscfg_regs->suspsrc) &
|
||||
~(DAVINCI_SYSCFG_SUSPSRC_EMAC | DAVINCI_SYSCFG_SUSPSRC_I2C |
|
||||
DAVINCI_SYSCFG_SUSPSRC_SPI1 | DAVINCI_SYSCFG_SUSPSRC_TIMER0 |
|
||||
DAVINCI_SYSCFG_SUSPSRC_UART0),
|
||||
&davinci_syscfg_regs->suspsrc);
|
||||
|
||||
/* configure pinmux settings */
|
||||
if (davinci_configure_pin_mux_items(pinmuxes, ARRAY_SIZE(pinmuxes)))
|
||||
return 1;
|
||||
|
||||
#ifdef CONFIG_DRIVER_TI_EMAC
|
||||
davinci_emac_mii_mode_sel(HAS_RMII);
|
||||
#endif /* CONFIG_DRIVER_TI_EMAC */
|
||||
|
||||
/* enable the console UART */
|
||||
writel((DAVINCI_UART_PWREMU_MGMT_FREE | DAVINCI_UART_PWREMU_MGMT_URRST |
|
||||
DAVINCI_UART_PWREMU_MGMT_UTRST),
|
||||
#if (CONFIG_SYS_NS16550_COM1 == DAVINCI_UART0_BASE)
|
||||
&davinci_uart0_ctrl_regs->pwremu_mgmt);
|
||||
#else
|
||||
&davinci_uart2_ctrl_regs->pwremu_mgmt);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DRIVER_TI_EMAC
|
||||
/*
|
||||
* Initializes on-board ethernet controllers.
|
||||
*/
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
if (!davinci_emac_initialize()) {
|
||||
printf("Error: Ethernet init failed!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_DRIVER_TI_EMAC */
|
||||
|
||||
static int init_led(int gpio, char *name, int val)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(gpio, name);
|
||||
if (ret)
|
||||
return -1;
|
||||
ret = gpio_direction_output(gpio, val);
|
||||
if (ret)
|
||||
return -1;
|
||||
|
||||
return gpio;
|
||||
}
|
||||
|
||||
#define LED_ON 0
|
||||
#define LED_OFF 1
|
||||
|
||||
#if !defined(CONFIG_SPL_BUILD)
|
||||
#ifdef CONFIG_SHOW_BOOT_PROGRESS
|
||||
void show_boot_progress(int status)
|
||||
{
|
||||
static int red;
|
||||
static int green;
|
||||
|
||||
if (red == 0)
|
||||
red = init_led(CONFIG_IPAM390_GPIO_LED_RED, "red", LED_ON);
|
||||
if (red != CONFIG_IPAM390_GPIO_LED_RED)
|
||||
return;
|
||||
if (green == 0)
|
||||
green = init_led(CONFIG_IPAM390_GPIO_LED_GREEN, "green",
|
||||
LED_OFF);
|
||||
if (green != CONFIG_IPAM390_GPIO_LED_GREEN)
|
||||
return;
|
||||
|
||||
switch (status) {
|
||||
case BOOTSTAGE_ID_RUN_OS:
|
||||
/*
|
||||
* set normal state
|
||||
* LED Red : on
|
||||
* LED green: off
|
||||
*/
|
||||
gpio_set_value(red, LED_ON);
|
||||
gpio_set_value(green, LED_OFF);
|
||||
break;
|
||||
case BOOTSTAGE_ID_MAIN_LOOP:
|
||||
/*
|
||||
* U-Boot operation
|
||||
* LED Red : on
|
||||
* LED green: on
|
||||
*/
|
||||
gpio_set_value(red, LED_ON);
|
||||
gpio_set_value(green, LED_ON);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SPL_OS_BOOT
|
||||
int spl_start_uboot(void)
|
||||
{
|
||||
int ret;
|
||||
int bootmode = 0;
|
||||
|
||||
/*
|
||||
* GP7[14] selects bootmode:
|
||||
* 1: boot linux
|
||||
* 0: boot u-boot
|
||||
* if error accessing gpio boot U-Boot
|
||||
*
|
||||
* SPL bootmode
|
||||
* 0: boot linux
|
||||
* 1: boot u-boot
|
||||
*/
|
||||
ret = gpio_request(CONFIG_IPAM390_GPIO_BOOTMODE , "bootmode");
|
||||
if (ret)
|
||||
bootmode = 1;
|
||||
if (!bootmode) {
|
||||
ret = gpio_direction_input(CONFIG_IPAM390_GPIO_BOOTMODE);
|
||||
if (ret)
|
||||
bootmode = 1;
|
||||
}
|
||||
if (!bootmode)
|
||||
ret = gpio_get_value(CONFIG_IPAM390_GPIO_BOOTMODE);
|
||||
if (!bootmode)
|
||||
if (ret == 0)
|
||||
bootmode = 1;
|
||||
/*
|
||||
* LED red : on
|
||||
* LED green: off
|
||||
*/
|
||||
init_led(CONFIG_IPAM390_GPIO_LED_RED, "red", LED_ON);
|
||||
init_led(CONFIG_IPAM390_GPIO_LED_GREEN, "green", LED_OFF);
|
||||
return bootmode;
|
||||
}
|
||||
#endif
|
||||
58
u-boot/board/Barix/ipam390/u-boot-spl-ipam390.lds
Normal file
58
u-boot/board/Barix/ipam390/u-boot-spl-ipam390.lds
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* (C) Copyright 2002
|
||||
* Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
|
||||
*
|
||||
* (C) Copyright 2008
|
||||
* Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
|
||||
LENGTH = CONFIG_SPL_MAX_FOOTPRINT }
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(_start)
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x00000000;
|
||||
|
||||
. = ALIGN(4);
|
||||
.text :
|
||||
{
|
||||
__start = .;
|
||||
*(.vectors)
|
||||
arch/arm/cpu/arm926ejs/start.o (.text*)
|
||||
*(.text*)
|
||||
} >.sram
|
||||
|
||||
. = ALIGN(4);
|
||||
.rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram
|
||||
|
||||
. = ALIGN(4);
|
||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
||||
|
||||
. = ALIGN(4);
|
||||
.rel.dyn : {
|
||||
__rel_dyn_start = .;
|
||||
*(.rel*)
|
||||
__rel_dyn_end = .;
|
||||
} >.sram
|
||||
|
||||
.bss :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__bss_start = .;
|
||||
*(.bss*)
|
||||
. = ALIGN(4);
|
||||
__bss_end = .;
|
||||
} >.sram
|
||||
|
||||
__image_copy_end = .;
|
||||
|
||||
.end :
|
||||
{
|
||||
*(.__end)
|
||||
} >.sram
|
||||
}
|
||||
15
u-boot/board/BuR/brppt1/Kconfig
Normal file
15
u-boot/board/BuR/brppt1/Kconfig
Normal file
@@ -0,0 +1,15 @@
|
||||
if TARGET_BRPPT1
|
||||
|
||||
config SYS_BOARD
|
||||
default "brppt1"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "BuR"
|
||||
|
||||
config SYS_SOC
|
||||
default "am33xx"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "brppt1"
|
||||
|
||||
endif
|
||||
8
u-boot/board/BuR/brppt1/MAINTAINERS
Normal file
8
u-boot/board/BuR/brppt1/MAINTAINERS
Normal file
@@ -0,0 +1,8 @@
|
||||
BRPPT1 BOARD
|
||||
M: Hannes Schmelzer <hannes.schmelzer@br-automation.com>
|
||||
S: Maintained
|
||||
F: board/BuR/brppt1/
|
||||
F: include/configs/brppt1.h
|
||||
F: configs/brppt1_mmc_defconfig
|
||||
F: configs/brppt1_nand_defconfig
|
||||
F: configs/brppt1_spi_defconfig
|
||||
14
u-boot/board/BuR/brppt1/Makefile
Normal file
14
u-boot/board/BuR/brppt1/Makefile
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# Makefile
|
||||
#
|
||||
# Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
# Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
ifeq ($(CONFIG_SPL_BUILD),y)
|
||||
obj-y := mux.o
|
||||
endif
|
||||
obj-y += ../common/common.o
|
||||
obj-y += board.o
|
||||
174
u-boot/board/BuR/brppt1/board.c
Normal file
174
u-boot/board/BuR/brppt1/board.c
Normal file
@@ -0,0 +1,174 @@
|
||||
/*
|
||||
* board.c
|
||||
*
|
||||
* Board functions for B&R BRPPT1
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <errno.h>
|
||||
#include <spl.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/omap.h>
|
||||
#include <asm/arch/ddr_defs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/mem.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/emif.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <i2c.h>
|
||||
#include <power/tps65217.h>
|
||||
#include "../common/bur_common.h"
|
||||
#include <lcd.h>
|
||||
#include <watchdog.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/* -- defines for GPIO -- */
|
||||
#define REPSWITCH (0+20) /* GPIO0_20 */
|
||||
|
||||
#if defined(CONFIG_SPL_BUILD)
|
||||
/* TODO: check ram-timing ! */
|
||||
static const struct ddr_data ddr3_data = {
|
||||
.datardsratio0 = MT41K256M16HA125E_RD_DQS,
|
||||
.datawdsratio0 = MT41K256M16HA125E_WR_DQS,
|
||||
.datafwsratio0 = MT41K256M16HA125E_PHY_FIFO_WE,
|
||||
.datawrsratio0 = MT41K256M16HA125E_PHY_WR_DATA,
|
||||
};
|
||||
|
||||
static const struct cmd_control ddr3_cmd_ctrl_data = {
|
||||
.cmd0csratio = MT41K256M16HA125E_RATIO,
|
||||
.cmd0iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
||||
|
||||
.cmd1csratio = MT41K256M16HA125E_RATIO,
|
||||
.cmd1iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
||||
|
||||
.cmd2csratio = MT41K256M16HA125E_RATIO,
|
||||
.cmd2iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
||||
};
|
||||
|
||||
static struct emif_regs ddr3_emif_reg_data = {
|
||||
.sdram_config = MT41K256M16HA125E_EMIF_SDCFG,
|
||||
.ref_ctrl = MT41K256M16HA125E_EMIF_SDREF,
|
||||
.sdram_tim1 = MT41K256M16HA125E_EMIF_TIM1,
|
||||
.sdram_tim2 = MT41K256M16HA125E_EMIF_TIM2,
|
||||
.sdram_tim3 = MT41K256M16HA125E_EMIF_TIM3,
|
||||
.zq_config = MT41K256M16HA125E_ZQ_CFG,
|
||||
.emif_ddr_phy_ctlr_1 = MT41K256M16HA125E_EMIF_READ_LATENCY,
|
||||
};
|
||||
|
||||
static const struct ctrl_ioregs ddr3_ioregs = {
|
||||
.cm0ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
.cm1ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
.cm2ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
.dt0ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
.dt1ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SPL_OS_BOOT
|
||||
/*
|
||||
* called from spl_nand.c
|
||||
* return 0 for loading linux, return 1 for loading u-boot
|
||||
*/
|
||||
int spl_start_uboot(void)
|
||||
{
|
||||
if (0 == gpio_get_value(REPSWITCH)) {
|
||||
mdelay(1000);
|
||||
printf("SPL: entering u-boot instead kernel image.\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_SPL_OS_BOOT */
|
||||
|
||||
#define OSC (V_OSCK/1000000)
|
||||
static const struct dpll_params dpll_ddr3 = { 400, OSC-1, 1, -1, -1, -1, -1};
|
||||
|
||||
void am33xx_spl_board_init(void)
|
||||
{
|
||||
struct cm_perpll *const cmper = (struct cm_perpll *)CM_PER;
|
||||
/*struct cm_wkuppll *const cmwkup = (struct cm_wkuppll *)CM_WKUP;*/
|
||||
struct cm_dpll *const cmdpll = (struct cm_dpll *)CM_DPLL;
|
||||
|
||||
/*
|
||||
* in TRM they write a reset value of 1 (=CLK_M_OSC) for the
|
||||
* CLKSEL_TIMER6_CLK Register, in fact reset value is 0, so we need set
|
||||
* the source of timer6 clk to CLK_M_OSC
|
||||
*/
|
||||
writel(0x01, &cmdpll->clktimer6clk);
|
||||
|
||||
/* enable additional clocks of modules which are accessed later */
|
||||
u32 *const clk_domains[] = {
|
||||
&cmper->lcdcclkstctrl,
|
||||
0
|
||||
};
|
||||
|
||||
u32 *const clk_modules_tsspecific[] = {
|
||||
&cmper->lcdclkctrl,
|
||||
&cmper->timer5clkctrl,
|
||||
&cmper->timer6clkctrl,
|
||||
0
|
||||
};
|
||||
do_enable_clocks(clk_domains, clk_modules_tsspecific, 1);
|
||||
|
||||
/* setup LCD-Pixel Clock */
|
||||
writel(0x2, &cmdpll->clklcdcpixelclk); /* clock comes from perPLL M2 */
|
||||
|
||||
/* setup I2C */
|
||||
enable_i2c_pin_mux();
|
||||
i2c_set_bus_num(0);
|
||||
i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);
|
||||
pmicsetup(0);
|
||||
|
||||
gpio_direction_output(64+29, 1); /* switch NAND_RnB to GPMC_WAIT1 */
|
||||
gpio_direction_output(64+28, 1); /* switch MII2_CRS to GPMC_WAIT0 */
|
||||
}
|
||||
|
||||
const struct dpll_params *get_dpll_ddr_params(void)
|
||||
{
|
||||
return &dpll_ddr3;
|
||||
}
|
||||
|
||||
void sdram_init(void)
|
||||
{
|
||||
config_ddr(400, &ddr3_ioregs,
|
||||
&ddr3_data,
|
||||
&ddr3_cmd_ctrl_data,
|
||||
&ddr3_emif_reg_data, 0);
|
||||
}
|
||||
#endif /* CONFIG_SPL_BUILD */
|
||||
|
||||
/* Basic board specific setup. Pinmux has been handled already. */
|
||||
int board_init(void)
|
||||
{
|
||||
#if defined(CONFIG_HW_WATCHDOG)
|
||||
hw_watchdog_init();
|
||||
#endif
|
||||
gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
|
||||
#ifdef CONFIG_NAND
|
||||
gpmc_init();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BOARD_LATE_INIT
|
||||
int board_late_init(void)
|
||||
{
|
||||
if (0 == gpio_get_value(REPSWITCH)) {
|
||||
lcd_position_cursor(1, 8);
|
||||
lcd_puts(
|
||||
"switching to network-console ... ");
|
||||
setenv("bootcmd", "run netconsole");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_BOARD_LATE_INIT */
|
||||
254
u-boot/board/BuR/brppt1/mux.c
Normal file
254
u-boot/board/BuR/brppt1/mux.c
Normal file
@@ -0,0 +1,254 @@
|
||||
/*
|
||||
* mux.c
|
||||
*
|
||||
* Pinmux Setting for B&R BRPPT1 Board(s)
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/io.h>
|
||||
#include <i2c.h>
|
||||
|
||||
static struct module_pin_mux uart0_pin_mux[] = {
|
||||
/* UART0_RTS */
|
||||
{OFFSET(uart0_rtsn), (MODE(0) | PULLUDEN)},
|
||||
/* UART0_CTS */
|
||||
{OFFSET(uart0_ctsn), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* UART0_RXD */
|
||||
{OFFSET(uart0_rxd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* UART0_TXD */
|
||||
{OFFSET(uart0_txd), (MODE(0) | PULLUDEN)},
|
||||
{-1},
|
||||
};
|
||||
static struct module_pin_mux uart1_pin_mux[] = {
|
||||
/* UART1_RTS as I2C2-SCL */
|
||||
{OFFSET(uart1_rtsn), (MODE(3) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* UART1_CTS as I2C2-SDA */
|
||||
{OFFSET(uart1_ctsn), (MODE(3) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* UART1_RXD */
|
||||
{OFFSET(uart1_rxd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* UART1_TXD */
|
||||
{OFFSET(uart1_txd), (MODE(0) | PULLUDEN)},
|
||||
{-1},
|
||||
};
|
||||
#ifdef CONFIG_MMC
|
||||
static struct module_pin_mux mmc1_pin_mux[] = {
|
||||
{OFFSET(gpmc_ad7), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT7 */
|
||||
{OFFSET(gpmc_ad6), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT6 */
|
||||
{OFFSET(gpmc_ad5), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT5 */
|
||||
{OFFSET(gpmc_ad4), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT4 */
|
||||
|
||||
{OFFSET(gpmc_ad3), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT3 */
|
||||
{OFFSET(gpmc_ad2), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT2 */
|
||||
{OFFSET(gpmc_ad1), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT1 */
|
||||
{OFFSET(gpmc_ad0), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT0 */
|
||||
{OFFSET(gpmc_csn1), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CLK */
|
||||
{OFFSET(gpmc_csn2), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CMD */
|
||||
{OFFSET(gpmc_csn0), (MODE(7) | RXACTIVE | PULLUP_EN)}, /* MMC1_WP */
|
||||
{OFFSET(gpmc_advn_ale), (MODE(7) | RXACTIVE | PULLUP_EN)},/* MMC1_CD */
|
||||
{-1},
|
||||
};
|
||||
#endif
|
||||
static struct module_pin_mux i2c0_pin_mux[] = {
|
||||
/* I2C_DATA */
|
||||
{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | SLEWCTRL)},
|
||||
/* I2C_SCLK */
|
||||
{OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDEN | SLEWCTRL)},
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux spi0_pin_mux[] = {
|
||||
/* SPI0_SCLK */
|
||||
{OFFSET(spi0_sclk), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN)},
|
||||
/* SPI0_D0 */
|
||||
{OFFSET(spi0_d0), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN)},
|
||||
/* SPI0_D1 */
|
||||
{OFFSET(spi0_d1), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN)},
|
||||
/* SPI0_CS0 */
|
||||
{OFFSET(spi0_cs0), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN)},
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux mii1_pin_mux[] = {
|
||||
{OFFSET(mii1_crs), MODE(0) | RXACTIVE}, /* MII1_CRS */
|
||||
{OFFSET(mii1_col), MODE(0) | RXACTIVE}, /* MII1_COL */
|
||||
{OFFSET(mii1_rxerr), MODE(0) | RXACTIVE}, /* MII1_RXERR */
|
||||
{OFFSET(mii1_txen), MODE(0)}, /* MII1_TXEN */
|
||||
{OFFSET(mii1_rxdv), MODE(0) | RXACTIVE}, /* MII1_RXDV */
|
||||
{OFFSET(mii1_txd3), MODE(0)}, /* MII1_TXD3 */
|
||||
{OFFSET(mii1_txd2), MODE(0)}, /* MII1_TXD2 */
|
||||
{OFFSET(mii1_txd1), MODE(0)}, /* MII1_TXD1 */
|
||||
{OFFSET(mii1_txd0), MODE(0)}, /* MII1_TXD0 */
|
||||
{OFFSET(mii1_txclk), MODE(0) | RXACTIVE}, /* MII1_TXCLK */
|
||||
{OFFSET(mii1_rxclk), MODE(0) | RXACTIVE}, /* MII1_RXCLK */
|
||||
{OFFSET(mii1_rxd3), MODE(0) | RXACTIVE}, /* MII1_RXD3 */
|
||||
{OFFSET(mii1_rxd2), MODE(0) | RXACTIVE}, /* MII1_RXD2 */
|
||||
{OFFSET(mii1_rxd1), MODE(0) | RXACTIVE}, /* MII1_RXD1 */
|
||||
{OFFSET(mii1_rxd0), MODE(0) | RXACTIVE}, /* MII1_RXD0 */
|
||||
{OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN},/* MDIO_DATA */
|
||||
{OFFSET(mdio_clk), MODE(0) | PULLUP_EN}, /* MDIO_CLK */
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux mii2_pin_mux[] = {
|
||||
{OFFSET(gpmc_a0), MODE(1)}, /* MII2_TXEN */
|
||||
{OFFSET(gpmc_a1), MODE(1) | RXACTIVE}, /* MII2_RXDV */
|
||||
{OFFSET(gpmc_a2), MODE(1)}, /* MII2_TXD3 */
|
||||
{OFFSET(gpmc_a3), MODE(1)}, /* MII2_TXD2 */
|
||||
{OFFSET(gpmc_a4), MODE(1)}, /* MII2_TXD1 */
|
||||
{OFFSET(gpmc_a5), MODE(1)}, /* MII2_TXD0 */
|
||||
{OFFSET(gpmc_a6), MODE(1) | RXACTIVE}, /* MII2_TXCLK */
|
||||
{OFFSET(gpmc_a7), MODE(1) | RXACTIVE}, /* MII2_RXCLK */
|
||||
{OFFSET(gpmc_a8), MODE(1) | RXACTIVE}, /* MII2_RXD3 */
|
||||
{OFFSET(gpmc_a9), MODE(1) | RXACTIVE}, /* MII2_RXD2 */
|
||||
{OFFSET(gpmc_a10), MODE(1) | RXACTIVE}, /* MII2_RXD1 */
|
||||
{OFFSET(gpmc_a11), MODE(1) | RXACTIVE}, /* MII2_RXD0 */
|
||||
{OFFSET(gpmc_wpn), (MODE(1) | RXACTIVE)},/* MII2_RXERR */
|
||||
{OFFSET(gpmc_wait0), (MODE(1) | RXACTIVE | PULLUP_EN)},
|
||||
/*
|
||||
* MII2_CRS is shared with
|
||||
* NAND_WAIT0
|
||||
*/
|
||||
{OFFSET(gpmc_be1n), (MODE(1) | RXACTIVE)},/* MII1_COL */
|
||||
{-1},
|
||||
};
|
||||
#ifdef CONFIG_NAND
|
||||
static struct module_pin_mux nand_pin_mux[] = {
|
||||
{OFFSET(gpmc_ad0), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD0 */
|
||||
{OFFSET(gpmc_ad1), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD1 */
|
||||
{OFFSET(gpmc_ad2), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD2 */
|
||||
{OFFSET(gpmc_ad3), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD3 */
|
||||
{OFFSET(gpmc_ad4), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD4 */
|
||||
{OFFSET(gpmc_ad5), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD5 */
|
||||
{OFFSET(gpmc_ad6), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD6 */
|
||||
{OFFSET(gpmc_ad7), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD7 */
|
||||
{OFFSET(gpmc_clk), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* NAND WAIT */
|
||||
{OFFSET(gpmc_wpn), (MODE(7) | PULLUP_EN | RXACTIVE)}, /* NAND_WPN */
|
||||
{OFFSET(gpmc_csn0), (MODE(0) | PULLUDEN)}, /* NAND_CS0 */
|
||||
{OFFSET(gpmc_advn_ale), (MODE(0) | PULLUDEN)}, /* NAND_ADV_ALE */
|
||||
{OFFSET(gpmc_oen_ren), (MODE(0) | PULLUDEN)}, /* NAND_OE */
|
||||
{OFFSET(gpmc_wen), (MODE(0) | PULLUDEN)}, /* NAND_WEN */
|
||||
{OFFSET(gpmc_be0n_cle), (MODE(0) | PULLUDEN)}, /* NAND_BE_CLE */
|
||||
{-1},
|
||||
};
|
||||
#endif
|
||||
static struct module_pin_mux gpIOs[] = {
|
||||
/* GPIO0_6 (SPI0_CS1) - 3v3_PWR_nEN (Display Power Supply) */
|
||||
{OFFSET(spi0_cs1), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* TIMER5 (MMC0_DAT3) - TIMER5 (Buzzer) */
|
||||
{OFFSET(mmc0_dat3), (MODE(3) | PULLUDEN | RXACTIVE)},
|
||||
/* TIMER6 (MMC0_DAT2) - PWM_BACK_3V3 */
|
||||
{OFFSET(mmc0_dat2), (MODE(3) | PULLUDEN | RXACTIVE)},
|
||||
/* GPIO2_28 (MMC0_DAT1) - MII_nNAND */
|
||||
{OFFSET(mmc0_dat1), (MODE(7) | PULLUDEN | RXACTIVE)},
|
||||
/* GPIO2_29 (MMC0_DAT0) - NAND_1n0 */
|
||||
{OFFSET(mmc0_dat0), (MODE(7) | PULLUDEN | RXACTIVE)},
|
||||
/* GPIO2_30 (MMC0_CLK) - nRESET (PHY) */
|
||||
{OFFSET(mmc0_clk), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* GPIO3_18 (MCASP0_ACLKR) - CPLD JTAG TDI */
|
||||
{OFFSET(mcasp0_aclkr), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* GPIO3_19 (MCASP0_FSR) - CPLD JTAG TMS */
|
||||
{OFFSET(mcasp0_fsr), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* GPIO3_20 (MCASP0_AXR1) - CPLD JTAG TCK */
|
||||
{OFFSET(mcasp0_axr1), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* GPIO3_21 (MCASP0_AHCLKX) - CPLD JTAG TDO */
|
||||
{OFFSET(mcasp0_ahclkx), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* GPIO2_0 (GPMC_nCS3) - DCOK */
|
||||
{OFFSET(gpmc_csn3), (MODE(7) | PULLUDDIS | RXACTIVE) },
|
||||
/* GPIO0_29 (RMII1_REFCLK) - eMMC nRST */
|
||||
{OFFSET(rmii1_refclk), (MODE(7) | PULLUDDIS | RXACTIVE) },
|
||||
/*
|
||||
* GPIO0_7 (PWW0 OUT)
|
||||
* DISPLAY_ONOFF (Backlight Enable at LVDS Versions)
|
||||
*/
|
||||
{OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDEN | RXACTIVE)},
|
||||
/* GPIO0_19 (DMA_INTR0) - DISPLAY_MODE (CPLD) */
|
||||
{OFFSET(xdma_event_intr0), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* GPIO0_20 (DMA_INTR1) - REP-Switch */
|
||||
{OFFSET(xdma_event_intr1), (MODE(7) | PULLUP_EN | RXACTIVE)},
|
||||
/* GPIO3_14 (MCASP0_ACLKX) - frei / PP709 */
|
||||
{OFFSET(mcasp0_aclkx), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE) },
|
||||
/* GPIO3_15 (MCASP0_FSX) - PMIC_nRESET */
|
||||
{OFFSET(mcasp0_fsx), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE) },
|
||||
/* GPIO3_16 (MCASP0_AXR0) - ETH1_LEDY */
|
||||
{OFFSET(mcasp0_axr0), (MODE(7) | PULLUDDIS) },
|
||||
/* GPIO3_17 (MCASP0_AHCLKR) - ETH2_LEDY */
|
||||
{OFFSET(mcasp0_ahclkr), (MODE(7) | PULLUDDIS) },
|
||||
#ifndef CONFIG_NAND
|
||||
/* GPIO2_3 - NAND_OE */
|
||||
{OFFSET(gpmc_oen_ren), (MODE(7) | PULLDOWN_EN | RXACTIVE)},
|
||||
/* GPIO2_4 - NAND_WEN */
|
||||
{OFFSET(gpmc_wen), (MODE(7) | PULLDOWN_EN | RXACTIVE)},
|
||||
/* GPIO2_5 - NAND_BE_CLE */
|
||||
{OFFSET(gpmc_be0n_cle), (MODE(7) | PULLDOWN_EN | RXACTIVE)},
|
||||
#endif
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux lcd_pin_mux[] = {
|
||||
{OFFSET(lcd_data0), (MODE(0) | PULLUDDIS)}, /* LCD-Data(0) */
|
||||
{OFFSET(lcd_data1), (MODE(0) | PULLUDDIS)}, /* LCD-Data(1) */
|
||||
{OFFSET(lcd_data2), (MODE(0) | PULLUDDIS)}, /* LCD-Data(2) */
|
||||
{OFFSET(lcd_data3), (MODE(0) | PULLUDDIS)}, /* LCD-Data(3) */
|
||||
{OFFSET(lcd_data4), (MODE(0) | PULLUDDIS)}, /* LCD-Data(4) */
|
||||
{OFFSET(lcd_data5), (MODE(0) | PULLUDDIS)}, /* LCD-Data(5) */
|
||||
{OFFSET(lcd_data6), (MODE(0) | PULLUDDIS)}, /* LCD-Data(6) */
|
||||
{OFFSET(lcd_data7), (MODE(0) | PULLUDDIS)}, /* LCD-Data(7) */
|
||||
{OFFSET(lcd_data8), (MODE(0) | PULLUDDIS)}, /* LCD-Data(8) */
|
||||
{OFFSET(lcd_data9), (MODE(0) | PULLUDDIS)}, /* LCD-Data(9) */
|
||||
{OFFSET(lcd_data10), (MODE(0) | PULLUDDIS)}, /* LCD-Data(10) */
|
||||
{OFFSET(lcd_data11), (MODE(0) | PULLUDDIS)}, /* LCD-Data(11) */
|
||||
{OFFSET(lcd_data12), (MODE(0) | PULLUDDIS)}, /* LCD-Data(12) */
|
||||
{OFFSET(lcd_data13), (MODE(0) | PULLUDDIS)}, /* LCD-Data(13) */
|
||||
{OFFSET(lcd_data14), (MODE(0) | PULLUDDIS)}, /* LCD-Data(14) */
|
||||
{OFFSET(lcd_data15), (MODE(0) | PULLUDDIS)}, /* LCD-Data(15) */
|
||||
|
||||
{OFFSET(gpmc_ad8), (MODE(1) | PULLUDDIS)}, /* LCD-Data(16) */
|
||||
{OFFSET(gpmc_ad9), (MODE(1) | PULLUDDIS)}, /* LCD-Data(17) */
|
||||
{OFFSET(gpmc_ad10), (MODE(1) | PULLUDDIS)}, /* LCD-Data(18) */
|
||||
{OFFSET(gpmc_ad11), (MODE(1) | PULLUDDIS)}, /* LCD-Data(19) */
|
||||
{OFFSET(gpmc_ad12), (MODE(1) | PULLUDDIS)}, /* LCD-Data(20) */
|
||||
{OFFSET(gpmc_ad13), (MODE(1) | PULLUDDIS)}, /* LCD-Data(21) */
|
||||
{OFFSET(gpmc_ad14), (MODE(1) | PULLUDDIS)}, /* LCD-Data(22) */
|
||||
{OFFSET(gpmc_ad15), (MODE(1) | PULLUDDIS)}, /* LCD-Data(23) */
|
||||
|
||||
{OFFSET(lcd_vsync), (MODE(0) | PULLUDDIS)}, /* LCD-VSync */
|
||||
{OFFSET(lcd_hsync), (MODE(0) | PULLUDDIS)}, /* LCD-HSync */
|
||||
{OFFSET(lcd_ac_bias_en), (MODE(0) | PULLUDDIS)},/* LCD-DE */
|
||||
{OFFSET(lcd_pclk), (MODE(0) | PULLUDDIS)}, /* LCD-CLK */
|
||||
|
||||
{-1},
|
||||
};
|
||||
|
||||
void enable_uart0_pin_mux(void)
|
||||
{
|
||||
configure_module_pin_mux(uart0_pin_mux);
|
||||
}
|
||||
|
||||
void enable_i2c_pin_mux(void)
|
||||
{
|
||||
configure_module_pin_mux(i2c0_pin_mux);
|
||||
}
|
||||
|
||||
void enable_board_pin_mux(void)
|
||||
{
|
||||
configure_module_pin_mux(i2c0_pin_mux);
|
||||
configure_module_pin_mux(mii1_pin_mux);
|
||||
configure_module_pin_mux(mii2_pin_mux);
|
||||
#ifdef CONFIG_NAND
|
||||
configure_module_pin_mux(nand_pin_mux);
|
||||
#elif defined(CONFIG_MMC)
|
||||
configure_module_pin_mux(mmc1_pin_mux);
|
||||
#endif
|
||||
configure_module_pin_mux(spi0_pin_mux);
|
||||
configure_module_pin_mux(lcd_pin_mux);
|
||||
configure_module_pin_mux(uart1_pin_mux);
|
||||
configure_module_pin_mux(gpIOs);
|
||||
}
|
||||
15
u-boot/board/BuR/brxre1/Kconfig
Normal file
15
u-boot/board/BuR/brxre1/Kconfig
Normal file
@@ -0,0 +1,15 @@
|
||||
if TARGET_BRXRE1
|
||||
|
||||
config SYS_BOARD
|
||||
default "brxre1"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "BuR"
|
||||
|
||||
config SYS_SOC
|
||||
default "am33xx"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "brxre1"
|
||||
|
||||
endif
|
||||
6
u-boot/board/BuR/brxre1/MAINTAINERS
Normal file
6
u-boot/board/BuR/brxre1/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
BRXRE1 BOARD
|
||||
M: Hannes Schmelzer <hannes.schmelzer@br-automation.com>
|
||||
S: Maintained
|
||||
F: board/BuR/brxre1/
|
||||
F: include/configs/brxre1.h
|
||||
F: configs/brxre1_defconfig
|
||||
12
u-boot/board/BuR/brxre1/Makefile
Normal file
12
u-boot/board/BuR/brxre1/Makefile
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Makefile
|
||||
#
|
||||
# Copyright (C) 2014 Hannes Schmelzer <oe5hpm@oevsv.at> -
|
||||
# Bernecker & Rainer Industrielektronik GmbH - http://www.br-automation.com/
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-$(CONFIG_SPL_BUILD) += mux.o
|
||||
obj-y += ../common/common.o
|
||||
obj-y += board.o
|
||||
298
u-boot/board/BuR/brxre1/board.c
Normal file
298
u-boot/board/BuR/brxre1/board.c
Normal file
@@ -0,0 +1,298 @@
|
||||
/*
|
||||
* board.c
|
||||
*
|
||||
* Board functions for B&R BRXRE1 Board
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <errno.h>
|
||||
#include <spl.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/omap.h>
|
||||
#include <asm/arch/ddr_defs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/mem.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/emif.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <i2c.h>
|
||||
#include <power/tps65217.h>
|
||||
#include "../common/bur_common.h"
|
||||
#include <lcd.h>
|
||||
|
||||
/* -------------------------------------------------------------------------*/
|
||||
/* -- defines for used GPIO Hardware -- */
|
||||
#define ESC_KEY (0+19)
|
||||
#define LCD_PWR (0+5)
|
||||
#define PUSH_KEY (0+31)
|
||||
/* -------------------------------------------------------------------------*/
|
||||
/* -- PSOC Resetcontroller Register defines -- */
|
||||
|
||||
/* I2C Address of controller */
|
||||
#define RSTCTRL_ADDR 0x75
|
||||
/* Register for CTRL-word */
|
||||
#define RSTCTRL_CTRLREG 0x01
|
||||
/* Register for giving some information to VxWorks OS */
|
||||
#define RSTCTRL_SCRATCHREG 0x04
|
||||
|
||||
/* -- defines for RSTCTRL_CTRLREG -- */
|
||||
#define RSTCTRL_FORCE_PWR_NEN 0x0404
|
||||
#define RSTCTRL_CAN_STB 0x4040
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#if defined(CONFIG_SPL_BUILD)
|
||||
/* TODO: check ram-timing ! */
|
||||
static const struct ddr_data ddr3_data = {
|
||||
.datardsratio0 = MT41K256M16HA125E_RD_DQS,
|
||||
.datawdsratio0 = MT41K256M16HA125E_WR_DQS,
|
||||
.datafwsratio0 = MT41K256M16HA125E_PHY_FIFO_WE,
|
||||
.datawrsratio0 = MT41K256M16HA125E_PHY_WR_DATA,
|
||||
};
|
||||
static const struct cmd_control ddr3_cmd_ctrl_data = {
|
||||
.cmd0csratio = MT41K256M16HA125E_RATIO,
|
||||
.cmd0iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
||||
|
||||
.cmd1csratio = MT41K256M16HA125E_RATIO,
|
||||
.cmd1iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
||||
|
||||
.cmd2csratio = MT41K256M16HA125E_RATIO,
|
||||
.cmd2iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
||||
};
|
||||
static struct emif_regs ddr3_emif_reg_data = {
|
||||
.sdram_config = MT41K256M16HA125E_EMIF_SDCFG,
|
||||
.ref_ctrl = MT41K256M16HA125E_EMIF_SDREF,
|
||||
.sdram_tim1 = MT41K256M16HA125E_EMIF_TIM1,
|
||||
.sdram_tim2 = MT41K256M16HA125E_EMIF_TIM2,
|
||||
.sdram_tim3 = MT41K256M16HA125E_EMIF_TIM3,
|
||||
.zq_config = MT41K256M16HA125E_ZQ_CFG,
|
||||
.emif_ddr_phy_ctlr_1 = MT41K256M16HA125E_EMIF_READ_LATENCY,
|
||||
};
|
||||
|
||||
static const struct ctrl_ioregs ddr3_ioregs = {
|
||||
.cm0ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
.cm1ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
.cm2ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
.dt0ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
.dt1ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
||||
};
|
||||
|
||||
#define OSC (V_OSCK/1000000)
|
||||
const struct dpll_params dpll_ddr3 = { 400, OSC-1, 1, -1, -1, -1, -1};
|
||||
|
||||
void am33xx_spl_board_init(void)
|
||||
{
|
||||
unsigned int oldspeed;
|
||||
unsigned short buf;
|
||||
|
||||
struct cm_perpll *const cmper = (struct cm_perpll *)CM_PER;
|
||||
struct cm_wkuppll *const cmwkup = (struct cm_wkuppll *)CM_WKUP;
|
||||
/*
|
||||
* enable additional clocks of modules which are accessed later from
|
||||
* VxWorks OS
|
||||
*/
|
||||
u32 *const clk_domains[] = { 0 };
|
||||
|
||||
u32 *const clk_modules_xre1specific[] = {
|
||||
&cmwkup->wkup_adctscctrl,
|
||||
&cmper->spi1clkctrl,
|
||||
&cmper->dcan0clkctrl,
|
||||
&cmper->dcan1clkctrl,
|
||||
&cmper->epwmss0clkctrl,
|
||||
&cmper->epwmss1clkctrl,
|
||||
&cmper->epwmss2clkctrl,
|
||||
&cmper->lcdclkctrl,
|
||||
&cmper->lcdcclkstctrl,
|
||||
0
|
||||
};
|
||||
do_enable_clocks(clk_domains, clk_modules_xre1specific, 1);
|
||||
/* setup LCD-Pixel Clock */
|
||||
writel(0x2, CM_DPLL + 0x34);
|
||||
/* power-OFF LCD-Display */
|
||||
gpio_direction_output(LCD_PWR, 0);
|
||||
|
||||
/* setup I2C */
|
||||
enable_i2c_pin_mux();
|
||||
i2c_set_bus_num(0);
|
||||
i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);
|
||||
|
||||
/* power-ON 3V3 via Resetcontroller */
|
||||
oldspeed = i2c_get_bus_speed();
|
||||
if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
|
||||
buf = RSTCTRL_FORCE_PWR_NEN | RSTCTRL_CAN_STB;
|
||||
i2c_write(RSTCTRL_ADDR, RSTCTRL_CTRLREG, 1,
|
||||
(uint8_t *)&buf, sizeof(buf));
|
||||
i2c_set_bus_speed(oldspeed);
|
||||
} else {
|
||||
puts("ERROR: i2c_set_bus_speed failed! (turn on PWR_nEN)\n");
|
||||
}
|
||||
|
||||
pmicsetup(0);
|
||||
}
|
||||
|
||||
const struct dpll_params *get_dpll_ddr_params(void)
|
||||
{
|
||||
return &dpll_ddr3;
|
||||
}
|
||||
|
||||
void sdram_init(void)
|
||||
{
|
||||
config_ddr(400, &ddr3_ioregs,
|
||||
&ddr3_data,
|
||||
&ddr3_cmd_ctrl_data,
|
||||
&ddr3_emif_reg_data, 0);
|
||||
}
|
||||
#endif /* CONFIG_SPL_BUILD */
|
||||
/*
|
||||
* Basic board specific setup. Pinmux has been handled already.
|
||||
*/
|
||||
int board_init(void)
|
||||
{
|
||||
gpmc_init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BOARD_LATE_INIT
|
||||
int board_late_init(void)
|
||||
{
|
||||
const unsigned int toff = 1000;
|
||||
unsigned int cnt = 3;
|
||||
unsigned short buf = 0xAAAA;
|
||||
unsigned char scratchreg = 0;
|
||||
unsigned int oldspeed;
|
||||
|
||||
/* try to read out some boot-instruction from resetcontroller */
|
||||
oldspeed = i2c_get_bus_speed();
|
||||
if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
|
||||
i2c_read(RSTCTRL_ADDR, RSTCTRL_SCRATCHREG, 1,
|
||||
&scratchreg, sizeof(scratchreg));
|
||||
i2c_set_bus_speed(oldspeed);
|
||||
} else {
|
||||
puts("ERROR: i2c_set_bus_speed failed! (scratchregister)\n");
|
||||
}
|
||||
|
||||
if (gpio_get_value(ESC_KEY)) {
|
||||
do {
|
||||
lcd_position_cursor(1, 8);
|
||||
switch (cnt) {
|
||||
case 3:
|
||||
lcd_puts(
|
||||
"release ESC-KEY to enter SERVICE-mode.");
|
||||
break;
|
||||
case 2:
|
||||
lcd_puts(
|
||||
"release ESC-KEY to enter DIAGNOSE-mode.");
|
||||
break;
|
||||
case 1:
|
||||
lcd_puts(
|
||||
"release ESC-KEY to enter BOOT-mode. ");
|
||||
break;
|
||||
}
|
||||
mdelay(toff);
|
||||
cnt--;
|
||||
if (!gpio_get_value(ESC_KEY) &&
|
||||
gpio_get_value(PUSH_KEY) && 2 == cnt) {
|
||||
lcd_position_cursor(1, 8);
|
||||
lcd_puts(
|
||||
"switching to network-console ... ");
|
||||
setenv("bootcmd", "run netconsole");
|
||||
cnt = 4;
|
||||
break;
|
||||
} else if (!gpio_get_value(ESC_KEY) &&
|
||||
gpio_get_value(PUSH_KEY) && 1 == cnt) {
|
||||
lcd_position_cursor(1, 8);
|
||||
lcd_puts(
|
||||
"starting u-boot script from USB ... ");
|
||||
setenv("bootcmd", "run usbscript");
|
||||
cnt = 4;
|
||||
break;
|
||||
} else if ((!gpio_get_value(ESC_KEY) &&
|
||||
gpio_get_value(PUSH_KEY) && cnt == 0) ||
|
||||
(gpio_get_value(ESC_KEY) &&
|
||||
gpio_get_value(PUSH_KEY) && cnt == 0)) {
|
||||
lcd_position_cursor(1, 8);
|
||||
lcd_puts(
|
||||
"starting script from network ... ");
|
||||
setenv("bootcmd", "run netscript");
|
||||
cnt = 4;
|
||||
break;
|
||||
} else if (!gpio_get_value(ESC_KEY)) {
|
||||
break;
|
||||
}
|
||||
} while (cnt);
|
||||
} else if (scratchreg == 0xCC) {
|
||||
lcd_position_cursor(1, 8);
|
||||
lcd_puts(
|
||||
"starting vxworks from network ... ");
|
||||
setenv("bootcmd", "run netboot");
|
||||
cnt = 4;
|
||||
} else if (scratchreg == 0xCD) {
|
||||
lcd_position_cursor(1, 8);
|
||||
lcd_puts(
|
||||
"starting script from network ... ");
|
||||
setenv("bootcmd", "run netscript");
|
||||
cnt = 4;
|
||||
} else if (scratchreg == 0xCE) {
|
||||
lcd_position_cursor(1, 8);
|
||||
lcd_puts(
|
||||
"starting AR from eMMC ... ");
|
||||
setenv("bootcmd", "run mmcboot");
|
||||
cnt = 4;
|
||||
}
|
||||
|
||||
lcd_position_cursor(1, 8);
|
||||
switch (cnt) {
|
||||
case 0:
|
||||
lcd_puts("entering BOOT-mode. ");
|
||||
setenv("bootcmd", "run defaultAR");
|
||||
buf = 0x0000;
|
||||
break;
|
||||
case 1:
|
||||
lcd_puts("entering DIAGNOSE-mode. ");
|
||||
buf = 0x0F0F;
|
||||
break;
|
||||
case 2:
|
||||
lcd_puts("entering SERVICE mode. ");
|
||||
buf = 0xB4B4;
|
||||
break;
|
||||
case 3:
|
||||
lcd_puts("loading OS... ");
|
||||
buf = 0x0404;
|
||||
break;
|
||||
}
|
||||
/* write bootinfo into scratchregister of resetcontroller */
|
||||
oldspeed = i2c_get_bus_speed();
|
||||
if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
|
||||
i2c_write(RSTCTRL_ADDR, RSTCTRL_SCRATCHREG, 1,
|
||||
(uint8_t *)&buf, sizeof(buf));
|
||||
i2c_set_bus_speed(oldspeed);
|
||||
} else {
|
||||
puts("ERROR: i2c_set_bus_speed failed! (scratchregister)\n");
|
||||
}
|
||||
/* setup othbootargs for bootvx-command (vxWorks bootline) */
|
||||
char othbootargs[128];
|
||||
snprintf(othbootargs, sizeof(othbootargs),
|
||||
"u=vxWorksFTP pw=vxWorks o=0x%08x;0x%08x;0x%08x;0x%08x",
|
||||
(unsigned int) gd->fb_base-0x20,
|
||||
(u32)getenv_ulong("vx_memtop", 16, gd->fb_base-0x20),
|
||||
(u32)getenv_ulong("vx_romfsbase", 16, 0),
|
||||
(u32)getenv_ulong("vx_romfssize", 16, 0));
|
||||
setenv("othbootargs", othbootargs);
|
||||
/*
|
||||
* reset VBAR registers to its reset location, VxWorks 6.9.3.2 does
|
||||
* expect that vectors are there, original u-boot moves them to _start
|
||||
*/
|
||||
__asm__("ldr r0,=0x20000");
|
||||
__asm__("mcr p15, 0, r0, c12, c0, 0"); /* Set VBAR */
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_BOARD_LATE_INIT */
|
||||
198
u-boot/board/BuR/brxre1/mux.c
Normal file
198
u-boot/board/BuR/brxre1/mux.c
Normal file
@@ -0,0 +1,198 @@
|
||||
/*
|
||||
* mux.c
|
||||
*
|
||||
* Pinmux Setting for B&R LEIT Board(s)
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/mux.h>
|
||||
#include <asm/io.h>
|
||||
#include <i2c.h>
|
||||
|
||||
static struct module_pin_mux spi0_pin_mux[] = {
|
||||
/* SPI1_SCLK */
|
||||
{OFFSET(spi0_sclk), MODE(0) | PULLUDEN | RXACTIVE},
|
||||
/* SPI1_D0 */
|
||||
{OFFSET(spi0_d0), MODE(0) | PULLUDEN | RXACTIVE},
|
||||
/* SPI1_D1 */
|
||||
{OFFSET(spi0_d1), MODE(0) | PULLUDEN | RXACTIVE},
|
||||
/* SPI1_CS0 */
|
||||
{OFFSET(spi0_cs0), MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE},
|
||||
/* SPI1_CS1 */
|
||||
{OFFSET(spi0_cs1), MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE},
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux dcan0_pin_mux[] = {
|
||||
/* DCAN0 TX */
|
||||
{OFFSET(uart1_ctsn), MODE(2) | PULLUDEN | PULLUP_EN},
|
||||
/* DCAN0 RX */
|
||||
{OFFSET(uart1_rtsn), MODE(2) | RXACTIVE},
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux dcan1_pin_mux[] = {
|
||||
/* DCAN1 TX */
|
||||
{OFFSET(uart1_rxd), MODE(2) | PULLUDEN | PULLUP_EN},
|
||||
/* DCAN1 RX */
|
||||
{OFFSET(uart1_txd), MODE(2) | RXACTIVE},
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux gpios[] = {
|
||||
/* GPIO0_7 (PWW0 OUT) - CAN TERM */
|
||||
{OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO0_19 (DMA_INTR0) - TA602 */
|
||||
{OFFSET(xdma_event_intr0), (MODE(7) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO0_20 (DMA_INTR1) - SPI0 nCS1 */
|
||||
{OFFSET(xdma_event_intr1), (MODE(7) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO0_29 (RMII1_REFCLK) - eMMC nRST */
|
||||
{OFFSET(rmii1_refclk), (MODE(7) | PULLUDDIS)},
|
||||
/* GPIO0_30 (GPMC_WAIT0) - TA601 */
|
||||
{OFFSET(gpmc_wait0), (MODE(7) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO0_31 (GPMC_nWP) - SW601 PushButton */
|
||||
{OFFSET(gpmc_wpn), (MODE(7) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO1_28 (GPMC_nWE) - FRAM_nWP */
|
||||
{OFFSET(gpmc_be1n), (MODE(7) | PULLUDDIS)},
|
||||
/* GPIO1_29 (gpmc_csn0) - MMC nRST */
|
||||
{OFFSET(gpmc_csn0), (MODE(7) | PULLUDDIS)},
|
||||
/* GPIO2_0 (GPMC_nCS3) - VBAT_OK */
|
||||
{OFFSET(gpmc_csn3), (MODE(7) | PULLUDDIS | RXACTIVE) },
|
||||
/* GPIO2_2 (GPMC_nADV_ALE) - DCOK */
|
||||
{OFFSET(gpmc_advn_ale), (MODE(7) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO2_4 (GPMC_nWE) - TST_BAST */
|
||||
{OFFSET(gpmc_wen), (MODE(7) | PULLUDDIS)},
|
||||
/* GPIO2_5 (gpmc_be0n_cle) - DISPLAY_ON_OFF */
|
||||
{OFFSET(gpmc_be0n_cle), (MODE(7) | PULLUDDIS)},
|
||||
/* GPIO3_16 (mcasp0_axr0) - ETH-LED green */
|
||||
{OFFSET(mcasp0_axr0), (MODE(7) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO3_17 (mcasp0_ahclkr) - CAN_STB */
|
||||
{OFFSET(mcasp0_ahclkr), (MODE(7) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO3_18 (MCASP0_ACLKR) - SW601 CNTup, mapped to Counter eQEB0A_in */
|
||||
{OFFSET(mcasp0_aclkr), (MODE(1) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO3_19 (MCASP0_FSR) - SW601 CNTdown, mapped to Counter eQEB0B_in */
|
||||
{OFFSET(mcasp0_fsr), (MODE(1) | PULLUDDIS | RXACTIVE)},
|
||||
/* GPIO3_20 (MCASP0_AXR1) - SW601 CNTdown, map to Counter eQEB0_index */
|
||||
{OFFSET(mcasp0_axr1), (MODE(1) | PULLUDDIS | RXACTIVE)},
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux uart0_pin_mux[] = {
|
||||
/* UART0_CTS */
|
||||
{OFFSET(uart0_ctsn), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* UART0_RXD */
|
||||
{OFFSET(uart0_rxd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},
|
||||
/* UART0_TXD */
|
||||
{OFFSET(uart0_txd), (MODE(0) | PULLUDEN)},
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux i2c0_pin_mux[] = {
|
||||
/* I2C_DATA */
|
||||
{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | SLEWCTRL)},
|
||||
/* I2C_SCLK */
|
||||
{OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDEN | SLEWCTRL)},
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux mii1_pin_mux[] = {
|
||||
{OFFSET(mii1_crs), MODE(0) | RXACTIVE}, /* MII1_CRS */
|
||||
{OFFSET(mii1_col), MODE(0) | RXACTIVE}, /* MII1_COL */
|
||||
{OFFSET(mii1_rxerr), MODE(0) | RXACTIVE}, /* MII1_RXERR */
|
||||
{OFFSET(mii1_txen), MODE(0)}, /* MII1_TXEN */
|
||||
{OFFSET(mii1_rxdv), MODE(0) | RXACTIVE}, /* MII1_RXDV */
|
||||
{OFFSET(mii1_txd3), MODE(0)}, /* MII1_TXD3 */
|
||||
{OFFSET(mii1_txd2), MODE(0)}, /* MII1_TXD2 */
|
||||
{OFFSET(mii1_txd1), MODE(0)}, /* MII1_TXD1 */
|
||||
{OFFSET(mii1_txd0), MODE(0)}, /* MII1_TXD0 */
|
||||
{OFFSET(mii1_txclk), MODE(0) | RXACTIVE}, /* MII1_TXCLK */
|
||||
{OFFSET(mii1_rxclk), MODE(0) | RXACTIVE}, /* MII1_RXCLK */
|
||||
{OFFSET(mii1_rxd3), MODE(0) | RXACTIVE}, /* MII1_RXD3 */
|
||||
{OFFSET(mii1_rxd2), MODE(0) | RXACTIVE}, /* MII1_RXD2 */
|
||||
{OFFSET(mii1_rxd1), MODE(0) | RXACTIVE}, /* MII1_RXD1 */
|
||||
{OFFSET(mii1_rxd0), MODE(0) | RXACTIVE}, /* MII1_RXD0 */
|
||||
{OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN}, /* MDIO_DATA */
|
||||
{OFFSET(mdio_clk), MODE(0) | PULLUP_EN}, /* MDIO_CLK */
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux mmc1_pin_mux[] = {
|
||||
{OFFSET(gpmc_ad7), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT7 */
|
||||
{OFFSET(gpmc_ad6), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT6 */
|
||||
{OFFSET(gpmc_ad5), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT5 */
|
||||
{OFFSET(gpmc_ad4), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT4 */
|
||||
{OFFSET(gpmc_ad3), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT3 */
|
||||
{OFFSET(gpmc_ad2), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT2 */
|
||||
{OFFSET(gpmc_ad1), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT1 */
|
||||
{OFFSET(gpmc_ad0), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT0 */
|
||||
{OFFSET(gpmc_csn1), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CLK */
|
||||
{OFFSET(gpmc_csn2), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CMD */
|
||||
{OFFSET(gpmc_csn0), (MODE(7) | RXACTIVE | PULLUP_EN)}, /* MMC1_WP */
|
||||
{OFFSET(gpmc_advn_ale), (MODE(7) | RXACTIVE | PULLUP_EN)},/* MMC1_CD */
|
||||
|
||||
{-1},
|
||||
};
|
||||
|
||||
static struct module_pin_mux lcd_pin_mux[] = {
|
||||
{OFFSET(lcd_data0), (MODE(0) | PULLUDDIS)}, /* LCD-Data(0) */
|
||||
{OFFSET(lcd_data1), (MODE(0) | PULLUDDIS)}, /* LCD-Data(1) */
|
||||
{OFFSET(lcd_data2), (MODE(0) | PULLUDDIS)}, /* LCD-Data(2) */
|
||||
{OFFSET(lcd_data3), (MODE(0) | PULLUDDIS)}, /* LCD-Data(3) */
|
||||
{OFFSET(lcd_data4), (MODE(0) | PULLUDDIS)}, /* LCD-Data(4) */
|
||||
{OFFSET(lcd_data5), (MODE(0) | PULLUDDIS)}, /* LCD-Data(5) */
|
||||
{OFFSET(lcd_data6), (MODE(0) | PULLUDDIS)}, /* LCD-Data(6) */
|
||||
{OFFSET(lcd_data7), (MODE(0) | PULLUDDIS)}, /* LCD-Data(7) */
|
||||
{OFFSET(lcd_data8), (MODE(0) | PULLUDDIS)}, /* LCD-Data(8) */
|
||||
{OFFSET(lcd_data9), (MODE(0) | PULLUDDIS)}, /* LCD-Data(9) */
|
||||
{OFFSET(lcd_data10), (MODE(0) | PULLUDDIS)}, /* LCD-Data(10) */
|
||||
{OFFSET(lcd_data11), (MODE(0) | PULLUDDIS)}, /* LCD-Data(11) */
|
||||
{OFFSET(lcd_data12), (MODE(0) | PULLUDDIS)}, /* LCD-Data(12) */
|
||||
{OFFSET(lcd_data13), (MODE(0) | PULLUDDIS)}, /* LCD-Data(13) */
|
||||
{OFFSET(lcd_data14), (MODE(0) | PULLUDDIS)}, /* LCD-Data(14) */
|
||||
{OFFSET(lcd_data15), (MODE(0) | PULLUDDIS)}, /* LCD-Data(15) */
|
||||
|
||||
{OFFSET(gpmc_ad8), (MODE(1) | PULLUDDIS)}, /* LCD-Data(16) */
|
||||
{OFFSET(gpmc_ad9), (MODE(1) | PULLUDDIS)}, /* LCD-Data(17) */
|
||||
{OFFSET(gpmc_ad10), (MODE(1) | PULLUDDIS)}, /* LCD-Data(18) */
|
||||
{OFFSET(gpmc_ad11), (MODE(1) | PULLUDDIS)}, /* LCD-Data(19) */
|
||||
{OFFSET(gpmc_ad12), (MODE(1) | PULLUDDIS)}, /* LCD-Data(20) */
|
||||
{OFFSET(gpmc_ad13), (MODE(1) | PULLUDDIS)}, /* LCD-Data(21) */
|
||||
{OFFSET(gpmc_ad14), (MODE(1) | PULLUDDIS)}, /* LCD-Data(22) */
|
||||
{OFFSET(gpmc_ad15), (MODE(1) | PULLUDDIS)}, /* LCD-Data(23) */
|
||||
|
||||
{OFFSET(lcd_vsync), (MODE(0) | PULLUDDIS)}, /* LCD-VSync */
|
||||
{OFFSET(lcd_hsync), (MODE(0) | PULLUDDIS)}, /* LCD-HSync */
|
||||
{OFFSET(lcd_ac_bias_en), (MODE(0) | PULLUDDIS)},/* LCD-DE */
|
||||
{OFFSET(lcd_pclk), (MODE(0) | PULLUDDIS)}, /* LCD-CLK */
|
||||
|
||||
{-1},
|
||||
};
|
||||
|
||||
void enable_uart0_pin_mux(void)
|
||||
{
|
||||
configure_module_pin_mux(uart0_pin_mux);
|
||||
}
|
||||
|
||||
void enable_i2c_pin_mux(void)
|
||||
{
|
||||
configure_module_pin_mux(i2c0_pin_mux);
|
||||
}
|
||||
|
||||
void enable_board_pin_mux(void)
|
||||
{
|
||||
configure_module_pin_mux(i2c0_pin_mux);
|
||||
configure_module_pin_mux(mii1_pin_mux);
|
||||
configure_module_pin_mux(spi0_pin_mux);
|
||||
configure_module_pin_mux(dcan0_pin_mux);
|
||||
configure_module_pin_mux(dcan1_pin_mux);
|
||||
configure_module_pin_mux(mmc1_pin_mux);
|
||||
configure_module_pin_mux(lcd_pin_mux);
|
||||
configure_module_pin_mux(gpios);
|
||||
}
|
||||
25
u-boot/board/BuR/common/bur_common.h
Normal file
25
u-boot/board/BuR/common/bur_common.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* bur_comon.h
|
||||
*
|
||||
* common board information header for B&R boards
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _BUR_COMMON_H_
|
||||
#define _BUR_COMMON_H_
|
||||
|
||||
#include <../../../drivers/video/am335x-fb.h>
|
||||
|
||||
int load_lcdtiming(struct am335x_lcdpanel *panel);
|
||||
void br_summaryscreen(void);
|
||||
void pmicsetup(u32 mpupll);
|
||||
void enable_uart0_pin_mux(void);
|
||||
void enable_i2c_pin_mux(void);
|
||||
void enable_board_pin_mux(void);
|
||||
int board_eth_init(bd_t *bis);
|
||||
|
||||
#endif
|
||||
696
u-boot/board/BuR/common/common.c
Normal file
696
u-boot/board/BuR/common/common.c
Normal file
@@ -0,0 +1,696 @@
|
||||
/*
|
||||
* common.c
|
||||
*
|
||||
* common board functions for B&R boards
|
||||
*
|
||||
* Copyright (C) 2013 Hannes Schmelzer <oe5hpm@oevsv.at>
|
||||
* Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*
|
||||
*/
|
||||
#include <version.h>
|
||||
#include <common.h>
|
||||
#include <errno.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/omap.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/mmc_host_def.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <i2c.h>
|
||||
#include <miiphy.h>
|
||||
#include <cpsw.h>
|
||||
#include <power/tps65217.h>
|
||||
#include <lcd.h>
|
||||
#include <fs.h>
|
||||
#ifdef CONFIG_USE_FDT
|
||||
#include <fdt_support.h>
|
||||
#endif
|
||||
#include "bur_common.h"
|
||||
#include "../../../drivers/video/am335x-fb.h"
|
||||
#include <nand.h>
|
||||
#include <fdt_simplefb.h>
|
||||
|
||||
static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifdef CONFIG_USE_FDT
|
||||
#define FDTPROP(b, c) fdt_getprop_u32_default(gd->fdt_blob, b, c, ~0UL)
|
||||
#define PATHTIM "/panel/display-timings/default"
|
||||
#define PATHINF "/panel/panel-info"
|
||||
#endif
|
||||
/* --------------------------------------------------------------------------*/
|
||||
#if defined(CONFIG_LCD) && defined(CONFIG_AM335X_LCD) && \
|
||||
!defined(CONFIG_SPL_BUILD)
|
||||
void lcdbacklight(int on)
|
||||
{
|
||||
#ifdef CONFIG_USE_FDT
|
||||
if (gd->fdt_blob == NULL) {
|
||||
printf("%s: don't have a valid gd->fdt_blob!\n", __func__);
|
||||
return;
|
||||
}
|
||||
unsigned int driver = FDTPROP(PATHINF, "brightdrv");
|
||||
unsigned int bright = FDTPROP(PATHINF, "brightdef");
|
||||
unsigned int pwmfrq = FDTPROP(PATHINF, "brightfdim");
|
||||
#else
|
||||
unsigned int driver = getenv_ulong("ds1_bright_drv", 16, 0UL);
|
||||
unsigned int bright = getenv_ulong("ds1_bright_def", 10, 50);
|
||||
unsigned int pwmfrq = getenv_ulong("ds1_pwmfreq", 10, ~0UL);
|
||||
#endif
|
||||
unsigned int tmp;
|
||||
struct gptimer *timerhw;
|
||||
|
||||
if (on)
|
||||
bright = bright != ~0UL ? bright : 50;
|
||||
else
|
||||
bright = 0;
|
||||
|
||||
switch (driver) {
|
||||
case 2:
|
||||
timerhw = (struct gptimer *)DM_TIMER5_BASE;
|
||||
break;
|
||||
default:
|
||||
timerhw = (struct gptimer *)DM_TIMER6_BASE;
|
||||
}
|
||||
|
||||
switch (driver) {
|
||||
case 0: /* PMIC LED-Driver */
|
||||
/* brightness level */
|
||||
tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
|
||||
TPS65217_WLEDCTRL2, bright, 0xFF);
|
||||
/* current sink */
|
||||
tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
|
||||
TPS65217_WLEDCTRL1,
|
||||
bright != 0 ? 0x0A : 0x02,
|
||||
0xFF);
|
||||
break;
|
||||
case 1:
|
||||
case 2: /* PWM using timer */
|
||||
if (pwmfrq != ~0UL) {
|
||||
timerhw->tiocp_cfg = TCFG_RESET;
|
||||
udelay(10);
|
||||
while (timerhw->tiocp_cfg & TCFG_RESET)
|
||||
;
|
||||
tmp = ~0UL-(V_OSCK/pwmfrq); /* bottom value */
|
||||
timerhw->tldr = tmp;
|
||||
timerhw->tcrr = tmp;
|
||||
tmp = tmp + ((V_OSCK/pwmfrq)/100) * bright;
|
||||
timerhw->tmar = tmp;
|
||||
timerhw->tclr = (TCLR_PT | (2 << TCLR_TRG_SHIFT) |
|
||||
TCLR_CE | TCLR_AR | TCLR_ST);
|
||||
} else {
|
||||
puts("invalid pwmfrq in env/dtb! skip PWM-setup.\n");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
puts("no suitable backlightdriver in env/dtb!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int load_lcdtiming(struct am335x_lcdpanel *panel)
|
||||
{
|
||||
struct am335x_lcdpanel pnltmp;
|
||||
#ifdef CONFIG_USE_FDT
|
||||
u32 dtbprop;
|
||||
char buf[32];
|
||||
const char *nodep = 0;
|
||||
int nodeoff;
|
||||
|
||||
if (gd->fdt_blob == NULL) {
|
||||
printf("%s: don't have a valid gd->fdt_blob!\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
memcpy(&pnltmp, (void *)panel, sizeof(struct am335x_lcdpanel));
|
||||
|
||||
pnltmp.hactive = FDTPROP(PATHTIM, "hactive");
|
||||
pnltmp.vactive = FDTPROP(PATHTIM, "vactive");
|
||||
pnltmp.bpp = FDTPROP(PATHINF, "bpp");
|
||||
pnltmp.hfp = FDTPROP(PATHTIM, "hfront-porch");
|
||||
pnltmp.hbp = FDTPROP(PATHTIM, "hback-porch");
|
||||
pnltmp.hsw = FDTPROP(PATHTIM, "hsync-len");
|
||||
pnltmp.vfp = FDTPROP(PATHTIM, "vfront-porch");
|
||||
pnltmp.vbp = FDTPROP(PATHTIM, "vback-porch");
|
||||
pnltmp.vsw = FDTPROP(PATHTIM, "vsync-len");
|
||||
pnltmp.pup_delay = FDTPROP(PATHTIM, "pupdelay");
|
||||
pnltmp.pon_delay = FDTPROP(PATHTIM, "pondelay");
|
||||
|
||||
/* calc. proper clk-divisor */
|
||||
dtbprop = FDTPROP(PATHTIM, "clock-frequency");
|
||||
if (dtbprop != ~0UL)
|
||||
pnltmp.pxl_clk_div = 192000000 / dtbprop;
|
||||
else
|
||||
pnltmp.pxl_clk_div = ~0UL;
|
||||
|
||||
/* check polarity of control-signals */
|
||||
dtbprop = FDTPROP(PATHTIM, "hsync-active");
|
||||
if (dtbprop == 0)
|
||||
pnltmp.pol |= HSYNC_INVERT;
|
||||
dtbprop = FDTPROP(PATHTIM, "vsync-active");
|
||||
if (dtbprop == 0)
|
||||
pnltmp.pol |= VSYNC_INVERT;
|
||||
dtbprop = FDTPROP(PATHINF, "sync-ctrl");
|
||||
if (dtbprop == 1)
|
||||
pnltmp.pol |= HSVS_CONTROL;
|
||||
dtbprop = FDTPROP(PATHINF, "sync-edge");
|
||||
if (dtbprop == 1)
|
||||
pnltmp.pol |= HSVS_RISEFALL;
|
||||
dtbprop = FDTPROP(PATHTIM, "pixelclk-active");
|
||||
if (dtbprop == 0)
|
||||
pnltmp.pol |= PXCLK_INVERT;
|
||||
dtbprop = FDTPROP(PATHTIM, "de-active");
|
||||
if (dtbprop == 0)
|
||||
pnltmp.pol |= DE_INVERT;
|
||||
|
||||
nodeoff = fdt_path_offset(gd->fdt_blob, "/factory-settings");
|
||||
if (nodeoff >= 0) {
|
||||
nodep = fdt_getprop(gd->fdt_blob, nodeoff, "rotation", NULL);
|
||||
if (nodep != 0) {
|
||||
if (strcmp(nodep, "cw") == 0)
|
||||
panel_info.vl_rot = 1;
|
||||
else if (strcmp(nodep, "ud") == 0)
|
||||
panel_info.vl_rot = 2;
|
||||
else if (strcmp(nodep, "ccw") == 0)
|
||||
panel_info.vl_rot = 3;
|
||||
else
|
||||
panel_info.vl_rot = 0;
|
||||
}
|
||||
} else {
|
||||
puts("no 'factory-settings / rotation' in dtb!\n");
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "fbcon=rotate:%d", panel_info.vl_rot);
|
||||
setenv("optargs_rot", buf);
|
||||
#else
|
||||
pnltmp.hactive = getenv_ulong("ds1_hactive", 10, ~0UL);
|
||||
pnltmp.vactive = getenv_ulong("ds1_vactive", 10, ~0UL);
|
||||
pnltmp.bpp = getenv_ulong("ds1_bpp", 10, ~0UL);
|
||||
pnltmp.hfp = getenv_ulong("ds1_hfp", 10, ~0UL);
|
||||
pnltmp.hbp = getenv_ulong("ds1_hbp", 10, ~0UL);
|
||||
pnltmp.hsw = getenv_ulong("ds1_hsw", 10, ~0UL);
|
||||
pnltmp.vfp = getenv_ulong("ds1_vfp", 10, ~0UL);
|
||||
pnltmp.vbp = getenv_ulong("ds1_vbp", 10, ~0UL);
|
||||
pnltmp.vsw = getenv_ulong("ds1_vsw", 10, ~0UL);
|
||||
pnltmp.pxl_clk_div = getenv_ulong("ds1_pxlclkdiv", 10, ~0UL);
|
||||
pnltmp.pol = getenv_ulong("ds1_pol", 16, ~0UL);
|
||||
pnltmp.pup_delay = getenv_ulong("ds1_pupdelay", 10, ~0UL);
|
||||
pnltmp.pon_delay = getenv_ulong("ds1_tondelay", 10, ~0UL);
|
||||
panel_info.vl_rot = getenv_ulong("ds1_rotation", 10, 0);
|
||||
#endif
|
||||
if (
|
||||
~0UL == (pnltmp.hactive) ||
|
||||
~0UL == (pnltmp.vactive) ||
|
||||
~0UL == (pnltmp.bpp) ||
|
||||
~0UL == (pnltmp.hfp) ||
|
||||
~0UL == (pnltmp.hbp) ||
|
||||
~0UL == (pnltmp.hsw) ||
|
||||
~0UL == (pnltmp.vfp) ||
|
||||
~0UL == (pnltmp.vbp) ||
|
||||
~0UL == (pnltmp.vsw) ||
|
||||
~0UL == (pnltmp.pxl_clk_div) ||
|
||||
~0UL == (pnltmp.pol) ||
|
||||
~0UL == (pnltmp.pup_delay) ||
|
||||
~0UL == (pnltmp.pon_delay)
|
||||
) {
|
||||
puts("lcd-settings in env/dtb incomplete!\n");
|
||||
printf("display-timings:\n"
|
||||
"================\n"
|
||||
"hactive: %d\n"
|
||||
"vactive: %d\n"
|
||||
"bpp : %d\n"
|
||||
"hfp : %d\n"
|
||||
"hbp : %d\n"
|
||||
"hsw : %d\n"
|
||||
"vfp : %d\n"
|
||||
"vbp : %d\n"
|
||||
"vsw : %d\n"
|
||||
"pxlclk : %d\n"
|
||||
"pol : 0x%08x\n"
|
||||
"pondly : %d\n",
|
||||
pnltmp.hactive, pnltmp.vactive, pnltmp.bpp,
|
||||
pnltmp.hfp, pnltmp.hbp, pnltmp.hsw,
|
||||
pnltmp.vfp, pnltmp.vbp, pnltmp.vsw,
|
||||
pnltmp.pxl_clk_div, pnltmp.pol, pnltmp.pon_delay);
|
||||
|
||||
return -1;
|
||||
}
|
||||
debug("lcd-settings in env complete, taking over.\n");
|
||||
memcpy((void *)panel,
|
||||
(void *)&pnltmp,
|
||||
sizeof(struct am335x_lcdpanel));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USE_FDT
|
||||
static int load_devicetree(void)
|
||||
{
|
||||
int rc;
|
||||
loff_t dtbsize;
|
||||
u32 dtbaddr = getenv_ulong("dtbaddr", 16, 0UL);
|
||||
|
||||
if (dtbaddr == 0) {
|
||||
printf("%s: don't have a valid <dtbaddr> in env!\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
#ifdef CONFIG_NAND
|
||||
dtbsize = 0x20000;
|
||||
rc = nand_read_skip_bad(nand_info[0], 0x40000, (size_t *)&dtbsize,
|
||||
NULL, 0x20000, (u_char *)dtbaddr);
|
||||
#else
|
||||
char *dtbname = getenv("dtb");
|
||||
char *dtbdev = getenv("dtbdev");
|
||||
char *dtppart = getenv("dtbpart");
|
||||
if (!dtbdev || !dtbdev || !dtbname) {
|
||||
printf("%s: <dtbdev>/<dtbpart>/<dtb> missing.\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fs_set_blk_dev(dtbdev, dtppart, FS_TYPE_EXT)) {
|
||||
puts("load_devicetree: set_blk_dev failed.\n");
|
||||
return -1;
|
||||
}
|
||||
rc = fs_read(dtbname, (u32)dtbaddr, 0, 0, &dtbsize);
|
||||
#endif
|
||||
if (rc == 0) {
|
||||
gd->fdt_blob = (void *)dtbaddr;
|
||||
gd->fdt_size = dtbsize;
|
||||
debug("loaded %d bytes of dtb onto 0x%08x\n",
|
||||
(u32)dtbsize, (u32)gd->fdt_blob);
|
||||
return dtbsize;
|
||||
}
|
||||
|
||||
printf("%s: load dtb failed!\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static const char *dtbmacaddr(u32 ifno)
|
||||
{
|
||||
int node, len;
|
||||
char enet[16];
|
||||
const char *mac;
|
||||
const char *path;
|
||||
|
||||
if (gd->fdt_blob == NULL) {
|
||||
printf("%s: don't have a valid gd->fdt_blob!\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
node = fdt_path_offset(gd->fdt_blob, "/aliases");
|
||||
if (node < 0)
|
||||
return NULL;
|
||||
|
||||
sprintf(enet, "ethernet%d", ifno);
|
||||
path = fdt_getprop(gd->fdt_blob, node, enet, NULL);
|
||||
if (!path) {
|
||||
printf("no alias for %s\n", enet);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
node = fdt_path_offset(gd->fdt_blob, path);
|
||||
mac = fdt_getprop(gd->fdt_blob, node, "mac-address", &len);
|
||||
if (mac && is_valid_ethaddr((u8 *)mac))
|
||||
return mac;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void br_summaryscreen_printdtb(char *prefix,
|
||||
char *name,
|
||||
char *suffix)
|
||||
{
|
||||
char buf[32] = { 0 };
|
||||
const char *nodep = buf;
|
||||
char *mac = 0;
|
||||
int nodeoffset;
|
||||
int len;
|
||||
|
||||
if (gd->fdt_blob == NULL) {
|
||||
printf("%s: don't have a valid gd->fdt_blob!\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(name, "brmac1") == 0) {
|
||||
mac = (char *)dtbmacaddr(0);
|
||||
if (mac)
|
||||
sprintf(buf, "%pM", mac);
|
||||
} else if (strcmp(name, "brmac2") == 0) {
|
||||
mac = (char *)dtbmacaddr(1);
|
||||
if (mac)
|
||||
sprintf(buf, "%pM", mac);
|
||||
} else {
|
||||
nodeoffset = fdt_path_offset(gd->fdt_blob,
|
||||
"/factory-settings");
|
||||
if (nodeoffset < 0) {
|
||||
puts("no 'factory-settings' in dtb!\n");
|
||||
return;
|
||||
}
|
||||
nodep = fdt_getprop(gd->fdt_blob, nodeoffset, name, &len);
|
||||
}
|
||||
if (nodep && strlen(nodep) > 1)
|
||||
lcd_printf("%s %s %s", prefix, nodep, suffix);
|
||||
else
|
||||
lcd_printf("\n");
|
||||
}
|
||||
int ft_board_setup(void *blob, bd_t *bd)
|
||||
{
|
||||
int nodeoffset;
|
||||
|
||||
nodeoffset = fdt_path_offset(blob, "/factory-settings");
|
||||
if (nodeoffset < 0) {
|
||||
puts("set bootloader version 'factory-settings' not in dtb!\n");
|
||||
return -1;
|
||||
}
|
||||
if (fdt_setprop(blob, nodeoffset, "bl-version",
|
||||
PLAIN_VERSION, strlen(PLAIN_VERSION)) != 0) {
|
||||
puts("set bootloader version 'bl-version' prop. not in dtb!\n");
|
||||
return -1;
|
||||
}
|
||||
/*
|
||||
* if no simplefb is requested through environment, we don't set up
|
||||
* one, instead we turn off backlight.
|
||||
*/
|
||||
if (getenv_ulong("simplefb", 10, 0) == 0) {
|
||||
lcdbacklight(0);
|
||||
return 0;
|
||||
}
|
||||
/* Setup simplefb devicetree node, also adapt memory-node,
|
||||
* upper limit for kernel e.g. linux is memtop-framebuffer alligned
|
||||
* to a full megabyte.
|
||||
*/
|
||||
u64 start = gd->bd->bi_dram[0].start;
|
||||
u64 size = (gd->fb_base - start) & ~0xFFFFF;
|
||||
int rc = fdt_fixup_memory_banks(blob, &start, &size, 1);
|
||||
|
||||
if (rc) {
|
||||
puts("cannot setup simplefb: Error reserving memory!\n");
|
||||
return rc;
|
||||
}
|
||||
rc = lcd_dt_simplefb_enable_existing_node(blob);
|
||||
if (rc) {
|
||||
puts("cannot setup simplefb: error enabling simplefb node!\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
|
||||
static void br_summaryscreen_printenv(char *prefix,
|
||||
char *name, char *altname,
|
||||
char *suffix)
|
||||
{
|
||||
char *envval = getenv(name);
|
||||
if (0 != envval) {
|
||||
lcd_printf("%s %s %s", prefix, envval, suffix);
|
||||
} else if (0 != altname) {
|
||||
envval = getenv(altname);
|
||||
if (0 != envval)
|
||||
lcd_printf("%s %s %s", prefix, envval, suffix);
|
||||
} else {
|
||||
lcd_printf("\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
void br_summaryscreen(void)
|
||||
{
|
||||
#ifdef CONFIG_USE_FDT
|
||||
br_summaryscreen_printdtb(" - B&R -", "order-no", "-\n");
|
||||
br_summaryscreen_printdtb(" Serial/Rev :", "serial-no", " /");
|
||||
br_summaryscreen_printdtb(" ", "hw-revision", "\n");
|
||||
br_summaryscreen_printdtb(" MAC (IF1) :", "brmac1", "\n");
|
||||
br_summaryscreen_printdtb(" MAC (IF2) :", "brmac2", "\n");
|
||||
lcd_puts(" Bootloader : " PLAIN_VERSION "\n");
|
||||
lcd_puts("\n");
|
||||
#else
|
||||
br_summaryscreen_printenv(" - B&R -", "br_orderno", 0, "-\n");
|
||||
br_summaryscreen_printenv(" Serial/Rev :", "br_serial", 0, "\n");
|
||||
br_summaryscreen_printenv(" MAC (IF1) :", "br_mac1", "ethaddr", "\n");
|
||||
br_summaryscreen_printenv(" MAC (IF2) :", "br_mac2", 0, "\n");
|
||||
lcd_puts(" Bootloader : " PLAIN_VERSION "\n");
|
||||
lcd_puts("\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
void lcdpower(int on)
|
||||
{
|
||||
u32 pin, swval, i;
|
||||
#ifdef CONFIG_USE_FDT
|
||||
if (gd->fdt_blob == NULL) {
|
||||
printf("%s: don't have a valid gd->fdt_blob!\n", __func__);
|
||||
return;
|
||||
}
|
||||
pin = FDTPROP(PATHINF, "pwrpin");
|
||||
#else
|
||||
pin = getenv_ulong("ds1_pwr", 16, ~0UL);
|
||||
#endif
|
||||
if (pin == ~0UL) {
|
||||
puts("no pwrpin in dtb/env, cannot powerup display!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
if (pin != 0) {
|
||||
swval = pin & 0x80 ? 0 : 1;
|
||||
if (on)
|
||||
gpio_direction_output(pin & 0x7F, swval);
|
||||
else
|
||||
gpio_direction_output(pin & 0x7F, !swval);
|
||||
|
||||
debug("switched pin %d to %d\n", pin & 0x7F, swval);
|
||||
}
|
||||
pin >>= 8;
|
||||
}
|
||||
}
|
||||
|
||||
vidinfo_t panel_info = {
|
||||
.vl_col = 1366, /*
|
||||
* give full resolution for allocating enough
|
||||
* memory
|
||||
*/
|
||||
.vl_row = 768,
|
||||
.vl_bpix = 5,
|
||||
.priv = 0
|
||||
};
|
||||
|
||||
void lcd_ctrl_init(void *lcdbase)
|
||||
{
|
||||
struct am335x_lcdpanel lcd_panel;
|
||||
#ifdef CONFIG_USE_FDT
|
||||
/* TODO: is there a better place to load the dtb ? */
|
||||
load_devicetree();
|
||||
#endif
|
||||
memset(&lcd_panel, 0, sizeof(struct am335x_lcdpanel));
|
||||
if (load_lcdtiming(&lcd_panel) != 0)
|
||||
return;
|
||||
|
||||
lcd_panel.panel_power_ctrl = &lcdpower;
|
||||
|
||||
if (0 != am335xfb_init(&lcd_panel))
|
||||
printf("ERROR: failed to initialize video!");
|
||||
/*
|
||||
* modifiy panel info to 'real' resolution, to operate correct with
|
||||
* lcd-framework.
|
||||
*/
|
||||
panel_info.vl_col = lcd_panel.hactive;
|
||||
panel_info.vl_row = lcd_panel.vactive;
|
||||
|
||||
lcd_set_flush_dcache(1);
|
||||
}
|
||||
|
||||
void lcd_enable(void)
|
||||
{
|
||||
br_summaryscreen();
|
||||
lcdbacklight(1);
|
||||
}
|
||||
#elif CONFIG_SPL_BUILD
|
||||
#else
|
||||
#error "LCD-support with a suitable FB-Driver is mandatory !"
|
||||
#endif /* CONFIG_LCD */
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
void pmicsetup(u32 mpupll)
|
||||
{
|
||||
int mpu_vdd;
|
||||
int usb_cur_lim;
|
||||
|
||||
if (i2c_probe(TPS65217_CHIP_PM)) {
|
||||
puts("PMIC (0x24) not found! skip further initalization.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get the frequency which is defined by device fuses */
|
||||
dpll_mpu_opp100.m = am335x_get_efuse_mpu_max_freq(cdev);
|
||||
printf("detected max. frequency: %d - ", dpll_mpu_opp100.m);
|
||||
|
||||
if (0 != mpupll) {
|
||||
dpll_mpu_opp100.m = MPUPLL_M_1000;
|
||||
printf("retuning MPU-PLL to: %d MHz.\n", dpll_mpu_opp100.m);
|
||||
} else {
|
||||
puts("ok.\n");
|
||||
}
|
||||
/*
|
||||
* Increase USB current limit to 1300mA or 1800mA and set
|
||||
* the MPU voltage controller as needed.
|
||||
*/
|
||||
if (dpll_mpu_opp100.m == MPUPLL_M_1000) {
|
||||
usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1800MA;
|
||||
mpu_vdd = TPS65217_DCDC_VOLT_SEL_1325MV;
|
||||
} else {
|
||||
usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1300MA;
|
||||
mpu_vdd = TPS65217_DCDC_VOLT_SEL_1275MV;
|
||||
}
|
||||
|
||||
if (tps65217_reg_write(TPS65217_PROT_LEVEL_NONE, TPS65217_POWER_PATH,
|
||||
usb_cur_lim, TPS65217_USB_INPUT_CUR_LIMIT_MASK))
|
||||
puts("tps65217_reg_write failure\n");
|
||||
|
||||
/* Set DCDC3 (CORE) voltage to 1.125V */
|
||||
if (tps65217_voltage_update(TPS65217_DEFDCDC3,
|
||||
TPS65217_DCDC_VOLT_SEL_1125MV)) {
|
||||
puts("tps65217_voltage_update failure\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Set CORE Frequencies to OPP100 */
|
||||
do_setup_dpll(&dpll_core_regs, &dpll_core_opp100);
|
||||
|
||||
/* Set DCDC2 (MPU) voltage */
|
||||
if (tps65217_voltage_update(TPS65217_DEFDCDC2, mpu_vdd)) {
|
||||
puts("tps65217_voltage_update failure\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Set LDO3 to 1.8V */
|
||||
if (tps65217_reg_write(TPS65217_PROT_LEVEL_2,
|
||||
TPS65217_DEFLS1,
|
||||
TPS65217_LDO_VOLTAGE_OUT_1_8,
|
||||
TPS65217_LDO_MASK))
|
||||
puts("tps65217_reg_write failure\n");
|
||||
/* Set LDO4 to 3.3V */
|
||||
if (tps65217_reg_write(TPS65217_PROT_LEVEL_2,
|
||||
TPS65217_DEFLS2,
|
||||
TPS65217_LDO_VOLTAGE_OUT_3_3,
|
||||
TPS65217_LDO_MASK))
|
||||
puts("tps65217_reg_write failure\n");
|
||||
|
||||
/* Set MPU Frequency to what we detected now that voltages are set */
|
||||
do_setup_dpll(&dpll_mpu_regs, &dpll_mpu_opp100);
|
||||
/* Set PWR_EN bit in Status Register */
|
||||
tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
|
||||
TPS65217_STATUS, TPS65217_PWR_OFF, TPS65217_PWR_OFF);
|
||||
}
|
||||
|
||||
void set_uart_mux_conf(void)
|
||||
{
|
||||
enable_uart0_pin_mux();
|
||||
}
|
||||
|
||||
void set_mux_conf_regs(void)
|
||||
{
|
||||
enable_board_pin_mux();
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SPL_BUILD */
|
||||
|
||||
#if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \
|
||||
(defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD))
|
||||
static void cpsw_control(int enabled)
|
||||
{
|
||||
/* VTP can be added here */
|
||||
return;
|
||||
}
|
||||
|
||||
/* describing port offsets of TI's CPSW block */
|
||||
static struct cpsw_slave_data cpsw_slaves[] = {
|
||||
{
|
||||
.slave_reg_ofs = 0x208,
|
||||
.sliver_reg_ofs = 0xd80,
|
||||
.phy_addr = 1,
|
||||
},
|
||||
{
|
||||
.slave_reg_ofs = 0x308,
|
||||
.sliver_reg_ofs = 0xdc0,
|
||||
.phy_addr = 2,
|
||||
},
|
||||
};
|
||||
|
||||
static struct cpsw_platform_data cpsw_data = {
|
||||
.mdio_base = CPSW_MDIO_BASE,
|
||||
.cpsw_base = CPSW_BASE,
|
||||
.mdio_div = 0xff,
|
||||
.channels = 8,
|
||||
.cpdma_reg_ofs = 0x800,
|
||||
.slaves = 1,
|
||||
.slave_data = cpsw_slaves,
|
||||
.ale_reg_ofs = 0xd00,
|
||||
.ale_entries = 1024,
|
||||
.host_port_reg_ofs = 0x108,
|
||||
.hw_stats_reg_ofs = 0x900,
|
||||
.bd_ram_ofs = 0x2000,
|
||||
.mac_control = (1 << 5),
|
||||
.control = cpsw_control,
|
||||
.host_port_num = 0,
|
||||
.version = CPSW_CTRL_VERSION_2,
|
||||
};
|
||||
#endif /* CONFIG_DRIVER_TI_CPSW, ... */
|
||||
|
||||
#if defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
int rv = 0;
|
||||
char mac_addr[6];
|
||||
const char *mac = 0;
|
||||
uint32_t mac_hi, mac_lo;
|
||||
/* try reading mac address from efuse */
|
||||
mac_lo = readl(&cdev->macid0l);
|
||||
mac_hi = readl(&cdev->macid0h);
|
||||
mac_addr[0] = mac_hi & 0xFF;
|
||||
mac_addr[1] = (mac_hi & 0xFF00) >> 8;
|
||||
mac_addr[2] = (mac_hi & 0xFF0000) >> 16;
|
||||
mac_addr[3] = (mac_hi & 0xFF000000) >> 24;
|
||||
mac_addr[4] = mac_lo & 0xFF;
|
||||
mac_addr[5] = (mac_lo & 0xFF00) >> 8;
|
||||
|
||||
if (!getenv("ethaddr")) {
|
||||
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_USE_FDT)
|
||||
printf("<ethaddr> not set. trying DTB ... ");
|
||||
mac = dtbmacaddr(0);
|
||||
#endif
|
||||
if (!mac) {
|
||||
printf("<ethaddr> not set. validating E-fuse MAC ... ");
|
||||
if (is_valid_ethaddr((const u8 *)mac_addr))
|
||||
mac = (const char *)mac_addr;
|
||||
}
|
||||
|
||||
if (mac) {
|
||||
printf("using: %pM on ", mac);
|
||||
eth_setenv_enetaddr("ethaddr", (const u8 *)mac);
|
||||
}
|
||||
}
|
||||
writel(MII_MODE_ENABLE, &cdev->miisel);
|
||||
cpsw_slaves[0].phy_if = PHY_INTERFACE_MODE_MII;
|
||||
cpsw_slaves[1].phy_if = PHY_INTERFACE_MODE_MII;
|
||||
|
||||
rv = cpsw_register(&cpsw_data);
|
||||
if (rv < 0) {
|
||||
printf("Error %d registering CPSW switch\n", rv);
|
||||
return 0;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
#endif /* defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD) */
|
||||
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
|
||||
int board_mmc_init(bd_t *bis)
|
||||
{
|
||||
return omap_mmc_init(1, 0, 0, -1, -1);
|
||||
}
|
||||
#endif
|
||||
int overwrite_console(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
15
u-boot/board/BuS/eb_cpu5282/Kconfig
Normal file
15
u-boot/board/BuS/eb_cpu5282/Kconfig
Normal file
@@ -0,0 +1,15 @@
|
||||
if TARGET_EB_CPU5282
|
||||
|
||||
config SYS_CPU
|
||||
default "mcf52x2"
|
||||
|
||||
config SYS_BOARD
|
||||
default "eb_cpu5282"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "BuS"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "eb_cpu5282"
|
||||
|
||||
endif
|
||||
7
u-boot/board/BuS/eb_cpu5282/MAINTAINERS
Normal file
7
u-boot/board/BuS/eb_cpu5282/MAINTAINERS
Normal file
@@ -0,0 +1,7 @@
|
||||
EB_CPU5282 BOARD
|
||||
M: Jens Scharsig <esw@bus-elektronik.de>
|
||||
S: Maintained
|
||||
F: board/BuS/eb_cpu5282/
|
||||
F: include/configs/eb_cpu5282.h
|
||||
F: configs/eb_cpu5282_defconfig
|
||||
F: configs/eb_cpu5282_internal_defconfig
|
||||
8
u-boot/board/BuS/eb_cpu5282/Makefile
Normal file
8
u-boot/board/BuS/eb_cpu5282/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
#
|
||||
# (C) Copyright 2000-2006
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y = eb_cpu5282.o
|
||||
264
u-boot/board/BuS/eb_cpu5282/eb_cpu5282.c
Normal file
264
u-boot/board/BuS/eb_cpu5282/eb_cpu5282.c
Normal file
@@ -0,0 +1,264 @@
|
||||
/*
|
||||
* (C) Copyright 2005-2009
|
||||
* BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
|
||||
*
|
||||
* (C) Copyright 2000-2003
|
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include "asm/m5282.h"
|
||||
#include <bmp_layout.h>
|
||||
#include <status_led.h>
|
||||
#include <bus_vcxk.h>
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifdef CONFIG_VIDEO
|
||||
unsigned long display_width;
|
||||
unsigned long display_height;
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
int checkboard (void)
|
||||
{
|
||||
puts("Board: EB+CPU5282 (BuS Elektronik GmbH & Co. KG)\n");
|
||||
#if (CONFIG_SYS_TEXT_BASE == CONFIG_SYS_INT_FLASH_BASE)
|
||||
puts(" Boot from Internal FLASH\n");
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram (int board_type)
|
||||
{
|
||||
int size, i;
|
||||
|
||||
size = 0;
|
||||
MCFSDRAMC_DCR = MCFSDRAMC_DCR_RTIM_6 |
|
||||
MCFSDRAMC_DCR_RC((15 * CONFIG_SYS_CLK / 1000000) >> 4);
|
||||
asm (" nop");
|
||||
#ifdef CONFIG_SYS_SDRAM_BASE0
|
||||
MCFSDRAMC_DACR0 = MCFSDRAMC_DACR_BASE(CONFIG_SYS_SDRAM_BASE0)|
|
||||
MCFSDRAMC_DACR_CASL(1) | MCFSDRAMC_DACR_CBM(3) |
|
||||
MCFSDRAMC_DACR_PS_32;
|
||||
asm (" nop");
|
||||
|
||||
MCFSDRAMC_DMR0 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
|
||||
asm (" nop");
|
||||
|
||||
MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IP;
|
||||
asm (" nop");
|
||||
for (i = 0; i < 10; i++)
|
||||
asm (" nop");
|
||||
|
||||
*(unsigned long *)(CONFIG_SYS_SDRAM_BASE0) = 0xA5A5A5A5;
|
||||
asm (" nop");
|
||||
MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_RE;
|
||||
asm (" nop");
|
||||
|
||||
for (i = 0; i < 2000; i++)
|
||||
asm (" nop");
|
||||
|
||||
MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IMRS;
|
||||
asm (" nop");
|
||||
/* write SDRAM mode register */
|
||||
*(unsigned long *)(CONFIG_SYS_SDRAM_BASE0 + 0x80440) = 0xA5A5A5A5;
|
||||
asm (" nop");
|
||||
size += CONFIG_SYS_SDRAM_SIZE0 * 1024 * 1024;
|
||||
#endif
|
||||
#ifdef CONFIG_SYS_SDRAM_BASE1xx
|
||||
MCFSDRAMC_DACR1 = MCFSDRAMC_DACR_BASE (CONFIG_SYS_SDRAM_BASE1)
|
||||
| MCFSDRAMC_DACR_CASL (1)
|
||||
| MCFSDRAMC_DACR_CBM (3)
|
||||
| MCFSDRAMC_DACR_PS_16;
|
||||
|
||||
MCFSDRAMC_DMR1 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
|
||||
|
||||
MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_IP;
|
||||
|
||||
*(unsigned short *) (CONFIG_SYS_SDRAM_BASE1) = 0xA5A5;
|
||||
MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_RE;
|
||||
|
||||
for (i = 0; i < 2000; i++)
|
||||
asm (" nop");
|
||||
|
||||
MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_IMRS;
|
||||
*(unsigned int *) (CONFIG_SYS_SDRAM_BASE1 + 0x220) = 0xA5A5;
|
||||
size += CONFIG_SYS_SDRAM_SIZE1 * 1024 * 1024;
|
||||
#endif
|
||||
return size;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_SYS_DRAM_TEST)
|
||||
int testdram (void)
|
||||
{
|
||||
uint *pstart = (uint *) CONFIG_SYS_MEMTEST_START;
|
||||
uint *pend = (uint *) CONFIG_SYS_MEMTEST_END;
|
||||
uint *p;
|
||||
|
||||
printf("SDRAM test phase 1:\n");
|
||||
for (p = pstart; p < pend; p++)
|
||||
*p = 0xaaaaaaaa;
|
||||
|
||||
for (p = pstart; p < pend; p++) {
|
||||
if (*p != 0xaaaaaaaa) {
|
||||
printf ("SDRAM test fails at: %08x\n", (uint) p);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("SDRAM test phase 2:\n");
|
||||
for (p = pstart; p < pend; p++)
|
||||
*p = 0x55555555;
|
||||
|
||||
for (p = pstart; p < pend; p++) {
|
||||
if (*p != 0x55555555) {
|
||||
printf ("SDRAM test fails at: %08x\n", (uint) p);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("SDRAM test passed.\n");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_HW_WATCHDOG)
|
||||
|
||||
void hw_watchdog_init(void)
|
||||
{
|
||||
char *s;
|
||||
int enable;
|
||||
|
||||
enable = 1;
|
||||
s = getenv("watchdog");
|
||||
if (s != NULL)
|
||||
if ((strncmp(s, "off", 3) == 0) || (strncmp(s, "0", 1) == 0))
|
||||
enable = 0;
|
||||
if (enable)
|
||||
MCFGPTA_GPTDDR |= (1<<2);
|
||||
else
|
||||
MCFGPTA_GPTDDR &= ~(1<<2);
|
||||
}
|
||||
|
||||
void hw_watchdog_reset(void)
|
||||
{
|
||||
MCFGPTA_GPTPORT ^= (1<<2);
|
||||
}
|
||||
#endif
|
||||
|
||||
int misc_init_r(void)
|
||||
{
|
||||
#ifdef CONFIG_HW_WATCHDOG
|
||||
hw_watchdog_init();
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
void __led_toggle(led_id_t mask)
|
||||
{
|
||||
MCFGPTA_GPTPORT ^= (1 << 3);
|
||||
}
|
||||
|
||||
void __led_init(led_id_t mask, int state)
|
||||
{
|
||||
__led_set(mask, state);
|
||||
MCFGPTA_GPTDDR |= (1 << 3);
|
||||
}
|
||||
|
||||
void __led_set(led_id_t mask, int state)
|
||||
{
|
||||
if (state == STATUS_LED_ON)
|
||||
MCFGPTA_GPTPORT |= (1 << 3);
|
||||
else
|
||||
MCFGPTA_GPTPORT &= ~(1 << 3);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_VIDEO)
|
||||
|
||||
int drv_video_init(void)
|
||||
{
|
||||
char *s;
|
||||
#ifdef CONFIG_SPLASH_SCREEN
|
||||
unsigned long splash;
|
||||
#endif
|
||||
printf("Init Video as ");
|
||||
s = getenv("displaywidth");
|
||||
if (s != NULL)
|
||||
display_width = simple_strtoul(s, NULL, 10);
|
||||
else
|
||||
display_width = 256;
|
||||
|
||||
s = getenv("displayheight");
|
||||
if (s != NULL)
|
||||
display_height = simple_strtoul(s, NULL, 10);
|
||||
else
|
||||
display_height = 256;
|
||||
|
||||
printf("%lu x %lu pixel matrix\n", display_width, display_height);
|
||||
|
||||
MCFCCM_CCR &= ~MCFCCM_CCR_SZEN;
|
||||
MCFGPIO_PEPAR &= ~MCFGPIO_PEPAR_PEPA2;
|
||||
|
||||
vcxk_init(display_width, display_height);
|
||||
|
||||
#ifdef CONFIG_SPLASH_SCREEN
|
||||
s = getenv("splashimage");
|
||||
if (s != NULL) {
|
||||
splash = simple_strtoul(s, NULL, 16);
|
||||
vcxk_acknowledge_wait();
|
||||
video_display_bitmap(splash, 0, 0);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef CONFIG_VIDEO
|
||||
int do_brightness(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||
{
|
||||
int rcode = 0;
|
||||
ulong side;
|
||||
ulong bright;
|
||||
|
||||
switch (argc) {
|
||||
case 3:
|
||||
side = simple_strtoul(argv[1], NULL, 10);
|
||||
bright = simple_strtoul(argv[2], NULL, 10);
|
||||
if ((side >= 0) && (side <= 3) &&
|
||||
(bright >= 0) && (bright <= 1000)) {
|
||||
vcxk_setbrightness(side, bright);
|
||||
rcode = 0;
|
||||
} else {
|
||||
printf("parameters out of range\n");
|
||||
printf("Usage:\n%s\n", cmdtp->usage);
|
||||
rcode = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("Usage:\n%s\n", cmdtp->usage);
|
||||
rcode = 1;
|
||||
break;
|
||||
}
|
||||
return rcode;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
U_BOOT_CMD(
|
||||
bright, 3, 0, do_brightness,
|
||||
"sets the display brightness\n",
|
||||
" <side> <0..1000>\n side: 0/3=both; 1=first; 2=second\n"
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
/* EOF EB+MCF-EV123.c */
|
||||
15
u-boot/board/CarMediaLab/flea3/Kconfig
Normal file
15
u-boot/board/CarMediaLab/flea3/Kconfig
Normal file
@@ -0,0 +1,15 @@
|
||||
if TARGET_FLEA3
|
||||
|
||||
config SYS_BOARD
|
||||
default "flea3"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "CarMediaLab"
|
||||
|
||||
config SYS_SOC
|
||||
default "mx35"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "flea3"
|
||||
|
||||
endif
|
||||
6
u-boot/board/CarMediaLab/flea3/MAINTAINERS
Normal file
6
u-boot/board/CarMediaLab/flea3/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
FLEA3 BOARD
|
||||
M: Stefano Babic <sbabic@denx.de>
|
||||
S: Maintained
|
||||
F: board/CarMediaLab/flea3/
|
||||
F: include/configs/flea3.h
|
||||
F: configs/flea3_defconfig
|
||||
10
u-boot/board/CarMediaLab/flea3/Makefile
Normal file
10
u-boot/board/CarMediaLab/flea3/Makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
#
|
||||
# Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
|
||||
#
|
||||
# (C) Copyright 2008-2009 Freescale Semiconductor, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := flea3.o
|
||||
obj-y += lowlevel_init.o
|
||||
278
u-boot/board/CarMediaLab/flea3/flea3.c
Normal file
278
u-boot/board/CarMediaLab/flea3/flea3.c
Normal file
@@ -0,0 +1,278 @@
|
||||
/*
|
||||
* Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
|
||||
*
|
||||
* (C) Copyright 2008-2010 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* Copyright (C) 2011, Stefano Babic <sbabic@denx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/iomux-mx35.h>
|
||||
#include <i2c.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <netdev.h>
|
||||
|
||||
#ifndef CONFIG_BOARD_EARLY_INIT_F
|
||||
#error "CONFIG_BOARD_EARLY_INIT_F must be set for this board"
|
||||
#endif
|
||||
|
||||
#define CCM_CCMR_CONFIG 0x003F4208
|
||||
|
||||
#define ESDCTL_DDR2_CONFIG 0x007FFC3F
|
||||
#define ESDCTL_0x92220000 0x92220000
|
||||
#define ESDCTL_0xA2220000 0xA2220000
|
||||
#define ESDCTL_0xB2220000 0xB2220000
|
||||
#define ESDCTL_0x82228080 0x82228080
|
||||
#define ESDCTL_DDR2_EMR2 0x04000000
|
||||
#define ESDCTL_DDR2_EMR3 0x06000000
|
||||
#define ESDCTL_PRECHARGE 0x00000400
|
||||
#define ESDCTL_DDR2_EN_DLL 0x02000400
|
||||
#define ESDCTL_DDR2_RESET_DLL 0x00000333
|
||||
#define ESDCTL_DDR2_MR 0x00000233
|
||||
#define ESDCTL_DDR2_OCD_DEFAULT 0x02000780
|
||||
#define ESDCTL_DELAY_LINE5 0x00F49F00
|
||||
|
||||
static inline void dram_wait(unsigned int count)
|
||||
{
|
||||
volatile unsigned int wait = count;
|
||||
|
||||
while (wait--)
|
||||
;
|
||||
}
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1,
|
||||
PHYS_SDRAM_1_SIZE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void board_setup_sdram_bank(u32 start_address)
|
||||
|
||||
{
|
||||
struct esdc_regs *esdc = (struct esdc_regs *)ESDCTL_BASE_ADDR;
|
||||
u32 *cfg_reg, *ctl_reg;
|
||||
u32 val;
|
||||
|
||||
switch (start_address) {
|
||||
case CSD0_BASE_ADDR:
|
||||
cfg_reg = &esdc->esdcfg0;
|
||||
ctl_reg = &esdc->esdctl0;
|
||||
break;
|
||||
case CSD1_BASE_ADDR:
|
||||
cfg_reg = &esdc->esdcfg1;
|
||||
ctl_reg = &esdc->esdctl1;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
/* Initialize MISC register for DDR2 */
|
||||
val = ESDC_MISC_RST | ESDC_MISC_MDDR_EN | ESDC_MISC_MDDR_DL_RST |
|
||||
ESDC_MISC_DDR_EN | ESDC_MISC_DDR2_EN;
|
||||
writel(val, &esdc->esdmisc);
|
||||
val &= ~(ESDC_MISC_RST | ESDC_MISC_MDDR_DL_RST);
|
||||
writel(val, &esdc->esdmisc);
|
||||
|
||||
/*
|
||||
* according to DDR2 specs, wait a while before
|
||||
* the PRECHARGE_ALL command
|
||||
*/
|
||||
dram_wait(0x20000);
|
||||
|
||||
/* Load DDR2 config and timing */
|
||||
writel(ESDCTL_DDR2_CONFIG, cfg_reg);
|
||||
|
||||
/* Precharge ALL */
|
||||
writel(ESDCTL_0x92220000,
|
||||
ctl_reg);
|
||||
writel(0xda, start_address + ESDCTL_PRECHARGE);
|
||||
|
||||
/* Load mode */
|
||||
writel(ESDCTL_0xB2220000,
|
||||
ctl_reg);
|
||||
writeb(0xda, start_address + ESDCTL_DDR2_EMR2); /* EMRS2 */
|
||||
writeb(0xda, start_address + ESDCTL_DDR2_EMR3); /* EMRS3 */
|
||||
writeb(0xda, start_address + ESDCTL_DDR2_EN_DLL); /* Enable DLL */
|
||||
writeb(0xda, start_address + ESDCTL_DDR2_RESET_DLL); /* Reset DLL */
|
||||
|
||||
/* Precharge ALL */
|
||||
writel(ESDCTL_0x92220000,
|
||||
ctl_reg);
|
||||
writel(0xda, start_address + ESDCTL_PRECHARGE);
|
||||
|
||||
/* Set mode auto refresh : at least two refresh are required */
|
||||
writel(ESDCTL_0xA2220000,
|
||||
ctl_reg);
|
||||
writel(0xda, start_address);
|
||||
writel(0xda, start_address);
|
||||
|
||||
writel(ESDCTL_0xB2220000,
|
||||
ctl_reg);
|
||||
writeb(0xda, start_address + ESDCTL_DDR2_MR);
|
||||
writeb(0xda, start_address + ESDCTL_DDR2_OCD_DEFAULT);
|
||||
|
||||
/* OCD mode exit */
|
||||
writeb(0xda, start_address + ESDCTL_DDR2_EN_DLL); /* Enable DLL */
|
||||
|
||||
/* Set normal mode */
|
||||
writel(ESDCTL_0x82228080,
|
||||
ctl_reg);
|
||||
|
||||
dram_wait(0x20000);
|
||||
|
||||
/* Do not set delay lines, only for MDDR */
|
||||
}
|
||||
|
||||
static void board_setup_sdram(void)
|
||||
{
|
||||
struct esdc_regs *esdc = (struct esdc_regs *)ESDCTL_BASE_ADDR;
|
||||
|
||||
/* Initialize with default values both CSD0/1 */
|
||||
writel(0x2000, &esdc->esdctl0);
|
||||
writel(0x2000, &esdc->esdctl1);
|
||||
|
||||
board_setup_sdram_bank(CSD0_BASE_ADDR);
|
||||
}
|
||||
|
||||
static void setup_iomux_uart3(void)
|
||||
{
|
||||
static const iomux_v3_cfg_t uart3_pads[] = {
|
||||
MX35_PAD_RTS2__UART3_RXD_MUX,
|
||||
MX35_PAD_CTS2__UART3_TXD_MUX,
|
||||
};
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads));
|
||||
}
|
||||
|
||||
#define I2C_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN | PAD_CTL_ODE)
|
||||
|
||||
static void setup_iomux_i2c(void)
|
||||
{
|
||||
static const iomux_v3_cfg_t i2c_pads[] = {
|
||||
NEW_PAD_CTRL(MX35_PAD_I2C1_CLK__I2C1_SCL, I2C_PAD_CTRL),
|
||||
NEW_PAD_CTRL(MX35_PAD_I2C1_DAT__I2C1_SDA, I2C_PAD_CTRL),
|
||||
|
||||
NEW_PAD_CTRL(MX35_PAD_TX3_RX2__I2C3_SCL, I2C_PAD_CTRL),
|
||||
NEW_PAD_CTRL(MX35_PAD_TX2_RX3__I2C3_SDA, I2C_PAD_CTRL),
|
||||
};
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(i2c_pads, ARRAY_SIZE(i2c_pads));
|
||||
}
|
||||
|
||||
|
||||
static void setup_iomux_spi(void)
|
||||
{
|
||||
static const iomux_v3_cfg_t spi_pads[] = {
|
||||
MX35_PAD_CSPI1_MOSI__CSPI1_MOSI,
|
||||
MX35_PAD_CSPI1_MISO__CSPI1_MISO,
|
||||
MX35_PAD_CSPI1_SS0__CSPI1_SS0,
|
||||
MX35_PAD_CSPI1_SS1__CSPI1_SS1,
|
||||
MX35_PAD_CSPI1_SCLK__CSPI1_SCLK,
|
||||
};
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(spi_pads, ARRAY_SIZE(spi_pads));
|
||||
}
|
||||
|
||||
static void setup_iomux_fec(void)
|
||||
{
|
||||
static const iomux_v3_cfg_t fec_pads[] = {
|
||||
MX35_PAD_FEC_TX_CLK__FEC_TX_CLK,
|
||||
MX35_PAD_FEC_RX_CLK__FEC_RX_CLK,
|
||||
MX35_PAD_FEC_RX_DV__FEC_RX_DV,
|
||||
MX35_PAD_FEC_COL__FEC_COL,
|
||||
MX35_PAD_FEC_RDATA0__FEC_RDATA_0,
|
||||
MX35_PAD_FEC_TDATA0__FEC_TDATA_0,
|
||||
MX35_PAD_FEC_TX_EN__FEC_TX_EN,
|
||||
MX35_PAD_FEC_MDC__FEC_MDC,
|
||||
MX35_PAD_FEC_MDIO__FEC_MDIO,
|
||||
MX35_PAD_FEC_TX_ERR__FEC_TX_ERR,
|
||||
MX35_PAD_FEC_RX_ERR__FEC_RX_ERR,
|
||||
MX35_PAD_FEC_CRS__FEC_CRS,
|
||||
MX35_PAD_FEC_RDATA1__FEC_RDATA_1,
|
||||
MX35_PAD_FEC_TDATA1__FEC_TDATA_1,
|
||||
MX35_PAD_FEC_RDATA2__FEC_RDATA_2,
|
||||
MX35_PAD_FEC_TDATA2__FEC_TDATA_2,
|
||||
MX35_PAD_FEC_RDATA3__FEC_RDATA_3,
|
||||
MX35_PAD_FEC_TDATA3__FEC_TDATA_3,
|
||||
};
|
||||
|
||||
/* setup pins for FEC */
|
||||
imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
struct ccm_regs *ccm =
|
||||
(struct ccm_regs *)IMX_CCM_BASE;
|
||||
|
||||
/* setup GPIO3_1 to set HighVCore signal */
|
||||
imx_iomux_v3_setup_pad(MX35_PAD_ATA_DA1__GPIO3_1);
|
||||
gpio_direction_output(65, 1);
|
||||
|
||||
/* initialize PLL and clock configuration */
|
||||
writel(CCM_CCMR_CONFIG, &ccm->ccmr);
|
||||
|
||||
writel(CCM_MPLL_532_HZ, &ccm->mpctl);
|
||||
writel(CCM_PPLL_300_HZ, &ccm->ppctl);
|
||||
|
||||
/* Set the core to run at 532 Mhz */
|
||||
writel(0x00001000, &ccm->pdr0);
|
||||
|
||||
/* Set-up RAM */
|
||||
board_setup_sdram();
|
||||
|
||||
/* enable clocks */
|
||||
writel(readl(&ccm->cgr0) |
|
||||
MXC_CCM_CGR0_EMI_MASK |
|
||||
MXC_CCM_CGR0_EDIO_MASK |
|
||||
MXC_CCM_CGR0_EPIT1_MASK,
|
||||
&ccm->cgr0);
|
||||
|
||||
writel(readl(&ccm->cgr1) |
|
||||
MXC_CCM_CGR1_FEC_MASK |
|
||||
MXC_CCM_CGR1_GPIO1_MASK |
|
||||
MXC_CCM_CGR1_GPIO2_MASK |
|
||||
MXC_CCM_CGR1_GPIO3_MASK |
|
||||
MXC_CCM_CGR1_I2C1_MASK |
|
||||
MXC_CCM_CGR1_I2C2_MASK |
|
||||
MXC_CCM_CGR1_I2C3_MASK,
|
||||
&ccm->cgr1);
|
||||
|
||||
/* Set-up NAND */
|
||||
__raw_writel(readl(&ccm->rcsr) | MXC_CCM_RCSR_NFC_FMS, &ccm->rcsr);
|
||||
|
||||
/* Set pinmux for the required peripherals */
|
||||
setup_iomux_uart3();
|
||||
setup_iomux_i2c();
|
||||
setup_iomux_fec();
|
||||
setup_iomux_spi();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* address of boot parameters */
|
||||
gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 get_board_rev(void)
|
||||
{
|
||||
int rev = 0;
|
||||
|
||||
return (get_cpu_rev() & ~(0xF << 8)) | (rev & 0xF) << 8;
|
||||
}
|
||||
25
u-boot/board/CarMediaLab/flea3/lowlevel_init.S
Normal file
25
u-boot/board/CarMediaLab/flea3/lowlevel_init.S
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
|
||||
*
|
||||
* (C) Copyright 2008-2010 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* Copyright (C) 2011, Stefano Babic <sbabic@denx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <asm/arch/lowlevel_macro.S>
|
||||
|
||||
.globl lowlevel_init
|
||||
lowlevel_init:
|
||||
|
||||
core_init
|
||||
|
||||
init_aips
|
||||
|
||||
init_max
|
||||
|
||||
init_m3if
|
||||
|
||||
mov pc, lr
|
||||
105
u-boot/board/LaCie/common/common.c
Normal file
105
u-boot/board/LaCie/common/common.c
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <i2c.h>
|
||||
#include <miiphy.h>
|
||||
|
||||
#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
|
||||
|
||||
#define MII_MARVELL_PHY_PAGE 22
|
||||
|
||||
#define MV88E1116_LED_FCTRL_REG 10
|
||||
#define MV88E1116_CPRSP_CR3_REG 21
|
||||
#define MV88E1116_MAC_CTRL_REG 21
|
||||
#define MV88E1116_RGMII_TXTM_CTRL (1 << 4)
|
||||
#define MV88E1116_RGMII_RXTM_CTRL (1 << 5)
|
||||
|
||||
void mv_phy_88e1116_init(const char *name, u16 phyaddr)
|
||||
{
|
||||
u16 reg;
|
||||
|
||||
if (miiphy_set_current_dev(name))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Enable RGMII delay on Tx and Rx for CPU port
|
||||
* Ref: sec 4.7.2 of chip datasheet
|
||||
*/
|
||||
miiphy_write(name, phyaddr, MII_MARVELL_PHY_PAGE, 2);
|
||||
miiphy_read(name, phyaddr, MV88E1116_MAC_CTRL_REG, ®);
|
||||
reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
|
||||
miiphy_write(name, phyaddr, MV88E1116_MAC_CTRL_REG, reg);
|
||||
miiphy_write(name, phyaddr, MII_MARVELL_PHY_PAGE, 0);
|
||||
|
||||
if (miiphy_reset(name, phyaddr) == 0)
|
||||
printf("88E1116 Initialized on %s\n", name);
|
||||
}
|
||||
|
||||
void mv_phy_88e1318_init(const char *name, u16 phyaddr)
|
||||
{
|
||||
u16 reg;
|
||||
|
||||
if (miiphy_set_current_dev(name))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Set control mode 4 for LED[0].
|
||||
*/
|
||||
miiphy_write(name, phyaddr, MII_MARVELL_PHY_PAGE, 3);
|
||||
miiphy_read(name, phyaddr, 16, ®);
|
||||
reg |= 0xf;
|
||||
miiphy_write(name, phyaddr, 16, reg);
|
||||
|
||||
/*
|
||||
* Enable RGMII delay on Tx and Rx for CPU port
|
||||
* Ref: sec 4.7.2 of chip datasheet
|
||||
*/
|
||||
miiphy_write(name, phyaddr, MII_MARVELL_PHY_PAGE, 2);
|
||||
miiphy_read(name, phyaddr, MV88E1116_MAC_CTRL_REG, ®);
|
||||
reg |= (MV88E1116_RGMII_TXTM_CTRL | MV88E1116_RGMII_RXTM_CTRL);
|
||||
miiphy_write(name, phyaddr, MV88E1116_MAC_CTRL_REG, reg);
|
||||
miiphy_write(name, phyaddr, MII_MARVELL_PHY_PAGE, 0);
|
||||
|
||||
if (miiphy_reset(name, phyaddr) == 0)
|
||||
printf("88E1318 Initialized on %s\n", name);
|
||||
}
|
||||
#endif /* CONFIG_CMD_NET && CONFIG_RESET_PHY_R */
|
||||
|
||||
#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
|
||||
int lacie_read_mac_address(uchar *mac_addr)
|
||||
{
|
||||
int ret;
|
||||
ushort version;
|
||||
|
||||
/* I2C-0 for on-board EEPROM */
|
||||
i2c_set_bus_num(0);
|
||||
|
||||
/* Check layout version for EEPROM data */
|
||||
ret = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0,
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR_LEN,
|
||||
(uchar *) &version, 2);
|
||||
if (ret != 0) {
|
||||
printf("Error: failed to read I2C EEPROM @%02x\n",
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR);
|
||||
return ret;
|
||||
}
|
||||
version = be16_to_cpu(version);
|
||||
if (version < 1 || version > 3) {
|
||||
printf("Error: unknown version %d for EEPROM data\n",
|
||||
version);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Read Ethernet MAC address from EEPROM */
|
||||
ret = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 2,
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR_LEN, mac_addr, 6);
|
||||
if (ret != 0)
|
||||
printf("Error: failed to read I2C EEPROM @%02x\n",
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR);
|
||||
return ret;
|
||||
}
|
||||
#endif /* CONFIG_CMD_I2C && CONFIG_SYS_I2C_EEPROM_ADDR */
|
||||
18
u-boot/board/LaCie/common/common.h
Normal file
18
u-boot/board/LaCie/common/common.h
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _LACIE_COMMON_H
|
||||
#define _LACIE_COMMON_H
|
||||
|
||||
#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
|
||||
void mv_phy_88e1116_init(const char *name, u16 phyaddr);
|
||||
void mv_phy_88e1318_init(const char *name, u16 phyaddr);
|
||||
#endif
|
||||
#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
|
||||
int lacie_read_mac_address(uchar *mac);
|
||||
#endif
|
||||
|
||||
#endif /* _LACIE_COMMON_H */
|
||||
47
u-boot/board/LaCie/common/cpld-gpio-bus.c
Normal file
47
u-boot/board/LaCie/common/cpld-gpio-bus.c
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* cpld-gpio-bus.c: provides support for the CPLD GPIO bus found on some LaCie
|
||||
* boards (as the 2Big/5Big Network v2 and the 2Big NAS). This parallel GPIO
|
||||
* bus exposes two registers (address and data). Each of this register is made
|
||||
* up of several dedicated GPIOs. An extra GPIO is used to notify the CPLD that
|
||||
* the registers have been updated.
|
||||
*
|
||||
* Mostly this bus is used to configure the LEDs on LaCie boards.
|
||||
*
|
||||
* Copyright (C) 2013 Simon Guinot <simon.guinot@sequanux.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <asm/arch/gpio.h>
|
||||
#include "cpld-gpio-bus.h"
|
||||
|
||||
static void cpld_gpio_bus_set_addr(struct cpld_gpio_bus *bus, unsigned addr)
|
||||
{
|
||||
int pin;
|
||||
|
||||
for (pin = 0; pin < bus->num_addr; pin++)
|
||||
kw_gpio_set_value(bus->addr[pin], (addr >> pin) & 1);
|
||||
}
|
||||
|
||||
static void cpld_gpio_bus_set_data(struct cpld_gpio_bus *bus, unsigned data)
|
||||
{
|
||||
int pin;
|
||||
|
||||
for (pin = 0; pin < bus->num_data; pin++)
|
||||
kw_gpio_set_value(bus->data[pin], (data >> pin) & 1);
|
||||
}
|
||||
|
||||
static void cpld_gpio_bus_enable_select(struct cpld_gpio_bus *bus)
|
||||
{
|
||||
/* The transfer is enabled on the raising edge. */
|
||||
kw_gpio_set_value(bus->enable, 0);
|
||||
kw_gpio_set_value(bus->enable, 1);
|
||||
}
|
||||
|
||||
void cpld_gpio_bus_write(struct cpld_gpio_bus *bus,
|
||||
unsigned addr, unsigned value)
|
||||
{
|
||||
cpld_gpio_bus_set_addr(bus, addr);
|
||||
cpld_gpio_bus_set_data(bus, value);
|
||||
cpld_gpio_bus_enable_select(bus);
|
||||
}
|
||||
21
u-boot/board/LaCie/common/cpld-gpio-bus.h
Normal file
21
u-boot/board/LaCie/common/cpld-gpio-bus.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Simon Guinot <simon.guinot@sequanux.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _LACIE_CPLD_GPI0_BUS_H
|
||||
#define _LACIE_CPLD_GPI0_BUS_H
|
||||
|
||||
struct cpld_gpio_bus {
|
||||
unsigned *addr;
|
||||
unsigned num_addr;
|
||||
unsigned *data;
|
||||
unsigned num_data;
|
||||
unsigned enable;
|
||||
};
|
||||
|
||||
void cpld_gpio_bus_write(struct cpld_gpio_bus *cpld_gpio_bus,
|
||||
unsigned addr, unsigned value);
|
||||
|
||||
#endif /* _LACIE_CPLD_GPI0_BUS_H */
|
||||
12
u-boot/board/LaCie/edminiv2/Kconfig
Normal file
12
u-boot/board/LaCie/edminiv2/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
if TARGET_EDMINIV2
|
||||
|
||||
config SYS_BOARD
|
||||
default "edminiv2"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "LaCie"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "edminiv2"
|
||||
|
||||
endif
|
||||
6
u-boot/board/LaCie/edminiv2/MAINTAINERS
Normal file
6
u-boot/board/LaCie/edminiv2/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
EDMINIV2 BOARD
|
||||
M: Albert ARIBAUD <albert.u.boot@aribaud.net>
|
||||
S: Maintained
|
||||
F: board/LaCie/edminiv2/
|
||||
F: include/configs/edminiv2.h
|
||||
F: configs/edminiv2_defconfig
|
||||
12
u-boot/board/LaCie/edminiv2/Makefile
Normal file
12
u-boot/board/LaCie/edminiv2/Makefile
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2010 Albert ARIBAUD <albert.u.boot@aribaud.net>
|
||||
#
|
||||
# Based on original Kirkwood support which is
|
||||
# (C) Copyright 2009
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := edminiv2.o ../common/common.o
|
||||
55
u-boot/board/LaCie/edminiv2/edminiv2.c
Normal file
55
u-boot/board/LaCie/edminiv2/edminiv2.c
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Albert ARIBAUD <albert.u.boot@aribaud.net>
|
||||
*
|
||||
* (C) Copyright 2009
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <miiphy.h>
|
||||
#include <asm/arch/orion5x.h>
|
||||
#include "../common/common.h"
|
||||
#include <spl.h>
|
||||
#include <ns16550.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* arch number of board */
|
||||
gd->bd->bi_arch_number = MACH_TYPE_EDMINI_V2;
|
||||
|
||||
/* boot parameter start at 256th byte of RAM base */
|
||||
gd->bd->bi_boot_params = gd->bd->bi_dram[0].start + 0x100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
|
||||
/* Configure and enable MV88E1116 PHY */
|
||||
void reset_phy(void)
|
||||
{
|
||||
mv_phy_88e1116_init("egiga0", 8);
|
||||
}
|
||||
#endif /* CONFIG_RESET_PHY_R */
|
||||
|
||||
/*
|
||||
* SPL serial setup and NOR boot device selection
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
|
||||
void spl_board_init(void)
|
||||
{
|
||||
preloader_console_init();
|
||||
}
|
||||
|
||||
u32 spl_boot_device(void)
|
||||
{
|
||||
return BOOT_DEVICE_NOR;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SPL_BUILD */
|
||||
12
u-boot/board/LaCie/net2big_v2/Kconfig
Normal file
12
u-boot/board/LaCie/net2big_v2/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
if TARGET_NET2BIG_V2
|
||||
|
||||
config SYS_BOARD
|
||||
default "net2big_v2"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "LaCie"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "lacie_kw"
|
||||
|
||||
endif
|
||||
7
u-boot/board/LaCie/net2big_v2/MAINTAINERS
Normal file
7
u-boot/board/LaCie/net2big_v2/MAINTAINERS
Normal file
@@ -0,0 +1,7 @@
|
||||
NET2BIG_V2 BOARD
|
||||
M: Simon Guinot <simon.guinot@sequanux.org>
|
||||
S: Maintained
|
||||
F: board/LaCie/net2big_v2/
|
||||
F: include/configs/lacie_kw.h
|
||||
F: configs/d2net_v2_defconfig
|
||||
F: configs/net2big_v2_defconfig
|
||||
15
u-boot/board/LaCie/net2big_v2/Makefile
Normal file
15
u-boot/board/LaCie/net2big_v2/Makefile
Normal file
@@ -0,0 +1,15 @@
|
||||
#
|
||||
# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
#
|
||||
# Based on Kirkwood support:
|
||||
# (C) Copyright 2009
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := net2big_v2.o ../common/common.o
|
||||
ifneq ($(and $(CONFIG_KIRKWOOD_GPIO),$(CONFIG_NET2BIG_V2)),)
|
||||
obj-y += ../common/cpld-gpio-bus.o
|
||||
endif
|
||||
151
u-boot/board/LaCie/net2big_v2/kwbimage.cfg
Normal file
151
u-boot/board/LaCie/net2big_v2/kwbimage.cfg
Normal file
@@ -0,0 +1,151 @@
|
||||
#
|
||||
# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
#
|
||||
# Based on Kirkwood support:
|
||||
# (C) Copyright 2009
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Refer doc/README.kwbimage for more details about how-to configure
|
||||
# and create kirkwood boot image
|
||||
#
|
||||
|
||||
# Boot Media configurations
|
||||
BOOT_FROM spi # Boot from SPI flash
|
||||
|
||||
# SOC registers configuration using bootrom header extension
|
||||
# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
|
||||
|
||||
# Configure RGMII-0 interface pad voltage to 1.8V
|
||||
DATA 0xFFD100e0 0x1B1B1B9B
|
||||
|
||||
#Dram initalization for SINGLE x16 CL=5 @ 400MHz
|
||||
DATA 0xFFD01400 0x43000C30 # DDR Configuration register
|
||||
# bit13-0: 0xa00 (2560 DDR2 clks refresh rate)
|
||||
# bit23-14: zero
|
||||
# bit24: 1= enable exit self refresh mode on DDR access
|
||||
# bit25: 1 required
|
||||
# bit29-26: zero
|
||||
# bit31-30: 01
|
||||
|
||||
DATA 0xFFD01404 0x38743000 # DDR Controller Control Low
|
||||
# bit 4: 0=addr/cmd in smame cycle
|
||||
# bit 5: 0=clk is driven during self refresh, we don't care for APX
|
||||
# bit 6: 0=use recommended falling edge of clk for addr/cmd
|
||||
# bit14: 0=input buffer always powered up
|
||||
# bit18: 1=cpu lock transaction enabled
|
||||
# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
|
||||
# bit27-24: 8= CL+3, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
|
||||
# bit30-28: 3 required
|
||||
# bit31: 0=no additional STARTBURST delay
|
||||
|
||||
DATA 0xFFD01408 0x22125451 # DDR Timing (Low) (active cycles value +1)
|
||||
# bit7-4: TRCD
|
||||
# bit11- 8: TRP
|
||||
# bit15-12: TWR
|
||||
# bit19-16: TWTR
|
||||
# bit20: TRAS msb
|
||||
# bit23-21: 0x0
|
||||
# bit27-24: TRRD
|
||||
# bit31-28: TRTP
|
||||
|
||||
DATA 0xFFD0140C 0x00000A32 # DDR Timing (High)
|
||||
# bit6-0: TRFC
|
||||
# bit8-7: TR2R
|
||||
# bit10-9: TR2W
|
||||
# bit12-11: TW2W
|
||||
# bit31-13: zero required
|
||||
|
||||
DATA 0xFFD01410 0x0000CCCC # DDR Address Control
|
||||
# bit1-0: 01, Cs0width=x16
|
||||
# bit3-2: 11, Cs0size=1Gb
|
||||
# bit5-4: 00, Cs2width=nonexistent
|
||||
# bit7-6: 00, Cs1size =nonexistent
|
||||
# bit9-8: 00, Cs2width=nonexistent
|
||||
# bit11-10: 00, Cs2size =nonexistent
|
||||
# bit13-12: 00, Cs3width=nonexistent
|
||||
# bit15-14: 00, Cs3size =nonexistent
|
||||
# bit16: 0, Cs0AddrSel
|
||||
# bit17: 0, Cs1AddrSel
|
||||
# bit18: 0, Cs2AddrSel
|
||||
# bit19: 0, Cs3AddrSel
|
||||
# bit31-20: 0 required
|
||||
|
||||
DATA 0xFFD01414 0x00000000 # DDR Open Pages Control
|
||||
# bit0: 0, OpenPage enabled
|
||||
# bit31-1: 0 required
|
||||
|
||||
DATA 0xFFD01418 0x00000000 # DDR Operation
|
||||
# bit3-0: 0x0, DDR cmd
|
||||
# bit31-4: 0 required
|
||||
|
||||
DATA 0xFFD0141C 0x00000662 # DDR Mode
|
||||
# bit2-0: 2, BurstLen=2 required
|
||||
# bit3: 0, BurstType=0 required
|
||||
# bit6-4: 4, CL=5
|
||||
# bit7: 0, TestMode=0 normal
|
||||
# bit8: 0, DLL reset=0 normal
|
||||
# bit11-9: 6, auto-precharge write recovery ????????????
|
||||
# bit12: 0, PD must be zero
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01420 0x00000044 # DDR Extended Mode
|
||||
# bit0: 0, DDR DLL enabled
|
||||
# bit1: 1, DDR drive strenght reduced
|
||||
# bit2: 1, DDR ODT control lsd enabled
|
||||
# bit5-3: 000, required
|
||||
# bit6: 1, DDR ODT control msb, enabled
|
||||
# bit9-7: 000, required
|
||||
# bit10: 0, differential DQS enabled
|
||||
# bit11: 0, required
|
||||
# bit12: 0, DDR output buffer enabled
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01424 0x0000F17F # DDR Controller Control High
|
||||
# bit2-0: 111, required
|
||||
# bit3 : 1 , MBUS Burst Chop disabled
|
||||
# bit6-4: 111, required
|
||||
# bit7 : 1 , D2P Latency enabled
|
||||
# bit8 : 1 , add writepath sample stage, must be 1 for DDR freq >= 300MHz
|
||||
# bit9 : 0 , no half clock cycle addition to dataout
|
||||
# bit10 : 0 , 1/4 clock cycle skew enabled for addr/ctl signals
|
||||
# bit11 : 0 , 1/4 clock cycle skew disabled for write mesh
|
||||
# bit15-12: 1111 required
|
||||
# bit31-16: 0 required
|
||||
|
||||
DATA 0xFFD01428 0x00096630 # DDR2 ODT Read Timing (default values)
|
||||
DATA 0xFFD0147C 0x00009663 # DDR2 ODT Write Timing (default values)
|
||||
|
||||
DATA 0xFFD01500 0x00000000 # CS[0]n Base address to 0x0
|
||||
DATA 0xFFD01504 0x0FFFFFF1 # CS[0]n Size
|
||||
# bit0: 1, Window enabled
|
||||
# bit1: 0, Write Protect disabled
|
||||
# bit3-2: 00, CS0 hit selected
|
||||
# bit23-4: ones, required
|
||||
# bit31-24: 0x07, Size (i.e. 128MB)
|
||||
|
||||
DATA 0xFFD0150C 0x00000000 # CS[1]n Size, window disabled
|
||||
DATA 0xFFD01514 0x00000000 # CS[2]n Size, window disabled
|
||||
DATA 0xFFD0151C 0x00000000 # CS[3]n Size, window disabled
|
||||
|
||||
DATA 0xFFD01494 0x00010000 # DDR ODT Control (Low)
|
||||
# bit3-0: 1, ODT0Rd, MODT[0] asserted during read from DRAM CS0
|
||||
# bit19-16:1, ODT0Wr, MODT[0] asserted during write to DRAM CS0
|
||||
|
||||
DATA 0xFFD01498 0x00000000 # DDR ODT Control (High)
|
||||
# bit1-0: 00, ODT0 controlled by ODT Control (low) register above
|
||||
# bit3-2: 01, ODT1 active NEVER!
|
||||
# bit31-4: zero, required
|
||||
|
||||
DATA 0xFFD0149C 0x0000E40F # CPU ODT Control
|
||||
# bit3-0: 1, ODT0Rd, Internal ODT asserted during read from DRAM bank0
|
||||
# bit7-4: 1, ODT0Wr, Internal ODT asserted during write to DRAM bank0
|
||||
# bit11-10:1, DQ_ODTSel. ODT select turned on
|
||||
|
||||
DATA 0xFFD01480 0x00000001 # DDR Initialization Control
|
||||
#bit0=1, enable DDR init upon this register write
|
||||
|
||||
# End of Header extension
|
||||
DATA 0x0 0x0
|
||||
253
u-boot/board/LaCie/net2big_v2/net2big_v2.c
Normal file
253
u-boot/board/LaCie/net2big_v2/net2big_v2.c
Normal file
@@ -0,0 +1,253 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
*
|
||||
* Based on Kirkwood support:
|
||||
* (C) Copyright 2009
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include <i2c.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/soc.h>
|
||||
#include <asm/arch/mpp.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
|
||||
#include "net2big_v2.h"
|
||||
#include "../common/common.h"
|
||||
#include "../common/cpld-gpio-bus.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/* GPIO configuration */
|
||||
mvebu_config_gpio(NET2BIG_V2_OE_VAL_LOW, NET2BIG_V2_OE_VAL_HIGH,
|
||||
NET2BIG_V2_OE_LOW, NET2BIG_V2_OE_HIGH);
|
||||
|
||||
/* Multi-Purpose Pins Functionality configuration */
|
||||
static const u32 kwmpp_config[] = {
|
||||
MPP0_SPI_SCn,
|
||||
MPP1_SPI_MOSI,
|
||||
MPP2_SPI_SCK,
|
||||
MPP3_SPI_MISO,
|
||||
MPP6_SYSRST_OUTn,
|
||||
MPP7_GPO, /* Request power-off */
|
||||
MPP8_TW_SDA,
|
||||
MPP9_TW_SCK,
|
||||
MPP10_UART0_TXD,
|
||||
MPP11_UART0_RXD,
|
||||
MPP13_GPIO, /* Rear power switch (on|auto) */
|
||||
MPP14_GPIO, /* USB fuse alarm */
|
||||
MPP15_GPIO, /* Rear power switch (auto|off) */
|
||||
MPP16_GPIO, /* SATA HDD1 power */
|
||||
MPP17_GPIO, /* SATA HDD2 power */
|
||||
MPP20_SATA1_ACTn,
|
||||
MPP21_SATA0_ACTn,
|
||||
MPP24_GPIO, /* USB mode select */
|
||||
MPP26_GPIO, /* USB device vbus */
|
||||
MPP28_GPIO, /* USB enable host vbus */
|
||||
MPP29_GPIO, /* CPLD GPIO bus ALE */
|
||||
MPP34_GPIO, /* Rear Push button 0=on 1=off */
|
||||
MPP35_GPIO, /* Inhibit switch power-off */
|
||||
MPP36_GPIO, /* SATA HDD1 presence */
|
||||
MPP37_GPIO, /* SATA HDD2 presence */
|
||||
MPP40_GPIO, /* eSATA presence */
|
||||
MPP44_GPIO, /* CPLD GPIO bus (data 0) */
|
||||
MPP45_GPIO, /* CPLD GPIO bus (data 1) */
|
||||
MPP46_GPIO, /* CPLD GPIO bus (data 2) */
|
||||
MPP47_GPIO, /* CPLD GPIO bus (addr 0) */
|
||||
MPP48_GPIO, /* CPLD GPIO bus (addr 1) */
|
||||
MPP49_GPIO, /* CPLD GPIO bus (addr 2) */
|
||||
0
|
||||
};
|
||||
|
||||
kirkwood_mpp_conf(kwmpp_config, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* Machine number */
|
||||
gd->bd->bi_arch_number = MACH_TYPE_NET2BIG_V2;
|
||||
|
||||
/* Boot parameters address */
|
||||
gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_MISC_INIT_R)
|
||||
|
||||
#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_G762_ADDR)
|
||||
/*
|
||||
* Start I2C fan (GMT G762 controller)
|
||||
*/
|
||||
static void init_fan(void)
|
||||
{
|
||||
u8 data;
|
||||
|
||||
i2c_set_bus_num(0);
|
||||
|
||||
/* Enable open-loop and PWM modes */
|
||||
data = 0x20;
|
||||
if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
|
||||
G762_REG_FAN_CMD1, 1, &data, 1) != 0)
|
||||
goto err;
|
||||
data = 0;
|
||||
if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
|
||||
G762_REG_SET_CNT, 1, &data, 1) != 0)
|
||||
goto err;
|
||||
/*
|
||||
* RPM to PWM (set_out register) fan speed conversion array:
|
||||
* 0 0x00
|
||||
* 1500 0x04
|
||||
* 2800 0x08
|
||||
* 3400 0x0C
|
||||
* 3700 0x10
|
||||
* 4400 0x20
|
||||
* 4700 0x30
|
||||
* 4800 0x50
|
||||
* 5200 0x80
|
||||
* 5400 0xC0
|
||||
* 5500 0xFF
|
||||
*
|
||||
* Start fan at low speed (2800 RPM):
|
||||
*/
|
||||
data = 0x08;
|
||||
if (i2c_write(CONFIG_SYS_I2C_G762_ADDR,
|
||||
G762_REG_SET_OUT, 1, &data, 1) != 0)
|
||||
goto err;
|
||||
|
||||
return;
|
||||
err:
|
||||
printf("Error: failed to start I2C fan @%02x\n",
|
||||
CONFIG_SYS_I2C_G762_ADDR);
|
||||
}
|
||||
#else
|
||||
static void init_fan(void) {}
|
||||
#endif /* CONFIG_CMD_I2C && CONFIG_SYS_I2C_G762_ADDR */
|
||||
|
||||
#if defined(CONFIG_NET2BIG_V2) && defined(CONFIG_KIRKWOOD_GPIO)
|
||||
/*
|
||||
* CPLD GPIO bus:
|
||||
*
|
||||
* - address register : bit [0-2] -> GPIO [47-49]
|
||||
* - data register : bit [0-2] -> GPIO [44-46]
|
||||
* - enable register : GPIO 29
|
||||
*/
|
||||
static unsigned cpld_gpio_bus_addr[] = { 47, 48, 49 };
|
||||
static unsigned cpld_gpio_bus_data[] = { 44, 45, 46 };
|
||||
|
||||
static struct cpld_gpio_bus cpld_gpio_bus = {
|
||||
.addr = cpld_gpio_bus_addr,
|
||||
.num_addr = ARRAY_SIZE(cpld_gpio_bus_addr),
|
||||
.data = cpld_gpio_bus_data,
|
||||
.num_data = ARRAY_SIZE(cpld_gpio_bus_data),
|
||||
.enable = 29,
|
||||
};
|
||||
|
||||
/*
|
||||
* LEDs configuration:
|
||||
*
|
||||
* The LEDs are controlled by a CPLD and can be configured through
|
||||
* the CPLD GPIO bus.
|
||||
*
|
||||
* Address register selection:
|
||||
*
|
||||
* addr | register
|
||||
* ----------------------------
|
||||
* 0 | front LED
|
||||
* 1 | front LED brightness
|
||||
* 2 | SATA LED brightness
|
||||
* 3 | SATA0 LED
|
||||
* 4 | SATA1 LED
|
||||
* 5 | SATA2 LED
|
||||
* 6 | SATA3 LED
|
||||
* 7 | SATA4 LED
|
||||
*
|
||||
* Data register configuration:
|
||||
*
|
||||
* data | LED brightness
|
||||
* -------------------------------------------------
|
||||
* 0 | min (off)
|
||||
* - | -
|
||||
* 7 | max
|
||||
*
|
||||
* data | front LED mode
|
||||
* -------------------------------------------------
|
||||
* 0 | fix off
|
||||
* 1 | fix blue on
|
||||
* 2 | fix red on
|
||||
* 3 | blink blue on=1 sec and blue off=1 sec
|
||||
* 4 | blink red on=1 sec and red off=1 sec
|
||||
* 5 | blink blue on=2.5 sec and red on=0.5 sec
|
||||
* 6 | blink blue on=1 sec and red on=1 sec
|
||||
* 7 | blink blue on=0.5 sec and blue off=2.5 sec
|
||||
*
|
||||
* data | SATA LED mode
|
||||
* -------------------------------------------------
|
||||
* 0 | fix off
|
||||
* 1 | SATA activity blink
|
||||
* 2 | fix red on
|
||||
* 3 | blink blue on=1 sec and blue off=1 sec
|
||||
* 4 | blink red on=1 sec and red off=1 sec
|
||||
* 5 | blink blue on=2.5 sec and red on=0.5 sec
|
||||
* 6 | blink blue on=1 sec and red on=1 sec
|
||||
* 7 | fix blue on
|
||||
*/
|
||||
static void init_leds(void)
|
||||
{
|
||||
/* Enable the front blue LED */
|
||||
cpld_gpio_bus_write(&cpld_gpio_bus, 0, 1);
|
||||
cpld_gpio_bus_write(&cpld_gpio_bus, 1, 3);
|
||||
|
||||
/* Configure SATA LEDs to blink in relation with the SATA activity */
|
||||
cpld_gpio_bus_write(&cpld_gpio_bus, 3, 1);
|
||||
cpld_gpio_bus_write(&cpld_gpio_bus, 4, 1);
|
||||
cpld_gpio_bus_write(&cpld_gpio_bus, 2, 3);
|
||||
}
|
||||
#else
|
||||
static void init_leds(void) {}
|
||||
#endif /* CONFIG_NET2BIG_V2 && CONFIG_KIRKWOOD_GPIO */
|
||||
|
||||
int misc_init_r(void)
|
||||
{
|
||||
init_fan();
|
||||
#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
|
||||
if (!getenv("ethaddr")) {
|
||||
uchar mac[6];
|
||||
if (lacie_read_mac_address(mac) == 0)
|
||||
eth_setenv_enetaddr("ethaddr", mac);
|
||||
}
|
||||
#endif
|
||||
init_leds();
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_MISC_INIT_R */
|
||||
|
||||
#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
|
||||
/* Configure and initialize PHY */
|
||||
void reset_phy(void)
|
||||
{
|
||||
mv_phy_88e1116_init("egiga0", 8);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_KIRKWOOD_GPIO)
|
||||
/* Return GPIO push button status */
|
||||
static int
|
||||
do_read_push_button(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||
{
|
||||
return !kw_gpio_get_value(NET2BIG_V2_GPIO_PUSH_BUTTON);
|
||||
}
|
||||
|
||||
U_BOOT_CMD(button, 1, 1, do_read_push_button,
|
||||
"Return GPIO push button status 0=off 1=on", "");
|
||||
#endif
|
||||
29
u-boot/board/LaCie/net2big_v2/net2big_v2.h
Normal file
29
u-boot/board/LaCie/net2big_v2/net2big_v2.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
*
|
||||
* Based on Kirkwood support:
|
||||
* (C) Copyright 2009
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef NET2BIG_V2_H
|
||||
#define NET2BIG_V2_H
|
||||
|
||||
/* GPIO configuration */
|
||||
#define NET2BIG_V2_OE_LOW 0x0600E000
|
||||
#define NET2BIG_V2_OE_HIGH 0x00000134
|
||||
#define NET2BIG_V2_OE_VAL_LOW 0x10030000
|
||||
#define NET2BIG_V2_OE_VAL_HIGH 0x00000000
|
||||
|
||||
/* Buttons */
|
||||
#define NET2BIG_V2_GPIO_PUSH_BUTTON 34
|
||||
|
||||
/* GMT G762 registers (I2C fan controller) */
|
||||
#define G762_REG_SET_CNT 0x00
|
||||
#define G762_REG_SET_OUT 0x03
|
||||
#define G762_REG_FAN_CMD1 0x04
|
||||
|
||||
#endif /* NET2BIG_V2_H */
|
||||
12
u-boot/board/LaCie/netspace_v2/Kconfig
Normal file
12
u-boot/board/LaCie/netspace_v2/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
if TARGET_NETSPACE_V2
|
||||
|
||||
config SYS_BOARD
|
||||
default "netspace_v2"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "LaCie"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "lacie_kw"
|
||||
|
||||
endif
|
||||
14
u-boot/board/LaCie/netspace_v2/MAINTAINERS
Normal file
14
u-boot/board/LaCie/netspace_v2/MAINTAINERS
Normal file
@@ -0,0 +1,14 @@
|
||||
NETSPACE_V2 BOARD
|
||||
M: Simon Guinot <simon.guinot@sequanux.org>
|
||||
S: Maintained
|
||||
F: board/LaCie/netspace_v2/
|
||||
F: include/configs/lacie_kw.h
|
||||
F: configs/inetspace_v2_defconfig
|
||||
F: configs/netspace_max_v2_defconfig
|
||||
F: configs/netspace_v2_defconfig
|
||||
|
||||
NETSPACE_LITE_V2 BOARD
|
||||
#M: -
|
||||
S: Maintained
|
||||
F: configs/netspace_lite_v2_defconfig
|
||||
F: configs/netspace_mini_v2_defconfig
|
||||
12
u-boot/board/LaCie/netspace_v2/Makefile
Normal file
12
u-boot/board/LaCie/netspace_v2/Makefile
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
#
|
||||
# Based on Kirkwood support:
|
||||
# (C) Copyright 2009
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := netspace_v2.o ../common/common.o
|
||||
151
u-boot/board/LaCie/netspace_v2/kwbimage-is2.cfg
Normal file
151
u-boot/board/LaCie/netspace_v2/kwbimage-is2.cfg
Normal file
@@ -0,0 +1,151 @@
|
||||
#
|
||||
# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
#
|
||||
# Based on Kirkwood support:
|
||||
# (C) Copyright 2009
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Refer doc/README.kwbimage for more details about how-to configure
|
||||
# and create kirkwood boot image
|
||||
#
|
||||
|
||||
# Boot Media configurations
|
||||
BOOT_FROM spi # Boot from SPI flash
|
||||
|
||||
# SOC registers configuration using bootrom header extension
|
||||
# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
|
||||
|
||||
# Configure RGMII-0 interface pad voltage to 1.8V
|
||||
DATA 0xFFD100e0 0x1B1B1B9B
|
||||
|
||||
#Dram initalization for SINGLE x16 CL=5 @ 400MHz
|
||||
DATA 0xFFD01400 0x43000618 # DDR Configuration register
|
||||
# bit13-0: 0xa00 (2560 DDR2 clks refresh rate)
|
||||
# bit23-14: zero
|
||||
# bit24: 1= enable exit self refresh mode on DDR access
|
||||
# bit25: 1 required
|
||||
# bit29-26: zero
|
||||
# bit31-30: 01
|
||||
|
||||
DATA 0xFFD01404 0x35143000 # DDR Controller Control Low
|
||||
# bit 4: 0=addr/cmd in smame cycle
|
||||
# bit 5: 0=clk is driven during self refresh, we don't care for APX
|
||||
# bit 6: 0=use recommended falling edge of clk for addr/cmd
|
||||
# bit14: 0=input buffer always powered up
|
||||
# bit18: 1=cpu lock transaction enabled
|
||||
# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
|
||||
# bit27-24: 8= CL+3, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
|
||||
# bit30-28: 3 required
|
||||
# bit31: 0=no additional STARTBURST delay
|
||||
|
||||
DATA 0xFFD01408 0x11012228 # DDR Timing (Low) (active cycles value +1)
|
||||
# bit7-4: TRCD
|
||||
# bit11- 8: TRP
|
||||
# bit15-12: TWR
|
||||
# bit19-16: TWTR
|
||||
# bit20: TRAS msb
|
||||
# bit23-21: 0x0
|
||||
# bit27-24: TRRD
|
||||
# bit31-28: TRTP
|
||||
|
||||
DATA 0xFFD0140C 0x00000A19 # DDR Timing (High)
|
||||
# bit6-0: TRFC
|
||||
# bit8-7: TR2R
|
||||
# bit10-9: TR2W
|
||||
# bit12-11: TW2W
|
||||
# bit31-13: zero required
|
||||
|
||||
DATA 0xFFD01410 0x00000008 # DDR Address Control
|
||||
# bit1-0: 00, Cs0width=x8
|
||||
# bit3-2: 10, Cs0size=512Mb
|
||||
# bit5-4: 00, Cs2width=nonexistent
|
||||
# bit7-6: 00, Cs1size =nonexistent
|
||||
# bit9-8: 00, Cs2width=nonexistent
|
||||
# bit11-10: 00, Cs2size =nonexistent
|
||||
# bit13-12: 00, Cs3width=nonexistent
|
||||
# bit15-14: 00, Cs3size =nonexistent
|
||||
# bit16: 0, Cs0AddrSel
|
||||
# bit17: 0, Cs1AddrSel
|
||||
# bit18: 0, Cs2AddrSel
|
||||
# bit19: 0, Cs3AddrSel
|
||||
# bit31-20: 0 required
|
||||
|
||||
DATA 0xFFD01414 0x00000000 # DDR Open Pages Control
|
||||
# bit0: 0, OpenPage enabled
|
||||
# bit31-1: 0 required
|
||||
|
||||
DATA 0xFFD01418 0x00000000 # DDR Operation
|
||||
# bit3-0: 0x0, DDR cmd
|
||||
# bit31-4: 0 required
|
||||
|
||||
DATA 0xFFD0141C 0x00000632 # DDR Mode
|
||||
# bit2-0: 2, BurstLen=2 required
|
||||
# bit3: 0, BurstType=0 required
|
||||
# bit6-4: 4, CL=5
|
||||
# bit7: 0, TestMode=0 normal
|
||||
# bit8: 0, DLL reset=0 normal
|
||||
# bit11-9: 6, auto-precharge write recovery ????????????
|
||||
# bit12: 0, PD must be zero
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01420 0x00000004 # DDR Extended Mode
|
||||
# bit0: 0, DDR DLL enabled
|
||||
# bit1: 1, DDR drive strenght reduced
|
||||
# bit2: 1, DDR ODT control lsd enabled
|
||||
# bit5-3: 000, required
|
||||
# bit6: 1, DDR ODT control msb, enabled
|
||||
# bit9-7: 000, required
|
||||
# bit10: 0, differential DQS enabled
|
||||
# bit11: 0, required
|
||||
# bit12: 0, DDR output buffer enabled
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01424 0x0000F07F # DDR Controller Control High
|
||||
# bit2-0: 111, required
|
||||
# bit3 : 1 , MBUS Burst Chop disabled
|
||||
# bit6-4: 111, required
|
||||
# bit7 : 1 , D2P Latency enabled
|
||||
# bit8 : 1 , add writepath sample stage, must be 1 for DDR freq >= 300MHz
|
||||
# bit9 : 0 , no half clock cycle addition to dataout
|
||||
# bit10 : 0 , 1/4 clock cycle skew enabled for addr/ctl signals
|
||||
# bit11 : 0 , 1/4 clock cycle skew disabled for write mesh
|
||||
# bit15-12: 1111 required
|
||||
# bit31-16: 0 required
|
||||
|
||||
DATA 0xFFD01428 0x00085520 # DDR2 ODT Read Timing (default values)
|
||||
DATA 0xFFD0147C 0x00008552 # DDR2 ODT Write Timing (default values)
|
||||
|
||||
DATA 0xFFD01500 0x00000000 # CS[0]n Base address to 0x0
|
||||
DATA 0xFFD01504 0x07FFFFF1 # CS[0]n Size
|
||||
# bit0: 1, Window enabled
|
||||
# bit1: 0, Write Protect disabled
|
||||
# bit3-2: 00, CS0 hit selected
|
||||
# bit23-4: ones, required
|
||||
# bit31-24: 0x07, Size (i.e. 128MB)
|
||||
|
||||
DATA 0xFFD0150C 0x00000000 # CS[1]n Size, window disabled
|
||||
DATA 0xFFD01514 0x00000000 # CS[2]n Size, window disabled
|
||||
DATA 0xFFD0151C 0x00000000 # CS[3]n Size, window disabled
|
||||
|
||||
DATA 0xFFD01494 0x00010000 # DDR ODT Control (Low)
|
||||
# bit3-0: 1, ODT0Rd, MODT[0] asserted during read from DRAM CS0
|
||||
# bit19-16:1, ODT0Wr, MODT[0] asserted during write to DRAM CS0
|
||||
|
||||
DATA 0xFFD01498 0x00000000 # DDR ODT Control (High)
|
||||
# bit1-0: 00, ODT0 controlled by ODT Control (low) register above
|
||||
# bit3-2: 01, ODT1 active NEVER!
|
||||
# bit31-4: zero, required
|
||||
|
||||
DATA 0xFFD0149C 0x0000E40F # CPU ODT Control
|
||||
# bit3-0: 1, ODT0Rd, Internal ODT asserted during read from DRAM bank0
|
||||
# bit7-4: 1, ODT0Wr, Internal ODT asserted during write to DRAM bank0
|
||||
# bit11-10:1, DQ_ODTSel. ODT select turned on
|
||||
|
||||
DATA 0xFFD01480 0x00000001 # DDR Initialization Control
|
||||
#bit0=1, enable DDR init upon this register write
|
||||
|
||||
# End of Header extension
|
||||
DATA 0x0 0x0
|
||||
151
u-boot/board/LaCie/netspace_v2/kwbimage-ns2l.cfg
Normal file
151
u-boot/board/LaCie/netspace_v2/kwbimage-ns2l.cfg
Normal file
@@ -0,0 +1,151 @@
|
||||
#
|
||||
# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
#
|
||||
# Based on Kirkwood support:
|
||||
# (C) Copyright 2009
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Refer doc/README.kwbimage for more details about how-to configure
|
||||
# and create kirkwood boot image
|
||||
#
|
||||
|
||||
# Boot Media configurations
|
||||
BOOT_FROM spi # Boot from SPI flash
|
||||
|
||||
# SOC registers configuration using bootrom header extension
|
||||
# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
|
||||
|
||||
# Configure RGMII-0 interface pad voltage to 1.8V
|
||||
DATA 0xFFD100e0 0x1B1B1B9B
|
||||
|
||||
#Dram initalization for SINGLE x16 CL=5 @ 400MHz
|
||||
DATA 0xFFD01400 0x43000618 # DDR Configuration register
|
||||
# bit13-0: 0xa00 (2560 DDR2 clks refresh rate)
|
||||
# bit23-14: zero
|
||||
# bit24: 1= enable exit self refresh mode on DDR access
|
||||
# bit25: 1 required
|
||||
# bit29-26: zero
|
||||
# bit31-30: 01
|
||||
|
||||
DATA 0xFFD01404 0x34143000 # DDR Controller Control Low
|
||||
# bit 4: 0=addr/cmd in smame cycle
|
||||
# bit 5: 0=clk is driven during self refresh, we don't care for APX
|
||||
# bit 6: 0=use recommended falling edge of clk for addr/cmd
|
||||
# bit14: 0=input buffer always powered up
|
||||
# bit18: 1=cpu lock transaction enabled
|
||||
# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
|
||||
# bit27-24: 8= CL+3, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
|
||||
# bit30-28: 3 required
|
||||
# bit31: 0=no additional STARTBURST delay
|
||||
|
||||
DATA 0xFFD01408 0x11012228 # DDR Timing (Low) (active cycles value +1)
|
||||
# bit7-4: TRCD
|
||||
# bit11- 8: TRP
|
||||
# bit15-12: TWR
|
||||
# bit19-16: TWTR
|
||||
# bit20: TRAS msb
|
||||
# bit23-21: 0x0
|
||||
# bit27-24: TRRD
|
||||
# bit31-28: TRTP
|
||||
|
||||
DATA 0xFFD0140C 0x00000A19 # DDR Timing (High)
|
||||
# bit6-0: TRFC
|
||||
# bit8-7: TR2R
|
||||
# bit10-9: TR2W
|
||||
# bit12-11: TW2W
|
||||
# bit31-13: zero required
|
||||
|
||||
DATA 0xFFD01410 0x0000DDDD # DDR Address Control
|
||||
# bit1-0: 00, Cs0width=x8
|
||||
# bit3-2: 10, Cs0size=512Mb
|
||||
# bit5-4: 00, Cs2width=nonexistent
|
||||
# bit7-6: 00, Cs1size =nonexistent
|
||||
# bit9-8: 00, Cs2width=nonexistent
|
||||
# bit11-10: 00, Cs2size =nonexistent
|
||||
# bit13-12: 00, Cs3width=nonexistent
|
||||
# bit15-14: 00, Cs3size =nonexistent
|
||||
# bit16: 0, Cs0AddrSel
|
||||
# bit17: 0, Cs1AddrSel
|
||||
# bit18: 0, Cs2AddrSel
|
||||
# bit19: 0, Cs3AddrSel
|
||||
# bit31-20: 0 required
|
||||
|
||||
DATA 0xFFD01414 0x00000000 # DDR Open Pages Control
|
||||
# bit0: 0, OpenPage enabled
|
||||
# bit31-1: 0 required
|
||||
|
||||
DATA 0xFFD01418 0x00000000 # DDR Operation
|
||||
# bit3-0: 0x0, DDR cmd
|
||||
# bit31-4: 0 required
|
||||
|
||||
DATA 0xFFD0141C 0x00000632 # DDR Mode
|
||||
# bit2-0: 2, BurstLen=2 required
|
||||
# bit3: 0, BurstType=0 required
|
||||
# bit6-4: 4, CL=5
|
||||
# bit7: 0, TestMode=0 normal
|
||||
# bit8: 0, DLL reset=0 normal
|
||||
# bit11-9: 6, auto-precharge write recovery ????????????
|
||||
# bit12: 0, PD must be zero
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01420 0x00000004 # DDR Extended Mode
|
||||
# bit0: 0, DDR DLL enabled
|
||||
# bit1: 1, DDR drive strenght reduced
|
||||
# bit2: 1, DDR ODT control lsd enabled
|
||||
# bit5-3: 000, required
|
||||
# bit6: 1, DDR ODT control msb, enabled
|
||||
# bit9-7: 000, required
|
||||
# bit10: 0, differential DQS enabled
|
||||
# bit11: 0, required
|
||||
# bit12: 0, DDR output buffer enabled
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01424 0x0000F07F # DDR Controller Control High
|
||||
# bit2-0: 111, required
|
||||
# bit3 : 1 , MBUS Burst Chop disabled
|
||||
# bit6-4: 111, required
|
||||
# bit7 : 1 , D2P Latency enabled
|
||||
# bit8 : 1 , add writepath sample stage, must be 1 for DDR freq >= 300MHz
|
||||
# bit9 : 0 , no half clock cycle addition to dataout
|
||||
# bit10 : 0 , 1/4 clock cycle skew enabled for addr/ctl signals
|
||||
# bit11 : 0 , 1/4 clock cycle skew disabled for write mesh
|
||||
# bit15-12: 1111 required
|
||||
# bit31-16: 0 required
|
||||
|
||||
DATA 0xFFD01428 0x00085520 # DDR2 ODT Read Timing (default values)
|
||||
DATA 0xFFD0147C 0x00008552 # DDR2 ODT Write Timing (default values)
|
||||
|
||||
DATA 0xFFD01500 0x00000000 # CS[0]n Base address to 0x0
|
||||
DATA 0xFFD01504 0x07FFFFF1 # CS[0]n Size
|
||||
# bit0: 1, Window enabled
|
||||
# bit1: 0, Write Protect disabled
|
||||
# bit3-2: 00, CS0 hit selected
|
||||
# bit23-4: ones, required
|
||||
# bit31-24: 0x07, Size (i.e. 128MB)
|
||||
|
||||
DATA 0xFFD0150C 0x00000000 # CS[1]n Size, window disabled
|
||||
DATA 0xFFD01514 0x00000000 # CS[2]n Size, window disabled
|
||||
DATA 0xFFD0151C 0x00000000 # CS[3]n Size, window disabled
|
||||
|
||||
DATA 0xFFD01494 0x00010000 # DDR ODT Control (Low)
|
||||
# bit3-0: 1, ODT0Rd, MODT[0] asserted during read from DRAM CS0
|
||||
# bit19-16:1, ODT0Wr, MODT[0] asserted during write to DRAM CS0
|
||||
|
||||
DATA 0xFFD01498 0x00000000 # DDR ODT Control (High)
|
||||
# bit1-0: 00, ODT0 controlled by ODT Control (low) register above
|
||||
# bit3-2: 01, ODT1 active NEVER!
|
||||
# bit31-4: zero, required
|
||||
|
||||
DATA 0xFFD0149C 0x0000E40F # CPU ODT Control
|
||||
# bit3-0: 1, ODT0Rd, Internal ODT asserted during read from DRAM bank0
|
||||
# bit7-4: 1, ODT0Wr, Internal ODT asserted during write to DRAM bank0
|
||||
# bit11-10:1, DQ_ODTSel. ODT select turned on
|
||||
|
||||
DATA 0xFFD01480 0x00000001 # DDR Initialization Control
|
||||
#bit0=1, enable DDR init upon this register write
|
||||
|
||||
# End of Header extension
|
||||
DATA 0x0 0x0
|
||||
151
u-boot/board/LaCie/netspace_v2/kwbimage.cfg
Normal file
151
u-boot/board/LaCie/netspace_v2/kwbimage.cfg
Normal file
@@ -0,0 +1,151 @@
|
||||
#
|
||||
# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
#
|
||||
# Based on Kirkwood support:
|
||||
# (C) Copyright 2009
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Refer doc/README.kwbimage for more details about how-to configure
|
||||
# and create kirkwood boot image
|
||||
#
|
||||
|
||||
# Boot Media configurations
|
||||
BOOT_FROM spi # Boot from SPI flash
|
||||
|
||||
# SOC registers configuration using bootrom header extension
|
||||
# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
|
||||
|
||||
# Configure RGMII-0 interface pad voltage to 1.8V
|
||||
DATA 0xFFD100e0 0x1B1B1B9B
|
||||
|
||||
#Dram initalization for SINGLE x16 CL=5 @ 400MHz
|
||||
DATA 0xFFD01400 0x43000618 # DDR Configuration register
|
||||
# bit13-0: 0xa00 (2560 DDR2 clks refresh rate)
|
||||
# bit23-14: zero
|
||||
# bit24: 1= enable exit self refresh mode on DDR access
|
||||
# bit25: 1 required
|
||||
# bit29-26: zero
|
||||
# bit31-30: 01
|
||||
|
||||
DATA 0xFFD01404 0x35143000 # DDR Controller Control Low
|
||||
# bit 4: 0=addr/cmd in smame cycle
|
||||
# bit 5: 0=clk is driven during self refresh, we don't care for APX
|
||||
# bit 6: 0=use recommended falling edge of clk for addr/cmd
|
||||
# bit14: 0=input buffer always powered up
|
||||
# bit18: 1=cpu lock transaction enabled
|
||||
# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
|
||||
# bit27-24: 8= CL+3, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
|
||||
# bit30-28: 3 required
|
||||
# bit31: 0=no additional STARTBURST delay
|
||||
|
||||
DATA 0xFFD01408 0x11012228 # DDR Timing (Low) (active cycles value +1)
|
||||
# bit7-4: TRCD
|
||||
# bit11- 8: TRP
|
||||
# bit15-12: TWR
|
||||
# bit19-16: TWTR
|
||||
# bit20: TRAS msb
|
||||
# bit23-21: 0x0
|
||||
# bit27-24: TRRD
|
||||
# bit31-28: TRTP
|
||||
|
||||
DATA 0xFFD0140C 0x00000A19 # DDR Timing (High)
|
||||
# bit6-0: TRFC
|
||||
# bit8-7: TR2R
|
||||
# bit10-9: TR2W
|
||||
# bit12-11: TW2W
|
||||
# bit31-13: zero required
|
||||
|
||||
DATA 0xFFD01410 0x0000000C # DDR Address Control
|
||||
# bit1-0: 00, Cs0width=x8
|
||||
# bit3-2: 11, Cs0size=1Gb
|
||||
# bit5-4: 00, Cs2width=nonexistent
|
||||
# bit7-6: 00, Cs1size =nonexistent
|
||||
# bit9-8: 00, Cs2width=nonexistent
|
||||
# bit11-10: 00, Cs2size =nonexistent
|
||||
# bit13-12: 00, Cs3width=nonexistent
|
||||
# bit15-14: 00, Cs3size =nonexistent
|
||||
# bit16: 0, Cs0AddrSel
|
||||
# bit17: 0, Cs1AddrSel
|
||||
# bit18: 0, Cs2AddrSel
|
||||
# bit19: 0, Cs3AddrSel
|
||||
# bit31-20: 0 required
|
||||
|
||||
DATA 0xFFD01414 0x00000000 # DDR Open Pages Control
|
||||
# bit0: 0, OpenPage enabled
|
||||
# bit31-1: 0 required
|
||||
|
||||
DATA 0xFFD01418 0x00000000 # DDR Operation
|
||||
# bit3-0: 0x0, DDR cmd
|
||||
# bit31-4: 0 required
|
||||
|
||||
DATA 0xFFD0141C 0x00000632 # DDR Mode
|
||||
# bit2-0: 2, BurstLen=2 required
|
||||
# bit3: 0, BurstType=0 required
|
||||
# bit6-4: 4, CL=5
|
||||
# bit7: 0, TestMode=0 normal
|
||||
# bit8: 0, DLL reset=0 normal
|
||||
# bit11-9: 6, auto-precharge write recovery ????????????
|
||||
# bit12: 0, PD must be zero
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01420 0x00000004 # DDR Extended Mode
|
||||
# bit0: 0, DDR DLL enabled
|
||||
# bit1: 1, DDR drive strenght reduced
|
||||
# bit2: 1, DDR ODT control lsd enabled
|
||||
# bit5-3: 000, required
|
||||
# bit6: 1, DDR ODT control msb, enabled
|
||||
# bit9-7: 000, required
|
||||
# bit10: 0, differential DQS enabled
|
||||
# bit11: 0, required
|
||||
# bit12: 0, DDR output buffer enabled
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01424 0x0000F07F # DDR Controller Control High
|
||||
# bit2-0: 111, required
|
||||
# bit3 : 1 , MBUS Burst Chop disabled
|
||||
# bit6-4: 111, required
|
||||
# bit7 : 1 , D2P Latency enabled
|
||||
# bit8 : 1 , add writepath sample stage, must be 1 for DDR freq >= 300MHz
|
||||
# bit9 : 0 , no half clock cycle addition to dataout
|
||||
# bit10 : 0 , 1/4 clock cycle skew enabled for addr/ctl signals
|
||||
# bit11 : 0 , 1/4 clock cycle skew disabled for write mesh
|
||||
# bit15-12: 1111 required
|
||||
# bit31-16: 0 required
|
||||
|
||||
DATA 0xFFD01428 0x00085520 # DDR2 ODT Read Timing (default values)
|
||||
DATA 0xFFD0147C 0x00008552 # DDR2 ODT Write Timing (default values)
|
||||
|
||||
DATA 0xFFD01500 0x00000000 # CS[0]n Base address to 0x0
|
||||
DATA 0xFFD01504 0x0FFFFFF1 # CS[0]n Size
|
||||
# bit0: 1, Window enabled
|
||||
# bit1: 0, Write Protect disabled
|
||||
# bit3-2: 00, CS0 hit selected
|
||||
# bit23-4: ones, required
|
||||
# bit31-24: 0x07, Size (i.e. 128MB)
|
||||
|
||||
DATA 0xFFD0150C 0x00000000 # CS[1]n Size, window disabled
|
||||
DATA 0xFFD01514 0x00000000 # CS[2]n Size, window disabled
|
||||
DATA 0xFFD0151C 0x00000000 # CS[3]n Size, window disabled
|
||||
|
||||
DATA 0xFFD01494 0x00010000 # DDR ODT Control (Low)
|
||||
# bit3-0: 1, ODT0Rd, MODT[0] asserted during read from DRAM CS0
|
||||
# bit19-16:1, ODT0Wr, MODT[0] asserted during write to DRAM CS0
|
||||
|
||||
DATA 0xFFD01498 0x00000000 # DDR ODT Control (High)
|
||||
# bit1-0: 00, ODT0 controlled by ODT Control (low) register above
|
||||
# bit3-2: 01, ODT1 active NEVER!
|
||||
# bit31-4: zero, required
|
||||
|
||||
DATA 0xFFD0149C 0x0000E40F # CPU ODT Control
|
||||
# bit3-0: 1, ODT0Rd, Internal ODT asserted during read from DRAM bank0
|
||||
# bit7-4: 1, ODT0Wr, Internal ODT asserted during write to DRAM bank0
|
||||
# bit11-10:1, DQ_ODTSel. ODT select turned on
|
||||
|
||||
DATA 0xFFD01480 0x00000001 # DDR Initialization Control
|
||||
#bit0=1, enable DDR init upon this register write
|
||||
|
||||
# End of Header extension
|
||||
DATA 0x0 0x0
|
||||
117
u-boot/board/LaCie/netspace_v2/netspace_v2.c
Normal file
117
u-boot/board/LaCie/netspace_v2/netspace_v2.c
Normal file
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
*
|
||||
* Based on Kirkwood support:
|
||||
* (C) Copyright 2009
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/soc.h>
|
||||
#include <asm/arch/mpp.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
|
||||
#include "netspace_v2.h"
|
||||
#include "../common/common.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/* Gpio configuration */
|
||||
mvebu_config_gpio(NETSPACE_V2_OE_VAL_LOW, NETSPACE_V2_OE_VAL_HIGH,
|
||||
NETSPACE_V2_OE_LOW, NETSPACE_V2_OE_HIGH);
|
||||
|
||||
/* Multi-Purpose Pins Functionality configuration */
|
||||
static const u32 kwmpp_config[] = {
|
||||
MPP0_SPI_SCn,
|
||||
MPP1_SPI_MOSI,
|
||||
MPP2_SPI_SCK,
|
||||
MPP3_SPI_MISO,
|
||||
MPP4_NF_IO6,
|
||||
MPP5_NF_IO7,
|
||||
MPP6_SYSRST_OUTn,
|
||||
MPP7_GPO, /* Fan speed (bit 1) */
|
||||
MPP8_TW_SDA,
|
||||
MPP9_TW_SCK,
|
||||
MPP10_UART0_TXD,
|
||||
MPP11_UART0_RXD,
|
||||
MPP12_GPO, /* Red led */
|
||||
MPP14_GPIO, /* USB fuse */
|
||||
MPP16_GPIO, /* SATA 0 power */
|
||||
MPP17_GPIO, /* SATA 1 power */
|
||||
MPP18_NF_IO0,
|
||||
MPP19_NF_IO1,
|
||||
MPP20_SATA1_ACTn,
|
||||
MPP21_SATA0_ACTn,
|
||||
MPP22_GPIO, /* Fan speed (bit 0) */
|
||||
MPP23_GPIO, /* Fan power */
|
||||
MPP24_GPIO, /* USB mode select */
|
||||
MPP25_GPIO, /* Fan rotation fail */
|
||||
MPP26_GPIO, /* USB vbus-in detection */
|
||||
MPP28_GPIO, /* USB enable vbus-out */
|
||||
MPP29_GPIO, /* Blue led (slow register) */
|
||||
MPP30_GPIO, /* Blue led (command register) */
|
||||
MPP31_GPIO, /* Board power off */
|
||||
MPP32_GPIO, /* Button (0 = Released, 1 = Pushed) */
|
||||
MPP33_GPIO, /* Fan speed (bit 2) */
|
||||
0
|
||||
};
|
||||
kirkwood_mpp_conf(kwmpp_config, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* Machine number */
|
||||
gd->bd->bi_arch_number = CONFIG_MACH_TYPE;
|
||||
|
||||
/* Boot parameters address */
|
||||
gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_MISC_INIT_R)
|
||||
int misc_init_r(void)
|
||||
{
|
||||
#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
|
||||
if (!getenv("ethaddr")) {
|
||||
uchar mac[6];
|
||||
if (lacie_read_mac_address(mac) == 0)
|
||||
eth_setenv_enetaddr("ethaddr", mac);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
|
||||
/* Configure and initialize PHY */
|
||||
void reset_phy(void)
|
||||
{
|
||||
#if defined(CONFIG_NETSPACE_LITE_V2) || defined(CONFIG_NETSPACE_MINI_V2)
|
||||
mv_phy_88e1318_init("egiga0", 0);
|
||||
#else
|
||||
mv_phy_88e1116_init("egiga0", 8);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_KIRKWOOD_GPIO)
|
||||
/* Return GPIO button status */
|
||||
static int
|
||||
do_read_button(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||
{
|
||||
return kw_gpio_get_value(NETSPACE_V2_GPIO_BUTTON);
|
||||
}
|
||||
|
||||
U_BOOT_CMD(button, 1, 1, do_read_button,
|
||||
"Return GPIO button status 0=off 1=on", "");
|
||||
#endif
|
||||
23
u-boot/board/LaCie/netspace_v2/netspace_v2.h
Normal file
23
u-boot/board/LaCie/netspace_v2/netspace_v2.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
||||
*
|
||||
* Based on Kirkwood support:
|
||||
* (C) Copyright 2009
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef NETSPACE_V2_H
|
||||
#define NETSPACE_V2_H
|
||||
|
||||
/* GPIO configuration */
|
||||
#define NETSPACE_V2_OE_LOW 0x06004000
|
||||
#define NETSPACE_V2_OE_HIGH 0x00000031
|
||||
#define NETSPACE_V2_OE_VAL_LOW 0x10030000
|
||||
#define NETSPACE_V2_OE_VAL_HIGH 0x00000000
|
||||
|
||||
#define NETSPACE_V2_GPIO_BUTTON 32
|
||||
|
||||
#endif /* NETSPACE_V2_H */
|
||||
15
u-boot/board/Marvell/aspenite/Kconfig
Normal file
15
u-boot/board/Marvell/aspenite/Kconfig
Normal file
@@ -0,0 +1,15 @@
|
||||
if TARGET_ASPENITE
|
||||
|
||||
config SYS_BOARD
|
||||
default "aspenite"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "Marvell"
|
||||
|
||||
config SYS_SOC
|
||||
default "armada100"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "aspenite"
|
||||
|
||||
endif
|
||||
6
u-boot/board/Marvell/aspenite/MAINTAINERS
Normal file
6
u-boot/board/Marvell/aspenite/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
ASPENITE BOARD
|
||||
M: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
S: Maintained
|
||||
F: board/Marvell/aspenite/
|
||||
F: include/configs/aspenite.h
|
||||
F: configs/aspenite_defconfig
|
||||
10
u-boot/board/Marvell/aspenite/Makefile
Normal file
10
u-boot/board/Marvell/aspenite/Makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
#
|
||||
# (C) Copyright 2010
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
# Contributor: Mahavir Jain <mjain@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := aspenite.o
|
||||
43
u-boot/board/Marvell/aspenite/aspenite.c
Normal file
43
u-boot/board/Marvell/aspenite/aspenite.c
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* (C) Copyright 2010
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
* Contributor: Mahavir Jain <mjain@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <mvmfp.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/mfp.h>
|
||||
#include <asm/arch/armada100.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
u32 mfp_cfg[] = {
|
||||
/* I2C */
|
||||
MFP105_CI2C_SDA,
|
||||
MFP106_CI2C_SCL,
|
||||
|
||||
/* Enable Console on UART1 */
|
||||
MFP107_UART1_RXD,
|
||||
MFP108_UART1_TXD,
|
||||
|
||||
MFP_EOC /*End of configureation*/
|
||||
};
|
||||
/* configure MFP's */
|
||||
mfp_config(mfp_cfg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* arch number of Board */
|
||||
gd->bd->bi_arch_number = MACH_TYPE_ASPENITE;
|
||||
/* adress of boot parameters */
|
||||
gd->bd->bi_boot_params = armd1_sdram_base(0) + 0x100;
|
||||
return 0;
|
||||
}
|
||||
6
u-boot/board/Marvell/db-88f6720/MAINTAINERS
Normal file
6
u-boot/board/Marvell/db-88f6720/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
DB_88F6720 BOARD
|
||||
M: Stefan Roese <sr@denx.de>
|
||||
S: Maintained
|
||||
F: board/Marvell/db-88f6720/
|
||||
F: include/configs/db-88f6720.h
|
||||
F: configs/db-88f6720_defconfig
|
||||
7
u-boot/board/Marvell/db-88f6720/Makefile
Normal file
7
u-boot/board/Marvell/db-88f6720/Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Copyright (C) 2016 Stefan Roese <sr@denx.de>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := db-88f6720.o
|
||||
91
u-boot/board/Marvell/db-88f6720/db-88f6720.c
Normal file
91
u-boot/board/Marvell/db-88f6720/db-88f6720.c
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Stefan Roese <sr@denx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <miiphy.h>
|
||||
#include <netdev.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/soc.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* Those values and defines are taken from the Marvell U-Boot version
|
||||
* "u-boot-2013.01-2014_T2.0" for the board Armada 375 DB-88F6720
|
||||
*/
|
||||
#define DB_88F6720_MPP0_7 0x00020020 /* SPI */
|
||||
#define DB_88F6720_MPP8_15 0x22000022 /* SPI , I2C */
|
||||
#define DB_88F6720_MPP16_23 0x22222222 /* UART, TDM*/
|
||||
#define DB_88F6720_MPP24_31 0x33333333 /* SDIO, SPI1*/
|
||||
#define DB_88F6720_MPP32_39 0x04403330 /* SPI1, External SMI */
|
||||
#define DB_88F6720_MPP40_47 0x22002044 /* UART1, GE0, SATA0 LED */
|
||||
#define DB_88F6720_MPP48_55 0x22222222 /* GE0 */
|
||||
#define DB_88F6720_MPP56_63 0x04444422 /* GE0 , LED_MATRIX, GPIO */
|
||||
#define DB_88F6720_MPP64_67 0x014 /* LED_MATRIX, SATA1 LED*/
|
||||
|
||||
#define DB_88F6720_GPP_OUT_ENA_LOW 0xFFFFFFFF
|
||||
#define DB_88F6720_GPP_OUT_ENA_MID 0x7FFFFFFF
|
||||
#define DB_88F6720_GPP_OUT_ENA_HIGH 0xFFFFFFFF
|
||||
#define DB_88F6720_GPP_OUT_VAL_LOW 0x0
|
||||
#define DB_88F6720_GPP_OUT_VAL_MID BIT(31) /* SATA Power output enable */
|
||||
#define DB_88F6720_GPP_OUT_VAL_HIGH 0x0
|
||||
#define DB_88F6720_GPP_POL_LOW 0x0
|
||||
#define DB_88F6720_GPP_POL_MID 0x0
|
||||
#define DB_88F6720_GPP_POL_HIGH 0x0
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/* Configure MPP */
|
||||
writel(DB_88F6720_MPP0_7, MVEBU_MPP_BASE + 0x00);
|
||||
writel(DB_88F6720_MPP8_15, MVEBU_MPP_BASE + 0x04);
|
||||
writel(DB_88F6720_MPP16_23, MVEBU_MPP_BASE + 0x08);
|
||||
writel(DB_88F6720_MPP24_31, MVEBU_MPP_BASE + 0x0c);
|
||||
writel(DB_88F6720_MPP32_39, MVEBU_MPP_BASE + 0x10);
|
||||
writel(DB_88F6720_MPP40_47, MVEBU_MPP_BASE + 0x14);
|
||||
writel(DB_88F6720_MPP48_55, MVEBU_MPP_BASE + 0x18);
|
||||
writel(DB_88F6720_MPP56_63, MVEBU_MPP_BASE + 0x1c);
|
||||
writel(DB_88F6720_MPP64_67, MVEBU_MPP_BASE + 0x20);
|
||||
|
||||
/* Configure GPIO */
|
||||
/* Set GPP Out value */
|
||||
writel(DB_88F6720_GPP_OUT_VAL_LOW, MVEBU_GPIO0_BASE + 0x00);
|
||||
writel(DB_88F6720_GPP_OUT_VAL_MID, MVEBU_GPIO1_BASE + 0x00);
|
||||
writel(DB_88F6720_GPP_OUT_VAL_HIGH, MVEBU_GPIO2_BASE + 0x00);
|
||||
|
||||
/* Set GPP Polarity */
|
||||
writel(DB_88F6720_GPP_POL_LOW, MVEBU_GPIO0_BASE + 0x0c);
|
||||
writel(DB_88F6720_GPP_POL_MID, MVEBU_GPIO1_BASE + 0x0c);
|
||||
writel(DB_88F6720_GPP_POL_HIGH, MVEBU_GPIO2_BASE + 0x0c);
|
||||
|
||||
/* Set GPP Out Enable */
|
||||
writel(DB_88F6720_GPP_OUT_ENA_LOW, MVEBU_GPIO0_BASE + 0x04);
|
||||
writel(DB_88F6720_GPP_OUT_ENA_MID, MVEBU_GPIO1_BASE + 0x04);
|
||||
writel(DB_88F6720_GPP_OUT_ENA_HIGH, MVEBU_GPIO2_BASE + 0x04);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* adress of boot parameters */
|
||||
gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int checkboard(void)
|
||||
{
|
||||
puts("Board: Marvell DB-88F6720\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
cpu_eth_init(bis); /* Built in controller(s) come first */
|
||||
return pci_eth_init(bis);
|
||||
}
|
||||
12
u-boot/board/Marvell/db-88f6720/kwbimage.cfg
Normal file
12
u-boot/board/Marvell/db-88f6720/kwbimage.cfg
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2014 Stefan Roese <sr@denx.de>
|
||||
#
|
||||
|
||||
# Armada XP uses version 1 image format
|
||||
VERSION 1
|
||||
|
||||
# Boot Media configurations
|
||||
BOOT_FROM spi
|
||||
|
||||
# Binary Header (bin_hdr) with DDR3 training code
|
||||
BINARY spl/u-boot-spl-dtb.bin 0000005b 00000068
|
||||
6
u-boot/board/Marvell/db-88f6820-gp/MAINTAINERS
Normal file
6
u-boot/board/Marvell/db-88f6820-gp/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
DB_88F6820_GP BOARD
|
||||
M: Stefan Roese <sr@denx.de>
|
||||
S: Maintained
|
||||
F: board/Marvell/db-88f6820-gp/
|
||||
F: include/configs/db-88f6820-gp.h
|
||||
F: configs/db-88f6820-gp_defconfig
|
||||
7
u-boot/board/Marvell/db-88f6820-gp/Makefile
Normal file
7
u-boot/board/Marvell/db-88f6820-gp/Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Copyright (C) 2015 Stefan Roese <sr@denx.de>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := db-88f6820-gp.o
|
||||
18
u-boot/board/Marvell/db-88f6820-gp/README
Normal file
18
u-boot/board/Marvell/db-88f6820-gp/README
Normal file
@@ -0,0 +1,18 @@
|
||||
Update from original Marvell U-Boot to mainline U-Boot:
|
||||
-------------------------------------------------------
|
||||
|
||||
The resulting image including the SPL binary with the
|
||||
full DDR setup is "u-boot-spl.kwb".
|
||||
|
||||
To update the SPI NOR flash, please use the following
|
||||
command:
|
||||
|
||||
=> sf probe;tftpboot 2000000 db-88f6820-gp/u-boot-spl.kwb;\
|
||||
sf update 2000000 0 60000
|
||||
|
||||
Note that the original Marvell U-Boot seems to have
|
||||
problems with the "sf update" command. This does not
|
||||
work reliable. So here this command should be used:
|
||||
|
||||
=> sf probe;tftpboot 2000000 db-88f6820-gp/u-boot-spl.kwb;\
|
||||
sf erase 0 60000;sf write 2000000 0 60000
|
||||
156
u-boot/board/Marvell/db-88f6820-gp/db-88f6820-gp.c
Normal file
156
u-boot/board/Marvell/db-88f6820-gp/db-88f6820-gp.c
Normal file
@@ -0,0 +1,156 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Stefan Roese <sr@denx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <i2c.h>
|
||||
#include <miiphy.h>
|
||||
#include <netdev.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/soc.h>
|
||||
|
||||
#include "../drivers/ddr/marvell/a38x/ddr3_a38x_topology.h"
|
||||
#include <../serdes/a38x/high_speed_env_spec.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define ETH_PHY_CTRL_REG 0
|
||||
#define ETH_PHY_CTRL_POWER_DOWN_BIT 11
|
||||
#define ETH_PHY_CTRL_POWER_DOWN_MASK (1 << ETH_PHY_CTRL_POWER_DOWN_BIT)
|
||||
|
||||
/*
|
||||
* Those values and defines are taken from the Marvell U-Boot version
|
||||
* "u-boot-2013.01-2014_T3.0"
|
||||
*/
|
||||
#define DB_GP_88F68XX_GPP_OUT_ENA_LOW \
|
||||
(~(BIT(1) | BIT(4) | BIT(6) | BIT(7) | BIT(8) | BIT(9) | \
|
||||
BIT(10) | BIT(11) | BIT(19) | BIT(22) | BIT(23) | BIT(25) | \
|
||||
BIT(26) | BIT(27) | BIT(29) | BIT(30) | BIT(31)))
|
||||
#define DB_GP_88F68XX_GPP_OUT_ENA_MID \
|
||||
(~(BIT(0) | BIT(1) | BIT(2) | BIT(3) | BIT(4) | BIT(15) | \
|
||||
BIT(16) | BIT(17) | BIT(18)))
|
||||
|
||||
#define DB_GP_88F68XX_GPP_OUT_VAL_LOW 0x0
|
||||
#define DB_GP_88F68XX_GPP_OUT_VAL_MID 0x0
|
||||
#define DB_GP_88F68XX_GPP_POL_LOW 0x0
|
||||
#define DB_GP_88F68XX_GPP_POL_MID 0x0
|
||||
|
||||
/* IO expander on Marvell GP board includes e.g. fan enabling */
|
||||
struct marvell_io_exp {
|
||||
u8 chip;
|
||||
u8 addr;
|
||||
u8 val;
|
||||
};
|
||||
|
||||
static struct marvell_io_exp io_exp[] = {
|
||||
{ 0x20, 6, 0x20 }, /* Configuration registers: Bit on --> Input bits */
|
||||
{ 0x20, 7, 0xC3 }, /* Configuration registers: Bit on --> Input bits */
|
||||
{ 0x20, 2, 0x1D }, /* Output Data, register#0 */
|
||||
{ 0x20, 3, 0x18 }, /* Output Data, register#1 */
|
||||
{ 0x21, 6, 0xC3 }, /* Configuration registers: Bit on --> Input bits */
|
||||
{ 0x21, 7, 0x31 }, /* Configuration registers: Bit on --> Input bits */
|
||||
{ 0x21, 2, 0x08 }, /* Output Data, register#0 */
|
||||
{ 0x21, 3, 0xC0 } /* Output Data, register#1 */
|
||||
};
|
||||
|
||||
static struct serdes_map board_serdes_map[] = {
|
||||
{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
|
||||
{SATA0, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
|
||||
{SATA1, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
|
||||
{SATA3, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
|
||||
{SATA2, SERDES_SPEED_3_GBPS, SERDES_DEFAULT_MODE, 0, 0},
|
||||
{USB3_HOST1, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}
|
||||
};
|
||||
|
||||
int hws_board_topology_load(struct serdes_map **serdes_map_array, u8 *count)
|
||||
{
|
||||
*serdes_map_array = board_serdes_map;
|
||||
*count = ARRAY_SIZE(board_serdes_map);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Define the DDR layout / topology here in the board file. This will
|
||||
* be used by the DDR3 init code in the SPL U-Boot version to configure
|
||||
* the DDR3 controller.
|
||||
*/
|
||||
static struct hws_topology_map board_topology_map = {
|
||||
0x1, /* active interfaces */
|
||||
/* cs_mask, mirror, dqs_swap, ck_swap X PUPs */
|
||||
{ { { {0x1, 0, 0, 0},
|
||||
{0x1, 0, 0, 0},
|
||||
{0x1, 0, 0, 0},
|
||||
{0x1, 0, 0, 0},
|
||||
{0x1, 0, 0, 0} },
|
||||
SPEED_BIN_DDR_1866L, /* speed_bin */
|
||||
BUS_WIDTH_8, /* memory_width */
|
||||
MEM_4G, /* mem_size */
|
||||
DDR_FREQ_800, /* frequency */
|
||||
0, 0, /* cas_l cas_wl */
|
||||
HWS_TEMP_LOW} }, /* temperature */
|
||||
5, /* Num Of Bus Per Interface*/
|
||||
BUS_MASK_32BIT /* Busses mask */
|
||||
};
|
||||
|
||||
struct hws_topology_map *ddr3_get_topology_map(void)
|
||||
{
|
||||
/* Return the board topology as defined in the board code */
|
||||
return &board_topology_map;
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/* Configure MPP */
|
||||
writel(0x11111111, MVEBU_MPP_BASE + 0x00);
|
||||
writel(0x11111111, MVEBU_MPP_BASE + 0x04);
|
||||
writel(0x11244011, MVEBU_MPP_BASE + 0x08);
|
||||
writel(0x22222111, MVEBU_MPP_BASE + 0x0c);
|
||||
writel(0x22200002, MVEBU_MPP_BASE + 0x10);
|
||||
writel(0x30042022, MVEBU_MPP_BASE + 0x14);
|
||||
writel(0x55550555, MVEBU_MPP_BASE + 0x18);
|
||||
writel(0x00005550, MVEBU_MPP_BASE + 0x1c);
|
||||
|
||||
/* Set GPP Out value */
|
||||
writel(DB_GP_88F68XX_GPP_OUT_VAL_LOW, MVEBU_GPIO0_BASE + 0x00);
|
||||
writel(DB_GP_88F68XX_GPP_OUT_VAL_MID, MVEBU_GPIO1_BASE + 0x00);
|
||||
|
||||
/* Set GPP Polarity */
|
||||
writel(DB_GP_88F68XX_GPP_POL_LOW, MVEBU_GPIO0_BASE + 0x0c);
|
||||
writel(DB_GP_88F68XX_GPP_POL_MID, MVEBU_GPIO1_BASE + 0x0c);
|
||||
|
||||
/* Set GPP Out Enable */
|
||||
writel(DB_GP_88F68XX_GPP_OUT_ENA_LOW, MVEBU_GPIO0_BASE + 0x04);
|
||||
writel(DB_GP_88F68XX_GPP_OUT_ENA_MID, MVEBU_GPIO1_BASE + 0x04);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* adress of boot parameters */
|
||||
gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
|
||||
|
||||
/* Init I2C IO expanders */
|
||||
for (i = 0; i < ARRAY_SIZE(io_exp); i++)
|
||||
i2c_write(io_exp[i].chip, io_exp[i].addr, 1, &io_exp[i].val, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int checkboard(void)
|
||||
{
|
||||
puts("Board: Marvell DB-88F6820-GP\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
cpu_eth_init(bis); /* Built in controller(s) come first */
|
||||
return pci_eth_init(bis);
|
||||
}
|
||||
12
u-boot/board/Marvell/db-88f6820-gp/kwbimage.cfg
Normal file
12
u-boot/board/Marvell/db-88f6820-gp/kwbimage.cfg
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2014 Stefan Roese <sr@denx.de>
|
||||
#
|
||||
|
||||
# Armada XP uses version 1 image format
|
||||
VERSION 1
|
||||
|
||||
# Boot Media configurations
|
||||
BOOT_FROM spi
|
||||
|
||||
# Binary Header (bin_hdr) with DDR3 training code
|
||||
BINARY spl/u-boot-spl-dtb.bin 0000005b 00000068
|
||||
6
u-boot/board/Marvell/db-mv784mp-gp/MAINTAINERS
Normal file
6
u-boot/board/Marvell/db-mv784mp-gp/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
DB_MV784MP_GP BOARD
|
||||
M: Stefan Roese <sr@denx.de>
|
||||
S: Maintained
|
||||
F: board/Marvell/db-mv784mp-gp/
|
||||
F: include/configs/db-mv784mp-gp.h
|
||||
F: configs/db-mv784mp-gp_defconfig
|
||||
7
u-boot/board/Marvell/db-mv784mp-gp/Makefile
Normal file
7
u-boot/board/Marvell/db-mv784mp-gp/Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Copyright (C) 2014 Stefan Roese <sr@denx.de>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := db-mv784mp-gp.o
|
||||
118
u-boot/board/Marvell/db-mv784mp-gp/db-mv784mp-gp.c
Normal file
118
u-boot/board/Marvell/db-mv784mp-gp/db-mv784mp-gp.c
Normal file
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Stefan Roese <sr@denx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <miiphy.h>
|
||||
#include <netdev.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/soc.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define ETH_PHY_CTRL_REG 0
|
||||
#define ETH_PHY_CTRL_POWER_DOWN_BIT 11
|
||||
#define ETH_PHY_CTRL_POWER_DOWN_MASK (1 << ETH_PHY_CTRL_POWER_DOWN_BIT)
|
||||
|
||||
/*
|
||||
* Those values and defines are taken from the Marvell U-Boot version
|
||||
* "u-boot-2011.12-2014_T1.0" for the board rd78460gp aka
|
||||
* "RD-AXP-GP rev 1.0".
|
||||
*
|
||||
* GPPs
|
||||
* MPP# NAME IN/OUT
|
||||
* ----------------------------------------------
|
||||
* 21 SW_Reset_ OUT
|
||||
* 25 Phy_Int# IN
|
||||
* 28 SDI_WP IN
|
||||
* 29 SDI_Status IN
|
||||
* 54-61 On GPP Connector ?
|
||||
* 62 Switch Interrupt IN
|
||||
* 63-65 Reserved from SW Board ?
|
||||
* 66 SW_BRD connected IN
|
||||
*/
|
||||
#define RD_78460_GP_GPP_OUT_ENA_LOW (~(BIT(21) | BIT(20)))
|
||||
#define RD_78460_GP_GPP_OUT_ENA_MID (~(BIT(26) | BIT(27)))
|
||||
#define RD_78460_GP_GPP_OUT_ENA_HIGH (~(0x0))
|
||||
|
||||
#define RD_78460_GP_GPP_OUT_VAL_LOW (BIT(21) | BIT(20))
|
||||
#define RD_78460_GP_GPP_OUT_VAL_MID (BIT(26) | BIT(27))
|
||||
#define RD_78460_GP_GPP_OUT_VAL_HIGH 0x0
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/* Configure MPP */
|
||||
writel(0x00000000, MVEBU_MPP_BASE + 0x00);
|
||||
writel(0x00000000, MVEBU_MPP_BASE + 0x04);
|
||||
writel(0x33000000, MVEBU_MPP_BASE + 0x08);
|
||||
writel(0x11000000, MVEBU_MPP_BASE + 0x0c);
|
||||
writel(0x11111111, MVEBU_MPP_BASE + 0x10);
|
||||
writel(0x00221100, MVEBU_MPP_BASE + 0x14);
|
||||
writel(0x00000003, MVEBU_MPP_BASE + 0x18);
|
||||
writel(0x00000000, MVEBU_MPP_BASE + 0x1c);
|
||||
writel(0x00000000, MVEBU_MPP_BASE + 0x20);
|
||||
|
||||
/* Configure GPIO */
|
||||
writel(RD_78460_GP_GPP_OUT_VAL_LOW, MVEBU_GPIO0_BASE + 0x00);
|
||||
writel(RD_78460_GP_GPP_OUT_ENA_LOW, MVEBU_GPIO0_BASE + 0x04);
|
||||
writel(RD_78460_GP_GPP_OUT_VAL_MID, MVEBU_GPIO1_BASE + 0x00);
|
||||
writel(RD_78460_GP_GPP_OUT_ENA_MID, MVEBU_GPIO1_BASE + 0x04);
|
||||
writel(RD_78460_GP_GPP_OUT_VAL_HIGH, MVEBU_GPIO2_BASE + 0x00);
|
||||
writel(RD_78460_GP_GPP_OUT_ENA_HIGH, MVEBU_GPIO2_BASE + 0x04);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* adress of boot parameters */
|
||||
gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int checkboard(void)
|
||||
{
|
||||
puts("Board: Marvell DB-MV784MP-GP\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
cpu_eth_init(bis); /* Built in controller(s) come first */
|
||||
return pci_eth_init(bis);
|
||||
}
|
||||
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
{
|
||||
u16 reg;
|
||||
|
||||
/* Enable QSGMII AN */
|
||||
/* Set page to 4 */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x16, 4);
|
||||
/* Enable AN */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x0, 0x1140);
|
||||
/* Set page to 0 */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x16, 0);
|
||||
|
||||
/* Phy C_ANEG */
|
||||
reg = phy_read(phydev, MDIO_DEVAD_NONE, 0x4);
|
||||
reg |= 0x1E0;
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x4, reg);
|
||||
|
||||
/* Soft-Reset */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 22, 0x0000);
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0, 0x9140);
|
||||
|
||||
/* Power up the phy */
|
||||
reg = phy_read(phydev, MDIO_DEVAD_NONE, ETH_PHY_CTRL_REG);
|
||||
reg &= ~(ETH_PHY_CTRL_POWER_DOWN_MASK);
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, ETH_PHY_CTRL_REG, reg);
|
||||
|
||||
printf("88E1545 Initialized\n");
|
||||
return 0;
|
||||
}
|
||||
12
u-boot/board/Marvell/db-mv784mp-gp/kwbimage.cfg
Normal file
12
u-boot/board/Marvell/db-mv784mp-gp/kwbimage.cfg
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2014 Stefan Roese <sr@denx.de>
|
||||
#
|
||||
|
||||
# Armada XP uses version 1 image format
|
||||
VERSION 1
|
||||
|
||||
# Boot Media configurations
|
||||
BOOT_FROM spi
|
||||
|
||||
# Binary Header (bin_hdr) with DDR3 training code
|
||||
BINARY spl/u-boot-spl-dtb.bin 0000005b 00000068
|
||||
12
u-boot/board/Marvell/dreamplug/Kconfig
Normal file
12
u-boot/board/Marvell/dreamplug/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
if TARGET_DREAMPLUG
|
||||
|
||||
config SYS_BOARD
|
||||
default "dreamplug"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "Marvell"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "dreamplug"
|
||||
|
||||
endif
|
||||
6
u-boot/board/Marvell/dreamplug/MAINTAINERS
Normal file
6
u-boot/board/Marvell/dreamplug/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
DREAMPLUG BOARD
|
||||
M: Jason Cooper <u-boot@lakedaemon.net>
|
||||
S: Maintained
|
||||
F: board/Marvell/dreamplug/
|
||||
F: include/configs/dreamplug.h
|
||||
F: configs/dreamplug_defconfig
|
||||
12
u-boot/board/Marvell/dreamplug/Makefile
Normal file
12
u-boot/board/Marvell/dreamplug/Makefile
Normal file
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# (C) Copyright 2011
|
||||
# Jason Cooper <u-boot@lakedaemon.net>
|
||||
#
|
||||
# Based on work by:
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Siddarth Gore <gores@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := dreamplug.o
|
||||
136
u-boot/board/Marvell/dreamplug/dreamplug.c
Normal file
136
u-boot/board/Marvell/dreamplug/dreamplug.c
Normal file
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* (C) Copyright 2011
|
||||
* Jason Cooper <u-boot@lakedaemon.net>
|
||||
*
|
||||
* Based on work by:
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Siddarth Gore <gores@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <miiphy.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/soc.h>
|
||||
#include <asm/arch/mpp.h>
|
||||
#include "dreamplug.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/*
|
||||
* default gpio configuration
|
||||
* There are maximum 64 gpios controlled through 2 sets of registers
|
||||
* the below configuration configures mainly initial LED status
|
||||
*/
|
||||
mvebu_config_gpio(DREAMPLUG_OE_VAL_LOW,
|
||||
DREAMPLUG_OE_VAL_HIGH,
|
||||
DREAMPLUG_OE_LOW, DREAMPLUG_OE_HIGH);
|
||||
|
||||
/* Multi-Purpose Pins Functionality configuration */
|
||||
static const u32 kwmpp_config[] = {
|
||||
MPP0_SPI_SCn, /* SPI Flash */
|
||||
MPP1_SPI_MOSI,
|
||||
MPP2_SPI_SCK,
|
||||
MPP3_SPI_MISO,
|
||||
MPP4_NF_IO6,
|
||||
MPP5_NF_IO7,
|
||||
MPP6_SYSRST_OUTn,
|
||||
MPP7_GPO,
|
||||
MPP8_TW_SDA,
|
||||
MPP9_TW_SCK,
|
||||
MPP10_UART0_TXD, /* Serial */
|
||||
MPP11_UART0_RXD,
|
||||
MPP12_SD_CLK, /* SDIO Slot */
|
||||
MPP13_SD_CMD,
|
||||
MPP14_SD_D0,
|
||||
MPP15_SD_D1,
|
||||
MPP16_SD_D2,
|
||||
MPP17_SD_D3,
|
||||
MPP18_NF_IO0,
|
||||
MPP19_NF_IO1,
|
||||
MPP20_GE1_0, /* Gigabit Ethernet */
|
||||
MPP21_GE1_1,
|
||||
MPP22_GE1_2,
|
||||
MPP23_GE1_3,
|
||||
MPP24_GE1_4,
|
||||
MPP25_GE1_5,
|
||||
MPP26_GE1_6,
|
||||
MPP27_GE1_7,
|
||||
MPP28_GE1_8,
|
||||
MPP29_GE1_9,
|
||||
MPP30_GE1_10,
|
||||
MPP31_GE1_11,
|
||||
MPP32_GE1_12,
|
||||
MPP33_GE1_13,
|
||||
MPP34_GE1_14,
|
||||
MPP35_GE1_15,
|
||||
MPP36_GPIO, /* 7 external GPIO pins (36 - 45) */
|
||||
MPP37_GPIO,
|
||||
MPP38_GPIO,
|
||||
MPP39_GPIO,
|
||||
MPP40_TDM_SPI_SCK,
|
||||
MPP41_TDM_SPI_MISO,
|
||||
MPP42_TDM_SPI_MOSI,
|
||||
MPP43_GPIO,
|
||||
MPP44_GPIO,
|
||||
MPP45_GPIO,
|
||||
MPP46_GPIO,
|
||||
MPP47_GPIO, /* Bluetooth LED */
|
||||
MPP48_GPIO, /* Wifi LED */
|
||||
MPP49_GPIO, /* Wifi AP LED */
|
||||
0
|
||||
};
|
||||
kirkwood_mpp_conf(kwmpp_config, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* adress of boot parameters */
|
||||
gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RESET_PHY_R
|
||||
void mv_phy_88e1116_init(char *name)
|
||||
{
|
||||
u16 reg;
|
||||
u16 devadr;
|
||||
|
||||
if (miiphy_set_current_dev(name))
|
||||
return;
|
||||
|
||||
/* command to read PHY dev address */
|
||||
if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
|
||||
printf("Err..%s could not read PHY dev address\n",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable RGMII delay on Tx and Rx for CPU port
|
||||
* Ref: sec 4.7.2 of chip datasheet
|
||||
*/
|
||||
miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
|
||||
miiphy_read(name, devadr, MV88E1116_MAC_CTRL2_REG, ®);
|
||||
reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
|
||||
miiphy_write(name, devadr, MV88E1116_MAC_CTRL2_REG, reg);
|
||||
miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
|
||||
|
||||
/* reset the phy */
|
||||
miiphy_reset(name, devadr);
|
||||
|
||||
printf("88E1116 Initialized on %s\n", name);
|
||||
}
|
||||
|
||||
void reset_phy(void)
|
||||
{
|
||||
/* configure and initialize both PHY's */
|
||||
mv_phy_88e1116_init("egiga0");
|
||||
mv_phy_88e1116_init("egiga1");
|
||||
}
|
||||
#endif /* CONFIG_RESET_PHY_R */
|
||||
26
u-boot/board/Marvell/dreamplug/dreamplug.h
Normal file
26
u-boot/board/Marvell/dreamplug/dreamplug.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* (C) Copyright 2011
|
||||
* Jason Cooper <u-boot@lakedaemon.net>
|
||||
*
|
||||
* Based on work by:
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Siddarth Gore <gores@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __DREAMPLUG_H
|
||||
#define __DREAMPLUG_H
|
||||
|
||||
#define DREAMPLUG_OE_LOW (~(0))
|
||||
#define DREAMPLUG_OE_HIGH (~(0))
|
||||
#define DREAMPLUG_OE_VAL_LOW 0
|
||||
#define DREAMPLUG_OE_VAL_HIGH (0xf << 16) /* 4 LED Pins high */
|
||||
|
||||
/* PHY related */
|
||||
#define MV88E1116_MAC_CTRL2_REG 21
|
||||
#define MV88E1116_PGADR_REG 22
|
||||
#define MV88E1116_RGMII_TXTM_CTRL (1 << 4)
|
||||
#define MV88E1116_RGMII_RXTM_CTRL (1 << 5)
|
||||
|
||||
#endif /* __DREAMPLUG_H */
|
||||
147
u-boot/board/Marvell/dreamplug/kwbimage.cfg
Normal file
147
u-boot/board/Marvell/dreamplug/kwbimage.cfg
Normal file
@@ -0,0 +1,147 @@
|
||||
#
|
||||
# (C) Copyright 2011
|
||||
# Jason Cooper <u-boot@lakedaemon.net>
|
||||
#
|
||||
# Based on work by:
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Siddarth Gore <gores@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Refer doc/README.kwbimage for more details about how-to configure
|
||||
# and create kirkwood boot image
|
||||
#
|
||||
|
||||
# Boot Media configurations
|
||||
BOOT_FROM spi
|
||||
|
||||
# SOC registers configuration using bootrom header extension
|
||||
# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
|
||||
|
||||
# Configure RGMII-0/1 interface pad voltage to 1.8V
|
||||
DATA 0xFFD100e0 0x1b1b9b9b
|
||||
|
||||
#Dram initalization for SINGLE x16 CL=5 @ 400MHz
|
||||
DATA 0xFFD01400 0x43000c30 # DDR Configuration register
|
||||
# bit13-0: 0xc30 (3120 DDR2 clks refresh rate)
|
||||
# bit23-14: zero
|
||||
# bit24: 1= enable exit self refresh mode on DDR access
|
||||
# bit25: 1 required
|
||||
# bit29-26: zero
|
||||
# bit31-30: 01
|
||||
|
||||
DATA 0xFFD01404 0x37543000 # DDR Controller Control Low
|
||||
# bit 4: 0=addr/cmd in smame cycle
|
||||
# bit 5: 0=clk is driven during self refresh, we don't care for APX
|
||||
# bit 6: 0=use recommended falling edge of clk for addr/cmd
|
||||
# bit14: 0=input buffer always powered up
|
||||
# bit18: 1=cpu lock transaction enabled
|
||||
# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
|
||||
# bit27-24: 7= CL+2, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
|
||||
# bit30-28: 3 required
|
||||
# bit31: 0=no additional STARTBURST delay
|
||||
|
||||
DATA 0xFFD01408 0x22125451 # DDR Timing (Low) (active cycles value +1)
|
||||
# bit3-0: TRAS lsbs
|
||||
# bit7-4: TRCD
|
||||
# bit11- 8: TRP
|
||||
# bit15-12: TWR
|
||||
# bit19-16: TWTR
|
||||
# bit20: TRAS msb
|
||||
# bit23-21: 0x0
|
||||
# bit27-24: TRRD
|
||||
# bit31-28: TRTP
|
||||
|
||||
DATA 0xFFD0140C 0x00000a33 # DDR Timing (High)
|
||||
# bit6-0: TRFC
|
||||
# bit8-7: TR2R
|
||||
# bit10-9: TR2W
|
||||
# bit12-11: TW2W
|
||||
# bit31-13: zero required
|
||||
|
||||
DATA 0xFFD01410 0x000000cc # DDR Address Control
|
||||
# bit1-0: 01, Cs0width=x8
|
||||
# bit3-2: 10, Cs0size=1Gb
|
||||
# bit5-4: 01, Cs1width=x8
|
||||
# bit7-6: 10, Cs1size=1Gb
|
||||
# bit9-8: 00, Cs2width=nonexistent
|
||||
# bit11-10: 00, Cs2size =nonexistent
|
||||
# bit13-12: 00, Cs3width=nonexistent
|
||||
# bit15-14: 00, Cs3size =nonexistent
|
||||
# bit16: 0, Cs0AddrSel
|
||||
# bit17: 0, Cs1AddrSel
|
||||
# bit18: 0, Cs2AddrSel
|
||||
# bit19: 0, Cs3AddrSel
|
||||
# bit31-20: 0 required
|
||||
|
||||
DATA 0xFFD01414 0x00000000 # DDR Open Pages Control
|
||||
# bit0: 0, OpenPage enabled
|
||||
# bit31-1: 0 required
|
||||
|
||||
DATA 0xFFD01418 0x00000000 # DDR Operation
|
||||
# bit3-0: 0x0, DDR cmd
|
||||
# bit31-4: 0 required
|
||||
|
||||
DATA 0xFFD0141C 0x00000C52 # DDR Mode
|
||||
# bit2-0: 2, BurstLen=2 required
|
||||
# bit3: 0, BurstType=0 required
|
||||
# bit6-4: 4, CL=5
|
||||
# bit7: 0, TestMode=0 normal
|
||||
# bit8: 0, DLL reset=0 normal
|
||||
# bit11-9: 6, auto-precharge write recovery ????????????
|
||||
# bit12: 0, PD must be zero
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01420 0x00000040 # DDR Extended Mode
|
||||
# bit0: 0, DDR DLL enabled
|
||||
# bit1: 0, DDR drive strenght normal
|
||||
# bit2: 0, DDR ODT control lsd (disabled)
|
||||
# bit5-3: 000, required
|
||||
# bit6: 1, DDR ODT control msb, (disabled)
|
||||
# bit9-7: 000, required
|
||||
# bit10: 0, differential DQS enabled
|
||||
# bit11: 0, required
|
||||
# bit12: 0, DDR output buffer enabled
|
||||
# bit31-13: 0 required
|
||||
|
||||
DATA 0xFFD01424 0x0000F17F # DDR Controller Control High
|
||||
# bit2-0: 111, required
|
||||
# bit3 : 1 , MBUS Burst Chop disabled
|
||||
# bit6-4: 111, required
|
||||
# bit7 : 0
|
||||
# bit8 : 1 , add writepath sample stage, must be 1 for DDR freq >= 300MHz
|
||||
# bit9 : 0 , no half clock cycle addition to dataout
|
||||
# bit10 : 0 , 1/4 clock cycle skew enabled for addr/ctl signals
|
||||
# bit11 : 0 , 1/4 clock cycle skew disabled for write mesh
|
||||
# bit15-12: 1111 required
|
||||
# bit31-16: 0 required
|
||||
|
||||
DATA 0xFFD01428 0x00085520 # DDR2 ODT Read Timing (default values)
|
||||
DATA 0xFFD0147C 0x00008552 # DDR2 ODT Write Timing (default values)
|
||||
|
||||
DATA 0xFFD01500 0x00000000 # CS[0]n Base address to 0x0
|
||||
DATA 0xFFD01504 0x0FFFFFF1 # CS[0]n Size
|
||||
# bit0: 1, Window enabled
|
||||
# bit1: 0, Write Protect disabled
|
||||
# bit3-2: 00, CS0 hit selected
|
||||
# bit23-4: ones, required
|
||||
# bit31-24: 0x0F, Size (i.e. 256MB)
|
||||
|
||||
DATA 0xFFD01508 0x10000000 # CS[1]n Base address to 256Mb
|
||||
DATA 0xFFD0150C 0x0FFFFFF5 # CS[1]n Size 256Mb Window enabled for CS1
|
||||
|
||||
DATA 0xFFD01514 0x00000000 # CS[2]n Size, window disabled
|
||||
DATA 0xFFD0151C 0x00000000 # CS[3]n Size, window disabled
|
||||
|
||||
DATA 0xFFD01494 0x00030000 # DDR ODT Control (Low)
|
||||
DATA 0xFFD01498 0x00000000 # DDR ODT Control (High)
|
||||
# bit1-0: 00, ODT0 controlled by ODT Control (low) register above
|
||||
# bit3-2: 01, ODT1 active NEVER!
|
||||
# bit31-4: zero, required
|
||||
|
||||
DATA 0xFFD0149C 0x0000E803 # CPU ODT Control
|
||||
DATA 0xFFD01480 0x00000001 # DDR Initialization Control
|
||||
#bit0=1, enable DDR init upon this register write
|
||||
|
||||
# End of Header extension
|
||||
DATA 0x0 0x0
|
||||
15
u-boot/board/Marvell/gplugd/Kconfig
Normal file
15
u-boot/board/Marvell/gplugd/Kconfig
Normal file
@@ -0,0 +1,15 @@
|
||||
if TARGET_GPLUGD
|
||||
|
||||
config SYS_BOARD
|
||||
default "gplugd"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "Marvell"
|
||||
|
||||
config SYS_SOC
|
||||
default "armada100"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "gplugd"
|
||||
|
||||
endif
|
||||
6
u-boot/board/Marvell/gplugd/MAINTAINERS
Normal file
6
u-boot/board/Marvell/gplugd/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
GPLUGD BOARD
|
||||
M: Ajay Bhargav <ajay.bhargav@einfochips.com>
|
||||
S: Maintained
|
||||
F: board/Marvell/gplugd/
|
||||
F: include/configs/gplugd.h
|
||||
F: configs/gplugd_defconfig
|
||||
15
u-boot/board/Marvell/gplugd/Makefile
Normal file
15
u-boot/board/Marvell/gplugd/Makefile
Normal file
@@ -0,0 +1,15 @@
|
||||
#
|
||||
# (C) Copyright 2011
|
||||
# eInfochips Ltd. <www.einfochips.com>
|
||||
# Written-by: Ajay Bhargav <ajay.bhargav@einfochips.com>
|
||||
#
|
||||
# Based on Aspenite:
|
||||
# (C) Copyright 2010
|
||||
# Marvell Semiconductor <www.marvell.com>
|
||||
# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
# Contributor: Mahavir Jain <mjain@marvell.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := gplugd.o
|
||||
130
u-boot/board/Marvell/gplugd/gplugd.c
Normal file
130
u-boot/board/Marvell/gplugd/gplugd.c
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* (C) Copyright 2011
|
||||
* eInfochips Ltd. <www.einfochips.com>
|
||||
* Written-by: Ajay Bhargav <ajay.bhargav@einfochips.com>
|
||||
*
|
||||
* Based on Aspenite:
|
||||
* (C) Copyright 2010
|
||||
* Marvell Semiconductor <www.marvell.com>
|
||||
* Written-by: Prafulla Wadaskar <prafulla@marvell.com>
|
||||
* Contributor: Mahavir Jain <mjain@marvell.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <mvmfp.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/mfp.h>
|
||||
#include <asm/arch/armada100.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <miiphy.h>
|
||||
|
||||
#ifdef CONFIG_ARMADA100_FEC
|
||||
#include <net.h>
|
||||
#include <netdev.h>
|
||||
#endif /* CONFIG_ARMADA100_FEC */
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
u32 mfp_cfg[] = {
|
||||
/* I2C */
|
||||
MFP105_CI2C_SDA,
|
||||
MFP106_CI2C_SCL,
|
||||
|
||||
/* Enable Console on UART3 */
|
||||
MFPO8_UART3_TXD,
|
||||
MFPO9_UART3_RXD,
|
||||
|
||||
/* Ethernet PHY Interface */
|
||||
MFP086_ETH_TXCLK,
|
||||
MFP087_ETH_TXEN,
|
||||
MFP088_ETH_TXDQ3,
|
||||
MFP089_ETH_TXDQ2,
|
||||
MFP090_ETH_TXDQ1,
|
||||
MFP091_ETH_TXDQ0,
|
||||
MFP092_ETH_CRS,
|
||||
MFP093_ETH_COL,
|
||||
MFP094_ETH_RXCLK,
|
||||
MFP095_ETH_RXER,
|
||||
MFP096_ETH_RXDQ3,
|
||||
MFP097_ETH_RXDQ2,
|
||||
MFP098_ETH_RXDQ1,
|
||||
MFP099_ETH_RXDQ0,
|
||||
MFP100_ETH_MDC,
|
||||
MFP101_ETH_MDIO,
|
||||
MFP103_ETH_RXDV,
|
||||
|
||||
/* SSP2 */
|
||||
MFP107_SSP2_RXD,
|
||||
MFP108_SSP2_TXD,
|
||||
MFP110_SSP2_CS,
|
||||
MFP111_SSP2_CLK,
|
||||
|
||||
MFP_EOC /*End of configuration*/
|
||||
};
|
||||
/* configure MFP's */
|
||||
mfp_config(mfp_cfg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
struct armd1apb2_registers *apb2_regs =
|
||||
(struct armd1apb2_registers *)ARMD1_APBC2_BASE;
|
||||
|
||||
/* arch number of Board */
|
||||
gd->bd->bi_arch_number = MACH_TYPE_SHEEVAD;
|
||||
/* adress of boot parameters */
|
||||
gd->bd->bi_boot_params = armd1_sdram_base(0) + 0x100;
|
||||
/* Assert PHY_RST# */
|
||||
gpio_direction_output(CONFIG_SYS_GPIO_PHY_RST, GPIO_LOW);
|
||||
udelay(10);
|
||||
/* Deassert PHY_RST# */
|
||||
gpio_set_value(CONFIG_SYS_GPIO_PHY_RST, GPIO_HIGH);
|
||||
|
||||
/* Enable SSP2 clock */
|
||||
writel(SSP2_APBCLK | SSP2_FNCLK, &apb2_regs->ssp2_clkrst);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARMADA100_FEC
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
struct armd1apmu_registers *apmu_regs =
|
||||
(struct armd1apmu_registers *)ARMD1_APMU_BASE;
|
||||
|
||||
/* Enable clock of ethernet controller */
|
||||
writel(FE_CLK_RST | FE_CLK_ENA, &apmu_regs->fecrc);
|
||||
|
||||
return armada100_fec_register(ARMD1_FEC_BASE);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RESET_PHY_R
|
||||
/* Configure and initialize PHY chip 88E3015 */
|
||||
void reset_phy(void)
|
||||
{
|
||||
u16 phy_adr;
|
||||
const char *name = "armd-fec0";
|
||||
|
||||
if (miiphy_set_current_dev(name))
|
||||
return;
|
||||
|
||||
/* command to read PHY dev address */
|
||||
if (miiphy_read(name, 0xff, 0xff, &phy_adr)) {
|
||||
printf("Err..%s could not read PHY dev address\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Set Ethernet LED in TX blink mode */
|
||||
miiphy_write(name, phy_adr, PHY_LED_MAN_REG, 0x00);
|
||||
miiphy_write(name, phy_adr, PHY_LED_PAR_SEL_REG, PHY_LED_VAL);
|
||||
|
||||
/* reset the phy */
|
||||
miiphy_reset(name, phy_adr);
|
||||
debug("88E3015 Initialized on %s\n", name);
|
||||
}
|
||||
#endif /* CONFIG_RESET_PHY_R */
|
||||
#endif /* CONFIG_ARMADA100_FEC */
|
||||
12
u-boot/board/Marvell/guruplug/Kconfig
Normal file
12
u-boot/board/Marvell/guruplug/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
if TARGET_GURUPLUG
|
||||
|
||||
config SYS_BOARD
|
||||
default "guruplug"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "Marvell"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "guruplug"
|
||||
|
||||
endif
|
||||
6
u-boot/board/Marvell/guruplug/MAINTAINERS
Normal file
6
u-boot/board/Marvell/guruplug/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
||||
GURUPLUG BOARD
|
||||
M: Siddarth Gore <gores@marvell.com>
|
||||
S: Maintained
|
||||
F: board/Marvell/guruplug/
|
||||
F: include/configs/guruplug.h
|
||||
F: configs/guruplug_defconfig
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user