diff options
author | Lin Fuzhen <fuzhen.lin@freescale.com> | 2013-01-25 10:08:39 +0800 |
---|---|---|
committer | Lin Fuzhen <fuzhen.lin@freescale.com> | 2013-01-25 14:23:20 +0800 |
commit | 9cb937432d1dc8d2c31afa5194f1ef0d8bdc0392 (patch) | |
tree | ec4847e6137f4ab0a8046beb583dd69f914ba3b3 /board | |
parent | 04d02cae9ca8da4d1efe55a9d6293c5e1a6c9879 (diff) | |
download | u-boot-imx-9cb937432d1dc8d2c31afa5194f1ef0d8bdc0392.zip u-boot-imx-9cb937432d1dc8d2c31afa5194f1ef0d8bdc0392.tar.gz u-boot-imx-9cb937432d1dc8d2c31afa5194f1ef0d8bdc0392.tar.bz2 |
ENGR00241595-1 mx6q-sabresd:Enable SATA PHY PDDQ default
The SATA PHY PDDQ configuration is depended on the CONFIG_CMD_SATA
defined or not in board config file. If SATA feature is not config,
then the PDDQ will not be set, SATA PHY will not entry in Low Power
Mode, and it will consume some power even there is no sata devices
on board.
This patch:
1 Enable SATA PHY PDDQ default no matter the SATA is enabled or not in
board config file, SATA module will disable PDDQ first when used phy,
so default enable PDDQ will not affect SATA feature.
2 It needs a delay to wait for SATA PHY initialize after enable it,
otherwise write the phy registers will fail.
Signed-off-by: Lin Fuzhen <fuzhen.lin@freescale.com>
Diffstat (limited to 'board')
-rw-r--r-- | board/freescale/mx6q_sabresd/mx6q_sabresd.c | 61 |
1 files changed, 32 insertions, 29 deletions
diff --git a/board/freescale/mx6q_sabresd/mx6q_sabresd.c b/board/freescale/mx6q_sabresd/mx6q_sabresd.c index 1b898da..57173a4 100644 --- a/board/freescale/mx6q_sabresd/mx6q_sabresd.c +++ b/board/freescale/mx6q_sabresd/mx6q_sabresd.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 Freescale Semiconductor, Inc. + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. * * See file CREDITS for list of people who contributed to this * project. @@ -232,23 +232,21 @@ void board_mmu_init(void) } #endif -#ifdef CONFIG_DWC_AHSATA - #define ANATOP_PLL_LOCK 0x80000000 #define ANATOP_PLL_ENABLE_MASK 0x00002000 #define ANATOP_PLL_BYPASS_MASK 0x00010000 -#define ANATOP_PLL_LOCK 0x80000000 #define ANATOP_PLL_PWDN_MASK 0x00001000 #define ANATOP_PLL_HOLD_RING_OFF_MASK 0x00000800 #define ANATOP_SATA_CLK_ENABLE_MASK 0x00100000 +#define PORT_PHY_CTL 0x178 +#define PORT_PHY_CTL_PDDQ_LOC 0x100000 +#ifdef CONFIG_DWC_AHSATA /* Staggered Spin-up */ #define HOST_CAP_SSS (1 << 27) /* host version register*/ #define HOST_VERSIONR 0xfc #define PORT_SATA_SR 0x128 -#define PORT_PHY_CTL 0x178 -#define PORT_PHY_CTL_PDDQ_LOC 0x100000 int sata_initialize(void) { @@ -295,8 +293,22 @@ int sata_initialize(void) return __sata_initialize(); } +#endif -int setup_sata(void) +/* Note: udelay() is not accurate for i2c timing */ +static void __udelay(int time) +{ + int i, j; + + for (i = 0; i < time; i++) { + for (j = 0; j < 200; j++) { + asm("nop"); + asm("nop"); + } + } +} + +static int setup_sata(void) { u32 reg = 0; s32 timeout = 100000; @@ -340,16 +352,19 @@ int setup_sata(void) reg |= 0x59124c6; writel(reg, IOMUXC_BASE_ADDR + 0x34); - if (sata_curr_device == -1) { - /* Enable PDDQ mode in default if there isn't sata boot */ - reg = readl(SATA_ARB_BASE_ADDR + PORT_PHY_CTL); - writel(reg | PORT_PHY_CTL_PDDQ_LOC, - SATA_ARB_BASE_ADDR + PORT_PHY_CTL); - } + /* FIXME */ + /* + * It needs to wait SATA PHY initialize completed, otherwise write the + * PORT_PHY_CTL will fail, then can't enable PDDQ which let PHY entry LPM + * Currently set it as 1ms. + */ + __udelay(1000); + /* Enable PDDQ mode in default */ + writel(readl(SATA_ARB_BASE_ADDR + PORT_PHY_CTL) | PORT_PHY_CTL_PDDQ_LOC, + SATA_ARB_BASE_ADDR + PORT_PHY_CTL); return 0; } -#endif int dram_init(void) { @@ -485,18 +500,7 @@ static void setup_i2c(unsigned int module_base) break; } } -/* Note: udelay() is not accurate for i2c timing */ -static void __udelay(int time) -{ - int i, j; - for (i = 0; i < time; i++) { - for (j = 0; j < 200; j++) { - asm("nop"); - asm("nop"); - } - } -} static void mx6q_i2c_gpio_scl_direction(int bus, int output) { u32 reg; @@ -1751,10 +1755,7 @@ int board_init(void) gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; setup_uart(); - -#ifdef CONFIG_DWC_AHSATA - setup_sata(); -#endif + setup_sata(); #ifdef CONFIG_VIDEO_MX5 /* Enable lvds power */ @@ -1994,6 +1995,8 @@ int checkboard(void) break; } + printf("SATA PDDQ: %s\n", ((readl(SATA_ARB_BASE_ADDR + PORT_PHY_CTL) + & PORT_PHY_CTL_PDDQ_LOC)>>20) ? "enabled" : "disabled"); #ifdef CONFIG_SECURE_BOOT if (check_hab_enable() == 1) get_hab_status(); |