<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Screen is blank for 2 seconds between u-boot bootlogo and kernel penguin in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/Screen-is-blank-for-2-seconds-between-u-boot-bootlogo-and-kernel/m-p/211157#M12725</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;1. Description&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;In Mx53 SMD, if enable u-boot boot logo, the screen will be blank for about 2 seconds between u-boot boot logo and Kernel penguin.&lt;/P&gt;&lt;P&gt;Below patch can shorten the blank time to less than 1 second. The patch is based on R10.3.2 u-boot and kernel.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In u-boot patch, CONFIG_FB_BASE is changed to 0x8fb00000, which is the physical address of kernel fb0.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 11pt; font-family: 'Calibri','sans-serif';"&gt;To get the address, can printk mxcfb_resources[0].start in fixup_android_board() in kernel_imx/arch/arm/mach-mx5/mx53_smd.c. This address is fixed if pmem, fbmem and gpu_memory in u-boot command line are fixed.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;2. u-boot patch&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;diff --git a/cpu/arm_cortexa8/cpu.c b/cpu/arm_cortexa8/cpu.c&lt;/P&gt;&lt;P&gt;index a7a6fb7..36773f1&lt;/P&gt;&lt;P&gt;--- a/cpu/arm_cortexa8/cpu.c&lt;/P&gt;&lt;P&gt;+++ b/cpu/arm_cortexa8/cpu.c&lt;/P&gt;&lt;P&gt;@@ -141,8 +141,8 @@ int cleanup_before_linux(void)&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#ifdef CONFIG_VIDEO_MX5&lt;/P&gt;&lt;P&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_disable_channel(MEM_BG_SYNC);&lt;/P&gt;&lt;P&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_uninit_channel(MEM_BG_SYNC);&lt;/P&gt;&lt;P&gt;+//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_disable_channel(MEM_BG_SYNC);&lt;/P&gt;&lt;P&gt;+//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_uninit_channel(MEM_BG_SYNC);&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;diff --git a/include/configs/mx53_smd_android.h b/include/configs/mx53_smd_android.h&lt;/P&gt;&lt;P&gt;index b3a91e7..d51d085&lt;/P&gt;&lt;P&gt;--- a/include/configs/mx53_smd_android.h&lt;/P&gt;&lt;P&gt;+++ b/include/configs/mx53_smd_android.h&lt;/P&gt;&lt;P&gt;@@ -336,7 +352,8 @@&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define LCD_BPP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_COLOR16&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CONFIG_CMD_BMP&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CONFIG_BMP_8BPP&lt;/P&gt;&lt;P&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CONFIG_FB_BASE&amp;nbsp; (TEXT_BASE + 0x300000)&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //#define CONFIG_FB_BASE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (TEXT_BASE + 0x300000)&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CONFIG_FB_BASE&amp;nbsp; 0x8fb00000;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;3. Kernel patch&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;diff --git a/arch/arm/mach-mx5/clock.c b/arch/arm/mach-mx5/clock.c&lt;/P&gt;&lt;P&gt;index a57c666..ba76676&lt;/P&gt;&lt;P&gt;--- a/arch/arm/mach-mx5/clock.c&lt;/P&gt;&lt;P&gt;+++ b/arch/arm/mach-mx5/clock.c&lt;/P&gt;&lt;P&gt;@@ -4359,6 +4359,7 @@ static struct clk_lookup lookups[] = {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _REGISTER_CLOCK(NULL, "gpt", gpt_clk[0]),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _REGISTER_CLOCK("fec.0", NULL, fec_clk[0]),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _REGISTER_CLOCK("mxc_w1.0", NULL, owire_clk),&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _REGISTER_CLOCK("ipg_perclk", NULL, ipg_perclk),&lt;/P&gt;&lt;P&gt;};&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;static struct clk_lookup mx51_lookups[] = {&lt;/P&gt;&lt;P&gt;@@ -4860,6 +4861,10 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, unsigned long&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_tree_init();&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enable pwm_clk */&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __raw_writel(1 &amp;lt;&amp;lt; MXC_CCM_CCGRx_CG7_OFFSET |&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 &amp;lt;&amp;lt; MXC_CCM_CCGRx_CG8_OFFSET, MXC_CCM_CCGR2);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; ARRAY_SIZE(lookups); i++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clkdev_add(&amp;amp;lookups[i]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mx53_clks[i].reg_clk = lookups[i].clk;&lt;/P&gt;&lt;P&gt;@@ -5034,6 +5039,10 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, unsigned long&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1190000));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base = ioremap(MX53_BASE_ADDR(GPT1_BASE_ADDR), SZ_4K);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxc_timer_init(&amp;amp;gpt_clk[0], base, MXC_INT_GPT);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_enable(&amp;amp;ipu_clk[0]);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_enable(&amp;amp;ldb_di_clk[1]);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;diff --git a/arch/arm/mach-mx5/cpu.c b/arch/arm/mach-mx5/cpu.c&lt;/P&gt;&lt;P&gt;index dc52165..92808cd&lt;/P&gt;&lt;P&gt;--- a/arch/arm/mach-mx5/cpu.c&lt;/P&gt;&lt;P&gt;+++ b/arch/arm/mach-mx5/cpu.c&lt;/P&gt;&lt;P&gt;@@ -179,10 +179,31 @@ static void __init mipi_hsc_disable(void)&lt;/P&gt;&lt;P&gt;/*!&lt;/P&gt;&lt;P&gt;&amp;nbsp; * This function resets IPU&lt;/P&gt;&lt;P&gt;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;+#include &amp;lt;mach/iomux-mx53.h&amp;gt;&lt;/P&gt;&lt;P&gt;+#include &amp;lt;mach/gpio.h&amp;gt;&lt;/P&gt;&lt;P&gt;+extern int clk_get_usecount(struct clk *clk);&lt;/P&gt;&lt;P&gt;+extern int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad);&lt;/P&gt;&lt;P&gt;+struct timeval ipu_start;&lt;/P&gt;&lt;P&gt;+#define MX53_SMD_GPIO_PWM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0*32 + 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* GPIO1_1 */&lt;/P&gt;&lt;P&gt;+EXPORT_SYMBOL(ipu_start);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;void mx5_ipu_reset(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32 *reg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32 value;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct clk *ipu_clk;&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk("%s\n", __func__);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxc_iomux_v3_setup_pad(MX53_PAD_GPIO_1__GPIO1_1);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpio_request(MX53_SMD_GPIO_PWM, "gpio_pwm");&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpio_direction_output(MX53_SMD_GPIO_PWM, 0);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_gettimeofday (&amp;amp;ipu_start);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_clk = clk_get(NULL, "ipu_clk");&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((ipu_clk != NULL) &amp;amp;&amp;amp; (clk_get_usecount(ipu_clk) &amp;gt; 0))&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_disable(ipu_clk);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reg = ioremap(MX53_BASE_ADDR(SRC_BASE_ADDR), PAGE_SIZE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = __raw_readl(reg);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = value | 0x8;&lt;/P&gt;&lt;P&gt;diff --git a/drivers/video/mxc/mxc_ipuv3_fb.c b/drivers/video/mxc/mxc_ipuv3_fb.c&lt;/P&gt;&lt;P&gt;index f28e2e6..5d426ea&lt;/P&gt;&lt;P&gt;--- a/drivers/video/mxc/mxc_ipuv3_fb.c&lt;/P&gt;&lt;P&gt;+++ b/drivers/video/mxc/mxc_ipuv3_fb.c&lt;/P&gt;&lt;P&gt;@@ -48,6 +48,8 @@&lt;/P&gt;&lt;P&gt;#include &amp;lt;linux/uaccess.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;linux/fsl_devices.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;asm/mach-types.h&amp;gt;&lt;/P&gt;&lt;P&gt;+#include &amp;lt;mach/iomux-mx53.h&amp;gt;&lt;/P&gt;&lt;P&gt;+#include &amp;lt;mach/gpio.h&amp;gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt;&amp;nbsp; * Driver name&lt;/P&gt;&lt;P&gt;@@ -1876,6 +1878,7 @@ done:&lt;/P&gt;&lt;P&gt;&amp;nbsp; *&lt;/P&gt;&lt;P&gt;&amp;nbsp; * @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Appropriate error code to the kernel common code&lt;/P&gt;&lt;P&gt;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;+extern struct timeval ipu_start;&lt;/P&gt;&lt;P&gt;static int mxcfb_probe(struct platform_device *pdev)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct fb_info *fbi;&lt;/P&gt;&lt;P&gt;@@ -1992,8 +1995,20 @@ static int mxcfb_probe(struct platform_device *pdev)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dev_err(&amp;amp;pdev-&amp;gt;dev, "Error %d on creating file\n", ret);&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#ifdef CONFIG_LOGO&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct timeval duration;&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fb_prepare_logo(fbi, 0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fb_show_logo(fbi, 0);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxc_iomux_v3_setup_pad(MX53_PAD_GPIO_1__PWM2_PWMO);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_gettimeofday (&amp;amp;duration);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration.tv_sec -= ipu_start.tv_sec;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration.tv_usec -= ipu_start.tv_usec;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (duration.tv_usec &amp;lt; 0) {&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration.tv_usec += 1000 * 1000;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration.tv_sec -= 1;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk("show log take %d s, %d us\n", duration.tv_sec, duration.tv_usec);&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;4. PERCLK_ROOT requirement&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;There is such description in the CCM chapter of MX53 reference manual:&lt;/P&gt;&lt;P&gt;PERCLK_ROOT - this clock is synchronized and balanced to AHB_CLK_ROOT. For the synchronization process, peripherals clock pre-divider and post-divider should generate clock with frequency 2.5 times lower than AHB clock.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To meet this requirement, all the children clock of perclk_root should be disabled before configuring perclk_root, and enabled after configured.&lt;/P&gt;&lt;P&gt;If not follow this step, your kernel may hang at “Calibrating delay loop... 999.42 BogoMIPS (lpj=4997120)”.&lt;/P&gt;&lt;P&gt;In this kernel patch, the children of perclk_root are disabled before clk_tree_init(); then in clk_tree_init(), perclk_root is configured; and then after clk_tree_init(), pwm_clk is enabled.&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-336450"&gt;u-boot.bin.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-336450"&gt;uImage.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-336450"&gt;u-boot-logo.patch.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-336450"&gt;kernel_bootlogo_0318.patch.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 08 Oct 2012 07:18:58 GMT</pubDate>
    <dc:creator>shaojun_wang</dc:creator>
    <dc:date>2012-10-08T07:18:58Z</dc:date>
    <item>
      <title>Screen is blank for 2 seconds between u-boot bootlogo and kernel penguin</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Screen-is-blank-for-2-seconds-between-u-boot-bootlogo-and-kernel/m-p/211157#M12725</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;1. Description&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;In Mx53 SMD, if enable u-boot boot logo, the screen will be blank for about 2 seconds between u-boot boot logo and Kernel penguin.&lt;/P&gt;&lt;P&gt;Below patch can shorten the blank time to less than 1 second. The patch is based on R10.3.2 u-boot and kernel.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In u-boot patch, CONFIG_FB_BASE is changed to 0x8fb00000, which is the physical address of kernel fb0.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 11pt; font-family: 'Calibri','sans-serif';"&gt;To get the address, can printk mxcfb_resources[0].start in fixup_android_board() in kernel_imx/arch/arm/mach-mx5/mx53_smd.c. This address is fixed if pmem, fbmem and gpu_memory in u-boot command line are fixed.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;2. u-boot patch&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;diff --git a/cpu/arm_cortexa8/cpu.c b/cpu/arm_cortexa8/cpu.c&lt;/P&gt;&lt;P&gt;index a7a6fb7..36773f1&lt;/P&gt;&lt;P&gt;--- a/cpu/arm_cortexa8/cpu.c&lt;/P&gt;&lt;P&gt;+++ b/cpu/arm_cortexa8/cpu.c&lt;/P&gt;&lt;P&gt;@@ -141,8 +141,8 @@ int cleanup_before_linux(void)&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#ifdef CONFIG_VIDEO_MX5&lt;/P&gt;&lt;P&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_disable_channel(MEM_BG_SYNC);&lt;/P&gt;&lt;P&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_uninit_channel(MEM_BG_SYNC);&lt;/P&gt;&lt;P&gt;+//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_disable_channel(MEM_BG_SYNC);&lt;/P&gt;&lt;P&gt;+//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_uninit_channel(MEM_BG_SYNC);&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;diff --git a/include/configs/mx53_smd_android.h b/include/configs/mx53_smd_android.h&lt;/P&gt;&lt;P&gt;index b3a91e7..d51d085&lt;/P&gt;&lt;P&gt;--- a/include/configs/mx53_smd_android.h&lt;/P&gt;&lt;P&gt;+++ b/include/configs/mx53_smd_android.h&lt;/P&gt;&lt;P&gt;@@ -336,7 +352,8 @@&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define LCD_BPP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_COLOR16&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CONFIG_CMD_BMP&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CONFIG_BMP_8BPP&lt;/P&gt;&lt;P&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CONFIG_FB_BASE&amp;nbsp; (TEXT_BASE + 0x300000)&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //#define CONFIG_FB_BASE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (TEXT_BASE + 0x300000)&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CONFIG_FB_BASE&amp;nbsp; 0x8fb00000;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;3. Kernel patch&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;diff --git a/arch/arm/mach-mx5/clock.c b/arch/arm/mach-mx5/clock.c&lt;/P&gt;&lt;P&gt;index a57c666..ba76676&lt;/P&gt;&lt;P&gt;--- a/arch/arm/mach-mx5/clock.c&lt;/P&gt;&lt;P&gt;+++ b/arch/arm/mach-mx5/clock.c&lt;/P&gt;&lt;P&gt;@@ -4359,6 +4359,7 @@ static struct clk_lookup lookups[] = {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _REGISTER_CLOCK(NULL, "gpt", gpt_clk[0]),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _REGISTER_CLOCK("fec.0", NULL, fec_clk[0]),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _REGISTER_CLOCK("mxc_w1.0", NULL, owire_clk),&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _REGISTER_CLOCK("ipg_perclk", NULL, ipg_perclk),&lt;/P&gt;&lt;P&gt;};&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;static struct clk_lookup mx51_lookups[] = {&lt;/P&gt;&lt;P&gt;@@ -4860,6 +4861,10 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, unsigned long&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_tree_init();&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enable pwm_clk */&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __raw_writel(1 &amp;lt;&amp;lt; MXC_CCM_CCGRx_CG7_OFFSET |&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 &amp;lt;&amp;lt; MXC_CCM_CCGRx_CG8_OFFSET, MXC_CCM_CCGR2);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; ARRAY_SIZE(lookups); i++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clkdev_add(&amp;amp;lookups[i]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mx53_clks[i].reg_clk = lookups[i].clk;&lt;/P&gt;&lt;P&gt;@@ -5034,6 +5039,10 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, unsigned long&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1190000));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base = ioremap(MX53_BASE_ADDR(GPT1_BASE_ADDR), SZ_4K);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxc_timer_init(&amp;amp;gpt_clk[0], base, MXC_INT_GPT);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_enable(&amp;amp;ipu_clk[0]);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_enable(&amp;amp;ldb_di_clk[1]);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;diff --git a/arch/arm/mach-mx5/cpu.c b/arch/arm/mach-mx5/cpu.c&lt;/P&gt;&lt;P&gt;index dc52165..92808cd&lt;/P&gt;&lt;P&gt;--- a/arch/arm/mach-mx5/cpu.c&lt;/P&gt;&lt;P&gt;+++ b/arch/arm/mach-mx5/cpu.c&lt;/P&gt;&lt;P&gt;@@ -179,10 +179,31 @@ static void __init mipi_hsc_disable(void)&lt;/P&gt;&lt;P&gt;/*!&lt;/P&gt;&lt;P&gt;&amp;nbsp; * This function resets IPU&lt;/P&gt;&lt;P&gt;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;+#include &amp;lt;mach/iomux-mx53.h&amp;gt;&lt;/P&gt;&lt;P&gt;+#include &amp;lt;mach/gpio.h&amp;gt;&lt;/P&gt;&lt;P&gt;+extern int clk_get_usecount(struct clk *clk);&lt;/P&gt;&lt;P&gt;+extern int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad);&lt;/P&gt;&lt;P&gt;+struct timeval ipu_start;&lt;/P&gt;&lt;P&gt;+#define MX53_SMD_GPIO_PWM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0*32 + 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* GPIO1_1 */&lt;/P&gt;&lt;P&gt;+EXPORT_SYMBOL(ipu_start);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;void mx5_ipu_reset(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32 *reg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32 value;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct clk *ipu_clk;&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk("%s\n", __func__);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxc_iomux_v3_setup_pad(MX53_PAD_GPIO_1__GPIO1_1);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpio_request(MX53_SMD_GPIO_PWM, "gpio_pwm");&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpio_direction_output(MX53_SMD_GPIO_PWM, 0);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_gettimeofday (&amp;amp;ipu_start);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_clk = clk_get(NULL, "ipu_clk");&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((ipu_clk != NULL) &amp;amp;&amp;amp; (clk_get_usecount(ipu_clk) &amp;gt; 0))&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clk_disable(ipu_clk);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reg = ioremap(MX53_BASE_ADDR(SRC_BASE_ADDR), PAGE_SIZE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = __raw_readl(reg);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = value | 0x8;&lt;/P&gt;&lt;P&gt;diff --git a/drivers/video/mxc/mxc_ipuv3_fb.c b/drivers/video/mxc/mxc_ipuv3_fb.c&lt;/P&gt;&lt;P&gt;index f28e2e6..5d426ea&lt;/P&gt;&lt;P&gt;--- a/drivers/video/mxc/mxc_ipuv3_fb.c&lt;/P&gt;&lt;P&gt;+++ b/drivers/video/mxc/mxc_ipuv3_fb.c&lt;/P&gt;&lt;P&gt;@@ -48,6 +48,8 @@&lt;/P&gt;&lt;P&gt;#include &amp;lt;linux/uaccess.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;linux/fsl_devices.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;asm/mach-types.h&amp;gt;&lt;/P&gt;&lt;P&gt;+#include &amp;lt;mach/iomux-mx53.h&amp;gt;&lt;/P&gt;&lt;P&gt;+#include &amp;lt;mach/gpio.h&amp;gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt;&amp;nbsp; * Driver name&lt;/P&gt;&lt;P&gt;@@ -1876,6 +1878,7 @@ done:&lt;/P&gt;&lt;P&gt;&amp;nbsp; *&lt;/P&gt;&lt;P&gt;&amp;nbsp; * @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Appropriate error code to the kernel common code&lt;/P&gt;&lt;P&gt;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;+extern struct timeval ipu_start;&lt;/P&gt;&lt;P&gt;static int mxcfb_probe(struct platform_device *pdev)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct fb_info *fbi;&lt;/P&gt;&lt;P&gt;@@ -1992,8 +1995,20 @@ static int mxcfb_probe(struct platform_device *pdev)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dev_err(&amp;amp;pdev-&amp;gt;dev, "Error %d on creating file\n", ret);&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#ifdef CONFIG_LOGO&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct timeval duration;&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fb_prepare_logo(fbi, 0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fb_show_logo(fbi, 0);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxc_iomux_v3_setup_pad(MX53_PAD_GPIO_1__PWM2_PWMO);&lt;/P&gt;&lt;P&gt;+&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_gettimeofday (&amp;amp;duration);&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration.tv_sec -= ipu_start.tv_sec;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration.tv_usec -= ipu_start.tv_usec;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (duration.tv_usec &amp;lt; 0) {&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration.tv_usec += 1000 * 1000;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration.tv_sec -= 1;&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk("show log take %d s, %d us\n", duration.tv_sec, duration.tv_usec);&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;4. PERCLK_ROOT requirement&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;There is such description in the CCM chapter of MX53 reference manual:&lt;/P&gt;&lt;P&gt;PERCLK_ROOT - this clock is synchronized and balanced to AHB_CLK_ROOT. For the synchronization process, peripherals clock pre-divider and post-divider should generate clock with frequency 2.5 times lower than AHB clock.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To meet this requirement, all the children clock of perclk_root should be disabled before configuring perclk_root, and enabled after configured.&lt;/P&gt;&lt;P&gt;If not follow this step, your kernel may hang at “Calibrating delay loop... 999.42 BogoMIPS (lpj=4997120)”.&lt;/P&gt;&lt;P&gt;In this kernel patch, the children of perclk_root are disabled before clk_tree_init(); then in clk_tree_init(), perclk_root is configured; and then after clk_tree_init(), pwm_clk is enabled.&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-336450"&gt;u-boot.bin.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-336450"&gt;uImage.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-336450"&gt;u-boot-logo.patch.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-336450"&gt;kernel_bootlogo_0318.patch.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 08 Oct 2012 07:18:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Screen-is-blank-for-2-seconds-between-u-boot-bootlogo-and-kernel/m-p/211157#M12725</guid>
      <dc:creator>shaojun_wang</dc:creator>
      <dc:date>2012-10-08T07:18:58Z</dc:date>
    </item>
  </channel>
</rss>

