Module Name:    src
Committed By:   skrll
Date:           Thu Oct 24 10:50:31 UTC 2024

Modified Files:
        src/sys/dev/sdmmc: sdmmc_mem.c

Log Message:
Don't stop sd card initialization early when bus clock is already set
to the target rate.

>From jmnceill@ and tested by me on beagle-v.


To generate a diff of this commit:
cvs rdiff -u -r1.76 -r1.77 src/sys/dev/sdmmc/sdmmc_mem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/sdmmc/sdmmc_mem.c
diff -u src/sys/dev/sdmmc/sdmmc_mem.c:1.76 src/sys/dev/sdmmc/sdmmc_mem.c:1.77
--- src/sys/dev/sdmmc/sdmmc_mem.c:1.76	Fri Oct 18 11:03:52 2024
+++ src/sys/dev/sdmmc/sdmmc_mem.c	Thu Oct 24 10:50:31 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdmmc_mem.c,v 1.76 2024/10/18 11:03:52 jmcneill Exp $	*/
+/*	$NetBSD: sdmmc_mem.c,v 1.77 2024/10/24 10:50:31 skrll Exp $	*/
 /*	$OpenBSD: sdmmc_mem.c,v 1.10 2009/01/09 10:55:22 jsg Exp $	*/
 
 /*
@@ -45,7 +45,7 @@
 /* Routines for SD/MMC memory cards. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sdmmc_mem.c,v 1.76 2024/10/18 11:03:52 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdmmc_mem.c,v 1.77 2024/10/24 10:50:31 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sdmmc.h"
@@ -904,20 +904,19 @@ skipswitchfuncs:
 	/* update bus clock */
 	if (sc->sc_busclk > sf->csd.tran_speed)
 		sc->sc_busclk = sf->csd.tran_speed;
-	if (sc->sc_busclk == bus_clock && sc->sc_busddr == ddr)
-		return 0;
+	if (sc->sc_busclk != bus_clock || sc->sc_busddr != ddr) {
+		/* change bus clock */
+		error = sdmmc_chip_bus_clock(sc->sc_sct, sc->sc_sch, sc->sc_busclk,
+		    ddr);
+		if (error) {
+			aprint_error_dev(sc->sc_dev, "can't change bus clock\n");
+			return error;
+		}
 
-	/* change bus clock */
-	error = sdmmc_chip_bus_clock(sc->sc_sct, sc->sc_sch, sc->sc_busclk,
-	    ddr);
-	if (error) {
-		aprint_error_dev(sc->sc_dev, "can't change bus clock\n");
-		return error;
+		sc->sc_transfer_mode = switch_group0_functions[best_func].name;
+		sc->sc_busddr = ddr;
 	}
 
-	sc->sc_transfer_mode = switch_group0_functions[best_func].name;
-	sc->sc_busddr = ddr;
-
 	/* get card status */
 	error = sdmmc_mem_send_ssr(sc, sf, &status);
 	if (error) {

Reply via email to