choose the size of the last region for d_stripsize instead of the first;

this fixes geom_redboot on boards that have multiple parts/regions as it
uses the value to locate the FIS directory which is in the last erase
region of flash
This commit is contained in:
Sam Leffler 2009-03-10 22:29:42 +00:00
parent 41f0c91517
commit 7bed4560f3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=189654

View file

@ -99,9 +99,16 @@ cfi_disk_attach(device_t dev)
sc->disk->d_mediasize = sc->parent->sc_size;
sc->disk->d_maxsize = CFI_DISK_MAXIOSIZE;
/* NB: use stripesize to hold the erase/region size */
if (sc->parent->sc_regions)
sc->disk->d_stripesize = sc->parent->sc_region->r_blksz;
else
if (sc->parent->sc_regions) {
/*
* Multiple regions, use the last one. This is a
* total hack as it's (presently) used only by
* geom_redboot to locate the FIS directory which
* lies at the start of the last erase region.
*/
sc->disk->d_stripesize =
sc->parent->sc_region[sc->parent->sc_regions-1].r_blksz;
} else
sc->disk->d_stripesize = sc->disk->d_mediasize;
sc->disk->d_drv1 = sc;
disk_create(sc->disk, DISK_VERSION);