Message ID | 1422966166-3973-23-git-send-email-oe5hpm@oevsv.at |
---|---|
State | Rejected |
Headers | show |
Hi all, please ignore this "internal" patch. This is was an accident. best regards, Hannes "U-Boot" <u-boot-bounces@lists.denx.de> schrieb am 03.02.2015 13:22:45: > From: Hannes Petermaier <oe5hpm@oevsv.at> > To: u-boot@lists.denx.de > Date: 03.02.2015 13:27 > Subject: [U-Boot] [PATCH v2 23/24] intern: Add specific offset do FAT-Filesystem > Sent by: "U-Boot" <u-boot-bounces@lists.denx.de> > > on vxWorks targets the filesystem with its MBR starts from a higher offset in > the emmc flash for limiting space which is accesible by the user. > > Signed-off-by: Hannes Petermaier <oe5hpm@oevsv.at> > > --- > Changes for V2: None > --- > board/BuR/kwb/board.c | 6 ++++++ > disk/part_dos.c | 11 ++++++++--- > drivers/mmc/mmc.c | 8 ++++++++ > fs/fat/fat.c | 5 +++-- > fs/fat/fat_write.c | 7 ++++--- > include/part.h | 10 +++++++++- > 6 files changed, 38 insertions(+), 9 deletions(-) > > diff --git a/board/BuR/kwb/board.c b/board/BuR/kwb/board.c > index 892311e..8578c06 100644 > --- a/board/BuR/kwb/board.c > +++ b/board/BuR/kwb/board.c > @@ -27,6 +27,7 @@ > #include <power/tps65217.h> > #include "../common/bur_common.h" > #include <lcd.h> > +#include <mmc.h> > > /* -------------------------------------------------------------------------*/ > /* -- defines for used GPIO Hardware -- */ > @@ -162,6 +163,11 @@ int board_init(void) > gpmc_init(); > return 0; > } > +void board_mmc_geometry(struct mmc *mmc) > +{ > + mmc->block_dev.lba_fs = mmc->block_dev.lba - 0x2A8000; > + mmc->block_dev.lba_offset = 0x2A8000; > +} > > #ifdef CONFIG_BOARD_LATE_INIT > int board_late_init(void) > diff --git a/disk/part_dos.c b/disk/part_dos.c > index cf1a36e..9c34107 100644 > --- a/disk/part_dos.c > +++ b/disk/part_dos.c > @@ -89,7 +89,8 @@ int test_part_dos (block_dev_desc_t *dev_desc) > { > ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz); > > - if (dev_desc->block_read(dev_desc->dev, 0, 1, (ulong *) buffer) != 1) > + if (dev_desc->block_read(dev_desc->dev, dev_desc->lba_offset, 1, > + (ulong *)buffer) != 1) > return -1; > > if (test_block_type(buffer) != DOS_MBR) > @@ -108,7 +109,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc, > dos_partition_t *pt; > int i; > > - if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > + if (dev_desc->block_read(dev_desc->dev, > + ext_part_sector + dev_desc->lba_offset, 1, > + (ulong *)buffer) != 1) { > printf ("** Can't read partition table on %d:%d **\n", > dev_desc->dev, ext_part_sector); > return; > @@ -172,7 +175,9 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part > int i; > int dos_type; > > - if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > + if (dev_desc->block_read(dev_desc->dev, > + ext_part_sector + dev_desc->lba_offset, 1, > + (ulong *)buffer) != 1) { > printf ("** Can't read partition table on %d:%d **\n", > dev_desc->dev, ext_part_sector); > return -1; > diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c > index b8039cd..52e8cf5 100644 > --- a/drivers/mmc/mmc.c > +++ b/drivers/mmc/mmc.c > @@ -531,6 +531,12 @@ static int mmc_change_freq(struct mmc *mmc) > return 0; > } > > +void __weak board_mmc_geometry(struct mmc *mmc) > +{ > + mmc->block_dev.lba_fs = mmc->block_dev.lba; > + mmc->block_dev.lba_offset = 0; > +} > + > static int mmc_set_capacity(struct mmc *mmc, int part_num) > { > switch (part_num) { > @@ -556,6 +562,8 @@ static int mmc_set_capacity(struct mmc *mmc, int part_num) > > mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len); > > + board_mmc_geometry(mmc); > + > return 0; > } > > diff --git a/fs/fat/fat.c b/fs/fat/fat.c > index bccc3e3..46f7da6 100644 > --- a/fs/fat/fat.c > +++ b/fs/fat/fat.c > @@ -49,7 +49,8 @@ static int disk_read(__u32 block, __u32 nr_blocks, void *buf) > return -1; > > return cur_dev->block_read(cur_dev->dev, > - cur_part_info.start + block, nr_blocks, buf); > + cur_part_info.start + block + cur_dev->lba_offset, > + nr_blocks, buf); > } > > int fat_set_blk_dev(block_dev_desc_t *dev_desc, disk_partition_t *info) > @@ -97,7 +98,7 @@ int fat_register_device(block_dev_desc_t *dev_desc, int part_no) > } > > info.start = 0; > - info.size = dev_desc->lba; > + info.size = dev_desc->lba_fs; > info.blksz = dev_desc->blksz; > info.name[0] = 0; > info.type[0] = 0; > diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c > index 98b88ad..7ed656e 100644 > --- a/fs/fat/fat_write.c > +++ b/fs/fat/fat_write.c > @@ -33,14 +33,15 @@ static int disk_write(__u32 block, __u32 nr_blocks, void *buf) > if (!cur_dev || !cur_dev->block_write) > return -1; > > - if (cur_part_info.start + block + nr_blocks > > - cur_part_info.start + total_sector) { > + if (cur_part_info.start + block + nr_blocks + cur_dev->lba_offset > > + cur_part_info.start + total_sector + cur_dev->lba_offset) { > printf("error: overflow occurs\n"); > return -1; > } > > return cur_dev->block_write(cur_dev->dev, > - cur_part_info.start + block, nr_blocks, buf); > + cur_part_info.start + block + cur_dev->lba_offset, > + nr_blocks, buf); > } > > /* > diff --git a/include/part.h b/include/part.h > index 8ea9b30..1f80c35 100644 > --- a/include/part.h > +++ b/include/part.h > @@ -21,7 +21,15 @@ typedef struct block_dev_desc { > #ifdef CONFIG_LBA48 > unsigned char lba48; /* device can use 48bit addr (ATA/ATAPI v7) */ > #endif > - lbaint_t lba; /* number of blocks */ > + lbaint_t lba_offset; /* > + * offset from which file-systems > + * do their work > + */ > + lbaint_t lba_fs; /* > + * number of blocks available to the > + * file-system > + */ > + lbaint_t lba; /* total number of blocks-available */ > unsigned long blksz; /* block size */ > int log2blksz; /* for convenience: log2(blksz) */ > char vendor [40+1]; /* IDE model, SCSI Vendor */ > -- > 1.7.10.4 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot
diff --git a/board/BuR/kwb/board.c b/board/BuR/kwb/board.c index 892311e..8578c06 100644 --- a/board/BuR/kwb/board.c +++ b/board/BuR/kwb/board.c @@ -27,6 +27,7 @@ #include <power/tps65217.h> #include "../common/bur_common.h" #include <lcd.h> +#include <mmc.h> /* -------------------------------------------------------------------------*/ /* -- defines for used GPIO Hardware -- */ @@ -162,6 +163,11 @@ int board_init(void) gpmc_init(); return 0; } +void board_mmc_geometry(struct mmc *mmc) +{ + mmc->block_dev.lba_fs = mmc->block_dev.lba - 0x2A8000; + mmc->block_dev.lba_offset = 0x2A8000; +} #ifdef CONFIG_BOARD_LATE_INIT int board_late_init(void) diff --git a/disk/part_dos.c b/disk/part_dos.c index cf1a36e..9c34107 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -89,7 +89,8 @@ int test_part_dos (block_dev_desc_t *dev_desc) { ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz); - if (dev_desc->block_read(dev_desc->dev, 0, 1, (ulong *) buffer) != 1) + if (dev_desc->block_read(dev_desc->dev, dev_desc->lba_offset, 1, + (ulong *)buffer) != 1) return -1; if (test_block_type(buffer) != DOS_MBR) @@ -108,7 +109,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc, dos_partition_t *pt; int i; - if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) { + if (dev_desc->block_read(dev_desc->dev, + ext_part_sector + dev_desc->lba_offset, 1, + (ulong *)buffer) != 1) { printf ("** Can't read partition table on %d:%d **\n", dev_desc->dev, ext_part_sector); return; @@ -172,7 +175,9 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part int i; int dos_type; - if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) { + if (dev_desc->block_read(dev_desc->dev, + ext_part_sector + dev_desc->lba_offset, 1, + (ulong *)buffer) != 1) { printf ("** Can't read partition table on %d:%d **\n", dev_desc->dev, ext_part_sector); return -1; diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index b8039cd..52e8cf5 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -531,6 +531,12 @@ static int mmc_change_freq(struct mmc *mmc) return 0; } +void __weak board_mmc_geometry(struct mmc *mmc) +{ + mmc->block_dev.lba_fs = mmc->block_dev.lba; + mmc->block_dev.lba_offset = 0; +} + static int mmc_set_capacity(struct mmc *mmc, int part_num) { switch (part_num) { @@ -556,6 +562,8 @@ static int mmc_set_capacity(struct mmc *mmc, int part_num) mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len); + board_mmc_geometry(mmc); + return 0; } diff --git a/fs/fat/fat.c b/fs/fat/fat.c index bccc3e3..46f7da6 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -49,7 +49,8 @@ static int disk_read(__u32 block, __u32 nr_blocks, void *buf) return -1; return cur_dev->block_read(cur_dev->dev, - cur_part_info.start + block, nr_blocks, buf); + cur_part_info.start + block + cur_dev->lba_offset, + nr_blocks, buf); } int fat_set_blk_dev(block_dev_desc_t *dev_desc, disk_partition_t *info) @@ -97,7 +98,7 @@ int fat_register_device(block_dev_desc_t *dev_desc, int part_no) } info.start = 0; - info.size = dev_desc->lba; + info.size = dev_desc->lba_fs; info.blksz = dev_desc->blksz; info.name[0] = 0; info.type[0] = 0; diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 98b88ad..7ed656e 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -33,14 +33,15 @@ static int disk_write(__u32 block, __u32 nr_blocks, void *buf) if (!cur_dev || !cur_dev->block_write) return -1; - if (cur_part_info.start + block + nr_blocks > - cur_part_info.start + total_sector) { + if (cur_part_info.start + block + nr_blocks + cur_dev->lba_offset > + cur_part_info.start + total_sector + cur_dev->lba_offset) { printf("error: overflow occurs\n"); return -1; } return cur_dev->block_write(cur_dev->dev, - cur_part_info.start + block, nr_blocks, buf); + cur_part_info.start + block + cur_dev->lba_offset, + nr_blocks, buf); } /* diff --git a/include/part.h b/include/part.h index 8ea9b30..1f80c35 100644 --- a/include/part.h +++ b/include/part.h @@ -21,7 +21,15 @@ typedef struct block_dev_desc { #ifdef CONFIG_LBA48 unsigned char lba48; /* device can use 48bit addr (ATA/ATAPI v7) */ #endif - lbaint_t lba; /* number of blocks */ + lbaint_t lba_offset; /* + * offset from which file-systems + * do their work + */ + lbaint_t lba_fs; /* + * number of blocks available to the + * file-system + */ + lbaint_t lba; /* total number of blocks-available */ unsigned long blksz; /* block size */ int log2blksz; /* for convenience: log2(blksz) */ char vendor [40+1]; /* IDE model, SCSI Vendor */
on vxWorks targets the filesystem with its MBR starts from a higher offset in the emmc flash for limiting space which is accesible by the user. Signed-off-by: Hannes Petermaier <oe5hpm@oevsv.at> --- Changes for V2: None --- board/BuR/kwb/board.c | 6 ++++++ disk/part_dos.c | 11 ++++++++--- drivers/mmc/mmc.c | 8 ++++++++ fs/fat/fat.c | 5 +++-- fs/fat/fat_write.c | 7 ++++--- include/part.h | 10 +++++++++- 6 files changed, 38 insertions(+), 9 deletions(-)