[Bug 231713] mmc_calculate_clock() does not work properly for cards with bus_timing_normal only

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Tue Sep 25 12:35:19 UTC 2018


            Bug ID: 231713
           Summary: mmc_calculate_clock() does not work properly for cards
                    with bus_timing_normal only
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: bugs at FreeBSD.org
          Reporter: sebastian.huber at embedded-brains.de

We have

static int
mmc_calculate_clock(struct mmc_softc *sc)
         * HS400 must be tuned in HS200 mode, so in case of HS400 we begin
         * with HS200 following the sequence as described in " HS200
         * timing mode selection" of the eMMC specification v5.1, too, and
         * switch to max_timing later.  HS400ES requires no tuning and, thus,
         * can be switch to directly, but requires the same detour via high
         * speed mode as does HS400 (see mmc_switch_to_hs400()).
        hs400 = max_timing == bus_timing_mmc_hs400;
        timing = hs400 == true ? bus_timing_mmc_hs200 : max_timing;
        for (i = 0; i < sc->child_count; i++) {
                ivar = device_get_ivars(sc->child_list[i]);
                if ((ivar->timings & ~(1 << bus_timing_normal)) == 0)
                /* Set clock (must be done before initial tuning). */
                mmcbr_set_clock(dev, max_dtr);
        (void)mmc_select_card(sc, 0);
        return (max_dtr);

So, for cards with ivar->timings == bus_timing_normal the mmcbr_set_clock(dev,
max_dtr) is not called. This way the clock stays at SD_MMC_CARD_ID_FREQUENCY ==
400kHz. I think this problem was introduced with:

commit 398d5fc6afb7ce20f0cf9ecc4fe286e72afdbf29
Author: marius <marius at FreeBSD.org>
Date:   Sun Jul 23 16:11:47 2017 +0000

    o Add support for eMMC HS200 and HS400 bus speed modes at 200 MHz to
      sdhci(4), mmc(4) and mmcsd(4). For the most part, this consists of:

You are receiving this mail because:
You are the assignee for the bug.

More information about the freebsd-bugs mailing list