83d290c56f
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright (C) 2012 - 2013 Michal Simek <monstr@monstr.eu>
|
|
* Copyright (C) 2012 - 2017 Xilinx, Inc. All rights reserved.
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <asm/io.h>
|
|
#include <asm/arch/sys_proto.h>
|
|
#include <asm/arch/hardware.h>
|
|
|
|
#ifndef CONFIG_ZYNQ_DDRC_INIT
|
|
void zynq_ddrc_init(void) {}
|
|
#else
|
|
/* Control regsiter bitfield definitions */
|
|
#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_MASK 0xC
|
|
#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_SHIFT 2
|
|
#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_16BIT 1
|
|
|
|
/* ECC scrub regsiter definitions */
|
|
#define ZYNQ_DDRC_ECC_SCRUBREG_ECC_MODE_MASK 0x7
|
|
#define ZYNQ_DDRC_ECC_SCRUBREG_ECCMODE_SECDED 0x4
|
|
|
|
void zynq_ddrc_init(void)
|
|
{
|
|
u32 width, ecctype;
|
|
|
|
width = readl(&ddrc_base->ddrc_ctrl);
|
|
width = (width & ZYNQ_DDRC_CTRLREG_BUSWIDTH_MASK) >>
|
|
ZYNQ_DDRC_CTRLREG_BUSWIDTH_SHIFT;
|
|
ecctype = (readl(&ddrc_base->ecc_scrub) &
|
|
ZYNQ_DDRC_ECC_SCRUBREG_ECC_MODE_MASK);
|
|
|
|
/* ECC is enabled when memory is in 16bit mode and it is enabled */
|
|
if ((ecctype == ZYNQ_DDRC_ECC_SCRUBREG_ECCMODE_SECDED) &&
|
|
(width == ZYNQ_DDRC_CTRLREG_BUSWIDTH_16BIT)) {
|
|
puts("ECC enabled ");
|
|
/*
|
|
* Clear the first 1MB because it is not initialized from
|
|
* first stage bootloader. To get ECC to work all memory has
|
|
* been initialized by writing any value.
|
|
*/
|
|
/* cppcheck-suppress nullPointer */
|
|
memset((void *)0, 0, 1 * 1024 * 1024);
|
|
} else {
|
|
puts("ECC disabled ");
|
|
}
|
|
}
|
|
#endif
|