Date: Thu, 7 Nov 2013 07:20:01 GMT From: Ganbold Tsagaankhuu <ganbold@gmail.com> To: freebsd-arm@FreeBSD.org Subject: Re: arm/183740: mutex on some arm hardware requires dcache enabled Message-ID: <201311070720.rA77K15R028531@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR arm/183740; it has been noted by GNATS. From: Ganbold Tsagaankhuu <ganbold@gmail.com> To: John Wehle <john@feith.com> Cc: freebsd-gnats-submit@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@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@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-arm > To unsubscribe, send any mail to "freebsd-arm-unsubscribe@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@feith.com" target=3D"_blank">john@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@freebsd.org">freebsd-arm@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@freebsd.org">freebsd-arm-unsubscribe@freebsd.org</a>"<br> </blockquote></div><br></div></div> --001a11c1feb69c14b604ea910ed6--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311070720.rA77K15R028531>