From owner-freebsd-embedded@FreeBSD.ORG Sun Feb 13 19:02:47 2011 Return-Path: Delivered-To: freebsd-embedded@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A505E106564A; Sun, 13 Feb 2011 19:02:47 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-vw0-f54.google.com (mail-vw0-f54.google.com [209.85.212.54]) by mx1.freebsd.org (Postfix) with ESMTP id 4635A8FC0A; Sun, 13 Feb 2011 19:02:46 +0000 (UTC) Received: by vws9 with SMTP id 9so2560718vws.13 for ; Sun, 13 Feb 2011 11:02:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:date:message-id:subject:from:to:cc :content-type; bh=nhFdfdIMMYFRqtTVjFtX1Jitip45TlhRBkFxJ07PmIk=; b=lGXKJwCHNzUV1//LmkD4i04Q+3sFKP5AVMahmLfgl/PH+3y08JLDXLar3jWysoJuqi B04ELOPjcWfnZp9V1/Q/74Q85rCFcqzHsIBEAO2xQ6xReq3dxdYtxhWr8sWSFb+IlePI hhmhDEEmGK/EOQUsuZ5IePC7a5I5a9dtQePdY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:cc:content-type; b=s40zZAdmJn5UW9RpMb6ly7q69zRY8MwBAjHjMrevkKy49P+7TzVRdyfROo7zfla3WH D5Tg67u6x0AM81W79Gi/3iDPmei/mMuRDG/XGLoHLEfU73pGRu9rdFbcJf9oHao0hTZv c5TPt5KqrgE70MjaHUIfsXPooWfwTv0BpLX4A= MIME-Version: 1.0 Received: by 10.220.201.70 with SMTP id ez6mr3764939vcb.229.1297623766439; Sun, 13 Feb 2011 11:02:46 -0800 (PST) Received: by 10.220.186.133 with HTTP; Sun, 13 Feb 2011 11:02:46 -0800 (PST) Date: Mon, 14 Feb 2011 03:02:46 +0800 Message-ID: From: Adrian Chadd To: freebsd-embedded@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-mips@freebsd.org Subject: patch to sys/dev/flash/ to allow smaller read IO sizes X-BeenThere: freebsd-embedded@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Dedicated and Embedded Systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 13 Feb 2011 19:02:47 -0000 I've been running a few of my ubiquiti boards out of flash recently and the default sector size just makes it impossible. This patch introduces a couple of important changes: * the GEOM sector size is changed to 512 bytes; * non-aligned size/offset for read/write is now an IO error, rather than a KASSERT(); This means that read IO will work fine with smaller IO sizes and the wrong-sized IO will simply return EIO rather than panicing the kernel. Writing should still work for IO size+offset as a multiple of the sector size. Thanks, Adrian ==== [root@pcbsd-1294 /data/1/adrian/head/src]# cat /tmp/flash_read_size.diff Index: sys/dev/flash/mx25l.c =================================================================== --- sys/dev/flash/mx25l.c (revision 218440) +++ sys/dev/flash/mx25l.c (working copy) @@ -49,6 +49,13 @@ #define FL_ERASE_4K 0x01 #define FL_ERASE_32K 0x02 +/* + * Define the sectorsize to be a smaller size rather than the flash + * sector size. Trying to run FFS off of a 64k flash sector size + * results in a completely un-usable system. + */ +#define MX25L_SECTORSIZE 512 + struct mx25l_flash_ident { const char *name; @@ -230,17 +237,10 @@ bytes_writen = 0; write_offset = offset; - /* - * Sanity checks - */ - KASSERT(count % sc->sc_sectorsize == 0, - ("count for BIO_WRITE is not sector size (%d bytes) aligned", - sc->sc_sectorsize)); + /* Use the erase sectorsize here; since blocks are erased first before writing */ + if (count % sc->sc_sectorsize != 0 || offset % sc->sc_sectorsize != 0) + return (EIO); - KASSERT(offset % sc->sc_sectorsize == 0, - ("offset for BIO_WRITE is not sector size (%d bytes) aligned", - sc->sc_sectorsize)); - /* * Assume here that we write per-sector only * and sector size should be 256 bytes aligned @@ -307,17 +307,10 @@ pdev = device_get_parent(dev); sc = device_get_softc(dev); - /* - * Sanity checks - */ - KASSERT(count % sc->sc_sectorsize == 0, - ("count for BIO_READ is not sector size (%d bytes) aligned", - sc->sc_sectorsize)); + /* Enforce the disk read sectorsize; not the erase sectorsize */ + if (count % sc->sc_disk->d_sectorsize != 0 || offset % sc->sc_disk->d_sectorsize != 0) + return (EIO); - KASSERT(offset % sc->sc_sectorsize == 0, - ("offset for BIO_READ is not sector size (%d bytes) aligned", - sc->sc_sectorsize)); - txBuf[0] = CMD_FAST_READ; cmd.tx_cmd_sz = 5; cmd.rx_cmd_sz = 5; @@ -371,7 +364,7 @@ sc->sc_disk->d_name = "flash/spi"; sc->sc_disk->d_drv1 = sc; sc->sc_disk->d_maxsize = DFLTPHYS; - sc->sc_disk->d_sectorsize = ident->sectorsize; + sc->sc_disk->d_sectorsize = MX25L_SECTORSIZE; sc->sc_disk->d_mediasize = ident->sectorsize * ident->sectorcount; sc->sc_disk->d_unit = device_get_unit(sc->sc_dev); sc->sc_disk->d_dump = NULL; /* NB: no dumps */ From owner-freebsd-embedded@FreeBSD.ORG Mon Feb 14 11:07:02 2011 Return-Path: Delivered-To: freebsd-embedded@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0FE2510656AD for ; Mon, 14 Feb 2011 11:07:02 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id F060A8FC2A for ; Mon, 14 Feb 2011 11:07:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p1EB71Ne077144 for ; Mon, 14 Feb 2011 11:07:01 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p1EB71Bj077142 for freebsd-embedded@FreeBSD.org; Mon, 14 Feb 2011 11:07:01 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 14 Feb 2011 11:07:01 GMT Message-Id: <201102141107.p1EB71Bj077142@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-embedded@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-embedded@FreeBSD.org X-BeenThere: freebsd-embedded@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Dedicated and Embedded Systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Feb 2011 11:07:02 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- p misc/151696 embedded [nanobsd] [patch] nanobsd.sh doesn't run "make_conf_bu o misc/151695 embedded [nanobsd] [patch] Enhance tools/nanobsd/fill_pkg.sh o misc/136889 embedded [nanobsd] [patch] nanobsd error reporting and other re o misc/52256 embedded [picobsd] picobsd build script does not read in user/s o kern/42728 embedded [picobsd] many problems in src/usr.sbin/ppp/* after c 5 problems total.