Patchwork ARM: imx6q: let users input debug uart port number

login
register
mail settings
Submitter Shawn Guo
Date Oct. 8, 2012, 6:06 a.m.
Message ID <1349676394-25704-1-git-send-email-shawn.guo@linaro.org>
Download mbox | patch
Permalink /patch/189916/
State New
Headers show

Comments

Shawn Guo - Oct. 8, 2012, 6:06 a.m.
imx6q gets 5 uart ports in total.  Different board design may choose
different port as debug uart.  For example, imx6q-sabresd uses UART1,
imx6q-sabrelite uses UART2 and imx6q-arm2 uses UART4.  Rather than
bloating DEBUG_LL choice list with all these uart ports, the patch
introduces DEBUG_IMX6Q_UART_PORT for users to input uart port number
when DEBUG_IMX6Q_UART is selected inside DEBUG_LL choice.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
 arch/arm/Kconfig.debug       |   26 +++++++++++++-------------
 arch/arm/include/debug/imx.S |   20 ++++++++++++++++----
 arch/arm/mach-imx/lluart.c   |   28 ++++++++++++++++++----------
 arch/arm/mach-imx/mx6q.h     |    4 ----
 4 files changed, 47 insertions(+), 31 deletions(-)
Dirk Behme - Oct. 19, 2012, 8:01 a.m.
On 08.10.2012 08:06, Shawn Guo wrote:
> imx6q gets 5 uart ports in total.  Different board design may choose
> different port as debug uart.  For example, imx6q-sabresd uses UART1,
> imx6q-sabrelite uses UART2 and imx6q-arm2 uses UART4.  Rather than
> bloating DEBUG_LL choice list with all these uart ports, the patch
> introduces DEBUG_IMX6Q_UART_PORT for users to input uart port number
> when DEBUG_IMX6Q_UART is selected inside DEBUG_LL choice.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>

Sounds like a good idea :)

Thanks

Dirk

