7
31
Fork
You've already forked blackmagic
23

Feature: Flash blank check #1971

Open
ALTracer wants to merge 1 commit from ALTracer/feature/blank-check into main
pull from: ALTracer/feature/blank-check
merge into: blackmagic-debug:main
blackmagic-debug:main
blackmagic-debug:fix/pre-bmp-v3-cross-file-cleanup
blackmagic-debug:feature/bmda-remote-comms
blackmagic-debug:ALTracer/feature/aarch64-ident
blackmagic-debug:feature/better-meson-optimisation-handling
blackmagic-debug:feature/am335x-support
blackmagic-debug:feature/esp32-c3-support
blackmagic-debug:feature/cortex-ar-software-breakpoints
blackmagic-debug:feature/unit-testing
blackmagic-debug:feature/windows-usb-serial-interface-naming
blackmagic-debug:fix/bmp-external-spi
blackmagic-debug:ALTracer/feature/bluepillplus-platform
blackmagic-debug:ALTracer/feature/at32f43x-unrdp
blackmagic-debug:feature/const-correctness
blackmagic-debug:ALTracer/feature/fault_handlers
blackmagic-debug:ALTracer/feature/hazard3-ice40-support
blackmagic-debug:fix/ci-cleanup
blackmagic-debug:ALTracer/fix/gdb-10-12-thread
blackmagic-debug:ALTracer/feature/blackpill-f4-adc
blackmagic-debug:ALTracer/fix/cortex-desc-allocfail-report
blackmagic-debug:ALTracer/feature/spi-perf
blackmagic-debug:ALTracer/feature/calibrate_swd
blackmagic-debug:feature/avr
blackmagic-debug:v2.0
blackmagic-debug:v1.9
blackmagic-debug:v1.10
blackmagic-debug:v1.8
ALTracer commented 2024年10月19日 15:18:45 +02:00 (Migrated from github.com)
Copy link

Detailed description

  • This is a small new feature in the framework of Target Flash API.
  • The existing problem is it's hard to check how much of flash is empty (only via (gdb) x/16zw 0x08004000 etc.)
  • This PR solves it by implementing and providing a target remote monitor command to run a blank-check against a connected halted target.

Many alternative gdbservers already implement a similar mechanism -- openocd flash, pyocd, Segger JLinkGDBServer, etc.
I opted to reuse the whatever flash write buffer is allocated in BMP heap for fast block reads (like bmd_crc32). The memcmp could be optimized to run in 4 bytes per comparison, but for a quick PoC 1 byte is enough, I get I/O bounded on swdptap.c (100-150 KiB/s for FS probes).

Tested on BMDA for dual blackpills, as usual, over JTAG transport, example output is

$ ./build/blackmagic -j -f 8M -M blank_check
DPv0 detected based on JTAG IDCode
Blank 0x08020000+131072
Blank 0x08040000+131072
Blank 0x08060000+131072
Blank 0x08010000+65536
Has data at 0x08000000
Blank 0x08004000+16384
Blank 0x08008000+16384
Blank 0x0800c000+16384

Notice how it walks the singly linked flash bank list backwards, but walks eraseblocks forwards. I erased the BMF from DUT, keeping only the BMD bootloader on it (in first 16 KiB). Output in GDB is similar, but there are progress dots printed before some lines.

Needs testing on smaller probes. Future usage could be skipping vFlashErase-triggered erase delays if reading memory-mapped flash is faster than waiting on it to erase (break-even is different for genuine STM32 with true simultaneous mass-erase vs. The Compatibles which back it with some sequential slow QuadSPI-like flash). It could also have interesting interactions with mass-erase -> load (skips all slow sector erases and starts writing to empty flash immediately), eliminating some unresponsiveness.

Your checklist for this pull request

Closing issues

