|
| From: | LIU Zhiwei |
| Subject: | Re: [PATCH v5 07/11] hw/char: Initial commit of Ibex UART |
| Date: | Tue, 2 Jun 2020 20:28:02 +0800 |
| User-agent: | Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.8.1 |
Hi Alistair, There are still some questions I don't understand. 1. Is the baud rate or fifo a necessary feature to simulate? As you can see, qemu_chr_fe_write will send the byte as soon as possible.When you want to transmit a byte through WDATA, you can call qemu_chr_fe_write directly.
2. The baud rate calculation method is not strictly right.I think when a byte write to FIFO, char_tx_time * 8 is the correct time to send the byte instead of
char_tx_time * 4. 3. Why add a watch here?
+ s->uart_status |= UART_STATUS_TXEMPTY;
+ s->uart_intr_state |= INTR_STATE_TX_EMPTY;
+ s->uart_intr_state &= ~INTR_STATE_TX_WATERMARK;
+ ibex_uart_update_irqs(s);
+ return FALSE;
+ }
+
+ ret = qemu_chr_fe_write(&s->chr, s->tx_fifo, s->tx_level);
+
+ if (ret >= 0) {
+ s->tx_level -= ret;
+ memmove(s->tx_fifo, s->tx_fifo + ret, s->tx_level);
+ }
+
+ if (s->tx_level) {
+ guint r = qemu_chr_fe_add_watch(&s->chr, G_IO_OUT | G_IO_HUP,
+ ibex_uart_xmit, s);
+ if (!r) {
+ s->tx_level = 0;
+ return FALSE;
+ }
+ }
+
Zhiwei
| [Prev in Thread] | Current Thread | [Next in Thread] |