diff options
author | Kotaro Hayashi <hayashi.kotaro@socionext.com> | 2017-02-14 11:39:14 +0900 |
---|---|---|
committer | Masahiro Yamada <yamada.masahiro@socionext.com> | 2017-02-23 08:37:56 +0900 |
commit | 04f3da393667b094adc4fef37db71c7327d5ed7d (patch) | |
tree | c0e57e4a87166c89e4d1053edacecf85ffb00e0f /arch/arm/mach-uniphier/dram | |
parent | dd38374d2f1d89fb34d4c544f558537db1966a33 (diff) | |
download | u-boot-imx-04f3da393667b094adc4fef37db71c7327d5ed7d.zip u-boot-imx-04f3da393667b094adc4fef37db71c7327d5ed7d.tar.gz u-boot-imx-04f3da393667b094adc4fef37db71c7327d5ed7d.tar.bz2 |
ARM: uniphier: add DRAM PHY clock duty adjustment for LD20 SoC
If the DRAM clock duty does not meet the allowable tolerance,
it is marked in an efuse register. If the register is fused,
the boot code should compensate for the DRAM clock duty error.
Signed-off-by: Kotaro Hayashi <hayashi.kotaro@socionext.com>
[masahiro: simplify code, add git-log]
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'arch/arm/mach-uniphier/dram')
-rw-r--r-- | arch/arm/mach-uniphier/dram/umc-ld20.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/mach-uniphier/dram/umc-ld20.c b/arch/arm/mach-uniphier/dram/umc-ld20.c index 14c44e4..500c1c1 100644 --- a/arch/arm/mach-uniphier/dram/umc-ld20.c +++ b/arch/arm/mach-uniphier/dram/umc-ld20.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2016-2017 Socionext Inc. * - * based on commit e732175d0b0dbc2a3855cb8ac791c538666b6fd4 of Diag + * based on commit 5ffd75ecd4929f22361ef65a35f0331d2fbc0f35 of Diag * * SPDX-License-Identifier: GPL-2.0+ */ @@ -177,12 +177,18 @@ static void ddrphy_select_lane(void __iomem *phy_base, unsigned int lane, phy_base + PHY_LANE_SEL); } +#define DDRPHY_EFUSEMON (void *)0x5f900118 + static void ddrphy_init(void __iomem *phy_base, enum dram_board board, int ch) { writel(0x0C001001, phy_base + PHY_UNIQUIFY_TSMC_IO_1); while (!(readl(phy_base + PHY_UNIQUIFY_TSMC_IO_1) & BIT(1))) cpu_relax(); - writel(0x0C001000, phy_base + PHY_UNIQUIFY_TSMC_IO_1); + + if (readl(DDRPHY_EFUSEMON) & BIT(ch)) + writel(0x00000000, phy_base + PHY_UNIQUIFY_TSMC_IO_1); + else + writel(0x0C001000, phy_base + PHY_UNIQUIFY_TSMC_IO_1); writel(0x00000000, phy_base + PHY_DLL_INCR_TRIM_3); writel(0x00000000, phy_base + PHY_DLL_INCR_TRIM_1); |