## Detailed description * This is a small new feature in the framework of Target Flash API. * The existing problem is it's hard to check how much of flash is empty (only via `(gdb) x/16zw 0x08004000` etc.) * This PR solves it by implementing and providing a target remote monitor command to run a blank-check against a connected halted target. Many alternative gdbservers already implement a similar mechanism -- openocd flash, pyocd, Segger JLinkGDBServer, etc. I opted to reuse the whatever flash write buffer is allocated in BMP heap for fast block reads (like bmd_crc32). The memcmp could be optimized to run in 4 bytes per comparison, but for a quick PoC 1 byte is enough, I get I/O bounded on swdptap.c (100-150 KiB/s for FS probes). Tested on BMDA for dual blackpills, as usual, over JTAG transport, example output is ```c $ ./build/blackmagic -j -f 8M -M blank_check DPv0 detected based on JTAG IDCode Blank 0x08020000+131072 Blank 0x08040000+131072 Blank 0x08060000+131072 Blank 0x08010000+65536 Has data at 0x08000000 Blank 0x08004000+16384 Blank 0x08008000+16384 Blank 0x0800c000+16384 ``` Notice how it walks the singly linked flash bank list backwards, but walks eraseblocks forwards. I erased the BMF from DUT, keeping only the BMD bootloader on it (in first 16 KiB). Output in GDB is similar, but there are progress dots printed before some lines. Needs testing on smaller probes. Future usage could be skipping vFlashErase-triggered erase delays if reading memory-mapped flash is faster than waiting on it to erase (break-even is different for genuine STM32 with true simultaneous mass-erase vs. The Compatibles which back it with some sequential slow QuadSPI-like flash). It could also have interesting interactions with mass-erase -> load (skips all slow sector erases and starts writing to empty flash immediately), eliminating some unresponsiveness. ## Your checklist for this pull request * [x] I've read the [Code of Conduct](https://github.com/blackmagic-debug/blackmagic/blob/main/CODE_OF_CONDUCT.md) * [x] I've read the [guidelines for contributing](https://github.com/blackmagic-debug/blackmagic/blob/main/CONTRIBUTING.md) to this repository * [x] It builds for hardware native (see [Building the firmware](https://github.com/blackmagic-debug/blackmagic?tab=readme-ov-file#building-black-magic-debug-firmware)) * [x] It builds as BMDA (see [Building the BMDA](https://github.com/blackmagic-debug/blackmagic?tab=readme-ov-file#building-black-magic-debug-app)) * [x] I've tested it to the best of my ability * [x] My commit messages provide a useful short description of what the commits do ## Closing issues
dragonmux left a comment
Copy link

This has some good ideas and we like the concept. The review items are mostly all about code style and clarity.

This has some good ideas and we like the concept. The review items are mostly all about code style and clarity.

We think this would be better written as a for loop - for (size_t offset = 0U; offset < len; offset += flash->writebufsize) - so there aren't any weird end of loop conditions and src and len get to be const.

We think this would be better written as a for loop - `for (size_t offset = 0U; offset < len; offset += flash->writebufsize)` - so there aren't any weird end of loop conditions and `src` and `len` get to be const.

Making this a for loop makes this calculation disappear and eliminates an expensive % call

Making this a for loop makes this calculation disappear and eliminates an expensive `%` call

The extra braces are redundant and can be dropped

The extra braces are redundant and can be dropped

if (!flash->buf && !flash_buffer_alloc(flash))? Reduces the nesting level and more clearly describes the condition you're aiming for here.

`if (!flash->buf && !flash_buffer_alloc(flash))`? Reduces the nesting level and more clearly describes the condition you're aiming for here.
ALTracer (Migrated from github.com) reviewed 2024年10月24日 10:28:33 +02:00
ALTracer (Migrated from github.com) commented 2024年10月24日 10:28:33 +02:00
Copy link

That was for const size_t local_len = MIN(flash->writebufsize - offset, len); in case a flash bank capacity is not an even/integer multiple of writebufsize. If there is such a guarantee, then I think I can simplify into for-loop.

That was for `const size_t local_len = MIN(flash->writebufsize - offset, len);` in case a flash bank capacity is not an even/integer multiple of `writebufsize`. If there is such a guarantee, then I think I can simplify into `for`-loop.

That is a guarantee you can depend on. Even if it wasn't, MIN(len - offset, flash->writebufsize) for local_len would still give you the right answer with the suggested restructure.

That is a guarantee you can depend on. Even if it wasn't, `MIN(len - offset, flash->writebufsize)` for local_len would still give you the right answer with the suggested restructure.
ALTracer (Migrated from github.com) reviewed 2024年10月24日 10:37:56 +02:00
ALTracer (Migrated from github.com) commented 2024年10月24日 10:37:56 +02:00
Copy link

