From owner-freebsd-arm@FreeBSD.ORG Thu Nov 7 07:10:00 2013 Return-Path: Delivered-To: freebsd-arm@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A7971AAA for ; Thu, 7 Nov 2013 07:10:00 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 887382FD7 for ; Thu, 7 Nov 2013 07:10:00 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id rA77A0Mk024496 for ; Thu, 7 Nov 2013 07:10:00 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id rA77A0x0024495; Thu, 7 Nov 2013 07:10:00 GMT (envelope-from gnats) Resent-Date: Thu, 7 Nov 2013 07:10:00 GMT Resent-Message-Id: <201311070710.rA77A0x0024495@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-arm@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, John Wehle Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 64EB48C6 for ; Thu, 7 Nov 2013 07:07:11 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from oldred.freebsd.org (oldred.freebsd.org [8.8.178.121]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 530812FBA for ; Thu, 7 Nov 2013 07:07:11 +0000 (UTC) Received: from oldred.freebsd.org ([127.0.1.6]) by oldred.freebsd.org (8.14.5/8.14.7) with ESMTP id rA777BDE084148 for ; Thu, 7 Nov 2013 07:07:11 GMT (envelope-from nobody@oldred.freebsd.org) Received: (from nobody@localhost) by oldred.freebsd.org (8.14.5/8.14.5/Submit) id rA777BvG084136; Thu, 7 Nov 2013 07:07:11 GMT (envelope-from nobody) Message-Id: <201311070707.rA777BvG084136@oldred.freebsd.org> Date: Thu, 7 Nov 2013 07:07:11 GMT From: John Wehle To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Subject: arm/183740: mutex on some arm hardware requires dcache enabled X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Nov 2013 07:10:00 -0000 >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; >Release-Note: >Audit-Trail: >Unformatted: