https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231713
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: b...@freebsd.org Reporter: sebastian.hu...@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 "6.6.2.2 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) continue; ... /* Set clock (must be done before initial tuning). */ mmcbr_set_clock(dev, max_dtr); mmcbr_update_ios(dev); ... } (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 <mar...@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. _______________________________________________ freebsd-bugs@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"