Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jul 2010 21:38:15 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r210262 - head/sys/dev/flash
Message-ID:  <201007192138.o6JLcFhu090060@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Mon Jul 19 21:38:15 2010
New Revision: 210262
URL: http://svn.freebsd.org/changeset/base/210262

Log:
  Extend the mx25l flash device support to include a set of per-device
  flags.
  
  Some of these parts will support 4K/32K block erases rather than
  a sector erase. This includes (at least) the MX25L128.

Modified:
  head/sys/dev/flash/mx25l.c

Modified: head/sys/dev/flash/mx25l.c
==============================================================================
--- head/sys/dev/flash/mx25l.c	Mon Jul 19 21:38:07 2010	(r210261)
+++ head/sys/dev/flash/mx25l.c	Mon Jul 19 21:38:15 2010	(r210262)
@@ -45,6 +45,10 @@ __FBSDID("$FreeBSD$");
 
 #include <dev/flash/mx25lreg.h>
 
+#define	FL_NONE			0x00
+#define	FL_ERASE_4K		0x01
+#define	FL_ERASE_32K		0x02
+
 struct mx25l_flash_ident
 {
 	const char	*name;
@@ -52,6 +56,7 @@ struct mx25l_flash_ident
 	uint16_t	device_id;
 	unsigned int	sectorsize;
 	unsigned int	sectorcount;
+	unsigned int	flags;
 };
 
 struct mx25l_softc 
@@ -64,6 +69,7 @@ struct mx25l_softc 
 	struct disk	*sc_disk;
 	struct proc	*sc_p;
 	struct bio_queue_head sc_bio_queue;
+	unsigned int	flags;
 };
 
 #define M25PXX_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
@@ -83,10 +89,10 @@ static void mx25l_strategy(struct bio *b
 static void mx25l_task(void *arg);
 
 struct mx25l_flash_ident flash_devices[] = {
-	{ "mx25ll32",  0xc2, 0x2016, 64 * 1024,  64 },
-	{ "mx25ll64",  0xc2, 0x2017, 64 * 1024, 128 },
-	{ "mx25ll128", 0xc2, 0x2018, 64 * 1024, 256 },
-	{ "s25fl128",  0x01, 0x2018, 64 * 1024, 256 },
+	{ "mx25ll32",  0xc2, 0x2016, 64 * 1024,  64, FL_NONE },
+	{ "mx25ll64",  0xc2, 0x2017, 64 * 1024, 128, FL_NONE },
+	{ "mx25ll128", 0xc2, 0x2018, 64 * 1024, 256, FL_ERASE_4K | FL_ERASE_32K },
+	{ "s25fl128",  0x01, 0x2018, 64 * 1024, 256, FL_NONE },
 };
 
 static uint8_t
@@ -369,6 +375,7 @@ mx25l_attach(device_t dev)
 	sc->sc_disk->d_dump = NULL;		/* NB: no dumps */
 	/* Sectorsize for erase operations */
 	sc->sc_sectorsize =  ident->sectorsize;
+	sc->flags = ident->flags;
 
         /* NB: use stripesize to hold the erase/region size for RedBoot */
 	sc->sc_disk->d_stripesize = ident->sectorsize;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007192138.o6JLcFhu090060>