i.MX: Standardize debug code
v2 cover i.MX: Standardize debug code
We fix all i.MX driver files to use the same type of debug code.
The goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
Jean-Christophe Dubois (8):
i.MX: Standardize i.MX serial debug.
i.MX: Standardize i.MX GPIO debug
i.MX: Standardize i.MX I2C debug
i.MX: Standardize i.MX AVIC debug
i.MX: Standardize i.MX CCM debug
i.MX: Standardize i.MX FEC debug
i.MX: Standardize i.MX EPIT debug
i.MX: Standardize i.MX GPT debug
hw/char/imx_serial.c | 57 +++++++++++++++++++++++---------------------- hw/gpio/imx_gpio.c | 19 ++++++++------- hw/i2c/imx_i2c.c | 43 +++++++++++++++++----------------- hw/intc/imx_avic.c | 44 ++++++++++++++--------------------- hw/misc/imx_ccm.c | 34 +++++++++++++++++---------- hw/net/imx_fec.c | 66 ++++++++++++++++++++++++++-------------------------- hw/timer/imx_epit.c | 37 ++++++++++++----------------- hw/timer/imx_gpt.c | 46 +++++++++++++++--------------------- 8 files changed, 168 insertions(+), 178 deletions(-)
Signature · 1 line
2.1.4
PATCH v2 1/8 i.MX: Standardize i.MX serial debug.
The goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
---
Changes since v1:
* use HWADDR_PRIx for address formating
* standardize qemu_log_mask on same model.
hw/char/imx_serial.c | 57 ++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 28 deletions(-)
hw/char/imx_serial.c +29 -28
@@ -22,25 +22,17 @@#include "sysemu/sysemu.h" #include "sysemu/char.h" -//#define DEBUG_SERIAL 1 -#ifdef DEBUG_SERIAL -#define DPRINTF(fmt, args...) \ -do { printf("%s: " fmt , TYPE_IMX_SERIAL, ##args); } while (0) -#else -#define DPRINTF(fmt, args...) do {} while (0) +#ifndef DEBUG_IMX_UART +#define DEBUG_IMX_UART 0#endif -/* -* Define to 1 for messages about attempts to -* access unimplemented registers or similar. -*/ -//#define DEBUG_IMPLEMENTATION 1 -#ifdef DEBUG_IMPLEMENTATION -# define IPRINTF(fmt, args...) \ - do { fprintf(stderr, "%s: " fmt, TYPE_IMX_SERIAL, ##args); } while (0) -#else -# define IPRINTF(fmt, args...) do {} while (0) -#endif +#define DPRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_UART) { \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_SERIAL, \ + __func__, ##args); \ + } \ + } while (0)static const VMStateDescription vmstate_imx_serial = { .name =TYPE_IMX_SERIAL ,
@@ -113,10 +105,12 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset, unsigned size) {IMXSerialState *s = (IMXSerialState *)opaque; +uint32_t reg = offset >>2 ;uint32_t c; -DPRINTF ("read(offset=%x)\n" , offset >>2 ); -switch (offset >>2 ) { +DPRINTF ("read(offset=0x%" HWADDR_PRIx")\n" , offset); + +switch (reg) {case 0x0 :/* URXD */ c = s->readbuff;if (!(s->uts1 &UTS1_RXEMPTY )) {
@@ -167,7 +161,8 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset,return 0x0 ;/* TODO */ default : -IPRINTF ("%s: bad offset: 0x%x\n" , __func__, (int )offset); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_SERIAL , __func__, offset);return 0 ; } }
@@ -176,13 +171,13 @@ static void imx_serial_write(void *opaque, hwaddr offset, uint64_t value, unsigned size) {IMXSerialState *s = (IMXSerialState *)opaque; +uint32_t reg = offset >>2 ;unsigned char ch; -DPRINTF ("write(offset=%x, value = %x) to %s\n" , - offset >>2 , - (unsigned int )value, s->chr ? s->chr->label :"NODEV" ); +DPRINTF ("write(offset=0x%" HWADDR_PRIx", value = 0x%x) to %s\n" , + offset, (unsigned int )value, s->chr ? s->chr->label :"NODEV" ); -switch (offset >>2 ) { +switch (reg) {case 0x10 :/* UTXD */ ch = value;if (s->ucr2 &UCR2_TXEN ) {
@@ -198,7 +193,9 @@ static void imx_serial_write(void *opaque, hwaddr offset,case 0x20 :/* UCR1 */ s->ucr1 = value &0xffff ; +DPRINTF ("write(ucr1=%x)\n" , (unsigned int )value); +imx_update (s);break ;
@@ -266,12 +263,14 @@ static void imx_serial_write(void *opaque, hwaddr offset,case 0x2d :/* UTS1 */ case 0x23 :/* UCR4 */ -IPRINTF ("Unimplemented Register %x written to\n" , offset >>2 ); +qemu_log_mask (LOG_UNIMP ,"[%s]%s: Unimplemented reg %d\n" , +TYPE_IMX_SERIAL , __func__, reg);/* TODO */ break ;default : -IPRINTF ("%s: Bad offset 0x%x\n" , __func__, (int )offset); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_SERIAL , __func__, offset); } }
@@ -284,7 +283,9 @@ static int imx_can_receive(void *opaque)static void imx_put_data (void *opaque,uint32_t value) {IMXSerialState *s = (IMXSerialState *)opaque; +DPRINTF ("received char\n" ); + s->usr1 |=USR1_RRDY ; s->usr2 |=USR2_RDR ; s->uts1 &= ~UTS1_RXEMPTY ;
@@ -319,8 +320,8 @@ static void imx_serial_realize(DeviceState *dev, Error **errp)qemu_chr_add_handlers (s->chr, imx_can_receive, imx_receive, imx_event, s); }else { -DPRINTF ("No char dev for uart at 0x%lx\n" , - (unsigned long )s->iomem.ram_addr); +DPRINTF ("No char dev for uart at 0x%" HWADDR_PRIx"\n" , + s->iomem.ram_addr); } }
Signature · 1 line
2.1.4
Re: [Qemu-devel] [PATCH v2 1/8] i.MX: Standardize i.MX serial debug.
Quoted 59 lines · Jean-Christophe Dubois
The goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with
qemu_log_mask(). Theqemu_log_mask()output is following the same format as the above debug.Signed-off-by Jean-Christophe Dubois <[email protected]>---
Changes since v1:
* useHWADDR_PRIxfor address formating
* standardizeqemu_log_maskon same model.hw/char/imx_serial.c | 57 ++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 28 deletions(-)hw/char/imx_serial.c +9
-17@@ -22,25 +22,17 @@#include "sysemu/sysemu.h" #include "sysemu/char.h" -//#define DEBUG_SERIAL 1 -#ifdef DEBUG_SERIAL -#define DPRINTF(fmt, args...) \ -do { printf("%s: " fmt , TYPE_IMX_SERIAL, ##args); } while (0) -#else -#define DPRINTF(fmt, args...) do {} while (0) +#ifndef DEBUG_IMX_UART +#define DEBUG_IMX_UART 0#endif -/* -* Define to 1 for messages about attempts to -* access unimplemented registers or similar. -*/ -//#define DEBUG_IMPLEMENTATION 1 -#ifdef DEBUG_IMPLEMENTATION -# define IPRINTF(fmt, args...) \ - do { fprintf(stderr, "%s: " fmt, TYPE_IMX_SERIAL, ##args); } while (0) -#else -# define IPRINTF(fmt, args...) do {} while (0) -#endif +#define DPRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_UART) { \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_SERIAL, \ + __func__, ##args); \ + } \ + } while (0)static const VMStateDescription vmstate_imx_serial = { .name =TYPE_IMX_SERIAL ,
hw/char/imx_serial.c static uint64_t imx_serial_read(void *opaque, hwaddr offset, · line 108
Quoted 4 lines
hw/char/imx_serial.c +1
-0@@ -113,10 +105,12 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset, unsigned size) {IMXSerialState *s = (IMXSerialState *)opaque; +uint32_t reg = offset >>2 ;
Why the new variable? If anything, your change seems to have obsoleted the need for a reg variable as you reduce the usage-count of (offset
Quoted 1 line
Quoted 1 line
2) to just one (in the switch) where it vould stay inline as in
original code. Unless I am missing something?
With just that change (reverting)
Regards,
Peter
Quoted 89 lines
uint32_t c;hw/char/imx_serial.c +19
-12-DPRINTF ("read(offset=%x)\n" , offset >>2 ); -switch (offset >>2 ) { +DPRINTF ("read(offset=0x%" HWADDR_PRIx")\n" , offset); + +switch (reg) {case 0x0 :/* URXD */ c = s->readbuff;if (!(s->uts1 &UTS1_RXEMPTY )) {@@ -167,7 +161,8 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset,return 0x0 ;/* TODO */ default : -IPRINTF ("%s: bad offset: 0x%x\n" , __func__, (int )offset); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_SERIAL , __func__, offset);return 0 ; } }@@ -176,13 +171,13 @@ static void imx_serial_write(void *opaque, hwaddr offset, uint64_t value, unsigned size) {IMXSerialState *s = (IMXSerialState *)opaque; +uint32_t reg = offset >>2 ;unsigned char ch; -DPRINTF ("write(offset=%x, value = %x) to %s\n" , - offset >>2 , - (unsigned int )value, s->chr ? s->chr->label :"NODEV" ); +DPRINTF ("write(offset=0x%" HWADDR_PRIx", value = 0x%x) to %s\n" , + offset, (unsigned int )value, s->chr ? s->chr->label :"NODEV" ); -switch (offset >>2 ) { +switch (reg) {case 0x10 :/* UTXD */ ch = value;if (s->ucr2 &UCR2_TXEN ) {@@ -198,7 +193,9 @@ static void imx_serial_write(void *opaque, hwaddr offset,case 0x20 :/* UCR1 */ s->ucr1 = value &0xffff ; +DPRINTF ("write(ucr1=%x)\n" , (unsigned int )value); +imx_update (s);break ;@@ -266,12 +263,14 @@ static void imx_serial_write(void *opaque, hwaddr offset,case 0x2d :/* UTS1 */ case 0x23 :/* UCR4 */ -IPRINTF ("Unimplemented Register %x written to\n" , offset >>2 ); +qemu_log_mask (LOG_UNIMP ,"[%s]%s: Unimplemented reg %d\n" , +TYPE_IMX_SERIAL , __func__, reg);/* TODO */ break ;default : -IPRINTF ("%s: Bad offset 0x%x\n" , __func__, (int )offset); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_SERIAL , __func__, offset); } }@@ -284,7 +283,9 @@ static int imx_can_receive(void *opaque)static void imx_put_data (void *opaque,uint32_t value) {IMXSerialState *s = (IMXSerialState *)opaque; +DPRINTF ("received char\n" ); + s->usr1 |=USR1_RRDY ; s->usr2 |=USR2_RDR ; s->uts1 &= ~UTS1_RXEMPTY ;@@ -319,8 +320,8 @@ static void imx_serial_realize(DeviceState *dev, Error **errp)qemu_chr_add_handlers (s->chr, imx_can_receive, imx_receive, imx_event, s); }else { -DPRINTF ("No char dev for uart at 0x%lx\n" , - (unsigned long )s->iomem.ram_addr); +DPRINTF ("No char dev for uart at 0x%" HWADDR_PRIx"\n" , + s->iomem.ram_addr); } } --2.1.4
PATCH v2 2/8 i.MX: Standardize i.MX GPIO debug
In reply to Jean-Christophe DuboisThe goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
---
Changes since v1:
* use HWADDR_PRIx for address formating
* standardize qemu_log_mask on same model.
hw/gpio/imx_gpio.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)
hw/gpio/imx_gpio.c +10 -9
@@ -31,7 +31,8 @@ typedef enum IMXGPIOLevel { #define DPRINTF(fmt, args...) \ do { \ if (DEBUG_IMX_GPIO) { \ - fprintf(stderr, "%s: " fmt , __func__, ##args); \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_GPIO, \ + __func__, ##args); \ } \ } while (0)
@@ -176,19 +177,19 @@ static uint64_t imx_gpio_read(void *opaque, hwaddr offset, unsigned size)if (s->has_edge_sel) { reg_value = s->edge_sel; }else { -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: EDGE_SEL register not " +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: EDGE_SEL register not " "present on this version of GPIO device\n" ,TYPE_IMX_GPIO , __func__); }break ;default : -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Bad register at offset %d\n" , -TYPE_IMX_GPIO , __func__, (int )offset); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_GPIO , __func__, offset);break ; } -DPRINTF ("(%s) = 0x%" PRIx32"\n" ,imx_gpio_reg_name (offset), reg_value); +DPRINTF ("(%s) = 0x%" PRIx32"\n" ,imx_gpio_reg_name (offset), reg_value);return reg_value; }
@@ -198,7 +199,7 @@ static void imx_gpio_write(void *opaque, hwaddr offset, uint64_t value, {IMXGPIOState *s =IMX_GPIO (opaque); -DPRINTF ("(%s, value = 0x%" PRIx32")\n" ,imx_gpio_reg_name (offset), +DPRINTF ("(%s, value = 0x%" PRIx32")\n" ,imx_gpio_reg_name (offset), (uint32_t )value);switch (offset) {
@@ -238,15 +239,15 @@ static void imx_gpio_write(void *opaque, hwaddr offset, uint64_t value, s->edge_sel = value;imx_gpio_set_all_int_lines (s); }else { -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: EDGE_SEL register not " +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: EDGE_SEL register not " "present on this version of GPIO device\n" ,TYPE_IMX_GPIO , __func__); }break ;default : -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Bad register at offset %d\n" , -TYPE_IMX_GPIO , __func__, (int )offset); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_GPIO , __func__, offset);break ; }
Signature · 1 line
2.1.4
PATCH v2 3/8 i.MX: Standardize i.MX I2C debug
In reply to Jean-Christophe DuboisThe goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
---
Changes since v1:
* use HWADDR_PRIx for address formating
* standardize qemu_log_mask on same model.
hw/i2c/imx_i2c.c | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-)
hw/i2c/imx_i2c.c +22 -21
@@ -21,13 +21,17 @@#include "hw/i2c/imx_i2c.h" #include "hw/i2c/i2c.h" -#ifndef IMX_I2C_DEBUG -#define IMX_I2C_DEBUG 0 +#ifndef DEBUG_IMX_I2C +#define DEBUG_IMX_I2C 0#endif -#if IMX_I2C_DEBUG -#define DPRINT(fmt, args...) \ - do { fprintf(stderr, "%s: "fmt, __func__, ## args); } while (0) +#define DPRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_I2C) { \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_I2C, \ + __func__, ##args); \ + } \ + } while (0)static const char *imx_i2c_get_regname (unsigned offset) {
@@ -46,9 +50,6 @@ static const char *imx_i2c_get_regname(unsigned offset)return "[?]" ; } } -#else -#define DPRINT(fmt, args...) do { } while (0) -#endif static inline bool imx_i2c_is_enabled (IMXI2CState *s) {
@@ -121,11 +122,11 @@ static uint64_t imx_i2c_read(void *opaque, hwaddr offset,if (s->address ==ADDR_RESET ) {/* something is wrong as the address is not set */ -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Trying to read " +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Trying to read " "without specifying the slave address\n" ,TYPE_IMX_I2C , __func__); }else if (s->i2cr &I2CR_MTX ) { -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Trying to read " +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Trying to read " "but MTX is set\n" ,TYPE_IMX_I2C , __func__); }else {/* get the next byte */
@@ -134,7 +135,7 @@ static uint64_t imx_i2c_read(void *opaque, hwaddr offset,if (ret >=0 ) {imx_i2c_raise_interrupt (s); }else { -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: read failed " +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: read failed " "for device 0x%02x\n" ,TYPE_IMX_I2C , __func__, s->address); ret =0xff ;
@@ -143,19 +144,19 @@ static uint64_t imx_i2c_read(void *opaque, hwaddr offset, s->i2dr_read = ret; }else { -qemu_log_mask (LOG_UNIMP ,"%s[%s]: slave mode not implemented\n" , +qemu_log_mask (LOG_UNIMP ,"[%s]%s: slave mode not implemented\n" ,TYPE_IMX_I2C , __func__); }break ;default : -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Bad address at offset %d\n" , -TYPE_IMX_I2C , __func__, s->address); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad address at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_I2C , __func__, offset); value =0 ;break ; } -DPRINT ("read %s [0x%02x] -> 0x%02x\n" ,imx_i2c_get_regname (offset), - (unsigned int )offset, value); +DPRINTF ("read %s [0x%" HWADDR_PRIx"] -> 0x%02x\n" , +imx_i2c_get_regname (offset), offset, value);return (uint64_t )value; }
@@ -165,8 +166,8 @@ static void imx_i2c_write(void *opaque, hwaddr offset, {IMXI2CState *s =IMX_I2C (opaque); -DPRINT ("write %s [0x%02x] <- 0x%02x\n" ,imx_i2c_get_regname (offset), - (unsigned int )offset, (int )value); +DPRINTF ("write %s [0x%" HWADDR_PRIx"] <- 0x%02x\n" , +imx_i2c_get_regname (offset), offset, (int )value); value &=0xff ;
@@ -264,13 +265,13 @@ static void imx_i2c_write(void *opaque, hwaddr offset, } } }else { -qemu_log_mask (LOG_UNIMP ,"%s[%s]: slave mode not implemented\n" , +qemu_log_mask (LOG_UNIMP ,"[%s]%s: slave mode not implemented\n" ,TYPE_IMX_I2C , __func__); }break ;default : -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Bad address at offset %d\n" , -TYPE_IMX_I2C , __func__, s->address); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad address at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_I2C , __func__, offset);break ; } }
Signature · 1 line
2.1.4
PATCH v2 4/8 i.MX: Standardize i.MX AVIC debug
In reply to Jean-Christophe DuboisThe goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
---
Changes since v1:
* use HWADDR_PRIx for address formating
* standardize qemu_log_mask on same model.
hw/intc/imx_avic.c | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-)
hw/intc/imx_avic.c +18 -26
@@ -17,27 +17,17 @@#include "hw/intc/imx_avic.h" -#define DEBUG_INT 1 -#undef DEBUG_INT/* comment out for debugging */ - -#ifdef DEBUG_INT -#define DPRINTF(fmt, args...) \ -do { printf("%s: " fmt , TYPE_IMX_AVIC, ##args); } while (0) -#else -#define DPRINTF(fmt, args...) do {} while (0) +#ifndef DEBUG_IMX_AVIC +#define DEBUG_IMX_AVIC 0#endif -/* -* Define to 1 for messages about attempts to -* access unimplemented registers or similar. -*/ -#define DEBUG_IMPLEMENTATION 1 -#if DEBUG_IMPLEMENTATION -# define IPRINTF(fmt, args...) \ - do { fprintf(stderr, "%s: " fmt, TYPE_IMX_AVIC, ##args); } while (0) -#else -# define IPRINTF(fmt, args...) do {} while (0) -#endif +#define DPRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_AVIC) { \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_AVIC, \ + __func__, ##args); \ + } \ + } while (0)static const VMStateDescription vmstate_imx_avic = { .name =TYPE_IMX_AVIC ,
@@ -115,8 +105,8 @@ static uint64_t imx_avic_read(void *opaque, {IMXAVICState *s = (IMXAVICState *)opaque; +DPRINTF ("read(offset = 0x%" HWADDR_PRIx")\n" , offset); -DPRINTF ("read(offset = 0x%x)\n" , offset >>2 );switch (offset >>2 ) {case 0 :/* INTCNTL */ return s->intcntl;
@@ -213,7 +203,8 @@ static uint64_t imx_avic_read(void *opaque,return 0x4 ;default : -IPRINTF ("%s: Bad offset 0x%x\n" , __func__, (int )offset); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_AVIC , __func__, offset);return 0 ; } }
@@ -225,13 +216,13 @@ static void imx_avic_write(void *opaque, hwaddr offset,/* Vector Registers not yet supported */ if (offset >=0x100 && offset <=0x2fc ) { -IPRINTF ("%s to vector register %d ignored\n" , __func__, - (unsigned int )((offset -0x100 ) >>2 )); +qemu_log_mask (LOG_UNIMP ,"[%s]%s: vector %d ignored\n" , +TYPE_IMX_AVIC , __func__, (int )((offset -0x100 ) >>2 ));return ; } -DPRINTF ("%s(0x%x) = %x\n" , __func__, - (unsigned int )offset>>2 , (unsigned int )val); +DPRINTF ("(0x%" HWADDR_PRIx") = 0x%x\n" , offset, (unsigned int )val); +switch (offset >>2 ) {case 0 :/* Interrupt Control Register, INTCNTL */ s->intcntl = val & (ABFEN |NIDIS |FIDIS |NIAD |FIAD |NM );
@@ -305,7 +296,8 @@ static void imx_avic_write(void *opaque, hwaddr offset,return ;default : -IPRINTF ("%s: Bad offset %x\n" , __func__, (int )offset); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_AVIC , __func__, offset); }imx_avic_update (s); }
Signature · 1 line
2.1.4
PATCH v2 5/8 i.MX: Standardize i.MX CCM debug
In reply to Jean-Christophe DuboisThe goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
---
Changes since v1:
* use HWADDR_PRIx for address formating
* standardize qemu_log_mask on same model.
hw/misc/imx_ccm.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-)
hw/misc/imx_ccm.c +22 -12
@@ -16,14 +16,18 @@#define CKIH_FREQ 26000000/* 26MHz crystal input */ #define CKIL_FREQ 32768/* nominal 32khz clock */ -//#define DEBUG_CCM 1 -#ifdef DEBUG_CCM -#define DPRINTF(fmt, args...) \ -do { printf("%s: " fmt , TYPE_IMX_CCM, ##args); } while (0) -#else -#define DPRINTF(fmt, args...) do {} while (0) +#ifndef DEBUG_IMX_CCM +#define DEBUG_IMX_CCM 0#endif +#define DPRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_CCM) { \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_CCM, \ + __func__, ##args); \ + } \ + } while (0) +static int imx_ccm_post_load (void *opaque,int version_id);static const VMStateDescription vmstate_imx_ccm = {
@@ -109,7 +113,7 @@ static void update_clocks(IMXCCMState *s) s->hsp_clk_freq = s->mcu_clk_freq / (1 +EXTRACT (s->pdr0,HSP )); s->ipg_clk_freq = s->hsp_clk_freq / (1 +EXTRACT (s->pdr0,IPG )); -DPRINTF ("%s: mcu %uMHz, HSP %uMHz, IPG %uHz\n" , __func__, +DPRINTF ("mcu %uMHz, HSP %uMHz, IPG %uHz\n" , s->mcu_clk_freq /1000000 , s->hsp_clk_freq /1000000 , s->ipg_clk_freq);
@@ -135,7 +139,8 @@ static uint64_t imx_ccm_read(void *opaque, hwaddr offset, {IMXCCMState *s = (IMXCCMState *)opaque; -DPRINTF ("%s(offset=%x)" , __func__, offset >>2 ); +DPRINTF ("(offset=0x%" HWADDR_PRIx")\n" , offset); +switch (offset >>2 ) {case 0 :/* CCMR */ DPRINTF (" ccmr = 0x%x\n" , s->ccmr);
@@ -166,9 +171,11 @@ static uint64_t imx_ccm_read(void *opaque, hwaddr offset,case 23 :DPRINTF (" pcmr0 = 0x%x\n" , s->pmcr0);return s->pmcr0; +default : +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_CCM , __func__, offset); +return 0 ; } -DPRINTF (" return 0\n" ); -return 0 ; } static void imx_ccm_write(void *opaque, hwaddr offset,
@@ -176,8 +183,9 @@ static void imx_ccm_write(void *opaque, hwaddr offset, {IMXCCMState *s = (IMXCCMState *)opaque; -DPRINTF ("%s(offset=%x, value = %x)\n" , __func__, - offset >>2 , (unsigned int )value); +DPRINTF ("(offset=0x%" HWADDR_PRIx", value = 0x%x)\n" , + offset, (unsigned int )value); +switch (offset >>2 ) {case 0 : s->ccmr =CCMR_FPMF | (value &0x3b6fdfff );
@@ -205,6 +213,8 @@ static void imx_ccm_write(void *opaque, hwaddr offset,return ;default : +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_CCM , __func__, offset);return ; }update_clocks (s);
Signature · 1 line
2.1.4
PATCH v2 6/8 i.MX: Standardize i.MX FEC debug
In reply to Jean-Christophe DuboisThe goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
---
Changes since v1:
* use HWADDR_PRIx for address formating
* standardize qemu_log_mask on same model.
hw/net/imx_fec.c | 66 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 33 deletions(-)
hw/net/imx_fec.c +33 -33
@@ -27,31 +27,29 @@/* For crc32 */ #include <zlib.h> -#ifndef IMX_FEC_DEBUG -#define IMX_FEC_DEBUG 0 +#ifndef DEBUG_IMX_FEC +#define DEBUG_IMX_FEC 0#endif -#ifndef IMX_PHY_DEBUG -#define IMX_PHY_DEBUG 0 -#endif +#define FEC_PRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_FEC) { \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_FEC, \ + __func__, ##args); \ + } \ + } while (0) -#if IMX_FEC_DEBUG -#define FEC_PRINTF (fmt, ...) \ - do { fprintf(stderr, "%s[%s]: " fmt , TYPE_IMX_FEC, __func__, \ - ## __VA_ARGS__); \ - } while (0) -#else -#define FEC_PRINTF (fmt, ...) do {} while (0) +#ifndef DEBUG_IMX_PHY +#define DEBUG_IMX_PHY 0#endif -#if IMX_PHY_DEBUG -#define PHY_PRINTF (fmt, ...) \ - do { fprintf(stderr, "%s.phy[%s]: " fmt , TYPE_IMX_FEC, __func__, \ - ## __VA_ARGS__); \ - } while (0) -#else -#define PHY_PRINTF (fmt, ...) do {} while (0) -#endif +#define PHY_PRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_PHY) { \ + fprintf(stderr, "[%s.phy]%s: " fmt , TYPE_IMX_FEC, \ + __func__, ##args); \ + } \ + } while (0)static const VMStateDescription vmstate_imx_fec = { .name =TYPE_IMX_FEC ,
@@ -182,12 +180,12 @@ static uint32_t do_phy_read(IMXFECState *s, int reg)case 18 :case 27 :case 31 : -qemu_log_mask (LOG_UNIMP ,"%s.phy[%s]: reg %d not implemented\n" , +qemu_log_mask (LOG_UNIMP ,"[%s.phy]%s: reg %d not implemented\n" ,TYPE_IMX_FEC , __func__, reg); val =0 ;break ;default : -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Bad address at offset %d\n" , +qemu_log_mask (LOG_GUEST_ERROR ,"[%s.phy]%s: Bad address at offset %d\n" ,TYPE_IMX_FEC , __func__, reg); val =0 ;break ;
@@ -230,11 +228,11 @@ static void do_phy_write(IMXFECState *s, int reg, uint32_t val)case 18 :case 27 :case 31 : -qemu_log_mask (LOG_UNIMP ,"%s.phy[%s]: reg %d not implemented\n" , +qemu_log_mask (LOG_UNIMP ,"[%s.phy)%s: reg %d not implemented\n" ,TYPE_IMX_FEC , __func__, reg);break ;default : -qemu_log_mask (LOG_GUEST_ERROR ,"%s.phy[%s]: Bad address at offset %d\n" , +qemu_log_mask (LOG_GUEST_ERROR ,"[%s.phy]%s: Bad address at offset %d\n" ,TYPE_IMX_FEC , __func__, reg);break ; }
@@ -357,7 +355,7 @@ static uint64_t imx_fec_read(void *opaque, hwaddr addr, unsigned size) {IMXFECState *s =IMX_FEC (opaque); -FEC_PRINTF ("reading from @ 0x%03x\n" , (int )addr); +FEC_PRINTF ("reading from @ 0x%" HWADDR_PRIx"\n" , addr);switch (addr &0x3ff ) {case 0x004 :
@@ -417,8 +415,8 @@ static uint64_t imx_fec_read(void *opaque, hwaddr addr, unsigned size)case 0x308 :return s->miigsk_enr;default : -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Bad address at offset %d\n" , -TYPE_IMX_FEC , __func__, (int )addr); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad address at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_FEC , __func__, addr);return 0 ; } }
@@ -428,7 +426,7 @@ static void imx_fec_write(void *opaque, hwaddr addr, {IMXFECState *s =IMX_FEC (opaque); -FEC_PRINTF ("writing 0x%08x @ 0x%03x\n" , (int )value, (int )addr); +FEC_PRINTF ("writing 0x%08x @ 0x%" HWADDR_PRIx"\n" , (int )value, addr);switch (addr &0x3ff ) {case 0x004 :/* EIR */
@@ -530,8 +528,8 @@ static void imx_fec_write(void *opaque, hwaddr addr, s->miigsk_enr = (value &0x2 ) ?0x6 :0 ;break ;default : -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Bad address at offset %d\n" , -TYPE_IMX_FEC , __func__, (int )addr); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad address at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_FEC , __func__, addr);break ; }
@@ -561,7 +559,7 @@ static ssize_t imx_fec_receive(NetClientState *nc, const uint8_t *buf,FEC_PRINTF ("len %d\n" , (int )size);if (!s->rx_enabled) { -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Unexpected packet\n" , +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Unexpected packet\n" ,TYPE_IMX_FEC , __func__);return 0 ; }
@@ -592,14 +590,16 @@ static ssize_t imx_fec_receive(NetClientState *nc, const uint8_t *buf,* save the remainder for when more RX buffers are * available, or flag an error. */ -qemu_log_mask (LOG_GUEST_ERROR ,"%s[%s]: Lost end of frame\n" , +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Lost end of frame\n" ,TYPE_IMX_FEC , __func__);break ; } buf_len = (size <= s->emrbr) ? size : s->emrbr; bd.length = buf_len; size -= buf_len; -FEC_PRINTF ("rx_bd %x length %d\n" , addr, bd.length); + +FEC_PRINTF ("rx_bd 0x%x length %d\n" , addr, bd.length); +/* The last 4 bytes are the CRC. */ if (size <4 ) { buf_len += size -4 ;
Signature · 1 line
2.1.4
PATCH v2 7/8 i.MX: Standardize i.MX EPIT debug
In reply to Jean-Christophe DuboisThe goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
---
Changes since v1:
* use HWADDR_PRIx for address formating
* standardize qemu_log_mask on same model.
hw/timer/imx_epit.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-)
hw/timer/imx_epit.c +15 -22
@@ -16,8 +16,17 @@#include "hw/misc/imx_ccm.h" #include "qemu/main-loop.h" -#define DEBUG_TIMER 0 -#if DEBUG_TIMER +#ifndef DEBUG_IMX_EPIT +#define DEBUG_IMX_EPIT 0 +#endif + +#define DPRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_EPIT) { \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_EPIT, \ + __func__, ##args); \ + } \ + } while (0)static char const *imx_epit_reg_name (uint32_t reg) {
@@ -37,24 +46,6 @@ static char const *imx_epit_reg_name(uint32_t reg) } } -# define DPRINTF(fmt, args...) \ - do { fprintf(stderr, "%s: " fmt , __func__, ##args); } while (0) -#else -# define DPRINTF(fmt, args...) do {} while (0) -#endif - -/* -* Define to 1 for messages about attempts to -* access unimplemented registers or similar. -*/ -#define DEBUG_IMPLEMENTATION 1 -#if DEBUG_IMPLEMENTATION -# define IPRINTF(fmt, args...) \ - do { fprintf(stderr, "%s: " fmt, __func__, ##args); } while (0) -#else -# define IPRINTF(fmt, args...) do {} while (0) -#endif -/* * Exact clock frequencies vary from board to board. * These are typical.
@@ -161,7 +152,8 @@ static uint64_t imx_epit_read(void *opaque, hwaddr offset, unsigned size)break ;default : -IPRINTF ("Bad offset %x\n" , reg); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_EPIT , __func__, offset);break ; }
@@ -271,7 +263,8 @@ static void imx_epit_write(void *opaque, hwaddr offset, uint64_t value,break ;default : -IPRINTF ("Bad offset %x\n" , reg); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx"\n" ,TYPE_IMX_EPIT , __func__, offset);break ; }
Signature · 1 line
2.1.4
PATCH v2 8/8 i.MX: Standardize i.MX GPT debug
In reply to Jean-Christophe DuboisThe goal is to have debug code always compiled during build.
We standardize all debug output on the following format:
[QOM_TYPE_NAME]reporting_function: debug message
We also replace IPRINTF with qemu_log_mask(). The qemu_log_mask() output is following the same format as the above debug.
---
Changes since v1:
* standardize qemu_log_mask on same model.
hw/timer/imx_gpt.c | 46 +++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 27 deletions(-)
hw/timer/imx_gpt.c +19 -27
@@ -16,11 +16,17 @@#include "hw/misc/imx_ccm.h" #include "qemu/main-loop.h" -/* -* Define to 1 for debug messages -*/ -#define DEBUG_TIMER 0 -#if DEBUG_TIMER +#ifndef DEBUG_IMX_GPT +#define DEBUG_IMX_GPT 0 +#endif + +#define DPRINTF(fmt, args...) \ + do { \ + if (DEBUG_IMX_GPT) { \ + fprintf(stderr, "[%s]%s: " fmt , TYPE_IMX_GPT, \ + __func__, ##args); \ + } \ + } while (0)static char const *imx_gpt_reg_name (uint32_t reg) {
@@ -50,24 +56,6 @@ static char const *imx_gpt_reg_name(uint32_t reg) } } -# define DPRINTF(fmt, args...) \ - do { printf("%s: " fmt , __func__, ##args); } while (0) -#else -# define DPRINTF(fmt, args...) do {} while (0) -#endif - -/* -* Define to 1 for messages about attempts to -* access unimplemented registers or similar. -*/ -#define DEBUG_IMPLEMENTATION 1 -#if DEBUG_IMPLEMENTATION -# define IPRINTF(fmt, args...) \ - do { fprintf(stderr, "%s: " fmt, __func__, ##args); } while (0) -#else -# define IPRINTF(fmt, args...) do {} while (0) -#endif -static const VMStateDescription vmstate_imx_timer_gpt = { .name =TYPE_IMX_GPT , .version_id =3 ,
@@ -256,12 +244,14 @@ static uint64_t imx_gpt_read(void *opaque, hwaddr offset, unsigned size)break ;case 7 :/* input Capture Register 1 */ -qemu_log_mask (LOG_UNIMP ,"icr1 feature is not implemented\n" ); +qemu_log_mask (LOG_UNIMP ,"[%s]%s: icr1 feature is not implemented\n" , +TYPE_IMX_GPT , __func__); reg_value = s->icr1;break ;case 8 :/* input Capture Register 2 */ -qemu_log_mask (LOG_UNIMP ,"icr2 feature is not implemented\n" ); +qemu_log_mask (LOG_UNIMP ,"[%s]%s: icr2 feature is not implemented\n" , +TYPE_IMX_GPT , __func__); reg_value = s->icr2;break ;
@@ -271,7 +261,8 @@ static uint64_t imx_gpt_read(void *opaque, hwaddr offset, unsigned size)break ;default : -IPRINTF ("Bad offset %x\n" , reg); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset %d\n" , +TYPE_IMX_GPT , __func__, (int )reg);break ; }
@@ -403,7 +394,8 @@ static void imx_gpt_write(void *opaque, hwaddr offset, uint64_t value,break ;default : -IPRINTF ("Bad offset %x\n" , reg); +qemu_log_mask (LOG_GUEST_ERROR ,"[%s]%s: Bad register at offset %d\n" , +TYPE_IMX_GPT , __func__, (int )reg);break ; } }
Signature · 1 line
2.1.4