[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v6 8/9] hw/char/cadence_uart: add clock support
From: |
Peter Maydell |
Subject: |
Re: [PATCH v6 8/9] hw/char/cadence_uart: add clock support |
Date: |
Mon, 2 Dec 2019 15:24:34 +0000 |
On Wed, 4 Sep 2019 at 13:56, Damien Hedde <address@hidden> wrote:
>
> Switch the cadence uart to multi-phase reset and add the
> reference clock input.
>
> The input clock frequency is added to the migration structure.
>
> The reference clock controls the baudrate generation. If it disabled,
> any input characters and events are ignored.
>
> If this clock remains unconnected, the uart behaves as before
> (it default to a 50MHz ref clock).
>
> Signed-off-by: Damien Hedde <address@hidden>
> static void uart_parameters_setup(CadenceUARTState *s)
> {
> QEMUSerialSetParams ssp;
> - unsigned int baud_rate, packet_size;
> + unsigned int baud_rate, packet_size, input_clk;
> + input_clk = clock_get_frequency(s->refclk);
>
> - baud_rate = (s->r[R_MR] & UART_MR_CLKS) ?
> - UART_INPUT_CLK / 8 : UART_INPUT_CLK;
> + baud_rate = (s->r[R_MR] & UART_MR_CLKS) ? input_clk / 8 : input_clk;
> + baud_rate /= (s->r[R_BRGR] * (s->r[R_BDIV] + 1));
> + trace_cadence_uart_baudrate(baud_rate);
> +
> + ssp.speed = baud_rate;
>
> - ssp.speed = baud_rate / (s->r[R_BRGR] * (s->r[R_BDIV] + 1));
> packet_size = 1;
>
> switch (s->r[R_MR] & UART_MR_PAR) {
> @@ -215,6 +220,13 @@ static void uart_parameters_setup(CadenceUARTState *s)
> }
>
> packet_size += ssp.data_bits + ssp.stop_bits;
> + if (ssp.speed == 0) {
> + /*
> + * Avoid division-by-zero below.
> + * TODO: find something better
> + */
Any ideas what might be better? :-)
> + ssp.speed = 1;
> + }
> s->char_tx_time = (NANOSECONDS_PER_SECOND / ssp.speed) * packet_size;
> qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
> }
thanks
-- PMM
- Re: [PATCH v6 8/9] hw/char/cadence_uart: add clock support,
Peter Maydell <=