<?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 Re: Starting kernel ... using 4 seconds to start unpress kernel in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/Starting-kernel-using-4-seconds-to-start-unpress-kernel/m-p/756668#M117701</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;From 2e2f1168059373faf020fb882f3c4d65a5f40c45 Mon Sep 17 00:00:00 2001&lt;BR /&gt;&lt;SPAN&gt;From: hongjiujin &amp;lt;&lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:hongjiujin@xxx.com"&gt;hongjiujin@xxx.com&lt;/A&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;Date: Thu, 11 Jan 2018 14:04:23 +0800&lt;BR /&gt;Subject: [PATCH] linux kernel: support early console and fix mistakes in&lt;BR /&gt;&amp;nbsp;includes/dts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Register early console so that kernel can quickly startup.&lt;BR /&gt;It can speedup almost 2~3 seconds between "Starting kernel..." and "Uncompressing".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Signed-off-by: hongjiujin &amp;lt;&lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:hongjiujin@xxx.com"&gt;hongjiujin@xxx.com&lt;/A&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;---&lt;BR /&gt;&amp;nbsp;.../uboot-imx/include/configs/mx6sabre_common.h&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp; 2 +-&lt;BR /&gt;&amp;nbsp;.../uboot-imx/include/configs/mx6sabresd.h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp; 2 +-&lt;BR /&gt;&amp;nbsp;device/fsl/sabresd_6dq/BoardConfig.mk&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; 2 +-&lt;BR /&gt;&amp;nbsp;kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi&amp;nbsp; |&amp;nbsp;&amp;nbsp; 4 +-&lt;BR /&gt;&amp;nbsp;kernel_imx/arch/arm/mach-imx/mach-imx6q.c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 26 ++&lt;BR /&gt;&amp;nbsp;kernel_imx/drivers/tty/serial/Makefile&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; 1 +&lt;BR /&gt;&amp;nbsp;kernel_imx/drivers/tty/serial/mxc_uart_early.c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 188 +++++++++++++++&lt;BR /&gt;&amp;nbsp;kernel_imx/drivers/tty/serial/mxc_uart_early.h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 267 +++++++++++++++++++++&lt;BR /&gt;&amp;nbsp;8 files changed, 487 insertions(+), 5 deletions(-)&lt;BR /&gt;&amp;nbsp;create mode 100644 kernel_imx/drivers/tty/serial/mxc_uart_early.c&lt;BR /&gt;&amp;nbsp;create mode 100755 kernel_imx/drivers/tty/serial/mxc_uart_early.h&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;diff --git a/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h b/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h&lt;BR /&gt;index bf30c62..bd062e3 100644&lt;BR /&gt;--- a/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h&lt;BR /&gt;+++ b/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h&lt;BR /&gt;@@ -90,7 +90,7 @@&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;/* allow to overwrite serial and ethaddr */&lt;BR /&gt;&amp;nbsp;#define CONFIG_ENV_OVERWRITE&lt;BR /&gt;-#define CONFIG_CONS_INDEX&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; 1&lt;BR /&gt;+#define CONFIG_CONS_INDEX&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; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* UART4 */&lt;BR /&gt;&amp;nbsp;#define CONFIG_BAUDRATE&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; 115200&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;/* Command definition */&lt;BR /&gt;diff --git a/bootable/bootloader/uboot-imx/include/configs/mx6sabresd.h b/bootable/bootloader/uboot-imx/include/configs/mx6sabresd.h&lt;BR /&gt;index 14f1ce3..cd84c29 100755&lt;BR /&gt;--- a/bootable/bootloader/uboot-imx/include/configs/mx6sabresd.h&lt;BR /&gt;+++ b/bootable/bootloader/uboot-imx/include/configs/mx6sabresd.h&lt;BR /&gt;@@ -27,7 +27,7 @@&lt;BR /&gt;&amp;nbsp;#define PHYS_SDRAM_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(1u * 1024 * 1024 * 1024)&lt;BR /&gt;&amp;nbsp;#elif defined(CONFIG_MX6Q)&lt;BR /&gt;&amp;nbsp;#define CONFIG_DEFAULT_FDT_FILE&amp;nbsp;&amp;nbsp; &amp;nbsp;"imx6q-sabresd.dtb"&lt;BR /&gt;-#define PHYS_SDRAM_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(1u * 1024 * 1024 * 1024)&lt;BR /&gt;+#define PHYS_SDRAM_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(2u * 1024 * 1024 * 1024)&lt;BR /&gt;&amp;nbsp;#elif defined(CONFIG_MX6DL)&lt;BR /&gt;&amp;nbsp;#define CONFIG_DEFAULT_FDT_FILE&amp;nbsp;&amp;nbsp; &amp;nbsp;"imx6dl-sabresd.dtb"&lt;BR /&gt;&amp;nbsp;#define PHYS_SDRAM_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(1u * 1024 * 1024 * 1024)&lt;BR /&gt;diff --git a/device/fsl/sabresd_6dq/BoardConfig.mk b/device/fsl/sabresd_6dq/BoardConfig.mk&lt;BR /&gt;index 8fd07e7..cd63be7 100755&lt;BR /&gt;--- a/device/fsl/sabresd_6dq/BoardConfig.mk&lt;BR /&gt;+++ b/device/fsl/sabresd_6dq/BoardConfig.mk&lt;BR /&gt;@@ -109,7 +109,7 @@ $(error "TARGET_USERIMAGES_USE_UBIFS and TARGET_USERIMAGES_USE_EXT4 config open&lt;BR /&gt;&amp;nbsp;endif&lt;BR /&gt;&amp;nbsp;endif&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;-BOARD_KERNEL_CMDLINE := console=ttymxc3,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off vmalloc=128M androidboot.console=ttymxc3 consoleblank=0 androidboot.hardware=freescale cma=448M androidboot.selinux=permissive androidboot.dm_verity=disabled loglevel=8 ldo_active=on&lt;BR /&gt;+BOARD_KERNEL_CMDLINE := consol=mxcuart,0x21f0000,115200n8 console=ttymxc3,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off vmalloc=128M androidboot.console=ttymxc3 consoleblank=0 androidboot.hardware=freescale cma=448M androidboot.selinux=permissive androidboot.dm_verity=disabled loglevel=8&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;ifeq ($(TARGET_USERIMAGES_USE_UBIFS),true)&lt;BR /&gt;&amp;nbsp;#UBI boot command line.&lt;BR /&gt;diff --git a/kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi&lt;BR /&gt;index 91d29a0..67a85e8 100755&lt;BR /&gt;--- a/kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi&lt;BR /&gt;+++ b/kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi&lt;BR /&gt;@@ -33,7 +33,7 @@&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;chosen {&lt;BR /&gt;-&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;stdout-path = &amp;amp;uart1;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;stdout-path = &amp;amp;uart4;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;leds {&lt;BR /&gt;@@ -47,7 +47,7 @@&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;memory: memory {&lt;BR /&gt;-&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;reg = &amp;lt;0x10000000 0x40000000&amp;gt;;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;reg = &amp;lt;0x10000000 0x80000000&amp;gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;regulators {&lt;BR /&gt;diff --git a/kernel_imx/arch/arm/mach-imx/mach-imx6q.c b/kernel_imx/arch/arm/mach-imx/mach-imx6q.c&lt;BR /&gt;index 92f8e84..4ad5e1b 100644&lt;BR /&gt;--- a/kernel_imx/arch/arm/mach-imx/mach-imx6q.c&lt;BR /&gt;+++ b/kernel_imx/arch/arm/mach-imx/mach-imx6q.c&lt;BR /&gt;@@ -196,6 +196,31 @@ static void __init imx6q_enet_phy_init(void)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;+extern int mxc_early_serial_console_init(unsigned long base, struct clk *clk);&lt;BR /&gt;+#define MX6Q_UART4_BASE 0x21f0000&lt;BR /&gt;+static void __init imx6q_early_serialcon_setup(void)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct device_node *np;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct clk *uart_clk;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-uart");&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (!np) {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pr_warn("%s: failed to find uart node\n", __func__);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;uart_clk = of_clk_get_by_name(np, "ipg");&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (IS_ERR(uart_clk)) {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pr_warn("%s: failed to get uart clock\n", __func__);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto put_node;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;mxc_early_serial_console_init(MX6Q_UART4_BASE, uart_clk);&lt;BR /&gt;+&lt;BR /&gt;+put_node:&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;of_node_put(np);&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;&amp;nbsp;static void __init imx6q_1588_init(void)&lt;BR /&gt;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct device_node *np;&lt;BR /&gt;@@ -353,6 +378,7 @@ static void __init imx6q_init_machine(void)&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;of_platform_populate(NULL, of_default_bus_match_table, NULL, parent);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;imx6q_early_serialcon_setup();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;imx6q_enet_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;imx_anatop_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;imx6q_csi_mux_init();&lt;BR /&gt;diff --git a/kernel_imx/drivers/tty/serial/Makefile b/kernel_imx/drivers/tty/serial/Makefile&lt;BR /&gt;index c3ac3d9..ed563d1 100644&lt;BR /&gt;--- a/kernel_imx/drivers/tty/serial/Makefile&lt;BR /&gt;+++ b/kernel_imx/drivers/tty/serial/Makefile&lt;BR /&gt;@@ -44,6 +44,7 @@ obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_SGI_L1_CONSOLE) += sn_console.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_CPM) += cpm_uart/&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_IMX) += imx.o&lt;BR /&gt;+obj-$(CONFIG_SERIAL_IMX_CONSOLE) += mxc_uart_early.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_MPC52xx) += mpc52xx_uart.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_ICOM) += icom.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_M32R_SIO) += m32r_sio.o&lt;BR /&gt;diff --git a/kernel_imx/drivers/tty/serial/mxc_uart_early.c b/kernel_imx/drivers/tty/serial/mxc_uart_early.c&lt;BR /&gt;new file mode 100644&lt;BR /&gt;index 0000000..77eb9e2&lt;BR /&gt;--- /dev/null&lt;BR /&gt;+++ b/kernel_imx/drivers/tty/serial/mxc_uart_early.c&lt;BR /&gt;@@ -0,0 +1,188 @@&lt;BR /&gt;+/*&lt;BR /&gt;+ * Copyright (C) 2011-2012 Freescale Semiconductor, Inc.&lt;BR /&gt;+ *&lt;BR /&gt;+ * This program is free software; you can redistribute it and/or modify&lt;BR /&gt;+ * it under the terms of the GNU General Public License as published by&lt;BR /&gt;+ * the Free Software Foundation; either version 2 of the License, or&lt;BR /&gt;+ * (at your option) any later version.&lt;BR /&gt;+&lt;BR /&gt;+ * This program is distributed in the hope that it will be useful,&lt;BR /&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;BR /&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&amp;nbsp; See the&lt;BR /&gt;+ * GNU General Public License for more details.&lt;BR /&gt;+&lt;BR /&gt;+ * You should have received a copy of the GNU General Public License along&lt;BR /&gt;+ * with this program; if not, write to the Free Software Foundation, Inc.,&lt;BR /&gt;+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * @file drivers/serial/mxc_uart_early.c&lt;BR /&gt;+ *&lt;BR /&gt;+ * @brief Driver for the Freescale Semiconductor MXC serial ports based on&lt;BR /&gt;+ * drivers/char/8250_early.c,&lt;BR /&gt;+ * Copyright 2004 Hewlett-Packard Development Company,&lt;BR /&gt;+ * L.P.by Bjorn Helgaasby.&lt;BR /&gt;+ *&lt;BR /&gt;+ * Early serial console for MXC UARTS.&lt;BR /&gt;+ *&lt;BR /&gt;+ * This is for use before the serial driver has initialized, in&lt;BR /&gt;+ * particular, before the UARTs have been discovered and named.&lt;BR /&gt;+ * Instead of specifying the console device as, e.g., "ttymxc0",&lt;BR /&gt;+ * we locate the device directly by its MMIO or I/O port address.&lt;BR /&gt;+ *&lt;BR /&gt;+ * The user can specify the device directly, e.g.,&lt;BR /&gt;+ *&amp;nbsp;&amp;nbsp; &amp;nbsp;console=mxcuart,0x43f90000,115200n8&lt;BR /&gt;+ * or platform code can call early_uart_console_init() to set&lt;BR /&gt;+ * the early UART device.&lt;BR /&gt;+ *&lt;BR /&gt;+ * After the normal serial driver starts, we try to locate the&lt;BR /&gt;+ * matching ttymxc device and start a console there.&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*&lt;BR /&gt;+ * Include Files&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+#include &amp;lt;linux/tty.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/init.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/io.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/console.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/serial_core.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/serial_reg.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/clk.h&amp;gt;&lt;BR /&gt;+&lt;BR /&gt;+#include "mxc_uart_early.h"&lt;BR /&gt;+&lt;BR /&gt;+struct mxc_early_uart_device {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port port;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;char options[16];&amp;nbsp;&amp;nbsp; &amp;nbsp;/* e.g., 115200n8 */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int baud;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct clk *clk;&lt;BR /&gt;+};&lt;BR /&gt;+static struct mxc_early_uart_device mxc_early_device __initdata;&lt;BR /&gt;+&lt;BR /&gt;+/*&lt;BR /&gt;+ * Write out a character once the UART is ready&lt;BR /&gt;+ */&lt;BR /&gt;+static void __init mxcuart_console_write_char(struct uart_port *port, int ch)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int status;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;do {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;status = readl(port-&amp;gt;membase + MXC_UARTUSR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;} while ((status &amp;amp; MXC_UARTUSR2_TXFE) == 0);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(ch, port-&amp;gt;membase + MXC_UARTUTXD);&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * This function is called to write the console messages through the UART port.&lt;BR /&gt;+ *&lt;BR /&gt;+ * @param&amp;nbsp;&amp;nbsp; co&amp;nbsp;&amp;nbsp;&amp;nbsp; the console structure&lt;BR /&gt;+ * @param&amp;nbsp;&amp;nbsp; s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the log message to be written to the UART&lt;BR /&gt;+ * @param&amp;nbsp;&amp;nbsp; count length of the message&lt;BR /&gt;+ */&lt;BR /&gt;+void __init early_mxcuart_console_write(struct console *co, const char *s,&lt;BR /&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;u_int count)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port *port = &amp;amp;mxc_early_device.port;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int status, oldcr1, oldcr2, oldcr3, cr2, cr3;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * First save the control registers and then disable the interrupts&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;oldcr1 = readl(port-&amp;gt;membase + MXC_UARTUCR1);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;oldcr2 = readl(port-&amp;gt;membase + MXC_UARTUCR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;oldcr3 = readl(port-&amp;gt;membase + MXC_UARTUCR3);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;cr2 =&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldcr2 &amp;amp; ~(MXC_UARTUCR2_ATEN | MXC_UARTUCR2_RTSEN |&lt;BR /&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; MXC_UARTUCR2_ESCI);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;cr3 =&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldcr3 &amp;amp; ~(MXC_UARTUCR3_DCD | MXC_UARTUCR3_RI |&lt;BR /&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; MXC_UARTUCR3_DTRDEN);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(MXC_UARTUCR1_UARTEN, port-&amp;gt;membase + MXC_UARTUCR1);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(cr2, port-&amp;gt;membase + MXC_UARTUCR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(cr3, port-&amp;gt;membase + MXC_UARTUCR3);&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Transmit string */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;uart_console_write(port, s, count, mxcuart_console_write_char);&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Finally, wait for the transmitter to become empty&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;do {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;status = readl(port-&amp;gt;membase + MXC_UARTUSR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;} while (!(status &amp;amp; MXC_UARTUSR2_TXDC));&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Restore the control registers&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(oldcr1, port-&amp;gt;membase + MXC_UARTUCR1);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(oldcr2, port-&amp;gt;membase + MXC_UARTUCR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(oldcr3, port-&amp;gt;membase + MXC_UARTUCR3);&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+static unsigned int __init probe_baud(struct uart_port *port)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/* FIXME Return Default Baud Rate */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;return 115200;&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+static int __init mxc_early_uart_setup(struct console *console, char *options)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct mxc_early_uart_device *device = &amp;amp;mxc_early_device;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port *port = &amp;amp;device-&amp;gt;port;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int length;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (device-&amp;gt;port.membase || device-&amp;gt;port.iobase)&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return -ENODEV;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;port-&amp;gt;uartclk = 5600000;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;port-&amp;gt;iotype = UPIO_MEM;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;port-&amp;gt;membase = ioremap(port-&amp;gt;mapbase, SZ_4K);&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (options) {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;device-&amp;gt;baud = simple_strtoul(options, NULL, 0);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;length = min(strlen(options), sizeof(device-&amp;gt;options));&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strncpy(device-&amp;gt;options, options, length);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;device-&amp;gt;baud = probe_baud(port);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;snprintf(device-&amp;gt;options, sizeof(device-&amp;gt;options), "%u",&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; device-&amp;gt;baud);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;printk(KERN_INFO&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "MXC_Early serial console at MMIO 0x%x (options '%s')\n",&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; port-&amp;gt;mapbase, device-&amp;gt;options);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+static struct console mxc_early_uart_console __initdata = {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.name = "ttymxc",&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.write = early_mxcuart_console_write,&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.setup = mxc_early_uart_setup,&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.flags = CON_PRINTBUFFER | CON_BOOT,&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.index = -1,&lt;BR /&gt;+};&lt;BR /&gt;+&lt;BR /&gt;+int __init mxc_early_serial_console_init(unsigned long base, struct clk *clk)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;mxc_early_device.clk = clk;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;mxc_early_device.port.mapbase = base;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;register_console(&amp;amp;mxc_early_uart_console);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+int __init mxc_early_uart_console_disable(void)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct mxc_early_uart_device *device = &amp;amp;mxc_early_device;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port *port = &amp;amp;device-&amp;gt;port;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (mxc_early_uart_console.index &amp;gt;= 0) {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;unregister_console(&amp;amp;mxc_early_uart_console);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;iounmap(port-&amp;gt;membase);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;clk_put(device-&amp;gt;clk);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;BR /&gt;+}&lt;BR /&gt;+late_initcall_sync(mxc_early_uart_console_disable);&lt;BR /&gt;diff --git a/kernel_imx/drivers/tty/serial/mxc_uart_early.h b/kernel_imx/drivers/tty/serial/mxc_uart_early.h&lt;BR /&gt;new file mode 100755&lt;BR /&gt;index 0000000..689aaad&lt;BR /&gt;--- /dev/null&lt;BR /&gt;+++ b/kernel_imx/drivers/tty/serial/mxc_uart_early.h&lt;BR /&gt;@@ -0,0 +1,267 @@&lt;BR /&gt;+/*&lt;BR /&gt;+ * Copyright 2004-2011 Freescale Semiconductor, Inc. All Rights Reserved.&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*&lt;BR /&gt;+ * The code contained herein is licensed under the GNU General Public&lt;BR /&gt;+ * License. You may obtain a copy of the GNU General Public License&lt;BR /&gt;+ * Version 2 or later at the following locations:&lt;BR /&gt;+ *&lt;BR /&gt;&lt;SPAN&gt;+ * &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.opensource.org%2Flicenses%2Fgpl-license.html" rel="nofollow" target="_blank"&gt;http://www.opensource.org/licenses/gpl-license.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;+ * &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.gnu.org%2Fcopyleft%2Fgpl.html" rel="nofollow" target="_blank"&gt;http://www.gnu.org/copyleft/gpl.html&lt;/A&gt;&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * @defgroup UART Universal Asynchronous Receiver Transmitter (UART) Driver&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * @file arch-mxc/mxc_uart.h&lt;BR /&gt;+ *&lt;BR /&gt;+ * @brief This file contains the UART configuration structure definition.&lt;BR /&gt;+ *&lt;BR /&gt;+ *&lt;BR /&gt;+ * @ingroup UART&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+#ifndef __ASM_ARCH_MXC_UART_H__&lt;BR /&gt;+#define __ASM_ARCH_MXC_UART_H__&lt;BR /&gt;+&lt;BR /&gt;+#ifdef __KERNEL__&lt;BR /&gt;+&lt;BR /&gt;+#include &amp;lt;linux/serial_core.h&amp;gt;&lt;BR /&gt;+&lt;BR /&gt;+/*&lt;BR /&gt;+ * The modes of the UART ports&lt;BR /&gt;+ */&lt;BR /&gt;+#define MODE_DTE&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&lt;BR /&gt;+#define MODE_DCE&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; 1&lt;BR /&gt;+/*&lt;BR /&gt;+ * Is the UART configured to be a IR port&lt;BR /&gt;+ */&lt;BR /&gt;+#define IRDA&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&lt;BR /&gt;+#define NO_IRDA&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; 1&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * This structure is used to store the the physical and virtual&lt;BR /&gt;+ * addresses of the UART DMA receive buffer.&lt;BR /&gt;+ */&lt;BR /&gt;+typedef struct {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Receive buffer virtual address&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;char *rx_buf;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Receive buffer physical address&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;dma_addr_t rx_handle;&lt;BR /&gt;+} mxc_uart_rxdmamap;&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * This structure is a way for the low level driver to define their own&lt;BR /&gt;+ * \b uart_port structure. This structure includes the core \b uart_port&lt;BR /&gt;+ * structure that is provided by Linux as an element and has other&lt;BR /&gt;+ * elements that are specifically required by this low-level driver.&lt;BR /&gt;+ */&lt;BR /&gt;+typedef struct {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * The port structure holds all the information about the UART&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * port like base address, and so on.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port port;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to determine if the interrupts are muxed.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int ints_muxed;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Array that holds the receive and master interrupt numbers&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * when the interrupts are not muxed.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int irqs[2];&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to determine the DTE/DCE mode.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int mode;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to hold the IR mode of the port.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int ir_mode;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to enable/disable the UART port.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int enabled;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to indicate if we wish to use hardware-driven hardware&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * flow control.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int hardware_flow;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Holds the threshold value at which the CTS line is deasserted in&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * case we use hardware-driven hardware flow control.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int cts_threshold;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to enable/disable DMA data transfer.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int dma_enabled;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Holds the DMA receive buffer size.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int dma_rxbuf_size;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Receive buffers information&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;mxc_uart_rxdmamap *rx_dmamap;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA RX buffer id&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int dma_rxbuf_id;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Transmit buffer virtual address&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;char *tx_buf;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Transmit buffer physical address&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;dma_addr_t tx_handle;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Holds the RxFIFO threshold value.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int rx_threshold;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Holds the TxFIFO threshold value.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int tx_threshold;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Information whether this is a shared UART&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int shared;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Clock id for UART clock&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct clk *clk;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Information whether RXDMUXSEL must be set or not for IR port&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int rxd_mux;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int ir_tx_inv;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int ir_rx_inv;&lt;BR /&gt;+} uart_mxc_port;&lt;BR /&gt;+&lt;BR /&gt;+/* Address offsets of the UART registers */&lt;BR /&gt;+#define MXC_UARTURXD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x000&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Receive reg */&lt;BR /&gt;+#define MXC_UARTUTXD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x040&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Transmitter reg */&lt;BR /&gt;+#define&amp;nbsp;&amp;nbsp; &amp;nbsp;MXC_UARTUCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x080&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Control reg 1 */&lt;BR /&gt;+#define MXC_UARTUCR2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x084&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Control reg 2 */&lt;BR /&gt;+#define MXC_UARTUCR3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x088&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Control reg 3 */&lt;BR /&gt;+#define MXC_UARTUCR4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x08C&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Control reg 4 */&lt;BR /&gt;+#define MXC_UARTUFCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x090&amp;nbsp;&amp;nbsp; &amp;nbsp;/* FIFO control reg */&lt;BR /&gt;+#define MXC_UARTUSR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x094&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Status reg 1 */&lt;BR /&gt;+#define MXC_UARTUSR2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x098&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Status reg 2 */&lt;BR /&gt;+#define MXC_UARTUESC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x09C&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Escape character reg */&lt;BR /&gt;+#define MXC_UARTUTIM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0A0&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Escape timer reg */&lt;BR /&gt;+#define MXC_UARTUBIR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0A4&amp;nbsp;&amp;nbsp; &amp;nbsp;/* BRM incremental reg */&lt;BR /&gt;+#define MXC_UARTUBMR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0A8&amp;nbsp;&amp;nbsp; &amp;nbsp;/* BRM modulator reg */&lt;BR /&gt;+#define MXC_UARTUBRC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0AC&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Baud rate count reg */&lt;BR /&gt;+#define MXC_UARTONEMS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0B0&amp;nbsp;&amp;nbsp; &amp;nbsp;/* One millisecond reg */&lt;BR /&gt;+#define MXC_UARTUTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0B4&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Test reg */&lt;BR /&gt;+#define MXC_UARTUMCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0B8&amp;nbsp;&amp;nbsp; &amp;nbsp;/* RS485 Mode control */&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UCR1 */&lt;BR /&gt;+#define MXC_UARTUCR1_ADEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x8000&lt;BR /&gt;+#define MXC_UARTUCR1_ADBR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTUCR1_TRDYEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTUCR1_IDEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUCR1_RRDYEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0200&lt;BR /&gt;+#define MXC_UARTUCR1_RXDMAEN&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0100&lt;BR /&gt;+#define MXC_UARTUCR1_IREN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0080&lt;BR /&gt;+#define MXC_UARTUCR1_TXMPTYEN&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+#define MXC_UARTUCR1_RTSDEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0020&lt;BR /&gt;+#define MXC_UARTUCR1_SNDBRK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0010&lt;BR /&gt;+#define MXC_UARTUCR1_TXDMAEN&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0008&lt;BR /&gt;+#define MXC_UARTUCR1_ATDMAEN&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0004&lt;BR /&gt;+#define MXC_UARTUCR1_DOZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0002&lt;BR /&gt;+#define MXC_UARTUCR1_UARTEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0001&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UCR2 */&lt;BR /&gt;+#define MXC_UARTUCR2_ESCI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x8000&lt;BR /&gt;+#define MXC_UARTUCR2_IRTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTUCR2_CTSC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTUCR2_CTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUCR2_PREN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0100&lt;BR /&gt;+#define MXC_UARTUCR2_PROE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0080&lt;BR /&gt;+#define MXC_UARTUCR2_STPB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+#define MXC_UARTUCR2_WS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0020&lt;BR /&gt;+#define MXC_UARTUCR2_RTSEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0010&lt;BR /&gt;+#define MXC_UARTUCR2_ATEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0008&lt;BR /&gt;+#define MXC_UARTUCR2_TXEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0004&lt;BR /&gt;+#define MXC_UARTUCR2_RXEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0002&lt;BR /&gt;+#define MXC_UARTUCR2_SRST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0001&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UCR3 */&lt;BR /&gt;+#define MXC_UARTUCR3_DTREN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTUCR3_PARERREN&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUCR3_FRAERREN&amp;nbsp;&amp;nbsp; 0x0800&lt;BR /&gt;+#define MXC_UARTUCR3_DSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0400&lt;BR /&gt;+#define MXC_UARTUCR3_DCD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0200&lt;BR /&gt;+#define MXC_UARTUCR3_RI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0100&lt;BR /&gt;+#define MXC_UARTUCR3_RXDSEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+#define MXC_UARTUCR3_AWAKEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0010&lt;BR /&gt;+#define MXC_UARTUCR3_DTRDEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0008&lt;BR /&gt;+#define MXC_UARTUCR3_RXDMUXSEL&amp;nbsp; 0x0004&lt;BR /&gt;+#define MXC_UARTUCR3_INVT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0002&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UCR4 */&lt;BR /&gt;+#define MXC_UARTUCR4_CTSTL_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&lt;BR /&gt;+#define MXC_UARTUCR4_CTSTL_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x3F &amp;lt;&amp;lt; 10)&lt;BR /&gt;+#define MXC_UARTUCR4_INVR&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; 0x0200&lt;BR /&gt;+#define MXC_UARTUCR4_ENIRI&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; 0x0100&lt;BR /&gt;+#define MXC_UARTUCR4_REF16&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; 0x0040&lt;BR /&gt;+#define MXC_UARTUCR4_IRSC&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; 0x0020&lt;BR /&gt;+#define MXC_UARTUCR4_TCEN&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; 0x0008&lt;BR /&gt;+#define MXC_UARTUCR4_OREN&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; 0x0002&lt;BR /&gt;+#define MXC_UARTUCR4_DREN&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; 0x0001&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UFCR */&lt;BR /&gt;+#define MXC_UARTUFCR_RFDIV&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; 0x0200&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Ref freq div is set to 2 */&lt;BR /&gt;+#define MXC_UARTUFCR_RFDIV_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;BR /&gt;+#define MXC_UARTUFCR_RFDIV_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x7 &amp;lt;&amp;lt; 7)&lt;BR /&gt;+#define MXC_UARTUFCR_TXTL_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&lt;BR /&gt;+#define MXC_UARTUFCR_DCEDTE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of URXD */&lt;BR /&gt;+#define MXC_UARTURXD_ERR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTURXD_OVRRUN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTURXD_FRMERR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTURXD_BRK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0800&lt;BR /&gt;+#define MXC_UARTURXD_PRERR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0400&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of USR1 */&lt;BR /&gt;+#define MXC_UARTUSR1_PARITYERR&amp;nbsp; 0x8000&lt;BR /&gt;+#define MXC_UARTUSR1_RTSS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTUSR1_TRDY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTUSR1_RTSD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUSR1_FRAMERR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0400&lt;BR /&gt;+#define MXC_UARTUSR1_RRDY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0200&lt;BR /&gt;+#define MXC_UARTUSR1_AGTIM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0100&lt;BR /&gt;+#define MXC_UARTUSR1_DTRD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0080&lt;BR /&gt;+#define MXC_UARTUSR1_AWAKE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0010&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of USR2 */&lt;BR /&gt;+#define MXC_UARTUSR2_TXFE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTUSR2_IDLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUSR2_RIDELT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0400&lt;BR /&gt;+#define MXC_UARTUSR2_RIIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0200&lt;BR /&gt;+#define MXC_UARTUSR2_DCDDELT&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+#define MXC_UARTUSR2_DCDIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0020&lt;BR /&gt;+#define MXC_UARTUSR2_TXDC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0008&lt;BR /&gt;+#define MXC_UARTUSR2_ORE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0002&lt;BR /&gt;+#define MXC_UARTUSR2_RDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0001&lt;BR /&gt;+#define MXC_UARTUSR2_BRCD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0004&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UTS */&lt;BR /&gt;+#define MXC_UARTUTS_LOOP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+&lt;BR /&gt;+#endif&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* __KERNEL__ */&lt;BR /&gt;+&lt;BR /&gt;+#endif&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* __ASM_ARCH_MXC_UART_H__ */&lt;BR /&gt;-- &lt;BR /&gt;2.7.4&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 11 Jan 2018 07:15:14 GMT</pubDate>
    <dc:creator>jiujinhong</dc:creator>
    <dc:date>2018-01-11T07:15:14Z</dc:date>
    <item>
      <title>Starting kernel ... using 4 seconds to start unpress kernel</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Starting-kernel-using-4-seconds-to-start-unpress-kernel/m-p/756666#M117699</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The issue is that 4.1.15 BSP starting kernel ... using 4 seconds to start to Uncompressing Linux. After enable EARLY_PRINTK, it will hang in below case.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;20180102_14:49:26]&lt;BR /&gt;20180102_14:49:26]Starting kernel ...&lt;BR /&gt;20180102_14:49:26]&lt;BR /&gt;20180102_14:49:26]Uncompressing Linux... done, booting the kernel.&lt;BR /&gt;20180102_14:49:26]Booting Linux on physical CPU 0x0&lt;BR /&gt;20180102_14:49:26]Initializing cgroup subsys cpu&lt;BR /&gt;20180102_14:49:26]Initializing cgroup subsys cpuacct&lt;BR /&gt;20180102_14:49:26]Linux version 4.1.15 (jiujin@jiujin-linux) (gcc version 4.9 20150123 (prerelease) (GCC) ) #114 SMP PREEMPT Tue Jan 2 14:13:17 CST 2018&lt;BR /&gt;20180102_14:49:26]CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d&lt;BR /&gt;20180102_14:49:26]CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache&lt;BR /&gt;20180102_14:49:26]Machine model: Freescale i.MX6 Quad SABRE Smart Device Board&lt;BR /&gt;20180102_14:49:26][&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000] Booting Linux on physical CPU 0x0&lt;BR /&gt;20180102_14:49:26][&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000] Initializing cgroup subsys cpu&lt;BR /&gt;20180102_14:49:26][&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000] Initializing cgroup subsys cpuacct&lt;BR /&gt;20180102_14:49:26][&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000] Linux version 4.1.15 (jiujin@jiujin-linux) (gcc version 4.9 20150123 (prerelease) (GCC) ) #114 SMP PREEMPT Tue Jan 2 14:13:17 CST 2018&lt;BR /&gt;20180102_14:49:26][&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000] CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d&lt;BR /&gt;20180102_14:49:27][&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000] CPU: PIPT / VIPT no&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;---&amp;gt; enable EARLY_PRINTK support, hangs here.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Jan 2018 10:11:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Starting-kernel-using-4-seconds-to-start-unpress-kernel/m-p/756666#M117699</guid>
      <dc:creator>jiujinhong</dc:creator>
      <dc:date>2018-01-02T10:11:12Z</dc:date>
    </item>
    <item>
      <title>Re: Starting kernel ... using 4 seconds to start unpress kernel</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Starting-kernel-using-4-seconds-to-start-unpress-kernel/m-p/756667#M117700</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi jiu&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;what bsp used in the case, please try with demo image&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://www.nxp.com/webapp/Download?colCode=L4.1.15_2.0.0_MX6QDLSOLO&amp;amp;appType=license&amp;amp;location=null" title="https://www.nxp.com/webapp/Download?colCode=L4.1.15_2.0.0_MX6QDLSOLO&amp;amp;appType=license&amp;amp;location=null"&gt;https://www.nxp.com/webapp/Download?colCode=L4.1.15_2.0.0_MX6QDLSOLO&amp;amp;appType=license&amp;amp;location=null&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;for debugging one van try AN4553 Using Open Source Debugging Tools for Linux on i.MX Processors&lt;BR /&gt;&lt;A href="https://www.nxp.com/docs/en/application-note/AN4553.pdf"&gt;https://www.nxp.com/docs/en/application-note/AN4553.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Jan 2018 07:14:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Starting-kernel-using-4-seconds-to-start-unpress-kernel/m-p/756667#M117700</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2018-01-03T07:14:58Z</dc:date>
    </item>
    <item>
      <title>Re: Starting kernel ... using 4 seconds to start unpress kernel</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Starting-kernel-using-4-seconds-to-start-unpress-kernel/m-p/756668#M117701</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;From 2e2f1168059373faf020fb882f3c4d65a5f40c45 Mon Sep 17 00:00:00 2001&lt;BR /&gt;&lt;SPAN&gt;From: hongjiujin &amp;lt;&lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:hongjiujin@xxx.com"&gt;hongjiujin@xxx.com&lt;/A&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;Date: Thu, 11 Jan 2018 14:04:23 +0800&lt;BR /&gt;Subject: [PATCH] linux kernel: support early console and fix mistakes in&lt;BR /&gt;&amp;nbsp;includes/dts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Register early console so that kernel can quickly startup.&lt;BR /&gt;It can speedup almost 2~3 seconds between "Starting kernel..." and "Uncompressing".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Signed-off-by: hongjiujin &amp;lt;&lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:hongjiujin@xxx.com"&gt;hongjiujin@xxx.com&lt;/A&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;---&lt;BR /&gt;&amp;nbsp;.../uboot-imx/include/configs/mx6sabre_common.h&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp; 2 +-&lt;BR /&gt;&amp;nbsp;.../uboot-imx/include/configs/mx6sabresd.h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp; 2 +-&lt;BR /&gt;&amp;nbsp;device/fsl/sabresd_6dq/BoardConfig.mk&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; 2 +-&lt;BR /&gt;&amp;nbsp;kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi&amp;nbsp; |&amp;nbsp;&amp;nbsp; 4 +-&lt;BR /&gt;&amp;nbsp;kernel_imx/arch/arm/mach-imx/mach-imx6q.c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 26 ++&lt;BR /&gt;&amp;nbsp;kernel_imx/drivers/tty/serial/Makefile&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; 1 +&lt;BR /&gt;&amp;nbsp;kernel_imx/drivers/tty/serial/mxc_uart_early.c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 188 +++++++++++++++&lt;BR /&gt;&amp;nbsp;kernel_imx/drivers/tty/serial/mxc_uart_early.h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 267 +++++++++++++++++++++&lt;BR /&gt;&amp;nbsp;8 files changed, 487 insertions(+), 5 deletions(-)&lt;BR /&gt;&amp;nbsp;create mode 100644 kernel_imx/drivers/tty/serial/mxc_uart_early.c&lt;BR /&gt;&amp;nbsp;create mode 100755 kernel_imx/drivers/tty/serial/mxc_uart_early.h&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;diff --git a/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h b/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h&lt;BR /&gt;index bf30c62..bd062e3 100644&lt;BR /&gt;--- a/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h&lt;BR /&gt;+++ b/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h&lt;BR /&gt;@@ -90,7 +90,7 @@&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;/* allow to overwrite serial and ethaddr */&lt;BR /&gt;&amp;nbsp;#define CONFIG_ENV_OVERWRITE&lt;BR /&gt;-#define CONFIG_CONS_INDEX&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; 1&lt;BR /&gt;+#define CONFIG_CONS_INDEX&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; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* UART4 */&lt;BR /&gt;&amp;nbsp;#define CONFIG_BAUDRATE&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; 115200&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;/* Command definition */&lt;BR /&gt;diff --git a/bootable/bootloader/uboot-imx/include/configs/mx6sabresd.h b/bootable/bootloader/uboot-imx/include/configs/mx6sabresd.h&lt;BR /&gt;index 14f1ce3..cd84c29 100755&lt;BR /&gt;--- a/bootable/bootloader/uboot-imx/include/configs/mx6sabresd.h&lt;BR /&gt;+++ b/bootable/bootloader/uboot-imx/include/configs/mx6sabresd.h&lt;BR /&gt;@@ -27,7 +27,7 @@&lt;BR /&gt;&amp;nbsp;#define PHYS_SDRAM_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(1u * 1024 * 1024 * 1024)&lt;BR /&gt;&amp;nbsp;#elif defined(CONFIG_MX6Q)&lt;BR /&gt;&amp;nbsp;#define CONFIG_DEFAULT_FDT_FILE&amp;nbsp;&amp;nbsp; &amp;nbsp;"imx6q-sabresd.dtb"&lt;BR /&gt;-#define PHYS_SDRAM_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(1u * 1024 * 1024 * 1024)&lt;BR /&gt;+#define PHYS_SDRAM_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(2u * 1024 * 1024 * 1024)&lt;BR /&gt;&amp;nbsp;#elif defined(CONFIG_MX6DL)&lt;BR /&gt;&amp;nbsp;#define CONFIG_DEFAULT_FDT_FILE&amp;nbsp;&amp;nbsp; &amp;nbsp;"imx6dl-sabresd.dtb"&lt;BR /&gt;&amp;nbsp;#define PHYS_SDRAM_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(1u * 1024 * 1024 * 1024)&lt;BR /&gt;diff --git a/device/fsl/sabresd_6dq/BoardConfig.mk b/device/fsl/sabresd_6dq/BoardConfig.mk&lt;BR /&gt;index 8fd07e7..cd63be7 100755&lt;BR /&gt;--- a/device/fsl/sabresd_6dq/BoardConfig.mk&lt;BR /&gt;+++ b/device/fsl/sabresd_6dq/BoardConfig.mk&lt;BR /&gt;@@ -109,7 +109,7 @@ $(error "TARGET_USERIMAGES_USE_UBIFS and TARGET_USERIMAGES_USE_EXT4 config open&lt;BR /&gt;&amp;nbsp;endif&lt;BR /&gt;&amp;nbsp;endif&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;-BOARD_KERNEL_CMDLINE := console=ttymxc3,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off vmalloc=128M androidboot.console=ttymxc3 consoleblank=0 androidboot.hardware=freescale cma=448M androidboot.selinux=permissive androidboot.dm_verity=disabled loglevel=8 ldo_active=on&lt;BR /&gt;+BOARD_KERNEL_CMDLINE := consol=mxcuart,0x21f0000,115200n8 console=ttymxc3,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off vmalloc=128M androidboot.console=ttymxc3 consoleblank=0 androidboot.hardware=freescale cma=448M androidboot.selinux=permissive androidboot.dm_verity=disabled loglevel=8&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;ifeq ($(TARGET_USERIMAGES_USE_UBIFS),true)&lt;BR /&gt;&amp;nbsp;#UBI boot command line.&lt;BR /&gt;diff --git a/kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi&lt;BR /&gt;index 91d29a0..67a85e8 100755&lt;BR /&gt;--- a/kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi&lt;BR /&gt;+++ b/kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi&lt;BR /&gt;@@ -33,7 +33,7 @@&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;chosen {&lt;BR /&gt;-&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;stdout-path = &amp;amp;uart1;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;stdout-path = &amp;amp;uart4;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;leds {&lt;BR /&gt;@@ -47,7 +47,7 @@&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;memory: memory {&lt;BR /&gt;-&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;reg = &amp;lt;0x10000000 0x40000000&amp;gt;;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;reg = &amp;lt;0x10000000 0x80000000&amp;gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;regulators {&lt;BR /&gt;diff --git a/kernel_imx/arch/arm/mach-imx/mach-imx6q.c b/kernel_imx/arch/arm/mach-imx/mach-imx6q.c&lt;BR /&gt;index 92f8e84..4ad5e1b 100644&lt;BR /&gt;--- a/kernel_imx/arch/arm/mach-imx/mach-imx6q.c&lt;BR /&gt;+++ b/kernel_imx/arch/arm/mach-imx/mach-imx6q.c&lt;BR /&gt;@@ -196,6 +196,31 @@ static void __init imx6q_enet_phy_init(void)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;+extern int mxc_early_serial_console_init(unsigned long base, struct clk *clk);&lt;BR /&gt;+#define MX6Q_UART4_BASE 0x21f0000&lt;BR /&gt;+static void __init imx6q_early_serialcon_setup(void)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct device_node *np;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct clk *uart_clk;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-uart");&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (!np) {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pr_warn("%s: failed to find uart node\n", __func__);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;uart_clk = of_clk_get_by_name(np, "ipg");&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (IS_ERR(uart_clk)) {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pr_warn("%s: failed to get uart clock\n", __func__);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto put_node;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;mxc_early_serial_console_init(MX6Q_UART4_BASE, uart_clk);&lt;BR /&gt;+&lt;BR /&gt;+put_node:&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;of_node_put(np);&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;&amp;nbsp;static void __init imx6q_1588_init(void)&lt;BR /&gt;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct device_node *np;&lt;BR /&gt;@@ -353,6 +378,7 @@ static void __init imx6q_init_machine(void)&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;of_platform_populate(NULL, of_default_bus_match_table, NULL, parent);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;imx6q_early_serialcon_setup();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;imx6q_enet_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;imx_anatop_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;imx6q_csi_mux_init();&lt;BR /&gt;diff --git a/kernel_imx/drivers/tty/serial/Makefile b/kernel_imx/drivers/tty/serial/Makefile&lt;BR /&gt;index c3ac3d9..ed563d1 100644&lt;BR /&gt;--- a/kernel_imx/drivers/tty/serial/Makefile&lt;BR /&gt;+++ b/kernel_imx/drivers/tty/serial/Makefile&lt;BR /&gt;@@ -44,6 +44,7 @@ obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_SGI_L1_CONSOLE) += sn_console.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_CPM) += cpm_uart/&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_IMX) += imx.o&lt;BR /&gt;+obj-$(CONFIG_SERIAL_IMX_CONSOLE) += mxc_uart_early.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_MPC52xx) += mpc52xx_uart.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_ICOM) += icom.o&lt;BR /&gt;&amp;nbsp;obj-$(CONFIG_SERIAL_M32R_SIO) += m32r_sio.o&lt;BR /&gt;diff --git a/kernel_imx/drivers/tty/serial/mxc_uart_early.c b/kernel_imx/drivers/tty/serial/mxc_uart_early.c&lt;BR /&gt;new file mode 100644&lt;BR /&gt;index 0000000..77eb9e2&lt;BR /&gt;--- /dev/null&lt;BR /&gt;+++ b/kernel_imx/drivers/tty/serial/mxc_uart_early.c&lt;BR /&gt;@@ -0,0 +1,188 @@&lt;BR /&gt;+/*&lt;BR /&gt;+ * Copyright (C) 2011-2012 Freescale Semiconductor, Inc.&lt;BR /&gt;+ *&lt;BR /&gt;+ * This program is free software; you can redistribute it and/or modify&lt;BR /&gt;+ * it under the terms of the GNU General Public License as published by&lt;BR /&gt;+ * the Free Software Foundation; either version 2 of the License, or&lt;BR /&gt;+ * (at your option) any later version.&lt;BR /&gt;+&lt;BR /&gt;+ * This program is distributed in the hope that it will be useful,&lt;BR /&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;BR /&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&amp;nbsp; See the&lt;BR /&gt;+ * GNU General Public License for more details.&lt;BR /&gt;+&lt;BR /&gt;+ * You should have received a copy of the GNU General Public License along&lt;BR /&gt;+ * with this program; if not, write to the Free Software Foundation, Inc.,&lt;BR /&gt;+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * @file drivers/serial/mxc_uart_early.c&lt;BR /&gt;+ *&lt;BR /&gt;+ * @brief Driver for the Freescale Semiconductor MXC serial ports based on&lt;BR /&gt;+ * drivers/char/8250_early.c,&lt;BR /&gt;+ * Copyright 2004 Hewlett-Packard Development Company,&lt;BR /&gt;+ * L.P.by Bjorn Helgaasby.&lt;BR /&gt;+ *&lt;BR /&gt;+ * Early serial console for MXC UARTS.&lt;BR /&gt;+ *&lt;BR /&gt;+ * This is for use before the serial driver has initialized, in&lt;BR /&gt;+ * particular, before the UARTs have been discovered and named.&lt;BR /&gt;+ * Instead of specifying the console device as, e.g., "ttymxc0",&lt;BR /&gt;+ * we locate the device directly by its MMIO or I/O port address.&lt;BR /&gt;+ *&lt;BR /&gt;+ * The user can specify the device directly, e.g.,&lt;BR /&gt;+ *&amp;nbsp;&amp;nbsp; &amp;nbsp;console=mxcuart,0x43f90000,115200n8&lt;BR /&gt;+ * or platform code can call early_uart_console_init() to set&lt;BR /&gt;+ * the early UART device.&lt;BR /&gt;+ *&lt;BR /&gt;+ * After the normal serial driver starts, we try to locate the&lt;BR /&gt;+ * matching ttymxc device and start a console there.&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*&lt;BR /&gt;+ * Include Files&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+#include &amp;lt;linux/tty.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/init.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/io.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/console.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/serial_core.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/serial_reg.h&amp;gt;&lt;BR /&gt;+#include &amp;lt;linux/clk.h&amp;gt;&lt;BR /&gt;+&lt;BR /&gt;+#include "mxc_uart_early.h"&lt;BR /&gt;+&lt;BR /&gt;+struct mxc_early_uart_device {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port port;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;char options[16];&amp;nbsp;&amp;nbsp; &amp;nbsp;/* e.g., 115200n8 */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int baud;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct clk *clk;&lt;BR /&gt;+};&lt;BR /&gt;+static struct mxc_early_uart_device mxc_early_device __initdata;&lt;BR /&gt;+&lt;BR /&gt;+/*&lt;BR /&gt;+ * Write out a character once the UART is ready&lt;BR /&gt;+ */&lt;BR /&gt;+static void __init mxcuart_console_write_char(struct uart_port *port, int ch)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int status;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;do {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;status = readl(port-&amp;gt;membase + MXC_UARTUSR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;} while ((status &amp;amp; MXC_UARTUSR2_TXFE) == 0);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(ch, port-&amp;gt;membase + MXC_UARTUTXD);&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * This function is called to write the console messages through the UART port.&lt;BR /&gt;+ *&lt;BR /&gt;+ * @param&amp;nbsp;&amp;nbsp; co&amp;nbsp;&amp;nbsp;&amp;nbsp; the console structure&lt;BR /&gt;+ * @param&amp;nbsp;&amp;nbsp; s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the log message to be written to the UART&lt;BR /&gt;+ * @param&amp;nbsp;&amp;nbsp; count length of the message&lt;BR /&gt;+ */&lt;BR /&gt;+void __init early_mxcuart_console_write(struct console *co, const char *s,&lt;BR /&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;u_int count)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port *port = &amp;amp;mxc_early_device.port;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int status, oldcr1, oldcr2, oldcr3, cr2, cr3;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * First save the control registers and then disable the interrupts&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;oldcr1 = readl(port-&amp;gt;membase + MXC_UARTUCR1);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;oldcr2 = readl(port-&amp;gt;membase + MXC_UARTUCR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;oldcr3 = readl(port-&amp;gt;membase + MXC_UARTUCR3);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;cr2 =&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldcr2 &amp;amp; ~(MXC_UARTUCR2_ATEN | MXC_UARTUCR2_RTSEN |&lt;BR /&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; MXC_UARTUCR2_ESCI);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;cr3 =&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldcr3 &amp;amp; ~(MXC_UARTUCR3_DCD | MXC_UARTUCR3_RI |&lt;BR /&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; MXC_UARTUCR3_DTRDEN);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(MXC_UARTUCR1_UARTEN, port-&amp;gt;membase + MXC_UARTUCR1);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(cr2, port-&amp;gt;membase + MXC_UARTUCR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(cr3, port-&amp;gt;membase + MXC_UARTUCR3);&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Transmit string */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;uart_console_write(port, s, count, mxcuart_console_write_char);&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Finally, wait for the transmitter to become empty&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;do {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;status = readl(port-&amp;gt;membase + MXC_UARTUSR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;} while (!(status &amp;amp; MXC_UARTUSR2_TXDC));&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Restore the control registers&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(oldcr1, port-&amp;gt;membase + MXC_UARTUCR1);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(oldcr2, port-&amp;gt;membase + MXC_UARTUCR2);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;writel(oldcr3, port-&amp;gt;membase + MXC_UARTUCR3);&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+static unsigned int __init probe_baud(struct uart_port *port)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/* FIXME Return Default Baud Rate */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;return 115200;&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+static int __init mxc_early_uart_setup(struct console *console, char *options)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct mxc_early_uart_device *device = &amp;amp;mxc_early_device;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port *port = &amp;amp;device-&amp;gt;port;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int length;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (device-&amp;gt;port.membase || device-&amp;gt;port.iobase)&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return -ENODEV;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;port-&amp;gt;uartclk = 5600000;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;port-&amp;gt;iotype = UPIO_MEM;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;port-&amp;gt;membase = ioremap(port-&amp;gt;mapbase, SZ_4K);&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (options) {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;device-&amp;gt;baud = simple_strtoul(options, NULL, 0);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;length = min(strlen(options), sizeof(device-&amp;gt;options));&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strncpy(device-&amp;gt;options, options, length);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;device-&amp;gt;baud = probe_baud(port);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;snprintf(device-&amp;gt;options, sizeof(device-&amp;gt;options), "%u",&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; device-&amp;gt;baud);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;printk(KERN_INFO&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "MXC_Early serial console at MMIO 0x%x (options '%s')\n",&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; port-&amp;gt;mapbase, device-&amp;gt;options);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+static struct console mxc_early_uart_console __initdata = {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.name = "ttymxc",&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.write = early_mxcuart_console_write,&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.setup = mxc_early_uart_setup,&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.flags = CON_PRINTBUFFER | CON_BOOT,&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;.index = -1,&lt;BR /&gt;+};&lt;BR /&gt;+&lt;BR /&gt;+int __init mxc_early_serial_console_init(unsigned long base, struct clk *clk)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;mxc_early_device.clk = clk;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;mxc_early_device.port.mapbase = base;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;register_console(&amp;amp;mxc_early_uart_console);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;BR /&gt;+}&lt;BR /&gt;+&lt;BR /&gt;+int __init mxc_early_uart_console_disable(void)&lt;BR /&gt;+{&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct mxc_early_uart_device *device = &amp;amp;mxc_early_device;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port *port = &amp;amp;device-&amp;gt;port;&lt;BR /&gt;+&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;if (mxc_early_uart_console.index &amp;gt;= 0) {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;unregister_console(&amp;amp;mxc_early_uart_console);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;iounmap(port-&amp;gt;membase);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;clk_put(device-&amp;gt;clk);&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;BR /&gt;+}&lt;BR /&gt;+late_initcall_sync(mxc_early_uart_console_disable);&lt;BR /&gt;diff --git a/kernel_imx/drivers/tty/serial/mxc_uart_early.h b/kernel_imx/drivers/tty/serial/mxc_uart_early.h&lt;BR /&gt;new file mode 100755&lt;BR /&gt;index 0000000..689aaad&lt;BR /&gt;--- /dev/null&lt;BR /&gt;+++ b/kernel_imx/drivers/tty/serial/mxc_uart_early.h&lt;BR /&gt;@@ -0,0 +1,267 @@&lt;BR /&gt;+/*&lt;BR /&gt;+ * Copyright 2004-2011 Freescale Semiconductor, Inc. All Rights Reserved.&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*&lt;BR /&gt;+ * The code contained herein is licensed under the GNU General Public&lt;BR /&gt;+ * License. You may obtain a copy of the GNU General Public License&lt;BR /&gt;+ * Version 2 or later at the following locations:&lt;BR /&gt;+ *&lt;BR /&gt;&lt;SPAN&gt;+ * &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.opensource.org%2Flicenses%2Fgpl-license.html" rel="nofollow" target="_blank"&gt;http://www.opensource.org/licenses/gpl-license.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;+ * &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.gnu.org%2Fcopyleft%2Fgpl.html" rel="nofollow" target="_blank"&gt;http://www.gnu.org/copyleft/gpl.html&lt;/A&gt;&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * @defgroup UART Universal Asynchronous Receiver Transmitter (UART) Driver&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * @file arch-mxc/mxc_uart.h&lt;BR /&gt;+ *&lt;BR /&gt;+ * @brief This file contains the UART configuration structure definition.&lt;BR /&gt;+ *&lt;BR /&gt;+ *&lt;BR /&gt;+ * @ingroup UART&lt;BR /&gt;+ */&lt;BR /&gt;+&lt;BR /&gt;+#ifndef __ASM_ARCH_MXC_UART_H__&lt;BR /&gt;+#define __ASM_ARCH_MXC_UART_H__&lt;BR /&gt;+&lt;BR /&gt;+#ifdef __KERNEL__&lt;BR /&gt;+&lt;BR /&gt;+#include &amp;lt;linux/serial_core.h&amp;gt;&lt;BR /&gt;+&lt;BR /&gt;+/*&lt;BR /&gt;+ * The modes of the UART ports&lt;BR /&gt;+ */&lt;BR /&gt;+#define MODE_DTE&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&lt;BR /&gt;+#define MODE_DCE&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; 1&lt;BR /&gt;+/*&lt;BR /&gt;+ * Is the UART configured to be a IR port&lt;BR /&gt;+ */&lt;BR /&gt;+#define IRDA&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&lt;BR /&gt;+#define NO_IRDA&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; 1&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * This structure is used to store the the physical and virtual&lt;BR /&gt;+ * addresses of the UART DMA receive buffer.&lt;BR /&gt;+ */&lt;BR /&gt;+typedef struct {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Receive buffer virtual address&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;char *rx_buf;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Receive buffer physical address&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;dma_addr_t rx_handle;&lt;BR /&gt;+} mxc_uart_rxdmamap;&lt;BR /&gt;+&lt;BR /&gt;+/*!&lt;BR /&gt;+ * This structure is a way for the low level driver to define their own&lt;BR /&gt;+ * \b uart_port structure. This structure includes the core \b uart_port&lt;BR /&gt;+ * structure that is provided by Linux as an element and has other&lt;BR /&gt;+ * elements that are specifically required by this low-level driver.&lt;BR /&gt;+ */&lt;BR /&gt;+typedef struct {&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * The port structure holds all the information about the UART&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * port like base address, and so on.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct uart_port port;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to determine if the interrupts are muxed.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int ints_muxed;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Array that holds the receive and master interrupt numbers&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * when the interrupts are not muxed.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int irqs[2];&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to determine the DTE/DCE mode.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int mode;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to hold the IR mode of the port.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int ir_mode;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to enable/disable the UART port.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int enabled;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to indicate if we wish to use hardware-driven hardware&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * flow control.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int hardware_flow;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Holds the threshold value at which the CTS line is deasserted in&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * case we use hardware-driven hardware flow control.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int cts_threshold;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Flag to enable/disable DMA data transfer.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int dma_enabled;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Holds the DMA receive buffer size.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int dma_rxbuf_size;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Receive buffers information&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;mxc_uart_rxdmamap *rx_dmamap;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA RX buffer id&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int dma_rxbuf_id;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Transmit buffer virtual address&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;char *tx_buf;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * DMA Transmit buffer physical address&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;dma_addr_t tx_handle;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Holds the RxFIFO threshold value.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int rx_threshold;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Holds the TxFIFO threshold value.&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int tx_threshold;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Information whether this is a shared UART&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int shared;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Clock id for UART clock&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;struct clk *clk;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;/*!&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; * Information whether RXDMUXSEL must be set or not for IR port&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int rxd_mux;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int ir_tx_inv;&lt;BR /&gt;+&amp;nbsp;&amp;nbsp; &amp;nbsp;int ir_rx_inv;&lt;BR /&gt;+} uart_mxc_port;&lt;BR /&gt;+&lt;BR /&gt;+/* Address offsets of the UART registers */&lt;BR /&gt;+#define MXC_UARTURXD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x000&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Receive reg */&lt;BR /&gt;+#define MXC_UARTUTXD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x040&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Transmitter reg */&lt;BR /&gt;+#define&amp;nbsp;&amp;nbsp; &amp;nbsp;MXC_UARTUCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x080&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Control reg 1 */&lt;BR /&gt;+#define MXC_UARTUCR2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x084&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Control reg 2 */&lt;BR /&gt;+#define MXC_UARTUCR3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x088&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Control reg 3 */&lt;BR /&gt;+#define MXC_UARTUCR4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x08C&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Control reg 4 */&lt;BR /&gt;+#define MXC_UARTUFCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x090&amp;nbsp;&amp;nbsp; &amp;nbsp;/* FIFO control reg */&lt;BR /&gt;+#define MXC_UARTUSR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x094&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Status reg 1 */&lt;BR /&gt;+#define MXC_UARTUSR2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x098&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Status reg 2 */&lt;BR /&gt;+#define MXC_UARTUESC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x09C&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Escape character reg */&lt;BR /&gt;+#define MXC_UARTUTIM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0A0&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Escape timer reg */&lt;BR /&gt;+#define MXC_UARTUBIR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0A4&amp;nbsp;&amp;nbsp; &amp;nbsp;/* BRM incremental reg */&lt;BR /&gt;+#define MXC_UARTUBMR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0A8&amp;nbsp;&amp;nbsp; &amp;nbsp;/* BRM modulator reg */&lt;BR /&gt;+#define MXC_UARTUBRC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0AC&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Baud rate count reg */&lt;BR /&gt;+#define MXC_UARTONEMS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0B0&amp;nbsp;&amp;nbsp; &amp;nbsp;/* One millisecond reg */&lt;BR /&gt;+#define MXC_UARTUTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0B4&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Test reg */&lt;BR /&gt;+#define MXC_UARTUMCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0B8&amp;nbsp;&amp;nbsp; &amp;nbsp;/* RS485 Mode control */&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UCR1 */&lt;BR /&gt;+#define MXC_UARTUCR1_ADEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x8000&lt;BR /&gt;+#define MXC_UARTUCR1_ADBR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTUCR1_TRDYEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTUCR1_IDEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUCR1_RRDYEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0200&lt;BR /&gt;+#define MXC_UARTUCR1_RXDMAEN&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0100&lt;BR /&gt;+#define MXC_UARTUCR1_IREN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0080&lt;BR /&gt;+#define MXC_UARTUCR1_TXMPTYEN&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+#define MXC_UARTUCR1_RTSDEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0020&lt;BR /&gt;+#define MXC_UARTUCR1_SNDBRK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0010&lt;BR /&gt;+#define MXC_UARTUCR1_TXDMAEN&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0008&lt;BR /&gt;+#define MXC_UARTUCR1_ATDMAEN&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0004&lt;BR /&gt;+#define MXC_UARTUCR1_DOZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0002&lt;BR /&gt;+#define MXC_UARTUCR1_UARTEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0001&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UCR2 */&lt;BR /&gt;+#define MXC_UARTUCR2_ESCI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x8000&lt;BR /&gt;+#define MXC_UARTUCR2_IRTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTUCR2_CTSC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTUCR2_CTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUCR2_PREN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0100&lt;BR /&gt;+#define MXC_UARTUCR2_PROE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0080&lt;BR /&gt;+#define MXC_UARTUCR2_STPB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+#define MXC_UARTUCR2_WS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0020&lt;BR /&gt;+#define MXC_UARTUCR2_RTSEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0010&lt;BR /&gt;+#define MXC_UARTUCR2_ATEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0008&lt;BR /&gt;+#define MXC_UARTUCR2_TXEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0004&lt;BR /&gt;+#define MXC_UARTUCR2_RXEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0002&lt;BR /&gt;+#define MXC_UARTUCR2_SRST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0001&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UCR3 */&lt;BR /&gt;+#define MXC_UARTUCR3_DTREN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTUCR3_PARERREN&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUCR3_FRAERREN&amp;nbsp;&amp;nbsp; 0x0800&lt;BR /&gt;+#define MXC_UARTUCR3_DSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0400&lt;BR /&gt;+#define MXC_UARTUCR3_DCD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0200&lt;BR /&gt;+#define MXC_UARTUCR3_RI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0100&lt;BR /&gt;+#define MXC_UARTUCR3_RXDSEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+#define MXC_UARTUCR3_AWAKEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0010&lt;BR /&gt;+#define MXC_UARTUCR3_DTRDEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0008&lt;BR /&gt;+#define MXC_UARTUCR3_RXDMUXSEL&amp;nbsp; 0x0004&lt;BR /&gt;+#define MXC_UARTUCR3_INVT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0002&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UCR4 */&lt;BR /&gt;+#define MXC_UARTUCR4_CTSTL_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&lt;BR /&gt;+#define MXC_UARTUCR4_CTSTL_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x3F &amp;lt;&amp;lt; 10)&lt;BR /&gt;+#define MXC_UARTUCR4_INVR&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; 0x0200&lt;BR /&gt;+#define MXC_UARTUCR4_ENIRI&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; 0x0100&lt;BR /&gt;+#define MXC_UARTUCR4_REF16&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; 0x0040&lt;BR /&gt;+#define MXC_UARTUCR4_IRSC&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; 0x0020&lt;BR /&gt;+#define MXC_UARTUCR4_TCEN&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; 0x0008&lt;BR /&gt;+#define MXC_UARTUCR4_OREN&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; 0x0002&lt;BR /&gt;+#define MXC_UARTUCR4_DREN&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; 0x0001&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UFCR */&lt;BR /&gt;+#define MXC_UARTUFCR_RFDIV&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; 0x0200&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Ref freq div is set to 2 */&lt;BR /&gt;+#define MXC_UARTUFCR_RFDIV_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;BR /&gt;+#define MXC_UARTUFCR_RFDIV_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x7 &amp;lt;&amp;lt; 7)&lt;BR /&gt;+#define MXC_UARTUFCR_TXTL_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&lt;BR /&gt;+#define MXC_UARTUFCR_DCEDTE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of URXD */&lt;BR /&gt;+#define MXC_UARTURXD_ERR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTURXD_OVRRUN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTURXD_FRMERR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTURXD_BRK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0800&lt;BR /&gt;+#define MXC_UARTURXD_PRERR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0400&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of USR1 */&lt;BR /&gt;+#define MXC_UARTUSR1_PARITYERR&amp;nbsp; 0x8000&lt;BR /&gt;+#define MXC_UARTUSR1_RTSS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTUSR1_TRDY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2000&lt;BR /&gt;+#define MXC_UARTUSR1_RTSD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUSR1_FRAMERR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0400&lt;BR /&gt;+#define MXC_UARTUSR1_RRDY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0200&lt;BR /&gt;+#define MXC_UARTUSR1_AGTIM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0100&lt;BR /&gt;+#define MXC_UARTUSR1_DTRD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0080&lt;BR /&gt;+#define MXC_UARTUSR1_AWAKE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0010&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of USR2 */&lt;BR /&gt;+#define MXC_UARTUSR2_TXFE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4000&lt;BR /&gt;+#define MXC_UARTUSR2_IDLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+#define MXC_UARTUSR2_RIDELT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0400&lt;BR /&gt;+#define MXC_UARTUSR2_RIIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0200&lt;BR /&gt;+#define MXC_UARTUSR2_DCDDELT&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0040&lt;BR /&gt;+#define MXC_UARTUSR2_DCDIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0020&lt;BR /&gt;+#define MXC_UARTUSR2_TXDC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0008&lt;BR /&gt;+#define MXC_UARTUSR2_ORE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0002&lt;BR /&gt;+#define MXC_UARTUSR2_RDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0001&lt;BR /&gt;+#define MXC_UARTUSR2_BRCD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0004&lt;BR /&gt;+&lt;BR /&gt;+/* Bit definations of UTS */&lt;BR /&gt;+#define MXC_UARTUTS_LOOP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000&lt;BR /&gt;+&lt;BR /&gt;+#endif&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* __KERNEL__ */&lt;BR /&gt;+&lt;BR /&gt;+#endif&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* __ASM_ARCH_MXC_UART_H__ */&lt;BR /&gt;-- &lt;BR /&gt;2.7.4&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 11 Jan 2018 07:15:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Starting-kernel-using-4-seconds-to-start-unpress-kernel/m-p/756668#M117701</guid>
      <dc:creator>jiujinhong</dc:creator>
      <dc:date>2018-01-11T07:15:14Z</dc:date>
    </item>
  </channel>
</rss>

