27
27
#include "qemu/log.h"
28
28
#include "qemu/module.h"
29
29
#include "qemu/fifo32.h"
30
+ #include "trace.h"
30
31
31
32
#ifndef DEBUG_IMX_UART
32
33
#define DEBUG_IMX_UART 0
@@ -184,10 +185,10 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset,
184
185
unsigned size )
185
186
{
186
187
IMXSerialState * s = (IMXSerialState * )opaque ;
188
+ Chardev * chr = qemu_chr_fe_get_driver (& s -> chr );
187
189
uint32_t c , rx_used ;
188
190
uint8_t rxtl = s -> ufcr & TL_MASK ;
189
-
190
- DPRINTF ("read(offset=0x%" HWADDR_PRIx ")\n" , offset );
191
+ uint64_t value ;
191
192
192
193
switch (offset >> 2 ) {
193
194
case 0x0 : /* URXD */
@@ -208,49 +209,67 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset,
208
209
imx_serial_rx_fifo_ageing_timer_restart (s );
209
210
qemu_chr_fe_accept_input (& s -> chr );
210
211
}
211
- return c ;
212
+ value = c ;
213
+ break ;
212
214
213
215
case 0x20 : /* UCR1 */
214
- return s -> ucr1 ;
216
+ value = s -> ucr1 ;
217
+ break ;
215
218
216
219
case 0x21 : /* UCR2 */
217
- return s -> ucr2 ;
220
+ value = s -> ucr2 ;
221
+ break ;
218
222
219
223
case 0x25 : /* USR1 */
220
- return s -> usr1 ;
224
+ value = s -> usr1 ;
225
+ break ;
221
226
222
227
case 0x26 : /* USR2 */
223
- return s -> usr2 ;
228
+ value = s -> usr2 ;
229
+ break ;
224
230
225
231
case 0x2A : /* BRM Modulator */
226
- return s -> ubmr ;
232
+ value = s -> ubmr ;
233
+ break ;
227
234
228
235
case 0x2B : /* Baud Rate Count */
229
- return s -> ubrc ;
236
+ value = s -> ubrc ;
237
+ break ;
230
238
231
239
case 0x2d : /* Test register */
232
- return s -> uts1 ;
240
+ value = s -> uts1 ;
241
+ break ;
233
242
234
243
case 0x24 : /* UFCR */
235
- return s -> ufcr ;
244
+ value = s -> ufcr ;
245
+ break ;
236
246
237
247
case 0x2c :
238
- return s -> onems ;
248
+ value = s -> onems ;
249
+ break ;
239
250
240
251
case 0x22 : /* UCR3 */
241
- return s -> ucr3 ;
252
+ value = s -> ucr3 ;
253
+ break ;
242
254
243
255
case 0x23 : /* UCR4 */
244
- return s -> ucr4 ;
256
+ value = s -> ucr4 ;
257
+ break ;
245
258
246
259
case 0x29 : /* BRM Incremental */
247
- return 0x0 ; /* TODO */
260
+ value = 0x0 ; /* TODO */
261
+ break ;
248
262
249
263
default :
250
264
qemu_log_mask (LOG_GUEST_ERROR , "[%s]%s: Bad register at offset 0x%"
251
265
HWADDR_PRIx "\n" , TYPE_IMX_SERIAL , __func__ , offset );
252
- return 0 ;
266
+ value = 0 ;
267
+ break ;
253
268
}
269
+
270
+ trace_imx_serial_read (chr ? chr -> label : "NODEV" , offset , value );
271
+
272
+ return value ;
254
273
}
255
274
256
275
static void imx_serial_write (void * opaque , hwaddr offset ,
@@ -260,8 +279,7 @@ static void imx_serial_write(void *opaque, hwaddr offset,
260
279
Chardev * chr = qemu_chr_fe_get_driver (& s -> chr );
261
280
unsigned char ch ;
262
281
263
- DPRINTF ("write(offset=0x%" HWADDR_PRIx ", value = 0x%x) to %s\n" ,
264
- offset , (unsigned int )value , chr ? chr -> label : "NODEV" );
282
+ trace_imx_serial_write (chr ? chr -> label : "NODEV" , offset , value );
265
283
266
284
switch (offset >> 2 ) {
267
285
case 0x10 : /* UTXD */
@@ -373,9 +391,11 @@ static int imx_can_receive(void *opaque)
373
391
static void imx_put_data (void * opaque , uint32_t value )
374
392
{
375
393
IMXSerialState * s = (IMXSerialState * )opaque ;
394
+ Chardev * chr = qemu_chr_fe_get_driver (& s -> chr );
376
395
uint8_t rxtl = s -> ufcr & TL_MASK ;
377
396
378
- DPRINTF ("received char\n" );
397
+ trace_imx_serial_put_data (chr ? chr -> label : "NODEV" , value );
398
+
379
399
imx_serial_rx_fifo_push (s , value );
380
400
if (fifo32_num_used (& s -> rx_fifo ) >= rxtl ) {
381
401
s -> usr1 |= USR1_RRDY ;
0 commit comments