Merge git://git.denx.de/u-boot-marvell
- Misc dts files sync'ed with Linux version (Chris) - Orion watchdog fix (Chris) - kwbimage changed to also support Marvell bin_hdr binary (Chris) - Add DM support to enable CONFIG_BLK for sata_mv (Stefan) - Enable BLK on multiple platforms (Stefan) - Misc minor fixes to AXP theadorable board (Stefan) - Correct logic for DM_SCSI + unconverted drivers check (stefan) - Misc changes to kirkwood to enable DM_USB here (Chris) - Change ahci_mvebu to enable usage on A38x (Baruch) - Update the kirkwood entry in git-mailrc (Baruch) - Misc minor improvements (turris, documentation) (Baruch) - Enhance sata_mv to support Kirkwood as well (Michael) - Add wdt command (Michael) - Add Marvell integrated CPUs (MSYS) support with DB-XC3-24G4XG board support (Chris)
This commit is contained in:
@@ -379,7 +379,7 @@ int board_init(void)
|
||||
puts("Cannot find Armada 385 watchdog!\n");
|
||||
} else {
|
||||
puts("Enabling Armada 385 watchdog.\n");
|
||||
wdt_start(watchdog_dev, (u32) 25000000 * 120, 0);
|
||||
wdt_start(watchdog_dev, 120000, 0);
|
||||
}
|
||||
# endif
|
||||
|
||||
|
||||
1
board/Marvell/db-xc3-24g4xg/.gitignore
vendored
Normal file
1
board/Marvell/db-xc3-24g4xg/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
kwbimage.cfg
|
||||
7
board/Marvell/db-xc3-24g4xg/MAINTAINERS
Normal file
7
board/Marvell/db-xc3-24g4xg/MAINTAINERS
Normal file
@@ -0,0 +1,7 @@
|
||||
DB-XC3-24G4XG BOARD
|
||||
M: Chris Packham <chris.packham@alliedtelesis.co.nz>
|
||||
S: Maintained
|
||||
F: board/Marvell/db-xc3-24g4xg/
|
||||
F: include/configs/db-xc3-24g4xg.h
|
||||
F: configs/db-xc3-24g4xg_defconfig
|
||||
F: arch/arm/dts/armada-xp-db-xc3-24g4xg.dts
|
||||
14
board/Marvell/db-xc3-24g4xg/Makefile
Normal file
14
board/Marvell/db-xc3-24g4xg/Makefile
Normal file
@@ -0,0 +1,14 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Copyright (C) 2015 Stefan Roese <sr@denx.de>
|
||||
|
||||
obj-y := db-xc3-24g4xg.o
|
||||
extra-y := kwbimage.cfg
|
||||
|
||||
quiet_cmd_sed = SED $@
|
||||
cmd_sed = sed $(SEDFLAGS_$(@F)) $< >$(dir $<)$(@F)
|
||||
|
||||
SEDFLAGS_kwbimage.cfg =-e "s|^BINARY.*|BINARY $(srctree)/$(@D)/binary.0 0000005b 00000068|"
|
||||
$(src)/kwbimage.cfg: $(src)/kwbimage.cfg.in include/autoconf.mk \
|
||||
include/config/auto.conf
|
||||
$(call if_changed,sed)
|
||||
4
board/Marvell/db-xc3-24g4xg/README
Normal file
4
board/Marvell/db-xc3-24g4xg/README
Normal file
@@ -0,0 +1,4 @@
|
||||
To generate binary.0 from Marvell's bin_hdr.elf use the following command
|
||||
|
||||
arm-softfloat-linux-gnueabi-objcopy -S -O binary bin_hdr.elf \
|
||||
board/Marvell/db-xc3-24g4xg/binary.0
|
||||
11
board/Marvell/db-xc3-24g4xg/binary.0
Normal file
11
board/Marvell/db-xc3-24g4xg/binary.0
Normal file
@@ -0,0 +1,11 @@
|
||||
--------
|
||||
WARNING:
|
||||
--------
|
||||
This file should contain the bin_hdr generated by the original Marvell
|
||||
U-Boot implementation. As this is currently not included in this
|
||||
U-Boot version, we have added this placeholder, so that the U-Boot
|
||||
image can be generated without errors.
|
||||
|
||||
If you have a known to be working bin_hdr for your board, then you
|
||||
just need to replace this text file here with the binary header
|
||||
and recompile U-Boot.
|
||||
68
board/Marvell/db-xc3-24g4xg/db-xc3-24g4xg.c
Normal file
68
board/Marvell/db-xc3-24g4xg/db-xc3-24g4xg.c
Normal file
@@ -0,0 +1,68 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (C) 2015 Stefan Roese <sr@denx.de>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <i2c.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/soc.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* These values and defines are taken from the Marvell U-Boot version
|
||||
* "u-boot-2013.01-2016_T1.0.eng_drop_v6"
|
||||
*/
|
||||
#define DB_DX_AC3_GPP_OUT_ENA_LOW (~(BIT(0) | BIT(2) | BIT(3) | BIT(4) | BIT(6) | BIT(12) \
|
||||
| BIT(13) | BIT(16) | BIT(17) | BIT(20) | BIT(29) | BIT(30)))
|
||||
#define DB_DX_AC3_GPP_OUT_ENA_MID (~(0))
|
||||
#define DB_DX_AC3_GPP_OUT_VAL_LOW (BIT(0) | BIT(2) | BIT(3) | BIT(4) | BIT(6) | BIT(12) \
|
||||
| BIT(13) | BIT(16) | BIT(17) | BIT(20) | BIT(29) | BIT(30))
|
||||
#define DB_DX_AC3_GPP_OUT_VAL_MID 0x0
|
||||
#define DB_DX_AC3_GPP_POL_LOW 0x0
|
||||
#define DB_DX_AC3_GPP_POL_MID 0x0
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/* Configure MPP */
|
||||
writel(0x00142222, MVEBU_MPP_BASE + 0x00);
|
||||
writel(0x11122000, MVEBU_MPP_BASE + 0x04);
|
||||
writel(0x44444004, MVEBU_MPP_BASE + 0x08);
|
||||
writel(0x14444444, MVEBU_MPP_BASE + 0x0c);
|
||||
writel(0x00000001, MVEBU_MPP_BASE + 0x10);
|
||||
|
||||
/* Set GPP Out value */
|
||||
writel(DB_DX_AC3_GPP_OUT_VAL_LOW, MVEBU_GPIO0_BASE + 0x00);
|
||||
writel(DB_DX_AC3_GPP_OUT_VAL_MID, MVEBU_GPIO1_BASE + 0x00);
|
||||
|
||||
/* Set GPP Polarity */
|
||||
writel(DB_DX_AC3_GPP_POL_LOW, MVEBU_GPIO0_BASE + 0x0c);
|
||||
writel(DB_DX_AC3_GPP_POL_MID, MVEBU_GPIO1_BASE + 0x0c);
|
||||
|
||||
/* Set GPP Out Enable */
|
||||
writel(DB_DX_AC3_GPP_OUT_ENA_LOW, MVEBU_GPIO0_BASE + 0x04);
|
||||
writel(DB_DX_AC3_GPP_OUT_ENA_MID, MVEBU_GPIO1_BASE + 0x04);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* address of boot parameters */
|
||||
gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DISPLAY_BOARDINFO
|
||||
int checkboard(void)
|
||||
{
|
||||
puts("Board: " CONFIG_SYS_BOARD "\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
12
board/Marvell/db-xc3-24g4xg/kwbimage.cfg.in
Normal file
12
board/Marvell/db-xc3-24g4xg/kwbimage.cfg.in
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 board/Marvell/db-xc3-24g4xg/binary.0 0000005b 00000068
|
||||
@@ -115,14 +115,14 @@ MV_DRAM_MODES *ddr3_get_static_ddr_mode(void)
|
||||
return &ds414_ddr_modes[0];
|
||||
}
|
||||
|
||||
MV_BIN_SERDES_CFG *board_serdes_cfg_get(u8 pex_mode)
|
||||
MV_BIN_SERDES_CFG *board_serdes_cfg_get(void)
|
||||
{
|
||||
return &ds414_serdes_cfg[0];
|
||||
}
|
||||
|
||||
u8 board_sat_r_get(u8 dev_num, u8 reg)
|
||||
{
|
||||
return (0x1 << 1 | 1);
|
||||
return 0xf; /* All PEX ports support PCIe Gen2 */
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <command.h>
|
||||
#include <dm.h>
|
||||
#include <i2c.h>
|
||||
#include <wdt.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <linux/io.h>
|
||||
@@ -24,6 +25,10 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
#define CONFIG_NVS_LOCATION 0xf4800000
|
||||
#define CONFIG_NVS_SIZE (512 << 10)
|
||||
|
||||
#ifdef CONFIG_WATCHDOG
|
||||
static struct udevice *watchdog_dev;
|
||||
#endif
|
||||
|
||||
static struct serdes_map board_serdes_map[] = {
|
||||
{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0},
|
||||
{DEFAULT_SERDES, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0},
|
||||
@@ -75,6 +80,10 @@ struct mv_ddr_topology_map *mv_ddr_topology_map_get(void)
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
#ifdef CONFIG_WATCHDOG
|
||||
watchdog_dev = NULL;
|
||||
#endif
|
||||
|
||||
/* Configure MPP */
|
||||
writel(0x00001111, MVEBU_MPP_BASE + 0x00);
|
||||
writel(0x00000000, MVEBU_MPP_BASE + 0x04);
|
||||
@@ -88,6 +97,17 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void spl_board_init(void)
|
||||
{
|
||||
#ifdef CONFIG_WATCHDOG
|
||||
int ret;
|
||||
|
||||
ret = uclass_get_device(UCLASS_WDT, 0, &watchdog_dev);
|
||||
if (!ret)
|
||||
wdt_start(watchdog_dev, 120000, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* address of boot parameters */
|
||||
@@ -100,9 +120,37 @@ int board_init(void)
|
||||
/* DEV_READYn is not needed for NVS, ignore it when accessing CS1 */
|
||||
writel(0x00004001, MVEBU_DEV_BUS_BASE + 0xc8);
|
||||
|
||||
spl_board_init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void arch_preboot_os(void)
|
||||
{
|
||||
#ifdef CONFIG_WATCHDOG
|
||||
wdt_stop(watchdog_dev);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_WATCHDOG
|
||||
void watchdog_reset(void)
|
||||
{
|
||||
static ulong next_reset = 0;
|
||||
ulong now;
|
||||
|
||||
if (!watchdog_dev)
|
||||
return;
|
||||
|
||||
now = timer_get_us();
|
||||
|
||||
/* Do not reset the watchdog too often */
|
||||
if (now > next_reset) {
|
||||
wdt_reset(watchdog_dev);
|
||||
next_reset = now + 1000;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int led_7seg_init(unsigned int segments)
|
||||
{
|
||||
int node;
|
||||
|
||||
@@ -95,7 +95,7 @@ MV_DRAM_MODES *ddr3_get_static_ddr_mode(void)
|
||||
return &maxbcm_ddr_modes[0];
|
||||
}
|
||||
|
||||
MV_BIN_SERDES_CFG *board_serdes_cfg_get(u8 pex_mode)
|
||||
MV_BIN_SERDES_CFG *board_serdes_cfg_get(void)
|
||||
{
|
||||
return &maxbcm_serdes_cfg[0];
|
||||
}
|
||||
|
||||
@@ -17,6 +17,29 @@ $ sudo dd if=u-boot-spl.kwb of=/dev/sdX bs=512 seek=1
|
||||
Please use the correct device node for your setup instead
|
||||
of "/dev/sdX" here!
|
||||
|
||||
Install U-Boot on eMMC:
|
||||
-----------------------
|
||||
|
||||
The ROM loads the bootloader from eMMC first boot partition at offset 0. This
|
||||
is unlike load from SD card that is at offset 512. As a result, the offset of
|
||||
the main U-Boot image on the eMMC boot partition changes. Set
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR to 0x140 for SPL to load U-Boot from
|
||||
the correct location.
|
||||
|
||||
To make SPL load the main U-Boot image from the eMMC boot partition enable
|
||||
eMMC boot acknowledgement and boot partition with the following U-Boot
|
||||
command:
|
||||
|
||||
mmc partconf 0 1 1 0
|
||||
|
||||
Install U-Boot on eMMC boot partition from Linux running on Clearfog:
|
||||
|
||||
echo 0 > /sys/block/mmcblk0boot0/force_ro
|
||||
dd if=u-boot-spl.kwb of=/dev/mmcblk0boot0
|
||||
|
||||
Note that the SD card is not accessible when the Clearfog SOM has eMMC.
|
||||
Consider initial boot from UART (see below).
|
||||
|
||||
Boot selection:
|
||||
---------------
|
||||
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (C) 2015-2016 Stefan Roese <sr@denx.de>
|
||||
* Copyright (C) 2015-2019 Stefan Roese <sr@denx.de>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <console.h>
|
||||
#include <i2c.h>
|
||||
#include <pci.h>
|
||||
#if !defined(CONFIG_SPL_BUILD)
|
||||
#include <bootcount.h>
|
||||
#endif
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
@@ -42,6 +46,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
#define STM_I2C_BUS 1
|
||||
#define STM_I2C_ADDR 0x27
|
||||
#define REBOOT_DELAY 1000 /* reboot-delay in ms */
|
||||
#define ABORT_TIMEOUT 3000 /* 3 seconds reboot abort timeout */
|
||||
|
||||
/* DDR3 static configuration */
|
||||
static MV_DRAM_MC_INIT ddr3_theadorable[MV_MAX_DDR3_STATIC_SIZE] = {
|
||||
@@ -127,15 +132,15 @@ MV_DRAM_MODES *ddr3_get_static_ddr_mode(void)
|
||||
return &board_ddr_modes[0];
|
||||
}
|
||||
|
||||
MV_BIN_SERDES_CFG *board_serdes_cfg_get(u8 pex_mode)
|
||||
MV_BIN_SERDES_CFG *board_serdes_cfg_get(void)
|
||||
{
|
||||
return &theadorable_serdes_cfg[0];
|
||||
}
|
||||
|
||||
u8 board_sat_r_get(u8 dev_num, u8 reg)
|
||||
{
|
||||
/* Bit 0 enables PCI 2.0 link capabilities instead of PCI 1.x */
|
||||
return 0x01;
|
||||
/* Bit x enables PCI 2.0 link capabilities instead of PCI 1.x */
|
||||
return 0xe; /* PEX port 0 is PCIe Gen1, PEX port 1..3 PCIe Gen2 */
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
@@ -218,7 +223,7 @@ int board_eth_init(bd_t *bis)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_LATE_INIT
|
||||
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_BOARD_LATE_INIT)
|
||||
int board_late_init(void)
|
||||
{
|
||||
pci_dev_t bdf;
|
||||
@@ -232,6 +237,7 @@ int board_late_init(void)
|
||||
*/
|
||||
bdf = pci_find_device(PCI_VENDOR_ID_PLX, 0x8619, 0);
|
||||
if (bdf == -1) {
|
||||
unsigned long start_time = get_timer(0);
|
||||
u8 i2c_buf[8];
|
||||
int ret;
|
||||
|
||||
@@ -239,6 +245,28 @@ int board_late_init(void)
|
||||
bootcount = bootcount_load();
|
||||
printf("Failed to find PLX PEX-switch (bootcount=%ld)\n",
|
||||
bootcount);
|
||||
|
||||
/*
|
||||
* The user can exit this boot-loop in the error case by
|
||||
* hitting Ctrl-C. So wait some time for this key here.
|
||||
*/
|
||||
printf("Continue booting with Ctrl-C, otherwise rebooting\n");
|
||||
do {
|
||||
/* Handle control-c and timeouts */
|
||||
if (ctrlc()) {
|
||||
printf("PEX error boot-loop aborted!\n");
|
||||
return 0;
|
||||
}
|
||||
} while (get_timer(start_time) < ABORT_TIMEOUT);
|
||||
|
||||
|
||||
/*
|
||||
* At this stage the bootcounter has not been incremented
|
||||
* yet. We need to do this manually here to get an actually
|
||||
* working bootcounter in this error case.
|
||||
*/
|
||||
bootcount_inc();
|
||||
|
||||
if (bootcount > PEX_SWITCH_NOT_FOUNT_LIMIT) {
|
||||
printf("Issuing power-switch via uC!\n");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user