All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matt Porter <mporter@konsulko.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V4 05/11] ARM: OMAP: Change set_pl310_ctrl_reg to be generic
Date: Thu, 5 Mar 2015 09:00:43 -0500	[thread overview]
Message-ID: <20150305140043.GC19577@beef> (raw)
In-Reply-To: <1425421588-27094-6-git-send-email-nm@ti.com>

On Tue, Mar 03, 2015 at 04:26:22PM -0600, Nishanth Menon wrote:
> set_pl310_ctrl_reg does use the Secure Monitor Call (SMC) to setup
> PL310 control register, however, that is something that is generic
> enough to be used for OMAP5 generation of processors as well. The only
> difference being the service being invoked for the function.
> 
> So, convert the service to a macro and use a generic name (same as
> that used in Linux for some consistency). While at that, also add a
> data barrier which is necessary as per recommendation.
> 
> While at this, switch over to smc #0 instead of handcoded assembly.
> To ensure gcc compatibility, steal the strategy used by Linux kernel
> for sec extension builds (NOTE: we no longer use '-march=armv5' as the
> legacy comment claims).

Hi Nishanth,

I applied this series with fuzz and fixed a minor conflict on master. I
ran into a build issue for omap3 beagle with the sec extension scheme on
the gcc version 4.7.4 (Ubuntu/Linaro 4.7.4-2ubuntu1) toolchain:

 arm-linux-gnueabi-gcc
-Wp,-MD,arch/arm/cpu/armv7/omap3/.lowlevel_init.o.d  -nostdinc -isystem
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include -Iinclude  -I../include
-I../arch/arm/include -include ../include/linux/kconfig.h -D__KERNEL__
-D__UBOOT__ -DCONFIG_SYS_TEXT_BASE=0x80100000 -D__ASSEMBLY__ -g
-D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux
-mword-relocations -march=armv7-a -mno-unaligned-access
-ffunction-sections -fdata-sections -fno-common -ffixed-r9 -msoft-float
-pipe   -c -o arch/arm/cpu/armv7/omap3/lowlevel_init.o
../arch/arm/cpu/armv7/omap3/lowlevel_init.S

