Hi, On 07/11/14 10:55, Hyungwon Hwang wrote: > This patch adds support for Odroid-XU3. > > Signed-off-by: Hyungwon Hwang <human.hw...@samsung.com> > Cc: Minkyu Kang <mk7.k...@samsung.com> > Cc: Lukasz Majewski <l.majew...@samsung.com> > --- > Changes for v3: > - Remove unnecessary node from DT file > - Remove unnecessary features from config file > - Remove unnecessary macros from board-specific header file > - Fix some trivial typos in comments > Changes for v4: > - Add MMC FIFO buffer's configuration to DT file > - Make CONFIG_OF_CONTROL be set by the target information > - Add basic document to doc/README.odroid-xu3 > - Add CONFIG_CMD_EXT4 to config file > - Add environment size and offset to config file > - Add extra default environment to make bootable without modification > - Remove unnecessary features from config file > Changes for v5: > - Convert /include/ to #include in DT file > arch/arm/cpu/armv7/exynos/Kconfig | 5 ++ > arch/arm/dts/Makefile | 3 +- > arch/arm/dts/exynos5422-odroidxu3.dts | 60 ++++++++++++++ > board/samsung/odroid-xu3/Kconfig | 12 +++ > board/samsung/odroid-xu3/MAINTAINERS | 6 ++ > board/samsung/odroid-xu3/Makefile | 7 ++ > board/samsung/odroid-xu3/odroid-xu3.c | 131 +++++++++++++++++++++++++++++++ > board/samsung/odroid-xu3/setup.h | 95 ++++++++++++++++++++++ > configs/odroid-xu3_defconfig | 4 + > doc/README.odroid-xu3 | 134 +++++++++++++++++++++++++++++++ > include/configs/odroid_xu3.h | 144 > ++++++++++++++++++++++++++++++++++ > 11 files changed, 600 insertions(+), 1 deletion(-) > create mode 100644 arch/arm/dts/exynos5422-odroidxu3.dts > create mode 100644 board/samsung/odroid-xu3/Kconfig > create mode 100644 board/samsung/odroid-xu3/MAINTAINERS > create mode 100644 board/samsung/odroid-xu3/Makefile > create mode 100644 board/samsung/odroid-xu3/odroid-xu3.c > create mode 100644 board/samsung/odroid-xu3/setup.h > create mode 100644 configs/odroid-xu3_defconfig > create mode 100644 doc/README.odroid-xu3 > create mode 100644 include/configs/odroid_xu3.h > > diff --git a/arch/arm/cpu/armv7/exynos/Kconfig > b/arch/arm/cpu/armv7/exynos/Kconfig > index 13dbd95..8fe530c 100644 > --- a/arch/arm/cpu/armv7/exynos/Kconfig > +++ b/arch/arm/cpu/armv7/exynos/Kconfig > @@ -24,6 +24,10 @@ config TARGET_TRATS2 > config TARGET_ODROID > bool "Exynos4412 Odroid board" > > +config TARGET_ODROID_XU3 > + bool "Exynos5422 Odroid board" > + select OF_CONTROL if !SPL_BUILD > + > config TARGET_ARNDALE > bool "Exynos5250 Arndale board" > select SUPPORT_SPL > @@ -65,6 +69,7 @@ source "board/samsung/universal_c210/Kconfig" > source "board/samsung/origen/Kconfig" > source "board/samsung/trats2/Kconfig" > source "board/samsung/odroid/Kconfig" > +source "board/samsung/odroid-xu3/Kconfig" > source "board/samsung/arndale/Kconfig" > source "board/samsung/smdk5250/Kconfig" > source "board/samsung/smdk5420/Kconfig" > diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile > index 2b9bd93..d984f34 100644 > --- a/arch/arm/dts/Makefile > +++ b/arch/arm/dts/Makefile > @@ -12,7 +12,8 @@ dtb-$(CONFIG_EXYNOS5) += exynos5250-arndale.dtb \ > exynos5250-smdk5250.dtb \ > exynos5420-smdk5420.dtb \ > exynos5420-peach-pit.dtb \ > - exynos5800-peach-pi.dtb > + exynos5800-peach-pi.dtb \ > + exynos5422-odroidxu3.dtb > dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \ > tegra20-medcom-wide.dtb \ > tegra20-paz00.dtb \ > diff --git a/arch/arm/dts/exynos5422-odroidxu3.dts > b/arch/arm/dts/exynos5422-odroidxu3.dts > new file mode 100644 > index 0000000..52199d9 > --- /dev/null > +++ b/arch/arm/dts/exynos5422-odroidxu3.dts > @@ -0,0 +1,60 @@ > +/* > + * Odroid XU3 device tree source > + * > + * Copyright (c) 2014 Samsung Electronics Co., Ltd. > + * http://www.samsung.com > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +/dts-v1/; > +#include "exynos54xx.dtsi" > + > +/ { > + model = "Odroid XU3 based on EXYNOS5422"; > + compatible = "samsung,odroidxu3", "samsung,exynos5"; > + > + aliases { > + serial0 = "/serial@12C00000"; > + console = "/serial@12C20000"; > + }; > + > + memory { > + device_type = "memory"; > + reg = <0x40000000 0x10000000 > + 0x50000000 0x10000000 > + 0x60000000 0x10000000 > + 0x70000000 0x10000000 > + 0x80000000 0x10000000 > + 0x90000000 0x10000000 > + 0xa0000000 0x10000000 > + 0xb0000000 0xea00000>; > + }; > + > + serial@12C20000 { > + status="okay"; > + }; > + > + mmc@12200000 { > + samsung,bus-width = <8>; > + samsung,timing = <1 3 3>; > + samsung,removable = <0>; > + samsung,pre-init; > + fifoth_val = <0x200f0020>; > + }; > + > + mmc@12210000 { > + status = "disabled"; > + }; > + > + mmc@12220000 { > + samsung,bus-width = <4>; > + samsung,timing = <1 2 3>; > + samsung,removable = <1>; > + fifoth_val = <0x200f0020>; > + }; > + > + mmc@12230000 { > + status = "disabled"; > + }; > +}; > diff --git a/board/samsung/odroid-xu3/Kconfig > b/board/samsung/odroid-xu3/Kconfig > new file mode 100644 > index 0000000..6159692 > --- /dev/null > +++ b/board/samsung/odroid-xu3/Kconfig > @@ -0,0 +1,12 @@ > +if TARGET_ODROID_XU3 > + > +config SYS_BOARD > + default "odroid-xu3" > + > +config SYS_VENDOR > + default "samsung" > + > +config SYS_CONFIG_NAME > + default "odroid_xu3" > + > +endif > diff --git a/board/samsung/odroid-xu3/MAINTAINERS > b/board/samsung/odroid-xu3/MAINTAINERS > new file mode 100644 > index 0000000..50cf928 > --- /dev/null > +++ b/board/samsung/odroid-xu3/MAINTAINERS > @@ -0,0 +1,6 @@ > +ODROID-XU3 BOARD > +M: Hyungwon Hwang <human.hw...@samsung.com> > +S: Maintained > +F: board/samsung/odroid-xu3/ > +F: include/configs/odroid_xu3.h > +F: configs/odroid-xu3_defconfig > diff --git a/board/samsung/odroid-xu3/Makefile > b/board/samsung/odroid-xu3/Makefile > new file mode 100644 > index 0000000..85ae5c5 > --- /dev/null > +++ b/board/samsung/odroid-xu3/Makefile > @@ -0,0 +1,7 @@ > +# > +# Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. > +# > +# SPDX-License-Identifier: GPL-2.0+ > +# > + > +obj-y := odroid-xu3.o > diff --git a/board/samsung/odroid-xu3/odroid-xu3.c > b/board/samsung/odroid-xu3/odroid-xu3.c > new file mode 100644 > index 0000000..ea39487 > --- /dev/null > +++ b/board/samsung/odroid-xu3/odroid-xu3.c > @@ -0,0 +1,131 @@ > +/* > + * Copyright (C) 2014 Samsung Electronics > + * Hyungwon Hwang <human.hw...@samsung.com> > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include <common.h> > +#include <asm/io.h> > +#include <netdev.h>
is netdev needed? > +#include <asm/arch/cpu.h> > +#include <asm/arch/clock.h> > +#include <asm/arch/power.h> > +#include <asm/arch/gpio.h> > +#include <asm/arch/mmc.h> > +#include <asm/arch/pinmux.h> > +#include <asm/arch/sromc.h> > +#include "setup.h" > + > +DECLARE_GLOBAL_DATA_PTR; > + > +unsigned int get_board_rev(void) > +{ > + unsigned int rev = 0; > + return rev; I think it's a meaningless. just return 0; > +} > + > +int exynos_init(void) > +{ > + return 0; > +} > + > +static int board_clock_init(void) This function will be dead if CONFIG_BOARD_EARLY_INIT_F is not defined. > +{ > + unsigned int set, clr, clr_src_cpu, clr_pll_con0; > + struct exynos5420_clock *clk = (struct exynos5420_clock *) > + samsung_get_base_clock(); > + /* > + * CMU_CPU clocks src to MPLL > + * Bit values: 0 ; 1 > + * MUX_APLL_SEL: FIN_PLL ; FOUT_APLL > + * MUX_CORE_SEL: MOUT_APLL ; SCLK_MPLL > + * MUX_HPM_SEL: MOUT_APLL ; SCLK_MPLL_USER_C > + * MUX_MPLL_USER_SEL_C: FIN_PLL ; SCLK_MPLL > + */ > + > + /* Set CMU_CPU clocks src to OSCCLK */ > + clr_src_cpu = MUX_APLL_SEL(1) | MUX_CORE_SEL(1); > + set = MUX_APLL_SEL(0) | MUX_CORE_SEL(1); > + > + clrsetbits_le32(&clk->src_cpu, clr_src_cpu, set); > + > + while (MUX_STAT_CPU_CHANGING(readl(&clk->mux_stat_cpu))) > + continue; > + > + /* Set APLL to 1200MHz */ > + clr_pll_con0 = SDIV(7) | PDIV(63) | MDIV(1023) | FSEL(1) | > + PLL_ENABLE(1); > + set = SDIV(0) | PDIV(2) | MDIV(100) | PLL_ENABLE(1); > + > + clrsetbits_le32(&clk->apll_con0, clr_pll_con0, set); > + > + while (!(readl(&clk->apll_con0) & PLL_LOCKED_BIT)) > + continue; > + > + /* Set CMU_CPU clocks src to APLL */ > + set = MUX_APLL_SEL(1) | MUX_CORE_SEL(0); > + clrsetbits_le32(&clk->src_cpu, clr_src_cpu, set); > + > + while (MUX_STAT_CPU_CHANGING(readl(&clk->mux_stat_cpu))) > + continue; > + > + clr = ARM_RATIO(7) | CPUD_RATIO(7) | ATB_RATIO(7) | > + PCLK_DBG_RATIO(7) | APLL_RATIO(7) | ARM2_RATIO(7); > + set = ARM_RATIO(0) | CPUD_RATIO(2) | ATB_RATIO(5) | > + PCLK_DBG_RATIO(5) | APLL_RATIO(0) | ARM2_RATIO(0); > + > + clrsetbits_le32(&clk->div_cpu0, clr, set); > + > + while (readl(&clk->div_stat_cpu0) & DIV_STAT_CPU0_CHANGING) > + continue; > + > + /* Set MPLL to 800MHz */ > + set = SDIV(1) | PDIV(3) | MDIV(200) | PLL_ENABLE(1); > + > + clrsetbits_le32(&clk->mpll_con0, clr_pll_con0, set); > + > + while (!(readl(&clk->mpll_con0) & PLL_LOCKED_BIT)) > + continue; > + > + /* Set CLKMUX_UART src to MPLL */ > + clr = UART0_SEL(7) | UART1_SEL(7) | UART2_SEL(7) | UART3_SEL(7); > + set = UART0_SEL(3) | UART1_SEL(3) | UART2_SEL(3) | UART3_SEL(3); > + > + clrsetbits_le32(&clk->src_peric0, clr, set); > + > + /* Set SCLK_UART to 400 MHz (MPLL / 2) */ > + clr = UART0_RATIO(15) | UART1_RATIO(15) | UART2_RATIO(15) | > + UART3_RATIO(15); > + set = UART0_RATIO(1) | UART1_RATIO(1) | UART2_RATIO(1) | > + UART3_RATIO(1); > + > + clrsetbits_le32(&clk->div_peric0, clr, set); > + > + while (readl(&clk->div_stat_peric0) & DIV_STAT_PERIC0_CHANGING) > + continue; > + > + /* Set CLKMUX_MMC src to MPLL */ > + clr = MUX_MMC0_SEL(7) | MUX_MMC1_SEL(7) | MUX_MMC2_SEL(7); > + set = MUX_MMC0_SEL(3) | MUX_MMC1_SEL(3) | MUX_MMC2_SEL(3); > + > + clrsetbits_le32(&clk->src_fsys, clr, set); > + > + clr = MMC0_RATIO(0x3ff) | MMC1_RATIO(0x3ff) | MMC2_RATIO(0x3ff); > + set = MMC0_RATIO(0) | MMC1_RATIO(0) | MMC2_RATIO(0); > + > + clrsetbits_le32(&clk->div_fsys1, clr, set); > + > + /* Wait for divider ready status */ > + while (readl(&clk->div_stat_fsys1) & DIV_STAT_FSYS1_CHANGING) > + continue; > + > + return 0; > +} > + > +#ifdef CONFIG_BOARD_EARLY_INIT_F > +int exynos_early_init_f(void) > +{ > + return board_clock_init(); > +} > +#endif Thanks, Minkyu Kang. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot