On Sun, Apr 24, 2016 at 08:23:53AM +0000, Karel W. Dingeldey wrote:
>  
> 
> On 2016-04-22 10:32, Jonathan Gray wrote: 
> 
> > On Fri, Apr 22, 2016 at 10:10:10AM +0000, Karel W. Dingeldey wrote: 
> > 
> >> Hi everyone,
> >> 
> >> I'm currently using OpenBSD 5.7 and 5.8 on a couple of BBBs -- works
> >> like a charm.
> >> 
> >> Since 5.9 came out a couple of days ago, I wanted to use it on another
> >> BBB (new install).
> >> 
> >> When it comes to stating which hard drive it should install to (eMMC in
> >> this instance), I can only select sd0, which is the SD card. For some
> >> reason the eMMC isn't recognised anymore in this version.
> >> 
> >> In the change log I saw that some amendments were made to the sdmmc
> >> driver (supposedly to improve eMMC support on devices like the BBB). In
> >> my case it has quite the contrary effect.
> >> 
> >> Anyone a similar experience? Maybe a hint how to sort it out?
> >> 
> >> ThanksKarel
> > 
> > Which version of u-boot are you using? It seems newer versions may be
> > causing problems.
> > 
> > Can you include the console output here?
> 
> Output from the installation boot (are second and third line the
> issue?):

Try the following fix adapted from FreeBSD.  This is also in the
latest armv7 snapshot.

Index: ommmc.c
===================================================================
RCS file: /cvs/src/sys/arch/armv7/omap/ommmc.c,v
retrieving revision 1.20
diff -u -p -r1.20 ommmc.c
--- ommmc.c     7 May 2016 00:18:23 -0000       1.20
+++ ommmc.c     19 May 2016 09:55:22 -0000
@@ -1041,7 +1041,18 @@ ommmc_soft_reset(struct ommmc_softc *sc,
        DPRINTF(1,("%s: software reset reg=%#x\n", DEVNAME(sc), mask));
 
        HSET4(sc, MMCHS_SYSCTL, mask);
-       delay(10);
+       /*
+        * If we read the software reset register too fast after writing it we
+        * can get back a zero that means the reset hasn't started yet rather
+        * than that the reset is complete. Per TI recommendations, work around
+        * it by reading until we see the reset bit asserted, then read until
+        * it's clear.
+        */
+       for (timo = 1000; timo > 0; timo--) {
+               if (ISSET(HREAD4(sc, MMCHS_SYSCTL), mask))
+                       break;
+               delay(1);
+       }
        for (timo = 1000; timo > 0; timo--) {
                if (!ISSET(HREAD4(sc, MMCHS_SYSCTL), mask))
                        break;

Reply via email to