[U-Boot] Reboot and audio on Orange Pi mini (was: [linux-sunxi] Re: [PATCH v3 0/9] Stop AXP from crashing when enabling LDO3)

2018-11-25 Thread Stefan Monnier
> 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

2016-01-13 Thread Stefan Monnier
>> 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

2016-01-12 Thread Stefan Monnier
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

2015-11-25 Thread Stefan Monnier
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

2015-11-25 Thread Stefan Monnier
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

2015-10-03 Thread Stefan Monnier
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

2015-09-08 Thread Stefan Monnier
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

2015-09-03 Thread Stefan Monnier
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

2015-08-25 Thread Stefan Monnier

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

2015-08-19 Thread Stefan Monnier
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

2014-04-24 Thread Stefan Monnier
 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