From owner-freebsd-current@FreeBSD.ORG Tue Jan 10 21:07:00 2012 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 421DE1065670 for ; Tue, 10 Jan 2012 21:07:00 +0000 (UTC) (envelope-from freebsd@damnhippie.dyndns.org) Received: from qmta13.emeryville.ca.mail.comcast.net (qmta13.emeryville.ca.mail.comcast.net [76.96.27.243]) by mx1.freebsd.org (Postfix) with ESMTP id 146B38FC19 for ; Tue, 10 Jan 2012 21:06:58 +0000 (UTC) Received: from omta10.emeryville.ca.mail.comcast.net ([76.96.30.28]) by qmta13.emeryville.ca.mail.comcast.net with comcast id KwqW1i0030cQ2SLADwtoUx; Tue, 10 Jan 2012 20:53:48 +0000 Received: from damnhippie.dyndns.org ([24.8.232.202]) by omta10.emeryville.ca.mail.comcast.net with comcast id Kwtn1i00r4NgCEG8Wwtn1v; Tue, 10 Jan 2012 20:53:48 +0000 Received: from [172.22.42.240] (revolution.hippie.lan [172.22.42.240]) by damnhippie.dyndns.org (8.14.3/8.14.3) with ESMTP id q0AKrjej026746; Tue, 10 Jan 2012 13:53:45 -0700 (MST) (envelope-from freebsd@damnhippie.dyndns.org) From: Ian Lepore To: Andriy Gapon In-Reply-To: <4F0C9D14.60705@FreeBSD.org> References: <4F0C9D14.60705@FreeBSD.org> Content-Type: text/plain Date: Tue, 10 Jan 2012 13:53:45 -0700 Message-Id: <1326228825.2419.22.camel@revolution.hippie.lan> Mime-Version: 1.0 X-Mailer: Evolution 2.26.0 FreeBSD GNOME Team Port Content-Transfer-Encoding: 7bit Cc: FreeBSD current Subject: Re: bus dma: a flag/quirk for page zero X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Jan 2012 21:07:00 -0000 On Tue, 2012-01-10 at 22:18 +0200, Andriy Gapon wrote: > > Some hardware interfaces may reserve a special meaning for a (physical) memory > address value of zero. One example is the OHCI specification where a zero value > in CurrentBufferPointer doesn't mean a physical address, but has a reserved > meaning. To be honest I don't have another example :) but don't preclude its > existence. > > To deal with this peculiarity we could use a special flag/quirk that would > instruct the bus dma code to never use the page zero for communication with the > hardware. > Here's a proof of concept patch that implements the idea: > http://people.freebsd.org/~avg/usb-dma-pagezero.diff > > Some concerns: > - not sure if BUS_DMA_NO_PAGEZERO is the best name for the flag > - the patch implements the flag only for x86 at the moment > - usb code uses the flag regardless of the actual controller type > > What do you think? I think another way to handle this, one that doesn't require modifying the busdma_machdep implementation for every architecture, would be for usb_dma_tag_create() to set lowaddr to zero and provide a filter func that filters based on both the value zero and the expression currently being passed as lowaddr. At least, I think that's how the filterfunc stuff is supposed to work, I've never actually coded a busdma filter. This has the advantage I call "locality of strangeness." If only the OHCI hardware needs this strange processing, and it seems like in the future this strangeness will still be more the exception than the rule, then the strangeness is best kept close to the place where it's needed, rather than being spread out all over the place (lots of machdep places). -- Ian