How about this form then? 8c8db531

How about this form then? 8c8db531

That looks considerably better!

That looks considerably better!
ALTracer (Migrated from github.com) reviewed 2025年01月15日 21:02:46 +01:00
ALTracer (Migrated from github.com) commented 2025年01月15日 21:02:46 +01:00
Copy link

Applied (in October).

Applied (in October).

At a quick glance, this is looking really good now. Because we're in a feature freeze for v2.0.0, we will defer this PR to the start of the v2.1 cycle as this introduces new commands and such. We'll give it a proper re-review before then though and aim to merge it at the start of that cycle.

At a quick glance, this is looking really good now. Because we're in a feature freeze for v2.0.0, we will defer this PR to the start of the v2.1 cycle as this introduces new commands and such. We'll give it a proper re-review before then though and aim to merge it at the start of that cycle.
ALTracer commented 2025年01月16日 19:26:17 +01:00 (Migrated from github.com)
Copy link

Because we're in a feature freeze for v2.0.0, we will defer this PR to the start of the v2.1 cycle as this introduces new commands and such.

When did v2.0.0 feature freeze begin? I had implemented and tested this more than two months ago, October 18, posted the PR 19th, and answered/applied all review items October 24th same day I saw them. CI size-diff shows about +340 bytes and I see same size increase for native locally, which now sits at 98.7% utilization. Did I fail to timely mention this (again)? And the initial idea was raised around January of 2024, stimulated by v1.10.0-295 PR1719 split-bank erase bugfix, a year ago, around time when v1.10.2 and v1.9.3 were tagged.

The single new command is in remote-monitor (and BMDA), is not debug-related (does not intend to affect execution), and responds in a similar fashion to monitor crc already present in stm32h7 driver which users may be familiar with. I am already using it to check correctness of some other flash drivers (e.g. which blocks they actually erase) both via BMP and BMDA. Having it in a separate branch slows down interactive live checks. I guess I may try to reimplement it as gdb-scripted qCRC packets per page or per TAR AutoIncr kibibyte against a fixed checksum for 0xFF.

Note that I only mention but not actually implement any interconnections with flash erase_range or vFlashErase/vFlashWrite accelerations, and I don't reorder stm32f4 banks, don't reverse (currently backwards) linked lists of target_flash_s.

Can you then please give an ETA for when v2.1 may happen, or at least post-v2.0.0? In 2026? That gives plenty time for mentioned related-changes to add / build upon this / test in synergy.

> Because we're in a feature freeze for v2.0.0, we will defer this PR to the start of the v2.1 cycle as this introduces new commands and such. When did v2.0.0 feature freeze begin? I had implemented and tested this more than two months ago, October 18, posted the PR 19th, and answered/applied all review items October 24th same day I saw them. CI size-diff shows about +340 bytes and I see same size increase for `native` locally, which now sits at 98.7% utilization. Did I fail to timely mention this (again)? And the initial idea was raised around January of 2024, stimulated by v1.10.0-295 PR1719 split-bank erase bugfix, a year ago, around time when v1.10.2 and v1.9.3 were tagged. The single new command is in remote-monitor (and BMDA), is not debug-related (does not intend to affect execution), and responds in a similar fashion to `monitor crc` already present in stm32h7 driver which users may be familiar with. I am already using it to check correctness of some other flash drivers (e.g. which blocks they actually erase) both via BMP and BMDA. Having it in a separate branch slows down interactive live checks. I guess I may try to reimplement it as gdb-scripted qCRC packets per page or per TAR AutoIncr kibibyte against a fixed checksum for 0xFF. Note that I only mention but not actually implement any interconnections with flash `erase_range` or `vFlashErase`/`vFlashWrite` accelerations, and I don't reorder stm32f4 banks, don't reverse (currently backwards) linked lists of `target_flash_s`. Can you then please give an ETA for when v2.1 may happen, or at least post-v2.0.0? In 2026? That gives plenty time for mentioned related-changes to add / build upon this / test in synergy.

When did v2.0.0 feature freeze begin?

Start of December, which is why we've been avoiding merging anything that's not a bugfix or already agreed on by that point.