../arch/arm/cpu/armv7/omap-common/lowlevel_init.S: Assembler messages:
../arch/arm/cpu/armv7/omap-common/lowlevel_init.S:34: Error: selected
processor does not support ARM mode `smc #0'

I've worked around this for the moment by placing an explicit
.arch_extension sec in lowlevel_init.S but hopefully you have some
thoughts on why those flags don't seem to be picked up. I'll continue
to take a look at it in the meantime.

-Matt

> Signed-off-by: Nishanth Menon <nm@ti.com>
> ---
>  arch/arm/cpu/armv7/omap-common/Makefile        |    3 +++
>  arch/arm/cpu/armv7/omap-common/lowlevel_init.S |   17 ++++++++++-------
>  arch/arm/cpu/armv7/omap4/hwinit.c              |    4 ++--
>  arch/arm/include/asm/arch-omap4/sys_proto.h    |    5 ++++-
>  4 files changed, 19 insertions(+), 10 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv7/omap-common/Makefile b/arch/arm/cpu/armv7/omap-common/Makefile
> index 7695e16d36f5..b36e85d25f3f 100644
> --- a/arch/arm/cpu/armv7/omap-common/Makefile
> +++ b/arch/arm/cpu/armv7/omap-common/Makefile
> @@ -26,6 +26,9 @@ ifeq ($(CONFIG_SYS_DCACHE_OFF),)
>  obj-y	+= omap-cache.o
>  endif
>  
> +plus_sec := $(call as-instr,.arch_extension sec,+sec)
> +AFLAGS_lowlevel_init.o	:=-Wa,-march=armv7-a$(plus_sec)
> +
>  ifeq ($(CONFIG_OMAP34XX),)
>  obj-y	+= boot-common.o
>  obj-y	+= lowlevel_init.o
> diff --git a/arch/arm/cpu/armv7/omap-common/lowlevel_init.S b/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
> index 86c0e4217478..83426291b22d 100644
> --- a/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
> +++ b/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
> @@ -22,11 +22,14 @@ ENTRY(save_boot_params)
>  	bx	lr
>  ENDPROC(save_boot_params)
>  
> -ENTRY(set_pl310_ctrl_reg)
> -	PUSH	{r4-r11, lr}	@ save registers - ROM code may pollute
> +ENTRY(omap_smc1)
> +	PUSH	{r4-r12, lr}	@ save registers - ROM code may pollute
>  				@ our registers
> -	LDR	r12, =0x102	@ Set PL310 control register - value in R0
> -	.word	0xe1600070	@ SMC #0 - hand assembled because -march=armv5
> -				@ call ROM Code API to set control register
> -	POP	{r4-r11, pc}
> -ENDPROC(set_pl310_ctrl_reg)
> +	MOV	r12, r0		@ Service
> +	MOV	r0, r1		@ Argument
> +	DSB
> +	DMB
> +	SMC	#0		@ Call the secure monitor for the service
> +
> +	POP	{r4-r12, pc}
> +ENDPROC(omap_smc1)
> diff --git a/arch/arm/cpu/armv7/omap4/hwinit.c b/arch/arm/cpu/armv7/omap4/hwinit.c
> index db16548fac49..9792761d40a0 100644
> --- a/arch/arm/cpu/armv7/omap4/hwinit.c
> +++ b/arch/arm/cpu/armv7/omap4/hwinit.c
> @@ -159,11 +159,11 @@ void init_omap_revision(void)
>  #ifndef CONFIG_SYS_L2CACHE_OFF
>  void v7_outer_cache_enable(void)
>  {
> -	set_pl310_ctrl_reg(1);
> +	omap_smc1(OMAP4_SERVICE_PL310_CONTROL_REG_SET, 1);
>  }
>  
>  void v7_outer_cache_disable(void)
>  {
> -	set_pl310_ctrl_reg(0);
> +	omap_smc1(OMAP4_SERVICE_PL310_CONTROL_REG_SET, 0);
>  }
>  #endif /* !CONFIG_SYS_L2CACHE_OFF */
> diff --git a/arch/arm/include/asm/arch-omap4/sys_proto.h b/arch/arm/include/asm/arch-omap4/sys_proto.h
> index e19975efaf50..f425e3af54f5 100644
> --- a/arch/arm/include/asm/arch-omap4/sys_proto.h
> +++ b/arch/arm/include/asm/arch-omap4/sys_proto.h
> @@ -37,7 +37,7 @@ void do_set_mux(u32 base, struct pad_conf_entry const *array, int size);
>  void set_muxconf_regs_essential(void);
>  u32 wait_on_value(u32, u32, void *, u32);
>  void sdelay(unsigned long);
> -void set_pl310_ctrl_reg(u32 val);
> +void omap_smc1(u32 service, u32 val);
>  void setup_clocks_for_console(void);
>  void prcm_init(void);
>  void bypass_dpll(u32 const base);
> @@ -57,4 +57,7 @@ int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data);
>  u32 warm_reset(void);
>  void force_emif_self_refresh(void);
>  void setup_warmreset_time(void);
> +
> +#define OMAP4_SERVICE_PL310_CONTROL_REG_SET	0x102
> +
>  #endif
> -- 
> 1.7.9.5
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

  reply	other threads:[~2015-03-05 14:00 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-03 22:26 [U-Boot] [PATCH V4 00/11] ARM: OMAP3-DRA7: CP15 erratum workarounds and improvements Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 01/11] ARM: Introduce erratum workaround for 798870 Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 02/11] ARM: Introduce erratum workaround for 454179 Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 03/11] ARM: Introduce erratum workaround for 430973 Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 04/11] ARM: Introduce erratum workaround for 621766 Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 05/11] ARM: OMAP: Change set_pl310_ctrl_reg to be generic Nishanth Menon
2015-03-05 14:00   ` Matt Porter [this message]
2015-03-05 17:49     ` Nishanth Menon
2015-03-05 20:22       ` Matt Porter
2015-03-05 21:36       ` Tom Rini
2015-03-05 22:27         ` Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 06/11] ARM: OMAP3: Rename omap3.h to omap.h to be generic as all SoCs Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 07/11] ARM: OMAP3: Get rid of omap3_gp_romcode_call and replace with omap_smc1 Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 08/11] ARM: DRA7 / OMAP5: Add workaround for ARM errata 798870 Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 09/11] ARM: OMAP5 / DRA7: Setup L2 Aux Control Register with recommended configuration Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 10/11] ARM: OMAP3: Enable workaround for ARM errata 454179, 430973, 621766 Nishanth Menon
2015-03-03 22:26 ` [U-Boot] [PATCH V4 11/11] ARM: OMAP3: rx51: " Nishanth Menon
2015-03-05 16:21 ` [U-Boot] [PATCH V4 00/11] ARM: OMAP3-DRA7: CP15 erratum workarounds and improvements Matt Porter
2015-03-05 17:56   ` Nishanth Menon
2015-03-06  2:52     ` Nishanth Menon
2015-03-06 21:02     ` Matt Porter

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=20150305140043.GC19577@beef \
    --to=mporter@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /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.