arm/183740: mutex on some arm hardware requires dcache enabled

Ganbold Tsagaankhuu ganbold at gmail.com
Thu Nov 7 07:20:02 UTC 2013


The following reply was made to PR arm/183740; it has been noted by GNATS.

From: Ganbold Tsagaankhuu <ganbold at gmail.com>
To: John Wehle <john at feith.com>
Cc: freebsd-gnats-submit at freebsd.org
Subject: Re: arm/183740: mutex on some arm hardware requires dcache enabled
Date: Thu, 7 Nov 2013 15:17:23 +0800

 --001a11c1feb69c14b604ea910ed6
 Content-Type: text/plain; charset=ISO-8859-1
 
 John,
 
 
 On Thu, Nov 7, 2013 at 3:07 PM, John Wehle <john at feith.com> wrote:
 
 >
 > >Number:         183740
 > >Category:       arm
 > >Synopsis:       mutex on some arm hardware requires dcache enabled
 > >Confidential:   no
 > >Severity:       non-critical
 > >Priority:       low
 > >Responsible:    freebsd-arm
 > >State:          open
 > >Quarter:
 > >Keywords:
 > >Date-Required:
 > >Class:          sw-bug
 > >Submitter-Id:   current-users
 > >Arrival-Date:   Thu Nov 07 07:10:00 UTC 2013
 > >Closed-Date:
 > >Last-Modified:
 > >Originator:     John Wehle
 > >Release:        FreeBSD svn 257205
 > >Organization:
 > Personal
 > >Environment:
 > Not Yet
 > >Description:
 > In my spare time I'm working on bringing FreeBSD up on amlogic based
 > arm processors.  While working through various bootstrap issues I got
 > to the point where initarm calls pmap_bootstrap only to have it splat.
 >
 > What happens is pmap_bootstrap calls pmap_extract which does
 > PMAP_LOCK(pmap).
 > This trys to acquire a mutex which invokes atomics that use ldrex / strex.
 >
 > The ARM documentation at:
 >
 >
 > http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0464d/CHDIBJGE.html
 >
 > notes that the L1 memory system has an internal exclusive monitor which
 > handles ldrex / strex accesses.
 >
 > The README at:
 >
 >   https://github.com/dwelch67/raspberrypi/tree/master/extest
 >
 > has a nice write up which explains some of the wrinkles regarding hardware
 > and ldrex / strex.
 >
 > The attached patch enables the dcache and suffices to get me through
 > initarm into mi_startup (I'm not to a console login yet ... however
 > I'm significantly further along).
 >
 > -- John
 >
 > >How-To-Repeat:
 >
 > >Fix:
 > Enable the dcache prior to using a mutex.
 >
 > Patch attached with submission follows:
 >
 > --- sys/arm/arm/machdep.c.ORIGINAL      2013-10-27 01:15:39.000000000 -0400
 > +++ sys/arm/arm/machdep.c       2013-11-07 01:43:01.000000000 -0500
 > @@ -1481,6 +1483,12 @@ initarm(struct arm_boot_params *abp)
 >          */
 >         cpu_idcache_wbinv_all();
 >
 > +       /*
 > +        * Atomics invoked by mutex use ldrex / strex which on some
 > +        * hardware requires the L1 cache.
 > +        */
 > +       cpu_control(CPU_CONTROL_DC_ENABLE, CPU_CONTROL_DC_ENABLE);
 > +
 >         /* Set stack for exception handlers */
 >         data_abort_handler_address = (u_int)data_abort_handler;
 >         prefetch_abort_handler_address = (u_int)prefetch_abort_handler;
 >
 >
 What kind of Amlogic board you are working on? That could be interesting.
 
 As for the patch can you try to put it in initarm_late_init() of your board
 machdep code and try?
 I meant like in /usr/src/sys/arm/rockchip/rk30xx_machdep.c
 Please let us know.
 
 thanks,
 
 Ganbold
 
 
 
 >
 > >Release-Note:
 > >Audit-Trail:
 > >Unformatted:
 > _______________________________________________
 > freebsd-arm at freebsd.org mailing list
 > http://lists.freebsd.org/mailman/listinfo/freebsd-arm
 > To unsubscribe, send any mail to "freebsd-arm-unsubscribe at freebsd.org"
 >
 
 --001a11c1feb69c14b604ea910ed6
 Content-Type: text/html; charset=ISO-8859-1
 Content-Transfer-Encoding: quoted-printable
 
 <div dir=3D"ltr">John,<div class=3D"gmail_extra"><br><br><div class=3D"gmai=
 l_quote">On Thu, Nov 7, 2013 at 3:07 PM, John Wehle <span dir=3D"ltr"><<=
 a href=3D"mailto:john at feith.com" target=3D"_blank">john at feith.com</a>></=
 span> wrote:<br>
 <blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
 x #ccc solid;padding-left:1ex"><br>
 >Number: =A0 =A0 =A0 =A0 183740<br>
 >Category: =A0 =A0 =A0 arm<br>
 >Synopsis: =A0 =A0 =A0 mutex on some arm hardware requires dcache enable=
 d<br>
 >Confidential: =A0 no<br>
 >Severity: =A0 =A0 =A0 non-critical<br>
 >Priority: =A0 =A0 =A0 low<br>
 >Responsible: =A0 =A0freebsd-arm<br>
 >State: =A0 =A0 =A0 =A0 =A0open<br>
 >Quarter:<br>
 >Keywords:<br>
 >Date-Required:<br>
 >Class: =A0 =A0 =A0 =A0 =A0sw-bug<br>
 >Submitter-Id: =A0 current-users<br>
 >Arrival-Date: =A0 Thu Nov 07 07:10:00 UTC 2013<br>
 >Closed-Date:<br>
 >Last-Modified:<br>
 >Originator: =A0 =A0 John Wehle<br>
 >Release: =A0 =A0 =A0 =A0FreeBSD svn 257205<br>
 >Organization:<br>
 Personal<br>
 >Environment:<br>
 Not Yet<br>
 >Description:<br>
 In my spare time I'm working on bringing FreeBSD up on amlogic based<br=
 >
 arm processors. =A0While working through various bootstrap issues I got<br>
 to the point where initarm calls pmap_bootstrap only to have it splat.<br>
 <br>
 What happens is pmap_bootstrap calls pmap_extract which does PMAP_LOCK(pmap=
 ).<br>
 This trys to acquire a mutex which invokes atomics that use ldrex / strex.<=
 br>
 <br>
 The ARM documentation at:<br>
 <br>
 =A0 <a href=3D"http://infocenter.arm.com/help/index.jsp?topic=3D/com.arm.do=
 c.ddi0464d/CHDIBJGE.html" target=3D"_blank">http://infocenter.arm.com/help/=
 index.jsp?topic=3D/com.arm.doc.ddi0464d/CHDIBJGE.html</a><br>
 <br>
 notes that the L1 memory system has an internal exclusive monitor which<br>
 handles ldrex / strex accesses.<br>
 <br>
 The README at:<br>
 <br>
 =A0 <a href=3D"https://github.com/dwelch67/raspberrypi/tree/master/extest" =
 target=3D"_blank">https://github.com/dwelch67/raspberrypi/tree/master/extes=
 t</a><br>
 <br>
 has a nice write up which explains some of the wrinkles regarding hardware<=
 br>
 and ldrex / strex.<br>
 <br>
 The attached patch enables the dcache and suffices to get me through<br>
 initarm into mi_startup (I'm not to a console login yet ... however<br>
 I'm significantly further along).<br>
 <br>
 -- John<br>
 <br>
 >How-To-Repeat:<br>
 <br>
 >Fix:<br>
 Enable the dcache prior to using a mutex.<br>
 <br>
 Patch attached with submission follows:<br>
 <br>
 --- sys/arm/arm/machdep.c.ORIGINAL =A0 =A0 =A02013-10-27 01:15:39.000000000=
  -0400<br>
 +++ sys/arm/arm/machdep.c =A0 =A0 =A0 2013-11-07 01:43:01.000000000 -0500<b=
 r>
 @@ -1481,6 +1483,12 @@ initarm(struct arm_boot_params *abp)<br>
 =A0 =A0 =A0 =A0 =A0*/<br>
 =A0 =A0 =A0 =A0 cpu_idcache_wbinv_all();<br>
 <br>
 + =A0 =A0 =A0 /*<br>
 + =A0 =A0 =A0 =A0* Atomics invoked by mutex use ldrex / strex which on some=
 <br>
 + =A0 =A0 =A0 =A0* hardware requires the L1 cache.<br>
 + =A0 =A0 =A0 =A0*/<br>
 + =A0 =A0 =A0 cpu_control(CPU_CONTROL_DC_ENABLE, CPU_CONTROL_DC_ENABLE);<br=
 >
 +<br>
 =A0 =A0 =A0 =A0 /* Set stack for exception handlers */<br>
 =A0 =A0 =A0 =A0 data_abort_handler_address =3D (u_int)data_abort_handler;<b=
 r>
 =A0 =A0 =A0 =A0 prefetch_abort_handler_address =3D (u_int)prefetch_abort_ha=
 ndler;<br>
 <br></blockquote><div><br></div><div>What kind of Amlogic board you are wor=
 king on? That could be interesting.</div><div><br></div><div>As for the pat=
 ch can you try to put it in initarm_late_init() of your board machdep code =
 and try?</div>
 <div>I meant like in /usr/src/sys/arm/rockchip/rk30xx_machdep.c</div><div>P=
 lease let us know.</div><div><br></div><div>thanks,</div><div><br></div><di=
 v>Ganbold</div><div><br></div><div>=A0</div><blockquote class=3D"gmail_quot=
 e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 
 <br>
 >Release-Note:<br>
 >Audit-Trail:<br>
 >Unformatted:<br>
 _______________________________________________<br>
 <a href=3D"mailto:freebsd-arm at freebsd.org">freebsd-arm at freebsd.org</a> mail=
 ing list<br>
 <a href=3D"http://lists.freebsd.org/mailman/listinfo/freebsd-arm" target=3D=
 "_blank">http://lists.freebsd.org/mailman/listinfo/freebsd-arm</a><br>
 To unsubscribe, send any mail to "<a href=3D"mailto:freebsd-arm-unsubs=
 cribe at freebsd.org">freebsd-arm-unsubscribe at freebsd.org</a>"<br>
 </blockquote></div><br></div></div>
 
 --001a11c1feb69c14b604ea910ed6--


More information about the freebsd-arm mailing list