Can you then please give an ETA for when v2.1 may happen, or at least post-v2.0.0? In 2026? That gives plenty time for mentioned related-changes to add / build upon this / test in synergy.

v2.0 final should be out in the next month or two, so.. not more than that.

> When did v2.0.0 feature freeze begin? Start of December, which is why we've been avoiding merging anything that's not a bugfix or already agreed on by that point. > Can you then please give an ETA for when v2.1 may happen, or at least post-v2.0.0? In 2026? That gives plenty time for mentioned related-changes to add / build upon this / test in synergy. v2.0 final should be out in the next month or two, so.. not more than that.
ALTracer commented 2025年01月19日 10:14:27 +01:00 (Migrated from github.com)
Copy link

Tested on Nucleo-G071RB using its embedded STLINK/V2-1.
I've discovered and fixed a logic bug which I introduced in second commit when trying to simplify inner loop and omit division. It used to fetch by 1024 byte writebufsize from 8-byte "page" (削除) option bytes (削除ここまで) OTP of G07x. First commit did not exhibit this problem. Now it works like this:

adiv5_mem_read @ 1fff7000 len 8: ff ff ff ff ff ff ff ff
Read STATUS: 0xf0000040
DP Error 0x00000000
Blank 0x1fff7000+8
adiv5_mem_read @ 1fff7008 len 8: ff ff ff ff ff ff ff ff
Read STATUS: 0xf0000040
DP Error 0x00000000
Blank 0x1fff7008+8
...
adiv5_mem_read @ 1fff73f0 len 8: ff ff ff ff ff ff ff ff
Read STATUS: 0xf0000040
DP Error 0x00000000
Blank 0x1fff73f0+8
adiv5_mem_read @ 1fff73f8 len 8: ff ff ff ff ff ff ff ff
Read STATUS: 0xf0000040
DP Error 0x00000000
Blank 0x1fff73f8+8
adiv5_mem_read @ 8000000 len 2048: 00 90 00 20 31 02 00 08 69 08 00 08 6b 08 00 08 ...
Read STATUS: 0xf0000040
DP Error 0x00000000
Has data at 0x08000000
adiv5_mem_read @ 8000800 len 2048: c1 ff ff f7 bf ff 10 b5 01 f0 96 fe ff f7 bb ff ...
Read STATUS: 0xf0000040
DP Error 0x00000000
Has data at 0x08000800
...
adiv5_mem_read @ 801f800 len 2048: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ...
Read STATUS: 0xf0000040
DP Error 0x00000000
Blank 0x0801f800+2048
Detaching from target

I would like to squash three commits into one therefore.

