[Zrouter-src-freebsd] ZRouter.org: push to FreeBSD HEAD tree

zrouter-src-freebsd at zrouter.org zrouter-src-freebsd at zrouter.org
Wed Apr 18 14:10:08 UTC 2012


details:   http://zrouter.org/hg/FreeBSD/head//rev/6c4917e98834
changeset: 459:6c4917e98834
user:      Aleksandr Rybalko <ray at ddteam.net>
date:      Wed Apr 18 17:10:23 2012 +0300
description:
Check WEL bit after CMD_WRITE_ENABLE.
Add more debug.

diffstat:

 head/sys/dev/flash/mx25l.c |  37 ++++++++++++++++++++++++++++++-------
 1 files changed, 30 insertions(+), 7 deletions(-)

diffs (119 lines):

diff -r 135feddfa0e3 -r 6c4917e98834 head/sys/dev/flash/mx25l.c
--- a/head/sys/dev/flash/mx25l.c	Wed Apr 18 17:08:03 2012 +0300
+++ b/head/sys/dev/flash/mx25l.c	Wed Apr 18 17:10:23 2012 +0300
@@ -44,6 +44,8 @@
 #include <dev/spibus/spi.h>
 #include "spibus_if.h"
 
+#define MX25L_DEBUG
+
 #include <dev/flash/mx25lreg.h>
 
 #define	FL_NONE			0x00
@@ -89,6 +91,7 @@
 	MX25L_DBG_WRITE	=	0x00000002,
 	MX25L_DBG_ERASE	=	0x00000004,
 	MX25L_DBG_EACHWRITE=	0x00000008,
+	MX25L_DBG_INFO	=	0x00000010,
 } mx25l_debug_flags;
 
 #ifdef MX25L_DEBUG
@@ -142,10 +145,13 @@
 static uint8_t
 mx25l_get_status(device_t dev)
 {
+	struct mx25l_softc *sc;
 	uint8_t txBuf[4], rxBuf[4];
 	struct spi_command cmd;
 	int err;
 
+	sc = device_get_softc(dev);
+
 	memset(&cmd, 0, sizeof(cmd));
 	memset(txBuf, 0, sizeof(txBuf));
 	memset(rxBuf, 0, sizeof(rxBuf));
@@ -157,6 +163,11 @@
 	cmd.rx_data_sz = 1;
 
 	err = SPIBUS_TRANSFER(device_get_parent(dev), dev, &cmd);
+	if (err)
+		return (0);
+
+	MX25LDEBUG(sc, MX25L_DBG_INFO, "STATUS=%02x\n", rxBuf[0]);
+
 	return (rxBuf[0]);
 }
 
@@ -194,6 +205,9 @@
 	if (err)
 		return (NULL);
 
+	MX25LDEBUG(sc, MX25L_DBG_INFO, "DEVID=%02x %02x %02x %02x %02x\n",
+	    rxBuf[0], rxBuf[1], rxBuf[2], rxBuf[3], rxBuf[4]);
+
 	manufacturer_id = rxBuf[0];
 	dev_id = (rxBuf[1] << 8) | (rxBuf[2]);
 
@@ -211,20 +225,29 @@
 static void
 mx25l_set_writable(device_t dev, int writable)
 {
-	uint8_t txBuf[4], rxBuf[4];
+	struct mx25l_softc *sc;
+	uint8_t txBuf[4];//, rxBuf[4];
+	uint8_t status;
 	struct spi_command cmd;
 	int err;
 
+	sc = device_get_softc(dev);
+
+	MX25LDEBUG(sc, MX25L_DBG_WRITE, "%s(dev, writable=%d)\n", __func__,
+	    writable);
+
 	memset(&cmd, 0, sizeof(cmd));
 	memset(txBuf, 0, sizeof(txBuf));
-	memset(rxBuf, 0, sizeof(rxBuf));
 
 	txBuf[0] = writable ? CMD_WRITE_ENABLE : CMD_WRITE_DISABLE;
 	cmd.tx_cmd = txBuf;
 	cmd.tx_cmd_sz = 1;
-	cmd.rx_data = rxBuf;
-	cmd.rx_data_sz = 1;
 	err = SPIBUS_TRANSFER(device_get_parent(dev), dev, &cmd);
+
+	status = mx25l_get_status(dev);
+
+	if (writable && !(status & STATUS_WEL))
+		device_printf(dev, "%s - fail\n", __func__);
 }
 
 static void
@@ -274,10 +297,9 @@
 	sc = device_get_softc(dev);
 
 	MX25LDEBUG(sc, MX25L_DBG_WRITE,
-	    "%s(dev, offset=0x%08x, , data, count=0x%08x)\n",
+	    "%s(dev, offset=0x%08x, data, count=0x%08x)\n",
 	    __func__, (uint32_t)offset, (uint32_t)count);
 
-
 	bytes_writen = 0;
 	write_offset = offset;
 
@@ -369,7 +391,7 @@
 	sc = device_get_softc(dev);
 
 	MX25LDEBUG(sc, MX25L_DBG_READ,
-	    "%s(dev, offset=0x%08x, , data, count=0x%08x)\n",
+	    "%s(dev, offset=0x%08x, data, count=0x%08x)\n",
 	    __func__, (uint32_t)offset, (uint32_t)count);
 
 	/*
@@ -408,6 +430,7 @@
 }
 
 #ifdef	MX25L_DEBUG
+#include <sys/sysctl.h>
 static void
 mx25l_attach_sysctl(device_t dev)
 {


More information about the Zrouter-src-freebsd mailing list