summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/man/man4/Makefile1
-rw-r--r--share/man/man4/isf.4135
-rw-r--r--sys/conf/files3
-rw-r--r--sys/dev/isf/isf.c741
-rw-r--r--sys/dev/isf/isf.h96
-rw-r--r--sys/dev/isf/isf_fdt.c124
-rw-r--r--sys/dev/isf/isf_nexus.c118
-rw-r--r--sys/mips/conf/BERI_DE4.hints36
-rw-r--r--sys/mips/conf/BERI_DE4_MDROOT1
-rw-r--r--sys/mips/conf/BERI_DE4_SDROOT1
-rw-r--r--usr.sbin/Makefile1
-rw-r--r--usr.sbin/isfctl/Makefile7
-rw-r--r--usr.sbin/isfctl/isfctl.889
-rw-r--r--usr.sbin/isfctl/isfctl.c115
14 files changed, 0 insertions, 1468 deletions
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index e221795..a4a105b 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -195,7 +195,6 @@ MAN= aac.4 \
ipwfw.4 \
isci.4 \
iscsi_initiator.4 \
- isf.4 \
isp.4 \
ispfw.4 \
iwi.4 \
diff --git a/share/man/man4/isf.4 b/share/man/man4/isf.4
deleted file mode 100644
index f863720..0000000
--- a/share/man/man4/isf.4
+++ /dev/null
@@ -1,135 +0,0 @@
-.\"-
-.\" Copyright (c) 2012 SRI International
-.\" All rights reserved.
-.\"
-.\" This software was developed by SRI International and the University of
-.\" Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
-.\" ("CTSRD"), as part of the DARPA CRASH research programme.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd August 3, 2012
-.Dt ISF 4
-.Os
-.Sh NAME
-.Nm isf
-.Nd driver for Intel StrataFlash NOR flash devices
-.Sh SYNOPSIS
-.Cd "device isf"
-.Pp
-In
-.Pa /boot/device.hints :
-.Cd hint.isf.0.at="nexus0"
-.Cd hint.isf.0.maddr=0x74000000
-.Cd hint.isf.0.msize=0x2000000
-.Sh DESCRIPTION
-The
-.Nm
-device driver provides support for Intel StrataFlash NOR flash devices.
-Devices are presented as
-.Xr disk 9
-devices and read access is supported along with limited write support.
-Erasing blocks is supported the
-.Dv ISF_ERASE
-ioctl.
-.Pp
-The erase block size of
-.Nm
-devices is 128K.
-NOR flash blocks contains all 1's after an erase cycle.
-Writes to
-.Nm
-devices are allowed to succeed if and only if they all bits in the write
-block (512-bytes) remain the same or transition from 1 to 0.
-.Sh HARDWARE
-The current version of the
-.Nm
-driver is known to support the 64MB part found on the Altera DE4 board.
-It attempts to support other StrataFlash parts documented in the
-datasheet, but those are untested.
-.Sh IOCTLS
-The
-.Nm device
-supports the
-.Xr ioctl 2
-command codes:
-.Bl -tag -width ISF_ERASE
-.It Dv ISF_ERASE
-Erase one or more blocks.
-.Dv ISF_ERASE is defined as follows:
-.Bd -literal
- struct isf_range {
- off_t ir_off;
- size_t ir_size;
- };
-
- #define ISF_ERASE _IOW('I', 1, struct isf_range)
-.Ed
-.Pp
-The
-.Li ir_off
-member marks the beginning of the area to be erased and must fall on at 128K
-boundary.
-The
-.Li ir_size
-member indicates the size of the area to be erased and must a multiple
-of 128K.
-.El
-.Sh SEE ALSO
-.Xr isfctl 4 ,
-.Xr disk 9
-.Rs
-.%T Intel StrataFlash Embedded Memory (P30)
-.%D November 1, 2005
-.%I Intel Corporation
-.%U http://www.xilinx.com/products/boards/ml505/datasheets/30666604.pdf
-.Re
-.Sh HISTORY
-The
-.Nm
-device driver first appeared in
-.Fx 10.0 .
-.Sh AUTHORS
-The
-.Nm
-device driver and this manual page were
-developed by SRI International and the University of Cambridge Computer
-Laboratory under DARPA/AFRL contract
-.Pq FA8750-10-C-0237
-.Pq Do CTSRD Dc ,
-as part of the DARPA CRASH research programme.
-.Sh BUGS
-While an erase is in progress, all read and write operations return
-.Er EBUSY .
-In principle, reads could be allowed outside the programming region the
-blocked currently being erased resides in and writes could be allowed by
-suspending the erase, but neither of these is currently implemented.
-.Pp
-Depending on the flash part ether the top or bottom 128K of the flash
-address space is divided into 4 32K erase blocks.
-The
-.Nm
-driver hides this from the user requiring that all erase requests be
-multiples of 128K in size and erasing the individual blocks as needed at
-the top or bottom.
diff --git a/sys/conf/files b/sys/conf/files
index 34f8d3a..e9555ee 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1539,9 +1539,6 @@ dev/iscsi_initiator/isc_cam.c optional iscsi_initiator scbus
dev/iscsi_initiator/isc_soc.c optional iscsi_initiator scbus
dev/iscsi_initiator/isc_sm.c optional iscsi_initiator scbus
dev/iscsi_initiator/isc_subr.c optional iscsi_initiator scbus
-dev/isf/isf.c optional isf
-dev/isf/isf_fdt.c optional isf fdt
-dev/isf/isf_nexus.c optional isf
dev/isp/isp.c optional isp
dev/isp/isp_freebsd.c optional isp
dev/isp/isp_library.c optional isp
diff --git a/sys/dev/isf/isf.c b/sys/dev/isf/isf.c
deleted file mode 100644
index eaaad15..0000000
--- a/sys/dev/isf/isf.c
+++ /dev/null
@@ -1,741 +0,0 @@
-/*-
- * Copyright (c) 2012 Robert N. M. Watson
- * Copyright (c) 2012 SRI International
- * All rights reserved.
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
- * ("CTSRD"), as part of the DARPA CRASH research programme.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/module.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-
-#include <sys/bus.h>
-#include <sys/conf.h>
-#include <sys/endian.h>
-#include <sys/bio.h>
-#include <sys/kthread.h>
-#include <sys/lock.h>
-#include <sys/malloc.h>
-#include <sys/mutex.h>
-#include <sys/rman.h>
-#include <sys/taskqueue.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-
-#include <geom/geom_disk.h>
-
-#include <dev/isf/isf.h>
-
-/* Read Mode */
-#define ISF_CMD_RA 0xFF /* Read Array mode */
-#define ISF_CMD_RSR 0x70 /* Read Status Register mode */
-#define ISF_CMD_RDI 0x90 /* Read Device ID/Config Reg mode */
-#define ISF_CMD_RQ 0x98 /* Read Query mode */
-#define ISF_CMD_CSR 0x50 /* Clear Status Register */
-
-/* Write Mode */
-#define ISF_CMD_WPS 0x40 /* Word Program Setup */
-#define ISF_CMD_BPS 0xE8 /* Buffered Program Setup */
-#define ISF_CMD_BPC 0xD0 /* Buffered Program Confirm */
-
-/* Erase Mode */
-#define ISF_CMD_BES 0x20 /* Block Erase Setup */
-#define ISF_CMD_BEC 0xD0 /* Block Erase Confirm */
-
-/* Block Locking/Unlocking */
-#define ISF_CMD_LBS 0x60 /* Lock Block Setup */
-#define ISF_CMD_LB 0x01 /* Lock Block */
-#define ISF_CMD_UB 0xD0 /* Unlock Block */
-
-/*
- * Read Device Identifier registers.
- *
- * NOTE: ISF_RDIR_BLC is relative to the block base address.
- */
-#define ISF_REG_MC 0x00 /* Manufacture Code */
-#define ISF_REG_ID 0x01 /* Device ID Code */
-#define ISF_REG_BLC 0x02 /* Block Lock Configuration */
-#define ISF_REG_RCR 0x05 /* Read Configuration Register */
-
-/*
- * Protection Registers
- */
-#define ISF_REG_L0 0x80 /* Lock Register 0 */
-#define ISF_REG_FPP 0x81 /* 64-bit Factory Protection Register */
-#define ISF_REG_UPP 0x85 /* 64-bit User Protection Register */
-#define ISF_REG_L1 0x89 /* Lock Register 1 */
-#define ISF_REG_PP1 0x8A /* 128-bit Protection Register 1 */
-#define ISF_REG_PP2 0x92 /* 128-bit Protection Register 2 */
-#define ISF_REG_PP3 0x9A /* 128-bit Protection Register 3 */
-#define ISF_REG_PP4 0xA2 /* 128-bit Protection Register 4 */
-#define ISF_REG_PP5 0xAA /* 128-bit Protection Register 5 */
-#define ISF_REG_PP6 0xB2 /* 128-bit Protection Register 6 */
-#define ISF_REG_PP7 0xBA /* 128-bit Protection Register 7 */
-#define ISF_REG_PP8 0xC2 /* 128-bit Protection Register 8 */
-#define ISF_REG_PP9 0xCA /* 128-bit Protection Register 9 */
-#define ISF_REG_PP10 0xD2 /* 128-bit Protection Register 10 */
-#define ISF_REG_PP11 0xDA /* 128-bit Protection Register 11 */
-#define ISF_REG_PP12 0xE2 /* 128-bit Protection Register 12 */
-#define ISF_REG_PP13 0xEA /* 128-bit Protection Register 13 */
-#define ISF_REG_PP14 0xF2 /* 128-bit Protection Register 14 */
-#define ISF_REG_PP15 0xFA /* 128-bit Protection Register 15 */
-#define ISF_REG_PP16 0x102 /* 128-bit Protection Register 16 */
-
-#define ISF_SR_BWS (1 << 0) /* BEFP Status */
-#define ISF_SR_BLS (1 << 1) /* Block-Locked Status */
-#define ISF_SR_PSS (1 << 2) /* Program Suspend Status */
-#define ISF_SR_VPPS (1 << 3) /* Vpp Status */
-#define ISF_SR_PS (1 << 4) /* Program Status */
-#define ISF_SR_ES (1 << 5) /* Erase Status */
-#define ISF_SR_ESS (1 << 6) /* Erase Suspend Status */
-#define ISF_SR_DWS (1 << 7) /* Device Write Status */
-#define ISF_SR_FSC_MASK (ISF_SR_VPPS | ISF_SR_PS | ISF_SR_BLS)
-
-#define ISF_BUFFER_PROGRAM
-
-MALLOC_DEFINE(M_ISF, "isf_data", "Intel StrateFlash driver");
-static int isf_debug = 0;
-
-static struct isf_chips {
- uint16_t chip_id;
- size_t chip_size;
- const char *chip_desc;
-} chip_ids[] = {
- { 0x8817, 0x0800000, "64-Mbit Top Parameter" },
- { 0x881A, 0x0800000, "64-Mbit Bottom Parameter" },
- { 0x8818, 0x1000000, "128-Mbit Top Parameter" },
- { 0x881B, 0x1000000, "128-Mbit Bottom Parameter" },
- { 0x8919, 0x2000000, "256-Mbit Top Parameter" },
- { 0x891C, 0x2000000, "256-Mbit Bottom Parameter" },
- { 0x8961, 0x2000000, "512-Mbit package (half)" },
- { 0x0000, 0x0000000, NULL }
-};
-
-static void isf_task(void *arg);
-
-/*
- * Device driver for the Intel StrataFlash NOR flash device. This
- * implementation is known to work with 256Mb instances of the device, but may
- * also work with other 64/128/512Mb parts without much work. Multiple
- * device instances should be used when multiple parts are in the same
- * physical package, due to variable block size support in the StrataFlash
- * part.
- */
-devclass_t isf_devclass;
-
-static uint16_t
-isf_read_reg(struct isf_softc *sc, uint16_t reg)
-{
-
- if (isf_debug)
- device_printf(sc->isf_dev, "isf_read_reg(0x%02x)\n", reg);
- return (le16toh(bus_read_2(sc->isf_res, reg * 2)));
-}
-
-static uint64_t
-isf_read_reg64(struct isf_softc *sc, uint16_t reg)
-{
- uint64_t val;
- uint16_t *val16 = (uint16_t *)&val;
-
- if (isf_debug)
- device_printf(sc->isf_dev, "isf_read_reg64(0x%02x)\n", reg);
- val16[0] = bus_read_2(sc->isf_res, reg * 2);
- val16[1] = bus_read_2(sc->isf_res, (reg+1) * 2);
- val16[2] = bus_read_2(sc->isf_res, (reg+2) * 2);
- val16[3] = bus_read_2(sc->isf_res, (reg+3) * 2);
-
- return(le64toh(val));
-}
-
-static uint16_t
-isf_read_off(struct isf_softc *sc, off_t off)
-{
-
- KASSERT(off >= 0, ("%s: negative offset\n", __func__));
- KASSERT(off < sc->isf_disk->d_mediasize,
- ("%s: offset out side address space 0x%08jx \n", __func__,
- (intmax_t)off));
-
- if (isf_debug)
- device_printf(sc->isf_dev, "isf_read_off(0x%08jx)\n",
- (intmax_t)off);
- return (le16toh(bus_read_2(sc->isf_res, off)));
-}
-
-static void
-isf_write_cmd(struct isf_softc *sc, off_t off, uint16_t cmd)
-{
-
- if (isf_debug)
- device_printf(sc->isf_dev, "isf_write_cmd(0x%08jx, 0x%02x)\n",
- off, cmd);
- bus_write_2(sc->isf_res, off, htole16(cmd));
-}
-
-static uint16_t
-isf_read_status(struct isf_softc *sc, off_t off)
-{
-
- isf_write_cmd(sc, off/2, ISF_CMD_RSR);
- return isf_read_off(sc, off);
-}
-
-static void
-isf_clear_status(struct isf_softc *sc)
-{
-
- isf_write_cmd(sc, 0, ISF_CMD_CSR);
-}
-
-static int
-isf_full_status_check(struct isf_softc *sc, off_t off)
-{
- int error = 0;
- uint16_t status;
-
- status = isf_read_status(sc, off);
- if (status & ISF_SR_VPPS) {
- device_printf(sc->isf_dev, "Vpp Range Error\n");
- error = EIO;
- } else if (status & ISF_SR_PS) {
- device_printf(sc->isf_dev, "Program Error\n");
- error = EIO;
- } else if (status & ISF_SR_BLS) {
- device_printf(sc->isf_dev, "Device Protect Error\n");
- error = EIO;
- }
- isf_clear_status(sc);
-
- return(error);
-}
-
-static int
-isf_full_erase_status_check(struct isf_softc *sc, off_t off)
-{
- int error = 0;
- uint16_t status;
-
- status = isf_read_status(sc, off);
- if (status & ISF_SR_VPPS) {
- device_printf(sc->isf_dev, "Vpp Range Error\n");
- error = EIO;
- } else if (status & (ISF_SR_PS|ISF_SR_ES)) {
- device_printf(sc->isf_dev, "Command Sequence Error\n");
- error = EIO;
- } else if (status & ISF_SR_ES) {
- device_printf(sc->isf_dev, "Block Erase Error\n");
- error = EIO;
- } else if (status & ISF_SR_BLS) {
- device_printf(sc->isf_dev, "Block Locked Error\n");
- error = EIO;
- }
- isf_clear_status(sc);
-
- return(error);
-}
-
-static void
-isf_unlock_block(struct isf_softc *sc, off_t off)
-{
-
- isf_write_cmd(sc, off, ISF_CMD_LBS);
- isf_write_cmd(sc, off, ISF_CMD_UB);
- isf_write_cmd(sc, off, ISF_CMD_RA);
-}
-
-static void
-isf_lock_block(struct isf_softc *sc, off_t off)
-{
-
- isf_write_cmd(sc, off, ISF_CMD_LBS);
- isf_write_cmd(sc, off, ISF_CMD_LB);
- isf_write_cmd(sc, off, ISF_CMD_RA);
-}
-
-static void
-isf_read(struct isf_softc *sc, off_t off, void *data, size_t len)
-{
-
- KASSERT((uintptr_t)data % 2 == 0,
- ("%s: unaligned data %p", __func__, data));
- KASSERT((len <= ISF_SECTORSIZE) && (len % 2 == 0),
- ("%s: invalid length %ju", __func__, len));
- KASSERT(off % ISF_SECTORSIZE == 0,
- ("%s: invalid offset %ju\n", __func__, off));
-
- /*
- * It is not permitted to read blocks that are in the process of
- * being erased, but we know they will be all 1's after the
- * erase so just report that value if asked about a block that
- * is being erased.
- */
- if (sc->isf_bstate[off / ISF_ERASE_BLOCK] == BS_ERASING)
- memset(data, 0xFF, len);
- else
- bus_read_region_2(sc->isf_res, off, (uint16_t *)data, len / 2);
-}
-
-static int
-isf_write(struct isf_softc *sc, off_t off, void *data, size_t len)
-{
- int cycles, error = 0;
- uint16_t *dp;
- uint16_t status;
- off_t coff;
-
- KASSERT((uintptr_t)data % 2 == 0,
- ("%s: unaligned data %p", __func__, data));
- KASSERT((len <= ISF_SECTORSIZE) && (len % 2 == 0),
- ("%s: invalid length %ju", __func__, len));
- KASSERT(off % ISF_SECTORSIZE == 0,
- ("%s: invalid offset %ju\n", __func__, off));
- KASSERT(!sc->isf_erasing,
- ("%s: trying to write while erasing\n", __func__));
- KASSERT(sc->isf_bstate[off / ISF_ERASE_BLOCK] != BS_ERASING,
- ("%s: block being erased at %ju\n", __func__, off));
-
- isf_unlock_block(sc, off);
-
-#ifdef ISF_BUFFER_PROGRAM
- for (dp = data, coff = off; dp - (uint16_t *)data < len / 2;
- dp += 32, coff += 64) {
- isf_clear_status(sc);
- isf_write_cmd(sc, coff, ISF_CMD_BPS);
- cycles = 0xFFFF;
- while ( !(isf_read_off(sc, coff) & ISF_SR_DWS) ) {
- if (cycles-- == 0) {
- device_printf(sc->isf_dev, "timeout waiting"
- " for write to start at 0x08%jx\n",
- (intmax_t)coff);
- return (EIO);
- }
- isf_write_cmd(sc, coff, ISF_CMD_BPS);
- }
-
- /* When writing N blocks, send N-1 as the count */
- isf_write_cmd(sc, coff, 31);
- bus_write_region_2(sc->isf_res, coff, dp, 32);
-
- isf_write_cmd(sc, coff, ISF_CMD_BPC);
-
- status = isf_read_off(sc, coff);
- cycles = 0xFFFFF;
- while ( !(status & ISF_SR_DWS) ) {
- if (cycles-- == 0) {
- device_printf(sc->isf_dev, "timeout waiting"
- " for write to complete at 0x08%jx\n",
- (intmax_t)coff);
- error = EIO;
- break;
- }
- status = isf_read_off(sc, coff);
- }
- isf_full_status_check(sc, off);
-
- isf_write_cmd(sc, coff, ISF_CMD_RA);
- }
-#else
- for (dp = data, coff = off; dp - (uint16_t *)data < len / 2;
- dp++, coff += 2) {
- isf_write_cmd(sc, coff, ISF_CMD_WPS);
- bus_write_2(sc->isf_res, coff, *dp);
- status = isf_read_off(sc, coff);
- cycles=0xFFFFF;
- while ( !(status & ISF_SR_DWS) ) {
- if (cycles-- == 0) {
- device_printf(sc->isf_dev, "timeout waiting"
- " for write to complete at 0x08%jx\n",
- (intmax_t)coff);
- error = EIO;
- break;
- }
- status = isf_read_off(sc, coff);
- }
-
- }
- isf_full_status_check(sc, off);
- isf_write_cmd(sc, coff, ISF_CMD_RA);
-#endif
-
- isf_lock_block(sc, off);
-
- return error;
-}
-
-static void
-isf_erase_at(struct isf_softc *sc, off_t off)
-{
- int cycles;
- uint16_t status;
-
- isf_unlock_block(sc, off);
- isf_clear_status(sc);
-
- isf_write_cmd(sc, off, ISF_CMD_BES);
- isf_write_cmd(sc, off, ISF_CMD_BEC);
-
- cycles=0xFFFFFF;
- status = isf_read_off(sc, off);
- while ( !(status & ISF_SR_DWS) ) {
-#ifdef NOTYET
- ISF_SLEEP(sc, sc, hz);
-#endif
- if (cycles-- == 0) {
- device_printf(sc->isf_dev,
- "Giving up on erase\n");
- break;
- }
- status = isf_read_off(sc, off);
- }
-
- isf_full_erase_status_check(sc, off);
-
- isf_lock_block(sc, off);
-
- isf_write_cmd(sc, off, ISF_CMD_RA);
-}
-
-static void
-isf_erase_range(struct isf_softc *sc, off_t blk_off, size_t size)
-{
- off_t off;
- off_t ms = sc->isf_disk->d_mediasize;
-
- KASSERT(blk_off % ISF_ERASE_BLOCK == 0,
- ("%s: invalid offset %ju\n", __func__, blk_off));
-
- ISF_LOCK_ASSERT(sc);
-
- for (off = blk_off; off < blk_off + size; off += ISF_ERASE_BLOCK) {
- sc->isf_bstate[off / ISF_ERASE_BLOCK] = BS_ERASING;
-
- /*
- * The first or last 128K is four blocks depending which
- * part this is. For now, just assume both are and
- * erase four times.
- */
- if (off == 0 || ms - off == ISF_ERASE_BLOCK) {
- isf_erase_at(sc, off);
- isf_erase_at(sc, off + 0x08000);
- isf_erase_at(sc, off + 0x10000);
- isf_erase_at(sc, off + 0x18000);
- } else
- isf_erase_at(sc, off);
-
- sc->isf_bstate[off / ISF_ERASE_BLOCK] = BS_STEADY;
- }
-}
-
-/*
- * disk(9) methods.
- */
-static int
-isf_disk_ioctl(struct disk *disk, u_long cmd, void *data, int fflag,
- struct thread *td)
-{
- int error = 0;
- struct isf_softc *sc = disk->d_drv1;
- struct isf_range *ir;
-
- switch (cmd) {
- case ISF_ERASE:
- ir = data;
- if (ir->ir_off % ISF_ERASE_BLOCK != 0 ||
- ir->ir_off >= disk->d_mediasize ||
- ir->ir_size == 0 ||
- ir->ir_size % ISF_ERASE_BLOCK != 0 ||
- ir->ir_off + ir->ir_size > disk->d_mediasize) {
- error = EINVAL;
- break;
- }
- ISF_LOCK(sc);
- if (sc->isf_erasing) {
- ISF_UNLOCK(sc);
- error = EBUSY;
- break;
- }
- sc->isf_erasing = 1;
- isf_erase_range(sc, ir->ir_off, ir->ir_size);
- sc->isf_erasing = 0;
- ISF_UNLOCK(sc);
- break;
- default:
- error = EINVAL;
- }
-
- return (error);
-}
-
-static void
-isf_disk_strategy(struct bio *bp)
-{
- struct isf_softc *sc = bp->bio_disk->d_drv1;
-
- /*
- * We advertise a block size and maximum I/O size up the stack; catch
- * any attempts to not follow the rules.
- */
- KASSERT(bp->bio_bcount == ISF_SECTORSIZE,
- ("%s: I/O size not %d", __func__, ISF_SECTORSIZE));
-
- ISF_LOCK(sc);
- bioq_disksort(&sc->isf_bioq, bp);
- ISF_WAKEUP(sc);
- ISF_UNLOCK(sc);
-}
-
-static void
-isf_task(void *arg)
-{
- struct isf_softc *sc = arg;
- struct bio *bp;
- int ss = sc->isf_disk->d_sectorsize;
- int error, i;
-
- for (;;) {
- ISF_LOCK(sc);
- do {
- bp = bioq_first(&sc->isf_bioq);
- if (bp == NULL) {
- if (sc->isf_doomed)
- kproc_exit(0);
- else
- ISF_SLEEP(sc, sc, 0);
- }
- } while (bp == NULL);
- bioq_remove(&sc->isf_bioq, bp);
-
- error = 0;
- switch (bp->bio_cmd) {
- case BIO_READ:
- isf_read(sc, bp->bio_pblkno * ss, bp->bio_data,
- bp->bio_bcount);
- break;
-
- case BIO_WRITE:
- /*
- * In principle one could suspend the in-progress
- * erase, process any pending writes to other
- * blocks and then proceed, but that seems
- * overly complex for the likely usage modes.
- */
- if (sc->isf_erasing) {
- error = EBUSY;
- break;
- }
-
- /*
- * Read in the block we want to write and check that
- * we're only setting bits to 0. If an erase would
- * be required return an I/O error.
- */
- isf_read(sc, bp->bio_pblkno * ss, sc->isf_rbuf,
- bp->bio_bcount);
- for (i = 0; i < bp->bio_bcount / 2; i++)
- if ((sc->isf_rbuf[i] &
- ((uint16_t *)bp->bio_data)[i]) !=
- ((uint16_t *)bp->bio_data)[i]) {
- device_printf(sc->isf_dev, "write"
- " requires erase at 0x%08jx\n",
- bp->bio_pblkno * ss);
- error = EIO;
- break;
- }
- if (error != 0)
- break;
-
- error = isf_write(sc, bp->bio_pblkno * ss,
- bp->bio_data, bp->bio_bcount);
- break;
-
- default:
- panic("%s: unsupported I/O operation %d", __func__,
- bp->bio_cmd);
- }
- if (error == 0)
- biodone(bp);
- else
- biofinish(bp, NULL, error);
- ISF_UNLOCK(sc);
- }
-}
-
-static void
-isf_dump_info(struct isf_softc *sc)
-{
- int i;
- int32_t reg;
-
- isf_write_cmd(sc, 0, ISF_CMD_RDI);
- device_printf(sc->isf_dev, "manufacturer code: 0x%04x\n",
- isf_read_reg(sc, ISF_REG_MC));
- device_printf(sc->isf_dev, "device id code: 0x%04x\n",
- isf_read_reg(sc, ISF_REG_ID));
- device_printf(sc->isf_dev, "read config register: 0x%04x\n",
- isf_read_reg(sc, ISF_REG_RCR));
-
- device_printf(sc->isf_dev, "lock register 0: 0x%04x\n",
- isf_read_reg(sc, ISF_REG_L0));
- device_printf(sc->isf_dev, "lock register 1: 0x%04x\n",
- isf_read_reg(sc, ISF_REG_L1));
-
- device_printf(sc->isf_dev, "factory PPR: 0x%016jx\n",
- (uintmax_t)isf_read_reg64(sc, ISF_REG_FPP));
- device_printf(sc->isf_dev, "user PPR (64-bit): 0x%016jx\n",
- (uintmax_t)isf_read_reg64(sc, ISF_REG_UPP));
-
- for (reg = ISF_REG_PP1, i = 1; reg <= ISF_REG_PP16; reg += 8, i++) {
- /* XXX: big-endian ordering of uint64_t's */
- device_printf(sc->isf_dev,
- "user PPR [%02d]: 0x%016jx%016jx\n", i,
- (uintmax_t)isf_read_reg64(sc, reg+4),
- (uintmax_t)isf_read_reg64(sc, reg));
- }
-
- isf_write_cmd(sc, 0, ISF_CMD_RA);
-}
-
-static void
-isf_disk_insert(struct isf_softc *sc, off_t mediasize)
-{
- struct disk *disk;
-
- sc->isf_doomed = 0;
- sc->isf_erasing = 0;
- sc->isf_bstate = malloc(sizeof(*sc->isf_bstate) *
- (mediasize / ISF_ERASE_BLOCK), M_ISF, M_ZERO | M_WAITOK);
- kproc_create(&isf_task, sc, &sc->isf_proc, 0, 0, "isf");
-
- disk = disk_alloc();
- disk->d_drv1 = sc;
- disk->d_name = "isf";
- disk->d_unit = sc->isf_unit;
- disk->d_strategy = isf_disk_strategy;
- disk->d_ioctl = isf_disk_ioctl;
- disk->d_sectorsize = ISF_SECTORSIZE;
- disk->d_mediasize = mediasize;
- disk->d_maxsize = ISF_SECTORSIZE;
- sc->isf_disk = disk;
-
- if (bootverbose)
- isf_dump_info(sc);
-
- disk_create(disk, DISK_VERSION);
- device_printf(sc->isf_dev, "%juM flash device\n",
- (uintmax_t)disk->d_mediasize / (1024 * 1024));
-
-}
-
-static void
-isf_disk_remove(struct isf_softc *sc)
-{
- struct disk *disk;
-
- ISF_LOCK_ASSERT(sc);
- KASSERT(sc->isf_disk != NULL, ("%s: isf_disk NULL", __func__));
-
- sc->isf_doomed = 1;
- ISF_WAKEUP(sc);
- ISF_SLEEP(sc, sc->isf_proc, 0);
-
- /*
- * XXXRW: Is it OK to call disk_destroy() under the mutex, or should
- * we be deferring that to the calling context once it is released?
- */
- disk = sc->isf_disk;
- disk_gone(disk);
- disk_destroy(disk);
- sc->isf_disk = NULL;
- free(sc->isf_bstate, M_ISF);
- device_printf(sc->isf_dev, "flash device removed\n");
-}
-
-int
-isf_attach(struct isf_softc *sc)
-{
- uint16_t id;
- u_long start, size;
- struct isf_chips *cp = chip_ids;
-
- start = rman_get_start(sc->isf_res);
- if (start % 2 != 0) {
- device_printf(sc->isf_dev,
- "Unsupported flash start alignment %lu\n",
- start);
- return (ENXIO);
- }
-
- isf_write_cmd(sc, 0, ISF_CMD_RDI);
- id = isf_read_reg(sc, ISF_REG_ID);
- while (cp->chip_id != id)
- cp++;
- if (cp->chip_desc == NULL) {
- device_printf(sc->isf_dev,
- "Unsupported device ID 0x%04x\n", id);
- return (ENXIO);
- }
- isf_write_cmd(sc, 0, ISF_CMD_RA);
-
- size = rman_get_size(sc->isf_res);
- if (size != cp->chip_size) {
- device_printf(sc->isf_dev,
- "Unsupported flash size %lu\n", size);
- return (ENXIO);
- }
-
- bioq_init(&sc->isf_bioq);
- ISF_LOCK_INIT(sc);
- sc->isf_disk = NULL;
- isf_disk_insert(sc, size);
- return(0);
-}
-
-void
-isf_detach(struct isf_softc *sc)
-{
-
- /*
- * Simulate a disk removal if one is present to deal with any pending
- * or queued I/O. This will occur as a result of a device driver
- * detach -- the Intel StrataFlash has no notion of removal itself.
- *
- * XXXRW: Is the locking here right?
- */
- ISF_LOCK(sc);
- isf_disk_remove(sc);
- bioq_flush(&sc->isf_bioq, NULL, ENXIO);
- KASSERT(bioq_first(&sc->isf_bioq) == NULL,
- ("%s: non-empty bioq", __func__));
- ISF_UNLOCK(sc);
- ISF_LOCK_DESTROY(sc);
-}
diff --git a/sys/dev/isf/isf.h b/sys/dev/isf/isf.h
deleted file mode 100644
index bfcca07..0000000
--- a/sys/dev/isf/isf.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*-
- * Copyright (c) 2012 Robert N. M. Watson
- * Copyright (c) 2012 SRI International
- * All rights reserved.
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
- * ("CTSRD"), as part of the DARPA CRASH research programme.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _DEV_ISF_H_
-#define _DEV_ISF_H_
-
-struct isf_range {
- off_t ir_off; /* Offset of range to delete (set to 0xFF) */
- size_t ir_size; /* Size of range */
-};
-
-#define ISF_ERASE _IOW('I', 1, struct isf_range)
-
-/*
- * Ordinary read and write operations are limited to 512 bytes.
- * We support erasing 128K blocks and ignore the fact that portions of the
- * flash are in fact divided into 32K blocks.
- */
-#define ISF_SECTORSIZE (512)
-#define ISF_ERASE_BLOCK (128 * 1024)
-
-#ifdef _KERNEL
-MALLOC_DECLARE(M_ISF);
-
-enum bstate {
- BS_STEADY = 0,
- BS_ERASING
-};
-
-struct isf_softc {
- device_t isf_dev;
- int isf_unit;
- struct resource *isf_res;
- int isf_rid;
- struct mtx isf_lock;
- struct disk *isf_disk;
- struct proc *isf_proc;
- int isf_doomed;
-
- /*
- * Fields relating to in-progress and pending I/O, if any.
- */
- struct bio_queue_head isf_bioq;
- uint16_t isf_rbuf[ISF_SECTORSIZE / 2];
- int isf_erasing;
- enum bstate *isf_bstate;
-};
-
-#define ISF_LOCK(sc) mtx_lock(&(sc)->isf_lock)
-#define ISF_LOCK_ASSERT(sc) mtx_assert(&(sc)->isf_lock, MA_OWNED)
-#define ISF_LOCK_DESTROY(sc) mtx_destroy(&(sc)->isf_lock)
-#define ISF_LOCK_INIT(sc) mtx_init(&(sc)->isf_lock, "isf", NULL, \
- MTX_DEF)
-#define ISF_SLEEP(sc, wait, timo) mtx_sleep((wait), \
- &(sc)->isf_lock, PRIBIO, \
- "isf", (timo))
-#define ISF_UNLOCK(sc) mtx_unlock(&(sc)->isf_lock)
-#define ISF_WAKEUP(sc) wakeup((sc))
-
-int isf_attach(struct isf_softc *sc);
-void isf_detach(struct isf_softc *sc);
-
-extern devclass_t isf_devclass;
-#endif /* _KERNEL */
-
-#endif /* _DEV_ISF_H_ */
diff --git a/sys/dev/isf/isf_fdt.c b/sys/dev/isf/isf_fdt.c
deleted file mode 100644
index f4c20a2..0000000
--- a/sys/dev/isf/isf_fdt.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*-
- * Copyright (c) 2012 Robert N. M. Watson
- * Copyright (c) 2012 SRI International
- * All rights reserved.
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
- * ("CTSRD"), as part of the DARPA CRASH research programme.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/bus.h>
-#include <sys/condvar.h>
-#include <sys/conf.h>
-#include <sys/bio.h>
-#include <sys/kernel.h>
-#include <sys/lock.h>
-#include <sys/malloc.h>
-#include <sys/module.h>
-#include <sys/mutex.h>
-#include <sys/rman.h>
-#include <sys/systm.h>
-#include <sys/taskqueue.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-
-#include <geom/geom_disk.h>
-
-#include <dev/fdt/fdt_common.h>
-#include <dev/ofw/openfirm.h>
-#include <dev/ofw/ofw_bus.h>
-#include <dev/ofw/ofw_bus_subr.h>
-
-#include <dev/isf/isf.h>
-
-/*
- * FDT bus attachment for the Intel Strata Flash devices.
- */
-static int
-isf_fdt_probe(device_t dev)
-{
-
- if (ofw_bus_is_compatible(dev, "intel,strataflash")) {
- device_set_desc(dev, "Intel StrataFlash NOR flash device");
- return (BUS_PROBE_DEFAULT);
- }
- return (ENXIO);
-}
-
-static int
-isf_fdt_attach(device_t dev)
-{
- int error;
- struct isf_softc *sc;
-
- sc = device_get_softc(dev);
- sc->isf_dev = dev;
- sc->isf_unit = device_get_unit(dev);
- sc->isf_rid = 0;
- sc->isf_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
- &sc->isf_rid, RF_ACTIVE);
- if (sc->isf_res == NULL) {
- device_printf(dev, "couldn't map memory\n");
- return (ENXIO);
- }
- error = isf_attach(sc);
- if (error)
- bus_release_resource(dev, SYS_RES_MEMORY, sc->isf_rid,
- sc->isf_res);
- return (error);
-}
-
-static int
-isf_fdt_detach(device_t dev)
-{
- struct isf_softc *sc;
-
- sc = device_get_softc(dev);
- KASSERT(sc->isf_res != NULL, ("%s: resources not allocated",
- __func__));
- isf_detach(sc);
- bus_release_resource(dev, SYS_RES_MEMORY, sc->isf_rid, sc->isf_res);
- return (0);
-}
-
-static device_method_t isf_fdt_methods[] = {
- DEVMETHOD(device_probe, isf_fdt_probe),
- DEVMETHOD(device_attach, isf_fdt_attach),
- DEVMETHOD(device_detach, isf_fdt_detach),
- { 0, 0 }
-};
-
-static driver_t isf_fdt_driver = {
- "isf",
- isf_fdt_methods,
- sizeof(struct isf_softc),
-};
-
-DRIVER_MODULE(isf, simplebus, isf_fdt_driver, isf_devclass, 0, 0);
diff --git a/sys/dev/isf/isf_nexus.c b/sys/dev/isf/isf_nexus.c
deleted file mode 100644
index 7631453..0000000
--- a/sys/dev/isf/isf_nexus.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*-
- * Copyright (c) 2012 Robert N. M. Watson
- * Copyright (c) 2012 SRI International
- * All rights reserved.
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
- * ("CTSRD"), as part of the DARPA CRASH research programme.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/bus.h>
-#include <sys/condvar.h>
-#include <sys/conf.h>
-#include <sys/bio.h>
-#include <sys/kernel.h>
-#include <sys/lock.h>
-#include <sys/malloc.h>
-#include <sys/module.h>
-#include <sys/mutex.h>
-#include <sys/rman.h>
-#include <sys/systm.h>
-#include <sys/taskqueue.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-
-#include <geom/geom_disk.h>
-
-#include <dev/isf/isf.h>
-
-/*
- * Nexus bus attachment for the Intel Strata Flash devices. Appropriate for
- * most Altera FPGA SoC-style configurations in which the part will be exposed
- * to the processor via a memory-mapped Avalon bus.
- */
-static int
-isf_nexus_probe(device_t dev)
-{
-
- device_set_desc(dev, "Intel StrataFlash NOR flash device");
- return (BUS_PROBE_DEFAULT);
-}
-
-static int
-isf_nexus_attach(device_t dev)
-{
- int error;
- struct isf_softc *sc;
-
- sc = device_get_softc(dev);
- sc->isf_dev = dev;
- sc->isf_unit = device_get_unit(dev);
- sc->isf_rid = 0;
- sc->isf_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
- &sc->isf_rid, RF_ACTIVE);
- if (sc->isf_res == NULL) {
- device_printf(dev, "couldn't map memory\n");
- return (ENXIO);
- }
- error = isf_attach(sc);
- if (error)
- bus_release_resource(dev, SYS_RES_MEMORY, sc->isf_rid,
- sc->isf_res);
- return (error);
-}
-
-static int
-isf_nexus_detach(device_t dev)
-{
- struct isf_softc *sc;
-
- sc = device_get_softc(dev);
- KASSERT(sc->isf_res != NULL, ("%s: resources not allocated",
- __func__));
- isf_detach(sc);
- bus_release_resource(dev, SYS_RES_MEMORY, sc->isf_rid, sc->isf_res);
- return (0);
-}
-
-static device_method_t isf_nexus_methods[] = {
- DEVMETHOD(device_probe, isf_nexus_probe),
- DEVMETHOD(device_attach, isf_nexus_attach),
- DEVMETHOD(device_detach, isf_nexus_detach),
- { 0, 0 }
-};
-
-static driver_t isf_nexus_driver = {
- "isf",
- isf_nexus_methods,
- sizeof(struct isf_softc),
-};
-
-DRIVER_MODULE(isf, nexus, isf_nexus_driver, isf_devclass, 0, 0);
diff --git a/sys/mips/conf/BERI_DE4.hints b/sys/mips/conf/BERI_DE4.hints
index 9ec33c8..3bc34dc 100644
--- a/sys/mips/conf/BERI_DE4.hints
+++ b/sys/mips/conf/BERI_DE4.hints
@@ -55,7 +55,6 @@ hint.altera_avgen.0.devname="berirom"
#
# Expose the DE4 flash via an Avalon "generic" device.
-# This is incompatible with the isf(4) driver.
#
#hint.altera_avgen.0.at="nexus0"
#hint.altera_avgen.0.maddr=0x74000000
@@ -74,38 +73,3 @@ hint.altera_avgen.0.msize=2
hint.altera_avgen.0.width=1
hint.altera_avgen.0.fileio="r"
hint.altera_avgen.0.devname="de4bsw"
-
-#
-# General Intel StrataFlash driver
-#
-hint.isf.0.at="nexus0"
-hint.isf.0.maddr=0x74000000
-hint.isf.0.msize=0x2000000
-hint.isf.1.at="nexus0"
-hint.isf.1.maddr=0x76000000
-hint.isf.1.msize=0x2000000
-
-# Reserved configuration blocks. Don't touch.
-hint.map.0.at="isf0"
-hint.map.0.start=0x00000000
-hint.map.0.end=0x00020000
-hint.map.0.name="config"
-hint.map.0.readonly=1
-
-# Hardwired location of bitfile
-hint.map.1.at="isf0"
-hint.map.1.start=0x00020000
-hint.map.1.end=0x01820000
-hint.map.1.name="fpga"
-
-# Kernel on first chip
-hint.map.2.at="isf0"
-hint.map.2.start=0x01820000
-hint.map.2.end=0x02000000
-hint.map.2.name="reserved"
-
-# The second chip
-hint.map.3.at="isf1"
-hint.map.3.start=0x00000000
-hint.map.3.end=0x02000000
-hint.map.3.name="kernel"
diff --git a/sys/mips/conf/BERI_DE4_MDROOT b/sys/mips/conf/BERI_DE4_MDROOT
index f40a60e..18cc70d 100644
--- a/sys/mips/conf/BERI_DE4_MDROOT
+++ b/sys/mips/conf/BERI_DE4_MDROOT
@@ -26,5 +26,4 @@ device altera_sdcard
device terasic_de4led
device terasic_mtl
-device isf
device sc
diff --git a/sys/mips/conf/BERI_DE4_SDROOT b/sys/mips/conf/BERI_DE4_SDROOT
index 304cce5..68ac995 100644
--- a/sys/mips/conf/BERI_DE4_SDROOT
+++ b/sys/mips/conf/BERI_DE4_SDROOT
@@ -20,5 +20,4 @@ device altera_sdcard
device terasic_de4led
device terasic_mtl
-device isf
device sc
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
index ba44cd3..b58d674 100644
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -37,7 +37,6 @@ SUBDIR= adduser \
inetd \
iostat \
iscsid \
- isfctl \
kldxref \
mailwrapper \
makefs \
diff --git a/usr.sbin/isfctl/Makefile b/usr.sbin/isfctl/Makefile
deleted file mode 100644
index 30f8e5b..0000000
--- a/usr.sbin/isfctl/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-# $FreeBSD$
-
-PROG= isfctl
-
-MAN= isfctl.8
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/isfctl/isfctl.8 b/usr.sbin/isfctl/isfctl.8
deleted file mode 100644
index 06b2f3a..0000000
--- a/usr.sbin/isfctl/isfctl.8
+++ /dev/null
@@ -1,89 +0,0 @@
-.\"-
-.\" Copyright (c) 2012 SRI International
-.\" All rights reserved.
-.\"
-.\" This software was developed by SRI International and the University of
-.\" Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
-.\" ("CTSRD"), as part of the DARPA CRASH research programme.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd August 3, 2012
-.Dt ISFCTL 8
-.Os
-.Sh NAME
-.Nm isfctl
-.Nd Intel StrataFlash device control program
-.Sh SYNOPSIS
-.Nm
-.Ar device
-.Ic erase
-.Ar offset
-.Ar size
-.Sh DESCRIPTION
-The
-.Nm
-utility provides a way for administrators to control aspects of
-.Xr isf 4
-devices that can not be managed though the
-.Xr disk 9
-interface.
-.Pp
-The
-.Nm
-utility takes a device name as its first argument followed by a command.
-Currently supported commands are:
-.Bl -tag -width erase
-.It Ic erase
-Erase blocks beginning at
-.Ar offset
-covering a total of
-.Ar size
-bytes.
-The
-.Ar offset
-argument must be a multiple of 128K.
-The
-.Ar size
-argument must either be a multiple of 128K or a number less than 32K in
-which case it is treated as a number of 128K blocks to erase.
-.El
-.Sh EXAMPLES
-.Dl isfctl isf0 erase 0 0x20000
-.Pp
-Erase the first block of the isf0 device.
-.Sh SEE ALSO
-.Xr isf 4
-.Sh HISTORY
-The
-.Nm
-utility first appeared in
-.Fx 10.0 .
-.Sh AUTHORS
-This software and this manual page were
-developed by SRI International and the University of Cambridge Computer
-Laboratory under DARPA/AFRL contract
-.Pq FA8750-10-C-0237
-.Pq Do CTSRD Dc ,
-as part of the DARPA CRASH research programme.
diff --git a/usr.sbin/isfctl/isfctl.c b/usr.sbin/isfctl/isfctl.c
deleted file mode 100644
index af99093..0000000
--- a/usr.sbin/isfctl/isfctl.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*-
- * Copyright (c) 2012 SRI International
- * All rights reserved.
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
- * ("CTSRD"), as part of the DARPA CRASH research programme.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-
-#include <err.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-/* XXXBED: should install and include sys/dev/isf.h */
-struct isf_range {
- off_t ir_off; /* Offset of range to delete (set to 0xFF) */
- size_t ir_size; /* Size of range */
-};
-
-#define ISF_ERASE _IOW('I', 1, struct isf_range)
-
-#define ISF_ERASE_BLOCK (128 * 1024)
-
-static enum {UNSET, ERASE} action = UNSET;
-
-static void
-usage(void)
-{
- fprintf(stderr, "usage: isfctl <device> erase <offset> <size>\n");
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct isf_range ir;
- int fd, i;
- char *p, *dev;
-
- if (argc < 2)
- usage();
- argc--; argv++;
-
- if (*argv[0] == '/')
- dev = argv[0];
- else
- asprintf(&dev, "/dev/%s", argv[0]);
- argc--; argv++;
- fd = open(dev, O_RDWR);
- if (fd < 0)
- err(1, "unable to open device -- %s", dev);
-
- if (strcmp(argv[0], "erase") == 0) {
- if (argc != 3)
- usage();
- action = ERASE;
- ir.ir_off = strtol(argv[1], &p, 0);
- if (*p)
- errx(1, "invalid offset -- %s", argv[2]);
- ir.ir_size = strtol(argv[2], &p, 0);
- if (*p)
- errx(1, "invalid size -- %s", argv[3]);
- /*
- * If the user requests to delete less than 32K of space
- * then assume that they want to delete a number of 128K
- * blocks.
- */
- if (ir.ir_size < 32 * 1024)
- ir.ir_size *= 128 * 1024;
- }
-
- switch (action) {
- case ERASE:
- i = ioctl(fd, ISF_ERASE, &ir);
- if (i < 0)
- err(1, "ioctl(%s, %jx, %zx)", dev,
- (intmax_t)ir.ir_off, ir.ir_size);
- break;
- default:
- usage();
- }
-
- close(fd);
- return (0);
-}
OpenPOWER on IntegriCloud