qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] ibex_uart: fix XOR-as-pow


From: Paolo Bonzini
Subject: Re: [PATCH] ibex_uart: fix XOR-as-pow
Date: Wed, 24 Jun 2020 08:33:19 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0

On 23/06/20 22:07, Eric Blake wrote:
>>
>>              uint64_t baud = ((value & UART_CTRL_NCO) >> 16);
>>               baud *= 1000;
>> -            baud /= 2 ^ 20;
>> +            baud >>= 20;
> 
> Dividing by 1M instead of 22 seems much more logical, indeed :)

Based on the spec, the "* 1000" is the clock, in other words this is a
fixed point value relative to the clock:

f_baud = NCO * f_clock / 2^20

The example in the spec (https://docs.opentitan.org/hw/ip/uart/doc/) has
f_clock = 50 MHz, while here it's only 1 kHz.  And the register is only
16 bit, so the above would only allow a baud rate up to 62 (65535 * 1000
/ 2^20).

Should the clock be a property of the device instead?

Thanks,

Paolo

> It's odd that we are scaling up by 1000, down by 1024*1024, then
> 
>>                 s->char_tx_time = (NANOSECONDS_PER_SECOND / baud) * 10; 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]