diff mbox

[U-Boot,3/3] powerpc/mpc85xx: SECURE BOOT- Disable law 0 for non PBL platforms

Message ID 1390210041-10353-1-git-send-email-aneesh.bansal@freescale.com
State Superseded
Delegated to: York Sun
Headers show

Commit Message

Aneesh Bansal Jan. 20, 2014, 9:27 a.m. UTC
ISBC creates a LAW 0 entry for non PBL platforms, which is not
disabled before transferring the control to uboot.
The LAW 0 entry has to be disabled.

Signed-off-by: Aneesh Bansal <aneesh.bansal@freescale.com>
---
 arch/powerpc/cpu/mpc85xx/start.S | 58 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

Comments

Scott Wood Jan. 20, 2014, 10:08 p.m. UTC | #1
On Mon, 2014-01-20 at 14:57 +0530, Aneesh Bansal wrote:
> ISBC creates a LAW 0 entry for non PBL platforms, which is not
> disabled before transferring the control to uboot.
> The LAW 0 entry has to be disabled.
> 
> Signed-off-by: Aneesh Bansal <aneesh.bansal@freescale.com>
> ---
>  arch/powerpc/cpu/mpc85xx/start.S | 58 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 58 insertions(+)
> 
> diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S
> index 5440bf5..2b2c4dd 100644
> --- a/arch/powerpc/cpu/mpc85xx/start.S
> +++ b/arch/powerpc/cpu/mpc85xx/start.S
> @@ -116,6 +116,64 @@ _start_e500:
>  	mtspr	SPRN_HDBCR0, r3
>  #endif
>  
> +#if defined(CONFIG_SECURE_BOOT) && defined(CONFIG_E500) && \
> +						!defined(CONFIG_E500MC)

CONFIG_E500 can be assumed in this file.

> +	/* ISBC creates a LAW 0 entry for non PBL platforms,
> +	 * which is not disabled before transferring the control to uboot.
> +	 * Disable the LAW 0 entry here.
> +	 */

Could you explain what this LAW 0 entry is for, why we don't need it,
and why we can't wait until later to clear it?

-Scott
Aneesh Bansal Jan. 27, 2014, 7:28 a.m. UTC | #2
> > ISBC creates a LAW 0 entry for non PBL platforms, which is not
> > disabled before transferring the control to uboot.
> > The LAW 0 entry has to be disabled.
> >
> > Signed-off-by: Aneesh Bansal <aneesh.bansal@freescale.com>
> > ---
> >  arch/powerpc/cpu/mpc85xx/start.S | 58 ++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 58 insertions(+)
> >
> > diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S
> > index 5440bf5..2b2c4dd 100644
> > --- a/arch/powerpc/cpu/mpc85xx/start.S
> > +++ b/arch/powerpc/cpu/mpc85xx/start.S
> > @@ -116,6 +116,64 @@ _start_e500:
> >       mtspr   SPRN_HDBCR0, r3
> >  #endif
> >
> > +#if defined(CONFIG_SECURE_BOOT) && defined(CONFIG_E500) && \
> > +                                             !defined(CONFIG_E500MC)
> 
> CONFIG_E500 can be assumed in this file.
> 
> > +     /* ISBC creates a LAW 0 entry for non PBL platforms,
> > +      * which is not disabled before transferring the control to uboot.
> > +      * Disable the LAW 0 entry here.
> > +      */
> 
> Could you explain what this LAW 0 entry is for, why we don't need it,
> and why we can't wait until later to clear it?
> 
> -Scott

Boot ROM creates a LAW 0 entry for IFC and at entry at U-boot during secure boot, we want to have the same environment as in case of Non-secure Boot. So, this LAW entry is being removed at start.

