[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