diff mbox

[4/4] arm: mediatek: Add earlyprintk support for MT6589

Message ID 1397072736-10793-5-git-send-email-matthias.bgg@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Matthias Brugger April 9, 2014, 7:45 p.m. UTC
Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
---
 arch/arm/Kconfig.debug            |   49 +++++++++++++++++++++++++++++++++++--
 arch/arm/include/debug/mediatek.S |   38 ++++++++++++++++++++++++++++
 2 files changed, 85 insertions(+), 2 deletions(-)
 create mode 100644 arch/arm/include/debug/mediatek.S

Comments

Gregory CLEMENT April 9, 2014, 8:54 p.m. UTC | #1
Hi Matthias,

On 09/04/2014 19:45, Matthias Brugger wrote:
> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
> ---
>  arch/arm/Kconfig.debug            |   49 +++++++++++++++++++++++++++++++++++--
>  arch/arm/include/debug/mediatek.S |   38 ++++++++++++++++++++++++++++
>  2 files changed, 85 insertions(+), 2 deletions(-)
>  create mode 100644 arch/arm/include/debug/mediatek.S
> 
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index 4a2fc0b..dc51495 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -797,6 +797,38 @@ choice
>  		  Say Y here if you want kernel low-level debugging support
>  		  on Ux500 based platforms.
>  
> +	config DEBUG_MTK6589_UART0
> +		depends on ARCH_MEDIATEK
> +		bool "Mediatek mt6589 UART0"
> +		select DEBUG_UART_MEDIATEK
> +		help
> +		  Say Y here if you want kernel low-level debugging support
> +		  on Mediatek mt6589 based platforms.
> +
> +	config DEBUG_MTK6589_UART1
> +		depends on ARCH_MEDIATEK
> +		bool "Mediatek mt6589 UART1"
> +		select DEBUG_UART_MEDIATEK
> +		help
> +		  Say Y here if you want kernel low-level debugging support
> +		  on Mediatek mt6589 based platforms.
> +
> +	config DEBUG_MTK6589_UART2
> +		depends on ARCH_MEDIATEK
> +		bool "Mediatek mt6589 UART2"
> +		select DEBUG_UART_MEDIATEK
> +		help
> +		  Say Y here if you want kernel low-level debugging support
> +		  on Mediatek mt6589 based platforms.
> +
> +	config DEBUG_MTK6589_UART3
> +		depends on ARCH_MEDIATEK
> +		bool "Mediatek mt6589 UART3"
> +		select DEBUG_UART_MEDIATEK
> +		help
> +		  Say Y here if you want kernel low-level debugging support
> +		  on Mediatek mt6589 based platforms.
> +
>  	config DEBUG_VEXPRESS_UART0_DETECT
>  		bool "Autodetect UART0 on Versatile Express Cortex-A core tiles"
>  		depends on ARCH_VEXPRESS && CPU_CP15_MMU
> @@ -954,6 +986,10 @@ config DEBUG_MSM_UART
>  	bool
>  	depends on ARCH_MSM || ARCH_QCOM
>  
> +config DEBUG_UART_MEDIATEK
> +	bool
> +	depends on ARCH_MEDIATEK
> +
>  config DEBUG_LL_INCLUDE
>  	string
>  	default "debug/8250.S" if DEBUG_LL_UART_8250 || DEBUG_UART_8250
> @@ -971,6 +1007,7 @@ config DEBUG_LL_INCLUDE
>  				 DEBUG_IMX53_UART ||\
>  				 DEBUG_IMX6Q_UART || \
>  				 DEBUG_IMX6SL_UART
> +	default "debug/mediatek.S" if DEBUG_UART_MEDIATEK
>  	default "debug/msm.S" if DEBUG_MSM_UART
>  	default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART
>  	default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1
> @@ -1043,6 +1080,10 @@ config DEBUG_UART_PHYS
>  	default 0xd0012000 if DEBUG_MVEBU_UART
>  	default 0xd4017000 if DEBUG_MMP_UART2
>  	default 0xd4018000 if DEBUG_MMP_UART3

it seems that this symbol are sorted by address so your symbols
should go just after the line
default 0x101fb000 if DEBUG_NOMADIK_UART

