Module Name:    src
Committed By:   jdc
Date:           Mon May 11 14:55:20 UTC 2020

Modified Files:
        src/sys/dev/ic: w83l518d.c w83l518d_sdmmc.c w83l518dvar.h

Log Message:
Make the driver endian-independent.
Add a quirk so that the bus front end can specify 1-bit only mode.
Remove unused isa includes.
Change the error returned for unsupported opcodes to ENOTSUP, so that
we can pass this back to sdmmc_mem, where it's handled since r1.72 of
  src/sys/dev/sdmmc/sdmmc_mem.c


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ic/w83l518d.c \
    src/sys/dev/ic/w83l518dvar.h
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/ic/w83l518d_sdmmc.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/ic/w83l518d.c
diff -u src/sys/dev/ic/w83l518d.c:1.2 src/sys/dev/ic/w83l518d.c:1.3
--- src/sys/dev/ic/w83l518d.c:1.2	Thu Aug 19 14:58:22 2010
+++ src/sys/dev/ic/w83l518d.c	Mon May 11 14:55:20 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: w83l518d.c,v 1.2 2010/08/19 14:58:22 jmcneill Exp $ */
+/* $NetBSD: w83l518d.c,v 1.3 2020/05/11 14:55:20 jdc Exp $ */
 
 /*
  * Copyright (c) 2009 Jared D. McNeill <jmcne...@invisible.ca>
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: w83l518d.c,v 1.2 2010/08/19 14:58:22 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: w83l518d.c,v 1.3 2020/05/11 14:55:20 jdc Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -39,9 +39,6 @@ __KERNEL_RCSID(0, "$NetBSD: w83l518d.c,v
 
 #include <sys/bus.h>
 
-#include <dev/isa/isavar.h>
-#include <dev/isa/isadmavar.h>
-
 #include <dev/ic/w83l518dreg.h>
 #include <dev/ic/w83l518dvar.h>
 #include <dev/ic/w83l518d_sdmmc.h>
Index: src/sys/dev/ic/w83l518dvar.h
diff -u src/sys/dev/ic/w83l518dvar.h:1.2 src/sys/dev/ic/w83l518dvar.h:1.3
--- src/sys/dev/ic/w83l518dvar.h:1.2	Thu Aug 19 14:58:22 2010
+++ src/sys/dev/ic/w83l518dvar.h	Mon May 11 14:55:20 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: w83l518dvar.h,v 1.2 2010/08/19 14:58:22 jmcneill Exp $ */
+/* $NetBSD: w83l518dvar.h,v 1.3 2020/05/11 14:55:20 jdc Exp $ */
 
 /*
  * Copyright (c) 2009 Jared D. McNeill <jmcne...@invisible.ca>
@@ -44,6 +44,10 @@ struct wb_softc {
 	uint8_t			wb_sdmmc_clk;
 	uint8_t			wb_sdmmc_intsts;
 	callout_t		wb_sdmmc_callout;
+
+	/* quirks */
+#define	WB_QUIRK_1BIT	(1U << 0)
+	int			wb_quirks;
 };
 
 void	wb_attach(struct wb_softc *);

