Re: [U-Boot] [PATCH v2 06/20] Add print_freq() to display frequencies nicely

2015-04-29 Thread Simon Glass
Hi Bin,

On 28 April 2015 at 22:56, Bin Meng  wrote:
> Hi Simon,
>
> On Wed, Apr 29, 2015 at 10:25 AM, Simon Glass  wrote:
>> Add a function similar to print_size() that works for frequencies. It can
>> handle from Hz to GHz.
>>
>> Signed-off-by: Simon Glass 
>> ---
>>
>> Changes in v2:
>> - Correct bugs in number output
>>
>>  include/display_options.h | 11 +++
>>  lib/display_options.c | 38 ++
>>  2 files changed, 49 insertions(+)
>>
>> diff --git a/include/display_options.h b/include/display_options.h
>> index 54bd41d..ac44c45 100644
>> --- a/include/display_options.h
>> +++ b/include/display_options.h
>> @@ -23,6 +23,17 @@
>>  void print_size(uint64_t size, const char *suffix);
>>
>>  /**
>> + * print_freq() - Print a frequency with a suffix
>> + *
>> + * Print frequencies as "x.xx GHz", "xxx KHz", etc as needed; allow for
>> + * optional trailing string (like "\n")
>> + *
>> + * @freq:  Frequency to print in Hz
>> + * @suffix String to print after the frequency
>> + */
>> +void print_freq(uint64_t freq, const char *suffix);
>> +
>> +/**
>>   * print_buffer() - Print data buffer in hex and ascii form
>>   *
>>   * Data reads are buffered so that each memory address is only read once.
>> diff --git a/lib/display_options.c b/lib/display_options.c
>> index 3f32bcd..3a70e14 100644
>> --- a/lib/display_options.c
>> +++ b/lib/display_options.c
>> @@ -7,6 +7,7 @@
>>
>>  #include 
>>  #include 
>> +#include 
>>  #include 
>>  #include 
>>  #include 
>> @@ -22,6 +23,43 @@ int display_options (void)
>> return 0;
>>  }
>>
>> +void print_freq(uint64_t freq, const char *s)
>> +{
>> +   unsigned long m = 0, n;
>> +   uint64_t f;
>> +   static const char names[] = {'G', 'M', 'K'};
>> +   unsigned long d = 1e9;
>> +   char c = 0;
>> +   unsigned int i;
>> +
>> +   for (i = 0; i < ARRAY_SIZE(names); i++, d /= 1000) {
>> +   if (freq >= d) {
>> +   c = names[i];
>> +   break;
>> +   }
>> +   }
>> +
>> +   if (!c) {
>> +   printf("%" PRIu64 " Hz%s", freq, s);
>> +   return;
>> +   }
>> +
>> +   f = do_div(freq, d);
>> +   n = freq;
>> +
>> +   /* If there's a remainder, show the first few digits */
>> +   if (f) {
>> +   m = f % d;
>> +   while (!(m % 10))
>> +   m /= 10;
>> +   }
>
> This 'first few digits' issue is not fixed. Do you intend to print all
> numbers after the radix point? If yes, then we need fix the comment to
> say all numbers will be printed.

I think it is better not to. I'll change my tests a bit and send a new
version of just this patch.

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v2 06/20] Add print_freq() to display frequencies nicely

2015-04-28 Thread Bin Meng
Hi Simon,

On Wed, Apr 29, 2015 at 10:25 AM, Simon Glass  wrote:
> Add a function similar to print_size() that works for frequencies. It can
> handle from Hz to GHz.
>
> Signed-off-by: Simon Glass 
> ---
>
> Changes in v2:
> - Correct bugs in number output
>
>  include/display_options.h | 11 +++
>  lib/display_options.c | 38 ++
>  2 files changed, 49 insertions(+)
>
> diff --git a/include/display_options.h b/include/display_options.h
> index 54bd41d..ac44c45 100644
> --- a/include/display_options.h
> +++ b/include/display_options.h
> @@ -23,6 +23,17 @@
>  void print_size(uint64_t size, const char *suffix);
>
>  /**
> + * print_freq() - Print a frequency with a suffix
> + *
> + * Print frequencies as "x.xx GHz", "xxx KHz", etc as needed; allow for
> + * optional trailing string (like "\n")
> + *
> + * @freq:  Frequency to print in Hz
> + * @suffix String to print after the frequency
> + */
> +void print_freq(uint64_t freq, const char *suffix);
> +
> +/**
>   * print_buffer() - Print data buffer in hex and ascii form
>   *
>   * Data reads are buffered so that each memory address is only read once.
> diff --git a/lib/display_options.c b/lib/display_options.c
> index 3f32bcd..3a70e14 100644
> --- a/lib/display_options.c
> +++ b/lib/display_options.c
> @@ -7,6 +7,7 @@
>
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -22,6 +23,43 @@ int display_options (void)
> return 0;
>  }
>
> +void print_freq(uint64_t freq, const char *s)
> +{
> +   unsigned long m = 0, n;
> +   uint64_t f;
> +   static const char names[] = {'G', 'M', 'K'};
> +   unsigned long d = 1e9;
> +   char c = 0;
> +   unsigned int i;
> +
> +   for (i = 0; i < ARRAY_SIZE(names); i++, d /= 1000) {
> +   if (freq >= d) {
> +   c = names[i];
> +   break;
> +   }
> +   }
> +
> +   if (!c) {
> +   printf("%" PRIu64 " Hz%s", freq, s);
> +   return;
> +   }
> +
> +   f = do_div(freq, d);
> +   n = freq;
> +
> +   /* If there's a remainder, show the first few digits */
> +   if (f) {
> +   m = f % d;
> +   while (!(m % 10))
> +   m /= 10;
> +   }

This 'first few digits' issue is not fixed. Do you intend to print all
numbers after the radix point? If yes, then we need fix the comment to
say all numbers will be printed.

> +   printf("%lu", n);
> +   if (m)
> +   printf(".%ld", m);
> +   printf(" %cHz%s", c, s);
> +}
> +
>  void print_size(uint64_t size, const char *s)
>  {
> unsigned long m = 0, n;
> --

Regards,
Bin
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot