mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-13 08:27:23 +00:00
Merge branch 'u-boot-ti/master' into 'u-boot-arm/master'
This commit is contained in:
commit
b1cdd8baa1
82 changed files with 2039 additions and 1299 deletions
6
Makefile
6
Makefile
|
@ -915,6 +915,12 @@ OBJCOPYFLAGS_u-boot-spi.gph = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
|
||||||
u-boot-spi.gph: spl/u-boot-spl.gph u-boot.img FORCE
|
u-boot-spi.gph: spl/u-boot-spl.gph u-boot.img FORCE
|
||||||
$(call if_changed,pad_cat)
|
$(call if_changed,pad_cat)
|
||||||
|
|
||||||
|
MKIMAGEFLAGS_u-boot-nand.gph = -A $(ARCH) -T gpimage -C none \
|
||||||
|
-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -n U-Boot
|
||||||
|
u-boot-nand.gph: u-boot.bin FORCE
|
||||||
|
$(call if_changed,mkimage)
|
||||||
|
@dd if=/dev/zero bs=8 count=1 2>/dev/null >> $@
|
||||||
|
|
||||||
ifneq ($(CONFIG_SUNXI),)
|
ifneq ($(CONFIG_SUNXI),)
|
||||||
OBJCOPYFLAGS_u-boot-sunxi-with-spl.bin = -I binary -O binary \
|
OBJCOPYFLAGS_u-boot-sunxi-with-spl.bin = -I binary -O binary \
|
||||||
--pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff
|
--pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff
|
||||||
|
|
|
@ -8,9 +8,12 @@
|
||||||
obj-y += init.o
|
obj-y += init.o
|
||||||
obj-y += psc.o
|
obj-y += psc.o
|
||||||
obj-y += clock.o
|
obj-y += clock.o
|
||||||
|
obj-$(CONFIG_SOC_K2HK) += clock-k2hk.o
|
||||||
|
obj-$(CONFIG_SOC_K2E) += clock-k2e.o
|
||||||
obj-y += cmd_clock.o
|
obj-y += cmd_clock.o
|
||||||
obj-y += cmd_mon.o
|
obj-y += cmd_mon.o
|
||||||
obj-y += keystone_nav.o
|
obj-$(CONFIG_DRIVER_TI_KEYSTONE_NET) += keystone_nav.o
|
||||||
obj-y += msmc.o
|
obj-y += msmc.o
|
||||||
obj-$(CONFIG_SPL_BUILD) += spl.o
|
obj-$(CONFIG_SPL_BUILD) += spl.o
|
||||||
obj-y += ddr3.o
|
obj-y += ddr3.o
|
||||||
|
obj-y += keystone.o
|
||||||
|
|
101
arch/arm/cpu/armv7/keystone/clock-k2e.c
Normal file
101
arch/arm/cpu/armv7/keystone/clock-k2e.c
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
* Keystone2: get clk rate for K2E
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/clock_defs.h>
|
||||||
|
|
||||||
|
const struct keystone_pll_regs keystone_pll_regs[] = {
|
||||||
|
[CORE_PLL] = {KS2_MAINPLLCTL0, KS2_MAINPLLCTL1},
|
||||||
|
[PASS_PLL] = {KS2_PASSPLLCTL0, KS2_PASSPLLCTL1},
|
||||||
|
[DDR3_PLL] = {KS2_DDR3APLLCTL0, KS2_DDR3APLLCTL1},
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pll_freq_get - get pll frequency
|
||||||
|
* Fout = Fref * NF(mult) / NR(prediv) / OD
|
||||||
|
* @pll: pll identifier
|
||||||
|
*/
|
||||||
|
static unsigned long pll_freq_get(int pll)
|
||||||
|
{
|
||||||
|
unsigned long mult = 1, prediv = 1, output_div = 2;
|
||||||
|
unsigned long ret;
|
||||||
|
u32 tmp, reg;
|
||||||
|
|
||||||
|
if (pll == CORE_PLL) {
|
||||||
|
ret = external_clk[sys_clk];
|
||||||
|
if (pllctl_reg_read(pll, ctl) & PLLCTL_PLLEN) {
|
||||||
|
/* PLL mode */
|
||||||
|
tmp = __raw_readl(KS2_MAINPLLCTL0);
|
||||||
|
prediv = (tmp & PLL_DIV_MASK) + 1;
|
||||||
|
mult = (((tmp & PLLM_MULT_HI_SMASK) >> 6) |
|
||||||
|
(pllctl_reg_read(pll, mult) &
|
||||||
|
PLLM_MULT_LO_MASK)) + 1;
|
||||||
|
output_div = ((pllctl_reg_read(pll, secctl) >>
|
||||||
|
PLL_CLKOD_SHIFT) & PLL_CLKOD_MASK) + 1;
|
||||||
|
|
||||||
|
ret = ret / prediv / output_div * mult;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (pll) {
|
||||||
|
case PASS_PLL:
|
||||||
|
ret = external_clk[pa_clk];
|
||||||
|
reg = KS2_PASSPLLCTL0;
|
||||||
|
break;
|
||||||
|
case DDR3_PLL:
|
||||||
|
ret = external_clk[ddr3_clk];
|
||||||
|
reg = KS2_DDR3APLLCTL0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = __raw_readl(reg);
|
||||||
|
|
||||||
|
if (!(tmp & PLLCTL_BYPASS)) {
|
||||||
|
/* Bypass disabled */
|
||||||
|
prediv = (tmp & PLL_DIV_MASK) + 1;
|
||||||
|
mult = ((tmp >> PLL_MULT_SHIFT) & PLL_MULT_MASK) + 1;
|
||||||
|
output_div = ((tmp >> PLL_CLKOD_SHIFT) &
|
||||||
|
PLL_CLKOD_MASK) + 1;
|
||||||
|
ret = ((ret / prediv) * mult) / output_div;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long clk_get_rate(unsigned int clk)
|
||||||
|
{
|
||||||
|
switch (clk) {
|
||||||
|
case core_pll_clk: return pll_freq_get(CORE_PLL);
|
||||||
|
case pass_pll_clk: return pll_freq_get(PASS_PLL);
|
||||||
|
case ddr3_pll_clk: return pll_freq_get(DDR3_PLL);
|
||||||
|
case sys_clk0_1_clk:
|
||||||
|
case sys_clk0_clk: return pll_freq_get(CORE_PLL) / pll0div_read(1);
|
||||||
|
case sys_clk1_clk: return pll_freq_get(CORE_PLL) / pll0div_read(2);
|
||||||
|
case sys_clk2_clk: return pll_freq_get(CORE_PLL) / pll0div_read(3);
|
||||||
|
case sys_clk3_clk: return pll_freq_get(CORE_PLL) / pll0div_read(4);
|
||||||
|
case sys_clk0_2_clk: return clk_get_rate(sys_clk0_clk) / 2;
|
||||||
|
case sys_clk0_3_clk: return clk_get_rate(sys_clk0_clk) / 3;
|
||||||
|
case sys_clk0_4_clk: return clk_get_rate(sys_clk0_clk) / 4;
|
||||||
|
case sys_clk0_6_clk: return clk_get_rate(sys_clk0_clk) / 6;
|
||||||
|
case sys_clk0_8_clk: return clk_get_rate(sys_clk0_clk) / 8;
|
||||||
|
case sys_clk0_12_clk: return clk_get_rate(sys_clk0_clk) / 12;
|
||||||
|
case sys_clk0_24_clk: return clk_get_rate(sys_clk0_clk) / 24;
|
||||||
|
case sys_clk1_3_clk: return clk_get_rate(sys_clk1_clk) / 3;
|
||||||
|
case sys_clk1_4_clk: return clk_get_rate(sys_clk1_clk) / 4;
|
||||||
|
case sys_clk1_6_clk: return clk_get_rate(sys_clk1_clk) / 6;
|
||||||
|
case sys_clk1_12_clk: return clk_get_rate(sys_clk1_clk) / 12;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
113
arch/arm/cpu/armv7/keystone/clock-k2hk.c
Normal file
113
arch/arm/cpu/armv7/keystone/clock-k2hk.c
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Keystone2: get clk rate for K2HK
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/clock_defs.h>
|
||||||
|
|
||||||
|
const struct keystone_pll_regs keystone_pll_regs[] = {
|
||||||
|
[CORE_PLL] = {KS2_MAINPLLCTL0, KS2_MAINPLLCTL1},
|
||||||
|
[PASS_PLL] = {KS2_PASSPLLCTL0, KS2_PASSPLLCTL1},
|
||||||
|
[TETRIS_PLL] = {KS2_ARMPLLCTL0, KS2_ARMPLLCTL1},
|
||||||
|
[DDR3A_PLL] = {KS2_DDR3APLLCTL0, KS2_DDR3APLLCTL1},
|
||||||
|
[DDR3B_PLL] = {KS2_DDR3BPLLCTL0, KS2_DDR3BPLLCTL1},
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pll_freq_get - get pll frequency
|
||||||
|
* Fout = Fref * NF(mult) / NR(prediv) / OD
|
||||||
|
* @pll: pll identifier
|
||||||
|
*/
|
||||||
|
static unsigned long pll_freq_get(int pll)
|
||||||
|
{
|
||||||
|
unsigned long mult = 1, prediv = 1, output_div = 2;
|
||||||
|
unsigned long ret;
|
||||||
|
u32 tmp, reg;
|
||||||
|
|
||||||
|
if (pll == CORE_PLL) {
|
||||||
|
ret = external_clk[sys_clk];
|
||||||
|
if (pllctl_reg_read(pll, ctl) & PLLCTL_PLLEN) {
|
||||||
|
/* PLL mode */
|
||||||
|
tmp = __raw_readl(KS2_MAINPLLCTL0);
|
||||||
|
prediv = (tmp & PLL_DIV_MASK) + 1;
|
||||||
|
mult = (((tmp & PLLM_MULT_HI_SMASK) >> 6) |
|
||||||
|
(pllctl_reg_read(pll, mult) &
|
||||||
|
PLLM_MULT_LO_MASK)) + 1;
|
||||||
|
output_div = ((pllctl_reg_read(pll, secctl) >>
|
||||||
|
PLL_CLKOD_SHIFT) & PLL_CLKOD_MASK) + 1;
|
||||||
|
|
||||||
|
ret = ret / prediv / output_div * mult;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (pll) {
|
||||||
|
case PASS_PLL:
|
||||||
|
ret = external_clk[pa_clk];
|
||||||
|
reg = KS2_PASSPLLCTL0;
|
||||||
|
break;
|
||||||
|
case TETRIS_PLL:
|
||||||
|
ret = external_clk[tetris_clk];
|
||||||
|
reg = KS2_ARMPLLCTL0;
|
||||||
|
break;
|
||||||
|
case DDR3A_PLL:
|
||||||
|
ret = external_clk[ddr3a_clk];
|
||||||
|
reg = KS2_DDR3APLLCTL0;
|
||||||
|
break;
|
||||||
|
case DDR3B_PLL:
|
||||||
|
ret = external_clk[ddr3b_clk];
|
||||||
|
reg = KS2_DDR3BPLLCTL0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = __raw_readl(reg);
|
||||||
|
|
||||||
|
if (!(tmp & PLLCTL_BYPASS)) {
|
||||||
|
/* Bypass disabled */
|
||||||
|
prediv = (tmp & PLL_DIV_MASK) + 1;
|
||||||
|
mult = ((tmp >> PLL_MULT_SHIFT) & PLL_MULT_MASK) + 1;
|
||||||
|
output_div = ((tmp >> PLL_CLKOD_SHIFT) &
|
||||||
|
PLL_CLKOD_MASK) + 1;
|
||||||
|
ret = ((ret / prediv) * mult) / output_div;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long clk_get_rate(unsigned int clk)
|
||||||
|
{
|
||||||
|
switch (clk) {
|
||||||
|
case core_pll_clk: return pll_freq_get(CORE_PLL);
|
||||||
|
case pass_pll_clk: return pll_freq_get(PASS_PLL);
|
||||||
|
case tetris_pll_clk: return pll_freq_get(TETRIS_PLL);
|
||||||
|
case ddr3a_pll_clk: return pll_freq_get(DDR3A_PLL);
|
||||||
|
case ddr3b_pll_clk: return pll_freq_get(DDR3B_PLL);
|
||||||
|
case sys_clk0_1_clk:
|
||||||
|
case sys_clk0_clk: return pll_freq_get(CORE_PLL) / pll0div_read(1);
|
||||||
|
case sys_clk1_clk: return pll_freq_get(CORE_PLL) / pll0div_read(2);
|
||||||
|
case sys_clk2_clk: return pll_freq_get(CORE_PLL) / pll0div_read(3);
|
||||||
|
case sys_clk3_clk: return pll_freq_get(CORE_PLL) / pll0div_read(4);
|
||||||
|
case sys_clk0_2_clk: return clk_get_rate(sys_clk0_clk) / 2;
|
||||||
|
case sys_clk0_3_clk: return clk_get_rate(sys_clk0_clk) / 3;
|
||||||
|
case sys_clk0_4_clk: return clk_get_rate(sys_clk0_clk) / 4;
|
||||||
|
case sys_clk0_6_clk: return clk_get_rate(sys_clk0_clk) / 6;
|
||||||
|
case sys_clk0_8_clk: return clk_get_rate(sys_clk0_clk) / 8;
|
||||||
|
case sys_clk0_12_clk: return clk_get_rate(sys_clk0_clk) / 12;
|
||||||
|
case sys_clk0_24_clk: return clk_get_rate(sys_clk0_clk) / 24;
|
||||||
|
case sys_clk1_3_clk: return clk_get_rate(sys_clk1_clk) / 3;
|
||||||
|
case sys_clk1_4_clk: return clk_get_rate(sys_clk1_clk) / 4;
|
||||||
|
case sys_clk1_6_clk: return clk_get_rate(sys_clk1_clk) / 6;
|
||||||
|
case sys_clk1_12_clk: return clk_get_rate(sys_clk1_clk) / 12;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -8,9 +8,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm-generic/errno.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/processor.h>
|
|
||||||
#include <asm/arch/clock.h>
|
#include <asm/arch/clock.h>
|
||||||
#include <asm/arch/clock_defs.h>
|
#include <asm/arch/clock_defs.h>
|
||||||
|
|
||||||
|
@ -24,106 +21,6 @@ static void wait_for_completion(const struct pll_init_data *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct pll_regs {
|
|
||||||
u32 reg0, reg1;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct pll_regs pll_regs[] = {
|
|
||||||
[CORE_PLL] = { K2HK_MAINPLLCTL0, K2HK_MAINPLLCTL1},
|
|
||||||
[PASS_PLL] = { K2HK_PASSPLLCTL0, K2HK_PASSPLLCTL1},
|
|
||||||
[TETRIS_PLL] = { K2HK_ARMPLLCTL0, K2HK_ARMPLLCTL1},
|
|
||||||
[DDR3A_PLL] = { K2HK_DDR3APLLCTL0, K2HK_DDR3APLLCTL1},
|
|
||||||
[DDR3B_PLL] = { K2HK_DDR3BPLLCTL0, K2HK_DDR3BPLLCTL1},
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Fout = Fref * NF(mult) / NR(prediv) / OD */
|
|
||||||
static unsigned long pll_freq_get(int pll)
|
|
||||||
{
|
|
||||||
unsigned long mult = 1, prediv = 1, output_div = 2;
|
|
||||||
unsigned long ret;
|
|
||||||
u32 tmp, reg;
|
|
||||||
|
|
||||||
if (pll == CORE_PLL) {
|
|
||||||
ret = external_clk[sys_clk];
|
|
||||||
if (pllctl_reg_read(pll, ctl) & PLLCTL_PLLEN) {
|
|
||||||
/* PLL mode */
|
|
||||||
tmp = __raw_readl(K2HK_MAINPLLCTL0);
|
|
||||||
prediv = (tmp & PLL_DIV_MASK) + 1;
|
|
||||||
mult = (((tmp & PLLM_MULT_HI_SMASK) >> 6) |
|
|
||||||
(pllctl_reg_read(pll, mult) &
|
|
||||||
PLLM_MULT_LO_MASK)) + 1;
|
|
||||||
output_div = ((pllctl_reg_read(pll, secctl) >>
|
|
||||||
PLL_CLKOD_SHIFT) & PLL_CLKOD_MASK) + 1;
|
|
||||||
|
|
||||||
ret = ret / prediv / output_div * mult;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (pll) {
|
|
||||||
case PASS_PLL:
|
|
||||||
ret = external_clk[pa_clk];
|
|
||||||
reg = K2HK_PASSPLLCTL0;
|
|
||||||
break;
|
|
||||||
case TETRIS_PLL:
|
|
||||||
ret = external_clk[tetris_clk];
|
|
||||||
reg = K2HK_ARMPLLCTL0;
|
|
||||||
break;
|
|
||||||
case DDR3A_PLL:
|
|
||||||
ret = external_clk[ddr3a_clk];
|
|
||||||
reg = K2HK_DDR3APLLCTL0;
|
|
||||||
break;
|
|
||||||
case DDR3B_PLL:
|
|
||||||
ret = external_clk[ddr3b_clk];
|
|
||||||
reg = K2HK_DDR3BPLLCTL0;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp = __raw_readl(reg);
|
|
||||||
|
|
||||||
if (!(tmp & PLLCTL_BYPASS)) {
|
|
||||||
/* Bypass disabled */
|
|
||||||
prediv = (tmp & PLL_DIV_MASK) + 1;
|
|
||||||
mult = ((tmp >> PLL_MULT_SHIFT) & PLL_MULT_MASK) + 1;
|
|
||||||
output_div = ((tmp >> PLL_CLKOD_SHIFT) &
|
|
||||||
PLL_CLKOD_MASK) + 1;
|
|
||||||
ret = ((ret / prediv) * mult) / output_div;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long clk_get_rate(unsigned int clk)
|
|
||||||
{
|
|
||||||
switch (clk) {
|
|
||||||
case core_pll_clk: return pll_freq_get(CORE_PLL);
|
|
||||||
case pass_pll_clk: return pll_freq_get(PASS_PLL);
|
|
||||||
case tetris_pll_clk: return pll_freq_get(TETRIS_PLL);
|
|
||||||
case ddr3a_pll_clk: return pll_freq_get(DDR3A_PLL);
|
|
||||||
case ddr3b_pll_clk: return pll_freq_get(DDR3B_PLL);
|
|
||||||
case sys_clk0_1_clk:
|
|
||||||
case sys_clk0_clk: return pll_freq_get(CORE_PLL) / pll0div_read(1);
|
|
||||||
case sys_clk1_clk: return pll_freq_get(CORE_PLL) / pll0div_read(2);
|
|
||||||
case sys_clk2_clk: return pll_freq_get(CORE_PLL) / pll0div_read(3);
|
|
||||||
case sys_clk3_clk: return pll_freq_get(CORE_PLL) / pll0div_read(4);
|
|
||||||
case sys_clk0_2_clk: return clk_get_rate(sys_clk0_clk) / 2;
|
|
||||||
case sys_clk0_3_clk: return clk_get_rate(sys_clk0_clk) / 3;
|
|
||||||
case sys_clk0_4_clk: return clk_get_rate(sys_clk0_clk) / 4;
|
|
||||||
case sys_clk0_6_clk: return clk_get_rate(sys_clk0_clk) / 6;
|
|
||||||
case sys_clk0_8_clk: return clk_get_rate(sys_clk0_clk) / 8;
|
|
||||||
case sys_clk0_12_clk: return clk_get_rate(sys_clk0_clk) / 12;
|
|
||||||
case sys_clk0_24_clk: return clk_get_rate(sys_clk0_clk) / 24;
|
|
||||||
case sys_clk1_3_clk: return clk_get_rate(sys_clk1_clk) / 3;
|
|
||||||
case sys_clk1_4_clk: return clk_get_rate(sys_clk1_clk) / 4;
|
|
||||||
case sys_clk1_6_clk: return clk_get_rate(sys_clk1_clk) / 6;
|
|
||||||
case sys_clk1_12_clk: return clk_get_rate(sys_clk1_clk) / 12;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_pll(const struct pll_init_data *data)
|
void init_pll(const struct pll_init_data *data)
|
||||||
{
|
{
|
||||||
u32 tmp, tmp_ctl, pllm, plld, pllod, bwadj;
|
u32 tmp, tmp_ctl, pllm, plld, pllod, bwadj;
|
||||||
|
@ -139,7 +36,7 @@ void init_pll(const struct pll_init_data *data)
|
||||||
tmp = pllctl_reg_read(data->pll, secctl);
|
tmp = pllctl_reg_read(data->pll, secctl);
|
||||||
|
|
||||||
if (tmp & (PLLCTL_BYPASS)) {
|
if (tmp & (PLLCTL_BYPASS)) {
|
||||||
setbits_le32(pll_regs[data->pll].reg1,
|
setbits_le32(keystone_pll_regs[data->pll].reg1,
|
||||||
BIT(MAIN_ENSAT_OFFSET));
|
BIT(MAIN_ENSAT_OFFSET));
|
||||||
|
|
||||||
pllctl_reg_clrbits(data->pll, ctl, PLLCTL_PLLEN |
|
pllctl_reg_clrbits(data->pll, ctl, PLLCTL_PLLEN |
|
||||||
|
@ -159,21 +56,24 @@ void init_pll(const struct pll_init_data *data)
|
||||||
|
|
||||||
pllctl_reg_write(data->pll, mult, pllm & PLLM_MULT_LO_MASK);
|
pllctl_reg_write(data->pll, mult, pllm & PLLM_MULT_LO_MASK);
|
||||||
|
|
||||||
clrsetbits_le32(pll_regs[data->pll].reg0, PLLM_MULT_HI_SMASK,
|
clrsetbits_le32(keystone_pll_regs[data->pll].reg0,
|
||||||
(pllm << 6));
|
PLLM_MULT_HI_SMASK, (pllm << 6));
|
||||||
|
|
||||||
/* Set the BWADJ (12 bit field) */
|
/* Set the BWADJ (12 bit field) */
|
||||||
tmp_ctl = pllm >> 1; /* Divide the pllm by 2 */
|
tmp_ctl = pllm >> 1; /* Divide the pllm by 2 */
|
||||||
clrsetbits_le32(pll_regs[data->pll].reg0, PLL_BWADJ_LO_SMASK,
|
clrsetbits_le32(keystone_pll_regs[data->pll].reg0,
|
||||||
|
PLL_BWADJ_LO_SMASK,
|
||||||
(tmp_ctl << PLL_BWADJ_LO_SHIFT));
|
(tmp_ctl << PLL_BWADJ_LO_SHIFT));
|
||||||
clrsetbits_le32(pll_regs[data->pll].reg1, PLL_BWADJ_HI_MASK,
|
clrsetbits_le32(keystone_pll_regs[data->pll].reg1,
|
||||||
|
PLL_BWADJ_HI_MASK,
|
||||||
(tmp_ctl >> 8));
|
(tmp_ctl >> 8));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the pll divider (6 bit field) *
|
* Set the pll divider (6 bit field) *
|
||||||
* PLLD[5:0] is located in MAINPLLCTL0
|
* PLLD[5:0] is located in MAINPLLCTL0
|
||||||
*/
|
*/
|
||||||
clrsetbits_le32(pll_regs[data->pll].reg0, PLL_DIV_MASK, plld);
|
clrsetbits_le32(keystone_pll_regs[data->pll].reg0,
|
||||||
|
PLL_DIV_MASK, plld);
|
||||||
|
|
||||||
/* Set the OUTPUT DIVIDE (4 bit field) in SECCTL */
|
/* Set the OUTPUT DIVIDE (4 bit field) in SECCTL */
|
||||||
pllctl_reg_rmw(data->pll, secctl, PLL_CLKOD_SMASK,
|
pllctl_reg_rmw(data->pll, secctl, PLL_CLKOD_SMASK,
|
||||||
|
@ -206,17 +106,18 @@ void init_pll(const struct pll_init_data *data)
|
||||||
|
|
||||||
tmp = pllctl_reg_setbits(data->pll, ctl, PLLCTL_PLLEN);
|
tmp = pllctl_reg_setbits(data->pll, ctl, PLLCTL_PLLEN);
|
||||||
|
|
||||||
|
#ifndef CONFIG_SOC_K2E
|
||||||
} else if (data->pll == TETRIS_PLL) {
|
} else if (data->pll == TETRIS_PLL) {
|
||||||
bwadj = pllm >> 1;
|
bwadj = pllm >> 1;
|
||||||
/* 1.5 Set PLLCTL0[BYPASS] =1 (enable bypass), */
|
/* 1.5 Set PLLCTL0[BYPASS] =1 (enable bypass), */
|
||||||
setbits_le32(pll_regs[data->pll].reg0, PLLCTL_BYPASS);
|
setbits_le32(keystone_pll_regs[data->pll].reg0, PLLCTL_BYPASS);
|
||||||
/*
|
/*
|
||||||
* Set CHIPMISCCTL1[13] = 0 (enable glitchfree bypass)
|
* Set CHIPMISCCTL1[13] = 0 (enable glitchfree bypass)
|
||||||
* only applicable for Kepler
|
* only applicable for Kepler
|
||||||
*/
|
*/
|
||||||
clrbits_le32(K2HK_MISC_CTRL, ARM_PLL_EN);
|
clrbits_le32(KS2_MISC_CTRL, KS2_ARM_PLL_EN);
|
||||||
/* 2 In PLLCTL1, write PLLRST = 1 (PLL is reset) */
|
/* 2 In PLLCTL1, write PLLRST = 1 (PLL is reset) */
|
||||||
setbits_le32(pll_regs[data->pll].reg1 ,
|
setbits_le32(keystone_pll_regs[data->pll].reg1 ,
|
||||||
PLL_PLLRST | PLLCTL_ENSAT);
|
PLL_PLLRST | PLLCTL_ENSAT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -229,13 +130,13 @@ void init_pll(const struct pll_init_data *data)
|
||||||
(pllm << 6) |
|
(pllm << 6) |
|
||||||
(plld & PLL_DIV_MASK) |
|
(plld & PLL_DIV_MASK) |
|
||||||
(pllod << PLL_CLKOD_SHIFT) | PLLCTL_BYPASS;
|
(pllod << PLL_CLKOD_SHIFT) | PLLCTL_BYPASS;
|
||||||
__raw_writel(tmp, pll_regs[data->pll].reg0);
|
__raw_writel(tmp, keystone_pll_regs[data->pll].reg0);
|
||||||
|
|
||||||
/* Set BWADJ[11:8] bits */
|
/* Set BWADJ[11:8] bits */
|
||||||
tmp = __raw_readl(pll_regs[data->pll].reg1);
|
tmp = __raw_readl(keystone_pll_regs[data->pll].reg1);
|
||||||
tmp &= ~(PLL_BWADJ_HI_MASK);
|
tmp &= ~(PLL_BWADJ_HI_MASK);
|
||||||
tmp |= ((bwadj>>8) & PLL_BWADJ_HI_MASK);
|
tmp |= ((bwadj>>8) & PLL_BWADJ_HI_MASK);
|
||||||
__raw_writel(tmp, pll_regs[data->pll].reg1);
|
__raw_writel(tmp, keystone_pll_regs[data->pll].reg1);
|
||||||
/*
|
/*
|
||||||
* 5 Wait for at least 5 us based on the reference
|
* 5 Wait for at least 5 us based on the reference
|
||||||
* clock (PLL reset time)
|
* clock (PLL reset time)
|
||||||
|
@ -243,26 +144,27 @@ void init_pll(const struct pll_init_data *data)
|
||||||
sdelay(21000); /* Wait for a minimum of 7 us*/
|
sdelay(21000); /* Wait for a minimum of 7 us*/
|
||||||
|
|
||||||
/* 6 In PLLCTL1, write PLLRST = 0 (PLL reset is released) */
|
/* 6 In PLLCTL1, write PLLRST = 0 (PLL reset is released) */
|
||||||
clrbits_le32(pll_regs[data->pll].reg1, PLL_PLLRST);
|
clrbits_le32(keystone_pll_regs[data->pll].reg1, PLL_PLLRST);
|
||||||
/*
|
/*
|
||||||
* 7 Wait for at least 500 * REFCLK cycles * (PLLD + 1)
|
* 7 Wait for at least 500 * REFCLK cycles * (PLLD + 1)
|
||||||
* (PLL lock time)
|
* (PLL lock time)
|
||||||
*/
|
*/
|
||||||
sdelay(105000);
|
sdelay(105000);
|
||||||
/* 8 disable bypass */
|
/* 8 disable bypass */
|
||||||
clrbits_le32(pll_regs[data->pll].reg0, PLLCTL_BYPASS);
|
clrbits_le32(keystone_pll_regs[data->pll].reg0, PLLCTL_BYPASS);
|
||||||
/*
|
/*
|
||||||
* 9 Set CHIPMISCCTL1[13] = 1 (disable glitchfree bypass)
|
* 9 Set CHIPMISCCTL1[13] = 1 (disable glitchfree bypass)
|
||||||
* only applicable for Kepler
|
* only applicable for Kepler
|
||||||
*/
|
*/
|
||||||
setbits_le32(K2HK_MISC_CTRL, ARM_PLL_EN);
|
setbits_le32(KS2_MISC_CTRL, KS2_ARM_PLL_EN);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
setbits_le32(pll_regs[data->pll].reg1, PLLCTL_ENSAT);
|
setbits_le32(keystone_pll_regs[data->pll].reg1, PLLCTL_ENSAT);
|
||||||
/*
|
/*
|
||||||
* process keeps state of Bypass bit while programming
|
* process keeps state of Bypass bit while programming
|
||||||
* all other DDR PLL settings
|
* all other DDR PLL settings
|
||||||
*/
|
*/
|
||||||
tmp = __raw_readl(pll_regs[data->pll].reg0);
|
tmp = __raw_readl(keystone_pll_regs[data->pll].reg0);
|
||||||
tmp &= PLLCTL_BYPASS; /* clear everything except Bypass */
|
tmp &= PLLCTL_BYPASS; /* clear everything except Bypass */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -274,10 +176,10 @@ void init_pll(const struct pll_init_data *data)
|
||||||
(pllm << PLL_MULT_SHIFT) |
|
(pllm << PLL_MULT_SHIFT) |
|
||||||
(plld & PLL_DIV_MASK) |
|
(plld & PLL_DIV_MASK) |
|
||||||
(pllod << PLL_CLKOD_SHIFT);
|
(pllod << PLL_CLKOD_SHIFT);
|
||||||
__raw_writel(tmp, pll_regs[data->pll].reg0);
|
__raw_writel(tmp, keystone_pll_regs[data->pll].reg0);
|
||||||
|
|
||||||
/* Set BWADJ[11:8] bits */
|
/* Set BWADJ[11:8] bits */
|
||||||
tmp = __raw_readl(pll_regs[data->pll].reg1);
|
tmp = __raw_readl(keystone_pll_regs[data->pll].reg1);
|
||||||
tmp &= ~(PLL_BWADJ_HI_MASK);
|
tmp &= ~(PLL_BWADJ_HI_MASK);
|
||||||
tmp |= ((bwadj >> 8) & PLL_BWADJ_HI_MASK);
|
tmp |= ((bwadj >> 8) & PLL_BWADJ_HI_MASK);
|
||||||
|
|
||||||
|
@ -285,20 +187,20 @@ void init_pll(const struct pll_init_data *data)
|
||||||
if (data->pll == PASS_PLL)
|
if (data->pll == PASS_PLL)
|
||||||
tmp |= PLLCTL_PAPLL;
|
tmp |= PLLCTL_PAPLL;
|
||||||
|
|
||||||
__raw_writel(tmp, pll_regs[data->pll].reg1);
|
__raw_writel(tmp, keystone_pll_regs[data->pll].reg1);
|
||||||
|
|
||||||
/* Reset bit: bit 14 for both DDR3 & PASS PLL */
|
/* Reset bit: bit 14 for both DDR3 & PASS PLL */
|
||||||
tmp = PLL_PLLRST;
|
tmp = PLL_PLLRST;
|
||||||
/* Set RESET bit = 1 */
|
/* Set RESET bit = 1 */
|
||||||
setbits_le32(pll_regs[data->pll].reg1, tmp);
|
setbits_le32(keystone_pll_regs[data->pll].reg1, tmp);
|
||||||
/* Wait for a minimum of 7 us*/
|
/* Wait for a minimum of 7 us*/
|
||||||
sdelay(21000);
|
sdelay(21000);
|
||||||
/* Clear RESET bit */
|
/* Clear RESET bit */
|
||||||
clrbits_le32(pll_regs[data->pll].reg1, tmp);
|
clrbits_le32(keystone_pll_regs[data->pll].reg1, tmp);
|
||||||
sdelay(105000);
|
sdelay(105000);
|
||||||
|
|
||||||
/* clear BYPASS (Enable PLL Mode) */
|
/* clear BYPASS (Enable PLL Mode) */
|
||||||
clrbits_le32(pll_regs[data->pll].reg0, PLLCTL_BYPASS);
|
clrbits_le32(keystone_pll_regs[data->pll].reg0, PLLCTL_BYPASS);
|
||||||
sdelay(21000); /* Wait for a minimum of 7 us*/
|
sdelay(21000); /* Wait for a minimum of 7 us*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,10 @@
|
||||||
#include <asm/arch/psc_defs.h>
|
#include <asm/arch/psc_defs.h>
|
||||||
|
|
||||||
struct pll_init_data cmd_pll_data = {
|
struct pll_init_data cmd_pll_data = {
|
||||||
.pll = MAIN_PLL,
|
.pll = MAIN_PLL,
|
||||||
.pll_m = 16,
|
.pll_m = 16,
|
||||||
.pll_d = 1,
|
.pll_d = 1,
|
||||||
.pll_od = 2,
|
.pll_od = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
int do_pll_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
int do_pll_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
|
@ -27,12 +27,19 @@ int do_pll_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
|
|
||||||
if (strncmp(argv[1], "pa", 2) == 0)
|
if (strncmp(argv[1], "pa", 2) == 0)
|
||||||
cmd_pll_data.pll = PASS_PLL;
|
cmd_pll_data.pll = PASS_PLL;
|
||||||
|
#ifndef CONFIG_SOC_K2E
|
||||||
else if (strncmp(argv[1], "arm", 3) == 0)
|
else if (strncmp(argv[1], "arm", 3) == 0)
|
||||||
cmd_pll_data.pll = TETRIS_PLL;
|
cmd_pll_data.pll = TETRIS_PLL;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SOC_K2HK
|
||||||
else if (strncmp(argv[1], "ddr3a", 5) == 0)
|
else if (strncmp(argv[1], "ddr3a", 5) == 0)
|
||||||
cmd_pll_data.pll = DDR3A_PLL;
|
cmd_pll_data.pll = DDR3A_PLL;
|
||||||
else if (strncmp(argv[1], "ddr3b", 5) == 0)
|
else if (strncmp(argv[1], "ddr3b", 5) == 0)
|
||||||
cmd_pll_data.pll = DDR3B_PLL;
|
cmd_pll_data.pll = DDR3B_PLL;
|
||||||
|
#else
|
||||||
|
else if (strncmp(argv[1], "ddr3", 4) == 0)
|
||||||
|
cmd_pll_data.pll = DDR3_PLL;
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
goto pll_cmd_usage;
|
goto pll_cmd_usage;
|
||||||
|
|
||||||
|
@ -51,11 +58,20 @@ pll_cmd_usage:
|
||||||
return cmd_usage(cmdtp);
|
return cmd_usage(cmdtp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SOC_K2HK
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
pllset, 5, 0, do_pll_cmd,
|
pllset, 5, 0, do_pll_cmd,
|
||||||
"set pll multiplier and pre divider",
|
"set pll multiplier and pre divider",
|
||||||
"<pa|arm|ddr3a|ddr3b> <mult> <div> <OD>\n"
|
"<pa|arm|ddr3a|ddr3b> <mult> <div> <OD>\n"
|
||||||
);
|
);
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SOC_K2E
|
||||||
|
U_BOOT_CMD(
|
||||||
|
pllset, 5, 0, do_pll_cmd,
|
||||||
|
"set pll multiplier and pre divider",
|
||||||
|
"<pa|ddr3> <mult> <div> <OD>\n"
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
int do_getclk_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
int do_getclk_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
{
|
{
|
||||||
|
@ -79,7 +95,12 @@ U_BOOT_CMD(
|
||||||
getclk, 2, 0, do_getclk_cmd,
|
getclk, 2, 0, do_getclk_cmd,
|
||||||
"get clock rate",
|
"get clock rate",
|
||||||
"<clk index>\n"
|
"<clk index>\n"
|
||||||
"See the 'enum clk_e' in the k2hk clock.h for clk indexes\n"
|
#ifdef CONFIG_SOC_K2HK
|
||||||
|
"See the 'enum clk_e' in the clock-k2hk.h for clk indexes\n"
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SOC_K2E
|
||||||
|
"See the 'enum clk_e' in the clock-k2e.h for clk indexes\n"
|
||||||
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
int do_psc_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
int do_psc_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
|
|
|
@ -7,10 +7,11 @@
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm/arch/hardware.h>
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/arch/ddr3.h>
|
||||||
|
|
||||||
void init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg)
|
void ddr3_init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg)
|
||||||
{
|
{
|
||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
|
|
||||||
|
@ -57,7 +58,7 @@ void init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_ddremif(u32 base, struct ddr3_emif_config *emif_cfg)
|
void ddr3_init_ddremif(u32 base, struct ddr3_emif_config *emif_cfg)
|
||||||
{
|
{
|
||||||
__raw_writel(emif_cfg->sdcfg, base + KS2_DDR3_SDCFG_OFFSET);
|
__raw_writel(emif_cfg->sdcfg, base + KS2_DDR3_SDCFG_OFFSET);
|
||||||
__raw_writel(emif_cfg->sdtim1, base + KS2_DDR3_SDTIM1_OFFSET);
|
__raw_writel(emif_cfg->sdtim1, base + KS2_DDR3_SDTIM1_OFFSET);
|
||||||
|
@ -67,3 +68,21 @@ void init_ddremif(u32 base, struct ddr3_emif_config *emif_cfg)
|
||||||
__raw_writel(emif_cfg->zqcfg, base + KS2_DDR3_ZQCFG_OFFSET);
|
__raw_writel(emif_cfg->zqcfg, base + KS2_DDR3_ZQCFG_OFFSET);
|
||||||
__raw_writel(emif_cfg->sdrfc, base + KS2_DDR3_SDRFC_OFFSET);
|
__raw_writel(emif_cfg->sdrfc, base + KS2_DDR3_SDRFC_OFFSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ddr3_reset_ddrphy(void)
|
||||||
|
{
|
||||||
|
u32 tmp;
|
||||||
|
|
||||||
|
/* Assert DDR3A PHY reset */
|
||||||
|
tmp = readl(KS2_DDR3APLLCTL1);
|
||||||
|
tmp |= KS2_DDR3_PLLCTRL_PHY_RESET;
|
||||||
|
writel(tmp, KS2_DDR3APLLCTL1);
|
||||||
|
|
||||||
|
/* wait 10us to catch the reset */
|
||||||
|
udelay(10);
|
||||||
|
|
||||||
|
/* Release DDR3A PHY reset */
|
||||||
|
tmp = readl(KS2_DDR3APLLCTL1);
|
||||||
|
tmp &= ~KS2_DDR3_PLLCTRL_PHY_RESET;
|
||||||
|
__raw_writel(tmp, KS2_DDR3APLLCTL1);
|
||||||
|
}
|
||||||
|
|
|
@ -10,13 +10,14 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <ns16550.h>
|
#include <ns16550.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/msmc.h>
|
||||||
#include <asm/arch/clock.h>
|
#include <asm/arch/clock.h>
|
||||||
#include <asm/arch/hardware.h>
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
void chip_configuration_unlock(void)
|
void chip_configuration_unlock(void)
|
||||||
{
|
{
|
||||||
__raw_writel(KEYSTONE_KICK0_MAGIC, KEYSTONE_KICK0);
|
__raw_writel(KS2_KICK0_MAGIC, KS2_KICK0);
|
||||||
__raw_writel(KEYSTONE_KICK1_MAGIC, KEYSTONE_KICK1);
|
__raw_writel(KS2_KICK1_MAGIC, KS2_KICK1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int arch_cpu_init(void)
|
int arch_cpu_init(void)
|
||||||
|
@ -24,11 +25,12 @@ int arch_cpu_init(void)
|
||||||
chip_configuration_unlock();
|
chip_configuration_unlock();
|
||||||
icache_enable();
|
icache_enable();
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_K2HK
|
msmc_share_all_segments(8); /* TETRIS */
|
||||||
share_all_segments(8);
|
msmc_share_all_segments(9); /* NETCP */
|
||||||
share_all_segments(9);
|
msmc_share_all_segments(10); /* QM PDSP */
|
||||||
share_all_segments(10); /* QM PDSP */
|
msmc_share_all_segments(11); /* PCIE 0 */
|
||||||
share_all_segments(11); /* PCIE */
|
#ifdef CONFIG_SOC_K2E
|
||||||
|
msmc_share_all_segments(13); /* PCIE 1 */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
87
arch/arm/cpu/armv7/keystone/keystone.c
Normal file
87
arch/arm/cpu/armv7/keystone/keystone.c
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* Keystone EVM : Board initialization
|
||||||
|
*
|
||||||
|
* (C) Copyright 2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/mon.h>
|
||||||
|
#include <asm/arch/psc_defs.h>
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cpu_to_bus - swap bytes of the 32-bit data if the device is BE
|
||||||
|
* @ptr - array of data
|
||||||
|
* @length - lenght of data array
|
||||||
|
*/
|
||||||
|
int cpu_to_bus(u32 *ptr, u32 length)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
|
||||||
|
if (!(readl(KS2_DEVSTAT) & 0x1))
|
||||||
|
for (i = 0; i < length; i++, ptr++)
|
||||||
|
*ptr = cpu_to_be32(*ptr);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int turn_off_myself(void)
|
||||||
|
{
|
||||||
|
printf("Turning off ourselves\r\n");
|
||||||
|
mon_power_off(0);
|
||||||
|
|
||||||
|
psc_disable_module(KS2_LPSC_TETRIS);
|
||||||
|
psc_disable_domain(KS2_TETRIS_PWR_DOMAIN);
|
||||||
|
|
||||||
|
asm volatile ("isb\n"
|
||||||
|
"dsb\n"
|
||||||
|
"wfi\n");
|
||||||
|
|
||||||
|
printf("What! Should not see that\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void turn_off_all_dsps(int num_dsps)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < num_dsps; i++) {
|
||||||
|
if (psc_disable_module(i + KS2_LPSC_GEM_0))
|
||||||
|
printf("Cannot disable module for #%d DSP", i);
|
||||||
|
|
||||||
|
if (psc_disable_domain(i + 8))
|
||||||
|
printf("Cannot disable domain for #%d DSP", i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int do_killme_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
|
{
|
||||||
|
return turn_off_myself();
|
||||||
|
}
|
||||||
|
|
||||||
|
U_BOOT_CMD(
|
||||||
|
killme, 1, 0, do_killme_cmd,
|
||||||
|
"turn off main ARM core",
|
||||||
|
"turn off main ARM core. Should not live after that :(\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
int misc_init_r(void)
|
||||||
|
{
|
||||||
|
char *env;
|
||||||
|
long ks2_debug = 0;
|
||||||
|
|
||||||
|
env = getenv("ks2_debug");
|
||||||
|
|
||||||
|
if (env)
|
||||||
|
ks2_debug = simple_strtol(env, NULL, 0);
|
||||||
|
|
||||||
|
if ((ks2_debug & DBG_LEAVE_DSPS_ON) == 0)
|
||||||
|
turn_off_all_dsps(KS2_NUM_DSPS);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -8,7 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/arch/hardware.h>
|
#include <asm/arch/msmc.h>
|
||||||
|
|
||||||
struct mpax {
|
struct mpax {
|
||||||
u32 mpaxl;
|
u32 mpaxl;
|
||||||
|
@ -56,9 +56,9 @@ struct msms_regs {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void share_all_segments(int priv_id)
|
void msmc_share_all_segments(int priv_id)
|
||||||
{
|
{
|
||||||
struct msms_regs *msmc = (struct msms_regs *)K2HK_MSMC_CTRL_BASE;
|
struct msms_regs *msmc = (struct msms_regs *)KS2_MSMC_CTRL_BASE;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
for (j = 0; j < 8; j++) {
|
for (j = 0; j < 8; j++) {
|
||||||
|
|
|
@ -16,10 +16,6 @@
|
||||||
#define DEVICE_REG32_R(addr) __raw_readl((u32 *)(addr))
|
#define DEVICE_REG32_R(addr) __raw_readl((u32 *)(addr))
|
||||||
#define DEVICE_REG32_W(addr, val) __raw_writel(val, (u32 *)(addr))
|
#define DEVICE_REG32_W(addr, val) __raw_writel(val, (u32 *)(addr))
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_K2HK
|
|
||||||
#define DEVICE_PSC_BASE K2HK_PSC_BASE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int psc_delay(void)
|
int psc_delay(void)
|
||||||
{
|
{
|
||||||
udelay(10);
|
udelay(10);
|
||||||
|
@ -55,7 +51,7 @@ int psc_wait(u32 domain_num)
|
||||||
retry = 0;
|
retry = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
ptstat = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_PSTAT);
|
ptstat = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_PSTAT);
|
||||||
ptstat = ptstat & (1 << domain_num);
|
ptstat = ptstat & (1 << domain_num);
|
||||||
} while ((ptstat != 0) && ((retry += psc_delay()) <
|
} while ((ptstat != 0) && ((retry += psc_delay()) <
|
||||||
PSC_PTSTAT_TIMEOUT_LIMIT));
|
PSC_PTSTAT_TIMEOUT_LIMIT));
|
||||||
|
@ -71,7 +67,7 @@ u32 psc_get_domain_num(u32 mod_num)
|
||||||
u32 domain_num;
|
u32 domain_num;
|
||||||
|
|
||||||
/* Get the power domain associated with the module number */
|
/* Get the power domain associated with the module number */
|
||||||
domain_num = DEVICE_REG32_R(DEVICE_PSC_BASE +
|
domain_num = DEVICE_REG32_R(KS2_PSC_BASE +
|
||||||
PSC_REG_MDCFG(mod_num));
|
PSC_REG_MDCFG(mod_num));
|
||||||
domain_num = PSC_REG_MDCFG_GET_PD(domain_num);
|
domain_num = PSC_REG_MDCFG_GET_PD(domain_num);
|
||||||
|
|
||||||
|
@ -106,7 +102,7 @@ int psc_set_state(u32 mod_num, u32 state)
|
||||||
* Get the power domain associated with the module number, and reset
|
* Get the power domain associated with the module number, and reset
|
||||||
* isolation functionality
|
* isolation functionality
|
||||||
*/
|
*/
|
||||||
v = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_MDCFG(mod_num));
|
v = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_MDCFG(mod_num));
|
||||||
domain_num = PSC_REG_MDCFG_GET_PD(v);
|
domain_num = PSC_REG_MDCFG_GET_PD(v);
|
||||||
reset_iso = PSC_REG_MDCFG_GET_RESET_ISO(v);
|
reset_iso = PSC_REG_MDCFG_GET_RESET_ISO(v);
|
||||||
|
|
||||||
|
@ -123,24 +119,24 @@ int psc_set_state(u32 mod_num, u32 state)
|
||||||
* change is made if the new state is power down.
|
* change is made if the new state is power down.
|
||||||
*/
|
*/
|
||||||
if (state == PSC_REG_VAL_MDCTL_NEXT_ON) {
|
if (state == PSC_REG_VAL_MDCTL_NEXT_ON) {
|
||||||
pdctl = DEVICE_REG32_R(DEVICE_PSC_BASE +
|
pdctl = DEVICE_REG32_R(KS2_PSC_BASE +
|
||||||
PSC_REG_PDCTL(domain_num));
|
PSC_REG_PDCTL(domain_num));
|
||||||
pdctl = PSC_REG_PDCTL_SET_NEXT(pdctl,
|
pdctl = PSC_REG_PDCTL_SET_NEXT(pdctl,
|
||||||
PSC_REG_VAL_PDCTL_NEXT_ON);
|
PSC_REG_VAL_PDCTL_NEXT_ON);
|
||||||
DEVICE_REG32_W(DEVICE_PSC_BASE + PSC_REG_PDCTL(domain_num),
|
DEVICE_REG32_W(KS2_PSC_BASE + PSC_REG_PDCTL(domain_num),
|
||||||
pdctl);
|
pdctl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the next state for the module to enabled/disabled */
|
/* Set the next state for the module to enabled/disabled */
|
||||||
mdctl = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_MDCTL(mod_num));
|
mdctl = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_MDCTL(mod_num));
|
||||||
mdctl = PSC_REG_MDCTL_SET_NEXT(mdctl, state);
|
mdctl = PSC_REG_MDCTL_SET_NEXT(mdctl, state);
|
||||||
mdctl = PSC_REG_MDCTL_SET_RESET_ISO(mdctl, reset_iso);
|
mdctl = PSC_REG_MDCTL_SET_RESET_ISO(mdctl, reset_iso);
|
||||||
DEVICE_REG32_W(DEVICE_PSC_BASE + PSC_REG_MDCTL(mod_num), mdctl);
|
DEVICE_REG32_W(KS2_PSC_BASE + PSC_REG_MDCTL(mod_num), mdctl);
|
||||||
|
|
||||||
/* Trigger the enable */
|
/* Trigger the enable */
|
||||||
ptcmd = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_PTCMD);
|
ptcmd = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_PTCMD);
|
||||||
ptcmd |= (u32)(1<<domain_num);
|
ptcmd |= (u32)(1<<domain_num);
|
||||||
DEVICE_REG32_W(DEVICE_PSC_BASE + PSC_REG_PTCMD, ptcmd);
|
DEVICE_REG32_W(KS2_PSC_BASE + PSC_REG_PTCMD, ptcmd);
|
||||||
|
|
||||||
/* Wait on the complete */
|
/* Wait on the complete */
|
||||||
return psc_wait(domain_num);
|
return psc_wait(domain_num);
|
||||||
|
@ -161,7 +157,7 @@ int psc_enable_module(u32 mod_num)
|
||||||
u32 mdctl;
|
u32 mdctl;
|
||||||
|
|
||||||
/* Set the bit to apply reset */
|
/* Set the bit to apply reset */
|
||||||
mdctl = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_MDCTL(mod_num));
|
mdctl = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_MDCTL(mod_num));
|
||||||
if ((mdctl & 0x3f) == PSC_REG_VAL_MDSTAT_STATE_ON)
|
if ((mdctl & 0x3f) == PSC_REG_VAL_MDSTAT_STATE_ON)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -180,11 +176,11 @@ int psc_disable_module(u32 mod_num)
|
||||||
u32 mdctl;
|
u32 mdctl;
|
||||||
|
|
||||||
/* Set the bit to apply reset */
|
/* Set the bit to apply reset */
|
||||||
mdctl = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_MDCTL(mod_num));
|
mdctl = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_MDCTL(mod_num));
|
||||||
if ((mdctl & 0x3f) == 0)
|
if ((mdctl & 0x3f) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
mdctl = PSC_REG_MDCTL_SET_LRSTZ(mdctl, 0);
|
mdctl = PSC_REG_MDCTL_SET_LRSTZ(mdctl, 0);
|
||||||
DEVICE_REG32_W(DEVICE_PSC_BASE + PSC_REG_MDCTL(mod_num), mdctl);
|
DEVICE_REG32_W(KS2_PSC_BASE + PSC_REG_MDCTL(mod_num), mdctl);
|
||||||
|
|
||||||
return psc_set_state(mod_num, PSC_REG_VAL_MDCTL_NEXT_SWRSTDISABLE);
|
return psc_set_state(mod_num, PSC_REG_VAL_MDCTL_NEXT_SWRSTDISABLE);
|
||||||
}
|
}
|
||||||
|
@ -203,11 +199,11 @@ int psc_set_reset_iso(u32 mod_num)
|
||||||
u32 mdctl;
|
u32 mdctl;
|
||||||
|
|
||||||
/* Set the reset isolation bit */
|
/* Set the reset isolation bit */
|
||||||
mdctl = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_MDCTL(mod_num));
|
mdctl = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_MDCTL(mod_num));
|
||||||
mdctl = PSC_REG_MDCTL_SET_RESET_ISO(mdctl, 1);
|
mdctl = PSC_REG_MDCTL_SET_RESET_ISO(mdctl, 1);
|
||||||
DEVICE_REG32_W(DEVICE_PSC_BASE + PSC_REG_MDCTL(mod_num), mdctl);
|
DEVICE_REG32_W(KS2_PSC_BASE + PSC_REG_MDCTL(mod_num), mdctl);
|
||||||
|
|
||||||
v = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_MDCFG(mod_num));
|
v = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_MDCFG(mod_num));
|
||||||
if (PSC_REG_MDCFG_GET_RESET_ISO(v) == 1)
|
if (PSC_REG_MDCFG_GET_RESET_ISO(v) == 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -224,14 +220,14 @@ int psc_disable_domain(u32 domain_num)
|
||||||
u32 pdctl;
|
u32 pdctl;
|
||||||
u32 ptcmd;
|
u32 ptcmd;
|
||||||
|
|
||||||
pdctl = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_PDCTL(domain_num));
|
pdctl = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_PDCTL(domain_num));
|
||||||
pdctl = PSC_REG_PDCTL_SET_NEXT(pdctl, PSC_REG_VAL_PDCTL_NEXT_OFF);
|
pdctl = PSC_REG_PDCTL_SET_NEXT(pdctl, PSC_REG_VAL_PDCTL_NEXT_OFF);
|
||||||
pdctl = PSC_REG_PDCTL_SET_PDMODE(pdctl, PSC_REG_VAL_PDCTL_PDMODE_SLEEP);
|
pdctl = PSC_REG_PDCTL_SET_PDMODE(pdctl, PSC_REG_VAL_PDCTL_PDMODE_SLEEP);
|
||||||
DEVICE_REG32_W(DEVICE_PSC_BASE + PSC_REG_PDCTL(domain_num), pdctl);
|
DEVICE_REG32_W(KS2_PSC_BASE + PSC_REG_PDCTL(domain_num), pdctl);
|
||||||
|
|
||||||
ptcmd = DEVICE_REG32_R(DEVICE_PSC_BASE + PSC_REG_PTCMD);
|
ptcmd = DEVICE_REG32_R(KS2_PSC_BASE + PSC_REG_PTCMD);
|
||||||
ptcmd |= (u32)(1 << domain_num);
|
ptcmd |= (u32)(1 << domain_num);
|
||||||
DEVICE_REG32_W(DEVICE_PSC_BASE + PSC_REG_PTCMD, ptcmd);
|
DEVICE_REG32_W(KS2_PSC_BASE + PSC_REG_PTCMD, ptcmd);
|
||||||
|
|
||||||
return psc_wait(domain_num);
|
return psc_wait(domain_num);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,10 +18,18 @@
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
#ifdef CONFIG_K2HK_EVM
|
||||||
static struct pll_init_data spl_pll_config[] = {
|
static struct pll_init_data spl_pll_config[] = {
|
||||||
CORE_PLL_799,
|
CORE_PLL_799,
|
||||||
TETRIS_PLL_500,
|
TETRIS_PLL_500,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_K2E_EVM
|
||||||
|
static struct pll_init_data spl_pll_config[] = {
|
||||||
|
CORE_PLL_800,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
void spl_init_keystone_plls(void)
|
void spl_init_keystone_plls(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -123,7 +123,8 @@ void s_init(void)
|
||||||
hw_data_init();
|
hw_data_init();
|
||||||
|
|
||||||
#ifdef CONFIG_SPL_BUILD
|
#ifdef CONFIG_SPL_BUILD
|
||||||
if (warm_reset() && (omap_revision() <= OMAP5430_ES1_0))
|
if (warm_reset() &&
|
||||||
|
(is_omap44xx() || (omap_revision() == OMAP5430_ES1_0)))
|
||||||
force_emif_self_refresh();
|
force_emif_self_refresh();
|
||||||
#endif
|
#endif
|
||||||
watchdog_init();
|
watchdog_init();
|
||||||
|
|
|
@ -87,9 +87,13 @@ void gpmc_init(void)
|
||||||
STNOR_GPMC_CONFIG6,
|
STNOR_GPMC_CONFIG6,
|
||||||
STNOR_GPMC_CONFIG7
|
STNOR_GPMC_CONFIG7
|
||||||
};
|
};
|
||||||
u32 size = GPMC_SIZE_16M;
|
|
||||||
u32 base = CONFIG_SYS_FLASH_BASE;
|
u32 base = CONFIG_SYS_FLASH_BASE;
|
||||||
#elif defined(CONFIG_NAND)
|
u32 size = (CONFIG_SYS_FLASH_SIZE > 0x08000000) ? GPMC_SIZE_256M :
|
||||||
|
/* > 64MB */ ((CONFIG_SYS_FLASH_SIZE > 0x04000000) ? GPMC_SIZE_128M :
|
||||||
|
/* > 32MB */ ((CONFIG_SYS_FLASH_SIZE > 0x02000000) ? GPMC_SIZE_64M :
|
||||||
|
/* > 16MB */ ((CONFIG_SYS_FLASH_SIZE > 0x01000000) ? GPMC_SIZE_32M :
|
||||||
|
/* min 16MB */ GPMC_SIZE_16M)));
|
||||||
|
#elif defined(CONFIG_NAND) || defined(CONFIG_CMD_NAND)
|
||||||
/* configure GPMC for NAND */
|
/* configure GPMC for NAND */
|
||||||
const u32 gpmc_regs[GPMC_MAX_REG] = { M_NAND_GPMC_CONFIG1,
|
const u32 gpmc_regs[GPMC_MAX_REG] = { M_NAND_GPMC_CONFIG1,
|
||||||
M_NAND_GPMC_CONFIG2,
|
M_NAND_GPMC_CONFIG2,
|
||||||
|
@ -99,8 +103,9 @@ void gpmc_init(void)
|
||||||
M_NAND_GPMC_CONFIG6,
|
M_NAND_GPMC_CONFIG6,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
u32 size = GPMC_SIZE_256M;
|
|
||||||
u32 base = CONFIG_SYS_NAND_BASE;
|
u32 base = CONFIG_SYS_NAND_BASE;
|
||||||
|
u32 size = GPMC_SIZE_16M;
|
||||||
|
|
||||||
#elif defined(CONFIG_CMD_ONENAND)
|
#elif defined(CONFIG_CMD_ONENAND)
|
||||||
const u32 gpmc_regs[GPMC_MAX_REG] = { ONENAND_GPMC_CONFIG1,
|
const u32 gpmc_regs[GPMC_MAX_REG] = { ONENAND_GPMC_CONFIG1,
|
||||||
ONENAND_GPMC_CONFIG2,
|
ONENAND_GPMC_CONFIG2,
|
||||||
|
@ -110,8 +115,8 @@ void gpmc_init(void)
|
||||||
ONENAND_GPMC_CONFIG6,
|
ONENAND_GPMC_CONFIG6,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
u32 base = PISMO1_ONEN_BASE;
|
u32 size = GPMC_SIZE_128M;
|
||||||
u32 size = PISMO1_ONEN_SIZE;
|
u32 base = CONFIG_SYS_ONENAND_BASE;
|
||||||
#else
|
#else
|
||||||
const u32 gpmc_regs[GPMC_MAX_REG] = { 0, 0, 0, 0, 0, 0, 0 };
|
const u32 gpmc_regs[GPMC_MAX_REG] = { 0, 0, 0, 0, 0, 0, 0 };
|
||||||
u32 size = 0;
|
u32 size = 0;
|
||||||
|
|
|
@ -1,139 +0,0 @@
|
||||||
/*
|
|
||||||
* (C) Copyright 2008
|
|
||||||
* Texas Instruments, <www.ti.com>
|
|
||||||
*
|
|
||||||
* Author :
|
|
||||||
* Manikandan Pillai <mani.pillai@ti.com>
|
|
||||||
*
|
|
||||||
* Initial Code from:
|
|
||||||
* Richard Woodruff <r-woodruff2@ti.com>
|
|
||||||
* Syed Mohammed Khasim <khasim@ti.com>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/arch/mem.h>
|
|
||||||
#include <asm/arch/sys_proto.h>
|
|
||||||
#include <command.h>
|
|
||||||
|
|
||||||
struct gpmc *gpmc_cfg;
|
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NAND)
|
|
||||||
static const u32 gpmc_m_nand[GPMC_MAX_REG] = {
|
|
||||||
M_NAND_GPMC_CONFIG1,
|
|
||||||
M_NAND_GPMC_CONFIG2,
|
|
||||||
M_NAND_GPMC_CONFIG3,
|
|
||||||
M_NAND_GPMC_CONFIG4,
|
|
||||||
M_NAND_GPMC_CONFIG5,
|
|
||||||
M_NAND_GPMC_CONFIG6, 0
|
|
||||||
};
|
|
||||||
#endif /* CONFIG_CMD_NAND */
|
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_ONENAND)
|
|
||||||
static const u32 gpmc_onenand[GPMC_MAX_REG] = {
|
|
||||||
ONENAND_GPMC_CONFIG1,
|
|
||||||
ONENAND_GPMC_CONFIG2,
|
|
||||||
ONENAND_GPMC_CONFIG3,
|
|
||||||
ONENAND_GPMC_CONFIG4,
|
|
||||||
ONENAND_GPMC_CONFIG5,
|
|
||||||
ONENAND_GPMC_CONFIG6, 0
|
|
||||||
};
|
|
||||||
#endif /* CONFIG_CMD_ONENAND */
|
|
||||||
|
|
||||||
/********************************************************
|
|
||||||
* mem_ok() - test used to see if timings are correct
|
|
||||||
* for a part. Helps in guessing which part
|
|
||||||
* we are currently using.
|
|
||||||
*******************************************************/
|
|
||||||
u32 mem_ok(u32 cs)
|
|
||||||
{
|
|
||||||
u32 val1, val2, addr;
|
|
||||||
u32 pattern = 0x12345678;
|
|
||||||
|
|
||||||
addr = OMAP34XX_SDRC_CS0 + get_sdr_cs_offset(cs);
|
|
||||||
|
|
||||||
writel(0x0, addr + 0x400); /* clear pos A */
|
|
||||||
writel(pattern, addr); /* pattern to pos B */
|
|
||||||
writel(0x0, addr + 4); /* remove pattern off the bus */
|
|
||||||
val1 = readl(addr + 0x400); /* get pos A value */
|
|
||||||
val2 = readl(addr); /* get val2 */
|
|
||||||
writel(0x0, addr + 0x400); /* clear pos A */
|
|
||||||
|
|
||||||
if ((val1 != 0) || (val2 != pattern)) /* see if pos A val changed */
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void enable_gpmc_cs_config(const u32 *gpmc_config, struct gpmc_cs *cs, u32 base,
|
|
||||||
u32 size)
|
|
||||||
{
|
|
||||||
writel(0, &cs->config7);
|
|
||||||
sdelay(1000);
|
|
||||||
/* Delay for settling */
|
|
||||||
writel(gpmc_config[0], &cs->config1);
|
|
||||||
writel(gpmc_config[1], &cs->config2);
|
|
||||||
writel(gpmc_config[2], &cs->config3);
|
|
||||||
writel(gpmc_config[3], &cs->config4);
|
|
||||||
writel(gpmc_config[4], &cs->config5);
|
|
||||||
writel(gpmc_config[5], &cs->config6);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enable the config. size is the CS size and goes in
|
|
||||||
* bits 11:8. We set bit 6 to enable this CS and the base
|
|
||||||
* address goes into bits 5:0.
|
|
||||||
*/
|
|
||||||
writel((size << 8) | (GPMC_CS_ENABLE << 6) |
|
|
||||||
((base >> 24) & GPMC_BASEADDR_MASK),
|
|
||||||
&cs->config7);
|
|
||||||
sdelay(2000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************
|
|
||||||
* gpmc_init(): init gpmc bus
|
|
||||||
* Init GPMC for x16, MuxMode (SDRAM in x32).
|
|
||||||
* This code can only be executed from SRAM or SDRAM.
|
|
||||||
*****************************************************/
|
|
||||||
void gpmc_init(void)
|
|
||||||
{
|
|
||||||
/* putting a blanket check on GPMC based on ZeBu for now */
|
|
||||||
gpmc_cfg = (struct gpmc *)GPMC_BASE;
|
|
||||||
#if defined(CONFIG_CMD_NAND) || defined(CONFIG_CMD_ONENAND)
|
|
||||||
const u32 *gpmc_config = NULL;
|
|
||||||
u32 base = 0;
|
|
||||||
u32 size = 0;
|
|
||||||
#endif
|
|
||||||
u32 config = 0;
|
|
||||||
|
|
||||||
/* global settings */
|
|
||||||
writel(0, &gpmc_cfg->irqenable); /* isr's sources masked */
|
|
||||||
writel(0, &gpmc_cfg->timeout_control);/* timeout disable */
|
|
||||||
|
|
||||||
config = readl(&gpmc_cfg->config);
|
|
||||||
config &= (~0xf00);
|
|
||||||
writel(config, &gpmc_cfg->config);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Disable the GPMC0 config set by ROM code
|
|
||||||
* It conflicts with our MPDB (both at 0x08000000)
|
|
||||||
*/
|
|
||||||
writel(0, &gpmc_cfg->cs[0].config7);
|
|
||||||
sdelay(1000);
|
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NAND) /* CS 0 */
|
|
||||||
gpmc_config = gpmc_m_nand;
|
|
||||||
|
|
||||||
base = PISMO1_NAND_BASE;
|
|
||||||
size = PISMO1_NAND_SIZE;
|
|
||||||
enable_gpmc_cs_config(gpmc_config, &gpmc_cfg->cs[0], base, size);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_ONENAND)
|
|
||||||
gpmc_config = gpmc_onenand;
|
|
||||||
base = PISMO1_ONEN_BASE;
|
|
||||||
size = PISMO1_ONEN_SIZE;
|
|
||||||
enable_gpmc_cs_config(gpmc_config, &gpmc_cfg->cs[0], base, size);
|
|
||||||
#endif
|
|
||||||
}
|
|
|
@ -33,11 +33,7 @@
|
||||||
#define MT47H128M16RT25E_EMIF_SDCFG 0x41805332
|
#define MT47H128M16RT25E_EMIF_SDCFG 0x41805332
|
||||||
#define MT47H128M16RT25E_EMIF_SDREF 0x0000081a
|
#define MT47H128M16RT25E_EMIF_SDREF 0x0000081a
|
||||||
#define MT47H128M16RT25E_RATIO 0x80
|
#define MT47H128M16RT25E_RATIO 0x80
|
||||||
#define MT47H128M16RT25E_INVERT_CLKOUT 0x00
|
|
||||||
#define MT47H128M16RT25E_RD_DQS 0x12
|
#define MT47H128M16RT25E_RD_DQS 0x12
|
||||||
#define MT47H128M16RT25E_WR_DQS 0x00
|
|
||||||
#define MT47H128M16RT25E_PHY_WRLVL 0x00
|
|
||||||
#define MT47H128M16RT25E_PHY_GATELVL 0x00
|
|
||||||
#define MT47H128M16RT25E_PHY_WR_DATA 0x40
|
#define MT47H128M16RT25E_PHY_WR_DATA 0x40
|
||||||
#define MT47H128M16RT25E_PHY_FIFO_WE 0x80
|
#define MT47H128M16RT25E_PHY_FIFO_WE 0x80
|
||||||
#define MT47H128M16RT25E_IOCTRL_VALUE 0x18B
|
#define MT47H128M16RT25E_IOCTRL_VALUE 0x18B
|
||||||
|
|
|
@ -59,13 +59,6 @@
|
||||||
/* max number of GPMC regs */
|
/* max number of GPMC regs */
|
||||||
#define GPMC_MAX_REG 7
|
#define GPMC_MAX_REG 7
|
||||||
|
|
||||||
#define PISMO1_NOR 1
|
|
||||||
#define PISMO1_NAND 2
|
|
||||||
#define PISMO2_CS0 3
|
|
||||||
#define PISMO2_CS1 4
|
|
||||||
#define PISMO1_ONENAND 5
|
|
||||||
#define DBG_MPDB 6
|
#define DBG_MPDB 6
|
||||||
#define PISMO2_NAND_CS0 7
|
|
||||||
#define PISMO2_NAND_CS1 8
|
|
||||||
|
|
||||||
#endif /* endif _MEM_H_ */
|
#endif /* endif _MEM_H_ */
|
||||||
|
|
68
arch/arm/include/asm/arch-keystone/clock-k2e.h
Normal file
68
arch/arm/include/asm/arch-keystone/clock-k2e.h
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* K2E: Clock management APIs
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_ARCH_CLOCK_K2E_H
|
||||||
|
#define __ASM_ARCH_CLOCK_K2E_H
|
||||||
|
|
||||||
|
enum ext_clk_e {
|
||||||
|
sys_clk,
|
||||||
|
alt_core_clk,
|
||||||
|
pa_clk,
|
||||||
|
ddr3_clk,
|
||||||
|
mcm_clk,
|
||||||
|
pcie_clk,
|
||||||
|
sgmii_clk,
|
||||||
|
xgmii_clk,
|
||||||
|
usb_clk,
|
||||||
|
ext_clk_count /* number of external clocks */
|
||||||
|
};
|
||||||
|
|
||||||
|
extern unsigned int external_clk[ext_clk_count];
|
||||||
|
|
||||||
|
enum clk_e {
|
||||||
|
core_pll_clk,
|
||||||
|
pass_pll_clk,
|
||||||
|
ddr3_pll_clk,
|
||||||
|
sys_clk0_clk,
|
||||||
|
sys_clk0_1_clk,
|
||||||
|
sys_clk0_2_clk,
|
||||||
|
sys_clk0_3_clk,
|
||||||
|
sys_clk0_4_clk,
|
||||||
|
sys_clk0_6_clk,
|
||||||
|
sys_clk0_8_clk,
|
||||||
|
sys_clk0_12_clk,
|
||||||
|
sys_clk0_24_clk,
|
||||||
|
sys_clk1_clk,
|
||||||
|
sys_clk1_3_clk,
|
||||||
|
sys_clk1_4_clk,
|
||||||
|
sys_clk1_6_clk,
|
||||||
|
sys_clk1_12_clk,
|
||||||
|
sys_clk2_clk,
|
||||||
|
sys_clk3_clk
|
||||||
|
};
|
||||||
|
|
||||||
|
#define KS2_CLK1_6 sys_clk0_6_clk
|
||||||
|
|
||||||
|
/* PLL identifiers */
|
||||||
|
enum pll_type_e {
|
||||||
|
CORE_PLL,
|
||||||
|
PASS_PLL,
|
||||||
|
DDR3_PLL,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CORE_PLL_800 {CORE_PLL, 16, 1, 2}
|
||||||
|
#define CORE_PLL_1000 {CORE_PLL, 20, 1, 2}
|
||||||
|
#define CORE_PLL_1200 {CORE_PLL, 24, 1, 2}
|
||||||
|
#define PASS_PLL_1000 {PASS_PLL, 20, 1, 2}
|
||||||
|
#define DDR3_PLL_200 {DDR3_PLL, 4, 1, 2}
|
||||||
|
#define DDR3_PLL_400 {DDR3_PLL, 16, 1, 4}
|
||||||
|
#define DDR3_PLL_800 {DDR3_PLL, 16, 1, 2}
|
||||||
|
#define DDR3_PLL_333 {DDR3_PLL, 20, 1, 6}
|
||||||
|
|
||||||
|
#endif
|
|
@ -10,10 +10,6 @@
|
||||||
#ifndef __ASM_ARCH_CLOCK_K2HK_H
|
#ifndef __ASM_ARCH_CLOCK_K2HK_H
|
||||||
#define __ASM_ARCH_CLOCK_K2HK_H
|
#define __ASM_ARCH_CLOCK_K2HK_H
|
||||||
|
|
||||||
#include <asm/arch/hardware.h>
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
|
|
||||||
enum ext_clk_e {
|
enum ext_clk_e {
|
||||||
sys_clk,
|
sys_clk,
|
||||||
alt_core_clk,
|
alt_core_clk,
|
||||||
|
@ -56,7 +52,7 @@ enum clk_e {
|
||||||
sys_clk3_clk
|
sys_clk3_clk
|
||||||
};
|
};
|
||||||
|
|
||||||
#define K2HK_CLK1_6 sys_clk0_6_clk
|
#define KS2_CLK1_6 sys_clk0_6_clk
|
||||||
|
|
||||||
/* PLL identifiers */
|
/* PLL identifiers */
|
||||||
enum pll_type_e {
|
enum pll_type_e {
|
||||||
|
@ -66,15 +62,6 @@ enum pll_type_e {
|
||||||
DDR3A_PLL,
|
DDR3A_PLL,
|
||||||
DDR3B_PLL,
|
DDR3B_PLL,
|
||||||
};
|
};
|
||||||
#define MAIN_PLL CORE_PLL
|
|
||||||
|
|
||||||
/* PLL configuration data */
|
|
||||||
struct pll_init_data {
|
|
||||||
int pll;
|
|
||||||
int pll_m; /* PLL Multiplier */
|
|
||||||
int pll_d; /* PLL divider */
|
|
||||||
int pll_od; /* PLL output divider */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define CORE_PLL_799 {CORE_PLL, 13, 1, 2}
|
#define CORE_PLL_799 {CORE_PLL, 13, 1, 2}
|
||||||
#define CORE_PLL_983 {CORE_PLL, 16, 1, 2}
|
#define CORE_PLL_983 {CORE_PLL, 16, 1, 2}
|
||||||
|
@ -98,12 +85,4 @@ struct pll_init_data {
|
||||||
#define DDR3_PLL_800(x) {DDR3##x##_PLL, 16, 1, 2}
|
#define DDR3_PLL_800(x) {DDR3##x##_PLL, 16, 1, 2}
|
||||||
#define DDR3_PLL_333(x) {DDR3##x##_PLL, 20, 1, 6}
|
#define DDR3_PLL_333(x) {DDR3##x##_PLL, 20, 1, 6}
|
||||||
|
|
||||||
void init_plls(int num_pll, struct pll_init_data *config);
|
|
||||||
void init_pll(const struct pll_init_data *data);
|
|
||||||
unsigned long clk_get_rate(unsigned int clk);
|
|
||||||
unsigned long clk_round_rate(unsigned int clk, unsigned long hz);
|
|
||||||
int clk_set_rate(unsigned int clk, unsigned long hz);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -10,8 +10,40 @@
|
||||||
#ifndef __ASM_ARCH_CLOCK_H
|
#ifndef __ASM_ARCH_CLOCK_H
|
||||||
#define __ASM_ARCH_CLOCK_H
|
#define __ASM_ARCH_CLOCK_H
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_K2HK
|
#ifdef CONFIG_SOC_K2HK
|
||||||
#include <asm/arch/clock-k2hk.h>
|
#include <asm/arch/clock-k2hk.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SOC_K2E
|
||||||
|
#include <asm/arch/clock-k2e.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MAIN_PLL CORE_PLL
|
||||||
|
|
||||||
|
#include <asm/types.h>
|
||||||
|
|
||||||
|
struct keystone_pll_regs {
|
||||||
|
u32 reg0;
|
||||||
|
u32 reg1;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* PLL configuration data */
|
||||||
|
struct pll_init_data {
|
||||||
|
int pll;
|
||||||
|
int pll_m; /* PLL Multiplier */
|
||||||
|
int pll_d; /* PLL divider */
|
||||||
|
int pll_od; /* PLL output divider */
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const struct keystone_pll_regs keystone_pll_regs[];
|
||||||
|
|
||||||
|
void init_plls(int num_pll, struct pll_init_data *config);
|
||||||
|
void init_pll(const struct pll_init_data *data);
|
||||||
|
unsigned long clk_get_rate(unsigned int clk);
|
||||||
|
unsigned long clk_round_rate(unsigned int clk, unsigned long hz);
|
||||||
|
int clk_set_rate(unsigned int clk, unsigned long hz);
|
||||||
|
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -50,7 +50,7 @@ struct pllctl_regs {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pllctl_regs *pllctl_regs[] = {
|
static struct pllctl_regs *pllctl_regs[] = {
|
||||||
(struct pllctl_regs *)(CLOCK_BASE + 0x100)
|
(struct pllctl_regs *)(KS2_CLOCK_BASE + 0x100)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define pllctl_reg(pll, reg) (&(pllctl_regs[pll]->reg))
|
#define pllctl_reg(pll, reg) (&(pllctl_regs[pll]->reg))
|
||||||
|
|
56
arch/arm/include/asm/arch-keystone/ddr3.h
Normal file
56
arch/arm/include/asm/arch-keystone/ddr3.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* DDR3
|
||||||
|
*
|
||||||
|
* (C) Copyright 2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DDR3_H_
|
||||||
|
#define _DDR3_H_
|
||||||
|
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
|
struct ddr3_phy_config {
|
||||||
|
unsigned int pllcr;
|
||||||
|
unsigned int pgcr1_mask;
|
||||||
|
unsigned int pgcr1_val;
|
||||||
|
unsigned int ptr0;
|
||||||
|
unsigned int ptr1;
|
||||||
|
unsigned int ptr2;
|
||||||
|
unsigned int ptr3;
|
||||||
|
unsigned int ptr4;
|
||||||
|
unsigned int dcr_mask;
|
||||||
|
unsigned int dcr_val;
|
||||||
|
unsigned int dtpr0;
|
||||||
|
unsigned int dtpr1;
|
||||||
|
unsigned int dtpr2;
|
||||||
|
unsigned int mr0;
|
||||||
|
unsigned int mr1;
|
||||||
|
unsigned int mr2;
|
||||||
|
unsigned int dtcr;
|
||||||
|
unsigned int pgcr2;
|
||||||
|
unsigned int zq0cr1;
|
||||||
|
unsigned int zq1cr1;
|
||||||
|
unsigned int zq2cr1;
|
||||||
|
unsigned int pir_v1;
|
||||||
|
unsigned int pir_v2;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ddr3_emif_config {
|
||||||
|
unsigned int sdcfg;
|
||||||
|
unsigned int sdtim1;
|
||||||
|
unsigned int sdtim2;
|
||||||
|
unsigned int sdtim3;
|
||||||
|
unsigned int sdtim4;
|
||||||
|
unsigned int zqcfg;
|
||||||
|
unsigned int sdrfc;
|
||||||
|
};
|
||||||
|
|
||||||
|
void ddr3_init(void);
|
||||||
|
void ddr3_reset_ddrphy(void);
|
||||||
|
void ddr3_init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg);
|
||||||
|
void ddr3_init_ddremif(u32 base, struct ddr3_emif_config *emif_cfg);
|
||||||
|
|
||||||
|
#endif
|
44
arch/arm/include/asm/arch-keystone/hardware-k2e.h
Normal file
44
arch/arm/include/asm/arch-keystone/hardware-k2e.h
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* K2E: SoC definitions
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_ARCH_HARDWARE_K2E_H
|
||||||
|
#define __ASM_ARCH_HARDWARE_K2E_H
|
||||||
|
|
||||||
|
/* PA SS Registers */
|
||||||
|
#define KS2_PASS_BASE 0x24000000
|
||||||
|
|
||||||
|
/* Power and Sleep Controller (PSC) Domains */
|
||||||
|
#define KS2_LPSC_MOD_RST 0
|
||||||
|
#define KS2_LPSC_USB_1 1
|
||||||
|
#define KS2_LPSC_USB 2
|
||||||
|
#define KS2_LPSC_EMIF25_SPI 3
|
||||||
|
#define KS2_LPSC_TSIP 4
|
||||||
|
#define KS2_LPSC_DEBUGSS_TRC 5
|
||||||
|
#define KS2_LPSC_TETB_TRC 6
|
||||||
|
#define KS2_LPSC_PKTPROC 7
|
||||||
|
#define KS2_LPSC_PA KS2_LPSC_PKTPROC
|
||||||
|
#define KS2_LPSC_SGMII 8
|
||||||
|
#define KS2_LPSC_CPGMAC KS2_LPSC_SGMII
|
||||||
|
#define KS2_LPSC_CRYPTO 9
|
||||||
|
#define KS2_LPSC_PCIE 10
|
||||||
|
#define KS2_LPSC_VUSR0 12
|
||||||
|
#define KS2_LPSC_CHIP_SRSS 13
|
||||||
|
#define KS2_LPSC_MSMC 14
|
||||||
|
#define KS2_LPSC_EMIF4F_DDR3 23
|
||||||
|
#define KS2_LPSC_PCIE_1 27
|
||||||
|
#define KS2_LPSC_XGE 50
|
||||||
|
|
||||||
|
/* Chip Interrupt Controller */
|
||||||
|
#define KS2_CIC2_DDR3_ECC_IRQ_NUM -1 /* not defined in K2E */
|
||||||
|
#define KS2_CIC2_DDR3_ECC_CHAN_NUM -1 /* not defined in K2E */
|
||||||
|
|
||||||
|
/* Number of DSP cores */
|
||||||
|
#define KS2_NUM_DSPS 1
|
||||||
|
|
||||||
|
#endif
|
|
@ -6,136 +6,82 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __ASM_ARCH_HARDWARE_K2HK_H
|
#ifndef __ASM_ARCH_HARDWARE_K2HK_H
|
||||||
#define __ASM_ARCH_HARDWARE_K2HK_H
|
#define __ASM_ARCH_HARDWARE_K2HK_H
|
||||||
|
|
||||||
#define K2HK_PLL_CNTRL_BASE 0x02310000
|
#define KS2_MISC_CTRL (KS2_DEVICE_STATE_CTRL_BASE + 0xc7c)
|
||||||
#define CLOCK_BASE K2HK_PLL_CNTRL_BASE
|
|
||||||
#define KS2_RSTCTRL (K2HK_PLL_CNTRL_BASE + 0xe8)
|
|
||||||
#define KS2_RSTCTRL_KEY 0x5a69
|
|
||||||
#define KS2_RSTCTRL_MASK 0xffff0000
|
|
||||||
#define KS2_RSTCTRL_SWRST 0xfffe0000
|
|
||||||
|
|
||||||
#define K2HK_PSC_BASE 0x02350000
|
#define KS2_ARM_PLL_EN BIT(13)
|
||||||
#define KS2_DEVICE_STATE_CTRL_BASE 0x02620000
|
|
||||||
#define JTAG_ID_REG (KS2_DEVICE_STATE_CTRL_BASE + 0x18)
|
|
||||||
#define K2HK_DEVSTAT (KS2_DEVICE_STATE_CTRL_BASE + 0x20)
|
|
||||||
|
|
||||||
#define K2HK_MISC_CTRL (KS2_DEVICE_STATE_CTRL_BASE + 0xc7c)
|
|
||||||
|
|
||||||
#define ARM_PLL_EN BIT(13)
|
|
||||||
|
|
||||||
#define K2HK_SPI0_BASE 0x21000400
|
|
||||||
#define K2HK_SPI1_BASE 0x21000600
|
|
||||||
#define K2HK_SPI2_BASE 0x21000800
|
|
||||||
#define K2HK_SPI_BASE K2HK_SPI0_BASE
|
|
||||||
|
|
||||||
/* Chip configuration unlock codes and registers */
|
|
||||||
#define KEYSTONE_KICK0 (KS2_DEVICE_STATE_CTRL_BASE + 0x38)
|
|
||||||
#define KEYSTONE_KICK1 (KS2_DEVICE_STATE_CTRL_BASE + 0x3c)
|
|
||||||
#define KEYSTONE_KICK0_MAGIC 0x83e70b13
|
|
||||||
#define KEYSTONE_KICK1_MAGIC 0x95a4f1e0
|
|
||||||
|
|
||||||
/* PA SS Registers */
|
/* PA SS Registers */
|
||||||
#define KS2_PASS_BASE 0x02000000
|
#define KS2_PASS_BASE 0x02000000
|
||||||
|
|
||||||
/* PLL control registers */
|
/* PLL control registers */
|
||||||
#define K2HK_MAINPLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x350)
|
#define KS2_DDR3BPLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x368)
|
||||||
#define K2HK_MAINPLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x354)
|
#define KS2_DDR3BPLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x36C)
|
||||||
#define K2HK_PASSPLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x358)
|
|
||||||
#define K2HK_PASSPLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x35C)
|
|
||||||
#define K2HK_DDR3APLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x360)
|
|
||||||
#define K2HK_DDR3APLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x364)
|
|
||||||
#define K2HK_DDR3BPLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x368)
|
|
||||||
#define K2HK_DDR3BPLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x36C)
|
|
||||||
#define K2HK_ARMPLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x370)
|
|
||||||
#define K2HK_ARMPLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x374)
|
|
||||||
|
|
||||||
/* Power and Sleep Controller (PSC) Domains */
|
/* Power and Sleep Controller (PSC) Domains */
|
||||||
#define K2HK_LPSC_MOD 0
|
#define KS2_LPSC_MOD 0
|
||||||
#define K2HK_LPSC_DUMMY1 1
|
#define KS2_LPSC_DUMMY1 1
|
||||||
#define K2HK_LPSC_USB 2
|
#define KS2_LPSC_USB 2
|
||||||
#define K2HK_LPSC_EMIF25_SPI 3
|
#define KS2_LPSC_EMIF25_SPI 3
|
||||||
#define K2HK_LPSC_TSIP 4
|
#define KS2_LPSC_TSIP 4
|
||||||
#define K2HK_LPSC_DEBUGSS_TRC 5
|
#define KS2_LPSC_DEBUGSS_TRC 5
|
||||||
#define K2HK_LPSC_TETB_TRC 6
|
#define KS2_LPSC_TETB_TRC 6
|
||||||
#define K2HK_LPSC_PKTPROC 7
|
#define KS2_LPSC_PKTPROC 7
|
||||||
#define KS2_LPSC_PA K2HK_LPSC_PKTPROC
|
#define KS2_LPSC_PA KS2_LPSC_PKTPROC
|
||||||
#define K2HK_LPSC_SGMII 8
|
#define KS2_LPSC_SGMII 8
|
||||||
#define KS2_LPSC_CPGMAC K2HK_LPSC_SGMII
|
#define KS2_LPSC_CPGMAC KS2_LPSC_SGMII
|
||||||
#define K2HK_LPSC_CRYPTO 9
|
#define KS2_LPSC_CRYPTO 9
|
||||||
#define K2HK_LPSC_PCIE 10
|
#define KS2_LPSC_PCIE 10
|
||||||
#define K2HK_LPSC_SRIO 11
|
#define KS2_LPSC_SRIO 11
|
||||||
#define K2HK_LPSC_VUSR0 12
|
#define KS2_LPSC_VUSR0 12
|
||||||
#define K2HK_LPSC_CHIP_SRSS 13
|
#define KS2_LPSC_CHIP_SRSS 13
|
||||||
#define K2HK_LPSC_MSMC 14
|
#define KS2_LPSC_MSMC 14
|
||||||
#define K2HK_LPSC_GEM_0 15
|
#define KS2_LPSC_GEM_1 16
|
||||||
#define K2HK_LPSC_GEM_1 16
|
#define KS2_LPSC_GEM_2 17
|
||||||
#define K2HK_LPSC_GEM_2 17
|
#define KS2_LPSC_GEM_3 18
|
||||||
#define K2HK_LPSC_GEM_3 18
|
#define KS2_LPSC_GEM_4 19
|
||||||
#define K2HK_LPSC_GEM_4 19
|
#define KS2_LPSC_GEM_5 20
|
||||||
#define K2HK_LPSC_GEM_5 20
|
#define KS2_LPSC_GEM_6 21
|
||||||
#define K2HK_LPSC_GEM_6 21
|
#define KS2_LPSC_GEM_7 22
|
||||||
#define K2HK_LPSC_GEM_7 22
|
#define KS2_LPSC_EMIF4F_DDR3A 23
|
||||||
#define K2HK_LPSC_EMIF4F_DDR3A 23
|
#define KS2_LPSC_EMIF4F_DDR3B 24
|
||||||
#define K2HK_LPSC_EMIF4F_DDR3B 24
|
#define KS2_LPSC_TAC 25
|
||||||
#define K2HK_LPSC_TAC 25
|
#define KS2_LPSC_RAC 26
|
||||||
#define K2HK_LPSC_RAC 26
|
#define KS2_LPSC_RAC_1 27
|
||||||
#define K2HK_LPSC_RAC_1 27
|
#define KS2_LPSC_FFTC_A 28
|
||||||
#define K2HK_LPSC_FFTC_A 28
|
#define KS2_LPSC_FFTC_B 29
|
||||||
#define K2HK_LPSC_FFTC_B 29
|
#define KS2_LPSC_FFTC_C 30
|
||||||
#define K2HK_LPSC_FFTC_C 30
|
#define KS2_LPSC_FFTC_D 31
|
||||||
#define K2HK_LPSC_FFTC_D 31
|
#define KS2_LPSC_FFTC_E 32
|
||||||
#define K2HK_LPSC_FFTC_E 32
|
#define KS2_LPSC_FFTC_F 33
|
||||||
#define K2HK_LPSC_FFTC_F 33
|
#define KS2_LPSC_AI2 34
|
||||||
#define K2HK_LPSC_AI2 34
|
#define KS2_LPSC_TCP3D_0 35
|
||||||
#define K2HK_LPSC_TCP3D_0 35
|
#define KS2_LPSC_TCP3D_1 36
|
||||||
#define K2HK_LPSC_TCP3D_1 36
|
#define KS2_LPSC_TCP3D_2 37
|
||||||
#define K2HK_LPSC_TCP3D_2 37
|
#define KS2_LPSC_TCP3D_3 38
|
||||||
#define K2HK_LPSC_TCP3D_3 38
|
#define KS2_LPSC_VCP2X4_A 39
|
||||||
#define K2HK_LPSC_VCP2X4_A 39
|
#define KS2_LPSC_CP2X4_B 40
|
||||||
#define K2HK_LPSC_CP2X4_B 40
|
#define KS2_LPSC_VCP2X4_C 41
|
||||||
#define K2HK_LPSC_VCP2X4_C 41
|
#define KS2_LPSC_VCP2X4_D 42
|
||||||
#define K2HK_LPSC_VCP2X4_D 42
|
#define KS2_LPSC_VCP2X4_E 43
|
||||||
#define K2HK_LPSC_VCP2X4_E 43
|
#define KS2_LPSC_VCP2X4_F 44
|
||||||
#define K2HK_LPSC_VCP2X4_F 44
|
#define KS2_LPSC_VCP2X4_G 45
|
||||||
#define K2HK_LPSC_VCP2X4_G 45
|
#define KS2_LPSC_VCP2X4_H 46
|
||||||
#define K2HK_LPSC_VCP2X4_H 46
|
#define KS2_LPSC_BCP 47
|
||||||
#define K2HK_LPSC_BCP 47
|
#define KS2_LPSC_DXB 48
|
||||||
#define K2HK_LPSC_DXB 48
|
#define KS2_LPSC_VUSR1 49
|
||||||
#define K2HK_LPSC_VUSR1 49
|
#define KS2_LPSC_XGE 50
|
||||||
#define K2HK_LPSC_XGE 50
|
#define KS2_LPSC_ARM_SREFLEX 51
|
||||||
#define K2HK_LPSC_ARM_SREFLEX 51
|
|
||||||
#define K2HK_LPSC_TETRIS 52
|
|
||||||
|
|
||||||
/* DDR3A definitions */
|
|
||||||
#define K2HK_DDR3A_EMIF_CTRL_BASE 0x21010000
|
|
||||||
#define K2HK_DDR3A_EMIF_DATA_BASE 0x80000000
|
|
||||||
#define K2HK_DDR3A_DDRPHYC 0x02329000
|
|
||||||
/* DDR3B definitions */
|
/* DDR3B definitions */
|
||||||
#define K2HK_DDR3B_EMIF_CTRL_BASE 0x21020000
|
#define KS2_DDR3B_EMIF_CTRL_BASE 0x21020000
|
||||||
#define K2HK_DDR3B_EMIF_DATA_BASE 0x60000000
|
#define KS2_DDR3B_EMIF_DATA_BASE 0x60000000
|
||||||
#define K2HK_DDR3B_DDRPHYC 0x02328000
|
#define KS2_DDR3B_DDRPHYC 0x02328000
|
||||||
|
|
||||||
/* Queue manager */
|
/* Number of DSP cores */
|
||||||
#define DEVICE_QM_MANAGER_BASE 0x02a02000
|
#define KS2_NUM_DSPS 8
|
||||||
#define DEVICE_QM_DESC_SETUP_BASE 0x02a03000
|
|
||||||
#define DEVICE_QM_MANAGER_QUEUES_BASE 0x02a80000
|
|
||||||
#define DEVICE_QM_MANAGER_Q_PROXY_BASE 0x02ac0000
|
|
||||||
#define DEVICE_QM_QUEUE_STATUS_BASE 0x02a40000
|
|
||||||
#define DEVICE_QM_NUM_LINKRAMS 2
|
|
||||||
#define DEVICE_QM_NUM_MEMREGIONS 20
|
|
||||||
|
|
||||||
#define DEVICE_PA_CDMA_GLOBAL_CFG_BASE 0x02004000
|
|
||||||
#define DEVICE_PA_CDMA_TX_CHAN_CFG_BASE 0x02004400
|
|
||||||
#define DEVICE_PA_CDMA_RX_CHAN_CFG_BASE 0x02004800
|
|
||||||
#define DEVICE_PA_CDMA_RX_FLOW_CFG_BASE 0x02005000
|
|
||||||
|
|
||||||
#define DEVICE_PA_CDMA_RX_NUM_CHANNELS 24
|
|
||||||
#define DEVICE_PA_CDMA_RX_NUM_FLOWS 32
|
|
||||||
#define DEVICE_PA_CDMA_TX_NUM_CHANNELS 9
|
|
||||||
|
|
||||||
/* MSMC control */
|
|
||||||
#define K2HK_MSMC_CTRL_BASE 0x0bc00000
|
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_HARDWARE_H */
|
#endif /* __ASM_ARCH_HARDWARE_H */
|
||||||
|
|
|
@ -22,42 +22,6 @@
|
||||||
typedef volatile unsigned int dv_reg;
|
typedef volatile unsigned int dv_reg;
|
||||||
typedef volatile unsigned int *dv_reg_p;
|
typedef volatile unsigned int *dv_reg_p;
|
||||||
|
|
||||||
struct ddr3_phy_config {
|
|
||||||
unsigned int pllcr;
|
|
||||||
unsigned int pgcr1_mask;
|
|
||||||
unsigned int pgcr1_val;
|
|
||||||
unsigned int ptr0;
|
|
||||||
unsigned int ptr1;
|
|
||||||
unsigned int ptr2;
|
|
||||||
unsigned int ptr3;
|
|
||||||
unsigned int ptr4;
|
|
||||||
unsigned int dcr_mask;
|
|
||||||
unsigned int dcr_val;
|
|
||||||
unsigned int dtpr0;
|
|
||||||
unsigned int dtpr1;
|
|
||||||
unsigned int dtpr2;
|
|
||||||
unsigned int mr0;
|
|
||||||
unsigned int mr1;
|
|
||||||
unsigned int mr2;
|
|
||||||
unsigned int dtcr;
|
|
||||||
unsigned int pgcr2;
|
|
||||||
unsigned int zq0cr1;
|
|
||||||
unsigned int zq1cr1;
|
|
||||||
unsigned int zq2cr1;
|
|
||||||
unsigned int pir_v1;
|
|
||||||
unsigned int pir_v2;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ddr3_emif_config {
|
|
||||||
unsigned int sdcfg;
|
|
||||||
unsigned int sdtim1;
|
|
||||||
unsigned int sdtim2;
|
|
||||||
unsigned int sdtim3;
|
|
||||||
unsigned int sdtim4;
|
|
||||||
unsigned int zqcfg;
|
|
||||||
unsigned int sdrfc;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BIT(x) (1 << (x))
|
#define BIT(x) (1 << (x))
|
||||||
|
@ -105,6 +69,11 @@ struct ddr3_emif_config {
|
||||||
#define NOSRA_MASK 0x08000000
|
#define NOSRA_MASK 0x08000000
|
||||||
#define ECC_MASK 0x00000001
|
#define ECC_MASK 0x00000001
|
||||||
|
|
||||||
|
/* DDR3 definitions */
|
||||||
|
#define KS2_DDR3A_EMIF_CTRL_BASE 0x21010000
|
||||||
|
#define KS2_DDR3A_EMIF_DATA_BASE 0x80000000
|
||||||
|
#define KS2_DDR3A_DDRPHYC 0x02329000
|
||||||
|
|
||||||
#define KS2_DDR3_MIDR_OFFSET 0x00
|
#define KS2_DDR3_MIDR_OFFSET 0x00
|
||||||
#define KS2_DDR3_STATUS_OFFSET 0x04
|
#define KS2_DDR3_STATUS_OFFSET 0x04
|
||||||
#define KS2_DDR3_SDCFG_OFFSET 0x08
|
#define KS2_DDR3_SDCFG_OFFSET 0x08
|
||||||
|
@ -116,39 +85,103 @@ struct ddr3_emif_config {
|
||||||
#define KS2_DDR3_PMCTL_OFFSET 0x38
|
#define KS2_DDR3_PMCTL_OFFSET 0x38
|
||||||
#define KS2_DDR3_ZQCFG_OFFSET 0xC8
|
#define KS2_DDR3_ZQCFG_OFFSET 0xC8
|
||||||
|
|
||||||
|
#define KS2_DDR3_PLLCTRL_PHY_RESET 0x80000000
|
||||||
|
|
||||||
#define KS2_UART0_BASE 0x02530c00
|
#define KS2_UART0_BASE 0x02530c00
|
||||||
#define KS2_UART1_BASE 0x02531000
|
#define KS2_UART1_BASE 0x02531000
|
||||||
|
|
||||||
|
/* Boot Config */
|
||||||
|
#define KS2_DEVICE_STATE_CTRL_BASE 0x02620000
|
||||||
|
#define KS2_JTAG_ID_REG (KS2_DEVICE_STATE_CTRL_BASE + 0x18)
|
||||||
|
#define KS2_DEVSTAT (KS2_DEVICE_STATE_CTRL_BASE + 0x20)
|
||||||
|
|
||||||
|
/* PSC */
|
||||||
|
#define KS2_PSC_BASE 0x02350000
|
||||||
|
#define KS2_LPSC_GEM_0 15
|
||||||
|
#define KS2_LPSC_TETRIS 52
|
||||||
|
#define KS2_TETRIS_PWR_DOMAIN 31
|
||||||
|
|
||||||
|
/* Chip configuration unlock codes and registers */
|
||||||
|
#define KS2_KICK0 (KS2_DEVICE_STATE_CTRL_BASE + 0x38)
|
||||||
|
#define KS2_KICK1 (KS2_DEVICE_STATE_CTRL_BASE + 0x3c)
|
||||||
|
#define KS2_KICK0_MAGIC 0x83e70b13
|
||||||
|
#define KS2_KICK1_MAGIC 0x95a4f1e0
|
||||||
|
|
||||||
|
/* PLL control registers */
|
||||||
|
#define KS2_MAINPLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x350)
|
||||||
|
#define KS2_MAINPLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x354)
|
||||||
|
#define KS2_PASSPLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x358)
|
||||||
|
#define KS2_PASSPLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x35C)
|
||||||
|
#define KS2_DDR3APLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x360)
|
||||||
|
#define KS2_DDR3APLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x364)
|
||||||
|
#define KS2_ARMPLLCTL0 (KS2_DEVICE_STATE_CTRL_BASE + 0x370)
|
||||||
|
#define KS2_ARMPLLCTL1 (KS2_DEVICE_STATE_CTRL_BASE + 0x374)
|
||||||
|
|
||||||
|
#define KS2_PLL_CNTRL_BASE 0x02310000
|
||||||
|
#define KS2_CLOCK_BASE KS2_PLL_CNTRL_BASE
|
||||||
|
#define KS2_RSTCTRL_RSTYPE (KS2_PLL_CNTRL_BASE + 0xe4)
|
||||||
|
#define KS2_RSTCTRL (KS2_PLL_CNTRL_BASE + 0xe8)
|
||||||
|
#define KS2_RSTCTRL_KEY 0x5a69
|
||||||
|
#define KS2_RSTCTRL_MASK 0xffff0000
|
||||||
|
#define KS2_RSTCTRL_SWRST 0xfffe0000
|
||||||
|
|
||||||
|
/* SPI */
|
||||||
|
#define KS2_SPI0_BASE 0x21000400
|
||||||
|
#define KS2_SPI1_BASE 0x21000600
|
||||||
|
#define KS2_SPI2_BASE 0x21000800
|
||||||
|
#define KS2_SPI_BASE KS2_SPI0_BASE
|
||||||
|
|
||||||
/* AEMIF */
|
/* AEMIF */
|
||||||
#define KS2_AEMIF_CNTRL_BASE 0x21000a00
|
#define KS2_AEMIF_CNTRL_BASE 0x21000a00
|
||||||
#define DAVINCI_ASYNC_EMIF_CNTRL_BASE KS2_AEMIF_CNTRL_BASE
|
#define DAVINCI_ASYNC_EMIF_CNTRL_BASE KS2_AEMIF_CNTRL_BASE
|
||||||
|
|
||||||
|
/* Flag from ks2_debug options to check if DSPs need to stay ON */
|
||||||
|
#define DBG_LEAVE_DSPS_ON 0x1
|
||||||
|
|
||||||
|
/* Queue manager */
|
||||||
|
#define KS2_QM_MANAGER_BASE 0x02a02000
|
||||||
|
#define KS2_QM_DESC_SETUP_BASE 0x02a03000
|
||||||
|
#define KS2_QM_MANAGER_QUEUES_BASEi 0x02a80000
|
||||||
|
#define KS2_QM_MANAGER_Q_PROXY_BASE 0x02ac0000
|
||||||
|
#define KS2_QM_QUEUE_STATUS_BASE 0x02a40000
|
||||||
|
|
||||||
|
/* MSMC control */
|
||||||
|
#define KS2_MSMC_CTRL_BASE 0x0bc00000
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_K2HK
|
#ifdef CONFIG_SOC_K2HK
|
||||||
#include <asm/arch/hardware-k2hk.h>
|
#include <asm/arch/hardware-k2hk.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SOC_K2E
|
||||||
|
#include <asm/arch/hardware-k2e.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
static inline int cpu_is_k2hk(void)
|
static inline int cpu_is_k2hk(void)
|
||||||
{
|
{
|
||||||
unsigned int jtag_id = __raw_readl(JTAG_ID_REG);
|
unsigned int jtag_id = __raw_readl(KS2_JTAG_ID_REG);
|
||||||
unsigned int part_no = (jtag_id >> 12) & 0xffff;
|
unsigned int part_no = (jtag_id >> 12) & 0xffff;
|
||||||
|
|
||||||
return (part_no == 0xb981) ? 1 : 0;
|
return (part_no == 0xb981) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int cpu_is_k2e(void)
|
||||||
|
{
|
||||||
|
unsigned int jtag_id = __raw_readl(KS2_JTAG_ID_REG);
|
||||||
|
unsigned int part_no = (jtag_id >> 12) & 0xffff;
|
||||||
|
|
||||||
|
return (part_no == 0xb9a6) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int cpu_revision(void)
|
static inline int cpu_revision(void)
|
||||||
{
|
{
|
||||||
unsigned int jtag_id = __raw_readl(JTAG_ID_REG);
|
unsigned int jtag_id = __raw_readl(KS2_JTAG_ID_REG);
|
||||||
unsigned int rev = (jtag_id >> 28) & 0xf;
|
unsigned int rev = (jtag_id >> 28) & 0xf;
|
||||||
|
|
||||||
return rev;
|
return rev;
|
||||||
}
|
}
|
||||||
|
|
||||||
void share_all_segments(int priv_id);
|
|
||||||
int cpu_to_bus(u32 *ptr, u32 length);
|
int cpu_to_bus(u32 *ptr, u32 length);
|
||||||
void init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg);
|
|
||||||
void init_ddremif(u32 base, struct ddr3_emif_config *emif_cfg);
|
|
||||||
void init_ddr3(void);
|
|
||||||
void sdelay(unsigned long);
|
void sdelay(unsigned long);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
15
arch/arm/include/asm/arch-keystone/mon.h
Normal file
15
arch/arm/include/asm/arch-keystone/mon.h
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
/*
|
||||||
|
* K2HK: secure kernel command header file
|
||||||
|
*
|
||||||
|
* (C) Copyright 2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MON_H_
|
||||||
|
#define _MON_H_
|
||||||
|
|
||||||
|
int mon_power_off(int core_id);
|
||||||
|
|
||||||
|
#endif
|
17
arch/arm/include/asm/arch-keystone/msmc.h
Normal file
17
arch/arm/include/asm/arch-keystone/msmc.h
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/*
|
||||||
|
* MSMC controller
|
||||||
|
*
|
||||||
|
* (C) Copyright 2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MSMC_H_
|
||||||
|
#define _MSMC_H_
|
||||||
|
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
|
void msmc_share_all_segments(int priv_id);
|
||||||
|
|
||||||
|
#endif
|
|
@ -98,7 +98,6 @@ struct ctrl_id {
|
||||||
#define DEBUG_BASE 0x08000000 /* debug board */
|
#define DEBUG_BASE 0x08000000 /* debug board */
|
||||||
#define NAND_BASE 0x30000000 /* NAND addr */
|
#define NAND_BASE 0x30000000 /* NAND addr */
|
||||||
/* (actual size small port) */
|
/* (actual size small port) */
|
||||||
#define PISMO2_BASE 0x18000000 /* PISMO2 CS1/2 */
|
|
||||||
#define ONENAND_MAP 0x20000000 /* OneNand addr */
|
#define ONENAND_MAP 0x20000000 /* OneNand addr */
|
||||||
/* (actual size small port) */
|
/* (actual size small port) */
|
||||||
/* SMS */
|
/* SMS */
|
||||||
|
|
|
@ -427,20 +427,7 @@ enum {
|
||||||
/* max number of GPMC regs */
|
/* max number of GPMC regs */
|
||||||
#define GPMC_MAX_REG 7
|
#define GPMC_MAX_REG 7
|
||||||
|
|
||||||
#define PISMO1_NOR 1
|
|
||||||
#define PISMO1_NAND 2
|
|
||||||
#define PISMO2_CS0 3
|
|
||||||
#define PISMO2_CS1 4
|
|
||||||
#define PISMO1_ONENAND 5
|
|
||||||
#define DBG_MPDB 6
|
#define DBG_MPDB 6
|
||||||
#define PISMO2_NAND_CS0 7
|
|
||||||
#define PISMO2_NAND_CS1 8
|
|
||||||
|
|
||||||
/* make it readable for the gpmc_init */
|
|
||||||
#define PISMO1_NOR_BASE FLASH_BASE
|
|
||||||
#define PISMO1_NAND_BASE NAND_BASE
|
|
||||||
#define PISMO2_CS0_BASE PISMO2_MAP1
|
|
||||||
#define PISMO1_ONEN_BASE ONENAND_MAP
|
|
||||||
#define DBG_MPDB_BASE DEBUG_BASE
|
#define DBG_MPDB_BASE DEBUG_BASE
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
|
@ -595,6 +595,14 @@ static inline u32 omap_revision(void)
|
||||||
return *omap_si_rev;
|
return *omap_si_rev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define OMAP44xx 0x44000000
|
||||||
|
|
||||||
|
static inline u8 is_omap44xx(void)
|
||||||
|
{
|
||||||
|
extern u32 *const omap_si_rev;
|
||||||
|
return (*omap_si_rev & 0xFF000000) == OMAP44xx;
|
||||||
|
};
|
||||||
|
|
||||||
#define OMAP54xx 0x54000000
|
#define OMAP54xx 0x54000000
|
||||||
|
|
||||||
static inline u8 is_omap54xx(void)
|
static inline u8 is_omap54xx(void)
|
||||||
|
|
|
@ -34,41 +34,17 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
#ifdef CONFIG_SPL_BUILD
|
#ifdef CONFIG_SPL_BUILD
|
||||||
static const struct ddr_data ddr2_data = {
|
static const struct ddr_data ddr2_data = {
|
||||||
.datardsratio0 = ((MT47H128M16RT25E_RD_DQS<<30) |
|
.datardsratio0 = MT47H128M16RT25E_RD_DQS,
|
||||||
(MT47H128M16RT25E_RD_DQS<<20) |
|
.datafwsratio0 = MT47H128M16RT25E_PHY_FIFO_WE,
|
||||||
(MT47H128M16RT25E_RD_DQS<<10) |
|
.datawrsratio0 = MT47H128M16RT25E_PHY_WR_DATA,
|
||||||
(MT47H128M16RT25E_RD_DQS<<0)),
|
|
||||||
.datawdsratio0 = ((MT47H128M16RT25E_WR_DQS<<30) |
|
|
||||||
(MT47H128M16RT25E_WR_DQS<<20) |
|
|
||||||
(MT47H128M16RT25E_WR_DQS<<10) |
|
|
||||||
(MT47H128M16RT25E_WR_DQS<<0)),
|
|
||||||
.datawiratio0 = ((MT47H128M16RT25E_PHY_WRLVL<<30) |
|
|
||||||
(MT47H128M16RT25E_PHY_WRLVL<<20) |
|
|
||||||
(MT47H128M16RT25E_PHY_WRLVL<<10) |
|
|
||||||
(MT47H128M16RT25E_PHY_WRLVL<<0)),
|
|
||||||
.datagiratio0 = ((MT47H128M16RT25E_PHY_GATELVL<<30) |
|
|
||||||
(MT47H128M16RT25E_PHY_GATELVL<<20) |
|
|
||||||
(MT47H128M16RT25E_PHY_GATELVL<<10) |
|
|
||||||
(MT47H128M16RT25E_PHY_GATELVL<<0)),
|
|
||||||
.datafwsratio0 = ((MT47H128M16RT25E_PHY_FIFO_WE<<30) |
|
|
||||||
(MT47H128M16RT25E_PHY_FIFO_WE<<20) |
|
|
||||||
(MT47H128M16RT25E_PHY_FIFO_WE<<10) |
|
|
||||||
(MT47H128M16RT25E_PHY_FIFO_WE<<0)),
|
|
||||||
.datawrsratio0 = ((MT47H128M16RT25E_PHY_WR_DATA<<30) |
|
|
||||||
(MT47H128M16RT25E_PHY_WR_DATA<<20) |
|
|
||||||
(MT47H128M16RT25E_PHY_WR_DATA<<10) |
|
|
||||||
(MT47H128M16RT25E_PHY_WR_DATA<<0)),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct cmd_control ddr2_cmd_ctrl_data = {
|
static const struct cmd_control ddr2_cmd_ctrl_data = {
|
||||||
.cmd0csratio = MT47H128M16RT25E_RATIO,
|
.cmd0csratio = MT47H128M16RT25E_RATIO,
|
||||||
.cmd0iclkout = MT47H128M16RT25E_INVERT_CLKOUT,
|
|
||||||
|
|
||||||
.cmd1csratio = MT47H128M16RT25E_RATIO,
|
.cmd1csratio = MT47H128M16RT25E_RATIO,
|
||||||
.cmd1iclkout = MT47H128M16RT25E_INVERT_CLKOUT,
|
|
||||||
|
|
||||||
.cmd2csratio = MT47H128M16RT25E_RATIO,
|
.cmd2csratio = MT47H128M16RT25E_RATIO,
|
||||||
.cmd2iclkout = MT47H128M16RT25E_INVERT_CLKOUT,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct emif_regs ddr2_emif_reg_data = {
|
static const struct emif_regs ddr2_emif_reg_data = {
|
||||||
|
|
|
@ -84,41 +84,17 @@ static int read_eeprom(struct am335x_baseboard_id *header)
|
||||||
|
|
||||||
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
|
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
|
||||||
static const struct ddr_data ddr2_data = {
|
static const struct ddr_data ddr2_data = {
|
||||||
.datardsratio0 = ((MT47H128M16RT25E_RD_DQS<<30) |
|
.datardsratio0 = MT47H128M16RT25E_RD_DQS,
|
||||||
(MT47H128M16RT25E_RD_DQS<<20) |
|
.datafwsratio0 = MT47H128M16RT25E_PHY_FIFO_WE,
|
||||||
(MT47H128M16RT25E_RD_DQS<<10) |
|
.datawrsratio0 = MT47H128M16RT25E_PHY_WR_DATA,
|
||||||
(MT47H128M16RT25E_RD_DQS<<0)),
|
|
||||||
.datawdsratio0 = ((MT47H128M16RT25E_WR_DQS<<30) |
|
|
||||||
(MT47H128M16RT25E_WR_DQS<<20) |
|
|
||||||
(MT47H128M16RT25E_WR_DQS<<10) |
|
|
||||||
(MT47H128M16RT25E_WR_DQS<<0)),
|
|
||||||
.datawiratio0 = ((MT47H128M16RT25E_PHY_WRLVL<<30) |
|
|
||||||
(MT47H128M16RT25E_PHY_WRLVL<<20) |
|
|
||||||
(MT47H128M16RT25E_PHY_WRLVL<<10) |
|
|
||||||
(MT47H128M16RT25E_PHY_WRLVL<<0)),
|
|
||||||
.datagiratio0 = ((MT47H128M16RT25E_PHY_GATELVL<<30) |
|
|
||||||
(MT47H128M16RT25E_PHY_GATELVL<<20) |
|
|
||||||
(MT47H128M16RT25E_PHY_GATELVL<<10) |
|
|
||||||
(MT47H128M16RT25E_PHY_GATELVL<<0)),
|
|
||||||
.datafwsratio0 = ((MT47H128M16RT25E_PHY_FIFO_WE<<30) |
|
|
||||||
(MT47H128M16RT25E_PHY_FIFO_WE<<20) |
|
|
||||||
(MT47H128M16RT25E_PHY_FIFO_WE<<10) |
|
|
||||||
(MT47H128M16RT25E_PHY_FIFO_WE<<0)),
|
|
||||||
.datawrsratio0 = ((MT47H128M16RT25E_PHY_WR_DATA<<30) |
|
|
||||||
(MT47H128M16RT25E_PHY_WR_DATA<<20) |
|
|
||||||
(MT47H128M16RT25E_PHY_WR_DATA<<10) |
|
|
||||||
(MT47H128M16RT25E_PHY_WR_DATA<<0)),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct cmd_control ddr2_cmd_ctrl_data = {
|
static const struct cmd_control ddr2_cmd_ctrl_data = {
|
||||||
.cmd0csratio = MT47H128M16RT25E_RATIO,
|
.cmd0csratio = MT47H128M16RT25E_RATIO,
|
||||||
.cmd0iclkout = MT47H128M16RT25E_INVERT_CLKOUT,
|
|
||||||
|
|
||||||
.cmd1csratio = MT47H128M16RT25E_RATIO,
|
.cmd1csratio = MT47H128M16RT25E_RATIO,
|
||||||
.cmd1iclkout = MT47H128M16RT25E_INVERT_CLKOUT,
|
|
||||||
|
|
||||||
.cmd2csratio = MT47H128M16RT25E_RATIO,
|
.cmd2csratio = MT47H128M16RT25E_RATIO,
|
||||||
.cmd2iclkout = MT47H128M16RT25E_INVERT_CLKOUT,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct emif_regs ddr2_emif_reg_data = {
|
static const struct emif_regs ddr2_emif_reg_data = {
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <asm/arch/gpio.h>
|
#include <asm/arch/gpio.h>
|
||||||
#include <asm/emif.h>
|
#include <asm/emif.h>
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
|
#include <power/pmic.h>
|
||||||
#include <power/tps65218.h>
|
#include <power/tps65218.h>
|
||||||
#include <miiphy.h>
|
#include <miiphy.h>
|
||||||
#include <cpsw.h>
|
#include <cpsw.h>
|
||||||
|
@ -605,6 +606,19 @@ void sdram_init(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* setup board specific PMIC */
|
||||||
|
int power_init_board(void)
|
||||||
|
{
|
||||||
|
struct pmic *p;
|
||||||
|
|
||||||
|
power_tps65218_init(I2C_PMIC);
|
||||||
|
p = pmic_get("TPS65218_PMIC");
|
||||||
|
if (p && !pmic_probe(p))
|
||||||
|
puts("PMIC: TPS65218\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int board_init(void)
|
int board_init(void)
|
||||||
{
|
{
|
||||||
struct l3f_cfg_bwlimiter *bwlimiter = (struct l3f_cfg_bwlimiter *)L3F_CFG_BWLIMITER;
|
struct l3f_cfg_bwlimiter *bwlimiter = (struct l3f_cfg_bwlimiter *)L3F_CFG_BWLIMITER;
|
||||||
|
|
|
@ -163,6 +163,8 @@ int spl_start_uboot(void)
|
||||||
#define VIN2A_D15_DLY_VAL ((0x4 << 5) + 0x0)
|
#define VIN2A_D15_DLY_VAL ((0x4 << 5) + 0x0)
|
||||||
#define VIN2A_D14_DLY_VAL ((0x4 << 5) + 0x0)
|
#define VIN2A_D14_DLY_VAL ((0x4 << 5) + 0x0)
|
||||||
|
|
||||||
|
extern u32 *const omap_si_rev;
|
||||||
|
|
||||||
static void cpsw_control(int enabled)
|
static void cpsw_control(int enabled)
|
||||||
{
|
{
|
||||||
/* VTP can be added here */
|
/* VTP can be added here */
|
||||||
|
@ -189,7 +191,7 @@ static struct cpsw_platform_data cpsw_data = {
|
||||||
.mdio_div = 0xff,
|
.mdio_div = 0xff,
|
||||||
.channels = 8,
|
.channels = 8,
|
||||||
.cpdma_reg_ofs = 0x800,
|
.cpdma_reg_ofs = 0x800,
|
||||||
.slaves = 1,
|
.slaves = 2,
|
||||||
.slave_data = cpsw_slaves,
|
.slave_data = cpsw_slaves,
|
||||||
.ale_reg_ofs = 0xd00,
|
.ale_reg_ofs = 0xd00,
|
||||||
.ale_entries = 1024,
|
.ale_entries = 1024,
|
||||||
|
@ -260,6 +262,9 @@ int board_eth_init(bd_t *bis)
|
||||||
ctrl_val |= 0x22;
|
ctrl_val |= 0x22;
|
||||||
writel(ctrl_val, (*ctrl)->control_core_control_io1);
|
writel(ctrl_val, (*ctrl)->control_core_control_io1);
|
||||||
|
|
||||||
|
if (*omap_si_rev == DRA722_ES1_0)
|
||||||
|
cpsw_data.active_slave = 1;
|
||||||
|
|
||||||
ret = cpsw_register(&cpsw_data);
|
ret = cpsw_register(&cpsw_data);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
printf("Error %d registering CPSW switch\n", ret);
|
printf("Error %d registering CPSW switch\n", ret);
|
||||||
|
|
|
@ -56,6 +56,18 @@ const struct pad_conf_entry core_padconf_array_essential[] = {
|
||||||
{RGMII0_RXD2, (IEN | M0) },
|
{RGMII0_RXD2, (IEN | M0) },
|
||||||
{RGMII0_RXD1, (IEN | M0) },
|
{RGMII0_RXD1, (IEN | M0) },
|
||||||
{RGMII0_RXD0, (IEN | M0) },
|
{RGMII0_RXD0, (IEN | M0) },
|
||||||
|
{VIN2A_D12, (M3) },
|
||||||
|
{VIN2A_D13, (M3) },
|
||||||
|
{VIN2A_D14, (M3) },
|
||||||
|
{VIN2A_D15, (M3) },
|
||||||
|
{VIN2A_D16, (M3) },
|
||||||
|
{VIN2A_D17, (M3) },
|
||||||
|
{VIN2A_D18, (IEN | M3)},
|
||||||
|
{VIN2A_D19, (IEN | M3)},
|
||||||
|
{VIN2A_D20, (IEN | M3)},
|
||||||
|
{VIN2A_D21, (IEN | M3)},
|
||||||
|
{VIN2A_D22, (IEN | M3)},
|
||||||
|
{VIN2A_D23, (IEN | M3)},
|
||||||
{GPMC_A13, (IEN | PDIS | M1)}, /* QSPI1_RTCLK */
|
{GPMC_A13, (IEN | PDIS | M1)}, /* QSPI1_RTCLK */
|
||||||
{GPMC_A14, (IEN | PDIS | M1)}, /* QSPI1_D[3] */
|
{GPMC_A14, (IEN | PDIS | M1)}, /* QSPI1_D[3] */
|
||||||
{GPMC_A15, (IEN | PDIS | M1)}, /* QSPI1_D[2] */
|
{GPMC_A15, (IEN | PDIS | M1)}, /* QSPI1_D[2] */
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
#
|
|
||||||
# K2HK-EVM: board Makefile
|
|
||||||
# (C) Copyright 2012-2014
|
|
||||||
# Texas Instruments Incorporated, <www.ti.com>
|
|
||||||
# SPDX-License-Identifier: GPL-2.0+
|
|
||||||
#
|
|
||||||
|
|
||||||
obj-y += board.o
|
|
||||||
obj-y += ddr3.o
|
|
|
@ -1,268 +0,0 @@
|
||||||
/*
|
|
||||||
* Keystone2: DDR3 initialization
|
|
||||||
*
|
|
||||||
* (C) Copyright 2012-2014
|
|
||||||
* Texas Instruments Incorporated, <www.ti.com>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <asm/arch/hardware.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <i2c.h>
|
|
||||||
|
|
||||||
/************************* *****************************/
|
|
||||||
static struct ddr3_phy_config ddr3phy_1600_64A = {
|
|
||||||
.pllcr = 0x0001C000ul,
|
|
||||||
.pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
|
|
||||||
.pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
|
|
||||||
.ptr0 = 0x42C21590ul,
|
|
||||||
.ptr1 = 0xD05612C0ul,
|
|
||||||
.ptr2 = 0, /* not set in gel */
|
|
||||||
.ptr3 = 0x0D861A80ul,
|
|
||||||
.ptr4 = 0x0C827100ul,
|
|
||||||
.dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK | NOSRA_MASK),
|
|
||||||
.dcr_val = ((1 << 10) | (1 << 27)),
|
|
||||||
.dtpr0 = 0xA19DBB66ul,
|
|
||||||
.dtpr1 = 0x12868300ul,
|
|
||||||
.dtpr2 = 0x50035200ul,
|
|
||||||
.mr0 = 0x00001C70ul,
|
|
||||||
.mr1 = 0x00000006ul,
|
|
||||||
.mr2 = 0x00000018ul,
|
|
||||||
.dtcr = 0x730035C7ul,
|
|
||||||
.pgcr2 = 0x00F07A12ul,
|
|
||||||
.zq0cr1 = 0x0000005Dul,
|
|
||||||
.zq1cr1 = 0x0000005Bul,
|
|
||||||
.zq2cr1 = 0x0000005Bul,
|
|
||||||
.pir_v1 = 0x00000033ul,
|
|
||||||
.pir_v2 = 0x0000FF81ul,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct ddr3_emif_config ddr3_1600_64 = {
|
|
||||||
.sdcfg = 0x6200CE6aul,
|
|
||||||
.sdtim1 = 0x16709C55ul,
|
|
||||||
.sdtim2 = 0x00001D4Aul,
|
|
||||||
.sdtim3 = 0x435DFF54ul,
|
|
||||||
.sdtim4 = 0x553F0CFFul,
|
|
||||||
.zqcfg = 0xF0073200ul,
|
|
||||||
.sdrfc = 0x00001869ul,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct ddr3_phy_config ddr3phy_1600_32 = {
|
|
||||||
.pllcr = 0x0001C000ul,
|
|
||||||
.pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
|
|
||||||
.pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
|
|
||||||
.ptr0 = 0x42C21590ul,
|
|
||||||
.ptr1 = 0xD05612C0ul,
|
|
||||||
.ptr2 = 0, /* not set in gel */
|
|
||||||
.ptr3 = 0x0D861A80ul,
|
|
||||||
.ptr4 = 0x0C827100ul,
|
|
||||||
.dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK | NOSRA_MASK),
|
|
||||||
.dcr_val = ((1 << 10) | (1 << 27)),
|
|
||||||
.dtpr0 = 0xA19DBB66ul,
|
|
||||||
.dtpr1 = 0x12868300ul,
|
|
||||||
.dtpr2 = 0x50035200ul,
|
|
||||||
.mr0 = 0x00001C70ul,
|
|
||||||
.mr1 = 0x00000006ul,
|
|
||||||
.mr2 = 0x00000018ul,
|
|
||||||
.dtcr = 0x730035C7ul,
|
|
||||||
.pgcr2 = 0x00F07A12ul,
|
|
||||||
.zq0cr1 = 0x0000005Dul,
|
|
||||||
.zq1cr1 = 0x0000005Bul,
|
|
||||||
.zq2cr1 = 0x0000005Bul,
|
|
||||||
.pir_v1 = 0x00000033ul,
|
|
||||||
.pir_v2 = 0x0000FF81ul,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct ddr3_emif_config ddr3_1600_32 = {
|
|
||||||
.sdcfg = 0x6200DE6aul,
|
|
||||||
.sdtim1 = 0x16709C55ul,
|
|
||||||
.sdtim2 = 0x00001D4Aul,
|
|
||||||
.sdtim3 = 0x435DFF54ul,
|
|
||||||
.sdtim4 = 0x553F0CFFul,
|
|
||||||
.zqcfg = 0x70073200ul,
|
|
||||||
.sdrfc = 0x00001869ul,
|
|
||||||
};
|
|
||||||
|
|
||||||
/************************* *****************************/
|
|
||||||
static struct ddr3_phy_config ddr3phy_1333_64A = {
|
|
||||||
.pllcr = 0x0005C000ul,
|
|
||||||
.pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
|
|
||||||
.pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
|
|
||||||
.ptr0 = 0x42C21590ul,
|
|
||||||
.ptr1 = 0xD05612C0ul,
|
|
||||||
.ptr2 = 0, /* not set in gel */
|
|
||||||
.ptr3 = 0x0B4515C2ul,
|
|
||||||
.ptr4 = 0x0A6E08B4ul,
|
|
||||||
.dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK |
|
|
||||||
NOSRA_MASK | UDIMM_MASK),
|
|
||||||
.dcr_val = ((1 << 10) | (1 << 27) | (1 << 29)),
|
|
||||||
.dtpr0 = 0x8558AA55ul,
|
|
||||||
.dtpr1 = 0x12857280ul,
|
|
||||||
.dtpr2 = 0x5002C200ul,
|
|
||||||
.mr0 = 0x00001A60ul,
|
|
||||||
.mr1 = 0x00000006ul,
|
|
||||||
.mr2 = 0x00000010ul,
|
|
||||||
.dtcr = 0x710035C7ul,
|
|
||||||
.pgcr2 = 0x00F065B8ul,
|
|
||||||
.zq0cr1 = 0x0000005Dul,
|
|
||||||
.zq1cr1 = 0x0000005Bul,
|
|
||||||
.zq2cr1 = 0x0000005Bul,
|
|
||||||
.pir_v1 = 0x00000033ul,
|
|
||||||
.pir_v2 = 0x0000FF81ul,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct ddr3_emif_config ddr3_1333_64 = {
|
|
||||||
.sdcfg = 0x62008C62ul,
|
|
||||||
.sdtim1 = 0x125C8044ul,
|
|
||||||
.sdtim2 = 0x00001D29ul,
|
|
||||||
.sdtim3 = 0x32CDFF43ul,
|
|
||||||
.sdtim4 = 0x543F0ADFul,
|
|
||||||
.zqcfg = 0xF0073200ul,
|
|
||||||
.sdrfc = 0x00001457ul,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct ddr3_phy_config ddr3phy_1333_32 = {
|
|
||||||
.pllcr = 0x0005C000ul,
|
|
||||||
.pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
|
|
||||||
.pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
|
|
||||||
.ptr0 = 0x42C21590ul,
|
|
||||||
.ptr1 = 0xD05612C0ul,
|
|
||||||
.ptr2 = 0, /* not set in gel */
|
|
||||||
.ptr3 = 0x0B4515C2ul,
|
|
||||||
.ptr4 = 0x0A6E08B4ul,
|
|
||||||
.dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK |
|
|
||||||
NOSRA_MASK | UDIMM_MASK),
|
|
||||||
.dcr_val = ((1 << 10) | (1 << 27) | (1 << 29)),
|
|
||||||
.dtpr0 = 0x8558AA55ul,
|
|
||||||
.dtpr1 = 0x12857280ul,
|
|
||||||
.dtpr2 = 0x5002C200ul,
|
|
||||||
.mr0 = 0x00001A60ul,
|
|
||||||
.mr1 = 0x00000006ul,
|
|
||||||
.mr2 = 0x00000010ul,
|
|
||||||
.dtcr = 0x710035C7ul,
|
|
||||||
.pgcr2 = 0x00F065B8ul,
|
|
||||||
.zq0cr1 = 0x0000005Dul,
|
|
||||||
.zq1cr1 = 0x0000005Bul,
|
|
||||||
.zq2cr1 = 0x0000005Bul,
|
|
||||||
.pir_v1 = 0x00000033ul,
|
|
||||||
.pir_v2 = 0x0000FF81ul,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct ddr3_emif_config ddr3_1333_32 = {
|
|
||||||
.sdcfg = 0x62009C62ul,
|
|
||||||
.sdtim1 = 0x125C8044ul,
|
|
||||||
.sdtim2 = 0x00001D29ul,
|
|
||||||
.sdtim3 = 0x32CDFF43ul,
|
|
||||||
.sdtim4 = 0x543F0ADFul,
|
|
||||||
.zqcfg = 0xf0073200ul,
|
|
||||||
.sdrfc = 0x00001457ul,
|
|
||||||
};
|
|
||||||
|
|
||||||
/************************* *****************************/
|
|
||||||
static struct ddr3_phy_config ddr3phy_1333_64 = {
|
|
||||||
.pllcr = 0x0005C000ul,
|
|
||||||
.pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
|
|
||||||
.pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
|
|
||||||
.ptr0 = 0x42C21590ul,
|
|
||||||
.ptr1 = 0xD05612C0ul,
|
|
||||||
.ptr2 = 0, /* not set in gel */
|
|
||||||
.ptr3 = 0x0B4515C2ul,
|
|
||||||
.ptr4 = 0x0A6E08B4ul,
|
|
||||||
.dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK | NOSRA_MASK),
|
|
||||||
.dcr_val = ((1 << 10) | (1 << 27)),
|
|
||||||
.dtpr0 = 0x8558AA55ul,
|
|
||||||
.dtpr1 = 0x12857280ul,
|
|
||||||
.dtpr2 = 0x5002C200ul,
|
|
||||||
.mr0 = 0x00001A60ul,
|
|
||||||
.mr1 = 0x00000006ul,
|
|
||||||
.mr2 = 0x00000010ul,
|
|
||||||
.dtcr = 0x710035C7ul,
|
|
||||||
.pgcr2 = 0x00F065B8ul,
|
|
||||||
.zq0cr1 = 0x0000005Dul,
|
|
||||||
.zq1cr1 = 0x0000005Bul,
|
|
||||||
.zq2cr1 = 0x0000005Bul,
|
|
||||||
.pir_v1 = 0x00000033ul,
|
|
||||||
.pir_v2 = 0x0000FF81ul,
|
|
||||||
};
|
|
||||||
/******************************************************/
|
|
||||||
int get_dimm_params(char *dimm_name)
|
|
||||||
{
|
|
||||||
u8 spd_params[256];
|
|
||||||
int ret;
|
|
||||||
int old_bus;
|
|
||||||
|
|
||||||
i2c_init(CONFIG_SYS_DAVINCI_I2C_SPEED, CONFIG_SYS_DAVINCI_I2C_SLAVE);
|
|
||||||
|
|
||||||
old_bus = i2c_get_bus_num();
|
|
||||||
i2c_set_bus_num(1);
|
|
||||||
|
|
||||||
ret = i2c_read(0x53, 0, 1, spd_params, 256);
|
|
||||||
|
|
||||||
i2c_set_bus_num(old_bus);
|
|
||||||
|
|
||||||
dimm_name[0] = '\0';
|
|
||||||
|
|
||||||
if (ret) {
|
|
||||||
puts("Cannot read DIMM params\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We need to convert spd data to dimm parameters
|
|
||||||
* and to DDR3 EMIF and PHY regirsters values.
|
|
||||||
* For now we just return DIMM type string value.
|
|
||||||
* Caller may use this value to choose appropriate
|
|
||||||
* a pre-set DDR3 configuration
|
|
||||||
*/
|
|
||||||
|
|
||||||
strncpy(dimm_name, (char *)&spd_params[0x80], 18);
|
|
||||||
dimm_name[18] = '\0';
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct pll_init_data ddr3a_333 = DDR3_PLL_333(A);
|
|
||||||
struct pll_init_data ddr3b_333 = DDR3_PLL_333(B);
|
|
||||||
struct pll_init_data ddr3a_400 = DDR3_PLL_400(A);
|
|
||||||
struct pll_init_data ddr3b_400 = DDR3_PLL_400(B);
|
|
||||||
|
|
||||||
void init_ddr3(void)
|
|
||||||
{
|
|
||||||
char dimm_name[32];
|
|
||||||
|
|
||||||
get_dimm_params(dimm_name);
|
|
||||||
|
|
||||||
printf("Detected SO-DIMM [%s]\n", dimm_name);
|
|
||||||
|
|
||||||
if (!strcmp(dimm_name, "18KSF1G72HZ-1G6E2 ")) {
|
|
||||||
init_pll(&ddr3a_400);
|
|
||||||
if (cpu_revision() > 0) {
|
|
||||||
init_ddrphy(K2HK_DDR3A_DDRPHYC, &ddr3phy_1600_64A);
|
|
||||||
init_ddremif(K2HK_DDR3A_EMIF_CTRL_BASE, &ddr3_1600_64);
|
|
||||||
printf("DRAM: Capacity 8 GiB (includes reported below)\n");
|
|
||||||
} else {
|
|
||||||
init_ddrphy(K2HK_DDR3A_DDRPHYC, &ddr3phy_1600_32);
|
|
||||||
init_ddremif(K2HK_DDR3A_EMIF_CTRL_BASE, &ddr3_1600_32);
|
|
||||||
printf("DRAM: Capacity 4 GiB (includes reported below)\n");
|
|
||||||
}
|
|
||||||
} else if (!strcmp(dimm_name, "SQR-SD3T-2G1333SED")) {
|
|
||||||
init_pll(&ddr3a_333);
|
|
||||||
if (cpu_revision() > 0) {
|
|
||||||
init_ddrphy(K2HK_DDR3A_DDRPHYC, &ddr3phy_1333_64A);
|
|
||||||
init_ddremif(K2HK_DDR3A_EMIF_CTRL_BASE, &ddr3_1333_64);
|
|
||||||
} else {
|
|
||||||
init_ddrphy(K2HK_DDR3A_DDRPHYC, &ddr3phy_1333_32);
|
|
||||||
init_ddremif(K2HK_DDR3A_EMIF_CTRL_BASE, &ddr3_1333_32);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
printf("Unknown SO-DIMM. Cannot configure DDR3\n");
|
|
||||||
while (1)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
init_pll(&ddr3b_333);
|
|
||||||
init_ddrphy(K2HK_DDR3B_DDRPHYC, &ddr3phy_1333_64);
|
|
||||||
init_ddremif(K2HK_DDR3B_EMIF_CTRL_BASE, &ddr3_1333_64);
|
|
||||||
}
|
|
13
board/ti/ks2_evm/Makefile
Normal file
13
board/ti/ks2_evm/Makefile
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#
|
||||||
|
# KS2-EVM: board Makefile
|
||||||
|
# (C) Copyright 2012-2014
|
||||||
|
# Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y += board.o
|
||||||
|
obj-y += ddr3_cfg.o
|
||||||
|
obj-$(CONFIG_K2HK_EVM) += board_k2hk.o
|
||||||
|
obj-$(CONFIG_K2HK_EVM) += ddr3_k2hk.o
|
||||||
|
obj-$(CONFIG_K2E_EVM) += board_k2e.o
|
||||||
|
obj-$(CONFIG_K2E_EVM) += ddr3_k2e.o
|
|
@ -38,11 +38,13 @@ board configuration file: include/configs/k2hk_evm.h
|
||||||
|
|
||||||
Supported boot modes:
|
Supported boot modes:
|
||||||
- SPI NOR boot
|
- SPI NOR boot
|
||||||
|
- AEMIF NAND boot
|
||||||
|
|
||||||
Supported image formats:-
|
Supported image formats:-
|
||||||
- u-boot.bin: for loading and running u-boot.bin through Texas instruments
|
- u-boot.bin: for loading and running u-boot.bin through Texas instruments
|
||||||
code composure studio (CCS)
|
code composure studio (CCS)
|
||||||
- u-boot-spi.gph: gpimage for programming SPI NOR flash for SPI NOR boot
|
- u-boot-spi.gph: gpimage for programming SPI NOR flash for SPI NOR boot
|
||||||
|
- u-boot-nand.gph: gpimage for programming AEMIF NAND flash for NAND boot
|
||||||
|
|
||||||
Build instructions:
|
Build instructions:
|
||||||
===================
|
===================
|
||||||
|
@ -55,6 +57,10 @@ To build u-boot-spi.gph
|
||||||
>make k2hk_evm_config
|
>make k2hk_evm_config
|
||||||
>make u-boot-spi.gph
|
>make u-boot-spi.gph
|
||||||
|
|
||||||
|
To build u-boot-nand.gph
|
||||||
|
>make k2hk_evm_config
|
||||||
|
>make u-boot-nand.gph
|
||||||
|
|
||||||
Load and Run U-Boot on K2HK EVM using CCS
|
Load and Run U-Boot on K2HK EVM using CCS
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
|
@ -115,8 +121,28 @@ instructions:-
|
||||||
5. At the U-Boot console type following to setup u-boot environment variables.
|
5. At the U-Boot console type following to setup u-boot environment variables.
|
||||||
setenv addr_uboot 0x87000000
|
setenv addr_uboot 0x87000000
|
||||||
setenv filesize <size in hex of u-boot-spi.gph rounded to hex 0x10000>
|
setenv filesize <size in hex of u-boot-spi.gph rounded to hex 0x10000>
|
||||||
run burn_uboot
|
run burn_uboot_spi
|
||||||
Once u-boot prompt is available, Power OFF the EVM. Set the SW1 dip switch
|
Once u-boot prompt is available, Power OFF the EVM. Set the SW1 dip switch
|
||||||
to "SPI Little Endian Boot mode" as per instruction at
|
to "SPI Little Endian Boot mode" as per instruction at
|
||||||
http://processors.wiki.ti.com/index.php/EVMK2H_Hardware_Setup.
|
http://processors.wiki.ti.com/index.php/EVMK2H_Hardware_Setup.
|
||||||
6. Power ON the EVM. The EVM now boots with u-boot image on the NOR flash.
|
6. Power ON the EVM. The EVM now boots with u-boot image on the NOR flash.
|
||||||
|
|
||||||
|
AEMIF NAND Flash programming instructions
|
||||||
|
======================================
|
||||||
|
U-Boot image can be flashed to first 1024KB of the NAND flash using following
|
||||||
|
instructions:-
|
||||||
|
|
||||||
|
1. Start CCS and run U-boot as described above.
|
||||||
|
2. Suspend Target. Select Run -> Suspend from top level menu
|
||||||
|
CortexA15_1 (Free Running)"
|
||||||
|
3. Load u-boot-nand.gph binary from build folder on to DDR address 0x87000000
|
||||||
|
through CCS as described in step 2 of "Load and Run U-Boot on K2HK EVM
|
||||||
|
using CCS", but using address 0x87000000.
|
||||||
|
4. Free Run the target as desribed earlier (step 4) to get u-boot prompt
|
||||||
|
5. At the U-Boot console type following to setup u-boot environment variables.
|
||||||
|
setenv filesize <size in hex of u-boot-nand.gph rounded to hex 0x10000>
|
||||||
|
run burn_uboot_nand
|
||||||
|
Once u-boot prompt is available, Power OFF the EVM. Set the SW1 dip switch
|
||||||
|
to "ARM NAND Boot mode" as per instruction at
|
||||||
|
http://processors.wiki.ti.com/index.php/EVMK2H_Hardware_Setup.
|
||||||
|
6. Power ON the EVM. The EVM now boots with u-boot image on the NAND flash.
|
|
@ -1,45 +1,22 @@
|
||||||
/*
|
/*
|
||||||
* K2HK EVM : Board initialization
|
* Keystone : Board initialization
|
||||||
*
|
*
|
||||||
* (C) Copyright 2012-2014
|
* (C) Copyright 2014
|
||||||
* Texas Instruments Incorporated, <www.ti.com>
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "board.h"
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <exports.h>
|
#include <exports.h>
|
||||||
#include <fdt_support.h>
|
#include <fdt_support.h>
|
||||||
#include <libfdt.h>
|
#include <asm/arch/ddr3.h>
|
||||||
|
|
||||||
#include <asm/arch/hardware.h>
|
|
||||||
#include <asm/arch/clock.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/mach-types.h>
|
|
||||||
#include <asm/arch/emac_defs.h>
|
#include <asm/arch/emac_defs.h>
|
||||||
#include <asm/arch/psc_defs.h>
|
|
||||||
#include <asm/ti-common/ti-aemif.h>
|
#include <asm/ti-common/ti-aemif.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
u32 device_big_endian;
|
|
||||||
|
|
||||||
unsigned int external_clk[ext_clk_count] = {
|
|
||||||
[sys_clk] = 122880000,
|
|
||||||
[alt_core_clk] = 125000000,
|
|
||||||
[pa_clk] = 122880000,
|
|
||||||
[tetris_clk] = 125000000,
|
|
||||||
[ddr3a_clk] = 100000000,
|
|
||||||
[ddr3b_clk] = 100000000,
|
|
||||||
[mcm_clk] = 312500000,
|
|
||||||
[pcie_clk] = 100000000,
|
|
||||||
[sgmii_srio_clk] = 156250000,
|
|
||||||
[xgmii_clk] = 156250000,
|
|
||||||
[usb_clk] = 100000000,
|
|
||||||
[rp1_clk] = 123456789 /* TODO: cannot find
|
|
||||||
what is that */
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct aemif_config aemif_configs[] = {
|
static struct aemif_config aemif_configs[] = {
|
||||||
{ /* CS0 */
|
{ /* CS0 */
|
||||||
.mode = AEMIF_MODE_NAND,
|
.mode = AEMIF_MODE_NAND,
|
||||||
|
@ -52,18 +29,11 @@ static struct aemif_config aemif_configs[] = {
|
||||||
.turn_around = 3,
|
.turn_around = 3,
|
||||||
.width = AEMIF_WIDTH_8,
|
.width = AEMIF_WIDTH_8,
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct pll_init_data pll_config[] = {
|
|
||||||
CORE_PLL_1228,
|
|
||||||
PASS_PLL_983,
|
|
||||||
TETRIS_PLL_1200,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int dram_init(void)
|
int dram_init(void)
|
||||||
{
|
{
|
||||||
init_ddr3();
|
ddr3_init();
|
||||||
|
|
||||||
gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
|
gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
|
||||||
CONFIG_MAX_RAM_BANK_SIZE);
|
CONFIG_MAX_RAM_BANK_SIZE);
|
||||||
|
@ -71,42 +41,18 @@ int dram_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
|
int board_init(void)
|
||||||
struct eth_priv_t eth_priv_cfg[] = {
|
{
|
||||||
{
|
gd->bd->bi_boot_params = CONFIG_LINUX_BOOT_PARAM_ADDR;
|
||||||
.int_name = "K2HK_EMAC",
|
|
||||||
.rx_flow = 22,
|
|
||||||
.phy_addr = 0,
|
|
||||||
.slave_port = 1,
|
|
||||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.int_name = "K2HK_EMAC1",
|
|
||||||
.rx_flow = 23,
|
|
||||||
.phy_addr = 1,
|
|
||||||
.slave_port = 2,
|
|
||||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.int_name = "K2HK_EMAC2",
|
|
||||||
.rx_flow = 24,
|
|
||||||
.phy_addr = 2,
|
|
||||||
.slave_port = 3,
|
|
||||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.int_name = "K2HK_EMAC3",
|
|
||||||
.rx_flow = 25,
|
|
||||||
.phy_addr = 3,
|
|
||||||
.slave_port = 4,
|
|
||||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
|
||||||
int get_eth_env_param(char *env_name)
|
int get_eth_env_param(char *env_name)
|
||||||
{
|
{
|
||||||
char *env;
|
char *env;
|
||||||
int res = -1;
|
int res = -1;
|
||||||
|
|
||||||
env = getenv(env_name);
|
env = getenv(env_name);
|
||||||
if (env)
|
if (env)
|
||||||
|
@ -117,12 +63,14 @@ int get_eth_env_param(char *env_name)
|
||||||
|
|
||||||
int board_eth_init(bd_t *bis)
|
int board_eth_init(bd_t *bis)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
int res;
|
int res;
|
||||||
char link_type_name[32];
|
int port_num;
|
||||||
|
char link_type_name[32];
|
||||||
|
|
||||||
for (j = 0; j < (sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t));
|
port_num = get_num_eth_ports();
|
||||||
j++) {
|
|
||||||
|
for (j = 0; j < port_num; j++) {
|
||||||
sprintf(link_type_name, "sgmii%d_link_type", j);
|
sprintf(link_type_name, "sgmii%d_link_type", j);
|
||||||
res = get_eth_env_param(link_type_name);
|
res = get_eth_env_param(link_type_name);
|
||||||
if (res >= 0)
|
if (res >= 0)
|
||||||
|
@ -135,46 +83,24 @@ int board_eth_init(bd_t *bis)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Byte swap the 32-bit data if the device is BE */
|
|
||||||
int cpu_to_bus(u32 *ptr, u32 length)
|
|
||||||
{
|
|
||||||
u32 i;
|
|
||||||
|
|
||||||
if (device_big_endian)
|
|
||||||
for (i = 0; i < length; i++, ptr++)
|
|
||||||
*ptr = __swab32(*ptr);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(CONFIG_BOARD_EARLY_INIT_F)
|
|
||||||
int board_early_init_f(void)
|
|
||||||
{
|
|
||||||
init_plls(ARRAY_SIZE(pll_config), pll_config);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int board_init(void)
|
|
||||||
{
|
|
||||||
gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||||
#define K2_DDR3_START_ADDR 0x80000000
|
|
||||||
void ft_board_setup(void *blob, bd_t *bd)
|
void ft_board_setup(void *blob, bd_t *bd)
|
||||||
{
|
{
|
||||||
u64 start[2];
|
int lpae;
|
||||||
u64 size[2];
|
char *env;
|
||||||
char name[32], *env, *endp;
|
char *endp;
|
||||||
int lpae, nodeoffset;
|
|
||||||
u32 ddr3a_size;
|
|
||||||
int nbanks;
|
int nbanks;
|
||||||
|
u64 size[2];
|
||||||
|
u64 start[2];
|
||||||
|
char name[32];
|
||||||
|
int nodeoffset;
|
||||||
|
u32 ddr3a_size;
|
||||||
|
int unitrd_fixup = 0;
|
||||||
|
|
||||||
env = getenv("mem_lpae");
|
env = getenv("mem_lpae");
|
||||||
lpae = env && simple_strtol(env, NULL, 0);
|
lpae = env && simple_strtol(env, NULL, 0);
|
||||||
|
env = getenv("uinitrd_fixup");
|
||||||
|
unitrd_fixup = env && simple_strtol(env, NULL, 0);
|
||||||
|
|
||||||
ddr3a_size = 0;
|
ddr3a_size = 0;
|
||||||
if (lpae) {
|
if (lpae) {
|
||||||
|
@ -191,7 +117,7 @@ void ft_board_setup(void *blob, bd_t *bd)
|
||||||
|
|
||||||
/* adjust memory start address for LPAE */
|
/* adjust memory start address for LPAE */
|
||||||
if (lpae) {
|
if (lpae) {
|
||||||
start[0] -= K2_DDR3_START_ADDR;
|
start[0] -= CONFIG_SYS_SDRAM_BASE;
|
||||||
start[0] += CONFIG_SYS_LPAE_SDRAM_BASE;
|
start[0] += CONFIG_SYS_LPAE_SDRAM_BASE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,10 +143,11 @@ void ft_board_setup(void *blob, bd_t *bd)
|
||||||
fdt_fixup_memory_banks(blob, start, size, nbanks);
|
fdt_fixup_memory_banks(blob, start, size, nbanks);
|
||||||
|
|
||||||
/* Fix up the initrd */
|
/* Fix up the initrd */
|
||||||
if (lpae) {
|
if (lpae && unitrd_fixup) {
|
||||||
u64 initrd_start, initrd_end;
|
|
||||||
u32 *prop1, *prop2;
|
|
||||||
int err;
|
int err;
|
||||||
|
u32 *prop1, *prop2;
|
||||||
|
u64 initrd_start, initrd_end;
|
||||||
|
|
||||||
nodeoffset = fdt_path_offset(blob, "/chosen");
|
nodeoffset = fdt_path_offset(blob, "/chosen");
|
||||||
if (nodeoffset >= 0) {
|
if (nodeoffset >= 0) {
|
||||||
prop1 = (u32 *)fdt_getprop(blob, nodeoffset,
|
prop1 = (u32 *)fdt_getprop(blob, nodeoffset,
|
||||||
|
@ -229,11 +156,11 @@ void ft_board_setup(void *blob, bd_t *bd)
|
||||||
"linux,initrd-end", NULL);
|
"linux,initrd-end", NULL);
|
||||||
if (prop1 && prop2) {
|
if (prop1 && prop2) {
|
||||||
initrd_start = __be32_to_cpu(*prop1);
|
initrd_start = __be32_to_cpu(*prop1);
|
||||||
initrd_start -= K2_DDR3_START_ADDR;
|
initrd_start -= CONFIG_SYS_SDRAM_BASE;
|
||||||
initrd_start += CONFIG_SYS_LPAE_SDRAM_BASE;
|
initrd_start += CONFIG_SYS_LPAE_SDRAM_BASE;
|
||||||
initrd_start = __cpu_to_be64(initrd_start);
|
initrd_start = __cpu_to_be64(initrd_start);
|
||||||
initrd_end = __be32_to_cpu(*prop2);
|
initrd_end = __be32_to_cpu(*prop2);
|
||||||
initrd_end -= K2_DDR3_START_ADDR;
|
initrd_end -= CONFIG_SYS_SDRAM_BASE;
|
||||||
initrd_end += CONFIG_SYS_LPAE_SDRAM_BASE;
|
initrd_end += CONFIG_SYS_LPAE_SDRAM_BASE;
|
||||||
initrd_end = __cpu_to_be64(initrd_end);
|
initrd_end = __cpu_to_be64(initrd_end);
|
||||||
|
|
||||||
|
@ -267,9 +194,10 @@ void ft_board_setup(void *blob, bd_t *bd)
|
||||||
|
|
||||||
void ft_board_setup_ex(void *blob, bd_t *bd)
|
void ft_board_setup_ex(void *blob, bd_t *bd)
|
||||||
{
|
{
|
||||||
int lpae;
|
int lpae;
|
||||||
char *env;
|
u64 size;
|
||||||
u64 *reserve_start, size;
|
char *env;
|
||||||
|
u64 *reserve_start;
|
||||||
|
|
||||||
env = getenv("mem_lpae");
|
env = getenv("mem_lpae");
|
||||||
lpae = env && simple_strtol(env, NULL, 0);
|
lpae = env && simple_strtol(env, NULL, 0);
|
||||||
|
@ -286,7 +214,7 @@ void ft_board_setup_ex(void *blob, bd_t *bd)
|
||||||
*reserve_start = __cpu_to_be64(*reserve_start);
|
*reserve_start = __cpu_to_be64(*reserve_start);
|
||||||
size = __cpu_to_be64(*(reserve_start + 1));
|
size = __cpu_to_be64(*(reserve_start + 1));
|
||||||
if (size) {
|
if (size) {
|
||||||
*reserve_start -= K2_DDR3_START_ADDR;
|
*reserve_start -= CONFIG_SYS_SDRAM_BASE;
|
||||||
*reserve_start +=
|
*reserve_start +=
|
||||||
CONFIG_SYS_LPAE_SDRAM_BASE;
|
CONFIG_SYS_LPAE_SDRAM_BASE;
|
||||||
*reserve_start =
|
*reserve_start =
|
19
board/ti/ks2_evm/board.h
Normal file
19
board/ti/ks2_evm/board.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* K2HK EVM : Board common header
|
||||||
|
*
|
||||||
|
* (C) Copyright 2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _KS2_BOARD
|
||||||
|
#define _KS2_BOARD
|
||||||
|
|
||||||
|
#include <asm/arch/emac_defs.h>
|
||||||
|
|
||||||
|
extern struct eth_priv_t eth_priv_cfg[];
|
||||||
|
|
||||||
|
int get_num_eth_ports(void);
|
||||||
|
|
||||||
|
#endif
|
39
board/ti/ks2_evm/board_k2e.c
Normal file
39
board/ti/ks2_evm/board_k2e.c
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* K2E EVM : Board initialization
|
||||||
|
*
|
||||||
|
* (C) Copyright 2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/arch/ddr3.h>
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
unsigned int external_clk[ext_clk_count] = {
|
||||||
|
[sys_clk] = 100000000,
|
||||||
|
[alt_core_clk] = 100000000,
|
||||||
|
[pa_clk] = 100000000,
|
||||||
|
[ddr3_clk] = 100000000,
|
||||||
|
[mcm_clk] = 312500000,
|
||||||
|
[pcie_clk] = 100000000,
|
||||||
|
[sgmii_clk] = 156250000,
|
||||||
|
[xgmii_clk] = 156250000,
|
||||||
|
[usb_clk] = 100000000,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct pll_init_data pll_config[] = {
|
||||||
|
CORE_PLL_1200,
|
||||||
|
PASS_PLL_1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(CONFIG_BOARD_EARLY_INIT_F)
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
init_plls(ARRAY_SIZE(pll_config), pll_config);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
81
board/ti/ks2_evm/board_k2hk.c
Normal file
81
board/ti/ks2_evm/board_k2hk.c
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
* K2HK EVM : Board initialization
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
#include <asm/arch/emac_defs.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
unsigned int external_clk[ext_clk_count] = {
|
||||||
|
[sys_clk] = 122880000,
|
||||||
|
[alt_core_clk] = 125000000,
|
||||||
|
[pa_clk] = 122880000,
|
||||||
|
[tetris_clk] = 125000000,
|
||||||
|
[ddr3a_clk] = 100000000,
|
||||||
|
[ddr3b_clk] = 100000000,
|
||||||
|
[mcm_clk] = 312500000,
|
||||||
|
[pcie_clk] = 100000000,
|
||||||
|
[sgmii_srio_clk] = 156250000,
|
||||||
|
[xgmii_clk] = 156250000,
|
||||||
|
[usb_clk] = 100000000,
|
||||||
|
[rp1_clk] = 123456789
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct pll_init_data pll_config[] = {
|
||||||
|
CORE_PLL_1228,
|
||||||
|
PASS_PLL_983,
|
||||||
|
TETRIS_PLL_1200,
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
|
||||||
|
struct eth_priv_t eth_priv_cfg[] = {
|
||||||
|
{
|
||||||
|
.int_name = "K2HK_EMAC",
|
||||||
|
.rx_flow = 22,
|
||||||
|
.phy_addr = 0,
|
||||||
|
.slave_port = 1,
|
||||||
|
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.int_name = "K2HK_EMAC1",
|
||||||
|
.rx_flow = 23,
|
||||||
|
.phy_addr = 1,
|
||||||
|
.slave_port = 2,
|
||||||
|
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.int_name = "K2HK_EMAC2",
|
||||||
|
.rx_flow = 24,
|
||||||
|
.phy_addr = 2,
|
||||||
|
.slave_port = 3,
|
||||||
|
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.int_name = "K2HK_EMAC3",
|
||||||
|
.rx_flow = 25,
|
||||||
|
.phy_addr = 3,
|
||||||
|
.slave_port = 4,
|
||||||
|
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
int get_num_eth_ports(void)
|
||||||
|
{
|
||||||
|
return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARD_EARLY_INIT_F
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
init_plls(ARRAY_SIZE(pll_config), pll_config);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
170
board/ti/ks2_evm/ddr3_cfg.c
Normal file
170
board/ti/ks2_evm/ddr3_cfg.c
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
/*
|
||||||
|
* Keystone2: DDR3 configuration
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
|
||||||
|
#include <i2c.h>
|
||||||
|
#include <asm/arch/ddr3.h>
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
/* DDR3 PHY configuration data with 1600M rate, 8GB size */
|
||||||
|
struct ddr3_phy_config ddr3phy_1600_8g = {
|
||||||
|
.pllcr = 0x0001C000ul,
|
||||||
|
.pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
|
||||||
|
.pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
|
||||||
|
.ptr0 = 0x42C21590ul,
|
||||||
|
.ptr1 = 0xD05612C0ul,
|
||||||
|
.ptr2 = 0, /* not set in gel */
|
||||||
|
.ptr3 = 0x0D861A80ul,
|
||||||
|
.ptr4 = 0x0C827100ul,
|
||||||
|
.dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK),
|
||||||
|
.dcr_val = ((1 << 10)),
|
||||||
|
.dtpr0 = 0xA19DBB66ul,
|
||||||
|
.dtpr1 = 0x32868300ul,
|
||||||
|
.dtpr2 = 0x50035200ul,
|
||||||
|
.mr0 = 0x00001C70ul,
|
||||||
|
.mr1 = 0x00000006ul,
|
||||||
|
.mr2 = 0x00000018ul,
|
||||||
|
.dtcr = 0x730035C7ul,
|
||||||
|
.pgcr2 = 0x00F07A12ul,
|
||||||
|
.zq0cr1 = 0x0000005Dul,
|
||||||
|
.zq1cr1 = 0x0000005Bul,
|
||||||
|
.zq2cr1 = 0x0000005Bul,
|
||||||
|
.pir_v1 = 0x00000033ul,
|
||||||
|
.pir_v2 = 0x0000FF81ul,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* DDR3 EMIF configuration data with 1600M rate, 8GB size */
|
||||||
|
struct ddr3_emif_config ddr3_1600_8g = {
|
||||||
|
.sdcfg = 0x6200CE6Aul,
|
||||||
|
.sdtim1 = 0x16709C55ul,
|
||||||
|
.sdtim2 = 0x00001D4Aul,
|
||||||
|
.sdtim3 = 0x435DFF54ul,
|
||||||
|
.sdtim4 = 0x553F0CFFul,
|
||||||
|
.zqcfg = 0xF0073200ul,
|
||||||
|
.sdrfc = 0x00001869ul,
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_K2HK_EVM
|
||||||
|
/* DDR3 PHY configuration data with 1333M rate, and 2GB size */
|
||||||
|
struct ddr3_phy_config ddr3phy_1333_2g = {
|
||||||
|
.pllcr = 0x0005C000ul,
|
||||||
|
.pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
|
||||||
|
.pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
|
||||||
|
.ptr0 = 0x42C21590ul,
|
||||||
|
.ptr1 = 0xD05612C0ul,
|
||||||
|
.ptr2 = 0, /* not set in gel */
|
||||||
|
.ptr3 = 0x0B4515C2ul,
|
||||||
|
.ptr4 = 0x0A6E08B4ul,
|
||||||
|
.dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK),
|
||||||
|
.dcr_val = ((1 << 10)),
|
||||||
|
.dtpr0 = 0x8558AA55ul,
|
||||||
|
.dtpr1 = 0x32857280ul,
|
||||||
|
.dtpr2 = 0x5002C200ul,
|
||||||
|
.mr0 = 0x00001A60ul,
|
||||||
|
.mr1 = 0x00000006ul,
|
||||||
|
.mr2 = 0x00000010ul,
|
||||||
|
.dtcr = 0x710035C7ul,
|
||||||
|
.pgcr2 = 0x00F065B8ul,
|
||||||
|
.zq0cr1 = 0x0000005Dul,
|
||||||
|
.zq1cr1 = 0x0000005Bul,
|
||||||
|
.zq2cr1 = 0x0000005Bul,
|
||||||
|
.pir_v1 = 0x00000033ul,
|
||||||
|
.pir_v2 = 0x0000FF81ul,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* DDR3 EMIF configuration data with 1333M rate, and 2GB size */
|
||||||
|
struct ddr3_emif_config ddr3_1333_2g = {
|
||||||
|
.sdcfg = 0x62008C62ul,
|
||||||
|
.sdtim1 = 0x125C8044ul,
|
||||||
|
.sdtim2 = 0x00001D29ul,
|
||||||
|
.sdtim3 = 0x32CDFF43ul,
|
||||||
|
.sdtim4 = 0x543F0ADFul,
|
||||||
|
.zqcfg = 0x70073200ul,
|
||||||
|
.sdrfc = 0x00001457ul,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_K2E_EVM
|
||||||
|
/* DDR3 PHY configuration data with 1600M rate, and 4GB size */
|
||||||
|
struct ddr3_phy_config ddr3phy_1600_4g = {
|
||||||
|
.pllcr = 0x0001C000ul,
|
||||||
|
.pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
|
||||||
|
.pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
|
||||||
|
.ptr0 = 0x42C21590ul,
|
||||||
|
.ptr1 = 0xD05612C0ul,
|
||||||
|
.ptr2 = 0, /* not set in gel */
|
||||||
|
.ptr3 = 0x08861A80ul,
|
||||||
|
.ptr4 = 0x0C827100ul,
|
||||||
|
.dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK),
|
||||||
|
.dcr_val = ((1 << 10)),
|
||||||
|
.dtpr0 = 0x9D9CBB66ul,
|
||||||
|
.dtpr1 = 0x12840300ul,
|
||||||
|
.dtpr2 = 0x5002D200ul,
|
||||||
|
.mr0 = 0x00001C70ul,
|
||||||
|
.mr1 = 0x00000006ul,
|
||||||
|
.mr2 = 0x00000018ul,
|
||||||
|
.dtcr = 0x710035C7ul,
|
||||||
|
.pgcr2 = 0x00F07A12ul,
|
||||||
|
.zq0cr1 = 0x0001005Dul,
|
||||||
|
.zq1cr1 = 0x0001005Bul,
|
||||||
|
.zq2cr1 = 0x0001005Bul,
|
||||||
|
.pir_v1 = 0x00000033ul,
|
||||||
|
.pir_v2 = 0x0000FF81ul,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* DDR3 EMIF configuration data with 1600M rate, and 4GB size */
|
||||||
|
struct ddr3_emif_config ddr3_1600_4g = {
|
||||||
|
.sdcfg = 0x6200CE62ul,
|
||||||
|
.sdtim1 = 0x166C9855ul,
|
||||||
|
.sdtim2 = 0x00001D4Aul,
|
||||||
|
.sdtim3 = 0x421DFF53ul,
|
||||||
|
.sdtim4 = 0x543F07FFul,
|
||||||
|
.zqcfg = 0x70073200ul,
|
||||||
|
.sdrfc = 0x00001869ul,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int ddr3_get_dimm_params(char *dimm_name)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
int old_bus;
|
||||||
|
u8 spd_params[256];
|
||||||
|
|
||||||
|
i2c_init(CONFIG_SYS_DAVINCI_I2C_SPEED, CONFIG_SYS_DAVINCI_I2C_SLAVE);
|
||||||
|
|
||||||
|
old_bus = i2c_get_bus_num();
|
||||||
|
i2c_set_bus_num(1);
|
||||||
|
|
||||||
|
ret = i2c_read(0x53, 0, 1, spd_params, 256);
|
||||||
|
|
||||||
|
i2c_set_bus_num(old_bus);
|
||||||
|
|
||||||
|
dimm_name[0] = '\0';
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
puts("Cannot read DIMM params\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to convert spd data to dimm parameters
|
||||||
|
* and to DDR3 EMIF and PHY regirsters values.
|
||||||
|
* For now we just return DIMM type string value.
|
||||||
|
* Caller may use this value to choose appropriate
|
||||||
|
* a pre-set DDR3 configuration
|
||||||
|
*/
|
||||||
|
|
||||||
|
strncpy(dimm_name, (char *)&spd_params[0x80], 18);
|
||||||
|
dimm_name[18] = '\0';
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
24
board/ti/ks2_evm/ddr3_cfg.h
Normal file
24
board/ti/ks2_evm/ddr3_cfg.h
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* Keystone2: DDR3 configuration
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DDR3_CFG_H
|
||||||
|
#define __DDR3_CFG_H
|
||||||
|
|
||||||
|
extern struct ddr3_phy_config ddr3phy_1600_8g;
|
||||||
|
extern struct ddr3_emif_config ddr3_1600_8g;
|
||||||
|
|
||||||
|
extern struct ddr3_phy_config ddr3phy_1333_2g;
|
||||||
|
extern struct ddr3_emif_config ddr3_1333_2g;
|
||||||
|
|
||||||
|
extern struct ddr3_phy_config ddr3phy_1600_4g;
|
||||||
|
extern struct ddr3_emif_config ddr3_1600_4g;
|
||||||
|
|
||||||
|
int ddr3_get_dimm_params(char *dimm_name);
|
||||||
|
|
||||||
|
#endif /* __DDR3_CFG_H */
|
55
board/ti/ks2_evm/ddr3_k2e.c
Normal file
55
board/ti/ks2_evm/ddr3_k2e.c
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
* Keystone2: DDR3 initialization
|
||||||
|
*
|
||||||
|
* (C) Copyright 2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include "ddr3_cfg.h"
|
||||||
|
#include <asm/arch/ddr3.h>
|
||||||
|
|
||||||
|
static int ddr3_size;
|
||||||
|
static struct pll_init_data ddr3_400 = DDR3_PLL_400;
|
||||||
|
|
||||||
|
void ddr3_init(void)
|
||||||
|
{
|
||||||
|
char dimm_name[32];
|
||||||
|
|
||||||
|
if (~(readl(KS2_PLL_CNTRL_BASE + KS2_RSTCTRL_RSTYPE) & 0x1))
|
||||||
|
init_pll(&ddr3_400);
|
||||||
|
|
||||||
|
ddr3_get_dimm_params(dimm_name);
|
||||||
|
|
||||||
|
printf("Detected SO-DIMM [%s]\n", dimm_name);
|
||||||
|
|
||||||
|
/* Reset DDR3 PHY after PLL enabled */
|
||||||
|
ddr3_reset_ddrphy();
|
||||||
|
|
||||||
|
if (!strcmp(dimm_name, "18KSF1G72HZ-1G6E2 ")) {
|
||||||
|
/* 8G SO-DIMM */
|
||||||
|
ddr3_size = 8;
|
||||||
|
printf("DRAM: 8 GiB\n");
|
||||||
|
ddr3phy_1600_8g.zq0cr1 |= 0x10000;
|
||||||
|
ddr3phy_1600_8g.zq1cr1 |= 0x10000;
|
||||||
|
ddr3phy_1600_8g.zq2cr1 |= 0x10000;
|
||||||
|
ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1600_8g);
|
||||||
|
ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_1600_8g);
|
||||||
|
} else if (!strcmp(dimm_name, "18KSF51272HZ-1G6K2")) {
|
||||||
|
/* 4G SO-DIMM */
|
||||||
|
ddr3_size = 4;
|
||||||
|
printf("DRAM: 4 GiB\n");
|
||||||
|
ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1600_4g);
|
||||||
|
ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_1600_4g);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ddr3_get_size - return ddr3 size in GiB
|
||||||
|
*/
|
||||||
|
int ddr3_get_size(void)
|
||||||
|
{
|
||||||
|
return ddr3_size;
|
||||||
|
}
|
84
board/ti/ks2_evm/ddr3_k2hk.c
Normal file
84
board/ti/ks2_evm/ddr3_k2hk.c
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
/*
|
||||||
|
* Keystone2: DDR3 initialization
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include "ddr3_cfg.h"
|
||||||
|
#include <asm/arch/ddr3.h>
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
|
struct pll_init_data ddr3a_333 = DDR3_PLL_333(A);
|
||||||
|
struct pll_init_data ddr3a_400 = DDR3_PLL_400(A);
|
||||||
|
|
||||||
|
void ddr3_init(void)
|
||||||
|
{
|
||||||
|
char dimm_name[32];
|
||||||
|
|
||||||
|
ddr3_get_dimm_params(dimm_name);
|
||||||
|
|
||||||
|
printf("Detected SO-DIMM [%s]\n", dimm_name);
|
||||||
|
|
||||||
|
if (!strcmp(dimm_name, "18KSF1G72HZ-1G6E2 ")) {
|
||||||
|
init_pll(&ddr3a_400);
|
||||||
|
if (cpu_revision() > 0) {
|
||||||
|
if (cpu_revision() > 1) {
|
||||||
|
/* PG 2.0 */
|
||||||
|
/* Reset DDR3A PHY after PLL enabled */
|
||||||
|
ddr3_reset_ddrphy();
|
||||||
|
ddr3phy_1600_8g.zq0cr1 |= 0x10000;
|
||||||
|
ddr3phy_1600_8g.zq1cr1 |= 0x10000;
|
||||||
|
ddr3phy_1600_8g.zq2cr1 |= 0x10000;
|
||||||
|
ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC,
|
||||||
|
&ddr3phy_1600_8g);
|
||||||
|
} else {
|
||||||
|
/* PG 1.1 */
|
||||||
|
ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC,
|
||||||
|
&ddr3phy_1600_8g);
|
||||||
|
}
|
||||||
|
|
||||||
|
ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE,
|
||||||
|
&ddr3_1600_8g);
|
||||||
|
printf("DRAM: Capacity 8 GiB (includes reported below)\n");
|
||||||
|
} else {
|
||||||
|
ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1600_8g);
|
||||||
|
ddr3_1600_8g.sdcfg |= 0x1000;
|
||||||
|
ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE,
|
||||||
|
&ddr3_1600_8g);
|
||||||
|
printf("DRAM: Capacity 4 GiB (includes reported below)\n");
|
||||||
|
}
|
||||||
|
} else if (!strcmp(dimm_name, "SQR-SD3T-2G1333SED")) {
|
||||||
|
init_pll(&ddr3a_333);
|
||||||
|
if (cpu_revision() > 0) {
|
||||||
|
if (cpu_revision() > 1) {
|
||||||
|
/* PG 2.0 */
|
||||||
|
/* Reset DDR3A PHY after PLL enabled */
|
||||||
|
ddr3_reset_ddrphy();
|
||||||
|
ddr3phy_1333_2g.zq0cr1 |= 0x10000;
|
||||||
|
ddr3phy_1333_2g.zq1cr1 |= 0x10000;
|
||||||
|
ddr3phy_1333_2g.zq2cr1 |= 0x10000;
|
||||||
|
ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC,
|
||||||
|
&ddr3phy_1333_2g);
|
||||||
|
} else {
|
||||||
|
/* PG 1.1 */
|
||||||
|
ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC,
|
||||||
|
&ddr3phy_1333_2g);
|
||||||
|
}
|
||||||
|
ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE,
|
||||||
|
&ddr3_1333_2g);
|
||||||
|
} else {
|
||||||
|
ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1333_2g);
|
||||||
|
ddr3_1333_2g.sdcfg |= 0x1000;
|
||||||
|
ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE,
|
||||||
|
&ddr3_1333_2g);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
printf("Unknown SO-DIMM. Cannot configure DDR3\n");
|
||||||
|
while (1)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
|
@ -300,7 +300,8 @@ Active arm armv7 exynos samsung trats
|
||||||
Active arm armv7 exynos samsung trats2 trats2 - Piotr Wilczek <p.wilczek@samsung.com>
|
Active arm armv7 exynos samsung trats2 trats2 - Piotr Wilczek <p.wilczek@samsung.com>
|
||||||
Active arm armv7 exynos samsung universal_c210 s5pc210_universal - Przemyslaw Marczak <p.marczak@samsung.com>
|
Active arm armv7 exynos samsung universal_c210 s5pc210_universal - Przemyslaw Marczak <p.marczak@samsung.com>
|
||||||
Active arm armv7 highbank - highbank highbank - Rob Herring <robh@kernel.org>
|
Active arm armv7 highbank - highbank highbank - Rob Herring <robh@kernel.org>
|
||||||
Active arm armv7 keystone ti k2hk_evm k2hk_evm - Vitaly Andrianov <vitalya@ti.com>
|
Active arm armv7 keystone ti ks2_evm k2hk_evm - Vitaly Andrianov <vitalya@ti.com>
|
||||||
|
Active arm armv7 keystone ti ks2_evm k2e_evm - Vitaly Andrianov <vitalya@ti.com>
|
||||||
Active arm armv7 mx5 denx m53evk m53evk m53evk:IMX_CONFIG=board/denx/m53evk/imximage.cfg Marek Vasut <marek.vasut@gmail.com>
|
Active arm armv7 mx5 denx m53evk m53evk m53evk:IMX_CONFIG=board/denx/m53evk/imximage.cfg Marek Vasut <marek.vasut@gmail.com>
|
||||||
Active arm armv7 mx5 esg ima3-mx53 ima3-mx53 ima3-mx53:IMX_CONFIG=board/esg/ima3-mx53/imximage.cfg -
|
Active arm armv7 mx5 esg ima3-mx53 ima3-mx53 ima3-mx53:IMX_CONFIG=board/esg/ima3-mx53/imximage.cfg -
|
||||||
Active arm armv7 mx5 freescale mx51evk mx51evk mx51evk:IMX_CONFIG=board/freescale/mx51evk/imximage.cfg Stefano Babic <sbabic@denx.de>
|
Active arm armv7 mx5 freescale mx51evk mx51evk mx51evk:IMX_CONFIG=board/freescale/mx51evk/imximage.cfg Stefano Babic <sbabic@denx.de>
|
||||||
|
|
|
@ -492,7 +492,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
|
||||||
if (!ft_verify_fdt(blob))
|
if (!ft_verify_fdt(blob))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_K2HK
|
#if defined(CONFIG_SOC_KEYSTONE)
|
||||||
if (IMAGE_OF_BOARD_SETUP)
|
if (IMAGE_OF_BOARD_SETUP)
|
||||||
ft_board_setup_ex(blob, gd->bd);
|
ft_board_setup_ex(blob, gd->bd);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -89,6 +89,10 @@ Commands:
|
||||||
|
|
||||||
Configuration Options:
|
Configuration Options:
|
||||||
|
|
||||||
|
CONFIG_SYS_NAND_U_BOOT_OFFS
|
||||||
|
NAND Offset from where SPL will read u-boot image. This is the starting
|
||||||
|
address of u-boot MTD partition in NAND.
|
||||||
|
|
||||||
CONFIG_CMD_NAND
|
CONFIG_CMD_NAND
|
||||||
Enables NAND support and commmands.
|
Enables NAND support and commmands.
|
||||||
|
|
||||||
|
@ -226,6 +230,14 @@ Platform specific options
|
||||||
detection. However ECC calculation on such plaforms would still be
|
detection. However ECC calculation on such plaforms would still be
|
||||||
done by GPMC controller.
|
done by GPMC controller.
|
||||||
|
|
||||||
|
CONFIG_SPL_NAND_AM33XX_BCH
|
||||||
|
Enables SPL-NAND driver (am335x_spl_bch.c) which supports ELM based
|
||||||
|
hardware ECC correction. This is useful for platforms which have ELM
|
||||||
|
hardware engine and use NAND boot mode.
|
||||||
|
Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
|
||||||
|
so those platforms should use CONFIG_SPL_NAND_SIMPLE for enabling
|
||||||
|
SPL-NAND driver with software ECC correction support.
|
||||||
|
|
||||||
CONFIG_NAND_OMAP_ECCSCHEME
|
CONFIG_NAND_OMAP_ECCSCHEME
|
||||||
On OMAP platforms, this CONFIG specifies NAND ECC scheme.
|
On OMAP platforms, this CONFIG specifies NAND ECC scheme.
|
||||||
It can take following values:
|
It can take following values:
|
||||||
|
|
|
@ -305,6 +305,189 @@ static struct nand_ecclayout nand_davinci_4bit_layout_oobfirst = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined CONFIG_KEYSTONE_RBL_NAND
|
||||||
|
#if defined(CONFIG_SYS_NAND_PAGE_2K)
|
||||||
|
static struct nand_ecclayout nand_keystone_rbl_4bit_layout_oobfirst = {
|
||||||
|
.eccbytes = 40,
|
||||||
|
.eccpos = {
|
||||||
|
6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
|
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
||||||
|
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||||
|
54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
|
||||||
|
},
|
||||||
|
.oobfree = {
|
||||||
|
{.offset = 2, .length = 4, },
|
||||||
|
{.offset = 16, .length = 6, },
|
||||||
|
{.offset = 32, .length = 6, },
|
||||||
|
{.offset = 48, .length = 6, },
|
||||||
|
},
|
||||||
|
#elif defined(CONFIG_SYS_NAND_PAGE_4K)
|
||||||
|
.eccbytes = 80,
|
||||||
|
.eccpos = {
|
||||||
|
6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
|
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
||||||
|
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||||
|
54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
|
||||||
|
70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
|
||||||
|
86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
|
||||||
|
102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
|
||||||
|
118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
|
||||||
|
},
|
||||||
|
.oobfree = {
|
||||||
|
{.offset = 2, .length = 4, },
|
||||||
|
{.offset = 16, .length = 6, },
|
||||||
|
{.offset = 32, .length = 6, },
|
||||||
|
{.offset = 48, .length = 6, },
|
||||||
|
{.offset = 64, .length = 6, },
|
||||||
|
{.offset = 80, .length = 6, },
|
||||||
|
{.offset = 96, .length = 6, },
|
||||||
|
{.offset = 112, .length = 6, },
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_NAND_PAGE_2K
|
||||||
|
#define CONFIG_KEYSTONE_NAND_MAX_RBL_PAGE CONFIG_KEYSTONE_NAND_MAX_RBL_SIZE >> 11
|
||||||
|
#elif defined(CONFIG_SYS_NAND_PAGE_4K)
|
||||||
|
#define CONFIG_KEYSTONE_NAND_MAX_RBL_PAGE CONFIG_KEYSTONE_NAND_MAX_RBL_SIZE >> 12
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nand_davinci_write_page - write one page
|
||||||
|
* @mtd: MTD device structure
|
||||||
|
* @chip: NAND chip descriptor
|
||||||
|
* @buf: the data to write
|
||||||
|
* @oob_required: must write chip->oob_poi to OOB
|
||||||
|
* @page: page number to write
|
||||||
|
* @cached: cached programming
|
||||||
|
* @raw: use _raw version of write_page
|
||||||
|
*/
|
||||||
|
static int nand_davinci_write_page(struct mtd_info *mtd, struct nand_chip *chip,
|
||||||
|
const uint8_t *buf, int oob_required,
|
||||||
|
int page, int cached, int raw)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
int ret = 0;
|
||||||
|
struct nand_ecclayout *saved_ecc_layout;
|
||||||
|
|
||||||
|
/* save current ECC layout and assign Keystone RBL ECC layout */
|
||||||
|
if (page < CONFIG_KEYSTONE_NAND_MAX_RBL_PAGE) {
|
||||||
|
saved_ecc_layout = chip->ecc.layout;
|
||||||
|
chip->ecc.layout = &nand_keystone_rbl_4bit_layout_oobfirst;
|
||||||
|
mtd->oobavail = chip->ecc.layout->oobavail;
|
||||||
|
}
|
||||||
|
|
||||||
|
chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
|
||||||
|
|
||||||
|
if (unlikely(raw))
|
||||||
|
status = chip->ecc.write_page_raw(mtd, chip, buf, oob_required);
|
||||||
|
else
|
||||||
|
status = chip->ecc.write_page(mtd, chip, buf, oob_required);
|
||||||
|
|
||||||
|
if (status < 0) {
|
||||||
|
ret = status;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
|
||||||
|
status = chip->waitfunc(mtd, chip);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* See if operation failed and additional status checks are
|
||||||
|
* available.
|
||||||
|
*/
|
||||||
|
if ((status & NAND_STATUS_FAIL) && (chip->errstat))
|
||||||
|
status = chip->errstat(mtd, chip, FL_WRITING, status, page);
|
||||||
|
|
||||||
|
if (status & NAND_STATUS_FAIL) {
|
||||||
|
ret = -EIO;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_MTD_NAND_VERIFY_WRITE
|
||||||
|
/* Send command to read back the data */
|
||||||
|
chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
|
||||||
|
|
||||||
|
if (chip->verify_buf(mtd, buf, mtd->writesize)) {
|
||||||
|
ret = -EIO;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure the next page prog is preceded by a status read */
|
||||||
|
chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
|
||||||
|
#endif
|
||||||
|
err:
|
||||||
|
/* restore ECC layout */
|
||||||
|
if (page < CONFIG_KEYSTONE_NAND_MAX_RBL_PAGE) {
|
||||||
|
chip->ecc.layout = saved_ecc_layout;
|
||||||
|
mtd->oobavail = saved_ecc_layout->oobavail;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nand_davinci_read_page_hwecc - hardware ECC based page read function
|
||||||
|
* @mtd: mtd info structure
|
||||||
|
* @chip: nand chip info structure
|
||||||
|
* @buf: buffer to store read data
|
||||||
|
* @oob_required: caller requires OOB data read to chip->oob_poi
|
||||||
|
* @page: page number to read
|
||||||
|
*
|
||||||
|
* Not for syndrome calculating ECC controllers which need a special oob layout.
|
||||||
|
*/
|
||||||
|
static int nand_davinci_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
|
||||||
|
uint8_t *buf, int oob_required, int page)
|
||||||
|
{
|
||||||
|
int i, eccsize = chip->ecc.size;
|
||||||
|
int eccbytes = chip->ecc.bytes;
|
||||||
|
int eccsteps = chip->ecc.steps;
|
||||||
|
uint32_t *eccpos;
|
||||||
|
uint8_t *p = buf;
|
||||||
|
uint8_t *ecc_code = chip->buffers->ecccode;
|
||||||
|
uint8_t *ecc_calc = chip->buffers->ecccalc;
|
||||||
|
struct nand_ecclayout *saved_ecc_layout = chip->ecc.layout;
|
||||||
|
|
||||||
|
/* save current ECC layout and assign Keystone RBL ECC layout */
|
||||||
|
if (page < CONFIG_KEYSTONE_NAND_MAX_RBL_PAGE) {
|
||||||
|
chip->ecc.layout = &nand_keystone_rbl_4bit_layout_oobfirst;
|
||||||
|
mtd->oobavail = chip->ecc.layout->oobavail;
|
||||||
|
}
|
||||||
|
|
||||||
|
eccpos = chip->ecc.layout->eccpos;
|
||||||
|
|
||||||
|
/* Read the OOB area first */
|
||||||
|
chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
|
||||||
|
chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
|
||||||
|
chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
|
||||||
|
|
||||||
|
for (i = 0; i < chip->ecc.total; i++)
|
||||||
|
ecc_code[i] = chip->oob_poi[eccpos[i]];
|
||||||
|
|
||||||
|
for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
|
||||||
|
int stat;
|
||||||
|
|
||||||
|
chip->ecc.hwctl(mtd, NAND_ECC_READ);
|
||||||
|
chip->read_buf(mtd, p, eccsize);
|
||||||
|
chip->ecc.calculate(mtd, p, &ecc_calc[i]);
|
||||||
|
|
||||||
|
stat = chip->ecc.correct(mtd, p, &ecc_code[i], NULL);
|
||||||
|
if (stat < 0)
|
||||||
|
mtd->ecc_stats.failed++;
|
||||||
|
else
|
||||||
|
mtd->ecc_stats.corrected += stat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* restore ECC layout */
|
||||||
|
if (page < CONFIG_KEYSTONE_NAND_MAX_RBL_PAGE) {
|
||||||
|
chip->ecc.layout = saved_ecc_layout;
|
||||||
|
mtd->oobavail = saved_ecc_layout->oobavail;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_KEYSTONE_RBL_NAND */
|
||||||
|
|
||||||
static void nand_davinci_4bit_enable_hwecc(struct mtd_info *mtd, int mode)
|
static void nand_davinci_4bit_enable_hwecc(struct mtd_info *mtd, int mode)
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
@ -604,6 +787,19 @@ static void nand_flash_init(void)
|
||||||
|
|
||||||
void davinci_nand_init(struct nand_chip *nand)
|
void davinci_nand_init(struct nand_chip *nand)
|
||||||
{
|
{
|
||||||
|
#if defined CONFIG_KEYSTONE_RBL_NAND
|
||||||
|
int i;
|
||||||
|
struct nand_ecclayout *layout;
|
||||||
|
|
||||||
|
layout = &nand_keystone_rbl_4bit_layout_oobfirst;
|
||||||
|
layout->oobavail = 0;
|
||||||
|
for (i = 0; layout->oobfree[i].length &&
|
||||||
|
i < ARRAY_SIZE(layout->oobfree); i++)
|
||||||
|
layout->oobavail += layout->oobfree[i].length;
|
||||||
|
|
||||||
|
nand->write_page = nand_davinci_write_page;
|
||||||
|
nand->ecc.read_page = nand_davinci_read_page_hwecc;
|
||||||
|
#endif
|
||||||
nand->chip_delay = 0;
|
nand->chip_delay = 0;
|
||||||
#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
|
#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
|
||||||
nand->bbt_options |= NAND_BBT_USE_FLASH;
|
nand->bbt_options |= NAND_BBT_USE_FLASH;
|
||||||
|
|
|
@ -211,6 +211,8 @@ struct cpdma_chan {
|
||||||
#define chan_read(chan, fld) __raw_readl((chan)->fld)
|
#define chan_read(chan, fld) __raw_readl((chan)->fld)
|
||||||
#define chan_read_ptr(chan, fld) ((void *)__raw_readl((chan)->fld))
|
#define chan_read_ptr(chan, fld) ((void *)__raw_readl((chan)->fld))
|
||||||
|
|
||||||
|
#define for_active_slave(slave, priv) \
|
||||||
|
slave = (priv)->slaves + (priv)->data.active_slave; if (slave)
|
||||||
#define for_each_slave(slave, priv) \
|
#define for_each_slave(slave, priv) \
|
||||||
for (slave = (priv)->slaves; slave != (priv)->slaves + \
|
for (slave = (priv)->slaves; slave != (priv)->slaves + \
|
||||||
(priv)->data.slaves; slave++)
|
(priv)->data.slaves; slave++)
|
||||||
|
@ -609,7 +611,7 @@ static int cpsw_update_link(struct cpsw_priv *priv)
|
||||||
int link = 0;
|
int link = 0;
|
||||||
struct cpsw_slave *slave;
|
struct cpsw_slave *slave;
|
||||||
|
|
||||||
for_each_slave(slave, priv)
|
for_active_slave(slave, priv)
|
||||||
cpsw_slave_update_link(slave, priv, &link);
|
cpsw_slave_update_link(slave, priv, &link);
|
||||||
priv->mdio_link = readl(&mdio_regs->link);
|
priv->mdio_link = readl(&mdio_regs->link);
|
||||||
return link;
|
return link;
|
||||||
|
@ -785,7 +787,7 @@ static int cpsw_init(struct eth_device *dev, bd_t *bis)
|
||||||
ALE_SECURE);
|
ALE_SECURE);
|
||||||
cpsw_ale_add_mcast(priv, NetBcastAddr, 1 << priv->host_port);
|
cpsw_ale_add_mcast(priv, NetBcastAddr, 1 << priv->host_port);
|
||||||
|
|
||||||
for_each_slave(slave, priv)
|
for_active_slave(slave, priv)
|
||||||
cpsw_slave_init(slave, priv);
|
cpsw_slave_init(slave, priv);
|
||||||
|
|
||||||
cpsw_update_link(priv);
|
cpsw_update_link(priv);
|
||||||
|
@ -1013,7 +1015,7 @@ int cpsw_register(struct cpsw_platform_data *data)
|
||||||
|
|
||||||
cpsw_mdio_init(dev->name, data->mdio_base, data->mdio_div);
|
cpsw_mdio_init(dev->name, data->mdio_base, data->mdio_div);
|
||||||
priv->bus = miiphy_get_dev_by_name(dev->name);
|
priv->bus = miiphy_get_dev_by_name(dev->name);
|
||||||
for_each_slave(slave, priv)
|
for_active_slave(slave, priv)
|
||||||
cpsw_phy_init(dev, slave);
|
cpsw_phy_init(dev, slave);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
|
#include <asm/errno.h>
|
||||||
|
#include <power/pmic.h>
|
||||||
#include <power/tps65218.h>
|
#include <power/tps65218.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,3 +97,23 @@ int tps65218_voltage_update(uchar dc_cntrl_reg, uchar volt_sel)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int power_tps65218_init(unsigned char bus)
|
||||||
|
{
|
||||||
|
static const char name[] = "TPS65218_PMIC";
|
||||||
|
struct pmic *p = pmic_alloc();
|
||||||
|
|
||||||
|
if (!p) {
|
||||||
|
printf("%s: POWER allocation error!\n", __func__);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
p->name = name;
|
||||||
|
p->interface = PMIC_I2C;
|
||||||
|
p->number_of_regs = TPS65218_PMIC_NUM_OF_REGS;
|
||||||
|
p->hw.i2c.addr = TPS65218_CHIP_PM;
|
||||||
|
p->hw.i2c.tx_num = 1;
|
||||||
|
p->bus = bus;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#define serial_in(y) readb(y)
|
#define serial_in(y) readb(y)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_K2HK_EVM)
|
#if defined(CONFIG_SOC_KEYSTONE)
|
||||||
#define UART_REG_VAL_PWREMU_MGMT_UART_DISABLE 0
|
#define UART_REG_VAL_PWREMU_MGMT_UART_DISABLE 0
|
||||||
#define UART_REG_VAL_PWREMU_MGMT_UART_ENABLE ((1 << 14) | (1 << 13) | (1 << 0))
|
#define UART_REG_VAL_PWREMU_MGMT_UART_ENABLE ((1 << 14) | (1 << 13) | (1 << 0))
|
||||||
#undef UART_MCRVAL
|
#undef UART_MCRVAL
|
||||||
|
@ -88,7 +88,7 @@ void NS16550_init(NS16550_t com_port, int baud_divisor)
|
||||||
/* /16 is proper to hit 115200 with 48MHz */
|
/* /16 is proper to hit 115200 with 48MHz */
|
||||||
serial_out(0, &com_port->mdr1);
|
serial_out(0, &com_port->mdr1);
|
||||||
#endif /* CONFIG_OMAP */
|
#endif /* CONFIG_OMAP */
|
||||||
#if defined(CONFIG_K2HK_EVM)
|
#if defined(CONFIG_SOC_KEYSTONE)
|
||||||
serial_out(UART_REG_VAL_PWREMU_MGMT_UART_ENABLE, &com_port->regC);
|
serial_out(UART_REG_VAL_PWREMU_MGMT_UART_ENABLE, &com_port->regC);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,6 +254,11 @@
|
||||||
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
#ifdef CONFIG_SPL_OS_BOOT
|
||||||
|
#define CONFIG_CMD_SPL_NAND_OFS 0x00080000 /* os parameters */
|
||||||
|
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x00200000 /* kernel offset */
|
||||||
|
#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -453,6 +458,7 @@
|
||||||
#define CONFIG_SYS_MAX_FLASH_BANKS 1
|
#define CONFIG_SYS_MAX_FLASH_BANKS 1
|
||||||
#define CONFIG_SYS_FLASH_BASE (0x08000000)
|
#define CONFIG_SYS_FLASH_BASE (0x08000000)
|
||||||
#define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_16BIT
|
#define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_16BIT
|
||||||
|
#define CONFIG_SYS_FLASH_SIZE 0x01000000
|
||||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
||||||
/* Reduce SPL size by removing unlikey targets */
|
/* Reduce SPL size by removing unlikey targets */
|
||||||
#ifdef CONFIG_NOR_BOOT
|
#ifdef CONFIG_NOR_BOOT
|
||||||
|
|
|
@ -252,17 +252,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MAX_FLASH_SECT 520 /* max number of sectors */
|
#define CONFIG_SYS_MAX_FLASH_SECT 520 /* max number of sectors */
|
||||||
/* on one chip */
|
/* on one chip */
|
||||||
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
|
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
|
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
||||||
|
|
|
@ -259,18 +259,13 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MAX_FLASH_SECT 520 /* max number of sectors */
|
#define CONFIG_SYS_MAX_FLASH_SECT 520 /* max number of sectors */
|
||||||
/* on one chip */
|
/* on one chip */
|
||||||
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
|
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NAND)
|
#if defined(CONFIG_CMD_NAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
|
|
|
@ -33,6 +33,8 @@
|
||||||
#define CONFIG_SYS_I2C_MULTI_EEPROMS
|
#define CONFIG_SYS_I2C_MULTI_EEPROMS
|
||||||
|
|
||||||
/* Power */
|
/* Power */
|
||||||
|
#define CONFIG_POWER
|
||||||
|
#define CONFIG_POWER_I2C
|
||||||
#define CONFIG_POWER_TPS65218
|
#define CONFIG_POWER_TPS65218
|
||||||
|
|
||||||
/* SPL defines. */
|
/* SPL defines. */
|
||||||
|
|
|
@ -150,6 +150,11 @@
|
||||||
#define CONFIG_ENV_OFFSET 0x300000 /* environment starts here */
|
#define CONFIG_ENV_OFFSET 0x300000 /* environment starts here */
|
||||||
#define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) /* 128 KiB */
|
#define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) /* 128 KiB */
|
||||||
#define CONFIG_SYS_NAND_ONFI_DETECTION
|
#define CONFIG_SYS_NAND_ONFI_DETECTION
|
||||||
|
#ifdef CONFIG_SPL_OS_BOOT
|
||||||
|
#define CONFIG_CMD_SPL_NAND_OFS 0x400000 /* un-assigned: (using dtb) */
|
||||||
|
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x500000
|
||||||
|
#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
|
||||||
|
#endif
|
||||||
|
|
||||||
/* GPIO pin + bank to pin ID mapping */
|
/* GPIO pin + bank to pin ID mapping */
|
||||||
#define GPIO_PIN(_bank, _pin) ((_bank << 5) + _pin)
|
#define GPIO_PIN(_bank, _pin) ((_bank << 5) + _pin)
|
||||||
|
|
|
@ -258,9 +258,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
|
|
|
@ -262,8 +262,6 @@
|
||||||
#define PHYS_SDRAM_2 OMAP34XX_SDRC_CS1
|
#define PHYS_SDRAM_2 OMAP34XX_SDRC_CS1
|
||||||
|
|
||||||
/* NAND and environment organization */
|
/* NAND and environment organization */
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
|
|
||||||
#define CONFIG_ENV_IS_IN_NAND 1
|
#define CONFIG_ENV_IS_IN_NAND 1
|
||||||
|
|
|
@ -251,10 +251,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
|
|
||||||
#define CONFIG_SYS_FLASH_BASE boot_flash_base
|
#define CONFIG_SYS_FLASH_BASE boot_flash_base
|
||||||
|
|
37
include/configs/k2e_evm.h
Normal file
37
include/configs/k2e_evm.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Configuration header file for TI's k2e-evm
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CONFIG_K2E_EVM_H
|
||||||
|
#define __CONFIG_K2E_EVM_H
|
||||||
|
|
||||||
|
/* Platform type */
|
||||||
|
#define CONFIG_SOC_K2E
|
||||||
|
#define CONFIG_K2E_EVM
|
||||||
|
|
||||||
|
/* U-Boot general configuration */
|
||||||
|
#define CONFIG_SYS_PROMPT "K2E EVM # "
|
||||||
|
|
||||||
|
#define KS2_ARGS_UBI "args_ubi=setenv bootargs ${bootargs} rootfstype=ubifs "\
|
||||||
|
"root=ubi0:rootfs rootflags=sync rw ubi.mtd=2,2048\0"
|
||||||
|
|
||||||
|
#define KS2_FDT_NAME "name_fdt=k2e-evm.dtb\0"
|
||||||
|
#define KS2_ADDR_MON "addr_mon=0x0c140000\0"
|
||||||
|
#define KS2_NAME_MON "name_mon=skern-k2e-evm.bin\0"
|
||||||
|
#define NAME_UBOOT "name_uboot=u-boot-spi-k2e-evm.gph\0"
|
||||||
|
#define NAME_UBI "name_ubi=k2e-evm-ubifs.ubi\0"
|
||||||
|
|
||||||
|
#include <configs/ks2_evm.h>
|
||||||
|
|
||||||
|
/* SPL SPI Loader Configuration */
|
||||||
|
#define CONFIG_SPL_TEXT_BASE 0x0c100000
|
||||||
|
|
||||||
|
/* NAND Configuration */
|
||||||
|
#define CONFIG_SYS_NAND_PAGE_2K
|
||||||
|
|
||||||
|
#endif /* __CONFIG_K2E_EVM_H */
|
|
@ -14,252 +14,27 @@
|
||||||
#define CONFIG_SOC_K2HK
|
#define CONFIG_SOC_K2HK
|
||||||
#define CONFIG_K2HK_EVM
|
#define CONFIG_K2HK_EVM
|
||||||
|
|
||||||
/* U-Boot Build Configuration */
|
/* U-Boot general configuration */
|
||||||
#define CONFIG_SKIP_LOWLEVEL_INIT /* U-Boot is a 2nd stage loader */
|
#define CONFIG_SYS_PROMPT "K2HK EVM # "
|
||||||
#define CONFIG_SYS_NO_FLASH /* that is, no *NOR* flash */
|
|
||||||
#define CONFIG_SYS_CONSOLE_INFO_QUIET
|
|
||||||
#define CONFIG_BOARD_EARLY_INIT_F
|
|
||||||
#define CONFIG_SYS_THUMB_BUILD
|
|
||||||
|
|
||||||
/* SoC Configuration */
|
#define KS2_ARGS_UBI "args_ubi=setenv bootargs ${bootargs} rootfstype=ubifs "\
|
||||||
#define CONFIG_ARMV7
|
"root=ubi0:rootfs rootflags=sync rw ubi.mtd=2,2048\0"
|
||||||
#define CONFIG_ARCH_CPU_INIT
|
|
||||||
#define CONFIG_SYS_ARCH_TIMER
|
|
||||||
#define CONFIG_SYS_HZ 1000
|
|
||||||
#define CONFIG_SYS_TEXT_BASE 0x0c001000
|
|
||||||
#define CONFIG_SPL_TARGET "u-boot-spi.gph"
|
|
||||||
#define CONFIG_SYS_DCACHE_OFF
|
|
||||||
|
|
||||||
/* Memory Configuration */
|
#define KS2_FDT_NAME "name_fdt=k2hk-evm.dtb\0"
|
||||||
#define CONFIG_NR_DRAM_BANKS 2
|
#define KS2_ADDR_MON "addr_mon=0x0c5f0000\0"
|
||||||
#define CONFIG_SYS_SDRAM_BASE 0x80000000
|
#define KS2_NAME_MON "name_mon=skern-k2hk-evm.bin\0"
|
||||||
#define CONFIG_SYS_LPAE_SDRAM_BASE 0x800000000
|
#define NAME_UBOOT "name_uboot=u-boot-spi-k2hk-evm.gph\0"
|
||||||
#define CONFIG_MAX_RAM_BANK_SIZE (2 << 30) /* 2GB */
|
#define NAME_UBI "name_ubi=k2hk-evm-ubifs.ubi\0"
|
||||||
#define CONFIG_STACKSIZE (512 << 10) /* 512 KiB */
|
|
||||||
#define CONFIG_SYS_MALLOC_LEN (4 << 20) /* 4 MiB */
|
#include <configs/ks2_evm.h>
|
||||||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_TEXT_BASE - \
|
|
||||||
GENERATED_GBL_DATA_SIZE)
|
|
||||||
|
|
||||||
/* SPL SPI Loader Configuration */
|
/* SPL SPI Loader Configuration */
|
||||||
#define CONFIG_SPL_TEXT_BASE 0x0c200000
|
#define CONFIG_SPL_TEXT_BASE 0x0c200000
|
||||||
#define CONFIG_SPL_PAD_TO 65536
|
|
||||||
#define CONFIG_SPL_MAX_SIZE (CONFIG_SPL_PAD_TO - 8)
|
|
||||||
#define CONFIG_SPL_BSS_START_ADDR (CONFIG_SPL_TEXT_BASE + \
|
|
||||||
CONFIG_SPL_MAX_SIZE)
|
|
||||||
#define CONFIG_SPL_BSS_MAX_SIZE (32 * 1024)
|
|
||||||
#define CONFIG_SYS_SPL_MALLOC_START (CONFIG_SPL_BSS_START_ADDR + \
|
|
||||||
CONFIG_SPL_BSS_MAX_SIZE)
|
|
||||||
#define CONFIG_SYS_SPL_MALLOC_SIZE (32 * 1024)
|
|
||||||
#define CONFIG_SPL_STACK_SIZE (8 * 1024)
|
|
||||||
#define CONFIG_SPL_STACK (CONFIG_SYS_SPL_MALLOC_START + \
|
|
||||||
CONFIG_SYS_SPL_MALLOC_SIZE + \
|
|
||||||
CONFIG_SPL_STACK_SIZE - 4)
|
|
||||||
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
|
||||||
#define CONFIG_SPL_LIBGENERIC_SUPPORT
|
|
||||||
#define CONFIG_SPL_SERIAL_SUPPORT
|
|
||||||
#define CONFIG_SPL_SPI_FLASH_SUPPORT
|
|
||||||
#define CONFIG_SPL_SPI_SUPPORT
|
|
||||||
#define CONFIG_SPL_BOARD_INIT
|
|
||||||
#define CONFIG_SPL_SPI_LOAD
|
|
||||||
#define CONFIG_SPL_SPI_BUS 0
|
|
||||||
#define CONFIG_SPL_SPI_CS 0
|
|
||||||
#define CONFIG_SYS_SPI_U_BOOT_OFFS CONFIG_SPL_PAD_TO
|
|
||||||
#define CONFIG_SPL_FRAMEWORK
|
|
||||||
|
|
||||||
/* UART Configuration */
|
|
||||||
#define CONFIG_SYS_NS16550
|
|
||||||
#define CONFIG_SYS_NS16550_SERIAL
|
|
||||||
#define CONFIG_SYS_NS16550_MEM32
|
|
||||||
#define CONFIG_SYS_NS16550_REG_SIZE -4
|
|
||||||
#define CONFIG_SYS_NS16550_COM1 KS2_UART0_BASE
|
|
||||||
#define CONFIG_SYS_NS16550_COM2 KS2_UART1_BASE
|
|
||||||
#define CONFIG_SYS_NS16550_CLK clk_get_rate(K2HK_CLK1_6)
|
|
||||||
#define CONFIG_CONS_INDEX 1
|
|
||||||
#define CONFIG_BAUDRATE 115200
|
|
||||||
|
|
||||||
/* SPI Configuration */
|
|
||||||
#define CONFIG_SPI
|
|
||||||
#define CONFIG_SPI_FLASH
|
|
||||||
#define CONFIG_SPI_FLASH_STMICRO
|
|
||||||
#define CONFIG_DAVINCI_SPI
|
|
||||||
#define CONFIG_SYS_SPI0
|
|
||||||
#define CONFIG_SYS_SPI_BASE K2HK_SPI_BASE
|
|
||||||
#define CONFIG_SYS_SPI0_NUM_CS 4
|
|
||||||
#define CONFIG_SYS_SPI1
|
|
||||||
#define CONFIG_SYS_SPI1_BASE K2HK_SPI1_BASE
|
|
||||||
#define CONFIG_SYS_SPI1_NUM_CS 4
|
|
||||||
#define CONFIG_SYS_SPI2
|
|
||||||
#define CONFIG_SYS_SPI2_NUM_CS 4
|
|
||||||
#define CONFIG_SYS_SPI2_BASE K2HK_SPI2_BASE
|
|
||||||
#define CONFIG_CMD_SPI
|
|
||||||
#define CONFIG_SYS_SPI_CLK clk_get_rate(K2HK_LPSC_EMIF25_SPI)
|
|
||||||
#define CONFIG_SF_DEFAULT_SPEED 30000000
|
|
||||||
#define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED
|
|
||||||
|
|
||||||
/* I2C Configuration */
|
|
||||||
#define CONFIG_SYS_I2C
|
|
||||||
#define CONFIG_SYS_I2C_DAVINCI
|
|
||||||
#define CONFIG_SYS_DAVINCI_I2C_SPEED 100000
|
|
||||||
#define CONFIG_SYS_DAVINCI_I2C_SLAVE 0x10 /* SMBus host address */
|
|
||||||
#define CONFIG_SYS_DAVINCI_I2C_SPEED1 100000
|
|
||||||
#define CONFIG_SYS_DAVINCI_I2C_SLAVE1 0x10 /* SMBus host address */
|
|
||||||
#define CONFIG_SYS_DAVINCI_I2C_SPEED2 100000
|
|
||||||
#define CONFIG_SYS_DAVINCI_I2C_SLAVE2 0x10 /* SMBus host address */
|
|
||||||
#define I2C_BUS_MAX 3
|
|
||||||
|
|
||||||
/* EEPROM definitions */
|
|
||||||
#define CONFIG_SYS_I2C_MULTI_EEPROMS
|
|
||||||
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
|
|
||||||
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50
|
|
||||||
#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 6
|
|
||||||
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 20
|
|
||||||
#define CONFIG_ENV_EEPROM_IS_ON_I2C
|
|
||||||
|
|
||||||
/* Network Configuration */
|
|
||||||
#define CONFIG_DRIVER_TI_KEYSTONE_NET
|
|
||||||
#define CONFIG_MII
|
|
||||||
#define CONFIG_BOOTP_DEFAULT
|
|
||||||
#define CONFIG_BOOTP_DNS
|
|
||||||
#define CONFIG_BOOTP_DNS2
|
|
||||||
#define CONFIG_BOOTP_SEND_HOSTNAME
|
|
||||||
#define CONFIG_NET_RETRY_COUNT 32
|
|
||||||
#define CONFIG_NET_MULTI
|
|
||||||
#define CONFIG_GET_LINK_STATUS_ATTEMPTS 5
|
|
||||||
#define CONFIG_SYS_SGMII_REFCLK_MHZ 312
|
|
||||||
#define CONFIG_SYS_SGMII_LINERATE_MHZ 1250
|
|
||||||
#define CONFIG_SYS_SGMII_RATESCALE 2
|
|
||||||
|
|
||||||
/* AEMIF */
|
|
||||||
#define CONFIG_TI_AEMIF
|
|
||||||
#define CONFIG_AEMIF_CNTRL_BASE KS2_AEMIF_CNTRL_BASE
|
|
||||||
|
|
||||||
/* NAND Configuration */
|
/* NAND Configuration */
|
||||||
#define CONFIG_NAND_DAVINCI
|
|
||||||
#define CONFIG_CMD_NAND_ECCLAYOUT
|
|
||||||
#define CONFIG_SYS_NAND_CS 2
|
|
||||||
#define CONFIG_SYS_NAND_USE_FLASH_BBT
|
|
||||||
#define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST
|
|
||||||
#define CONFIG_SYS_NAND_PAGE_2K
|
#define CONFIG_SYS_NAND_PAGE_2K
|
||||||
#define CONFIG_SYS_NAND_MASK_CLE 0x4000
|
|
||||||
#define CONFIG_SYS_NAND_MASK_ALE 0x2000
|
|
||||||
|
|
||||||
#define CONFIG_SYS_NAND_LARGEPAGE
|
/* Network */
|
||||||
#define CONFIG_SYS_NAND_BASE_LIST { 0x30000000, }
|
#define CONFIG_DRIVER_TI_KEYSTONE_NET
|
||||||
#define CONFIG_SYS_MAX_NAND_DEVICE 1
|
|
||||||
#define CONFIG_SYS_NAND_MAX_CHIPS 1
|
|
||||||
#define CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
|
|
||||||
#define CONFIG_ENV_SIZE (256 << 10) /* 256 KiB */
|
|
||||||
#define CONFIG_ENV_IS_IN_NAND
|
|
||||||
#define CONFIG_ENV_OFFSET 0x100000
|
|
||||||
#define CONFIG_MTD_PARTITIONS
|
|
||||||
#define CONFIG_MTD_DEVICE
|
|
||||||
#define CONFIG_RBTREE
|
|
||||||
#define CONFIG_LZO
|
|
||||||
#define MTDPARTS_DEFAULT "mtdparts=davinci_nand.0:" \
|
|
||||||
"1024k(bootloader)ro,512k(params)ro," \
|
|
||||||
"-(ubifs)"
|
|
||||||
/* U-Boot command configuration */
|
|
||||||
#include <config_cmd_default.h>
|
|
||||||
#define CONFIG_CMD_ASKENV
|
|
||||||
#define CONFIG_CMD_DHCP
|
|
||||||
#define CONFIG_CMD_I2C
|
|
||||||
#define CONFIG_CMD_PING
|
|
||||||
#define CONFIG_CMD_SAVES
|
|
||||||
#define CONFIG_CMD_MTDPARTS
|
|
||||||
#define CONFIG_CMD_NAND
|
|
||||||
#define CONFIG_CMD_UBI
|
|
||||||
#define CONFIG_CMD_UBIFS
|
|
||||||
#define CONFIG_CMD_SF
|
|
||||||
#define CONFIG_CMD_EEPROM
|
|
||||||
|
|
||||||
/* U-Boot general configuration */
|
|
||||||
#define CONFIG_SYS_GENERIC_BOARD
|
|
||||||
#define CONFIG_SYS_PROMPT "K2HK EVM # "
|
|
||||||
#define CONFIG_SYS_CBSIZE 1024
|
|
||||||
#define CONFIG_SYS_PBSIZE 2048
|
|
||||||
#define CONFIG_SYS_MAXARGS 16
|
|
||||||
#define CONFIG_SYS_HUSH_PARSER
|
|
||||||
#define CONFIG_SYS_LONGHELP
|
|
||||||
#define CONFIG_CRC32_VERIFY
|
|
||||||
#define CONFIG_MX_CYCLIC
|
|
||||||
#define CONFIG_CMDLINE_EDITING
|
|
||||||
#define CONFIG_VERSION_VARIABLE
|
|
||||||
#define CONFIG_TIMESTAMP
|
|
||||||
|
|
||||||
#define CONFIG_BOOTDELAY 3
|
|
||||||
#define CONFIG_BOOTFILE "uImage"
|
|
||||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
|
||||||
"boot=ramfs\0" \
|
|
||||||
"tftp_root=/\0" \
|
|
||||||
"nfs_root=/export\0" \
|
|
||||||
"mem_lpae=1\0" \
|
|
||||||
"mem_reserve=512M\0" \
|
|
||||||
"addr_fdt=0x87000000\0" \
|
|
||||||
"addr_kern=0x88000000\0" \
|
|
||||||
"addr_mon=0x0c5f0000\0" \
|
|
||||||
"addr_uboot=0x87000000\0" \
|
|
||||||
"addr_fs=0x82000000\0" \
|
|
||||||
"addr_ubi=0x82000000\0" \
|
|
||||||
"fdt_high=0xffffffff\0" \
|
|
||||||
"name_fdt=uImage-k2hk-evm.dtb\0" \
|
|
||||||
"name_fs=arago-console-image.cpio.gz\0" \
|
|
||||||
"name_kern=uImage-keystone-evm.bin\0" \
|
|
||||||
"name_mon=skern-keystone-evm.bin\0" \
|
|
||||||
"name_uboot=u-boot-spi-keystone-evm.gph\0" \
|
|
||||||
"name_ubi=keystone-evm-ubifs.ubi\0" \
|
|
||||||
"run_mon=mon_install ${addr_mon}\0" \
|
|
||||||
"run_kern=bootm ${addr_kern} - ${addr_fdt}\0" \
|
|
||||||
"init_net=run args_all args_net\0" \
|
|
||||||
"init_ubi=run args_all args_ubi; " \
|
|
||||||
"ubi part ubifs; ubifsmount boot\0" \
|
|
||||||
"get_fdt_net=dhcp ${addr_fdt} ${tftp_root}/${name_fdt}\0" \
|
|
||||||
"get_fdt_ubi=ubifsload ${addr_fdt} ${name_fdt}\0" \
|
|
||||||
"get_kern_net=dhcp ${addr_kern} ${tftp_root}/${name_kern}\0" \
|
|
||||||
"get_kern_ubi=ubifsload ${addr_kern} ${name_kern}\0" \
|
|
||||||
"get_mon_net=dhcp ${addr_mon} ${tftp_root}/${name_mon}\0" \
|
|
||||||
"get_mon_ubi=ubifsload ${addr_mon} ${name_mon}\0" \
|
|
||||||
"get_uboot_net=dhcp ${addr_uboot} ${tftp_root}/${name_uboot}\0" \
|
|
||||||
"burn_uboot=sf probe; sf erase 0 0x100000; " \
|
|
||||||
"sf write ${addr_uboot} 0 ${filesize}\0" \
|
|
||||||
"args_all=setenv bootargs console=ttyS0,115200n8 rootwait=1\0" \
|
|
||||||
"args_ubi=setenv bootargs ${bootargs} rootfstype=ubifs " \
|
|
||||||
"root=ubi0:rootfs rootflags=sync rw ubi.mtd=2,2048\0" \
|
|
||||||
"args_net=setenv bootargs ${bootargs} rootfstype=nfs " \
|
|
||||||
"root=/dev/nfs rw nfsroot=${serverip}:${nfs_root}," \
|
|
||||||
"${nfs_options} ip=dhcp\0" \
|
|
||||||
"nfs_options=v3,tcp,rsize=4096,wsize=4096\0" \
|
|
||||||
"get_fdt_ramfs=dhcp ${addr_fdt} ${tftp_root}/${name_fdt}\0" \
|
|
||||||
"get_kern_ramfs=dhcp ${addr_kern} ${tftp_root}/${name_kern}\0" \
|
|
||||||
"get_mon_ramfs=dhcp ${addr_mon} ${tftp_root}/${name_mon}\0" \
|
|
||||||
"get_fs_ramfs=dhcp ${addr_fs} ${tftp_root}/${name_fs}\0" \
|
|
||||||
"get_ubi_net=dhcp ${addr_ubi} ${tftp_root}/${name_ubi}\0" \
|
|
||||||
"burn_ubi=nand erase.part ubifs; " \
|
|
||||||
"nand write ${addr_ubi} ubifs ${filesize}\0" \
|
|
||||||
"init_ramfs=run args_all args_ramfs get_fs_ramfs\0" \
|
|
||||||
"args_ramfs=setenv bootargs ${bootargs} earlyprintk " \
|
|
||||||
"rdinit=/sbin/init rw root=/dev/ram0 " \
|
|
||||||
"initrd=0x802000000,9M\0" \
|
|
||||||
"no_post=1\0" \
|
|
||||||
"mtdparts=mtdparts=davinci_nand.0:" \
|
|
||||||
"1024k(bootloader)ro,512k(params)ro,522752k(ubifs)\0"
|
|
||||||
#define CONFIG_BOOTCOMMAND \
|
|
||||||
"run init_${boot} get_fdt_${boot} get_mon_${boot} " \
|
|
||||||
"get_kern_${boot} run_mon run_kern"
|
|
||||||
#define CONFIG_BOOTARGS \
|
|
||||||
|
|
||||||
/* Linux interfacing */
|
|
||||||
#define CONFIG_CMDLINE_TAG
|
|
||||||
#define CONFIG_SETUP_MEMORY_TAGS
|
|
||||||
#define CONFIG_OF_LIBFDT 1
|
|
||||||
#define CONFIG_OF_BOARD_SETUP
|
|
||||||
#define CONFIG_SYS_BARGSIZE 1024
|
|
||||||
#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + 0x08000000)
|
|
||||||
|
|
||||||
#define CONFIG_SUPPORT_RAW_INITRD
|
|
||||||
|
|
||||||
/* we may include files below only after all above definitions */
|
|
||||||
#include <asm/arch/hardware.h>
|
|
||||||
#include <asm/arch/clock.h>
|
|
||||||
#define CONFIG_SYS_HZ_CLOCK clk_get_rate(K2HK_CLK1_6)
|
|
||||||
|
|
||||||
#endif /* __CONFIG_K2HK_EVM_H */
|
#endif /* __CONFIG_K2HK_EVM_H */
|
||||||
|
|
275
include/configs/ks2_evm.h
Normal file
275
include/configs/ks2_evm.h
Normal file
|
@ -0,0 +1,275 @@
|
||||||
|
/*
|
||||||
|
* Common configuration header file for all Keystone II EVM platforms
|
||||||
|
*
|
||||||
|
* (C) Copyright 2012-2014
|
||||||
|
* Texas Instruments Incorporated, <www.ti.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CONFIG_KS2_EVM_H
|
||||||
|
#define __CONFIG_KS2_EVM_H
|
||||||
|
|
||||||
|
#define CONFIG_SOC_KEYSTONE
|
||||||
|
|
||||||
|
/* U-Boot Build Configuration */
|
||||||
|
#define CONFIG_SKIP_LOWLEVEL_INIT /* U-Boot is a 2nd stage loader */
|
||||||
|
#define CONFIG_SYS_NO_FLASH /* that is, no *NOR* flash */
|
||||||
|
#define CONFIG_SYS_CONSOLE_INFO_QUIET
|
||||||
|
#define CONFIG_BOARD_EARLY_INIT_F
|
||||||
|
#define CONFIG_SYS_THUMB_BUILD
|
||||||
|
|
||||||
|
/* SoC Configuration */
|
||||||
|
#define CONFIG_ARMV7
|
||||||
|
#define CONFIG_ARCH_CPU_INIT
|
||||||
|
#define CONFIG_SYS_ARCH_TIMER
|
||||||
|
#define CONFIG_SYS_HZ 1000
|
||||||
|
#define CONFIG_SYS_TEXT_BASE 0x0c001000
|
||||||
|
#define CONFIG_SPL_TARGET "u-boot-spi.gph"
|
||||||
|
#define CONFIG_SYS_DCACHE_OFF
|
||||||
|
|
||||||
|
/* Memory Configuration */
|
||||||
|
#define CONFIG_NR_DRAM_BANKS 2
|
||||||
|
#define CONFIG_SYS_SDRAM_BASE 0x80000000
|
||||||
|
#define CONFIG_SYS_LPAE_SDRAM_BASE 0x800000000
|
||||||
|
#define CONFIG_MAX_RAM_BANK_SIZE (2 << 30) /* 2GB */
|
||||||
|
#define CONFIG_STACKSIZE (512 << 10) /* 512 KiB */
|
||||||
|
#define CONFIG_SYS_MALLOC_LEN (4 << 20) /* 4 MiB */
|
||||||
|
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_TEXT_BASE - \
|
||||||
|
GENERATED_GBL_DATA_SIZE)
|
||||||
|
|
||||||
|
/* SPL SPI Loader Configuration */
|
||||||
|
#define CONFIG_SPL_PAD_TO 65536
|
||||||
|
#define CONFIG_SPL_MAX_SIZE (CONFIG_SPL_PAD_TO - 8)
|
||||||
|
#define CONFIG_SPL_BSS_START_ADDR (CONFIG_SPL_TEXT_BASE + \
|
||||||
|
CONFIG_SPL_MAX_SIZE)
|
||||||
|
#define CONFIG_SPL_BSS_MAX_SIZE (32 * 1024)
|
||||||
|
#define CONFIG_SYS_SPL_MALLOC_START (CONFIG_SPL_BSS_START_ADDR + \
|
||||||
|
CONFIG_SPL_BSS_MAX_SIZE)
|
||||||
|
#define CONFIG_SYS_SPL_MALLOC_SIZE (32 * 1024)
|
||||||
|
#define CONFIG_SPL_STACK_SIZE (8 * 1024)
|
||||||
|
#define CONFIG_SPL_STACK (CONFIG_SYS_SPL_MALLOC_START + \
|
||||||
|
CONFIG_SYS_SPL_MALLOC_SIZE + \
|
||||||
|
CONFIG_SPL_STACK_SIZE - 4)
|
||||||
|
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
||||||
|
#define CONFIG_SPL_LIBGENERIC_SUPPORT
|
||||||
|
#define CONFIG_SPL_SERIAL_SUPPORT
|
||||||
|
#define CONFIG_SPL_SPI_FLASH_SUPPORT
|
||||||
|
#define CONFIG_SPL_SPI_SUPPORT
|
||||||
|
#define CONFIG_SPL_BOARD_INIT
|
||||||
|
#define CONFIG_SPL_SPI_LOAD
|
||||||
|
#define CONFIG_SPL_SPI_BUS 0
|
||||||
|
#define CONFIG_SPL_SPI_CS 0
|
||||||
|
#define CONFIG_SYS_SPI_U_BOOT_OFFS CONFIG_SPL_PAD_TO
|
||||||
|
#define CONFIG_SPL_FRAMEWORK
|
||||||
|
|
||||||
|
/* UART Configuration */
|
||||||
|
#define CONFIG_SYS_NS16550
|
||||||
|
#define CONFIG_SYS_NS16550_SERIAL
|
||||||
|
#define CONFIG_SYS_NS16550_MEM32
|
||||||
|
#define CONFIG_SYS_NS16550_REG_SIZE -4
|
||||||
|
#define CONFIG_SYS_NS16550_COM1 KS2_UART0_BASE
|
||||||
|
#define CONFIG_SYS_NS16550_COM2 KS2_UART1_BASE
|
||||||
|
#define CONFIG_SYS_NS16550_CLK clk_get_rate(KS2_CLK1_6)
|
||||||
|
#define CONFIG_CONS_INDEX 1
|
||||||
|
#define CONFIG_BAUDRATE 115200
|
||||||
|
|
||||||
|
/* SPI Configuration */
|
||||||
|
#define CONFIG_SPI
|
||||||
|
#define CONFIG_SPI_FLASH
|
||||||
|
#define CONFIG_SPI_FLASH_STMICRO
|
||||||
|
#define CONFIG_DAVINCI_SPI
|
||||||
|
#define CONFIG_CMD_SPI
|
||||||
|
#define CONFIG_SYS_SPI_CLK clk_get_rate(KS2_CLK1_6)
|
||||||
|
#define CONFIG_SF_DEFAULT_SPEED 30000000
|
||||||
|
#define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED
|
||||||
|
#define CONFIG_SYS_SPI0
|
||||||
|
#define CONFIG_SYS_SPI_BASE KS2_SPI0_BASE
|
||||||
|
#define CONFIG_SYS_SPI0_NUM_CS 4
|
||||||
|
#define CONFIG_SYS_SPI1
|
||||||
|
#define CONFIG_SYS_SPI1_BASE KS2_SPI1_BASE
|
||||||
|
#define CONFIG_SYS_SPI1_NUM_CS 4
|
||||||
|
#define CONFIG_SYS_SPI2
|
||||||
|
#define CONFIG_SYS_SPI2_BASE KS2_SPI2_BASE
|
||||||
|
#define CONFIG_SYS_SPI2_NUM_CS 4
|
||||||
|
|
||||||
|
/* Network Configuration */
|
||||||
|
#define CONFIG_MII
|
||||||
|
#define CONFIG_BOOTP_DEFAULT
|
||||||
|
#define CONFIG_BOOTP_DNS
|
||||||
|
#define CONFIG_BOOTP_DNS2
|
||||||
|
#define CONFIG_BOOTP_SEND_HOSTNAME
|
||||||
|
#define CONFIG_NET_RETRY_COUNT 32
|
||||||
|
#define CONFIG_NET_MULTI
|
||||||
|
#define CONFIG_GET_LINK_STATUS_ATTEMPTS 5
|
||||||
|
#define CONFIG_SYS_SGMII_REFCLK_MHZ 312
|
||||||
|
#define CONFIG_SYS_SGMII_LINERATE_MHZ 1250
|
||||||
|
#define CONFIG_SYS_SGMII_RATESCALE 2
|
||||||
|
|
||||||
|
/* AEMIF */
|
||||||
|
#define CONFIG_TI_AEMIF
|
||||||
|
#define CONFIG_AEMIF_CNTRL_BASE KS2_AEMIF_CNTRL_BASE
|
||||||
|
|
||||||
|
/* I2C Configuration */
|
||||||
|
#define CONFIG_SYS_I2C
|
||||||
|
#define CONFIG_SYS_I2C_DAVINCI
|
||||||
|
#define CONFIG_SYS_DAVINCI_I2C_SPEED 100000
|
||||||
|
#define CONFIG_SYS_DAVINCI_I2C_SLAVE 0x10 /* SMBus host address */
|
||||||
|
#define CONFIG_SYS_DAVINCI_I2C_SPEED1 100000
|
||||||
|
#define CONFIG_SYS_DAVINCI_I2C_SLAVE1 0x10 /* SMBus host address */
|
||||||
|
#define CONFIG_SYS_DAVINCI_I2C_SPEED2 100000
|
||||||
|
#define CONFIG_SYS_DAVINCI_I2C_SLAVE2 0x10 /* SMBus host address */
|
||||||
|
#define I2C_BUS_MAX 3
|
||||||
|
|
||||||
|
/* EEPROM definitions */
|
||||||
|
#define CONFIG_SYS_I2C_MULTI_EEPROMS
|
||||||
|
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
|
||||||
|
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50
|
||||||
|
#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 6
|
||||||
|
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 20
|
||||||
|
#define CONFIG_ENV_EEPROM_IS_ON_I2C
|
||||||
|
|
||||||
|
/* NAND Configuration */
|
||||||
|
#define CONFIG_NAND_DAVINCI
|
||||||
|
#define CONFIG_KEYSTONE_RBL_NAND
|
||||||
|
#define CONFIG_KEYSTONE_NAND_MAX_RBL_SIZE CONFIG_ENV_OFFSET
|
||||||
|
#define CONFIG_SYS_NAND_MASK_CLE 0x4000
|
||||||
|
#define CONFIG_SYS_NAND_MASK_ALE 0x2000
|
||||||
|
#define CONFIG_SYS_NAND_CS 2
|
||||||
|
#define CONFIG_SYS_NAND_USE_FLASH_BBT
|
||||||
|
#define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST
|
||||||
|
|
||||||
|
#define CONFIG_SYS_NAND_LARGEPAGE
|
||||||
|
#define CONFIG_SYS_NAND_BASE_LIST { 0x30000000, }
|
||||||
|
#define CONFIG_SYS_MAX_NAND_DEVICE 1
|
||||||
|
#define CONFIG_SYS_NAND_MAX_CHIPS 1
|
||||||
|
#define CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
|
||||||
|
#define CONFIG_ENV_SIZE (256 << 10) /* 256 KiB */
|
||||||
|
#define CONFIG_ENV_IS_IN_NAND
|
||||||
|
#define CONFIG_ENV_OFFSET 0x100000
|
||||||
|
#define CONFIG_MTD_PARTITIONS
|
||||||
|
#define CONFIG_MTD_DEVICE
|
||||||
|
#define CONFIG_RBTREE
|
||||||
|
#define CONFIG_LZO
|
||||||
|
#define MTDIDS_DEFAULT "nand0=davinci_nand.0"
|
||||||
|
#define MTDPARTS_DEFAULT "mtdparts=davinci_nand.0:" \
|
||||||
|
"1024k(bootloader)ro,512k(params)ro," \
|
||||||
|
"-(ubifs)"
|
||||||
|
|
||||||
|
/* U-Boot command configuration */
|
||||||
|
#include <config_cmd_default.h>
|
||||||
|
#define CONFIG_CMD_ASKENV
|
||||||
|
#define CONFIG_CMD_DHCP
|
||||||
|
#define CONFIG_CMD_I2C
|
||||||
|
#define CONFIG_CMD_PING
|
||||||
|
#define CONFIG_CMD_SAVES
|
||||||
|
#define CONFIG_CMD_MTDPARTS
|
||||||
|
#define CONFIG_CMD_NAND
|
||||||
|
#define CONFIG_CMD_UBI
|
||||||
|
#define CONFIG_CMD_UBIFS
|
||||||
|
#define CONFIG_CMD_SF
|
||||||
|
#define CONFIG_CMD_EEPROM
|
||||||
|
|
||||||
|
/* U-Boot general configuration */
|
||||||
|
#define CONFIG_SYS_GENERIC_BOARD
|
||||||
|
#define CONFIG_SYS_CBSIZE 1024
|
||||||
|
#define CONFIG_SYS_PBSIZE 2048
|
||||||
|
#define CONFIG_SYS_MAXARGS 16
|
||||||
|
#define CONFIG_SYS_HUSH_PARSER
|
||||||
|
#define CONFIG_SYS_LONGHELP
|
||||||
|
#define CONFIG_CRC32_VERIFY
|
||||||
|
#define CONFIG_MX_CYCLIC
|
||||||
|
#define CONFIG_CMDLINE_EDITING
|
||||||
|
#define CONFIG_VERSION_VARIABLE
|
||||||
|
#define CONFIG_TIMESTAMP
|
||||||
|
|
||||||
|
/* EDMA3 */
|
||||||
|
#define CONFIG_TI_EDMA3
|
||||||
|
|
||||||
|
#define CONFIG_BOOTDELAY 3
|
||||||
|
#define CONFIG_BOOTFILE "uImage"
|
||||||
|
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||||
|
"boot=ramfs\0" \
|
||||||
|
"tftp_root=/\0" \
|
||||||
|
"nfs_root=/export\0" \
|
||||||
|
"mem_lpae=1\0" \
|
||||||
|
"mem_reserve=512M\0" \
|
||||||
|
"addr_fdt=0x87000000\0" \
|
||||||
|
"addr_kern=0x88000000\0" \
|
||||||
|
KS2_ADDR_MON \
|
||||||
|
"addr_uboot=0x87000000\0" \
|
||||||
|
"addr_fs=0x82000000\0" \
|
||||||
|
"addr_ubi=0x82000000\0" \
|
||||||
|
"addr_secdb_key=0xc000000\0" \
|
||||||
|
"fdt_high=0xffffffff\0" \
|
||||||
|
KS2_FDT_NAME \
|
||||||
|
"name_fs=arago-console-image.cpio.gz\0" \
|
||||||
|
"name_kern=uImage\0" \
|
||||||
|
KS2_NAME_MON \
|
||||||
|
NAME_UBOOT \
|
||||||
|
NAME_UBI \
|
||||||
|
"run_mon=mon_install ${addr_mon}\0" \
|
||||||
|
"run_kern=bootm ${addr_kern} - ${addr_fdt}\0" \
|
||||||
|
"init_net=run args_all args_net\0" \
|
||||||
|
"init_ubi=run args_all args_ubi; " \
|
||||||
|
"ubi part ubifs; ubifsmount boot;" \
|
||||||
|
"ubifsload ${addr_secdb_key} securedb.key.bin;\0" \
|
||||||
|
"get_fdt_net=dhcp ${addr_fdt} ${tftp_root}/${name_fdt}\0" \
|
||||||
|
"get_fdt_ubi=ubifsload ${addr_fdt} ${name_fdt}\0" \
|
||||||
|
"get_kern_net=dhcp ${addr_kern} ${tftp_root}/${name_kern}\0" \
|
||||||
|
"get_kern_ubi=ubifsload ${addr_kern} ${name_kern}\0" \
|
||||||
|
"get_mon_net=dhcp ${addr_mon} ${tftp_root}/${name_mon}\0" \
|
||||||
|
"get_mon_ubi=ubifsload ${addr_mon} ${name_mon}\0" \
|
||||||
|
"get_uboot_net=dhcp ${addr_uboot} ${tftp_root}/${name_uboot}\0" \
|
||||||
|
"burn_uboot_spi=sf probe; sf erase 0 0x100000; " \
|
||||||
|
"sf write ${addr_uboot} 0 ${filesize}\0" \
|
||||||
|
"burn_uboot_nand=nand erase 0 0x100000; " \
|
||||||
|
"nand write ${addr_uboot} 0 ${filesize}\0" \
|
||||||
|
"args_all=setenv bootargs console=ttyS0,115200n8 rootwait=1\0" \
|
||||||
|
KS2_ARGS_UBI \
|
||||||
|
"args_net=setenv bootargs ${bootargs} rootfstype=nfs " \
|
||||||
|
"root=/dev/nfs rw nfsroot=${serverip}:${nfs_root}," \
|
||||||
|
"${nfs_options} ip=dhcp\0" \
|
||||||
|
"nfs_options=v3,tcp,rsize=4096,wsize=4096\0" \
|
||||||
|
"get_fdt_ramfs=dhcp ${addr_fdt} ${tftp_root}/${name_fdt}\0" \
|
||||||
|
"get_kern_ramfs=dhcp ${addr_kern} ${tftp_root}/${name_kern}\0" \
|
||||||
|
"get_mon_ramfs=dhcp ${addr_mon} ${tftp_root}/${name_mon}\0" \
|
||||||
|
"get_fs_ramfs=dhcp ${addr_fs} ${tftp_root}/${name_fs}\0" \
|
||||||
|
"get_ubi_net=dhcp ${addr_ubi} ${tftp_root}/${name_ubi}\0" \
|
||||||
|
"burn_ubi=nand erase.part ubifs; " \
|
||||||
|
"nand write ${addr_ubi} ubifs ${filesize}\0" \
|
||||||
|
"init_ramfs=run args_all args_ramfs get_fs_ramfs\0" \
|
||||||
|
"args_ramfs=setenv bootargs ${bootargs} " \
|
||||||
|
"rdinit=/sbin/init rw root=/dev/ram0 " \
|
||||||
|
"initrd=0x802000000,9M\0" \
|
||||||
|
"no_post=1\0" \
|
||||||
|
"mtdparts=mtdparts=davinci_nand.0:" \
|
||||||
|
"1024k(bootloader)ro,512k(params)ro,-(ubifs)\0"
|
||||||
|
|
||||||
|
#define CONFIG_BOOTCOMMAND \
|
||||||
|
"run init_${boot} get_fdt_${boot} get_mon_${boot} " \
|
||||||
|
"get_kern_${boot} run_mon run_kern"
|
||||||
|
|
||||||
|
#define CONFIG_BOOTARGS \
|
||||||
|
|
||||||
|
/* Linux interfacing */
|
||||||
|
#define CONFIG_CMDLINE_TAG
|
||||||
|
#define CONFIG_SETUP_MEMORY_TAGS
|
||||||
|
#define CONFIG_OF_LIBFDT 1
|
||||||
|
#define CONFIG_OF_BOARD_SETUP
|
||||||
|
#define CONFIG_SYS_BARGSIZE 1024
|
||||||
|
#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + 0x08000000)
|
||||||
|
#define CONFIG_LINUX_BOOT_PARAM_ADDR (CONFIG_SYS_SDRAM_BASE + 0x100)
|
||||||
|
|
||||||
|
#define CONFIG_SUPPORT_RAW_INITRD
|
||||||
|
|
||||||
|
/* we may include files below only after all above definitions */
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#define CONFIG_SYS_HZ_CLOCK clk_get_rate(KS2_CLK1_6)
|
||||||
|
|
||||||
|
/* Maximum memory size for relocated U-boot at the end of the DDR3 memory
|
||||||
|
which is NOT applicable for DDR ECC test */
|
||||||
|
#define CONFIG_MAX_UBOOT_MEM_SIZE (4 << 20) /* 4 MiB */
|
||||||
|
|
||||||
|
#endif /* __CONFIG_KS2_EVM_H */
|
|
@ -316,10 +316,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_NAND_OMAP_GPMC
|
#define CONFIG_NAND_OMAP_GPMC
|
||||||
#define CONFIG_ENV_IS_IN_NAND
|
#define CONFIG_ENV_IS_IN_NAND
|
||||||
#define SMNAND_ENV_OFFSET 0x180000 /* environment starts here */
|
#define SMNAND_ENV_OFFSET 0x180000 /* environment starts here */
|
||||||
|
|
|
@ -220,8 +220,6 @@
|
||||||
|
|
||||||
#ifdef ONENAND_SUPPORT
|
#ifdef ONENAND_SUPPORT
|
||||||
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
#define CONFIG_SYS_ONENAND_BASE ONENAND_MAP
|
#define CONFIG_SYS_ONENAND_BASE ONENAND_MAP
|
||||||
#define CONFIG_MTD_DEVICE
|
#define CONFIG_MTD_DEVICE
|
||||||
#define CONFIG_MTD_PARTITIONS
|
#define CONFIG_MTD_PARTITIONS
|
||||||
|
|
|
@ -266,13 +266,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NAND)
|
#if defined(CONFIG_CMD_NAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
|
@ -309,5 +304,11 @@
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
/* NAND: SPL falcon mode configs */
|
||||||
|
#ifdef CONFIG_SPL_OS_BOOT
|
||||||
|
#define CONFIG_CMD_SPL_NAND_OFS 0x240000
|
||||||
|
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x280000
|
||||||
|
#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __CONFIG_H */
|
#endif /* __CONFIG_H */
|
||||||
|
|
|
@ -95,9 +95,6 @@
|
||||||
/*
|
/*
|
||||||
* PISMO support
|
* PISMO support
|
||||||
*/
|
*/
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
/* Monitor at start of flash - Reserve 2 sectors */
|
/* Monitor at start of flash - Reserve 2 sectors */
|
||||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
||||||
|
|
||||||
|
@ -205,12 +202,12 @@
|
||||||
* NAND / OneNAND
|
* NAND / OneNAND
|
||||||
*/
|
*/
|
||||||
#if defined(CONFIG_CMD_NAND)
|
#if defined(CONFIG_CMD_NAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
|
|
||||||
#define CONFIG_NAND_OMAP_GPMC
|
#define CONFIG_NAND_OMAP_GPMC
|
||||||
#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
|
#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
|
||||||
#elif defined(CONFIG_CMD_ONENAND)
|
#elif defined(CONFIG_CMD_ONENAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_ONEN_BASE
|
#define CONFIG_SYS_FLASH_BASE ONENAND_MAP
|
||||||
#define CONFIG_SYS_ONENAND_BASE ONENAND_MAP
|
#define CONFIG_SYS_ONENAND_BASE ONENAND_MAP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -146,8 +146,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_BOOT_ONENAND
|
#ifdef CONFIG_BOOT_ONENAND
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M /* Configure the PISMO */
|
|
||||||
|
|
||||||
#define CONFIG_SYS_ONENAND_BASE ONENAND_MAP
|
#define CONFIG_SYS_ONENAND_BASE ONENAND_MAP
|
||||||
|
|
||||||
#define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
|
#define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
|
||||||
|
@ -158,7 +156,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NAND
|
#ifdef CONFIG_NAND
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M /* Configure the PISMO */
|
|
||||||
#define CONFIG_ENV_OFFSET 0x260000 /* environment starts here */
|
#define CONFIG_ENV_OFFSET 0x260000 /* environment starts here */
|
||||||
#define CONFIG_ENV_IS_IN_NAND 1
|
#define CONFIG_ENV_IS_IN_NAND 1
|
||||||
#define CONFIG_ENV_SIZE (512 << 10) /* Total Size Environment */
|
#define CONFIG_ENV_SIZE (512 << 10) /* Total Size Environment */
|
||||||
|
@ -199,6 +196,13 @@
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
/* NAND: SPL falcon mode configs */
|
||||||
|
#ifdef CONFIG_SPL_OS_BOOT
|
||||||
|
#define CONFIG_CMD_SPL_NAND_OFS 0x240000
|
||||||
|
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x280000
|
||||||
|
#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __IGEP00X0_H */
|
#endif /* __IGEP00X0_H */
|
||||||
|
|
|
@ -277,16 +277,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NAND)
|
#if defined(CONFIG_CMD_NAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
#elif defined(CONFIG_CMD_ONENAND)
|
#elif defined(CONFIG_CMD_ONENAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_ONEN_BASE
|
#define CONFIG_SYS_FLASH_BASE ONENAND_MAP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
|
|
|
@ -173,12 +173,8 @@
|
||||||
0x01F00000) /* 31MB */
|
0x01F00000) /* 31MB */
|
||||||
|
|
||||||
/* FLASH and environment organization */
|
/* FLASH and environment organization */
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#if defined(CONFIG_NAND)
|
#if defined(CONFIG_NAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
|
@ -220,5 +216,11 @@
|
||||||
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
/* NAND: SPL falcon mode configs */
|
||||||
|
#ifdef CONFIG_SPL_OS_BOOT
|
||||||
|
#define CONFIG_CMD_SPL_NAND_OFS 0x240000
|
||||||
|
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x280000
|
||||||
|
#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __CONFIG_H */
|
#endif /* __CONFIG_H */
|
||||||
|
|
|
@ -220,15 +220,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NAND)
|
#if defined(CONFIG_CMD_NAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
|
|
|
@ -70,6 +70,12 @@
|
||||||
"4m(kernel),-(fs)"
|
"4m(kernel),-(fs)"
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NAND)
|
#if defined(CONFIG_CMD_NAND)
|
||||||
|
/* NAND: SPL falcon mode configs */
|
||||||
|
#ifdef CONFIG_SPL_OS_BOOT
|
||||||
|
#define CONFIG_CMD_SPL_NAND_OFS 0x240000
|
||||||
|
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x280000
|
||||||
|
#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
|
||||||
|
#endif
|
||||||
#define CONFIG_CMD_NAND_LOCK_UNLOCK /* Enable lock/unlock support */
|
#define CONFIG_CMD_NAND_LOCK_UNLOCK /* Enable lock/unlock support */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -165,13 +171,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NAND)
|
#if defined(CONFIG_CMD_NAND)
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
|
|
|
@ -159,6 +159,12 @@
|
||||||
#define CONFIG_ENV_IS_IN_NAND
|
#define CONFIG_ENV_IS_IN_NAND
|
||||||
#define CONFIG_ENV_OFFSET 0x260000 /* environment starts here */
|
#define CONFIG_ENV_OFFSET 0x260000 /* environment starts here */
|
||||||
#define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) /* 128 KiB */
|
#define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) /* 128 KiB */
|
||||||
|
/* NAND: SPL falcon mode configs */
|
||||||
|
#ifdef CONFIG_SPL_OS_BOOT
|
||||||
|
#define CONFIG_CMD_SPL_NAND_OFS 0x240000 /* un-assigned */
|
||||||
|
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x280000
|
||||||
|
#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB configuration. We enable MUSB support, both for host and for
|
* USB configuration. We enable MUSB support, both for host and for
|
||||||
|
|
|
@ -181,10 +181,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_NAND
|
#define CONFIG_NAND
|
||||||
#define CONFIG_NAND_OMAP_GPMC
|
#define CONFIG_NAND_OMAP_GPMC
|
||||||
#define CONFIG_ENV_IS_IN_NAND
|
#define CONFIG_ENV_IS_IN_NAND
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#define CONFIG_OMAP_GPIO
|
#define CONFIG_OMAP_GPIO
|
||||||
#define CONFIG_OMAP_COMMON
|
#define CONFIG_OMAP_COMMON
|
||||||
|
#define CONFIG_SYS_GENERIC_BOARD
|
||||||
|
|
||||||
#define MACH_TYPE_OMAP3_TAO3530 2836
|
#define MACH_TYPE_OMAP3_TAO3530 2836
|
||||||
|
|
||||||
|
@ -253,13 +254,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* **** PISMO SUPPORT *** */
|
/* **** PISMO SUPPORT *** */
|
||||||
|
|
||||||
/* Configure the PISMO */
|
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
#define PISMO1_ONEN_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
#define CONFIG_SYS_FLASH_BASE PISMO1_NAND_BASE
|
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
/* Monitor at start of flash */
|
||||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
||||||
|
|
|
@ -243,13 +243,6 @@
|
||||||
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x80 /* address 0x10000 */
|
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x80 /* address 0x10000 */
|
||||||
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS 0x80 /* 64KiB */
|
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS 0x80 /* 64KiB */
|
||||||
|
|
||||||
/* NAND */
|
|
||||||
#ifdef CONFIG_NAND
|
|
||||||
#define CONFIG_CMD_SPL_NAND_OFS 0x240000 /* end of u-boot */
|
|
||||||
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x280000
|
|
||||||
#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* spl export command */
|
/* spl export command */
|
||||||
#define CONFIG_CMD_SPL
|
#define CONFIG_CMD_SPL
|
||||||
#endif
|
#endif
|
||||||
|
@ -275,7 +268,6 @@
|
||||||
#define CONFIG_SPL_NAND_ECC
|
#define CONFIG_SPL_NAND_ECC
|
||||||
#define CONFIG_SPL_MTD_SUPPORT
|
#define CONFIG_SPL_MTD_SUPPORT
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* !CONFIG_NOR_BOOT */
|
#endif /* !CONFIG_NOR_BOOT */
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
#include <asm/arch/cpu.h> /* get chip and board defs */
|
#include <asm/arch/cpu.h> /* get chip and board defs */
|
||||||
#include <asm/arch/omap3.h>
|
#include <asm/arch/omap3.h>
|
||||||
|
|
||||||
|
#define CONFIG_SYS_GENERIC_BOARD
|
||||||
|
|
||||||
/* Display CPU and Board information */
|
/* Display CPU and Board information */
|
||||||
#define CONFIG_DISPLAY_CPUINFO
|
#define CONFIG_DISPLAY_CPUINFO
|
||||||
#define CONFIG_DISPLAY_BOARDINFO
|
#define CONFIG_DISPLAY_BOARDINFO
|
||||||
|
@ -315,8 +317,6 @@
|
||||||
#define PHYS_SDRAM_2 OMAP34XX_SDRC_CS1
|
#define PHYS_SDRAM_2 OMAP34XX_SDRC_CS1
|
||||||
|
|
||||||
/* NAND and environment organization */
|
/* NAND and environment organization */
|
||||||
#define PISMO1_NAND_SIZE GPMC_SIZE_128M
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
|
||||||
|
|
||||||
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
|
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
|
||||||
|
|
|
@ -44,6 +44,7 @@ struct cpsw_platform_data {
|
||||||
struct cpsw_slave_data *slave_data;
|
struct cpsw_slave_data *slave_data;
|
||||||
void (*control)(int enabled);
|
void (*control)(int enabled);
|
||||||
u32 host_port_num;
|
u32 host_port_num;
|
||||||
|
u32 active_slave;
|
||||||
u8 version;
|
u8 version;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,7 @@ struct pmic {
|
||||||
};
|
};
|
||||||
|
|
||||||
int pmic_init(unsigned char bus);
|
int pmic_init(unsigned char bus);
|
||||||
|
int power_init_board(void);
|
||||||
int pmic_dialog_init(unsigned char bus);
|
int pmic_dialog_init(unsigned char bus);
|
||||||
int check_reg(struct pmic *p, u32 reg);
|
int check_reg(struct pmic *p, u32 reg);
|
||||||
struct pmic *pmic_alloc(void);
|
struct pmic *pmic_alloc(void);
|
||||||
|
|
|
@ -60,4 +60,5 @@ enum {
|
||||||
int tps65218_reg_write(uchar prot_level, uchar dest_reg, uchar dest_val,
|
int tps65218_reg_write(uchar prot_level, uchar dest_reg, uchar dest_val,
|
||||||
uchar mask);
|
uchar mask);
|
||||||
int tps65218_voltage_update(uchar dc_cntrl_reg, uchar volt_sel);
|
int tps65218_voltage_update(uchar dc_cntrl_reg, uchar volt_sel);
|
||||||
|
int power_tps65218_init(unsigned char bus);
|
||||||
#endif /* __POWER_TPS65218_H__ */
|
#endif /* __POWER_TPS65218_H__ */
|
||||||
|
|
Loading…
Reference in a new issue