Index: src/sys/dev/ic/w83l518d_sdmmc.c
diff -u src/sys/dev/ic/w83l518d_sdmmc.c:1.3 src/sys/dev/ic/w83l518d_sdmmc.c:1.4
--- src/sys/dev/ic/w83l518d_sdmmc.c:1.3	Thu Oct  7 12:06:09 2010
+++ src/sys/dev/ic/w83l518d_sdmmc.c	Mon May 11 14:55:20 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: w83l518d_sdmmc.c,v 1.3 2010/10/07 12:06:09 kiyohara Exp $ */
+/* $NetBSD: w83l518d_sdmmc.c,v 1.4 2020/05/11 14:55:20 jdc Exp $ */
 
 /*
  * Copyright (c) 2009 Jared D. McNeill <jmcne...@invisible.ca>
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: w83l518d_sdmmc.c,v 1.3 2010/10/07 12:06:09 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: w83l518d_sdmmc.c,v 1.4 2020/05/11 14:55:20 jdc Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -43,9 +43,6 @@ __KERNEL_RCSID(0, "$NetBSD: w83l518d_sdm
 #include <dev/sdmmc/sdmmcchip.h>
 #include <dev/sdmmc/sdmmc_ioreg.h>
 
-#include <dev/isa/isavar.h>
-#include <dev/isa/isadmavar.h>
-
 #include <dev/ic/w83l518dreg.h>
 #include <dev/ic/w83l518dvar.h>
 #include <dev/ic/w83l518d_sdmmc.h>
@@ -185,7 +182,8 @@ wb_sdmmc_attach(struct wb_softc *wb)
 	saa.saa_sch = wb;
 	saa.saa_clkmin = 375;
 	saa.saa_clkmax = 24000;
-	saa.saa_caps = SMC_CAPS_4BIT_MODE;
+	if (!ISSET(wb->wb_quirks, WB_QUIRK_1BIT))
+		saa.saa_caps = SMC_CAPS_4BIT_MODE;
 
 	wb->wb_sdmmc_dev = config_found(wb->wb_dev, &saa, NULL);
 }
@@ -268,7 +266,7 @@ wb_sdmmc_write_protect(sdmmc_chipset_han
 static int
 wb_sdmmc_bus_power(sdmmc_chipset_handle_t sch, uint32_t ocr)
 {
-	REPORT(sch, "TRACE: sdmmc/bus_power(wb, ocr=%d)\n", ocr);
+	REPORT(sch, "TRACE: sdmmc/bus_power(wb, ocr=%x)\n", ocr);
 
 	return 0;
 }
@@ -334,10 +332,19 @@ wb_sdmmc_rsp_read_long(struct wb_softc *
 	}
 
 	for (i = 12; i >= 0; i -= 4) {
+#if BYTE_ORDER == LITTLE_ENDIAN
 		p[3] = wb_idx_read(wb, WB_INDEX_RESP(i + 0));
 		p[2] = wb_idx_read(wb, WB_INDEX_RESP(i + 1));
 		p[1] = wb_idx_read(wb, WB_INDEX_RESP(i + 2));
 		p[0] = wb_idx_read(wb, WB_INDEX_RESP(i + 3));
+#else
+		p[0] = wb_idx_read(wb, WB_INDEX_RESP(i + 0));
+		p[1] = wb_idx_read(wb, WB_INDEX_RESP(i + 1));
+		p[2] = wb_idx_read(wb, WB_INDEX_RESP(i + 2));
+		p[3] = wb_idx_read(wb, WB_INDEX_RESP(i + 3));
+#endif
+		REPORT(wb, "TRACE: sdmmc/read_long (%d) 0x%08x\n",
+		    (12 - i) / 4, cmd->c_resp[(12 - i) / 4]);
 		p += 4;
 	}
 }
@@ -352,10 +359,19 @@ wb_sdmmc_rsp_read_short(struct wb_softc 
 		return;
 	}
 
+#if BYTE_ORDER == LITTLE_ENDIAN
 	p[3] = wb_idx_read(wb, WB_INDEX_RESP(12));
 	p[2] = wb_idx_read(wb, WB_INDEX_RESP(13));
 	p[1] = wb_idx_read(wb, WB_INDEX_RESP(14));
 	p[0] = wb_idx_read(wb, WB_INDEX_RESP(15));
+#else
+	p[0] = wb_idx_read(wb, WB_INDEX_RESP(12));
+	p[1] = wb_idx_read(wb, WB_INDEX_RESP(13));
+	p[2] = wb_idx_read(wb, WB_INDEX_RESP(14));
+	p[3] = wb_idx_read(wb, WB_INDEX_RESP(15));
+#endif
+	REPORT(wb, "TRACE: sdmmc/read_short 0x%08x\n",
+	    cmd->c_resp[0]);
 }
 
 static int
@@ -430,8 +446,9 @@ wb_sdmmc_exec_command(sdmmc_chipset_hand
 	int s;
 
 	REPORT(wb, "TRACE: sdmmc/exec_command(wb, cmd) "
-	    "opcode %d flags 0x%x data %p datalen %d\n",
-	    cmd->c_opcode, cmd->c_flags, cmd->c_data, cmd->c_datalen);
+	    "opcode %d flags 0x%x data %p datalen %d arg 0x%08x\n",
+	    cmd->c_opcode, cmd->c_flags, cmd->c_data, cmd->c_datalen,
+	    cmd->c_arg);
 
 	if (cmd->c_datalen > 0) {
 		/* controller only supports a select number of data opcodes */
@@ -439,7 +456,9 @@ wb_sdmmc_exec_command(sdmmc_chipset_hand
 			if (opcodes[i] == cmd->c_opcode)
 				break;
 		if (i == __arraycount(opcodes)) {
-			cmd->c_error = EINVAL;
+			cmd->c_error = ENOTSUP;
+			aprint_debug_dev(wb->wb_dev,
+			    "unsupported opcode %d\n", cmd->c_opcode);
 			goto done;
 		}
 

Reply via email to