> +	default 0x11006000 if DEBUG_MTK6589_UART0
> +	default 0x11007000 if DEBUG_MTK6589_UART1
> +	default 0x11008000 if DEBUG_MTK6589_UART2
> +	default 0x11009000 if DEBUG_MTK6589_UART3
>  	default 0xe0000000 if ARCH_SPEAR13XX
>  	default 0xf0000be0 if ARCH_EBSA110
>  	default 0xf1012000 if DEBUG_MVEBU_UART_ALTERNATE
> @@ -1058,7 +1099,7 @@ config DEBUG_UART_PHYS
>  	default 0xfffff700 if ARCH_IOP33X
>  	depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
>  		DEBUG_LL_UART_EFM32 || \
> -		DEBUG_UART_8250 || DEBUG_UART_PL01X
> +		DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_UART_MEDIATEK
>  
>  config DEBUG_UART_VIRT
>  	hex "Virtual base address of debug UART"
> @@ -1087,6 +1128,10 @@ config DEBUG_UART_VIRT
>  	default 0xfe012000 if ARCH_ORION5X
>  	default 0xfe017000 if DEBUG_MMP_UART2
>  	default 0xfe018000 if DEBUG_MMP_UART3
> +	default 0xF1006000 if DEBUG_MTK6589_UART0
> +	default 0xF1007000 if DEBUG_MTK6589_UART1
> +	default 0xF1008000 if DEBUG_MTK6589_UART2
> +	default 0xF1009000 if DEBUG_MTK6589_UART3
>  	default 0xfe100000 if DEBUG_IMX23_UART || DEBUG_IMX28_UART
>  	default 0xfe230000 if DEBUG_PICOXCELL_UART
>  	default 0xfe300000 if DEBUG_BCM_KONA_UART
> @@ -1116,7 +1161,7 @@ config DEBUG_UART_VIRT
>  	default 0xff003000 if DEBUG_U300_UART
>  	default DEBUG_UART_PHYS if !MMU
>  	depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
> -		DEBUG_UART_8250 || DEBUG_UART_PL01X
> +		DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_UART_MEDIATEK
>  
>  config DEBUG_UART_8250_SHIFT
>  	int "Register offset shift for the 8250 debug UART"
> diff --git a/arch/arm/include/debug/mediatek.S b/arch/arm/include/debug/mediatek.S
> new file mode 100644
> index 0000000..98e8414
> --- /dev/null
> +++ b/arch/arm/include/debug/mediatek.S
> @@ -0,0 +1,38 @@
> +/*
> + * Low-level debug macro for Mediatek SoCs
> + *
> + * Copyright (c) 2014 MundoReader S.L.
> + * Author: Matthias Brugger <matthias.bgg@gmail.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +#include <linux/serial_reg.h>
> +
> +	        .macro  addruart, rp, rv, tmp
> +	        ldr	\rp, =CONFIG_DEBUG_UART_PHYS
> +	        ldr	\rv, =CONFIG_DEBUG_UART_VIRT
> +	        .endm
> +
> +	        .macro  senduart,rd,rx
> +	        strb    \rd, [\rx, #0x0]
What about using a #define instead of numerical value?

> +	        .endm
> +
> +	        .macro  waituart,rd,rx
> +1001:   	ldr \rd, [\rx, #0x14]
ditto
> +	        tst \rd, #0x40
ditto
> +	        beq 1001b
> +	        .endm
> +
> +		.macro  busyuart,rd,rx
> +1002:   	ldr \rd, [\rx, #0x14]
ditto
> +	        tst \rd, #0x40
ditto
> +	        beq 1002b
> +	        .endm
> 

This file looks very similar to arch/arm/include/debug/pl01x.S,
the only difference is the value of some register offsets.
Should it be possible to make it configurable and then use the
same file?


Thanks,

Gregory
Rob Herring April 9, 2014, 9:39 p.m. UTC | #2
On Wed, Apr 9, 2014 at 2:45 PM, Matthias Brugger <matthias.bgg@gmail.com> wrote:
> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
> ---
>  arch/arm/Kconfig.debug            |   49 +++++++++++++++++++++++++++++++++++--
>  arch/arm/include/debug/mediatek.S |   38 ++++++++++++++++++++++++++++
>  2 files changed, 85 insertions(+), 2 deletions(-)
>  create mode 100644 arch/arm/include/debug/mediatek.S
>
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index 4a2fc0b..dc51495 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -797,6 +797,38 @@ choice
>                   Say Y here if you want kernel low-level debugging support
>                   on Ux500 based platforms.
>
> +       config DEBUG_MTK6589_UART0
> +               depends on ARCH_MEDIATEK
> +               bool "Mediatek mt6589 UART0"
> +               select DEBUG_UART_MEDIATEK
> +               help
> +                 Say Y here if you want kernel low-level debugging support
> +                 on Mediatek mt6589 based platforms.
> +
> +       config DEBUG_MTK6589_UART1
> +               depends on ARCH_MEDIATEK
> +               bool "Mediatek mt6589 UART1"
> +               select DEBUG_UART_MEDIATEK
> +               help
> +                 Say Y here if you want kernel low-level debugging support
> +                 on Mediatek mt6589 based platforms.
> +
> +       config DEBUG_MTK6589_UART2
> +               depends on ARCH_MEDIATEK
> +               bool "Mediatek mt6589 UART2"
> +               select DEBUG_UART_MEDIATEK
> +               help
> +                 Say Y here if you want kernel low-level debugging support
> +                 on Mediatek mt6589 based platforms.
> +
> +       config DEBUG_MTK6589_UART3
> +               depends on ARCH_MEDIATEK
> +               bool "Mediatek mt6589 UART3"
> +               select DEBUG_UART_MEDIATEK
> +               help
> +                 Say Y here if you want kernel low-level debugging support
> +                 on Mediatek mt6589 based platforms.
> +

Do you really need all uarts defined? Only define what you have boards using.

Also, you have no uarts defined in your dts. Please add them there
(and any necessary serial driver) before adding debug functionality.
Otherwise, you can't actually boot a multi-platform kernel with this
series.
Matthias Brugger April 10, 2014, 8:22 a.m. UTC | #3
2014-04-09 23:39 GMT+02:00 Rob Herring <robherring2@gmail.com>:
> On Wed, Apr 9, 2014 at 2:45 PM, Matthias Brugger <matthias.bgg@gmail.com> wrote:
>> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
>> ---
>>  arch/arm/Kconfig.debug            |   49 +++++++++++++++++++++++++++++++++++--
>>  arch/arm/include/debug/mediatek.S |   38 ++++++++++++++++++++++++++++
>>  2 files changed, 85 insertions(+), 2 deletions(-)
>>  create mode 100644 arch/arm/include/debug/mediatek.S
>>
>> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
>> index 4a2fc0b..dc51495 100644
>> --- a/arch/arm/Kconfig.debug
>> +++ b/arch/arm/Kconfig.debug
>> @@ -797,6 +797,38 @@ choice
>>                   Say Y here if you want kernel low-level debugging support
>>                   on Ux500 based platforms.
>>
>> +       config DEBUG_MTK6589_UART0
>> +               depends on ARCH_MEDIATEK
>> +               bool "Mediatek mt6589 UART0"
>> +               select DEBUG_UART_MEDIATEK
>> +               help
>> +                 Say Y here if you want kernel low-level debugging support
>> +                 on Mediatek mt6589 based platforms.
>> +
>> +       config DEBUG_MTK6589_UART1
>> +               depends on ARCH_MEDIATEK
>> +               bool "Mediatek mt6589 UART1"
>> +               select DEBUG_UART_MEDIATEK
>> +               help
>> +                 Say Y here if you want kernel low-level debugging support
>> +                 on Mediatek mt6589 based platforms.
>> +
>> +       config DEBUG_MTK6589_UART2
>> +               depends on ARCH_MEDIATEK
>> +               bool "Mediatek mt6589 UART2"
>> +               select DEBUG_UART_MEDIATEK
>> +               help
>> +                 Say Y here if you want kernel low-level debugging support
>> +                 on Mediatek mt6589 based platforms.
>> +
>> +       config DEBUG_MTK6589_UART3
>> +               depends on ARCH_MEDIATEK
>> +               bool "Mediatek mt6589 UART3"
>> +               select DEBUG_UART_MEDIATEK
>> +               help
>> +                 Say Y here if you want kernel low-level debugging support
>> +                 on Mediatek mt6589 based platforms.
>> +
>
> Do you really need all uarts defined? Only define what you have boards using.
>
> Also, you have no uarts defined in your dts. Please add them there
> (and any necessary serial driver) before adding debug functionality.
> Otherwise, you can't actually boot a multi-platform kernel with this
> series.

Up to now, there no serial driver exists. Should I skip this patch and
re-submit it when the serial driver is integrated?
diff mbox

Patch

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 4a2fc0b..dc51495 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -797,6 +797,38 @@  choice
 		  Say Y here if you want kernel low-level debugging support
 		  on Ux500 based platforms.
 
+	config DEBUG_MTK6589_UART0
+		depends on ARCH_MEDIATEK
+		bool "Mediatek mt6589 UART0"
+		select DEBUG_UART_MEDIATEK
+		help
+		  Say Y here if you want kernel low-level debugging support
+		  on Mediatek mt6589 based platforms.
+
+	config DEBUG_MTK6589_UART1
+		depends on ARCH_MEDIATEK
+		bool "Mediatek mt6589 UART1"
+		select DEBUG_UART_MEDIATEK
+		help
+		  Say Y here if you want kernel low-level debugging support
+		  on Mediatek mt6589 based platforms.
+
+	config DEBUG_MTK6589_UART2
+		depends on ARCH_MEDIATEK
+		bool "Mediatek mt6589 UART2"
+		select DEBUG_UART_MEDIATEK
+		help
+		  Say Y here if you want kernel low-level debugging support
+		  on Mediatek mt6589 based platforms.
+
+	config DEBUG_MTK6589_UART3
+		depends on ARCH_MEDIATEK
+		bool "Mediatek mt6589 UART3"
+		select DEBUG_UART_MEDIATEK
+		help
+		  Say Y here if you want kernel low-level debugging support
+		  on Mediatek mt6589 based platforms.
+
 	config DEBUG_VEXPRESS_UART0_DETECT
 		bool "Autodetect UART0 on Versatile Express Cortex-A core tiles"
 		depends on ARCH_VEXPRESS && CPU_CP15_MMU
@@ -954,6 +986,10 @@  config DEBUG_MSM_UART
 	bool
 	depends on ARCH_MSM || ARCH_QCOM
 
+config DEBUG_UART_MEDIATEK
+	bool
+	depends on ARCH_MEDIATEK
+
 config DEBUG_LL_INCLUDE
 	string
 	default "debug/8250.S" if DEBUG_LL_UART_8250 || DEBUG_UART_8250
@@ -971,6 +1007,7 @@  config DEBUG_LL_INCLUDE
 				 DEBUG_IMX53_UART ||\
 				 DEBUG_IMX6Q_UART || \
 				 DEBUG_IMX6SL_UART
+	default "debug/mediatek.S" if DEBUG_UART_MEDIATEK
 	default "debug/msm.S" if DEBUG_MSM_UART
 	default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART
 	default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1
@@ -1043,6 +1080,10 @@  config DEBUG_UART_PHYS
 	default 0xd0012000 if DEBUG_MVEBU_UART
 	default 0xd4017000 if DEBUG_MMP_UART2
 	default 0xd4018000 if DEBUG_MMP_UART3
+	default 0x11006000 if DEBUG_MTK6589_UART0
+	default 0x11007000 if DEBUG_MTK6589_UART1
+	default 0x11008000 if DEBUG_MTK6589_UART2
+	default 0x11009000 if DEBUG_MTK6589_UART3
 	default 0xe0000000 if ARCH_SPEAR13XX
 	default 0xf0000be0 if ARCH_EBSA110
 	default 0xf1012000 if DEBUG_MVEBU_UART_ALTERNATE
@@ -1058,7 +1099,7 @@  config DEBUG_UART_PHYS
 	default 0xfffff700 if ARCH_IOP33X
 	depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
 		DEBUG_LL_UART_EFM32 || \
-		DEBUG_UART_8250 || DEBUG_UART_PL01X
+		DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_UART_MEDIATEK
 
 config DEBUG_UART_VIRT
 	hex "Virtual base address of debug UART"
@@ -1087,6 +1128,10 @@  config DEBUG_UART_VIRT
 	default 0xfe012000 if ARCH_ORION5X
 	default 0xfe017000 if DEBUG_MMP_UART2
 	default 0xfe018000 if DEBUG_MMP_UART3
+	default 0xF1006000 if DEBUG_MTK6589_UART0
+	default 0xF1007000 if DEBUG_MTK6589_UART1
+	default 0xF1008000 if DEBUG_MTK6589_UART2
+	default 0xF1009000 if DEBUG_MTK6589_UART3
 	default 0xfe100000 if DEBUG_IMX23_UART || DEBUG_IMX28_UART
 	default 0xfe230000 if DEBUG_PICOXCELL_UART
 	default 0xfe300000 if DEBUG_BCM_KONA_UART
@@ -1116,7 +1161,7 @@  config DEBUG_UART_VIRT
 	default 0xff003000 if DEBUG_U300_UART
 	default DEBUG_UART_PHYS if !MMU
 	depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
-		DEBUG_UART_8250 || DEBUG_UART_PL01X
+		DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_UART_MEDIATEK
 
 config DEBUG_UART_8250_SHIFT
 	int "Register offset shift for the 8250 debug UART"
diff --git a/arch/arm/include/debug/mediatek.S b/arch/arm/include/debug/mediatek.S
new file mode 100644
index 0000000..98e8414
--- /dev/null
+++ b/arch/arm/include/debug/mediatek.S
@@ -0,0 +1,38 @@ 
+/*
+ * Low-level debug macro for Mediatek SoCs
+ *
+ * Copyright (c) 2014 MundoReader S.L.
+ * Author: Matthias Brugger <matthias.bgg@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+#include <linux/serial_reg.h>
+
+	        .macro  addruart, rp, rv, tmp
+	        ldr	\rp, =CONFIG_DEBUG_UART_PHYS
+	        ldr	\rv, =CONFIG_DEBUG_UART_VIRT
+	        .endm
+
+	        .macro  senduart,rd,rx
+	        strb    \rd, [\rx, #0x0]
+	        .endm
+
+	        .macro  waituart,rd,rx
+1001:   	ldr \rd, [\rx, #0x14]
+	        tst \rd, #0x40
+	        beq 1001b
+	        .endm
+
+		.macro  busyuart,rd,rx
+1002:   	ldr \rd, [\rx, #0x14]
+	        tst \rd, #0x40
+	        beq 1002b
+	        .endm