> ---
>  arch/arm/Kconfig.debug       |   26 +++++++++++++-------------
>  arch/arm/include/debug/imx.S |   20 ++++++++++++++++----
>  arch/arm/mach-imx/lluart.c   |   28 ++++++++++++++++++----------
>  arch/arm/mach-imx/mx6q.h     |    4 ----
>  4 files changed, 47 insertions(+), 31 deletions(-)
> 
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index 5566520..5dc7109 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -209,20 +209,12 @@ choice
>  		  Say Y here if you want kernel low-level debugging support
>  		  on i.MX50 or i.MX53.
>  
> -	config DEBUG_IMX6Q_UART2
> -		bool "i.MX6Q Debug UART2"
> +	config DEBUG_IMX6Q_UART
> +		bool "i.MX6Q Debug UART"
>  		depends on SOC_IMX6Q
>  		help
>  		  Say Y here if you want kernel low-level debugging support
> -		  on i.MX6Q UART2. This is correct for e.g. the SabreLite
> -                  board.
> -
> -	config DEBUG_IMX6Q_UART4
> -		bool "i.MX6Q Debug UART4"
> -		depends on SOC_IMX6Q
> -		help
> -		  Say Y here if you want kernel low-level debugging support
> -		  on i.MX6Q UART4.
> +		  on i.MX6Q.
>  
>  	config DEBUG_MMP_UART2
>  		bool "Kernel low-level debugging message via MMP UART2"
> @@ -409,6 +401,15 @@ choice
>  
>  endchoice
>  
> +config DEBUG_IMX6Q_UART_PORT
> +	int "i.MX6Q Debug UART Port (1-5)" if DEBUG_IMX6Q_UART
> +	range 1 5
> +	default 1
> +	depends on SOC_IMX6Q
> +	help
> +	  Choose UART port on which kernel low-level debug messages
> +	  should be output.
> +
>  config DEBUG_LL_INCLUDE
>  	string
>  	default "debug/icedcc.S" if DEBUG_ICEDCC
> @@ -418,8 +419,7 @@ config DEBUG_LL_INCLUDE
>  				 DEBUG_IMX31_IMX35_UART || \
>  				 DEBUG_IMX51_UART || \
>  				 DEBUG_IMX50_IMX53_UART ||\
> -				 DEBUG_IMX6Q_UART2 || \
> -				 DEBUG_IMX6Q_UART4
> +				 DEBUG_IMX6Q_UART
>  	default "debug/highbank.S" if DEBUG_HIGHBANK_UART
>  	default "debug/mvebu.S" if DEBUG_MVEBU_UART
>  	default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART
> diff --git a/arch/arm/include/debug/imx.S b/arch/arm/include/debug/imx.S
> index 0b65d79..0c4e17d 100644
> --- a/arch/arm/include/debug/imx.S
> +++ b/arch/arm/include/debug/imx.S
> @@ -10,6 +10,20 @@
>   * published by the Free Software Foundation.
>   *
>   */
> +#define IMX6Q_UART1_BASE_ADDR	0x02020000
> +#define IMX6Q_UART2_BASE_ADDR	0x021e8000
> +#define IMX6Q_UART3_BASE_ADDR	0x021ec000
> +#define IMX6Q_UART4_BASE_ADDR	0x021f0000
> +#define IMX6Q_UART5_BASE_ADDR	0x021f4000
> +
> +/*
> + * IMX6Q_UART_BASE_ADDR is put in the middle to force the expansion
> + * of IMX6Q_UART##n##_BASE_ADDR.
> + */
> +#define IMX6Q_UART_BASE_ADDR(n)	IMX6Q_UART##n##_BASE_ADDR
> +#define IMX6Q_UART_BASE(n)	IMX6Q_UART_BASE_ADDR(n)
> +#define IMX6Q_DEBUG_UART_BASE	IMX6Q_UART_BASE(CONFIG_DEBUG_IMX6Q_UART_PORT)
> +
>  #ifdef CONFIG_DEBUG_IMX1_UART
>  #define UART_PADDR	0x00206000
>  #elif defined (CONFIG_DEBUG_IMX25_UART)
> @@ -22,10 +36,8 @@
>  #define UART_PADDR	0x73fbc000
>  #elif defined (CONFIG_DEBUG_IMX50_IMX53_UART)
>  #define UART_PADDR	0x53fbc000
> -#elif defined (CONFIG_DEBUG_IMX6Q_UART2)
> -#define UART_PADDR	0x021e8000
> -#elif defined (CONFIG_DEBUG_IMX6Q_UART4)
> -#define UART_PADDR	0x021f0000
> +#elif defined (CONFIG_DEBUG_IMX6Q_UART)
> +#define UART_PADDR	IMX6Q_DEBUG_UART_BASE
>  #endif
>  
>  /*
> diff --git a/arch/arm/mach-imx/lluart.c b/arch/arm/mach-imx/lluart.c
> index 5f15103..2fdc9bf 100644
> --- a/arch/arm/mach-imx/lluart.c
> +++ b/arch/arm/mach-imx/lluart.c
> @@ -17,17 +17,25 @@
>  
>  #include "hardware.h"
>  
> +#define IMX6Q_UART1_BASE_ADDR	0x02020000
> +#define IMX6Q_UART2_BASE_ADDR	0x021e8000
> +#define IMX6Q_UART3_BASE_ADDR	0x021ec000
> +#define IMX6Q_UART4_BASE_ADDR	0x021f0000
> +#define IMX6Q_UART5_BASE_ADDR	0x021f4000
> +
> +/*
> + * IMX6Q_UART_BASE_ADDR is put in the middle to force the expansion
> + * of IMX6Q_UART##n##_BASE_ADDR.
> + */
> +#define IMX6Q_UART_BASE_ADDR(n)	IMX6Q_UART##n##_BASE_ADDR
> +#define IMX6Q_UART_BASE(n)	IMX6Q_UART_BASE_ADDR(n)
> +#define IMX6Q_DEBUG_UART_BASE	IMX6Q_UART_BASE(CONFIG_DEBUG_IMX6Q_UART_PORT)
> +
>  static struct map_desc imx_lluart_desc = {
> -#ifdef CONFIG_DEBUG_IMX6Q_UART2
> -	.virtual	= MX6Q_IO_P2V(MX6Q_UART2_BASE_ADDR),
> -	.pfn		= __phys_to_pfn(MX6Q_UART2_BASE_ADDR),
> -	.length		= MX6Q_UART2_SIZE,
> -	.type		= MT_DEVICE,
> -#endif
> -#ifdef CONFIG_DEBUG_IMX6Q_UART4
> -	.virtual	= MX6Q_IO_P2V(MX6Q_UART4_BASE_ADDR),
> -	.pfn		= __phys_to_pfn(MX6Q_UART4_BASE_ADDR),
> -	.length		= MX6Q_UART4_SIZE,
> +#ifdef CONFIG_DEBUG_IMX6Q_UART
> +	.virtual	= IMX_IO_P2V(IMX6Q_DEBUG_UART_BASE),
> +	.pfn		= __phys_to_pfn(IMX6Q_DEBUG_UART_BASE),
> +	.length		= 0x4000,
>  	.type		= MT_DEVICE,
>  #endif
>  };
> diff --git a/arch/arm/mach-imx/mx6q.h b/arch/arm/mach-imx/mx6q.h
> index f7e7dba..19d3f54 100644
> --- a/arch/arm/mach-imx/mx6q.h
> +++ b/arch/arm/mach-imx/mx6q.h
> @@ -27,9 +27,5 @@
>  #define MX6Q_CCM_SIZE			0x4000
>  #define MX6Q_ANATOP_BASE_ADDR		0x020c8000
>  #define MX6Q_ANATOP_SIZE		0x1000
> -#define MX6Q_UART2_BASE_ADDR		0x021e8000
> -#define MX6Q_UART2_SIZE			0x4000
> -#define MX6Q_UART4_BASE_ADDR		0x021f0000
> -#define MX6Q_UART4_SIZE			0x4000
>  
>  #endif	/* __MACH_MX6Q_H__ */

