diff options
| author | Fabio Estevam <fabio.estevam@freescale.com> | 2013-05-23 07:50:23 +0000 | 
|---|---|---|
| committer | Stefano Babic <sbabic@denx.de> | 2013-06-03 14:26:14 +0200 | 
| commit | 7bcb983feb8296f58a651c2b2a48683fc27174cd (patch) | |
| tree | f71367b7d2d260e02e74d7f9284a56971ff91c5e | |
| parent | 96903dae0e0119af5c9f7842ff57c775fff38c2e (diff) | |
| download | olio-uboot-2014.01-7bcb983feb8296f58a651c2b2a48683fc27174cd.tar.xz olio-uboot-2014.01-7bcb983feb8296f58a651c2b2a48683fc27174cd.zip | |
wandboard: Enable HDMI splashscreen
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
| -rw-r--r-- | board/wandboard/wandboard.c | 98 | ||||
| -rw-r--r-- | include/configs/wandboard.h | 15 | 
2 files changed, 112 insertions, 1 deletions
| diff --git a/board/wandboard/wandboard.c b/board/wandboard/wandboard.c index bb983528b..5666cbf26 100644 --- a/board/wandboard/wandboard.c +++ b/board/wandboard/wandboard.c @@ -10,9 +10,11 @@   */  #include <asm/arch/clock.h> +#include <asm/arch/crm_regs.h>  #include <asm/arch/iomux.h>  #include <asm/arch/imx-regs.h>  #include <asm/arch/mx6-pins.h> +#include <asm/arch/mxc_hdmi.h>  #include <asm/arch/sys_proto.h>  #include <asm/gpio.h>  #include <asm/imx-common/iomux-v3.h> @@ -21,9 +23,11 @@  #include <asm/sizes.h>  #include <common.h>  #include <fsl_esdhc.h> +#include <ipu_pixfmt.h>  #include <mmc.h>  #include <miiphy.h>  #include <netdev.h> +#include <linux/fb.h>  DECLARE_GLOBAL_DATA_PTR; @@ -206,6 +210,88 @@ int board_phy_config(struct phy_device *phydev)  	return 0;  } +#if defined(CONFIG_VIDEO_IPUV3) +static void enable_hdmi(void) +{ +	struct hdmi_regs *hdmi	= (struct hdmi_regs *)HDMI_ARB_BASE_ADDR; +	u8 reg; +	reg = readb(&hdmi->phy_conf0); +	reg |= HDMI_PHY_CONF0_PDZ_MASK; +	writeb(reg, &hdmi->phy_conf0); + +	udelay(3000); +	reg |= HDMI_PHY_CONF0_ENTMDS_MASK; +	writeb(reg, &hdmi->phy_conf0); +	udelay(3000); +	reg |= HDMI_PHY_CONF0_GEN2_TXPWRON_MASK; +	writeb(reg, &hdmi->phy_conf0); +	writeb(HDMI_MC_PHYRSTZ_ASSERT, &hdmi->mc_phyrstz); +} + +static struct fb_videomode const hdmi = { +	.name           = "HDMI", +	.refresh        = 60, +	.xres           = 1024, +	.yres           = 768, +	.pixclock       = 15385, +	.left_margin    = 220, +	.right_margin   = 40, +	.upper_margin   = 21, +	.lower_margin   = 7, +	.hsync_len      = 60, +	.vsync_len      = 10, +	.sync           = FB_SYNC_EXT, +	.vmode          = FB_VMODE_NONINTERLACED +}; + +int board_video_skip(void) +{ +	int ret; + +	ret = ipuv3_fb_init(&hdmi, 0, IPU_PIX_FMT_RGB24); + +	if (ret) +		printf("HDMI cannot be configured: %d\n", ret); + +	enable_hdmi(); + +	return ret; +} + +static void setup_display(void) +{ +	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; +	struct hdmi_regs *hdmi	= (struct hdmi_regs *)HDMI_ARB_BASE_ADDR; +	int reg; + +	/* Turn on IPU clock */ +	reg = readl(&mxc_ccm->CCGR3); +	reg |= MXC_CCM_CCGR3_IPU1_IPU_DI0_OFFSET; +	writel(reg, &mxc_ccm->CCGR3); + +	/* Turn on HDMI PHY clock */ +	reg = readl(&mxc_ccm->CCGR2); +	reg |=  MXC_CCM_CCGR2_HDMI_TX_IAHBCLK_MASK +		| MXC_CCM_CCGR2_HDMI_TX_ISFRCLK_MASK; +	writel(reg, &mxc_ccm->CCGR2); + +	/* clear HDMI PHY reset */ +	writeb(HDMI_MC_PHYRSTZ_DEASSERT, &hdmi->mc_phyrstz); + +	reg = readl(&mxc_ccm->chsccdr); +	reg &= ~(MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_MASK +		| MXC_CCM_CHSCCDR_IPU1_DI0_PODF_MASK +		| MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_MASK); +	reg |= (CHSCCDR_CLK_SEL_LDB_DI0 +		<< MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET) +	      | (CHSCCDR_PODF_DIVIDE_BY_3 +		<< MXC_CCM_CHSCCDR_IPU1_DI0_PODF_OFFSET) +	      | (CHSCCDR_IPU_PRE_CLK_540M_PFD +		<< MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_OFFSET); +	writel(reg, &mxc_ccm->chsccdr); +} +#endif /* CONFIG_VIDEO_IPUV3 */ +  int board_eth_init(bd_t *bis)  {  	int ret; @@ -222,9 +308,21 @@ int board_eth_init(bd_t *bis)  int board_early_init_f(void)  {  	setup_iomux_uart(); +#if defined(CONFIG_VIDEO_IPUV3) +	setup_display(); +#endif  	return 0;  } +/* + * Do not overwrite the console + * Use always serial for U-Boot console + */ +int overwrite_console(void) +{ +	return 1; +} +  #ifdef CONFIG_CMD_BMODE  static const struct boot_mode board_boot_modes[] = {  	/* 4 bit bus width */ diff --git a/include/configs/wandboard.h b/include/configs/wandboard.h index 9d7ec3f6f..d4ac08664 100644 --- a/include/configs/wandboard.h +++ b/include/configs/wandboard.h @@ -29,7 +29,7 @@  #define CONFIG_REVISION_TAG  /* Size of malloc() pool */ -#define CONFIG_SYS_MALLOC_LEN		(3 * SZ_1M) +#define CONFIG_SYS_MALLOC_LEN		(10 * SZ_1M)  #define CONFIG_BOARD_EARLY_INIT_F  #define CONFIG_BOARD_LATE_INIT @@ -86,6 +86,19 @@  #define CONFIG_PHYLIB  #define CONFIG_PHY_ATHEROS +/* Framebuffer */ +#define CONFIG_VIDEO +#define CONFIG_VIDEO_IPUV3 +#define CONFIG_CFB_CONSOLE +#define CONFIG_VGA_AS_SINGLE_DEVICE +#define CONFIG_SYS_CONSOLE_IS_IN_ENV +#define CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE +#define CONFIG_VIDEO_BMP_RLE8 +#define CONFIG_SPLASH_SCREEN +#define CONFIG_BMP_16BPP +#define CONFIG_VIDEO_LOGO +#define CONFIG_IPUV3_CLK 260000000 +  #if defined(CONFIG_MX6DL)  #define CONFIG_DEFAULT_FDT_FILE		"imx6dl-wandboard.dtb"  #elif defined(CONFIG_MX6S) |