From owner-freebsd-arm@FreeBSD.ORG Tue Jan 20 19:58:37 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 79FF31065672 for ; Tue, 20 Jan 2009 19:58:37 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from cmail.optima.ua (cmail.optima.ua [195.248.191.121]) by mx1.freebsd.org (Postfix) with ESMTP id F29F88FC1A for ; Tue, 20 Jan 2009 19:58:36 +0000 (UTC) (envelope-from mav@FreeBSD.org) X-Spam-Flag: SKIP X-Spam-Yversion: Spamooborona-2.1.0 Received: from [212.86.226.226] (account mav@alkar.net HELO mavbook.mavhome.dp.ua) by cmail.optima.ua (CommuniGate Pro SMTP 5.2.9) with ESMTPSA id 232101379; Tue, 20 Jan 2009 21:58:35 +0200 Message-ID: <49762CEF.1000405@FreeBSD.org> Date: Tue, 20 Jan 2009 21:58:39 +0200 From: Alexander Motin User-Agent: Thunderbird 2.0.0.19 (X11/20090118) MIME-Version: 1.0 To: "M. Warner Losh" References: <20090120.114051.-854291995.imp@bsdimp.com> <4976215B.40302@FreeBSD.org> <20090120.122312.1543793985.imp@bsdimp.com> <20090120.123230.-272218744.imp@bsdimp.com> In-Reply-To: <20090120.123230.-272218744.imp@bsdimp.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-arm@freebsd.org Subject: Re: Mount root from SD card? X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jan 2009 19:58:37 -0000 M. Warner Losh wrote: > In message: <20090120.122312.1543793985.imp@bsdimp.com> > "M. Warner Losh" writes: > : : IMHO it is incorrect to disable 4bit mode on that stage, it is too late > : : there. It should be done at controller capabilities announcement stage. > : : If you are not objecting, I would remove that wire4 variable. > : > : I am objecting. The code is there so that the rest of the driver does > : the right thing when doing 4-bit. It needs to be a capability too. > : > : However, before we go monkeying with this, we need to find the > : underlying bug. > > I've got the following patch, untested, that I think does what I think > needs to be done. Not sure about the return value from update_ios... > > Index: at91_mci.c > =================================================================== > --- at91_mci.c (revision 187479) > +++ at91_mci.c (working copy) > @@ -201,7 +201,10 @@ > sc->host.f_min = 375000; > sc->host.f_max = 30000000; > sc->host.host_ocr = MMC_OCR_320_330 | MMC_OCR_330_340; > - sc->host.caps = MMC_CAP_4_BIT_DATA; > + if (sc->wire4) > + sc->host.caps = MMC_CAP_4_BIT_DATA; > + else > + sc->host.caps = 0; > child = device_add_child(dev, "mmc", 0); > device_set_ivars(dev, &sc->host); > err = bus_generic_attach(dev); Ok. I agree with this part. If for some reason you really need this wire4 variable, this is the right way to use it. > @@ -295,6 +298,8 @@ > clkdiv = (at91_master_clock / ios->clock) / 2; > } > if (ios->bus_width == bus_width_4 && sc->wire4) > + return EINVAL; > + if (ios->bus_width == bus_width_4) > WR4(sc, MCI_SDCR, RD4(sc, MCI_SDCR) | MCI_SDCR_SDCBUS); > else > WR4(sc, MCI_SDCR, RD4(sc, MCI_SDCR) & ~MCI_SDCR_SDCBUS); > This part is correct, but useless. If the first part have not set MMC_CAP_4_BIT_DATA, then mmc layer will never request bus_width_4. That's why I have proposed to remove " && sc->wire4" check from here. -- Alexander Motin