Patch

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 5566520..5dc7109 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -209,20 +209,12 @@  choice
 		  Say Y here if you want kernel low-level debugging support
 		  on i.MX50 or i.MX53.
 
-	config DEBUG_IMX6Q_UART2
-		bool "i.MX6Q Debug UART2"
+	config DEBUG_IMX6Q_UART
+		bool "i.MX6Q Debug UART"
 		depends on SOC_IMX6Q
 		help
 		  Say Y here if you want kernel low-level debugging support
-		  on i.MX6Q UART2. This is correct for e.g. the SabreLite
-                  board.
-
-	config DEBUG_IMX6Q_UART4
-		bool "i.MX6Q Debug UART4"
-		depends on SOC_IMX6Q
-		help
-		  Say Y here if you want kernel low-level debugging support
-		  on i.MX6Q UART4.
+		  on i.MX6Q.
 
 	config DEBUG_MMP_UART2
 		bool "Kernel low-level debugging message via MMP UART2"
@@ -409,6 +401,15 @@  choice
 
 endchoice
 
+config DEBUG_IMX6Q_UART_PORT
+	int "i.MX6Q Debug UART Port (1-5)" if DEBUG_IMX6Q_UART
+	range 1 5
+	default 1
+	depends on SOC_IMX6Q
+	help
+	  Choose UART port on which kernel low-level debug messages
+	  should be output.
+
 config DEBUG_LL_INCLUDE
 	string
 	default "debug/icedcc.S" if DEBUG_ICEDCC
@@ -418,8 +419,7 @@  config DEBUG_LL_INCLUDE
 				 DEBUG_IMX31_IMX35_UART || \
 				 DEBUG_IMX51_UART || \
 				 DEBUG_IMX50_IMX53_UART ||\
-				 DEBUG_IMX6Q_UART2 || \
-				 DEBUG_IMX6Q_UART4
+				 DEBUG_IMX6Q_UART
 	default "debug/highbank.S" if DEBUG_HIGHBANK_UART
 	default "debug/mvebu.S" if DEBUG_MVEBU_UART
 	default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART
diff --git a/arch/arm/include/debug/imx.S b/arch/arm/include/debug/imx.S
index 0b65d79..0c4e17d 100644
--- a/arch/arm/include/debug/imx.S
+++ b/arch/arm/include/debug/imx.S
@@ -10,6 +10,20 @@ 
  * published by the Free Software Foundation.
  *
  */
+#define IMX6Q_UART1_BASE_ADDR	0x02020000
+#define IMX6Q_UART2_BASE_ADDR	0x021e8000
+#define IMX6Q_UART3_BASE_ADDR	0x021ec000
+#define IMX6Q_UART4_BASE_ADDR	0x021f0000
+#define IMX6Q_UART5_BASE_ADDR	0x021f4000
+
+/*
+ * IMX6Q_UART_BASE_ADDR is put in the middle to force the expansion
+ * of IMX6Q_UART##n##_BASE_ADDR.
+ */
+#define IMX6Q_UART_BASE_ADDR(n)	IMX6Q_UART##n##_BASE_ADDR
+#define IMX6Q_UART_BASE(n)	IMX6Q_UART_BASE_ADDR(n)
+#define IMX6Q_DEBUG_UART_BASE	IMX6Q_UART_BASE(CONFIG_DEBUG_IMX6Q_UART_PORT)
+
 #ifdef CONFIG_DEBUG_IMX1_UART
 #define UART_PADDR	0x00206000
 #elif defined (CONFIG_DEBUG_IMX25_UART)
