All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
Cc: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	Olof Johansson <olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org>,
	Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
	Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
	Russell King - ARM Linux
	<linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH V3 1/5] ARM: implement debug_ll_io_init()
Date: Sat, 20 Oct 2012 08:36:51 -0500	[thread overview]
Message-ID: <5082A8F3.6070403@gmail.com> (raw)
In-Reply-To: <1350686507-3022-1-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>

On 10/19/2012 05:41 PM, Stephen Warren wrote:
> From: Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> 
> When using DEBUG_LL, the UART's (or other HW's) registers are mapped
> into early page tables based on the results of assembly macro addruart.
> Later, when the page tables are replaced, the same virtual address must
> remain valid. Historically, this has been ensured by using defines from
> <mach/iomap.h> in both the implementation of addruart, and the machine's
> .map_io() function. However, with the move to single zImage, we wish to
> remove <mach/iomap.h>. To enable this, the macro addruart may be used
> when constructing the late page tables too; addruart is exposed as a
> C function debug_ll_addr(), and used to set up the required mapping in
> debug_ll_io_init(), which may called on an opt-in basis from a machine's
> .map_io() function.
> 
> Signed-off-by: Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
> [swarren: Mask map.virtual with PAGE_MASK. Checked for NULL results from
>  debug_ll_addr (e.g. when selected UART isn't valid). Fixed compile when
>  either !CONFIG_DEBUG_LL or CONFIG_DEBUG_SEMIHOSTING.]
> Signed-off-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
> I assume this first patch should actually go into some arm-soc branch so
> that if others want to take advantage of it this kernel cycle, they can.
> 
> v3: New patch.
> ---
>  arch/arm/include/asm/mach/map.h |    7 +++++++
>  arch/arm/kernel/debug.S         |   13 +++++++++++++
>  arch/arm/mm/mmu.c               |   16 ++++++++++++++++
>  3 files changed, 36 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/include/asm/mach/map.h b/arch/arm/include/asm/mach/map.h
> index 195ac2f..2fe141f 100644
> --- a/arch/arm/include/asm/mach/map.h
> +++ b/arch/arm/include/asm/mach/map.h
> @@ -40,6 +40,13 @@ extern void iotable_init(struct map_desc *, int);
>  extern void vm_reserve_area_early(unsigned long addr, unsigned long size,
>  				  void *caller);
>  
> +#ifdef CONFIG_DEBUG_LL
> +extern void debug_ll_addr(unsigned long *paddr, unsigned long *vaddr);
> +extern void debug_ll_io_init(void);
> +#else
> +static inline void debug_ll_io_init(void) {}
> +#endif
> +
>  struct mem_type;
>  extern const struct mem_type *get_mem_type(unsigned int type);
>  /*
> diff --git a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S
> index 66f711b..7525ce4 100644
> --- a/arch/arm/kernel/debug.S
> +++ b/arch/arm/kernel/debug.S
> @@ -100,6 +100,13 @@ ENTRY(printch)
>  		b	1b
>  ENDPROC(printch)
>  
> +ENTRY(debug_ll_addr)
> +		addruart r2, r3, ip
> +		str	r2, [r0]
> +		str	r3, [r1]
> +		mov	pc, lr
> +ENDPROC(debug_ll_addr)
> +
>  #else
>  
>  ENTRY(printascii)
> @@ -119,4 +126,10 @@ ENTRY(printch)
>  		mov	pc, lr
>  ENDPROC(printch)
>  
> +ENTRY(debug_ll_addr)
> +		mov	r2, #0
> +		mov	r3, #0

Don't you want:

mov r2, #0
str r2, [r0]
str r2, [r1]

> +		mov	pc, lr
> +ENDPROC(debug_ll_addr)
> +
>  #endif
> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
> index 941dfb9..39719bb 100644
> --- a/arch/arm/mm/mmu.c
> +++ b/arch/arm/mm/mmu.c
> @@ -876,6 +876,22 @@ static void __init pci_reserve_io(void)
>  #define pci_reserve_io() do { } while (0)
>  #endif
>  
> +#ifdef CONFIG_DEBUG_LL
> +void __init debug_ll_io_init(void)
> +{
> +	struct map_desc map;
> +
> +	debug_ll_addr(&map.pfn, &map.virtual);
> +	if (!map.pfn || !map.virtual)
> +		return;
> +	map.pfn = __phys_to_pfn(map.pfn);
> +	map.virtual &= PAGE_MASK;
> +	map.length = PAGE_SIZE;
> +	map.type = MT_DEVICE;
> +	create_mapping(&map);
> +}
> +#endif
> +
>  static void * __initdata vmalloc_min =
>  	(void *)(VMALLOC_END - (240 << 20) - VMALLOC_OFFSET);
>  
> 

WARNING: multiple messages have this Message-ID (diff)
From: robherring2@gmail.com (Rob Herring)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V3 1/5] ARM: implement debug_ll_io_init()
Date: Sat, 20 Oct 2012 08:36:51 -0500	[thread overview]
Message-ID: <5082A8F3.6070403@gmail.com> (raw)
In-Reply-To: <1350686507-3022-1-git-send-email-swarren@wwwdotorg.org>

On 10/19/2012 05:41 PM, Stephen Warren wrote:
> From: Rob Herring <robherring2@gmail.com>
> 
> When using DEBUG_LL, the UART's (or other HW's) registers are mapped
> into early page tables based on the results of assembly macro addruart.
> Later, when the page tables are replaced, the same virtual address must
> remain valid. Historically, this has been ensured by using defines from
> <mach/iomap.h> in both the implementation of addruart, and the machine's
> .map_io() function. However, with the move to single zImage, we wish to
> remove <mach/iomap.h>. To enable this, the macro addruart may be used
> when constructing the late page tables too; addruart is exposed as a
> C function debug_ll_addr(), and used to set up the required mapping in
> debug_ll_io_init(), which may called on an opt-in basis from a machine's
> .map_io() function.
> 
> Signed-off-by: Rob Herring <rob.herring@calxeda.com>
> [swarren: Mask map.virtual with PAGE_MASK. Checked for NULL results from
>  debug_ll_addr (e.g. when selected UART isn't valid). Fixed compile when
>  either !CONFIG_DEBUG_LL or CONFIG_DEBUG_SEMIHOSTING.]
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
> I assume this first patch should actually go into some arm-soc branch so
> that if others want to take advantage of it this kernel cycle, they can.
> 
> v3: New patch.
> ---
>  arch/arm/include/asm/mach/map.h |    7 +++++++
>  arch/arm/kernel/debug.S         |   13 +++++++++++++
>  arch/arm/mm/mmu.c               |   16 ++++++++++++++++
>  3 files changed, 36 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/include/asm/mach/map.h b/arch/arm/include/asm/mach/map.h
> index 195ac2f..2fe141f 100644
> --- a/arch/arm/include/asm/mach/map.h
> +++ b/arch/arm/include/asm/mach/map.h
> @@ -40,6 +40,13 @@ extern void iotable_init(struct map_desc *, int);
>  extern void vm_reserve_area_early(unsigned long addr, unsigned long size,
>  				  void *caller);
>  
> +#ifdef CONFIG_DEBUG_LL
> +extern void debug_ll_addr(unsigned long *paddr, unsigned long *vaddr);
> +extern void debug_ll_io_init(void);
> +#else
> +static inline void debug_ll_io_init(void) {}
> +#endif
> +
>  struct mem_type;
>  extern const struct mem_type *get_mem_type(unsigned int type);
>  /*
> diff --git a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S
> index 66f711b..7525ce4 100644
> --- a/arch/arm/kernel/debug.S
> +++ b/arch/arm/kernel/debug.S
> @@ -100,6 +100,13 @@ ENTRY(printch)
>  		b	1b
>  ENDPROC(printch)
>  
> +ENTRY(debug_ll_addr)
> +		addruart r2, r3, ip
> +		str	r2, [r0]
> +		str	r3, [r1]
> +		mov	pc, lr
> +ENDPROC(debug_ll_addr)
> +
>  #else
>  
>  ENTRY(printascii)
> @@ -119,4 +126,10 @@ ENTRY(printch)
>  		mov	pc, lr
>  ENDPROC(printch)
>  
> +ENTRY(debug_ll_addr)
> +		mov	r2, #0
> +		mov	r3, #0

Don't you want:

mov r2, #0
str r2, [r0]
str r2, [r1]

> +		mov	pc, lr
> +ENDPROC(debug_ll_addr)
> +
>  #endif
> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
> index 941dfb9..39719bb 100644
> --- a/arch/arm/mm/mmu.c
> +++ b/arch/arm/mm/mmu.c
> @@ -876,6 +876,22 @@ static void __init pci_reserve_io(void)
>  #define pci_reserve_io() do { } while (0)
>  #endif
>  
> +#ifdef CONFIG_DEBUG_LL
> +void __init debug_ll_io_init(void)
> +{
> +	struct map_desc map;
> +
> +	debug_ll_addr(&map.pfn, &map.virtual);
> +	if (!map.pfn || !map.virtual)
> +		return;
> +	map.pfn = __phys_to_pfn(map.pfn);
> +	map.virtual &= PAGE_MASK;
> +	map.length = PAGE_SIZE;
> +	map.type = MT_DEVICE;
> +	create_mapping(&map);
> +}
> +#endif
> +
>  static void * __initdata vmalloc_min =
>  	(void *)(VMALLOC_END - (240 << 20) - VMALLOC_OFFSET);
>  
> 

  parent reply	other threads:[~2012-10-20 13:36 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-19 22:41 [PATCH V3 1/5] ARM: implement debug_ll_io_init() Stephen Warren
2012-10-19 22:41 ` Stephen Warren
     [not found] ` <1350686507-3022-1-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-19 22:41   ` [PATCH V3 2/5] ARM: tegra: simplify DEBUG_LL UART selection options Stephen Warren
2012-10-19 22:41     ` Stephen Warren
2012-10-19 22:41   ` [PATCH V3 3/5] ARM: tegra: decouple uncompress.h and debug-macro.S Stephen Warren
2012-10-19 22:41     ` Stephen Warren
     [not found]     ` <1350686507-3022-3-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-22  8:18       ` Peter De Schrijver
2012-10-22  8:18         ` Peter De Schrijver
     [not found]         ` <20121022081830.GH3196-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org>
2012-10-22 16:24           ` Stephen Warren
2012-10-22 16:24             ` Stephen Warren
     [not found]             ` <50857340.4010403-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-22 22:13               ` Russell King - ARM Linux
2012-10-22 22:13                 ` Russell King - ARM Linux
2012-10-19 22:41   ` [PATCH V3 4/5] ARM: tegra: don't include iomap.h from debug-macro.S Stephen Warren
2012-10-19 22:41     ` Stephen Warren
2012-10-19 22:41   ` [PATCH V3 5/5] ARM: tegra: move debug-macro.S to include/debug Stephen Warren
2012-10-19 22:41     ` Stephen Warren
2012-10-20 13:36   ` Rob Herring [this message]
2012-10-20 13:36     ` [PATCH V3 1/5] ARM: implement debug_ll_io_init() Rob Herring
2012-11-05 19:03   ` Stephen Warren
2012-11-05 19:03     ` Stephen Warren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5082A8F3.6070403@gmail.com \
    --to=robherring2-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org \
    --cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
    --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
    --cc=swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.