Skip to content

Commit 53b08c7

Browse files
committed
scanvideo debugging and linked mode fix
1 parent 77eae28 commit 53b08c7

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/rp2_common/pico_scanvideo_dpi/scanvideo.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ CU_REGISTER_DEBUG_PINS(video_timing, video_dma_buffer, video_irq, video_dma_comp
130130

131131
// ======================
132132

133+
#define GENERATING_LIST 1
134+
//#define PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS 1
133135
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
134136
// we want some sort of assertion even in release builds
135137
#ifndef NDEBUG
@@ -260,7 +262,7 @@ static struct {
260262
// locks (i.e. we are saving an extra lock in the latch case by not placing in a separate struct)
261263
full_scanline_buffer_t *generated_ascending_scanline_id_list;
262264
full_scanline_buffer_t *generated_ascending_scanline_id_list_tail;
263-
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
265+
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
264266
full_scanline_buffer_t *generating_list;
265267
#endif
266268
} scanline;
@@ -383,6 +385,7 @@ inline static full_scanline_buffer_t *list_remove_head_ascending(full_scanline_b
383385
full_scanline_buffer_t *fsb = *phead;
384386

385387
if (fsb) {
388+
scanline_assert(*ptail);
386389
*phead = fsb->next;
387390

388391
if (!fsb->next) {
@@ -797,8 +800,9 @@ void __video_most_time_critical_func(prepare_for_active_scanline_irqs_enabled)()
797800
shared_state.scanline.current_scanline_buffer = NULL;
798801
#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS
799802
} else if (fsb->core.link_after && !--fsb->core.link_after) {
800-
assert(fsb->core.link);
803+
scanline_assert(fsb->core.link);
801804
spin_lock_unsafe_blocking(shared_state.in_use.lock);
805+
scanline_assert(fsb->core.link);
802806
DEBUG_PINS_SET(video_link, 1);
803807
full_scanline_buffer_t *fsb2 = (full_scanline_buffer_t *)fsb->core.link;
804808
fsb->core.link = NULL; // the linkee scanline is now tracked on its own, so shouldn't be freed with the linker
@@ -1066,7 +1070,7 @@ extern scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_s
10661070
if (fsb) {
10671071
save = spin_lock_blocking(shared_state.scanline.lock);
10681072
DEBUG_PINS_SET(video_timing, 1);
1069-
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
1073+
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
10701074
list_prepend(&shared_state.scanline.generating_list, fsb);
10711075
#endif
10721076
// todo improve this algorithm... how far ahead should we be
@@ -1093,7 +1097,7 @@ extern scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_s
10931097
DEBUG_PINS_CLR(video_link, 1);
10941098
DEBUG_PINS_CLR(video_generation, 1);
10951099
#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS
1096-
fsb->core.link_after = 0;
1100+
if (fsb) fsb->core.link_after = 0;
10971101
#endif
10981102
return (scanvideo_scanline_buffer_t *) fsb;
10991103
}
@@ -1129,7 +1133,7 @@ scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline
11291133
{
11301134
save = spin_lock_blocking(shared_state.scanline.lock);
11311135
DEBUG_PINS_SET(video_timing, 1);
1132-
#ifdef ENABLE_SCANLINE_ASSERTIONS
1136+
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
11331137
list_prepend(&shared_state.scanline.generating_list, fsb);
11341138
list_prepend(&shared_state.scanline.generating_list, fsb2);
11351139
#endif
@@ -1202,7 +1206,7 @@ scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline
12021206
}
12031207
save = spin_lock_blocking(shared_state.scanline.lock);
12041208
DEBUG_PINS_SET(video_timing, 1);
1205-
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
1209+
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
12061210
list_prepend(&shared_state.scanline.generating_list, fsb);
12071211
#endif
12081212
// todo improve this algorithm... how far ahead should we be
@@ -1233,7 +1237,7 @@ scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline
12331237

12341238
DEBUG_PINS_CLR(video_link, 1);
12351239
DEBUG_PINS_CLR(video_generation, 1);
1236-
fsb->core.link_after = 0;
1240+
if (fsb) fsb->core.link_after = 0;
12371241
return (scanvideo_scanline_buffer_t *) fsb;
12381242
}
12391243
#endif
@@ -1243,7 +1247,7 @@ extern void __video_time_critical_func(scanvideo_end_scanline_generation)(
12431247
DEBUG_PINS_SET(video_generation, 2);
12441248
full_scanline_buffer_t *fsb = (full_scanline_buffer_t *) scanline_buffer;
12451249
uint32_t save = spin_lock_blocking(shared_state.scanline.lock);
1246-
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
1250+
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
12471251
list_remove(&shared_state.scanline.generating_list, fsb);
12481252
#endif
12491253
list_insert_ascending(&shared_state.scanline.generated_ascending_scanline_id_list,

0 commit comments

Comments
 (0)