Tested on Nucleo-G071RB using its embedded STLINK/V2-1. I've discovered and fixed a logic bug which I introduced in second commit when trying to simplify inner loop and omit division. It used to fetch by 1024 byte writebufsize from 8-byte "page" ~~option bytes~~ OTP of G07x. First commit did not exhibit this problem. Now it works like this: ``` adiv5_mem_read @ 1fff7000 len 8: ff ff ff ff ff ff ff ff Read STATUS: 0xf0000040 DP Error 0x00000000 Blank 0x1fff7000+8 adiv5_mem_read @ 1fff7008 len 8: ff ff ff ff ff ff ff ff Read STATUS: 0xf0000040 DP Error 0x00000000 Blank 0x1fff7008+8 ... adiv5_mem_read @ 1fff73f0 len 8: ff ff ff ff ff ff ff ff Read STATUS: 0xf0000040 DP Error 0x00000000 Blank 0x1fff73f0+8 adiv5_mem_read @ 1fff73f8 len 8: ff ff ff ff ff ff ff ff Read STATUS: 0xf0000040 DP Error 0x00000000 Blank 0x1fff73f8+8 adiv5_mem_read @ 8000000 len 2048: 00 90 00 20 31 02 00 08 69 08 00 08 6b 08 00 08 ... Read STATUS: 0xf0000040 DP Error 0x00000000 Has data at 0x08000000 adiv5_mem_read @ 8000800 len 2048: c1 ff ff f7 bf ff 10 b5 01 f0 96 fe ff f7 bb ff ... Read STATUS: 0xf0000040 DP Error 0x00000000 Has data at 0x08000800 ... adiv5_mem_read @ 801f800 len 2048: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ... Read STATUS: 0xf0000040 DP Error 0x00000000 Blank 0x0801f800+2048 Detaching from target ``` I would like to squash three commits into one therefore.
dragonmux force-pushed ALTracer/feature/blank-check from 44436949de to 75dc9e4dbc
Some checks failed
ci/woodpecker/pr/build-firmware/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/5 Pipeline was successful
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline failed
ci/woodpecker/pr/build-firmware/7 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline failed
ci/woodpecker/pr/build-firmware/18 Pipeline failed
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/14 Pipeline was successful
ci/woodpecker/pr/build-firmware/20 Pipeline was successful
ci/woodpecker/pr/build-linux/1 Pipeline was successful
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
2026年03月25日 16:17:57 +01:00
Compare
dragonmux force-pushed ALTracer/feature/blank-check from 75dc9e4dbc
Some checks failed
ci/woodpecker/pr/build-firmware/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/5 Pipeline was successful
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline failed
ci/woodpecker/pr/build-firmware/7 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline failed
ci/woodpecker/pr/build-firmware/18 Pipeline failed
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/14 Pipeline was successful
ci/woodpecker/pr/build-firmware/20 Pipeline was successful
ci/woodpecker/pr/build-linux/1 Pipeline was successful
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
to 6177c7be03
Some checks failed
ci/woodpecker/pr/build-firmware/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 Pipeline was successful
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/5 Pipeline was successful
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/14 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline was successful
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-linux/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/18 Pipeline failed
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-firmware/20 Pipeline was successful
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
2026年03月30日 00:10:57 +02:00
Compare
dragonmux force-pushed ALTracer/feature/blank-check from 6177c7be03
Some checks failed
ci/woodpecker/pr/build-firmware/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 Pipeline was successful
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/5 Pipeline was successful
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/14 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline was successful
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-linux/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/18 Pipeline failed
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-firmware/20 Pipeline was successful
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
to c3b064be30
Some checks failed
ci/woodpecker/pr/build-firmware/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/5 Pipeline was successful
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 Pipeline was successful
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/14 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-linux/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/18 Pipeline failed
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-firmware/20 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
2026年04月06日 17:56:45 +02:00
Compare
Some checks are pending
ci/woodpecker/pr/build-firmware/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/5 Pipeline was successful
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 Pipeline was successful
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
Required
Details
ci/woodpecker/pr/build-firmware/8 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/14 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-linux/1 Pipeline was successful
Required
Details
ci/woodpecker/pr/build-firmware/18 Pipeline failed
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-firmware/20 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
Required
Details
ci/woodpecker/pr/lint
Required
This pull request doesn't have enough approvals yet. 0 of 1 approvals granted.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin ALTracer/feature/blank-check:ALTracer/feature/blank-check
git switch ALTracer/feature/blank-check
Sign in to join this conversation.
No reviewers
Labels
Clear labels
BMD App
Black Magic Debug App (aka. PC hosted) (not firmware)
BMP Firmware
Black Magic Probe Firmware (not PC hosted software)
Bug
Confirmed bug
Build system
Build system
Can't reproduce
Maintainers can't reproduce this problem
CI
Continuous Integration System
Contribution wanted
User contributions welcome
Documentation
Project documentation
Draft
Work in progress draft
Duplicate
This issue or pull request already exists
Enhancement
General project improvement
Feedback wanted
Requires additional submitter feedback
Foreign Host Board
Non Native hardware to runing Black Magic firmware on
GDB
Issue/PR related to GDB
Good first issue
Good for newcommers
HwIssue Mitigation
Solving or mitigating a Hardware issue in Software
Information Needed
Maintainers need more information
NativeHardware
Official Black Magic Debug Hardware
New Host Board
New hardware to run Black Magic firmware on
New Target
New debug target
Off Topic
Something that does not involve the project in any way
Potential Bug
A potential, unconfirmed or very special circumstance bug
Regression
Bug caused by a regression
User Interest Needed
More user interest required before consideration
User Testing Needed
Looking for user testing reports
Won't fix
Outside of the project scope or works as intended
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
blackmagic-debug/blackmagic!1971
Reference in a new issue
blackmagic-debug/blackmagic
No description provided.
Delete branch "ALTracer/feature/blank-check"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?