2010-02-04 23:20:35

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: manual merge of the omap tree with the arm tree

Hi all,

Today's linux-next merge of the omap tree got a conflict in
arch/arm/mach-omap1/include/mach/debug-macro.S
arch/arm/mach-omap2/include/mach/debug-macro.S between commit
7f62dc4756eaf761570b96250630d48f80397d64 ("ARM: 5910/1: ARM: Add tmp
register for addruart and loadsp") from the arm tree and commit 209f5d2d2c8e385834d138ac593df86504a28ffe ("omap: Make
uncompress code and DEBUG_LL code generic") from the omap tree.

I fixed it up (see below) and can carry the fix as necessary.
--
Cheers,
Stephen Rothwell [email protected]

diff --cc arch/arm/mach-omap1/include/mach/debug-macro.S
index 8c74cab,0187391..0000000
--- a/arch/arm/mach-omap1/include/mach/debug-macro.S
+++ b/arch/arm/mach-omap1/include/mach/debug-macro.S
@@@ -11,7 -11,43 +11,43 @@@
*
*/

+ #include <linux/serial_reg.h>
+
+ #include <plat/serial.h>
+
+ .pushsection .data
+ omap_uart_phys: .word 0x0
+ omap_uart_virt: .word 0x0
+ .popsection
+
+ /*
+ * Note that this code won't work if the bootloader passes
+ * a wrong machine ID number in r1. To debug, just hardcode
+ * the desired UART phys and virt addresses temporarily into
+ * the omap_uart_phys and omap_uart_virt above.
+ */
- .macro addruart,rx
+ .macro addruart, rx, tmp
+
+ /* Use omap_uart_phys/virt if already configured */
+ 9: mrc p15, 0, \rx, c1, c0
+ tst \rx, #1 @ MMU enabled?
+ ldreq \rx, =omap_uart_phys @ physical base address
+ ldrne \rx, =omap_uart_virt @ virtual base
+ ldr \rx, [\rx, #0]
+ cmp \rx, #0 @ is port configured?
+ bne 99f @ already configured
+
+ /* Check 7XX UART1 scratchpad register for uart to use */
+ mrc p15, 0, \rx, c1, c0
+ tst \rx, #1 @ MMU enabled?
+ moveq \rx, #0xff000000 @ physical base address
+ movne \rx, #0xfe000000 @ virtual base
+ orr \rx, \rx, #0x00fb0000 @ OMAP1UART1
+ ldrb \rx, [\rx, #(UART_SCR << OMAP7XX_PORT_SHIFT)]
+ cmp \rx, #0 @ anything in 7XX scratchpad?
+ bne 10f @ found 7XX uart
+
+ /* Check 15xx/16xx UART1 scratchpad register for uart to use */
mrc p15, 0, \rx, c1, c0
tst \rx, #1 @ MMU enabled?
moveq \rx, #0xff000000 @ physical base address
diff --cc arch/arm/mach-omap2/include/mach/debug-macro.S
index 86979d7,eb05a22..0000000
--- a/arch/arm/mach-omap2/include/mach/debug-macro.S
+++ b/arch/arm/mach-omap2/include/mach/debug-macro.S
@@@ -11,32 -11,107 +11,107 @@@
*
*/

+ #include <linux/serial_reg.h>
+
+ #include <plat/serial.h>
+
+ #define UART_OFFSET(addr) ((addr) & 0x00ffffff)
+
+ .pushsection .data
+ omap_uart_phys: .word 0
+ omap_uart_virt: .word 0
+ omap_uart_lsr: .word 0
+ .popsection
+
+ /*
+ * Note that this code won't work if the bootloader passes
+ * a wrong machine ID number in r1. To debug, just hardcode
+ * the desired UART phys and virt addresses temporarily into
+ * the omap_uart_phys and omap_uart_virt above.
+ */
- .macro addruart,rx
+ .macro addruart, rx, tmp
+
+ /* Use omap_uart_phys/virt if already configured */
+ 10: mrc p15, 0, \rx, c1, c0
+ tst \rx, #1 @ MMU enabled?
+ ldreq \rx, =omap_uart_phys @ physical base address
+ ldrne \rx, =omap_uart_virt @ virtual base address
+ ldr \rx, [\rx, #0]
+ cmp \rx, #0 @ is port configured?
+ bne 99f @ already configured
+
+ /* Check UART1 scratchpad register for uart to use */
mrc p15, 0, \rx, c1, c0
tst \rx, #1 @ MMU enabled?
- #ifdef CONFIG_ARCH_OMAP2
moveq \rx, #0x48000000 @ physical base address
movne \rx, #0xfa000000 @ virtual base
- orr \rx, \rx, #0x0006a000
- #ifdef CONFIG_OMAP_LL_DEBUG_UART2
- add \rx, \rx, #0x00002000 @ UART 2
- #endif
- #ifdef CONFIG_OMAP_LL_DEBUG_UART3
- add \rx, \rx, #0x00004000 @ UART 3
- #endif
-
- #elif defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
- moveq \rx, #0x48000000 @ physical base address
- movne \rx, #0xfa000000 @ virtual base
- orr \rx, \rx, #0x0006a000
- #ifdef CONFIG_OMAP_LL_DEBUG_UART2
- add \rx, \rx, #0x00002000 @ UART 2
- #endif
- #ifdef CONFIG_OMAP_LL_DEBUG_UART3
- add \rx, \rx, #0x00fb0000 @ UART 3
- add \rx, \rx, #0x00006000
- #endif
- #endif
+ orr \rx, \rx, #0x0006a000 @ uart1 on omap2/3/4
+ ldrb \rx, [\rx, #(UART_SCR << OMAP_PORT_SHIFT)] @ scratchpad
+
+ /* Select the UART to use based on the UART1 scratchpad value */
+ cmp \rx, #0 @ no port configured?
+ beq 21f @ if none, try to use UART1
+ cmp \rx, #OMAP2UART1 @ OMAP2/3/4UART1
+ beq 21f @ configure OMAP2/3/4UART1
+ cmp \rx, #OMAP2UART2 @ OMAP2/3/4UART2
+ beq 22f @ configure OMAP2/3/4UART2
+ cmp \rx, #OMAP2UART3 @ only on 24xx
+ beq 23f @ configure OMAP2UART3
+ cmp \rx, #OMAP3UART3 @ only on 34xx
+ beq 33f @ configure OMAP3UART3
+ cmp \rx, #OMAP4UART3 @ only on 44xx
+ beq 43f @ configure OMAP4UART3
+ cmp \rx, #OMAP3UART4 @ only on 36xx
+ beq 34f @ configure OMAP3UART4
+ cmp \rx, #OMAP4UART4 @ only on 44xx
+ beq 44f @ configure OMAP4UART4
+ cmp \rx, #ZOOM_UART @ only on zoom2/3
+ beq 95f @ configure ZOOM_UART
+
+ /* Configure the UART offset from the phys/virt base */
+ 21: mov \rx, #UART_OFFSET(OMAP2_UART1_BASE) @ omap2/3/4
+ b 98f
+ 22: mov \rx, #UART_OFFSET(OMAP2_UART2_BASE) @ omap2/3/4
+ b 98f
+ 23: mov \rx, #UART_OFFSET(OMAP2_UART3_BASE)
+ b 98f
+ 33: mov \rx, #UART_OFFSET(OMAP3_UART1_BASE)
+ add \rx, \rx, #0x00fb0000
+ add \rx, \rx, #0x00006000 @ OMAP3_UART3_BASE
+ b 98f
+ 34: mov \rx, #UART_OFFSET(OMAP3_UART1_BASE)
+ add \rx, \rx, #0x00fb0000
+ add \rx, \rx, #0x00028000 @ OMAP3_UART4_BASE
+ b 98f
+ 43: mov \rx, #UART_OFFSET(OMAP4_UART3_BASE)
+ b 98f
+ 44: mov \rx, #UART_OFFSET(OMAP4_UART4_BASE)
+ b 98f
+ 95: mov \rx, #ZOOM_UART_BASE
+ ldr r1, =omap_uart_phys
+ str \rx, [r1, #0]
+ mov \rx, #ZOOM_UART_VIRT
+ ldr r1, =omap_uart_virt
+ str \rx, [r1, #0]
+ mov \rx, #(UART_LSR << ZOOM_PORT_SHIFT)
+ ldr r1, =omap_uart_lsr
+ str \rx, [r1, #0]
+ b 10b
+
+ /* Store both phys and virt address for the uart */
+ 98: add \rx, \rx, #0x48000000 @ phys base
+ ldr r1, =omap_uart_phys
+ str \rx, [r1, #0]
+ sub \rx, \rx, #0x48000000 @ phys base
+ add \rx, \rx, #0xfa000000 @ virt base
+ ldr r1, =omap_uart_virt
+ str \rx, [r1, #0]
+ mov \rx, #(UART_LSR << OMAP_PORT_SHIFT)
+ ldr r1, =omap_uart_lsr
+ str \rx, [r1, #0]
+
+ b 10b
+ 99:
.endm

.macro senduart,rd,rx


2010-02-04 23:30:00

by Tony Lindgren

[permalink] [raw]
Subject: Re: linux-next: manual merge of the omap tree with the arm tree

* Stephen Rothwell <[email protected]> [100204 15:17]:
> Hi all,
>
> Today's linux-next merge of the omap tree got a conflict in
> arch/arm/mach-omap1/include/mach/debug-macro.S
> arch/arm/mach-omap2/include/mach/debug-macro.S between commit
> 7f62dc4756eaf761570b96250630d48f80397d64 ("ARM: 5910/1: ARM: Add tmp
> register for addruart and loadsp") from the arm tree and commit 209f5d2d2c8e385834d138ac593df86504a28ffe ("omap: Make
> uncompress code and DEBUG_LL code generic") from the omap tree.
>
> I fixed it up (see below) and can carry the fix as necessary.

Thanks, I'll sort it out in omap for-next tree so they merge
cleanly.

Tony

> --
> Cheers,
> Stephen Rothwell [email protected]
>
> diff --cc arch/arm/mach-omap1/include/mach/debug-macro.S
> index 8c74cab,0187391..0000000
> --- a/arch/arm/mach-omap1/include/mach/debug-macro.S
> +++ b/arch/arm/mach-omap1/include/mach/debug-macro.S
> @@@ -11,7 -11,43 +11,43 @@@
> *
> */
>
> + #include <linux/serial_reg.h>
> +
> + #include <plat/serial.h>
> +
> + .pushsection .data
> + omap_uart_phys: .word 0x0
> + omap_uart_virt: .word 0x0
> + .popsection
> +
> + /*
> + * Note that this code won't work if the bootloader passes
> + * a wrong machine ID number in r1. To debug, just hardcode
> + * the desired UART phys and virt addresses temporarily into
> + * the omap_uart_phys and omap_uart_virt above.
> + */
> - .macro addruart,rx
> + .macro addruart, rx, tmp
> +
> + /* Use omap_uart_phys/virt if already configured */
> + 9: mrc p15, 0, \rx, c1, c0
> + tst \rx, #1 @ MMU enabled?
> + ldreq \rx, =omap_uart_phys @ physical base address
> + ldrne \rx, =omap_uart_virt @ virtual base
> + ldr \rx, [\rx, #0]
> + cmp \rx, #0 @ is port configured?
> + bne 99f @ already configured
> +
> + /* Check 7XX UART1 scratchpad register for uart to use */
> + mrc p15, 0, \rx, c1, c0
> + tst \rx, #1 @ MMU enabled?
> + moveq \rx, #0xff000000 @ physical base address
> + movne \rx, #0xfe000000 @ virtual base
> + orr \rx, \rx, #0x00fb0000 @ OMAP1UART1
> + ldrb \rx, [\rx, #(UART_SCR << OMAP7XX_PORT_SHIFT)]
> + cmp \rx, #0 @ anything in 7XX scratchpad?
> + bne 10f @ found 7XX uart
> +
> + /* Check 15xx/16xx UART1 scratchpad register for uart to use */
> mrc p15, 0, \rx, c1, c0
> tst \rx, #1 @ MMU enabled?
> moveq \rx, #0xff000000 @ physical base address
> diff --cc arch/arm/mach-omap2/include/mach/debug-macro.S
> index 86979d7,eb05a22..0000000
> --- a/arch/arm/mach-omap2/include/mach/debug-macro.S
> +++ b/arch/arm/mach-omap2/include/mach/debug-macro.S
> @@@ -11,32 -11,107 +11,107 @@@
> *
> */
>
> + #include <linux/serial_reg.h>
> +
> + #include <plat/serial.h>
> +
> + #define UART_OFFSET(addr) ((addr) & 0x00ffffff)
> +
> + .pushsection .data
> + omap_uart_phys: .word 0
> + omap_uart_virt: .word 0
> + omap_uart_lsr: .word 0
> + .popsection
> +
> + /*
> + * Note that this code won't work if the bootloader passes
> + * a wrong machine ID number in r1. To debug, just hardcode
> + * the desired UART phys and virt addresses temporarily into
> + * the omap_uart_phys and omap_uart_virt above.
> + */
> - .macro addruart,rx
> + .macro addruart, rx, tmp
> +
> + /* Use omap_uart_phys/virt if already configured */
> + 10: mrc p15, 0, \rx, c1, c0
> + tst \rx, #1 @ MMU enabled?
> + ldreq \rx, =omap_uart_phys @ physical base address
> + ldrne \rx, =omap_uart_virt @ virtual base address
> + ldr \rx, [\rx, #0]
> + cmp \rx, #0 @ is port configured?
> + bne 99f @ already configured
> +
> + /* Check UART1 scratchpad register for uart to use */
> mrc p15, 0, \rx, c1, c0
> tst \rx, #1 @ MMU enabled?
> - #ifdef CONFIG_ARCH_OMAP2
> moveq \rx, #0x48000000 @ physical base address
> movne \rx, #0xfa000000 @ virtual base
> - orr \rx, \rx, #0x0006a000
> - #ifdef CONFIG_OMAP_LL_DEBUG_UART2
> - add \rx, \rx, #0x00002000 @ UART 2
> - #endif
> - #ifdef CONFIG_OMAP_LL_DEBUG_UART3
> - add \rx, \rx, #0x00004000 @ UART 3
> - #endif
> -
> - #elif defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
> - moveq \rx, #0x48000000 @ physical base address
> - movne \rx, #0xfa000000 @ virtual base
> - orr \rx, \rx, #0x0006a000
> - #ifdef CONFIG_OMAP_LL_DEBUG_UART2
> - add \rx, \rx, #0x00002000 @ UART 2
> - #endif
> - #ifdef CONFIG_OMAP_LL_DEBUG_UART3
> - add \rx, \rx, #0x00fb0000 @ UART 3
> - add \rx, \rx, #0x00006000
> - #endif
> - #endif
> + orr \rx, \rx, #0x0006a000 @ uart1 on omap2/3/4
> + ldrb \rx, [\rx, #(UART_SCR << OMAP_PORT_SHIFT)] @ scratchpad
> +
> + /* Select the UART to use based on the UART1 scratchpad value */
> + cmp \rx, #0 @ no port configured?
> + beq 21f @ if none, try to use UART1
> + cmp \rx, #OMAP2UART1 @ OMAP2/3/4UART1
> + beq 21f @ configure OMAP2/3/4UART1
> + cmp \rx, #OMAP2UART2 @ OMAP2/3/4UART2
> + beq 22f @ configure OMAP2/3/4UART2
> + cmp \rx, #OMAP2UART3 @ only on 24xx
> + beq 23f @ configure OMAP2UART3
> + cmp \rx, #OMAP3UART3 @ only on 34xx
> + beq 33f @ configure OMAP3UART3
> + cmp \rx, #OMAP4UART3 @ only on 44xx
> + beq 43f @ configure OMAP4UART3
> + cmp \rx, #OMAP3UART4 @ only on 36xx
> + beq 34f @ configure OMAP3UART4
> + cmp \rx, #OMAP4UART4 @ only on 44xx
> + beq 44f @ configure OMAP4UART4
> + cmp \rx, #ZOOM_UART @ only on zoom2/3
> + beq 95f @ configure ZOOM_UART
> +
> + /* Configure the UART offset from the phys/virt base */
> + 21: mov \rx, #UART_OFFSET(OMAP2_UART1_BASE) @ omap2/3/4
> + b 98f
> + 22: mov \rx, #UART_OFFSET(OMAP2_UART2_BASE) @ omap2/3/4
> + b 98f
> + 23: mov \rx, #UART_OFFSET(OMAP2_UART3_BASE)
> + b 98f
> + 33: mov \rx, #UART_OFFSET(OMAP3_UART1_BASE)
> + add \rx, \rx, #0x00fb0000
> + add \rx, \rx, #0x00006000 @ OMAP3_UART3_BASE
> + b 98f
> + 34: mov \rx, #UART_OFFSET(OMAP3_UART1_BASE)
> + add \rx, \rx, #0x00fb0000
> + add \rx, \rx, #0x00028000 @ OMAP3_UART4_BASE
> + b 98f
> + 43: mov \rx, #UART_OFFSET(OMAP4_UART3_BASE)
> + b 98f
> + 44: mov \rx, #UART_OFFSET(OMAP4_UART4_BASE)
> + b 98f
> + 95: mov \rx, #ZOOM_UART_BASE
> + ldr r1, =omap_uart_phys
> + str \rx, [r1, #0]
> + mov \rx, #ZOOM_UART_VIRT
> + ldr r1, =omap_uart_virt
> + str \rx, [r1, #0]
> + mov \rx, #(UART_LSR << ZOOM_PORT_SHIFT)
> + ldr r1, =omap_uart_lsr
> + str \rx, [r1, #0]
> + b 10b
> +
> + /* Store both phys and virt address for the uart */
> + 98: add \rx, \rx, #0x48000000 @ phys base
> + ldr r1, =omap_uart_phys
> + str \rx, [r1, #0]
> + sub \rx, \rx, #0x48000000 @ phys base
> + add \rx, \rx, #0xfa000000 @ virt base
> + ldr r1, =omap_uart_virt
> + str \rx, [r1, #0]
> + mov \rx, #(UART_LSR << OMAP_PORT_SHIFT)
> + ldr r1, =omap_uart_lsr
> + str \rx, [r1, #0]
> +
> + b 10b
> + 99:
> .endm
>
> .macro senduart,rd,rx

2010-02-05 00:16:25

by Stephen Rothwell

[permalink] [raw]
Subject: Re: linux-next: manual merge of the omap tree with the arm tree

Hi Tony,

On Thu, 4 Feb 2010 15:30:19 -0800 Tony Lindgren <[email protected]> wrote:
>
> Thanks, I'll sort it out in omap for-next tree so they merge
> cleanly.

Thanks
--
Cheers,
Stephen Rothwell [email protected]
http://www.canb.auug.org.au/~sfr/


Attachments:
(No filename) (271.00 B)
(No filename) (198.00 B)
Download all attachments

2010-02-05 04:04:24

by Tony Lindgren

[permalink] [raw]
Subject: Re: linux-next: manual merge of the omap tree with the arm tree

* Stephen Rothwell <[email protected]> [100204 16:13]:
> Hi Tony,
>
> On Thu, 4 Feb 2010 15:30:19 -0800 Tony Lindgren <[email protected]> wrote:
> >
> > Thanks, I'll sort it out in omap for-next tree so they merge
> > cleanly.

Tried figuring out a clean mergeable solution, but it looks like
I need to manually merge or rebase the omap patches with patch
"ARM: 5910/1: ARM: Add tmp register for addruart and loadsp".

If we move the related debug-macro.S changes from omap tree to
Russell's tree, then I can't build my following multi-omap
patches..

Russell, can you please let me know if you have some static
commit ID containing the patch above that I could use that as
base for my patches?

Regards,

Tony

2010-02-15 15:03:38

by Russell King

[permalink] [raw]
Subject: Re: linux-next: manual merge of the omap tree with the arm tree

On Thu, Feb 04, 2010 at 08:04:44PM -0800, Tony Lindgren wrote:
> Russell, can you please let me know if you have some static
> commit ID containing the patch above that I could use that as
> base for my patches?

Right, when it eventually gets through linux-next, 4e6d488

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of:

2010-02-17 19:32:51

by Tony Lindgren

[permalink] [raw]
Subject: Re: linux-next: manual merge of the omap tree with the arm tree

* Russell King <[email protected]> [100215 07:00]:
> On Thu, Feb 04, 2010 at 08:04:44PM -0800, Tony Lindgren wrote:
> > Russell, can you please let me know if you have some static
> > commit ID containing the patch above that I could use that as
> > base for my patches?
>
> Right, when it eventually gets through linux-next, 4e6d488

Thanks, I have updated omap for-next based on that.

Regards,

Tony