Regards,
Aneesh Bansal
Scott Wood Jan. 28, 2014, 9:10 p.m. UTC | #3
On Mon, 2014-01-27 at 01:28 -0600, Bansal Aneesh-B39320 wrote:
> > > ISBC creates a LAW 0 entry for non PBL platforms, which is not
> > > disabled before transferring the control to uboot.
> > > The LAW 0 entry has to be disabled.
> > >
> > > Signed-off-by: Aneesh Bansal <aneesh.bansal@freescale.com>
> > > ---
> > >  arch/powerpc/cpu/mpc85xx/start.S | 58 ++++++++++++++++++++++++++++++++++++++++
> > >  1 file changed, 58 insertions(+)
> > >
> > > diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S
> > > index 5440bf5..2b2c4dd 100644
> > > --- a/arch/powerpc/cpu/mpc85xx/start.S
> > > +++ b/arch/powerpc/cpu/mpc85xx/start.S
> > > @@ -116,6 +116,64 @@ _start_e500:
> > >       mtspr   SPRN_HDBCR0, r3
> > >  #endif
> > >
> > > +#if defined(CONFIG_SECURE_BOOT) && defined(CONFIG_E500) && \
> > > +                                             !defined(CONFIG_E500MC)
> > 
> > CONFIG_E500 can be assumed in this file.
> > 
> > > +     /* ISBC creates a LAW 0 entry for non PBL platforms,
> > > +      * which is not disabled before transferring the control to uboot.
> > > +      * Disable the LAW 0 entry here.
> > > +      */
> > 
> > Could you explain what this LAW 0 entry is for, why we don't need it,
> > and why we can't wait until later to clear it?
> > 
> > -Scott
> 
> Boot ROM creates a LAW 0 entry for IFC and at entry at U-boot during
> secure boot, we want to have the same environment as in case of
> Non-secure Boot. So, this LAW entry is being removed at start.

But in the secure boot case aren't you currently running from that LAW?

And I don't think wanting to have the same environment is a good reason
for injecting more code into the already messy start.S, if there isn't a
good reason why it can't be done later.

-Scott
diff mbox

Patch

diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S
index 5440bf5..2b2c4dd 100644
--- a/arch/powerpc/cpu/mpc85xx/start.S
+++ b/arch/powerpc/cpu/mpc85xx/start.S
@@ -116,6 +116,64 @@  _start_e500:
 	mtspr	SPRN_HDBCR0, r3
 #endif
 
+#if defined(CONFIG_SECURE_BOOT) && defined(CONFIG_E500) && \
+						!defined(CONFIG_E500MC)
+	/* ISBC creates a LAW 0 entry for non PBL platforms,
+	 * which is not disabled before transferring the control to uboot.
+	 * Disable the LAW 0 entry here.
+	 */
+
+	/* create a temp TLB mapping for CCSRBAR  */
+	lis     r6,FSL_BOOKE_MAS0(1, 15, 0)@h
+	ori     r6,r6,FSL_BOOKE_MAS0(1, 15, 0)@l
+
+	lis     r7,FSL_BOOKE_MAS1(1, 0, 0, 0, BOOKE_PAGESZ_1M)@h
+	ori     r7,r7,FSL_BOOKE_MAS1(1, 0, 0, 0, BOOKE_PAGESZ_1M)@l
+
+	lis     r8,FSL_BOOKE_MAS2(CONFIG_SYS_CCSRBAR_DEFAULT,
+						(MAS2_I|MAS2_G))@h
+	ori     r8,r8,FSL_BOOKE_MAS2(CONFIG_SYS_CCSRBAR_DEFAULT,
+						(MAS2_I|MAS2_G))@l
+
+	lis     r9,FSL_BOOKE_MAS3(CONFIG_SYS_CCSRBAR_DEFAULT, 0,
+						(MAS3_SW|MAS3_SR))@h
+	ori     r9,r9,FSL_BOOKE_MAS3(CONFIG_SYS_CCSRBAR_DEFAULT, 0,
+						(MAS3_SW|MAS3_SR))@l
+
+	mtspr   MAS0,r6
+	mtspr   MAS1,r7
+	mtspr   MAS2,r8
+	mtspr   MAS3,r9
+	isync
+	msync
+	tlbwe
+
+	/* Clear the LAW 0 entry */
+	lis     r3, CONFIG_SYS_CCSRBAR_DEFAULT@h
+	ori     r3, r3, CONFIG_SYS_CCSRBAR_DEFAULT@l
+	li	r4, 0x0
+
+	stw     r4, 0xc10(r3)	/* LAWAR0 */
+	sync
+
+	/* clear the TLB mapping for CCSRBAR  */
+	lis     r6,FSL_BOOKE_MAS0(1, 15, 0)@h
+	ori     r6,r6,FSL_BOOKE_MAS0(1, 15, 0)@l
+
+	lis     r7,FSL_BOOKE_MAS1(0, 0, 0, 0, 0)@h
+	ori     r7,r7,FSL_BOOKE_MAS1(0, 0, 0, 0, 0)@l
+
+	li	r8, 0x0
+	li	r9, 0x0
+
+	mtspr   MAS0,r6
+	mtspr   MAS1,r7
+	mtspr   MAS2,r8
+	mtspr   MAS3,r9
+	isync
+	msync
+	tlbwe
+#endif
 
 #if defined(CONFIG_SECURE_BOOT) && defined(CONFIG_E500MC) && \
 	!defined(CONFIG_E6500)