@@ -22,10 +36,8 @@ 
 #define UART_PADDR	0x73fbc000
 #elif defined (CONFIG_DEBUG_IMX50_IMX53_UART)
 #define UART_PADDR	0x53fbc000
-#elif defined (CONFIG_DEBUG_IMX6Q_UART2)
-#define UART_PADDR	0x021e8000
-#elif defined (CONFIG_DEBUG_IMX6Q_UART4)
-#define UART_PADDR	0x021f0000
+#elif defined (CONFIG_DEBUG_IMX6Q_UART)
+#define UART_PADDR	IMX6Q_DEBUG_UART_BASE
 #endif
 
 /*
diff --git a/arch/arm/mach-imx/lluart.c b/arch/arm/mach-imx/lluart.c
index 5f15103..2fdc9bf 100644
--- a/arch/arm/mach-imx/lluart.c
+++ b/arch/arm/mach-imx/lluart.c
@@ -17,17 +17,25 @@ 
 
 #include "hardware.h"
 
+#define IMX6Q_UART1_BASE_ADDR	0x02020000
+#define IMX6Q_UART2_BASE_ADDR	0x021e8000
+#define IMX6Q_UART3_BASE_ADDR	0x021ec000
+#define IMX6Q_UART4_BASE_ADDR	0x021f0000
+#define IMX6Q_UART5_BASE_ADDR	0x021f4000
+
+/*
+ * IMX6Q_UART_BASE_ADDR is put in the middle to force the expansion
+ * of IMX6Q_UART##n##_BASE_ADDR.
+ */
+#define IMX6Q_UART_BASE_ADDR(n)	IMX6Q_UART##n##_BASE_ADDR
+#define IMX6Q_UART_BASE(n)	IMX6Q_UART_BASE_ADDR(n)
+#define IMX6Q_DEBUG_UART_BASE	IMX6Q_UART_BASE(CONFIG_DEBUG_IMX6Q_UART_PORT)
+
 static struct map_desc imx_lluart_desc = {
-#ifdef CONFIG_DEBUG_IMX6Q_UART2
-	.virtual	= MX6Q_IO_P2V(MX6Q_UART2_BASE_ADDR),
-	.pfn		= __phys_to_pfn(MX6Q_UART2_BASE_ADDR),
-	.length		= MX6Q_UART2_SIZE,
-	.type		= MT_DEVICE,
-#endif
-#ifdef CONFIG_DEBUG_IMX6Q_UART4
-	.virtual	= MX6Q_IO_P2V(MX6Q_UART4_BASE_ADDR),
-	.pfn		= __phys_to_pfn(MX6Q_UART4_BASE_ADDR),
-	.length		= MX6Q_UART4_SIZE,
+#ifdef CONFIG_DEBUG_IMX6Q_UART
+	.virtual	= IMX_IO_P2V(IMX6Q_DEBUG_UART_BASE),
+	.pfn		= __phys_to_pfn(IMX6Q_DEBUG_UART_BASE),
+	.length		= 0x4000,
 	.type		= MT_DEVICE,
 #endif
 };
diff --git a/arch/arm/mach-imx/mx6q.h b/arch/arm/mach-imx/mx6q.h
index f7e7dba..19d3f54 100644
--- a/arch/arm/mach-imx/mx6q.h
+++ b/arch/arm/mach-imx/mx6q.h
@@ -27,9 +27,5 @@ 
 #define MX6Q_CCM_SIZE			0x4000
 #define MX6Q_ANATOP_BASE_ADDR		0x020c8000
 #define MX6Q_ANATOP_SIZE		0x1000
-#define MX6Q_UART2_BASE_ADDR		0x021e8000
-#define MX6Q_UART2_SIZE			0x4000
-#define MX6Q_UART4_BASE_ADDR		0x021f0000
-#define MX6Q_UART4_SIZE			0x4000
 
 #endif	/* __MACH_MX6Q_H__ */