diff mbox

Nokia N900: omap aes is broken

Message ID 201502182227.55488@pali (mailing list archive)
State RFC
Delegated to: Herbert Xu
Headers show

Commit Message

Pali Rohár Feb. 18, 2015, 9:27 p.m. UTC
On Wednesday 18 February 2015 22:02:30 Pali Rohár wrote:
> On Wednesday 18 February 2015 13:21:03 Pali Rohár wrote:
> > Hello,
> > 
> > I tried to test OMAP AES driver on Nokia N900 with special
> > Nokia bootloader which enable L3 firewall for OMAP AES HW
> > support.
> > 
> > I modified arch/arm/boot/dts/omap34xx-hs.dtsi file and
> > commented aes line which disable aes support in DT.
> > 
> > Then I booted kernel and loaded omap-aes.ko module. And I
> > got this output in dmesg:
> > 
> > [    0.222930] platform 480c5000.aes: Cannot lookup hwmod
> > 'aes' [   27.758148] omap-aes 480c5000.aes:
> > _od_fail_runtime_resume: FIXME: missing hwmod/omap_dev info
> > [   27.765960] omap-aes 480c5000.aes: omap_aes_probe: failed
> > to get_sync(-19)
> > [   29.257690] omap-aes 480c5000.aes: initialization failed.
> > 
> > So it looks like some initialization data are missing for
> > Nokia N900 (omap3430 device).
> > 
> > Can somebody look at it? I have patched 2.6.28 kernel were
> > omap aes support on this N900 device (with special
> > bootloader) is working.
> > 
> > Maybe some other data are missing in DT or in hwmod?
> 
> dma channels are missing in DT. I applied this patch:
> 
> diff --git a/arch/arm/boot/dts/omap3.dtsi
> b/arch/arm/boot/dts/omap3.dtsi index 01b7111..473d460 100644
> --- a/arch/arm/boot/dts/omap3.dtsi
> +++ b/arch/arm/boot/dts/omap3.dtsi
> @@ -92,6 +92,8 @@
>  			ti,hwmods = "aes";
>  			reg = <0x480c5000 0x50>;
>  			interrupts = <0>;
> +			dmas = <&sdma 65 &sdma 66>;
> +			dma-names = "tx", "rx";
>  		};
> 
>  		prm: prm@48306000 {
> @@ -550,6 +552,8 @@
>  			ti,hwmods = "sham";
>  			reg = <0x480c3000 0x64>;
>  			interrupts = <49>;
> +			dmas = <&sdma 96>;
> +			dma-names = "rx";
>  		};
> 
>  		smartreflex_core: smartreflex@480cb000 {
> 
> 
> and omap-aes driver was successfully loaded. now it is in
> /proc/crypto
> 
> I copied dma names and numbers from file
> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c

And I also needed to apply this patch:


aes hwmod is defined in GP-only hwmod...

Comments

Tony Lindgren Feb. 24, 2015, 5:25 p.m. UTC | #1
* Pali Rohár <pali.rohar@gmail.com> [150218 16:03]:
> On Wednesday 18 February 2015 22:02:30 Pali Rohár wrote:
> > On Wednesday 18 February 2015 13:21:03 Pali Rohár wrote:
> > > Hello,
> > > 
> > > I tried to test OMAP AES driver on Nokia N900 with special
> > > Nokia bootloader which enable L3 firewall for OMAP AES HW
> > > support.
> > > 
> > > I modified arch/arm/boot/dts/omap34xx-hs.dtsi file and
> > > commented aes line which disable aes support in DT.
> > > 
> > > Then I booted kernel and loaded omap-aes.ko module. And I
> > > got this output in dmesg:
> > > 
> > > [    0.222930] platform 480c5000.aes: Cannot lookup hwmod
> > > 'aes' [   27.758148] omap-aes 480c5000.aes:
> > > _od_fail_runtime_resume: FIXME: missing hwmod/omap_dev info
> > > [   27.765960] omap-aes 480c5000.aes: omap_aes_probe: failed
> > > to get_sync(-19)
> > > [   29.257690] omap-aes 480c5000.aes: initialization failed.
> > > 
> > > So it looks like some initialization data are missing for
> > > Nokia N900 (omap3430 device).
> > > 
> > > Can somebody look at it? I have patched 2.6.28 kernel were
> > > omap aes support on this N900 device (with special
> > > bootloader) is working.
> > > 
> > > Maybe some other data are missing in DT or in hwmod?
> > 
> > dma channels are missing in DT. I applied this patch:
> > 
> > diff --git a/arch/arm/boot/dts/omap3.dtsi
> > b/arch/arm/boot/dts/omap3.dtsi index 01b7111..473d460 100644
> > --- a/arch/arm/boot/dts/omap3.dtsi
> > +++ b/arch/arm/boot/dts/omap3.dtsi
> > @@ -92,6 +92,8 @@
> >  			ti,hwmods = "aes";
> >  			reg = <0x480c5000 0x50>;
> >  			interrupts = <0>;
> > +			dmas = <&sdma 65 &sdma 66>;
> > +			dma-names = "tx", "rx";
> >  		};
> > 
> >  		prm: prm@48306000 {
> > @@ -550,6 +552,8 @@
> >  			ti,hwmods = "sham";
> >  			reg = <0x480c3000 0x64>;
> >  			interrupts = <49>;
> > +			dmas = <&sdma 96>;
> > +			dma-names = "rx";
> >  		};
> > 
> >  		smartreflex_core: smartreflex@480cb000 {
> > 
> > 
> > and omap-aes driver was successfully loaded. now it is in
> > /proc/crypto
> > 
> > I copied dma names and numbers from file
> > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> 
> And I also needed to apply this patch:
> 
> diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> index 11468ee..3281f30 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> @@ -3938,8 +3938,9 @@ int __init omap3xxx_hwmod_init(void)
>  	if (r < 0)
>  		return r;
>  
> -	/* Register GP-only hwmod links. */
> -	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> +//	/* Register GP-only hwmod links. */
> +//	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> +	if (h_gp) {
>  		r = omap_hwmod_register_links(h_gp);
>  		if (r < 0)
>  			return r;
> 
> aes hwmod is defined in GP-only hwmod...

Doesn't this depend on the bootloader version of n900 to work?

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Tony Lindgren Feb. 24, 2015, 5:37 p.m. UTC | #2
* Pali Rohár <pali.rohar@gmail.com> [150224 09:42]:
> On Tuesday 24 February 2015 18:25:12 Tony Lindgren wrote:
> > * Pali Rohár <pali.rohar@gmail.com> [150218 16:03]:
> > > --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > @@ -3938,8 +3938,9 @@ int __init omap3xxx_hwmod_init(void)
> > > 
> > >  	if (r < 0)
> > >  	
> > >  		return r;
> > > 
> > > -	/* Register GP-only hwmod links. */
> > > -	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > +//	/* Register GP-only hwmod links. */
> > > +//	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > +	if (h_gp) {
> > > 
> > >  		r = omap_hwmod_register_links(h_gp);
> > >  		if (r < 0)
> > >  		
> > >  			return r;
> > > 
> > > aes hwmod is defined in GP-only hwmod...
> > 
> > Doesn't this depend on the bootloader version of n900 to work?
> > 
> > Regards,
> > 
> > Tony
> 
> Ok, it looks like second patch (omap_hwmod_3xxx_data.c) needs 
> that aes-enabled bootloader.

OK we need some runtime detection somehow for what's enabled..
 
> But first patch (omap3.dtsi) is needed for proper definitions. 
> Otherwise omap-aes driver will never work on DT systems.

Yeah that one makes sense to me, I guess you'll do a proper
fix for that one.

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Pali Rohár Feb. 24, 2015, 5:38 p.m. UTC | #3
On Tuesday 24 February 2015 18:25:12 Tony Lindgren wrote:
> * Pali Rohár <pali.rohar@gmail.com> [150218 16:03]:
> > On Wednesday 18 February 2015 22:02:30 Pali Rohár wrote:
> > > On Wednesday 18 February 2015 13:21:03 Pali Rohár wrote:
> > > > Hello,
> > > > 
> > > > I tried to test OMAP AES driver on Nokia N900 with
> > > > special Nokia bootloader which enable L3 firewall for
> > > > OMAP AES HW support.
> > > > 
> > > > I modified arch/arm/boot/dts/omap34xx-hs.dtsi file and
> > > > commented aes line which disable aes support in DT.
> > > > 
> > > > Then I booted kernel and loaded omap-aes.ko module. And
> > > > I got this output in dmesg:
> > > > 
> > > > [    0.222930] platform 480c5000.aes: Cannot lookup
> > > > hwmod 'aes' [   27.758148] omap-aes 480c5000.aes:
> > > > _od_fail_runtime_resume: FIXME: missing hwmod/omap_dev
> > > > info [   27.765960] omap-aes 480c5000.aes:
> > > > omap_aes_probe: failed to get_sync(-19)
> > > > [   29.257690] omap-aes 480c5000.aes: initialization
> > > > failed.
> > > > 
> > > > So it looks like some initialization data are missing
> > > > for Nokia N900 (omap3430 device).
> > > > 
> > > > Can somebody look at it? I have patched 2.6.28 kernel
> > > > were omap aes support on this N900 device (with special
> > > > bootloader) is working.
> > > > 
> > > > Maybe some other data are missing in DT or in hwmod?
> > > 
> > > dma channels are missing in DT. I applied this patch:
> > > 
> > > diff --git a/arch/arm/boot/dts/omap3.dtsi
> > > b/arch/arm/boot/dts/omap3.dtsi index 01b7111..473d460
> > > 100644 --- a/arch/arm/boot/dts/omap3.dtsi
> > > +++ b/arch/arm/boot/dts/omap3.dtsi
> > > @@ -92,6 +92,8 @@
> > > 
> > >  			ti,hwmods = "aes";
> > >  			reg = <0x480c5000 0x50>;
> > >  			interrupts = <0>;
> > > 
> > > +			dmas = <&sdma 65 &sdma 66>;
> > > +			dma-names = "tx", "rx";
> > > 
> > >  		};
> > >  		
> > >  		prm: prm@48306000 {
> > > 
> > > @@ -550,6 +552,8 @@
> > > 
> > >  			ti,hwmods = "sham";
> > >  			reg = <0x480c3000 0x64>;
> > >  			interrupts = <49>;
> > > 
> > > +			dmas = <&sdma 96>;
> > > +			dma-names = "rx";
> > > 
> > >  		};
> > >  		
> > >  		smartreflex_core: smartreflex@480cb000 {
> > > 
> > > and omap-aes driver was successfully loaded. now it is in
> > > /proc/crypto
> > > 
> > > I copied dma names and numbers from file
> > > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > 
> > And I also needed to apply this patch:
> > 
> > diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index
> > 11468ee..3281f30 100644
> > --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > @@ -3938,8 +3938,9 @@ int __init omap3xxx_hwmod_init(void)
> > 
> >  	if (r < 0)
> >  	
> >  		return r;
> > 
> > -	/* Register GP-only hwmod links. */
> > -	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > +//	/* Register GP-only hwmod links. */
> > +//	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > +	if (h_gp) {
> > 
> >  		r = omap_hwmod_register_links(h_gp);
> >  		if (r < 0)
> >  		
> >  			return r;
> > 
> > aes hwmod is defined in GP-only hwmod...
> 
> Doesn't this depend on the bootloader version of n900 to work?
> 
> Regards,
> 
> Tony

Ok, it looks like second patch (omap_hwmod_3xxx_data.c) needs 
that aes-enabled bootloader.

But first patch (omap3.dtsi) is needed for proper definitions. 
Otherwise omap-aes driver will never work on DT systems.
Pali Rohár Feb. 24, 2015, 5:49 p.m. UTC | #4
On Tuesday 24 February 2015 18:37:34 Tony Lindgren wrote:
> * Pali Rohár <pali.rohar@gmail.com> [150224 09:42]:
> > On Tuesday 24 February 2015 18:25:12 Tony Lindgren wrote:
> > > * Pali Rohár <pali.rohar@gmail.com> [150218 16:03]:
> > > > --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > > +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > > @@ -3938,8 +3938,9 @@ int __init
> > > > omap3xxx_hwmod_init(void)
> > > > 
> > > >  	if (r < 0)
> > > >  	
> > > >  		return r;
> > > > 
> > > > -	/* Register GP-only hwmod links. */
> > > > -	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > > +//	/* Register GP-only hwmod links. */
> > > > +//	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > > +	if (h_gp) {
> > > > 
> > > >  		r = omap_hwmod_register_links(h_gp);
> > > >  		if (r < 0)
> > > >  		
> > > >  			return r;
> > > > 
> > > > aes hwmod is defined in GP-only hwmod...
> > > 
> > > Doesn't this depend on the bootloader version of n900 to
> > > work?
> > > 
> > > Regards,
> > > 
> > > Tony
> > 
> > Ok, it looks like second patch (omap_hwmod_3xxx_data.c)
> > needs that aes-enabled bootloader.
> 
> OK we need some runtime detection somehow for what's enabled..
> 

What about checking DT if omap-aes is disabled or not?

> > But first patch (omap3.dtsi) is needed for proper
> > definitions. Otherwise omap-aes driver will never work on
> > DT systems.
> 
> Yeah that one makes sense to me, I guess you'll do a proper
> fix for that one.
> 
> Regards,
> 
> Tony

Yes, I will send patches via correct git format-patch.
Tony Lindgren Feb. 24, 2015, 5:50 p.m. UTC | #5
* Pali Rohár <pali.rohar@gmail.com> [150224 09:52]:
> On Tuesday 24 February 2015 18:37:34 Tony Lindgren wrote:
> > * Pali Rohár <pali.rohar@gmail.com> [150224 09:42]:
> > > On Tuesday 24 February 2015 18:25:12 Tony Lindgren wrote:
> > > > * Pali Rohár <pali.rohar@gmail.com> [150218 16:03]:
> > > > > --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > > > +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > > > @@ -3938,8 +3938,9 @@ int __init
> > > > > omap3xxx_hwmod_init(void)
> > > > > 
> > > > >  	if (r < 0)
> > > > >  	
> > > > >  		return r;
> > > > > 
> > > > > -	/* Register GP-only hwmod links. */
> > > > > -	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > > > +//	/* Register GP-only hwmod links. */
> > > > > +//	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > > > +	if (h_gp) {
> > > > > 
> > > > >  		r = omap_hwmod_register_links(h_gp);
> > > > >  		if (r < 0)
> > > > >  		
> > > > >  			return r;
> > > > > 
> > > > > aes hwmod is defined in GP-only hwmod...
> > > > 
> > > > Doesn't this depend on the bootloader version of n900 to
> > > > work?
> > > > 
> > > > Regards,
> > > > 
> > > > Tony
> > > 
> > > Ok, it looks like second patch (omap_hwmod_3xxx_data.c)
> > > needs that aes-enabled bootloader.
> > 
> > OK we need some runtime detection somehow for what's enabled..
> > 
> 
> What about checking DT if omap-aes is disabled or not?

In general that's not a good solution as marking something with
status = "disabled" means the device is completely ignored and
we will never have the struct device entry created for it and
we can never idle it.

But in this case however, it may be the right thing to do if the
secure mode is using that device.

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Pavel Machek Feb. 25, 2015, 9:50 a.m. UTC | #6
On Tue 2015-02-24 09:37:34, Tony Lindgren wrote:
> * Pali Rohár <pali.rohar@gmail.com> [150224 09:42]:
> > On Tuesday 24 February 2015 18:25:12 Tony Lindgren wrote:
> > > * Pali Rohár <pali.rohar@gmail.com> [150218 16:03]:
> > > > --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > > +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > > @@ -3938,8 +3938,9 @@ int __init omap3xxx_hwmod_init(void)
> > > > 
> > > >  	if (r < 0)
> > > >  	
> > > >  		return r;
> > > > 
> > > > -	/* Register GP-only hwmod links. */
> > > > -	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > > +//	/* Register GP-only hwmod links. */
> > > > +//	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > > +	if (h_gp) {
> > > > 
> > > >  		r = omap_hwmod_register_links(h_gp);
> > > >  		if (r < 0)
> > > >  		
> > > >  			return r;
> > > > 
> > > > aes hwmod is defined in GP-only hwmod...
> > > 
> > > Doesn't this depend on the bootloader version of n900 to work?
> > > 
> > > Regards,
> > > 
> > > Tony
> > 
> > Ok, it looks like second patch (omap_hwmod_3xxx_data.c) needs 
> > that aes-enabled bootloader.
> 
> OK we need some runtime detection somehow for what's enabled..
>  
> > But first patch (omap3.dtsi) is needed for proper definitions. 
> > Otherwise omap-aes driver will never work on DT systems.
> 
> Yeah that one makes sense to me, I guess you'll do a proper
> fix for that one.

If this depends on bootloader... would command line parameter be right
solution here?
									Pavel
Pali Rohár Feb. 25, 2015, 10:18 a.m. UTC | #7
On Wednesday 25 February 2015 10:50:00 Pavel Machek wrote:
> On Tue 2015-02-24 09:37:34, Tony Lindgren wrote:
> > * Pali Rohár <pali.rohar@gmail.com> [150224 09:42]:
> > > On Tuesday 24 February 2015 18:25:12 Tony Lindgren wrote:
> > > > * Pali Rohár <pali.rohar@gmail.com> [150218 16:03]:
> > > > > --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > > > +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> > > > > @@ -3938,8 +3938,9 @@ int __init
> > > > > omap3xxx_hwmod_init(void)
> > > > > 
> > > > >  	if (r < 0)
> > > > >  	
> > > > >  		return r;
> > > > > 
> > > > > -	/* Register GP-only hwmod links. */
> > > > > -	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > > > +//	/* Register GP-only hwmod links. */
> > > > > +//	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
> > > > > +	if (h_gp) {
> > > > > 
> > > > >  		r = omap_hwmod_register_links(h_gp);
> > > > >  		if (r < 0)
> > > > >  		
> > > > >  			return r;
> > > > > 
> > > > > aes hwmod is defined in GP-only hwmod...
> > > > 
> > > > Doesn't this depend on the bootloader version of n900 to
> > > > work?
> > > > 
> > > > Regards,
> > > > 
> > > > Tony
> > > 
> > > Ok, it looks like second patch (omap_hwmod_3xxx_data.c)
> > > needs that aes-enabled bootloader.
> > 
> > OK we need some runtime detection somehow for what's
> > enabled..
> > 
> > > But first patch (omap3.dtsi) is needed for proper
> > > definitions. Otherwise omap-aes driver will never work on
> > > DT systems.
> > 
> > Yeah that one makes sense to me, I guess you'll do a proper
> > fix for that one.
> 
> If this depends on bootloader... would command line parameter
> be right solution here?
> 									Pavel

Problem is that we need to disable AES in:

* DT file
* hwmod source code
* ... and maybe on other places too ...

So I think it make sense to check if AES is disabled in DT and 
add this check to other parts of kernel source code where needed.
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 11468ee..3281f30 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -3938,8 +3938,9 @@  int __init omap3xxx_hwmod_init(void)
 	if (r < 0)
 		return r;
 
-	/* Register GP-only hwmod links. */
-	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
+//	/* Register GP-only hwmod links. */
+//	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
+	if (h_gp) {
 		r = omap_hwmod_register_links(h_gp);
 		if (r < 0)
 			return r;