From: Kim, Heungjun <riverful.kim@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 3/3] ARMV7: Exynos4: Add support for TRATS board
Date: Wed, 11 Jan 2012 13:00:04 +0900 [thread overview]
Message-ID: <4F0D0944.6000908@samsung.com> (raw)
In-Reply-To: <CALrBrZ05+_uJ55YTrYvXb-aa59HB_Fu9D6mMS8ytBecxd=tfoQ@mail.gmail.com>
Hi Minkyu Kang,
On 2012? 01? 11? 11:35, Minkyu Kang wrote:
> Dear HeungJun, Kim,
>
> On 10 January 2012 18:00, HeungJun, Kim<riverful.kim@samsung.com> wrote:
>> This patch adds support for Samsung TRATS board
>>
>> Signed-off-by: HeungJun, Kim<riverful.kim@samsung.com>
>> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>> ---
>> MAINTAINERS | 4 +
>> board/samsung/trats/Makefile | 43 ++
>> board/samsung/trats/trats.c | 349 ++++++++++++++++
>> board/samsung/trats/trats_setup.h | 814 +++++++++++++++++++++++++++++++++++++
>> boards.cfg | 1 +
>> include/configs/trats.h | 216 ++++++++++
>> 6 files changed, 1427 insertions(+), 0 deletions(-)
>> create mode 100644 board/samsung/trats/Makefile
>> create mode 100644 board/samsung/trats/trats.c
>> create mode 100644 board/samsung/trats/trats_setup.h
>> create mode 100644 include/configs/trats.h
>>
>> diff --git a/board/samsung/trats/trats.c b/board/samsung/trats/trats.c
>> new file mode 100644
>> index 0000000..9070df5
>> --- /dev/null
>> +++ b/board/samsung/trats/trats.c
>> @@ -0,0 +1,349 @@
>> +/*
>> + * Copyright (C) 2011 Samsung Electronics
>> + * Heungjun Kim<riverful.kim@samsung.com>
>> + * Kyungmin Park<kyungmin.park@samsung.com>
>> + *
>> + * See file CREDITS for list of people who contributed to this
>> + * project.
>> + *
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License as
>> + * published by the Free Software Foundation; either version 2 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program; if not, write to the Free Software
>> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
>> + * MA 02111-1307 USA
>> + */
>> +
>> +#include<common.h>
>> +#include<asm/io.h>
>> +#include<asm/arch/gpio.h>
>> +#include<asm/arch/mmc.h>
>> +#include<asm/arch/clock.h>
>> +#include<asm/arch/watchdog.h>
>> +#include<asm/arch/gpio.h>
>> +#include<asm/arch/power.h>
>> +#include<pmic.h>
>> +#include<usb/s3c_udc.h>
>> +#include<asm/arch/cpu.h>
>> +#include<max8998_pmic.h>
>> +
>> +#include "trats_setup.h"
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +unsigned int board_rev;
>> +
>> +#ifdef CONFIG_REVISION_TAG
>> +u32 get_board_rev(void)
>> +{
>> + return board_rev;
>> +}
>> +#endif
>> +
>> +static void check_hw_revision(void);
>> +static void pmic_reset(void);
>> +
>> +int board_init(void)
>> +{
>> + gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
>> +
>> + check_hw_revision();
>> + printf("HW Revision:\t0x%x\n", board_rev);
>> +
>> +#if defined(CONFIG_PMIC)
>> + pmic_init();
>> + pmic_reset();
>> +#endif
>> +
>> + return 0;
>> +}
>> +
>> +int dram_init(void)
>> +{
>> + gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE) +
>> + get_ram_size((long *)PHYS_SDRAM_2, PHYS_SDRAM_2_SIZE);
>> +
>> + return 0;
>> +}
>> +
>> +void dram_init_banksize(void)
>> +{
>> + gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
>> + gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
>> + gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
>> + gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;
>> +}
>> +
>> +static unsigned int get_hw_revision(void)
>> +{
>> + struct exynos4_gpio_part1 *gpio =
>> + (struct exynos4_gpio_part1 *)samsung_get_base_gpio_part1();
>> + int hwrev = 0;
>> + int i;
>> +
>> + /* hw_rev[3:0] == GPE1[3:0] */
>> + for (i = 0; i< 4; i++) {
>> + s5p_gpio_cfg_pin(&gpio->e1, i, GPIO_INPUT);
>> + s5p_gpio_set_pull(&gpio->e1, i, GPIO_PULL_NONE);
>> + }
>> +
>> + udelay(1);
>> +
>> + for (i = 0; i< 4; i++)
>> + hwrev |= (s5p_gpio_get_value(&gpio->e1, i)<< i);
>> +
>> + debug("hwrev 0x%x\n", hwrev);
>> +
>> + return hwrev;
>> +}
>> +
>> +static void check_hw_revision(void)
>> +{
>> + int hwrev;
>> +
>> + hwrev = get_hw_revision();
>> +
>> + board_rev |= hwrev;
>> +}
>> +
>> +static void pmic_reset(void)
>> +{
>> + struct exynos4_gpio_part2 *gpio =
>> + (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
>> +
>> + s5p_gpio_set_pull(&gpio->x2, 7, GPIO_PULL_NONE);
>> + s5p_gpio_direction_output(&gpio->x2, 7, 1);
>> +}
>> +
>> +#ifdef CONFIG_DISPLAY_BOARDINFO
>> +int checkboard(void)
>> +{
>> + puts("Board:\tTRATS\n");
>> + return 0;
>> +}
>> +#endif
>> +
>> +#ifdef CONFIG_GENERIC_MMC
>> +int board_mmc_init(bd_t *bis)
>> +{
>> + struct exynos4_gpio_part2 *gpio =
>> + (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
>> + int i, err;
>> +
>> + /* eMMC_EN: SD_0_CDn: GPK0[2] Output High */
>> + s5p_gpio_direction_output(&gpio->k0, 2, 1);
>> + s5p_gpio_set_pull(&gpio->k0, 2, GPIO_PULL_NONE);
>> +
>> + /*
>> + * eMMC GPIO:
>> + * SDR 8-bit at 48MHz at MMC0
>> + * GPK0[0] SD_0_CLK(2)
>> + * GPK0[1] SD_0_CMD(2)
>> + * GPK0[2] SD_0_CDn -> Not used
>> + * GPK0[3:6] SD_0_DATA[0:3](2)
>> + * GPK1[3:6] SD_0_DATA[0:3](3)
>> + *
>> + * DDR 4-bit at 26MHz at MMC4
>> + * GPK0[0] SD_4_CLK(3)
>> + * GPK0[1] SD_4_CMD(3)
>> + * GPK0[2] SD_4_CDn -> Not used
>> + * GPK0[3:6] SD_4_DATA[0:3](3)
>> + * GPK1[3:6] SD_4_DATA[4:7](4)
>> + */
>> + for (i = 0; i< 7; i++) {
>> + if (i == 2)
>> + continue;
>> + /* GPK0[0:6] special function 2 */
>> + s5p_gpio_cfg_pin(&gpio->k0, i, 0x2);
>> + /* GPK0[0:6] pull disable */
>> + s5p_gpio_set_pull(&gpio->k0, i, GPIO_PULL_NONE);
>> + /* GPK0[0:6] drv 4x */
>> + s5p_gpio_set_drv(&gpio->k0, i, GPIO_DRV_4X);
>> + }
>> +
>> + for (i = 3; i< 7; i++) {
>> + /* GPK1[3:6] special function 3 */
>> + s5p_gpio_cfg_pin(&gpio->k1, i, 0x3);
>> + /* GPK1[3:6] pull disable */
>> + s5p_gpio_set_pull(&gpio->k1, i, GPIO_PULL_NONE);
>> + /* GPK1[3:6] drv 4x */
>> + s5p_gpio_set_drv(&gpio->k1, i, GPIO_DRV_4X);
>> + }
>> +
>> + /*
>> + * MMC device init
>> + * mmc0 : eMMC (8-bit buswidth)
>> + * mmc2 : SD card (4-bit buswidth)
>> + */
>> + err = s5p_mmc_init(0, 8);
>> +
>> + /* T-flash detect */
>> + s5p_gpio_cfg_pin(&gpio->x3, 4, 0xf);
>> + s5p_gpio_set_pull(&gpio->x3, 4, GPIO_PULL_UP);
>> +
>> + /*
>> + * Check the T-flash detect pin
>> + * GPX3[4] T-flash detect pin
>> + */
>> + if (!s5p_gpio_get_value(&gpio->x3, 4)) {
>> + /*
>> + * SD card GPIO:
>> + * GPK2[0] SD_2_CLK(2)
>> + * GPK2[1] SD_2_CMD(2)
>> + * GPK2[2] SD_2_CDn -> Not used
>> + * GPK2[3:6] SD_2_DATA[0:3](2)
>> + */
>> + for (i = 0; i< 7; i++) {
>> + if (i == 2)
>> + continue;
>> + /* GPK2[0:6] special function 2 */
>> + s5p_gpio_cfg_pin(&gpio->k2, i, 0x2);
>> + /* GPK2[0:6] pull disable */
>> + s5p_gpio_set_pull(&gpio->k2, i, GPIO_PULL_NONE);
>> + /* GPK2[0:6] drv 4x */
>> + s5p_gpio_set_drv(&gpio->k2, i, GPIO_DRV_4X);
>> + }
>> + err = s5p_mmc_init(2, 4);
>> + }
>> +
>> + return err;
>> +}
>> +#endif
>> +
>> +#ifdef CONFIG_USB_GADGET
>> +static int s5pc210_phy_control(int on)
>> +{
>> + int ret = 0;
>> + struct pmic *p = get_pmic();
>> +
>> + if (pmic_probe(p))
>> + return -1;
>> +
>> + if (on) {
>> + ret |= pmic_set_output(p,
>> + MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
>> + MAX8998_SAFEOUT1, LDO_ON);
>> + ret |= pmic_set_output(p, MAX8998_REG_ONOFF1,
>> + MAX8998_LDO3, LDO_ON);
>> + ret |= pmic_set_output(p, MAX8998_REG_ONOFF2,
>> + MAX8998_LDO8, LDO_ON);
>> +
>> + } else {
>> + ret |= pmic_set_output(p, MAX8998_REG_ONOFF2,
>> + MAX8998_LDO8, LDO_OFF);
>> + ret |= pmic_set_output(p, MAX8998_REG_ONOFF1,
>> + MAX8998_LDO3, LDO_OFF);
>> + ret |= pmic_set_output(p,
>> + MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
>> + MAX8998_SAFEOUT1, LDO_OFF);
>> + }
>> +
>> + if (ret) {
>> + puts("MAX8998 LDO setting error!\n");
>> + return -1;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +struct s3c_plat_otg_data s5pc210_otg_data = {
>> + .phy_control = s5pc210_phy_control,
>> + .regs_phy = EXYNOS4_USBPHY_BASE,
>> + .regs_otg = EXYNOS4_USBOTG_BASE,
>> + .usb_phy_ctrl = EXYNOS4_USBPHY_CONTROL,
>> + .usb_flags = PHY0_SLEEP,
>> +};
>> +#endif
>> +
>> +static void clock_init(void)
>> +{
>> + struct exynos4_clock *clk =
>> + (struct exynos4_clock *)samsung_get_base_clock();
>> +
>> + writel(CLK_SRC_CPU_VAL, (unsigned int)&clk->src_cpu);
>> + writel(CLK_SRC_TOP0_VAL, (unsigned int)&clk->src_top0);
>> + writel(CLK_SRC_FSYS_VAL, (unsigned int)&clk->src_fsys);
>> + writel(CLK_SRC_PERIL0_VAL, (unsigned int)&clk->src_peril0);
>> +
>> + writel(CLK_DIV_CPU0_VAL, (unsigned int)&clk->div_cpu0);
>> + writel(CLK_DIV_CPU1_VAL, (unsigned int)&clk->div_cpu1);
>> + writel(CLK_DIV_DMC0_VAL, (unsigned int)&clk->div_dmc0);
>> + writel(CLK_DIV_DMC1_VAL, (unsigned int)&clk->div_dmc1);
>> + writel(CLK_DIV_LEFTBUS_VAL, (unsigned int)&clk->div_leftbus);
>> + writel(CLK_DIV_RIGHTBUS_VAL, (unsigned int)&clk->div_rightbus);
>> + writel(CLK_DIV_TOP_VAL, (unsigned int)&clk->div_top);
>> + writel(CLK_DIV_FSYS1_VAL, (unsigned int)&clk->div_fsys1);
>> + writel(CLK_DIV_FSYS2_VAL, (unsigned int)&clk->div_fsys2);
>> + writel(CLK_DIV_FSYS3_VAL, (unsigned int)&clk->div_fsys3);
>> + writel(CLK_DIV_PERIL0_VAL, (unsigned int)&clk->div_peril0);
>> +
>> + writel(PLL_LOCKTIME, (unsigned int)&clk->apll_lock);
>> + writel(PLL_LOCKTIME, (unsigned int)&clk->mpll_lock);
>> + writel(PLL_LOCKTIME, (unsigned int)&clk->epll_lock);
>> + writel(PLL_LOCKTIME, (unsigned int)&clk->vpll_lock);
>> + writel(APLL_CON1_VAL, (unsigned int)&clk->apll_con1);
>> + writel(APLL_CON0_VAL, (unsigned int)&clk->apll_con0);
>> + writel(MPLL_CON1_VAL, (unsigned int)&clk->mpll_con1);
>> + writel(MPLL_CON0_VAL, (unsigned int)&clk->mpll_con0);
>> + writel(EPLL_CON1_VAL, (unsigned int)&clk->epll_con1);
>> + writel(EPLL_CON0_VAL, (unsigned int)&clk->epll_con0);
>> + writel(VPLL_CON1_VAL, (unsigned int)&clk->vpll_con1);
>> + writel(VPLL_CON0_VAL, (unsigned int)&clk->vpll_con0);
>> +
>> + writel(CLK_GATE_IP_CAM_VAL, (unsigned int)&clk->gate_ip_cam);
>> + writel(CLK_GATE_IP_VP_VAL, (unsigned int)&clk->gate_ip_tv);
>> + writel(CLK_GATE_IP_MFC_VAL, (unsigned int)&clk->gate_ip_mfc);
>> + writel(CLK_GATE_IP_G3D_VAL, (unsigned int)&clk->gate_ip_g3d);
>> + writel(CLK_GATE_IP_IMAGE_VAL, (unsigned int)&clk->gate_ip_image);
>> + writel(CLK_GATE_IP_LCD0_VAL, (unsigned int)&clk->gate_ip_lcd0);
>> + writel(CLK_GATE_IP_LCD1_VAL, (unsigned int)&clk->gate_ip_lcd1);
>> + writel(CLK_GATE_IP_FSYS_VAL, (unsigned int)&clk->gate_ip_fsys);
>> + writel(CLK_GATE_IP_GPS_VAL, (unsigned int)&clk->gate_ip_gps);
>> + writel(CLK_GATE_IP_PERIL_VAL, (unsigned int)&clk->gate_ip_peril);
>> + writel(CLK_GATE_IP_PERIR_VAL, (unsigned int)&clk->gate_ip_perir);
>> + writel(CLK_GATE_BLOCK_VAL, (unsigned int)&clk->gate_block);
>> +}
>> +
>> +static void watchdog_disable(void)
>> +{
>> + struct exynos4_watchdog *wd =
>> + (struct exynos4_watchdog *)samsung_get_base_watchdog();
>> +
>> + writel(~(WTCON_EN | WTCON_INT), (unsigned int)&wd->wtcon);
>> +}
>> +
>> +static void power_init(void)
>> +{
>> + struct exynos4_power *pwr =
>> + (struct exynos4_power *)samsung_get_base_power();
>> +
>> + /* PS HOLD */
>> + writel(EXYNOS4_PS_HOLD_CON_VAL, (unsigned int)&pwr->ps_hold_control);
>> +
>> + /* Set power down */
>> + writel(0, (unsigned int)&pwr->cam_configuration);
>> + writel(0, (unsigned int)&pwr->tv_configuration);
>> + writel(0, (unsigned int)&pwr->mfc_configuration);
>> + writel(0, (unsigned int)&pwr->g3d_configuration);
>> + writel(0, (unsigned int)&pwr->lcd1_configuration);
>> + writel(0, (unsigned int)&pwr->gps_configuration);
>> + writel(0, (unsigned int)&pwr->gps_alive_configuration);
>> +}
>> +
>> +void lowlevel_init(void)
>> +{
>> + s5p_set_cpu_id(); /* For using Exynos's structures */
>> +
>> + watchdog_disable();
>> +
>> + clock_init();
>> + power_init();
>> +}
>
> Why don't you separate the file? (lowlevel_init.c or init.c or setup.c
> .... etc..)
> If you want to combine these at this file, then please rename the
> functions to board_blar. (board_clock_init, board_power_init.. etc)
> How you think?
Actually, I considered to remain separation. But, I felt it looks more
good to combine into one file if there is not a big issue. For looking
around the whole codes of board, we can open just 1 file.
Besides, I agree your opinion naming the function. I think it's
important to use different prefix in appearance. I'll fix these and
re-send 3/3 patch.
>
>> diff --git a/board/samsung/trats/trats_setup.h b/board/samsung/trats/trats_setup.h
>> new file mode 100644
>> index 0000000..a1bfe3e
>> --- /dev/null
>> +++ b/board/samsung/trats/trats_setup.h
>
> How about change this header file's name?
> I want to remove board name.
> just setup.h or init.h.. etc.
And, I also agree with this. It might be good to use setup.h.
>
>> @@ -0,0 +1,814 @@
>> +/*
>> + * Machine Specific Values for TRATS board based on EXYNOS4210
>> + *
>> + * Copyright (C) 2011 Samsung Electronics
>> + * Heungjun Kim<riverful.kim@samsung.com>
>> + *
>> + * See file CREDITS for list of people who contributed to this
>> + * project.
>> + *
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License as
>> + * published by the Free Software Foundation; either version 2 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program; if not, write to the Free Software
>> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
>> + * MA 02111-1307 USA
>> + */
>> +
>> +#ifndef _TRATS_SETUP_H
>> +#define _TRATS_SETUP_H
>> +
>> +#include<config.h>
>> +#include<version.h>
>> +#include<asm/arch/cpu.h>
>> +
>> +/* Offsets of clock registers (sources and dividers) */
>> +#define CLK_SRC_CPU_OFFSET 0x14200
>> +#define CLK_DIV_CPU0_OFFSET 0x14500
>> +#define CLK_DIV_CPU1_OFFSET 0x14504
>> +
>> +#define CLK_DIV_DMC0_OFFSET 0x10500
>> +#define CLK_DIV_DMC1_OFFSET 0x10504
>> +
>> +#define CLK_DIV_LEFTBUS_OFFSET 0x4500
>> +#define CLK_DIV_RIGHTBUS_OFFSET 0x8500
>> +
>> +#define CLK_SRC_TOP0_OFFSET 0xC210
>> +#define CLK_DIV_TOP_OFFSET 0xC510
>> +
>> +#define CLK_SRC_FSYS_OFFSET 0xC240
>> +#define CLK_DIV_FSYS1_OFFSET 0xC544
>> +#define CLK_DIV_FSYS2_OFFSET 0xC548
>> +#define CLK_DIV_FSYS3_OFFSET 0xC54C
>> +
>> +#define CLK_SRC_PERIL0_OFFSET 0xC250
>> +#define CLK_DIV_PERIL0_OFFSET 0xC550
>> +
>> +#define APLL_LOCK_OFFSET 0x14000
>> +#define MPLL_LOCK_OFFSET 0x14008
>> +#define APLL_CON0_OFFSET 0x14100
>> +#define APLL_CON1_OFFSET 0x14104
>> +#define MPLL_CON0_OFFSET 0x14108
>> +#define MPLL_CON1_OFFSET 0x1410C
>> +
>> +#define EPLL_LOCK_OFFSET 0xC010
>> +#define VPLL_LOCK_OFFSET 0xC020
>> +#define EPLL_CON0_OFFSET 0xC110
>> +#define EPLL_CON1_OFFSET 0xC114
>> +#define VPLL_CON0_OFFSET 0xC120
>> +#define VPLL_CON1_OFFSET 0xC124
>> +
>> +#define CLK_GATE_IP_CAM_OFFSET 0xC920
>> +#define CLK_GATE_IP_VP_OFFSET 0xC924
>> +#define CLK_GATE_IP_MFC_OFFSET 0xC928
>> +#define CLK_GATE_IP_G3D_OFFSET 0xC92C
>> +#define CLK_GATE_IP_IMAGE_OFFSET 0xC930
>> +#define CLK_GATE_IP_LCD0_OFFSET 0xC934
>> +#define CLK_GATE_IP_LCD1_OFFSET 0xC938
>> +#define CLK_GATE_IP_FSYS_OFFSET 0xC940
>> +#define CLK_GATE_IP_GPS_OFFSET 0xC94C
>> +#define CLK_GATE_IP_PERIL_OFFSET 0xC950
>> +#define CLK_GATE_IP_PERIR_OFFSET 0xC960
>> +#define CLK_GATE_BLOCK_OFFSET 0xC970
>> +
>> +#define PS_HOLD_CONTROL_OFFSET 0x330C
>> +
>> +#define SYSTIMER_G_CON_OFFSET 0x0240
>> +
>> +#define POWER_CAM_CONFIGURATION_OFFSET 0x1C00
>> +#define POWER_TV_CONFIGURATION_OFFSET 0x1C20
>> +#define POWER_MFC_CONFIGURATION_OFFSET 0x1C40
>> +#define POWER_G3D_CONFIGURATION_OFFSET 0x1C60
>> +#define POWER_LCD1_CONFIGURATION_OFFSET 0x1CA0
>> +#define POWER_GPS_CONFIGURATION_OFFSET 0x1CE0
>
> At now *_OFFSET is not used.
> Please remove unused defines.
You're right. I'll remove it.
>
>> +/* GPIO Offsets for UART: GPIO Contol Register */
>> +#define EXYNOS4_GPIO_A0_CON_OFFSET 0x00
>> +#define EXYNOS4_GPIO_A1_CON_OFFSET 0x20
>> +#define EXYNOS4_GPIO_Y4_CON_OFFSET 0x1A0
>> +#define EXYNOS4_GPIO_Y4_DAT_OFFSET 0x1A4
>> +#define EXYNOS4_GPIO_Y4_PUD_OFFSET 0x1A8
>> +
>> +/* GPIO Offsets for PMIC: GPIO Contol& Data Register */
>> +#define EXYNOS4_GPIO_X2_CON_OFFSET 0xC40
>> +#define EXYNOS4_GPIO_X2_DAT_OFFSET 0xC44
>> +
>> +/* GPIO Offsets for PS_HOLD: GPIO Control Register */
>> +#define EXYNOS4_PS_HOLD_CON_OFFSET 0x330C
>> +
>> +#define SET_GPIO(_v, _n, _m) (_v<< (_n * _m))
>> +#define SET_GPIO_CON(_v, _n) SET_GPIO(_v, _n, 4)
>> +#define SET_GPIO_DAT(_v, _n) SET_GPIO(_v, _n, 1)
>> +#define SET_GPIO_PUD(_v, _n) SET_GPIO(_v, _n, 1)
>> +
>> +/* PMIC Reset pin: GPX2[7] (nPOWER) */
>> +#define GPIO_BIT_PMIC_RST 7
>> +#define EXYNOS4_GPIO_X2_CON_MASK SET_GPIO_CON(0xf, GPIO_BIT_PMIC_RST)
>> +#define EXYNOS4_GPIO_X2_CON_VAL SET_GPIO_CON(0x1, GPIO_BIT_PMIC_RST)
>> +#define EXYNOS4_GPIO_X2_DAT_VAL SET_GPIO_DAT(0x1, GPIO_BIT_PMIC_RST)
>> +
>> +/* UART_SEL: GPY4[7] */
>> +#define GPIO_BIT_UART_SEL 7
>> +#define EXYNOS4_GPIO_Y4_CON_VAL SET_GPIO_CON(0x1, GPIO_BIT_UART_SEL)
>> +#define EXYNOS4_GPIO_Y4_DAT_VAL SET_GPIO_DAT(0x1, GPIO_BIT_UART_SEL)
>> +#define EXYNOS4_GPIO_Y4_PUD_VAL SET_GPIO_PUD(0xC, GPIO_BIT_UART_SEL)
>> +
>> +/* PS_HOLD: Data Hight, Output En */
>> +#define BIT_DAT 8
>> +#define BIT_EN 9
>> +#define EXYNOS4_PS_HOLD_CON_VAL (0x1<< BIT_DAT | 0x1<< BIT_EN)
>> +
>> +/*
>> + * UART GPIO_A0/GPIO_A1 Control Register Value
>> + * 0x2: UART Function
>> + * GPA1CON[3] = I2C_3_SCL (3), GPA1CON[2] = I2C_3_SDA (3)
>> + */
>> +#define EXYNOS4_GPIO_A0_CON_VAL 0x22222222
>> +#define EXYNOS4_GPIO_A1_CON_VAL 0x223322
>> +
>> +/* UART Register offsets */
>> +#define ULCON_OFFSET 0x00
>> +#define UCON_OFFSET 0x04
>> +#define UFCON_OFFSET 0x08
>> +#define UBRDIV_OFFSET 0x28
>> +#define UFRACVAL_OFFSET 0x2C
>> +
>> +/* ULCON: UART Line Control Value 8N1 */
>> +#define WORD_LEN_5_BIT 0x00
>> +#define WORD_LEN_6_BIT 0x01
>> +#define WORD_LEN_7_BIT 0x02
>> +#define WORD_LEN_8_BIT 0x03
>> +
>> +#define STOP_BIT_1 0x00
>> +#define STOP_BIT_2 0x01
>> +
>> +#define NO_PARITY 0x00
>> +#define ODD_PARITY 0x4
>> +#define EVEN_PARITY 0x5
>> +#define FORCED_PARITY_CHECK_AS_1 0x6
>> +#define FORCED_PARITY_CHECK_AS_0 0x7
>> +
>> +#define INFRAMODE_NORMAL 0x00
>> +#define INFRAMODE_INFRARED 0x01
>> +
>> +#define ULCON_VAL ((INFRAMODE_NORMAL<< 6) \
>> + | (NO_PARITY<< 3) \
>> + | (STOP_BIT_1<< 2) \
>> + | (WORD_LEN_8_BIT<< 0))
>> +
>> +/*
>> + * UCON: UART Control Value
>> + * Tx_interrupt Type: Level
>> + * Rx_interrupt Type: Level
>> + * Rx Timeout Enabled: Yes
>> + * Rx-Error Atatus_Int Enable: Yes
>> + * Loop_Back: No
>> + * Break Signal: No
>> + * Transmit mode : Interrupt request/polling
>> + * Receive mode : Interrupt request/polling
>> + */
>> +#define TX_PULSE_INTERRUPT 0
>> +#define TX_LEVEL_INTERRUPT 1
>> +#define RX_PULSE_INTERRUPT 0
>> +#define RX_LEVEL_INTERRUPT 1
>> +
>> +#define RX_TIME_OUT ENABLE
>> +#define RX_ERROR_STATE_INT_ENB ENABLE
>> +#define LOOP_BACK DISABLE
>> +#define BREAK_SIGNAL DISABLE
>> +
>> +#define TX_MODE_DISABLED 0X00
>> +#define TX_MODE_IRQ_OR_POLL 0X01
>> +#define TX_MODE_DMA 0X02
>> +
>> +#define RX_MODE_DISABLED 0X00
>> +#define RX_MODE_IRQ_OR_POLL 0X01
>> +#define RX_MODE_DMA 0X02
>> +
>> +#define UCON_VAL ((TX_LEVEL_INTERRUPT<< 9) \
>> + | (RX_LEVEL_INTERRUPT<< 8) \
>> + | (RX_TIME_OUT<< 7) \
>> + | (RX_ERROR_STATE_INT_ENB<< 6) \
>> + | (LOOP_BACK<< 5) \
>> + | (BREAK_SIGNAL<< 4) \
>> + | (TX_MODE_IRQ_OR_POLL<< 2) \
>> + | (RX_MODE_IRQ_OR_POLL<< 0))
>> +
>> +/*
>> + * UFCON: UART FIFO Control Value
>> + * Tx FIFO Trigger LEVEL: 2 Bytes (001)
>> + * Rx FIFO Trigger LEVEL: 2 Bytes (001)
>> + * Tx Fifo Reset: No
>> + * Rx Fifo Reset: No
>> + * FIFO Enable: Yes
>> + */
>> +#define TX_FIFO_TRIGGER_LEVEL_0_BYTES 0x00
>> +#define TX_FIFO_TRIGGER_LEVEL_2_BYTES 0x1
>> +#define TX_FIFO_TRIGGER_LEVEL_4_BYTES 0x2
>> +#define TX_FIFO_TRIGGER_LEVEL_6_BYTES 0x3
>> +#define TX_FIFO_TRIGGER_LEVEL_8_BYTES 0x4
>> +#define TX_FIFO_TRIGGER_LEVEL_10_BYTES 0x5
>> +#define TX_FIFO_TRIGGER_LEVEL_12_BYTES 0x6
>> +#define TX_FIFO_TRIGGER_LEVEL_14_BYTES 0x7
>> +
>> +#define RX_FIFO_TRIGGER_LEVEL_2_BYTES 0x0
>> +#define RX_FIFO_TRIGGER_LEVEL_4_BYTES 0x1
>> +#define RX_FIFO_TRIGGER_LEVEL_6_BYTES 0x2
>> +#define RX_FIFO_TRIGGER_LEVEL_8_BYTES 0x3
>> +#define RX_FIFO_TRIGGER_LEVEL_10_BYTES 0x4
>> +#define RX_FIFO_TRIGGER_LEVEL_12_BYTES 0x5
>> +#define RX_FIFO_TRIGGER_LEVEL_14_BYTES 0x6
>> +#define RX_FIFO_TRIGGER_LEVEL_16_BYTES 0x7
>> +
>> +#define TX_FIFO_TRIGGER_LEVEL TX_FIFO_TRIGGER_LEVEL_2_BYTES
>> +#define RX_FIFO_TRIGGER_LEVEL RX_FIFO_TRIGGER_LEVEL_4_BYTES
>> +#define TX_FIFO_RESET DISABLE
>> +#define RX_FIFO_RESET DISABLE
>> +#define FIFO_ENABLE ENABLE
>> +#define UFCON_VAL ((TX_FIFO_TRIGGER_LEVEL<< 8) \
>> + | (RX_FIFO_TRIGGER_LEVEL<< 4) \
>> + | (TX_FIFO_RESET<< 2) \
>> + | (RX_FIFO_RESET<< 1) \
>> + | (FIFO_ENABLE<< 0))
>> +/*
>> + * Baud Rate Division Value
>> + * 115200 BAUD:
>> + * UBRDIV_VAL = SCLK_UART/((115200 * 16) - 1)
>> + * UBRDIV_VAL = (800 MHz)/((115200 * 16) - 1)
>> + */
>> +#define UBRDIV_VAL 0x35
>> +
>> +/*
>> + * Fractional Part of Baud Rate Divisor:
>> + * 115200 BAUD:
>> + * UBRFRACVAL = ((((SCLK_UART*10/(115200*16) -10))%10)*16/10)
>> + * UBRFRACVAL = ((((800MHz*10/(115200*16) -10))%10)*16/10)
>> + */
>> +#define UFRACVAL_VAL 0x4
>
> We don't need GPIO and UART defines.
> Please remove them.
Ditto.
Thanks and Regards,
Heungjun Kim
\
>
>> +
>> +#endif
>
> Thanks.
> Minkyu Kang.
next prev parent reply other threads:[~2012-01-11 4:00 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-05 4:48 [U-Boot] [PATCH] ARMV7: Add support for TRATS board HeungJun, Kim
2012-01-10 9:00 ` [U-Boot] [PATCH v3 0/3] ARMV7: Exynos4: " HeungJun, Kim
2012-01-10 9:00 ` [U-Boot] [PATCH v3 1/3] ARMV7: Exynos4: Add watchdog.h for Exynos4 HeungJun, Kim
2012-01-10 9:00 ` [U-Boot] [PATCH v3 2/3] ARMV7: Exynos4: Add supoort power " HeungJun, Kim
2012-01-10 9:00 ` [U-Boot] [PATCH v3 3/3] ARMV7: Exynos4: Add support for TRATS board HeungJun, Kim
2012-01-11 2:35 ` Minkyu Kang
2012-01-11 4:00 ` Kim, Heungjun [this message]
2012-01-11 9:43 ` Minkyu Kang
2012-01-11 5:19 ` [U-Boot] [PATCH v3 RESEND] " HeungJun, Kim
2012-01-11 5:28 ` Kim, Heungjun
2012-01-11 5:28 ` [U-Boot] [PATCH v3 RESEND 3/3] " HeungJun, Kim
2012-01-16 7:42 ` [U-Boot] [PATCH v4 0/4] " HeungJun, Kim
2012-01-16 7:42 ` [U-Boot] [PATCH v4 1/4] ARMV7: Exynos4: Add watchdog.h for Exynos4 HeungJun, Kim
2012-01-16 7:42 ` [U-Boot] [PATCH v4 2/4] ARMV7: Exynos4: Add supoort power " HeungJun, Kim
2012-01-16 7:42 ` [U-Boot] [PATCH v4 3/4] ARMV7: Exynos4: Fix toolchain optimization problem for using volatile HeungJun, Kim
2012-01-16 7:42 ` [U-Boot] [PATCH v4 4/4] ARMV7: Exynos4: Add support for TRATS board HeungJun, Kim
2012-01-17 7:13 ` [U-Boot] [PATCH v5 0/3] " HeungJun, Kim
2012-01-17 7:13 ` [U-Boot] [PATCH v5 1/3] ARMV7: Exynos4: Add watchdog.h for Exynos4 HeungJun, Kim
2012-01-17 7:13 ` [U-Boot] [PATCH v5 2/3] ARMV7: Exynos4: Add supoort power " HeungJun, Kim
2012-01-17 7:13 ` [U-Boot] [PATCH v5 3/3] ARMV7: Exynos4: Add support for TRATS board HeungJun, Kim
2012-01-18 7:03 ` [U-Boot] [PATCH v5 0/3] " Minkyu Kang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F0D0944.6000908@samsung.com \
--to=riverful.kim@samsung.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.