[U-Boot] Reboot and audio on Orange Pi mini (was: [linux-sunxi] Re: [PATCH v3 0/9] Stop AXP from crashing when enabling LDO3)
> Well, f you have the hardware, then there's only one way to find out: > > 1) Apply patchset > 2) Add following into boards defconfig: > CONFIG_AXP_ALDO3_INRUSH_QUIRK=y > 3) If it still fails to reboot, add following > CONFIG_AXP_ALDO3_VOLT_SLOPE_08=y Hmm... I tried it and it worked: it now reboots flawlessly. I tried it first with both setting, then only with the first... ... then without any ... then back with my old U-Boot and now I can't reproduce the hang that normally happens at almost every reboot. Not sure if I should rejoice or what. One thing I noticed along the way: on my Orange Pi mini, there's a regression in U-Boot that happened between 2015.07 and 2015.10. All version I tried starting with 2015.10 cause a constant "humming" on the audio output (the plain old TRRS plug audio output). During a reboot, the humming briefly disappears after Linux causes the reboot and before U-Boot has fully started, but it quickly comes pretty loudly. As soon as U-Boot passes the control to the Linux kernel the humming gets a bit less loud, but remains there. Playing a song doesn't seem to affect the humming. Interestingly, if I boot a Linux kernel with HDMI support, then at some point during the Linux boot, the humming disappears. But sadly, I need to use a DTB with the HDMI output disabled because of some unexplained interaction with the normal audio codec (see the «Odd "jump" when playing music on A20» thread in the linux-sunxi mainling list, spanning July to October). Stefan "back at U-Boot 2015.07" ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
>> Signed-off-by: Stefan Monnier <monn...@iro.umontreal.ca> > Sorry for the delay: > Reviewed-by: Tom Rini <tr...@konsulko.com> Great, thank you! Stefan ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
Ping yet again!? Stefan >>>>> "Stefan" == Stefan Monnier <monn...@iro.umontreal.ca> writes: > Signed-off-by: Stefan Monnier <monn...@iro.umontreal.ca> > --- > disk/part_dos.c | 29 + > include/ide.h | 8 > 2 files changed, 21 insertions(+), 16 deletions(-) > diff --git a/disk/part_dos.c b/disk/part_dos.c > index 89263d3..6280660 100644 > --- a/disk/part_dos.c > +++ b/disk/part_dos.c > @@ -26,7 +26,7 @@ > /* Convert char[4] in little endian format to the host format integer > */ > -static inline int le32_to_int(unsigned char *le32) > +static inline unsigned int le32_to_int(unsigned char *le32) > { > return ((le32[3] << 24) + > (le32[2] << 16) + > @@ -47,13 +47,14 @@ static inline int is_bootable(dos_partition_t *p) > return p->boot_ind == 0x80; > } > -static void print_one_part(dos_partition_t *p, int ext_part_sector, > +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector, > int part_num, unsigned int disksig) > { > - int lba_start = ext_part_sector + le32_to_int (p->start4); > - int lba_size = le32_to_int (p->size4); > + lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4); > + lbaint_t lba_size = le32_to_int (p->size4); > - printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n", > + printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength > + "u\t%08x-%02x\t%02x%s%s\n", > part_num, lba_start, lba_size, disksig, part_num, p->sys_ind, > (is_extended(p->sys_ind) ? " Extd" : ""), > (is_bootable(p) ? " Boot" : "")); > @@ -102,7 +103,8 @@ int test_part_dos (block_dev_desc_t *dev_desc) > /* Print a partition that is relative to its Extended partition table > */ > static void print_partition_extended(block_dev_desc_t *dev_desc, > - int ext_part_sector, int relative, > + lbaint_t ext_part_sector, > + lbaint_t relative, >int part_num, unsigned int disksig) > { > ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz); > @@ -110,7 +112,7 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > int i; > if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > - printf ("** Can't read partition table on %d:%d **\n", > + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc-> dev, ext_part_sector); > return; > } > @@ -149,7 +151,8 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); > for (i = 0; i < 4; i++, pt++) { > if (is_extended (pt->sys_ind)) { > - int lba_start = le32_to_int (pt->start4) + relative; > + lbaint_t lba_start > + = le32_to_int (pt->start4) + relative; > print_partition_extended(dev_desc, lba_start, > ext_part_sector == 0 ? lba_start : relative, > @@ -163,8 +166,9 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > /* Print a partition that is relative to its Extended partition table > */ > -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int > ext_part_sector, > - int relative, int part_num, > +static int get_partition_info_extended (block_dev_desc_t *dev_desc, > + lbaint_t ext_part_sector, > + lbaint_t relative, int part_num, >int which_part, disk_partition_t *info, >unsigned int disksig) > { > @@ -174,7 +178,7 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part > int dos_type; > if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > - printf ("** Can't read partition table on %d:%d **\n", > + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc-> dev, ext_part_sector); > return -1; > } > @@ -250,7 +254,8 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part > pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFF
[U-Boot] [PATCH] Don't wrap to negative after 2G sectors
Signed-off-by: Stefan Monnier <monn...@iro.umontreal.ca> --- disk/part_dos.c | 29 + include/ide.h | 8 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/disk/part_dos.c b/disk/part_dos.c index 89263d3..6280660 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -26,7 +26,7 @@ /* Convert char[4] in little endian format to the host format integer */ -static inline int le32_to_int(unsigned char *le32) +static inline unsigned int le32_to_int(unsigned char *le32) { return ((le32[3] << 24) + (le32[2] << 16) + @@ -47,13 +47,14 @@ static inline int is_bootable(dos_partition_t *p) return p->boot_ind == 0x80; } -static void print_one_part(dos_partition_t *p, int ext_part_sector, +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector, int part_num, unsigned int disksig) { - int lba_start = ext_part_sector + le32_to_int (p->start4); - int lba_size = le32_to_int (p->size4); + lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4); + lbaint_t lba_size = le32_to_int (p->size4); - printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n", + printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength + "u\t%08x-%02x\t%02x%s%s\n", part_num, lba_start, lba_size, disksig, part_num, p->sys_ind, (is_extended(p->sys_ind) ? " Extd" : ""), (is_bootable(p) ? " Boot" : "")); @@ -102,7 +103,8 @@ int test_part_dos (block_dev_desc_t *dev_desc) /* Print a partition that is relative to its Extended partition table */ static void print_partition_extended(block_dev_desc_t *dev_desc, -int ext_part_sector, int relative, +lbaint_t ext_part_sector, +lbaint_t relative, int part_num, unsigned int disksig) { ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz); @@ -110,7 +112,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc, int i; if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) { - printf ("** Can't read partition table on %d:%d **\n", + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc->dev, ext_part_sector); return; } @@ -149,7 +151,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc, pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); for (i = 0; i < 4; i++, pt++) { if (is_extended (pt->sys_ind)) { - int lba_start = le32_to_int (pt->start4) + relative; + lbaint_t lba_start + = le32_to_int (pt->start4) + relative; print_partition_extended(dev_desc, lba_start, ext_part_sector == 0 ? lba_start : relative, @@ -163,8 +166,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc, /* Print a partition that is relative to its Extended partition table */ -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector, -int relative, int part_num, +static int get_partition_info_extended (block_dev_desc_t *dev_desc, +lbaint_t ext_part_sector, +lbaint_t relative, int part_num, int which_part, disk_partition_t *info, unsigned int disksig) { @@ -174,7 +178,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part int dos_type; if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) { - printf ("** Can't read partition table on %d:%d **\n", + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc->dev, ext_part_sector); return -1; } @@ -250,7 +254,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); for (i = 0; i < 4; i++, pt++) { if (is_extended (pt->sys_ind)) { - int lba_start = le32_to_int (pt->start4) + relative; + lbaint_t lba_start + = le32_to_int (pt->start4) + relative; return get_partition_info_extended (dev_desc, lba_start, ext_part_sector == 0 ? lba_start
[U-Boot] Fix wrap around bug in MBR sector counts
I just bumped into a problem where U-Boot refused to boot from my disk's second partition because the sector number is "negative". More specifically, my disk drive is 2TB, which means that the number of 512B blocks fits into an unsigned 32bit int but not into a signed 32bit int. U-boot's "scsi part" displays the size (in blocks) correctly, but the size of the first partition (which is around 1.8TB) is printed as a negative number, and so is the start sector of the second partition. This was tested on a BananaPi using v2015-07. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
I haven't received any answer from anyone about my patch. What am I doing wrong? Stefan >>>>> "Stefan" == Stefan Monnier <monn...@iro.umontreal.ca> writes: > Signed-off-by: Stefan Monnier <monn...@iro.umontreal.ca> > --- > disk/part_dos.c | 29 + > include/ide.h | 8 > 2 files changed, 21 insertions(+), 16 deletions(-) > diff --git a/disk/part_dos.c b/disk/part_dos.c > index cf1a36e..adde68a 100644 > --- a/disk/part_dos.c > +++ b/disk/part_dos.c > @@ -25,7 +25,7 @@ > /* Convert char[4] in little endian format to the host format integer > */ > -static inline int le32_to_int(unsigned char *le32) > +static inline unsigned int le32_to_int(unsigned char *le32) > { > return ((le32[3] << 24) + > (le32[2] << 16) + > @@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p) > return p->boot_ind == 0x80; > } > -static void print_one_part(dos_partition_t *p, int ext_part_sector, > +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector, > int part_num, unsigned int disksig) > { > - int lba_start = ext_part_sector + le32_to_int (p->start4); > - int lba_size = le32_to_int (p->size4); > + lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4); > + lbaint_t lba_size = le32_to_int (p->size4); > - printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n", > + printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength > + "u\t%08x-%02x\t%02x%s%s\n", > part_num, lba_start, lba_size, disksig, part_num, p->sys_ind, > (is_extended(p->sys_ind) ? " Extd" : ""), > (is_bootable(p) ? " Boot" : "")); > @@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc) > /* Print a partition that is relative to its Extended partition table > */ > static void print_partition_extended(block_dev_desc_t *dev_desc, > - int ext_part_sector, int relative, > + lbaint_t ext_part_sector, > + lbaint_t relative, >int part_num, unsigned int disksig) > { > ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz); > @@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > int i; > if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > - printf ("** Can't read partition table on %d:%d **\n", > + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc-> dev, ext_part_sector); > return; > } > @@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); > for (i = 0; i < 4; i++, pt++) { > if (is_extended (pt->sys_ind)) { > - int lba_start = le32_to_int (pt->start4) + relative; > + lbaint_t lba_start > + = le32_to_int (pt->start4) + relative; > print_partition_extended(dev_desc, lba_start, > ext_part_sector == 0 ? lba_start : relative, > @@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > /* Print a partition that is relative to its Extended partition table > */ > -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int > ext_part_sector, > - int relative, int part_num, > +static int get_partition_info_extended (block_dev_desc_t *dev_desc, > + lbaint_t ext_part_sector, > + lbaint_t relative, int part_num, >int which_part, disk_partition_t *info, >unsigned int disksig) > { > @@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part > int dos_type; > if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > - printf ("** Can't read partition table on %d:%d **\n", > + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc-> dev, ext_part_sector); > return -1; > } > @@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part
Re: [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
Any chance this can make it into 2015.10? Stefan >>>>> "Stefan" == Stefan Monnier <monn...@iro.umontreal.ca> writes: > Signed-off-by: Stefan Monnier <monn...@iro.umontreal.ca> > --- > disk/part_dos.c | 29 + > include/ide.h | 8 > 2 files changed, 21 insertions(+), 16 deletions(-) > diff --git a/disk/part_dos.c b/disk/part_dos.c > index cf1a36e..adde68a 100644 > --- a/disk/part_dos.c > +++ b/disk/part_dos.c > @@ -25,7 +25,7 @@ > /* Convert char[4] in little endian format to the host format integer > */ > -static inline int le32_to_int(unsigned char *le32) > +static inline unsigned int le32_to_int(unsigned char *le32) > { > return ((le32[3] << 24) + > (le32[2] << 16) + > @@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p) > return p->boot_ind == 0x80; > } > -static void print_one_part(dos_partition_t *p, int ext_part_sector, > +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector, > int part_num, unsigned int disksig) > { > - int lba_start = ext_part_sector + le32_to_int (p->start4); > - int lba_size = le32_to_int (p->size4); > + lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4); > + lbaint_t lba_size = le32_to_int (p->size4); > - printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n", > + printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength > + "u\t%08x-%02x\t%02x%s%s\n", > part_num, lba_start, lba_size, disksig, part_num, p->sys_ind, > (is_extended(p->sys_ind) ? " Extd" : ""), > (is_bootable(p) ? " Boot" : "")); > @@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc) > /* Print a partition that is relative to its Extended partition table > */ > static void print_partition_extended(block_dev_desc_t *dev_desc, > - int ext_part_sector, int relative, > + lbaint_t ext_part_sector, > + lbaint_t relative, >int part_num, unsigned int disksig) > { > ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz); > @@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > int i; > if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > - printf ("** Can't read partition table on %d:%d **\n", > + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc-> dev, ext_part_sector); > return; > } > @@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); > for (i = 0; i < 4; i++, pt++) { > if (is_extended (pt->sys_ind)) { > - int lba_start = le32_to_int (pt->start4) + relative; > + lbaint_t lba_start > + = le32_to_int (pt->start4) + relative; > print_partition_extended(dev_desc, lba_start, > ext_part_sector == 0 ? lba_start : relative, > @@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > /* Print a partition that is relative to its Extended partition table > */ > -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int > ext_part_sector, > - int relative, int part_num, > +static int get_partition_info_extended (block_dev_desc_t *dev_desc, > + lbaint_t ext_part_sector, > + lbaint_t relative, int part_num, >int which_part, disk_partition_t *info, >unsigned int disksig) > { > @@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part > int dos_type; > if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > - printf ("** Can't read partition table on %d:%d **\n", > + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc-> dev, ext_part_sector); > return -1; > } > @@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part > pt = (dos_partition_t *) (buf
Re: [U-Boot] [PATCH] Don't wrap to negative after 2G sectors
Ping? Stefan >>>>> "Stefan" == Stefan Monnier <monn...@iro.umontreal.ca> writes: > Signed-off-by: Stefan Monnier <monn...@iro.umontreal.ca> > --- > disk/part_dos.c | 29 + > include/ide.h | 8 > 2 files changed, 21 insertions(+), 16 deletions(-) > diff --git a/disk/part_dos.c b/disk/part_dos.c > index cf1a36e..adde68a 100644 > --- a/disk/part_dos.c > +++ b/disk/part_dos.c > @@ -25,7 +25,7 @@ > /* Convert char[4] in little endian format to the host format integer > */ > -static inline int le32_to_int(unsigned char *le32) > +static inline unsigned int le32_to_int(unsigned char *le32) > { > return ((le32[3] << 24) + > (le32[2] << 16) + > @@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p) > return p->boot_ind == 0x80; > } > -static void print_one_part(dos_partition_t *p, int ext_part_sector, > +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector, > int part_num, unsigned int disksig) > { > - int lba_start = ext_part_sector + le32_to_int (p->start4); > - int lba_size = le32_to_int (p->size4); > + lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4); > + lbaint_t lba_size = le32_to_int (p->size4); > - printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n", > + printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength > + "u\t%08x-%02x\t%02x%s%s\n", > part_num, lba_start, lba_size, disksig, part_num, p->sys_ind, > (is_extended(p->sys_ind) ? " Extd" : ""), > (is_bootable(p) ? " Boot" : "")); > @@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc) > /* Print a partition that is relative to its Extended partition table > */ > static void print_partition_extended(block_dev_desc_t *dev_desc, > - int ext_part_sector, int relative, > + lbaint_t ext_part_sector, > + lbaint_t relative, >int part_num, unsigned int disksig) > { > ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz); > @@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > int i; > if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > - printf ("** Can't read partition table on %d:%d **\n", > + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc-> dev, ext_part_sector); > return; > } > @@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); > for (i = 0; i < 4; i++, pt++) { > if (is_extended (pt->sys_ind)) { > - int lba_start = le32_to_int (pt->start4) + relative; > + lbaint_t lba_start > + = le32_to_int (pt->start4) + relative; > print_partition_extended(dev_desc, lba_start, > ext_part_sector == 0 ? lba_start : relative, > @@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t > *dev_desc, > /* Print a partition that is relative to its Extended partition table > */ > -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int > ext_part_sector, > - int relative, int part_num, > +static int get_partition_info_extended (block_dev_desc_t *dev_desc, > + lbaint_t ext_part_sector, > + lbaint_t relative, int part_num, >int which_part, disk_partition_t *info, >unsigned int disksig) > { > @@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part > int dos_type; > if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) > buffer) != 1) { > - printf ("** Can't read partition table on %d:%d **\n", > + printf ("** Can't read partition table on %d:" LBAFU " **\n", dev_desc-> dev, ext_part_sector); > return -1; > } > @@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t > *dev_desc, int ext_part > pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); >
[U-Boot] [PATCH] Don't wrap to negative after 2G sectors
Signed-off-by: Stefan Monnier monn...@iro.umontreal.ca --- disk/part_dos.c | 29 + include/ide.h | 8 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/disk/part_dos.c b/disk/part_dos.c index cf1a36e..adde68a 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -25,7 +25,7 @@ /* Convert char[4] in little endian format to the host format integer */ -static inline int le32_to_int(unsigned char *le32) +static inline unsigned int le32_to_int(unsigned char *le32) { return ((le32[3] 24) + (le32[2] 16) + @@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p) return p-boot_ind == 0x80; } -static void print_one_part(dos_partition_t *p, int ext_part_sector, +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector, int part_num, unsigned int disksig) { - int lba_start = ext_part_sector + le32_to_int (p-start4); - int lba_size = le32_to_int (p-size4); + lbaint_t lba_start = ext_part_sector + le32_to_int (p-start4); + lbaint_t lba_size = le32_to_int (p-size4); - printf(%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n, + printf(%3d\t%-10 LBAFlength u\t%-10 LBAFlength + u\t%08x-%02x\t%02x%s%s\n, part_num, lba_start, lba_size, disksig, part_num, p-sys_ind, (is_extended(p-sys_ind) ? Extd : ), (is_bootable(p) ? Boot : )); @@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc) /* Print a partition that is relative to its Extended partition table */ static void print_partition_extended(block_dev_desc_t *dev_desc, -int ext_part_sector, int relative, +lbaint_t ext_part_sector, +lbaint_t relative, int part_num, unsigned int disksig) { ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc-blksz); @@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc, int i; if (dev_desc-block_read(dev_desc-dev, ext_part_sector, 1, (ulong *) buffer) != 1) { - printf (** Can't read partition table on %d:%d **\n, + printf (** Can't read partition table on %d: LBAFU **\n, dev_desc-dev, ext_part_sector); return; } @@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc, pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); for (i = 0; i 4; i++, pt++) { if (is_extended (pt-sys_ind)) { - int lba_start = le32_to_int (pt-start4) + relative; + lbaint_t lba_start + = le32_to_int (pt-start4) + relative; print_partition_extended(dev_desc, lba_start, ext_part_sector == 0 ? lba_start : relative, @@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc, /* Print a partition that is relative to its Extended partition table */ -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector, -int relative, int part_num, +static int get_partition_info_extended (block_dev_desc_t *dev_desc, +lbaint_t ext_part_sector, +lbaint_t relative, int part_num, int which_part, disk_partition_t *info, unsigned int disksig) { @@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part int dos_type; if (dev_desc-block_read (dev_desc-dev, ext_part_sector, 1, (ulong *) buffer) != 1) { - printf (** Can't read partition table on %d:%d **\n, + printf (** Can't read partition table on %d: LBAFU **\n, dev_desc-dev, ext_part_sector); return -1; } @@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET); for (i = 0; i 4; i++, pt++) { if (is_extended (pt-sys_ind)) { - int lba_start = le32_to_int (pt-start4) + relative; + lbaint_t lba_start + = le32_to_int (pt-start4) + relative; return get_partition_info_extended (dev_desc, lba_start, ext_part_sector == 0 ? lba_start : relative, diff --git a/include/ide.h b/include/ide.h index d5e05e9..f9b43cb 100644 --- a/include/ide.h +++ b/include/ide.h @@ -28,13 +28,13 @@ void ide_led(uchar led, uchar status); #ifdef CONFIG_SYS_64BIT_LBA typedef uint64_t lbaint_t; -#define LBAF %llx -#define LBAFU
[U-Boot] 2TB disks
I just bumped into a problem where U-Boot refused to boot from my disk's second partition because the sector number is negative. More specifically, my disk drive is 2TB, which means that the number of 512B blocks fits into an unsigned 32bit int but not into a signed 32bit int. U-boot's scsi part displays the size (in blocks) correctly, but the size of the first partition (which is around 1.8TB) is printed as a negative number, and so is the start sector of the second partition. This was tested on a BananaPi using v2015-07. Stefan ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH 2/3] net/designware: invalidate entire descriptor in dw_eth_send
1. Don't invalidate sizeof(struct dmamacdescr) but only roundup(sizeof(desc_p-txrx_status), ARCH_DMA_MINALIGN)). I'm not sure I like this: if ARCH_DMA_MINALIGN is too large and ends up invalidating more than the struct, it could be an error, so it's safer to ask it to invalidate the struct (which we know can be safely invalidates). If invalidate_dcache_range is used often, then I'd suggest to change its API so it receives 2 bounds: the one that has to be invalidated and the surrounding one that can safely be invalidated. Stefan ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot