* [PATCH 0/8] hw/audio/es1370: bug fix
@ 2023-09-17 6:55 Volker Rümelin
2023-09-17 6:58 ` [PATCH 1/8] hw/audio/es1370: reset current sample counter Volker Rümelin
` (9 more replies)
0 siblings, 10 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:55 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel, qemu-stable
Cc: qemu-stable. Patch 1/8 is a bug fix.
Cc: more people. The maintainer of hw/audio is busy with other projects.
Earlier this year I was asked if I could help to debug an audio playback
speed issue with the es1370 device. While debugging the playback speed
error, I noticed that the debug code of the ES1370 device has not been
compiled for a long time and has bit-rotted. This patch series fixes the
rotten code and also fixes a bug I found while debugging the code. The
bug fix is in patch 1/8 and prevents corrupted data streams. The
playback speed issue was caused by lost interrupts. Patch 8/8 helps to
debug this kind of issues.
Volker Rümelin (8):
hw/audio/es1370: reset current sample counter
hw/audio/es1370: replace bit-rotted code with tracepoints
hw/audio/es1370: remove unused dolog macro
hw/audio/es1370: remove #ifdef ES1370_DEBUG to avoid bit rot
hw/audio/es1370: remove #ifdef ES1370_VERBOSE to avoid bit rot
hw/audio/es1370: block structure coding style fixes
hw/audio/es1370: change variable type and name
hw/audio/es1370: trace lost interrupts
hw/audio/es1370.c | 289 +++++++++++++++++++-----------------------
hw/audio/trace-events | 11 ++
2 files changed, 143 insertions(+), 157 deletions(-)
--
2.35.3
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/8] hw/audio/es1370: reset current sample counter
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
@ 2023-09-17 6:58 ` Volker Rümelin
2023-09-17 6:58 ` [PATCH 2/8] hw/audio/es1370: replace bit-rotted code with tracepoints Volker Rümelin
` (8 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:58 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel, qemu-stable
Reset the current sample counter when writing the Channel Sample
Count Register. The Linux ens1370 driver and the AROS sb128
driver expect the current sample counter counts down from sample
count to 0 after a write to the Channel Sample Count Register.
Currently the current sample counter starts from 0 after a reset
or the last count when the counter was stopped.
The current sample counter is used to raise an interrupt whenever
a complete buffer was transferred. When the counter starts with a
value lower than the reload value, the interrupt triggeres before
the buffer was completly transferred. This may lead to corrupted
audio streams.
Tested-by: Rene Engel <ReneEngel80@emailn.de>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/es1370.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 4f738a0ad8..9a8e29c39c 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -502,7 +502,7 @@ static void es1370_write(void *opaque, hwaddr addr, uint64_t val, unsigned size)
case ES1370_REG_DAC2_SCOUNT:
case ES1370_REG_ADC_SCOUNT:
d += (addr - ES1370_REG_DAC1_SCOUNT) >> 2;
- d->scount = (val & 0xffff) | (d->scount & ~0xffff);
+ d->scount = (val & 0xffff) << 16 | (val & 0xffff);
ldebug ("chan %td CURR_SAMP_CT %d, SAMP_CT %d\n",
d - &s->chan[0], val >> 16, (val & 0xffff));
break;
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/8] hw/audio/es1370: replace bit-rotted code with tracepoints
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
2023-09-17 6:58 ` [PATCH 1/8] hw/audio/es1370: reset current sample counter Volker Rümelin
@ 2023-09-17 6:58 ` Volker Rümelin
2023-09-17 6:58 ` [PATCH 3/8] hw/audio/es1370: remove unused dolog macro Volker Rümelin
` (7 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:58 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel
It seems that nobody has enabled the debug code of the ES1370
device for a long time. Since then, the code has bit-rotted.
Replace the bit-rotten code with tracepoints.
Tested-by: Rene Engel <ReneEngel80@emailn.de>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/es1370.c | 55 ++++++++++++++-----------------------------
hw/audio/trace-events | 10 ++++++++
2 files changed, 28 insertions(+), 37 deletions(-)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 9a8e29c39c..0b9fdc8f41 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -34,6 +34,7 @@
#include "qemu/module.h"
#include "sysemu/dma.h"
#include "qom/object.h"
+#include "trace.h"
/* Missing stuff:
SCTRL_P[12](END|ST)INC
@@ -166,8 +167,6 @@ static void es1370_adc_callback (void *opaque, int avail);
#ifdef DEBUG_ES1370
-#define ldebug(...) AUD_log ("es1370", __VA_ARGS__)
-
static void print_ctl (uint32_t val)
{
char buf[1024];
@@ -239,7 +238,6 @@ static void print_sctl (uint32_t val)
);
}
#else
-#define ldebug(...)
#define print_ctl(...)
#define print_sctl(...)
#endif
@@ -411,12 +409,9 @@ static void es1370_update_voices (ES1370State *s, uint32_t ctl, uint32_t sctl)
if ((old_fmt != new_fmt) || (old_freq != new_freq)) {
d->shift = (new_fmt & 1) + (new_fmt >> 1);
- ldebug ("channel %zu, freq = %d, nchannels %d, fmt %d, shift %d\n",
- i,
- new_freq,
- 1 << (new_fmt & 1),
- (new_fmt & 2) ? AUDIO_FORMAT_S16 : AUDIO_FORMAT_U8,
- d->shift);
+ trace_es1370_stream_format(i, new_freq,
+ new_fmt & 2 ? "s16" : "u8", new_fmt & 1 ? "stereo" : "mono",
+ d->shift);
if (new_freq) {
struct audsettings as;
@@ -503,8 +498,8 @@ static void es1370_write(void *opaque, hwaddr addr, uint64_t val, unsigned size)
case ES1370_REG_ADC_SCOUNT:
d += (addr - ES1370_REG_DAC1_SCOUNT) >> 2;
d->scount = (val & 0xffff) << 16 | (val & 0xffff);
- ldebug ("chan %td CURR_SAMP_CT %d, SAMP_CT %d\n",
- d - &s->chan[0], val >> 16, (val & 0xffff));
+ trace_es1370_sample_count_wr(d - &s->chan[0],
+ d->scount >> 16, d->scount & 0xffff);
break;
case ES1370_REG_ADC_FRAMEADR:
@@ -515,7 +510,7 @@ static void es1370_write(void *opaque, hwaddr addr, uint64_t val, unsigned size)
d += (addr - ES1370_REG_DAC1_FRAMEADR) >> 3;
frameadr:
d->frame_addr = val;
- ldebug ("chan %td frame address %#x\n", d - &s->chan[0], val);
+ trace_es1370_frame_address_wr(d - &s->chan[0], d->frame_addr);
break;
case ES1370_REG_PHANTOM_FRAMECNT:
@@ -534,8 +529,8 @@ static void es1370_write(void *opaque, hwaddr addr, uint64_t val, unsigned size)
framecnt:
d->frame_cnt = val;
d->leftover = 0;
- ldebug ("chan %td frame count %d, buffer size %d\n",
- d - &s->chan[0], val >> 16, val & 0xffff);
+ trace_es1370_frame_count_wr(d - &s->chan[0],
+ d->frame_cnt >> 16, d->frame_cnt & 0xffff);
break;
default:
@@ -573,17 +568,9 @@ static uint64_t es1370_read(void *opaque, hwaddr addr, unsigned size)
case ES1370_REG_DAC2_SCOUNT:
case ES1370_REG_ADC_SCOUNT:
d += (addr - ES1370_REG_DAC1_SCOUNT) >> 2;
+ trace_es1370_sample_count_rd(d - &s->chan[0],
+ d->scount >> 16, d->scount & 0xffff);
val = d->scount;
-#ifdef DEBUG_ES1370
- {
- uint32_t curr_count = d->scount >> 16;
- uint32_t count = d->scount & 0xffff;
-
- curr_count <<= d->shift;
- count <<= d->shift;
- dolog ("read scount curr %d, total %d\n", curr_count, count);
- }
-#endif
break;
case ES1370_REG_ADC_FRAMECNT:
@@ -593,17 +580,9 @@ static uint64_t es1370_read(void *opaque, hwaddr addr, unsigned size)
case ES1370_REG_DAC2_FRAMECNT:
d += (addr - ES1370_REG_DAC1_FRAMECNT) >> 3;
framecnt:
+ trace_es1370_frame_count_rd(d - &s->chan[0],
+ d->frame_cnt >> 16, d->frame_cnt & 0xffff);
val = d->frame_cnt;
-#ifdef DEBUG_ES1370
- {
- uint32_t size = ((d->frame_cnt & 0xffff) + 1) << 2;
- uint32_t curr = ((d->frame_cnt >> 16) + 1) << 2;
- if (curr > size) {
- dolog ("read framecnt curr %d, size %d %d\n", curr, size,
- curr > size);
- }
- }
-#endif
break;
case ES1370_REG_ADC_FRAMEADR:
@@ -613,6 +592,7 @@ static uint64_t es1370_read(void *opaque, hwaddr addr, unsigned size)
case ES1370_REG_DAC2_FRAMEADR:
d += (addr - ES1370_REG_DAC1_FRAMEADR) >> 3;
frameadr:
+ trace_es1370_frame_address_rd(d - &s->chan[0], d->frame_addr);
val = d->frame_addr;
break;
@@ -689,9 +669,6 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
if (csc_bytes == transferred) {
*irq = 1;
d->scount = sc | (sc << 16);
- ldebug ("sc = %d, rate = %f\n",
- (sc + 1) << d->shift,
- (sc + 1) / (double) 44100);
}
else {
*irq = 0;
@@ -713,6 +690,10 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
}
d->leftover = (transferred + d->leftover) & 3;
+ trace_es1370_transfer_audio(index,
+ d->frame_cnt >> 16, d->frame_cnt & 0xffff,
+ d->scount >> 16, d->scount & 0xffff,
+ d->leftover, *irq);
}
static void es1370_run_channel (ES1370State *s, size_t chan, int free_or_avail)
diff --git a/hw/audio/trace-events b/hw/audio/trace-events
index 4dec48a4fd..00f9e45158 100644
--- a/hw/audio/trace-events
+++ b/hw/audio/trace-events
@@ -6,6 +6,16 @@ cs4231_mem_readl_reg(uint32_t reg, uint32_t ret) "read reg %d: 0x%08x"
cs4231_mem_writel_reg(uint32_t reg, uint32_t old, uint32_t val) "write reg %d: 0x%08x -> 0x%08x"
cs4231_mem_writel_dreg(uint32_t reg, uint32_t old, uint32_t val) "write dreg %d: 0x%02x -> 0x%02x"
+# es1370.c
+es1370_frame_address_rd(int ch, uint32_t addr) "ch=%d addr=0x%08x"
+es1370_frame_address_wr(int ch, uint32_t addr) "ch=%d addr=0x%08x"
+es1370_frame_count_rd(int ch, uint32_t curr, uint32_t size) "ch=%d CURR_CT=%u BUF_SIZE=%u"
+es1370_frame_count_wr(int ch, uint32_t curr, uint32_t size) "ch=%d CURR_CT=%u BUF_SIZE=%u"
+es1370_sample_count_rd(int ch, uint32_t curr, uint32_t num) "ch=%d CURR_SAMP_CT=%u SAMP_CT=%u"
+es1370_sample_count_wr(int ch, uint32_t curr, uint32_t num) "ch=%d CURR_SAMP_CT=%u SAMP_CT=%u"
+es1370_stream_format(int ch, uint32_t freq, const char *fmt, const char *mode, uint32_t shift) "ch=%d fmt=%u:%s:%s shift=%u"
+es1370_transfer_audio(int ch, uint32_t f_curr, uint32_t f_size, uint32_t s_curr, uint32_t s_num, uint32_t leftover, int irq) "ch=%d CURR_CT=%u BUF_SIZE=%u CURR_SAMP_CT=%u SAMP_CT=%u leftover=%u irq=%d"
+
# hda-codec.c
hda_audio_running(const char *stream, int nr, bool running) "st %s, nr %d, run %d"
hda_audio_format(const char *stream, int chan, const char *fmt, int freq) "st %s, %d x %s @ %d Hz"
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/8] hw/audio/es1370: remove unused dolog macro
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
2023-09-17 6:58 ` [PATCH 1/8] hw/audio/es1370: reset current sample counter Volker Rümelin
2023-09-17 6:58 ` [PATCH 2/8] hw/audio/es1370: replace bit-rotted code with tracepoints Volker Rümelin
@ 2023-09-17 6:58 ` Volker Rümelin
2023-09-17 6:58 ` [PATCH 4/8] hw/audio/es1370: remove #ifdef ES1370_DEBUG to avoid bit rot Volker Rümelin
` (6 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:58 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel
The dolog macro is unused. Remove the macro and use the now unused
ES1370_VERBOSE macro to replace its inverse ES1370_SILENT macro.
Tested-by: Rene Engel <ReneEngel80@emailn.de>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/es1370.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 0b9fdc8f41..f66feb5bb0 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -24,7 +24,6 @@
/* #define DEBUG_ES1370 */
/* #define VERBOSE_ES1370 */
-#define SILENT_ES1370
#include "qemu/osdep.h"
#include "hw/audio/soundhw.h"
@@ -243,12 +242,6 @@ static void print_sctl (uint32_t val)
#endif
#ifdef VERBOSE_ES1370
-#define dolog(...) AUD_log ("es1370", __VA_ARGS__)
-#else
-#define dolog(...)
-#endif
-
-#ifndef SILENT_ES1370
#define lwarn(...) AUD_log ("es1370: warning", __VA_ARGS__)
#else
#define lwarn(...)
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/8] hw/audio/es1370: remove #ifdef ES1370_DEBUG to avoid bit rot
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
` (2 preceding siblings ...)
2023-09-17 6:58 ` [PATCH 3/8] hw/audio/es1370: remove unused dolog macro Volker Rümelin
@ 2023-09-17 6:58 ` Volker Rümelin
2023-09-17 6:58 ` [PATCH 5/8] hw/audio/es1370: remove #ifdef ES1370_VERBOSE " Volker Rümelin
` (5 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:58 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel
Replace the #ifdef ES1370_DEBUG code with code that the compiler
can optimize away to avoid bit rot. While at it, replace strcat()
with pstrcat().
Tested-by: Rene Engel <ReneEngel80@emailn.de>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/es1370.c | 135 +++++++++++++++++++++++-----------------------
1 file changed, 66 insertions(+), 69 deletions(-)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index f66feb5bb0..839689bcb3 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -22,7 +22,7 @@
* THE SOFTWARE.
*/
-/* #define DEBUG_ES1370 */
+#define DEBUG_ES1370 0
/* #define VERBOSE_ES1370 */
#include "qemu/osdep.h"
@@ -30,6 +30,7 @@
#include "audio/audio.h"
#include "hw/pci/pci_device.h"
#include "migration/vmstate.h"
+#include "qemu/cutils.h"
#include "qemu/module.h"
#include "sysemu/dma.h"
#include "qom/object.h"
@@ -164,82 +165,78 @@ static void es1370_dac1_callback (void *opaque, int free);
static void es1370_dac2_callback (void *opaque, int free);
static void es1370_adc_callback (void *opaque, int avail);
-#ifdef DEBUG_ES1370
-
-static void print_ctl (uint32_t val)
+static void print_ctl(uint32_t val)
{
- char buf[1024];
-
- buf[0] = '\0';
-#define a(n) if (val & CTRL_##n) strcat (buf, " "#n)
- a (ADC_STOP);
- a (XCTL1);
- a (OPEN);
- a (MSFMTSEL);
- a (M_SBB);
- a (DAC_SYNC);
- a (CCB_INTRM);
- a (M_CB);
- a (XCTL0);
- a (BREQ);
- a (DAC1_EN);
- a (DAC2_EN);
- a (ADC_EN);
- a (UART_EN);
- a (JYSTK_EN);
- a (CDC_EN);
- a (SERR_DIS);
+ if (DEBUG_ES1370) {
+ char buf[1024];
+
+ buf[0] = '\0';
+#define a(n) if (val & CTRL_##n) pstrcat(buf, sizeof(buf), " "#n)
+ a(ADC_STOP);
+ a(XCTL1);
+ a(OPEN);
+ a(MSFMTSEL);
+ a(M_SBB);
+ a(DAC_SYNC);
+ a(CCB_INTRM);
+ a(M_CB);
+ a(XCTL0);
+ a(BREQ);
+ a(DAC1_EN);
+ a(DAC2_EN);
+ a(ADC_EN);
+ a(UART_EN);
+ a(JYSTK_EN);
+ a(CDC_EN);
+ a(SERR_DIS);
#undef a
- AUD_log ("es1370", "ctl - PCLKDIV %d(DAC2 freq %d), freq %d,%s\n",
- (val & CTRL_PCLKDIV) >> CTRL_SH_PCLKDIV,
- DAC2_DIVTOSR ((val & CTRL_PCLKDIV) >> CTRL_SH_PCLKDIV),
- dac1_samplerate[(val & CTRL_WTSRSEL) >> CTRL_SH_WTSRSEL],
- buf);
+ AUD_log("es1370", "ctl - PCLKDIV %d(DAC2 freq %d), freq %d,%s\n",
+ (val & CTRL_PCLKDIV) >> CTRL_SH_PCLKDIV,
+ DAC2_DIVTOSR((val & CTRL_PCLKDIV) >> CTRL_SH_PCLKDIV),
+ dac1_samplerate[(val & CTRL_WTSRSEL) >> CTRL_SH_WTSRSEL],
+ buf);
+ }
}
-static void print_sctl (uint32_t val)
+static void print_sctl(uint32_t val)
{
- static const char *fmt_names[] = {"8M", "8S", "16M", "16S"};
- char buf[1024];
-
- buf[0] = '\0';
-
-#define a(n) if (val & SCTRL_##n) strcat (buf, " "#n)
-#define b(n) if (!(val & SCTRL_##n)) strcat (buf, " "#n)
- b (R1LOOPSEL);
- b (P2LOOPSEL);
- b (P1LOOPSEL);
- a (P2PAUSE);
- a (P1PAUSE);
- a (R1INTEN);
- a (P2INTEN);
- a (P1INTEN);
- a (P1SCTRLD);
- a (P2DACSEN);
- if (buf[0]) {
- strcat (buf, "\n ");
- }
- else {
- buf[0] = ' ';
- buf[1] = '\0';
- }
+ if (DEBUG_ES1370) {
+ static const char *fmt_names[] = {"8M", "8S", "16M", "16S"};
+ char buf[1024];
+
+ buf[0] = '\0';
+
+#define a(n) if (val & SCTRL_##n) pstrcat(buf, sizeof(buf), " "#n)
+#define b(n) if (!(val & SCTRL_##n)) pstrcat(buf, sizeof(buf), " "#n)
+ b(R1LOOPSEL);
+ b(P2LOOPSEL);
+ b(P1LOOPSEL);
+ a(P2PAUSE);
+ a(P1PAUSE);
+ a(R1INTEN);
+ a(P2INTEN);
+ a(P1INTEN);
+ a(P1SCTRLD);
+ a(P2DACSEN);
+ if (buf[0]) {
+ pstrcat(buf, sizeof(buf), "\n ");
+ } else {
+ buf[0] = ' ';
+ buf[1] = '\0';
+ }
#undef b
#undef a
- AUD_log ("es1370",
- "%s"
- "p2_end_inc %d, p2_st_inc %d, r1_fmt %s, p2_fmt %s, p1_fmt %s\n",
- buf,
- (val & SCTRL_P2ENDINC) >> SCTRL_SH_P2ENDINC,
- (val & SCTRL_P2STINC) >> SCTRL_SH_P2STINC,
- fmt_names [(val >> SCTRL_SH_R1FMT) & 3],
- fmt_names [(val >> SCTRL_SH_P2FMT) & 3],
- fmt_names [(val >> SCTRL_SH_P1FMT) & 3]
- );
+ AUD_log("es1370",
+ "%s p2_end_inc %d, p2_st_inc %d,"
+ " r1_fmt %s, p2_fmt %s, p1_fmt %s\n",
+ buf,
+ (val & SCTRL_P2ENDINC) >> SCTRL_SH_P2ENDINC,
+ (val & SCTRL_P2STINC) >> SCTRL_SH_P2STINC,
+ fmt_names[(val >> SCTRL_SH_R1FMT) & 3],
+ fmt_names[(val >> SCTRL_SH_P2FMT) & 3],
+ fmt_names[(val >> SCTRL_SH_P1FMT) & 3]);
+ }
}
-#else
-#define print_ctl(...)
-#define print_sctl(...)
-#endif
#ifdef VERBOSE_ES1370
#define lwarn(...) AUD_log ("es1370: warning", __VA_ARGS__)
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 5/8] hw/audio/es1370: remove #ifdef ES1370_VERBOSE to avoid bit rot
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
` (3 preceding siblings ...)
2023-09-17 6:58 ` [PATCH 4/8] hw/audio/es1370: remove #ifdef ES1370_DEBUG to avoid bit rot Volker Rümelin
@ 2023-09-17 6:58 ` Volker Rümelin
2023-09-17 6:58 ` [PATCH 6/8] hw/audio/es1370: block structure coding style fixes Volker Rümelin
` (4 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:58 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel
Replace the #ifdef ES1370_VERBOSE code with code that the compiler
can optimize away to avoid bit rot and fix the already rotten code.
Tested-by: Rene Engel <ReneEngel80@emailn.de>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/es1370.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 839689bcb3..e1ca6a4cd5 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -23,7 +23,7 @@
*/
#define DEBUG_ES1370 0
-/* #define VERBOSE_ES1370 */
+#define VERBOSE_ES1370 0
#include "qemu/osdep.h"
#include "hw/audio/soundhw.h"
@@ -238,11 +238,12 @@ static void print_sctl(uint32_t val)
}
}
-#ifdef VERBOSE_ES1370
-#define lwarn(...) AUD_log ("es1370: warning", __VA_ARGS__)
-#else
-#define lwarn(...)
-#endif
+#define lwarn(...) \
+do { \
+ if (VERBOSE_ES1370) { \
+ AUD_log("es1370: warning", __VA_ARGS__); \
+ } \
+} while (0)
#define TYPE_ES1370 "ES1370"
OBJECT_DECLARE_SIMPLE_TYPE(ES1370State, ES1370)
@@ -504,10 +505,10 @@ static void es1370_write(void *opaque, hwaddr addr, uint64_t val, unsigned size)
break;
case ES1370_REG_PHANTOM_FRAMECNT:
- lwarn ("writing to phantom frame count %#x\n", val);
+ lwarn("writing to phantom frame count 0x%" PRIx64 "\n", val);
break;
case ES1370_REG_PHANTOM_FRAMEADR:
- lwarn ("writing to phantom frame address %#x\n", val);
+ lwarn("writing to phantom frame address 0x%" PRIx64 "\n", val);
break;
case ES1370_REG_ADC_FRAMECNT:
@@ -524,7 +525,7 @@ static void es1370_write(void *opaque, hwaddr addr, uint64_t val, unsigned size)
break;
default:
- lwarn ("writel %#x <- %#x\n", addr, val);
+ lwarn("writel 0x%" PRIx64 " <- 0x%" PRIx64 "\n", addr, val);
break;
}
}
@@ -588,16 +589,16 @@ static uint64_t es1370_read(void *opaque, hwaddr addr, unsigned size)
case ES1370_REG_PHANTOM_FRAMECNT:
val = ~0U;
- lwarn ("reading from phantom frame count\n");
+ lwarn("reading from phantom frame count\n");
break;
case ES1370_REG_PHANTOM_FRAMEADR:
val = ~0U;
- lwarn ("reading from phantom frame address\n");
+ lwarn("reading from phantom frame address\n");
break;
default:
val = ~0U;
- lwarn ("readl %#x -> %#x\n", addr, val);
+ lwarn("readl 0x%" PRIx64 " -> 0x%x\n", addr, val);
break;
}
return val;
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 6/8] hw/audio/es1370: block structure coding style fixes
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
` (4 preceding siblings ...)
2023-09-17 6:58 ` [PATCH 5/8] hw/audio/es1370: remove #ifdef ES1370_VERBOSE " Volker Rümelin
@ 2023-09-17 6:58 ` Volker Rümelin
2023-09-17 6:58 ` [PATCH 7/8] hw/audio/es1370: change variable type and name Volker Rümelin
` (3 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:58 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel
Change the block structure according to the QEMU Coding Style
documentation.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/es1370.c | 36 ++++++++++++++++--------------------
1 file changed, 16 insertions(+), 20 deletions(-)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index e1ca6a4cd5..86a869d4da 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -309,8 +309,7 @@ static void es1370_update_status (ES1370State *s, uint32_t new_status)
if (level) {
s->status = new_status | STAT_INTR;
- }
- else {
+ } else {
s->status = new_status & ~STAT_INTR;
}
pci_set_irq(&s->dev, !!level);
@@ -333,8 +332,7 @@ static void es1370_reset (ES1370State *s)
if (i == ADC_CHANNEL) {
AUD_close_in (&s->card, s->adc_voice);
s->adc_voice = NULL;
- }
- else {
+ } else {
AUD_close_out (&s->card, s->dac_voice[i]);
s->dac_voice[i] = NULL;
}
@@ -421,8 +419,7 @@ static void es1370_update_voices (ES1370State *s, uint32_t ctl, uint32_t sctl)
es1370_adc_callback,
&as
);
- }
- else {
+ } else {
s->dac_voice[i] =
AUD_open_out (
&s->card,
@@ -442,8 +439,7 @@ static void es1370_update_voices (ES1370State *s, uint32_t ctl, uint32_t sctl)
if (i == ADC_CHANNEL) {
AUD_set_active_in (s->adc_voice, on);
- }
- else {
+ } else {
AUD_set_active_out (s->dac_voice[i], on);
}
}
@@ -456,8 +452,9 @@ static void es1370_update_voices (ES1370State *s, uint32_t ctl, uint32_t sctl)
static inline uint32_t es1370_fixup (ES1370State *s, uint32_t addr)
{
addr &= 0xff;
- if (addr >= 0x30 && addr <= 0x3f)
+ if (addr >= 0x30 && addr <= 0x3f) {
addr |= s->mempage << 8;
+ }
return addr;
}
@@ -630,8 +627,9 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
to_copy = MIN ((size_t) temp, sizeof (tmpbuf));
acquired = AUD_read (s->adc_voice, tmpbuf, to_copy);
- if (!acquired)
+ if (!acquired) {
break;
+ }
pci_dma_write (&s->dev, addr, tmpbuf, acquired);
@@ -639,8 +637,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
addr += acquired;
transferred += acquired;
}
- }
- else {
+ } else {
SWVoiceOut *voice = s->dac_voice[index];
while (temp > 0) {
@@ -649,8 +646,9 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
to_copy = MIN ((size_t) temp, sizeof (tmpbuf));
pci_dma_read (&s->dev, addr, tmpbuf, to_copy);
copied = AUD_write (voice, tmpbuf, to_copy);
- if (!copied)
+ if (!copied) {
break;
+ }
temp -= copied;
addr += copied;
transferred += copied;
@@ -660,8 +658,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
if (csc_bytes == transferred) {
*irq = 1;
d->scount = sc | (sc << 16);
- }
- else {
+ } else {
*irq = 0;
d->scount = sc | (((csc_bytes - transferred - 1) >> d->shift) << 16);
}
@@ -672,12 +669,12 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
/* Bah, how stupid is that having a 0 represent true value?
i just spent few hours on this shit */
AUD_log ("es1370: warning", "non looping mode\n");
- }
- else {
+ } else {
d->frame_cnt = size;
- if ((uint32_t) cnt <= d->frame_cnt)
+ if ((uint32_t) cnt <= d->frame_cnt) {
d->frame_cnt |= cnt << 16;
+ }
}
d->leftover = (transferred + d->leftover) & 3;
@@ -778,8 +775,7 @@ static int es1370_post_load (void *opaque, int version_id)
AUD_close_in (&s->card, s->adc_voice);
s->adc_voice = NULL;
}
- }
- else {
+ } else {
if (s->dac_voice[i]) {
AUD_close_out (&s->card, s->dac_voice[i]);
s->dac_voice[i] = NULL;
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 7/8] hw/audio/es1370: change variable type and name
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
` (5 preceding siblings ...)
2023-09-17 6:58 ` [PATCH 6/8] hw/audio/es1370: block structure coding style fixes Volker Rümelin
@ 2023-09-17 6:58 ` Volker Rümelin
2023-09-17 6:58 ` [PATCH 8/8] hw/audio/es1370: trace lost interrupts Volker Rümelin
` (2 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:58 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel
Change the type of the variable temp to size_t to avoid a type
cast. While at it, rename the variable name to to_transfer. This
improves the readability of the code.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/es1370.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 86a869d4da..6d2aff57f2 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -605,6 +605,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
int max, int *irq)
{
uint8_t tmpbuf[4096];
+ size_t to_transfer;
uint32_t addr = d->frame_addr;
int sc = d->scount & 0xffff;
int csc = d->scount >> 16;
@@ -616,16 +617,16 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
}
int left = ((size - cnt + 1) << 2) + d->leftover;
int transferred = 0;
- int temp = MIN (max, MIN (left, csc_bytes));
int index = d - &s->chan[0];
+ to_transfer = MIN(max, MIN(left, csc_bytes));
addr += (cnt << 2) + d->leftover;
if (index == ADC_CHANNEL) {
- while (temp > 0) {
+ while (to_transfer > 0) {
int acquired, to_copy;
- to_copy = MIN ((size_t) temp, sizeof (tmpbuf));
+ to_copy = MIN(to_transfer, sizeof(tmpbuf));
acquired = AUD_read (s->adc_voice, tmpbuf, to_copy);
if (!acquired) {
break;
@@ -633,23 +634,23 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
pci_dma_write (&s->dev, addr, tmpbuf, acquired);
- temp -= acquired;
+ to_transfer -= acquired;
addr += acquired;
transferred += acquired;
}
} else {
SWVoiceOut *voice = s->dac_voice[index];
- while (temp > 0) {
+ while (to_transfer > 0) {
int copied, to_copy;
- to_copy = MIN ((size_t) temp, sizeof (tmpbuf));
+ to_copy = MIN(to_transfer, sizeof(tmpbuf));
pci_dma_read (&s->dev, addr, tmpbuf, to_copy);
copied = AUD_write (voice, tmpbuf, to_copy);
if (!copied) {
break;
}
- temp -= copied;
+ to_transfer -= copied;
addr += copied;
transferred += copied;
}
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 8/8] hw/audio/es1370: trace lost interrupts
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
` (6 preceding siblings ...)
2023-09-17 6:58 ` [PATCH 7/8] hw/audio/es1370: change variable type and name Volker Rümelin
@ 2023-09-17 6:58 ` Volker Rümelin
2023-09-18 11:19 ` [PATCH 0/8] hw/audio/es1370: bug fix Marc-André Lureau
2023-10-10 12:24 ` BALATON Zoltan
9 siblings, 0 replies; 12+ messages in thread
From: Volker Rümelin @ 2023-09-17 6:58 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Marc-André Lureau, Philippe Mathieu-Daudé,
BALATON Zoltan, qemu-devel
It turns out that there are drivers which assume that interrupts
can't be lost. E.g. the AROS sb128 driver is such a driver. Add
a lost interrupt tracepoint to debug this kind of issues.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
hw/audio/es1370.c | 14 ++++++++++----
hw/audio/trace-events | 3 ++-
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 6d2aff57f2..4966f72ae6 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -602,7 +602,7 @@ static uint64_t es1370_read(void *opaque, hwaddr addr, unsigned size)
}
static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
- int max, int *irq)
+ int max, bool *irq)
{
uint8_t tmpbuf[4096];
size_t to_transfer;
@@ -657,10 +657,13 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
}
if (csc_bytes == transferred) {
- *irq = 1;
+ if (*irq) {
+ trace_es1370_lost_interrupt(index);
+ }
+ *irq = true;
d->scount = sc | (sc << 16);
} else {
- *irq = 0;
+ *irq = false;
d->scount = sc | (((csc_bytes - transferred - 1) >> d->shift) << 16);
}
@@ -688,7 +691,8 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
static void es1370_run_channel (ES1370State *s, size_t chan, int free_or_avail)
{
uint32_t new_status = s->status;
- int max_bytes, irq;
+ int max_bytes;
+ bool irq;
struct chan *d = &s->chan[chan];
const struct chan_bits *b = &es1370_chan_bits[chan];
@@ -702,6 +706,8 @@ static void es1370_run_channel (ES1370State *s, size_t chan, int free_or_avail)
return;
}
+ irq = s->sctl & b->sctl_inten && s->status & b->stat_int;
+
es1370_transfer_audio (s, d, b->sctl_loopsel, max_bytes, &irq);
if (irq) {
diff --git a/hw/audio/trace-events b/hw/audio/trace-events
index 00f9e45158..ccbc8dabd5 100644
--- a/hw/audio/trace-events
+++ b/hw/audio/trace-events
@@ -11,10 +11,11 @@ es1370_frame_address_rd(int ch, uint32_t addr) "ch=%d addr=0x%08x"
es1370_frame_address_wr(int ch, uint32_t addr) "ch=%d addr=0x%08x"
es1370_frame_count_rd(int ch, uint32_t curr, uint32_t size) "ch=%d CURR_CT=%u BUF_SIZE=%u"
es1370_frame_count_wr(int ch, uint32_t curr, uint32_t size) "ch=%d CURR_CT=%u BUF_SIZE=%u"
+es1370_lost_interrupt(int ch) "ch=%d lost interrupt"
es1370_sample_count_rd(int ch, uint32_t curr, uint32_t num) "ch=%d CURR_SAMP_CT=%u SAMP_CT=%u"
es1370_sample_count_wr(int ch, uint32_t curr, uint32_t num) "ch=%d CURR_SAMP_CT=%u SAMP_CT=%u"
es1370_stream_format(int ch, uint32_t freq, const char *fmt, const char *mode, uint32_t shift) "ch=%d fmt=%u:%s:%s shift=%u"
-es1370_transfer_audio(int ch, uint32_t f_curr, uint32_t f_size, uint32_t s_curr, uint32_t s_num, uint32_t leftover, int irq) "ch=%d CURR_CT=%u BUF_SIZE=%u CURR_SAMP_CT=%u SAMP_CT=%u leftover=%u irq=%d"
+es1370_transfer_audio(int ch, uint32_t f_curr, uint32_t f_size, uint32_t s_curr, uint32_t s_num, uint32_t leftover, bool irq) "ch=%d CURR_CT=%u BUF_SIZE=%u CURR_SAMP_CT=%u SAMP_CT=%u leftover=%u irq=%d"
# hda-codec.c
hda_audio_running(const char *stream, int nr, bool running) "st %s, nr %d, run %d"
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 0/8] hw/audio/es1370: bug fix
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
` (7 preceding siblings ...)
2023-09-17 6:58 ` [PATCH 8/8] hw/audio/es1370: trace lost interrupts Volker Rümelin
@ 2023-09-18 11:19 ` Marc-André Lureau
2023-10-10 12:24 ` BALATON Zoltan
9 siblings, 0 replies; 12+ messages in thread
From: Marc-André Lureau @ 2023-09-18 11:19 UTC (permalink / raw)
To: Volker Rümelin
Cc: Gerd Hoffmann, Philippe Mathieu-Daudé, BALATON Zoltan,
qemu-devel, qemu-stable
Hi
On Sun, Sep 17, 2023 at 10:55 AM Volker Rümelin <vr_qemu@t-online.de> wrote:
>
> Cc: qemu-stable. Patch 1/8 is a bug fix.
> Cc: more people. The maintainer of hw/audio is busy with other projects.
>
> Earlier this year I was asked if I could help to debug an audio playback
> speed issue with the es1370 device. While debugging the playback speed
> error, I noticed that the debug code of the ES1370 device has not been
> compiled for a long time and has bit-rotted. This patch series fixes the
> rotten code and also fixes a bug I found while debugging the code. The
> bug fix is in patch 1/8 and prevents corrupted data streams. The
> playback speed issue was caused by lost interrupts. Patch 8/8 helps to
> debug this kind of issues.
>
> Volker Rümelin (8):
> hw/audio/es1370: reset current sample counter
> hw/audio/es1370: replace bit-rotted code with tracepoints
> hw/audio/es1370: remove unused dolog macro
> hw/audio/es1370: remove #ifdef ES1370_DEBUG to avoid bit rot
> hw/audio/es1370: remove #ifdef ES1370_VERBOSE to avoid bit rot
> hw/audio/es1370: block structure coding style fixes
> hw/audio/es1370: change variable type and name
> hw/audio/es1370: trace lost interrupts
>
> hw/audio/es1370.c | 289 +++++++++++++++++++-----------------------
> hw/audio/trace-events | 11 ++
> 2 files changed, 143 insertions(+), 157 deletions(-)
>
> --
> 2.35.3
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/8] hw/audio/es1370: bug fix
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
` (8 preceding siblings ...)
2023-09-18 11:19 ` [PATCH 0/8] hw/audio/es1370: bug fix Marc-André Lureau
@ 2023-10-10 12:24 ` BALATON Zoltan
2023-10-11 6:30 ` Marc-André Lureau
9 siblings, 1 reply; 12+ messages in thread
From: BALATON Zoltan @ 2023-10-10 12:24 UTC (permalink / raw)
To: Volker Rümelin
Cc: Gerd Hoffmann, Marc-André Lureau,
Philippe Mathieu-Daudé, qemu-devel, qemu-stable
[-- Attachment #1: Type: text/plain, Size: 1534 bytes --]
On Sun, 17 Sep 2023, Volker Rümelin wrote:
> Cc: qemu-stable. Patch 1/8 is a bug fix.
> Cc: more people. The maintainer of hw/audio is busy with other projects.
>
> Earlier this year I was asked if I could help to debug an audio playback
> speed issue with the es1370 device. While debugging the playback speed
> error, I noticed that the debug code of the ES1370 device has not been
> compiled for a long time and has bit-rotted. This patch series fixes the
> rotten code and also fixes a bug I found while debugging the code. The
> bug fix is in patch 1/8 and prevents corrupted data streams. The
> playback speed issue was caused by lost interrupts. Patch 8/8 helps to
> debug this kind of issues.
>
> Volker Rümelin (8):
> hw/audio/es1370: reset current sample counter
> hw/audio/es1370: replace bit-rotted code with tracepoints
> hw/audio/es1370: remove unused dolog macro
> hw/audio/es1370: remove #ifdef ES1370_DEBUG to avoid bit rot
> hw/audio/es1370: remove #ifdef ES1370_VERBOSE to avoid bit rot
> hw/audio/es1370: block structure coding style fixes
> hw/audio/es1370: change variable type and name
> hw/audio/es1370: trace lost interrupts
>
> hw/audio/es1370.c | 289 +++++++++++++++++++-----------------------
> hw/audio/trace-events | 11 ++
> 2 files changed, 143 insertions(+), 157 deletions(-)
Tested-by: BALATON Zoltan <balaton@eik.bme.hu>
The whole series also got a reirwed-by from Marc-Andre already so maybe
Gerd should have a look merging this.
Regards,
BALATON Zoltan
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/8] hw/audio/es1370: bug fix
2023-10-10 12:24 ` BALATON Zoltan
@ 2023-10-11 6:30 ` Marc-André Lureau
0 siblings, 0 replies; 12+ messages in thread
From: Marc-André Lureau @ 2023-10-11 6:30 UTC (permalink / raw)
To: BALATON Zoltan
Cc: Volker Rümelin, Gerd Hoffmann, Philippe Mathieu-Daudé,
qemu-devel, qemu-stable
Hi
On Tue, Oct 10, 2023 at 4:26 PM BALATON Zoltan <balaton@eik.bme.hu> wrote:
>
> On Sun, 17 Sep 2023, Volker Rümelin wrote:
> > Cc: qemu-stable. Patch 1/8 is a bug fix.
> > Cc: more people. The maintainer of hw/audio is busy with other projects.
> >
> > Earlier this year I was asked if I could help to debug an audio playback
> > speed issue with the es1370 device. While debugging the playback speed
> > error, I noticed that the debug code of the ES1370 device has not been
> > compiled for a long time and has bit-rotted. This patch series fixes the
> > rotten code and also fixes a bug I found while debugging the code. The
> > bug fix is in patch 1/8 and prevents corrupted data streams. The
> > playback speed issue was caused by lost interrupts. Patch 8/8 helps to
> > debug this kind of issues.
> >
> > Volker Rümelin (8):
> > hw/audio/es1370: reset current sample counter
> > hw/audio/es1370: replace bit-rotted code with tracepoints
> > hw/audio/es1370: remove unused dolog macro
> > hw/audio/es1370: remove #ifdef ES1370_DEBUG to avoid bit rot
> > hw/audio/es1370: remove #ifdef ES1370_VERBOSE to avoid bit rot
> > hw/audio/es1370: block structure coding style fixes
> > hw/audio/es1370: change variable type and name
> > hw/audio/es1370: trace lost interrupts
> >
> > hw/audio/es1370.c | 289 +++++++++++++++++++-----------------------
> > hw/audio/trace-events | 11 ++
> > 2 files changed, 143 insertions(+), 157 deletions(-)
>
> Tested-by: BALATON Zoltan <balaton@eik.bme.hu>
>
> The whole series also got a reirwed-by from Marc-Andre already so maybe
> Gerd should have a look merging this.
I am going to send a PR.
thanks
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2023-10-11 6:31 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-17 6:55 [PATCH 0/8] hw/audio/es1370: bug fix Volker Rümelin
2023-09-17 6:58 ` [PATCH 1/8] hw/audio/es1370: reset current sample counter Volker Rümelin
2023-09-17 6:58 ` [PATCH 2/8] hw/audio/es1370: replace bit-rotted code with tracepoints Volker Rümelin
2023-09-17 6:58 ` [PATCH 3/8] hw/audio/es1370: remove unused dolog macro Volker Rümelin
2023-09-17 6:58 ` [PATCH 4/8] hw/audio/es1370: remove #ifdef ES1370_DEBUG to avoid bit rot Volker Rümelin
2023-09-17 6:58 ` [PATCH 5/8] hw/audio/es1370: remove #ifdef ES1370_VERBOSE " Volker Rümelin
2023-09-17 6:58 ` [PATCH 6/8] hw/audio/es1370: block structure coding style fixes Volker Rümelin
2023-09-17 6:58 ` [PATCH 7/8] hw/audio/es1370: change variable type and name Volker Rümelin
2023-09-17 6:58 ` [PATCH 8/8] hw/audio/es1370: trace lost interrupts Volker Rümelin
2023-09-18 11:19 ` [PATCH 0/8] hw/audio/es1370: bug fix Marc-André Lureau
2023-10-10 12:24 ` BALATON Zoltan
2023-10-11 6:30 ` Marc-André Lureau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).