7
31
Fork
You've already forked blackmagic
23

mspm0: stub flashing, support for newer parts #2189

Merged
hardesk merged 4 commits from hardesk/mspm0u into main 2026年03月22日 15:39:30 +01:00
hardesk commented 2026年02月04日 14:16:30 +01:00 (Migrated from github.com)
Copy link

Detailed description

  • Improve device programming speed by implementing on-device stub flashing
  • Add support for new devices by expading known id list
  • Compress boot/factory register description table
  • Fix erase command done check in mspm0_mass_erase

Your checklist for this pull request

<!-- Filling this template is mandatory --> ## Detailed description * Improve device programming speed by implementing on-device stub flashing * Add support for new devices by expading known id list * Compress boot/factory register description table * Fix erase command done check in mspm0_mass_erase ## 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
dragonmux requested changes 2026年03月21日 09:02:47 +01:00
Dismissed
dragonmux left a comment
Copy link

Got a few notes for you to please address. This looks promising but needs a bit of refinement.

Got a few notes for you to please address. This looks promising but needs a bit of refinement.
@ -0,0 +43,4 @@
void mspm0_flash_write_stub(const uint32_t *const dest, const uint32_t *const src, const uint32_t size)
{
for (uint32_t i = 0U; i < size / 4; i += 2) {

Please mark the constants used here as unsigned with U

Please mark the constants used here as unsigned with `U`
dragonmux marked this conversation as resolved
@ -291,9 +330,7 @@ static void mspm0_flash_unprotect_sector(target_flash_s *const target_flash, con
static bool mspm0_flash_erase(target_flash_s *const target_flash, const target_addr_t addr, const size_t length)
{
#ifdef DEBUG_TARGET_IS_NOOP

Why are you removing this #ifdef? It's correct that this cast to void is only required when DEBUG_TARGET is defined to do nothing.

Why are you removing this `#ifdef`? It's correct that this cast to `void` is only required when `DEBUG_TARGET` is defined to do nothing.
First-time contributor
Copy link

There is no harm to cast the length to void regardless if DEBUG_TARGET is defined or not. So without it we have less noise. But I can put the #ifdef back, no worries.

There is no harm to cast the length to void regardless if DEBUG_TARGET is defined or not. So without it we have less noise. But I can put the #ifdef back, no worries.

We would prefer to keep the #ifdef please. This way if someone does something.. silly.. when DEBUG_TARGET should be defined to do something, the compiler will complain - that's why the preprocessor logic exists.

We would prefer to keep the `#ifdef` please. This way if someone does something.. silly.. when DEBUG_TARGET should be defined to do something, the compiler will complain - that's why the preprocessor logic exists.
dragonmux marked this conversation as resolved
@ -155,3 +131,1 @@
{0x150U, 1U, "BSLCONFIG1"},
{0x154U, 1U, "BSLCRC"},
{0U, 0U, NULL},
static uint8_t const mspm0_bcr_regs[] = {

This, considerably more complicated encoding scheme, might be more space efficient, however does that actually result in space savings in the routines below having to be quite a bit more complicated to access this data? Especially as it prevents directly indexing and forces scanning through..

This, considerably more complicated encoding scheme, might be more space efficient, however does that actually result in space savings in the routines below having to be quite a bit more complicated to access this data? Especially as it prevents directly indexing and forces scanning through..
First-time contributor
Copy link

As you might have seen in the later updates, I have removed the dumping of configuration registers altogether. The reason being, TI added a number of layouts of said registers depending on the chip and the effort to maintain that is high with questionable value of usefulness. It is possible to read/write flash using common bmd(a) functionality anyways. Maybe that can be expanded so it also supports "directly typed in" numeric values in addition to reading from a file if that is deemed desirable.

As you might have seen in the later updates, I have removed the dumping of configuration registers altogether. The reason being, TI added a number of layouts of said registers depending on the chip and the effort to maintain that is high with questionable value of usefulness. It is possible to read/write flash using common bmd(a) functionality anyways. Maybe that can be expanded so it also supports "directly typed in" numeric values in addition to reading from a file if that is deemed desirable.
dragonmux marked this conversation as resolved
@ -186,3 +195,3 @@
#endif
static void mspm0_add_flash(target_s *const target, const uint32_t base, const size_t length, const uint32_t banks)
static uint16_t g_mspm0_partnums[] = {

What's the g_ suffix supposed to tell here? Note, we don't prefix globals with anything particular.. that's not part of the code style for BMD.

Please move this list of part numbers up to above the first function defined in this file, along with all the other global data. This makes all the lists of data defined for the targets supported easier to discover and find.

What's the `g_` suffix supposed to tell here? Note, we don't prefix globals with anything particular.. that's not part of the code style for BMD. Please move this list of part numbers up to above the first function defined in this file, along with all the other global data. This makes all the lists of data defined for the targets supported easier to discover and find.
dragonmux marked this conversation as resolved
@ -196,0 +224,4 @@
if (sram_size >= stub_plus) {
uint32_t avail_ram = sram_size - stub_plus;
while (write_size > avail_ram)
write_size >>= 1;

Please suffix the constant with U to prevent signed-unsigned conversions taking place here.

Please suffix the constant with `U` to prevent signed-unsigned conversions taking place here.
dragonmux marked this conversation as resolved
@ -217,3 +252,1 @@
if (partnum != TI_DEVID_MSPM0C && partnum != TI_DEVID_MSPM0L && partnum != TI_DEVID_MSPM0L_1227_2228 &&
partnum != TI_DEVID_MSPM0G)
return false;
for (size_t i = 0; i < ARRAY_LENGTH(g_mspm0_partnums); ++i)

This outer loop needs its {}'s - the if statement inside should be considered to make this multi-line.

This outer loop needs its `{}`'s - the `if` statement inside should be considered to make this multi-line.
dragonmux marked this conversation as resolved
@ -220,1 +254,4 @@
goto id_matched;
return false;
id_matched:

Rather than using goto and a label, we would much prefer i get defined above the for loop as a properly named loop variable such as index or part_idx or so.. and then used in an if statement for an early return w/ break; used to exit the loop early. It'll likely generate about the same assembly, but results in much easier to read and understand code.

Rather than using `goto` and a label, we would much prefer `i` get defined above the for loop as a properly named loop variable such as `index` or `part_idx` or so.. and then used in an `if` statement for an early return w/ `break;` used to exit the loop early. It'll likely generate about the same assembly, but results in much easier to read and understand code.
dragonmux marked this conversation as resolved
@ -283,0 +318,4 @@
/* Sectors affected by PROTB depend on the flash configuration. In single-bank
* main flash, PROTB applies to sectors after those affected by PROTA
* (that is, starting at sector 32). In multi-bank configurations, PROTA overlaps
* PROTB, so PROTB applies starting at sector 0. */

Please use the project's

/*
 * Multi-line
 * comment
 * syntax
 */

and please note the careful layout indicated w/ the opening /* being on its own line, along with the */ and single spaces in front of the *'s that prefix the lines.

Please use the project's ```c /* * Multi-line * comment * syntax */ ``` and please note the careful layout indicated w/ the opening `/*` being on its own line, along with the `*/` and single spaces in front of the `*`'s that prefix the lines.
First-time contributor
Copy link

I honestly can't understand how this happened. Fixed.

I honestly can't understand how this happened. Fixed.
dragonmux marked this conversation as resolved
@ -338,2 +366,3 @@
return status & MSPM0_FLASHCTL_STAT_CMDPASS;
return cortexm_run_stub(
target, MSPM0_SRAM_BASE, dest, STUB_BUFFER_BASE, length, 0, MSPM0_SRAM_BASE + flash->ram_size);

Things like the RP2040 stub need a stack, as in

/* Create a stack for our own sanity */
__asm__("ldr r4, =#0x20042000\n"
"mov sp, r4\n"
"bl rp_flash_write\n"
"bkpt #1\n");

- however they don't go to all this work to define one this way, instead picking a location to call theirs in SRAM and running with it in-stub. Is there a particular reason to avoid this approach here?

Similar question: does the stub even actually use its stack allocation, or does the compiler keep everything in registers?

Things like the RP2040 stub need a stack, as in https://codeberg.org/blackmagic-debug/blackmagic/src/commit/c4ea63ba8fe41e62b91dce32c5297c5e07c9e111/src/target/flashstub/rp.c#L81-L85 - however they don't go to all this work to define one this way, instead picking a location to call theirs in SRAM and running with it in-stub. Is there a particular reason to avoid this approach here? Similar question: does the stub even actually use its stack allocation, or does the compiler keep everything in registers?
First-time contributor
Copy link

So I did try to set up the stack in the stub and it didn't work. In case function was marked naked, local function stack frame would not be created/initialized and then the values of the registers would be lost/corrupted. If not marked naked, then stack would be used before the code that sets the SP is called. This led me to the right conclusion that the stack pointer has to be properly initialized before entering the function. What I didn't figure out was that there can be a small landing function (without stack frame!) which initializes SP and calls the meat as in RP case and that led me to the code that initializes the stack before calling into the target routine itself.

Anyway, I split the stub code into two functions, with a preallocated stack area and now it works fine. Cleaned up the other global changes and while now more arcane stuff happens in the stub, it all actually made the target code simpler.

So I did try to set up the stack in the stub and it didn't work. In case function was marked naked, local function stack frame would not be created/initialized and then the values of the registers would be lost/corrupted. If not marked naked, then stack would be used before the code that sets the SP is called. This led me to the right conclusion that the stack pointer has to be properly initialized before entering the function. What I didn't figure out was that there can be a small landing function (without stack frame!) which initializes SP and calls the meat as in RP case and that led me to the code that initializes the stack before calling into the target routine itself. Anyway, I split the stub code into two functions, with a preallocated stack area and now it works fine. Cleaned up the other global changes and while now more arcane stuff happens in the stub, it all actually made the target code simpler.
dragonmux marked this conversation as resolved
dragonmux force-pushed hardesk/mspm0u from 38a598b6c3 to 068f316876
Some checks failed
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline was successful
ci/woodpecker/pr/build-firmware/1 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/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 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/13 Pipeline failed
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/18 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-linux/1 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月21日 17:12:15 +01:00
Compare
dragonmux force-pushed hardesk/mspm0u from 068f316876
Some checks failed
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline was successful
ci/woodpecker/pr/build-firmware/1 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/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 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/13 Pipeline failed
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/18 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-linux/1 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 06b960262b
Some checks failed
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline was successful
ci/woodpecker/pr/build-firmware/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/5 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 Pipeline was successful
ci/woodpecker/pr/build-firmware/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline failed
ci/woodpecker/pr/build-firmware/12 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/14 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-linux/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/18 Pipeline was successful
ci/woodpecker/pr/build-firmware/20 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
2026年03月21日 20:10:31 +01:00
Compare

(just so you're aware, we're manually copying the commit pushes you make to your repo's branch onto the shadow branch in the main repo this PR is tracking - so just let us know when you make updates and we'll integrate them so the PR shows them up)

(just so you're aware, we're manually copying the commit pushes you make to your repo's branch onto the shadow branch in the main repo this PR is tracking - so just let us know when you make updates and we'll integrate them so the PR shows them up)
First-time contributor
Copy link

I have another update with all the remarks addressed.

Note that I have a bmd fork on codeberg where I actually develop and only mirror to github. In case you can't edit the PR to point to codeberg git I could reopen it from here, but I feel this is falling into shape and we can finish with the current one as it is, eh?

I have another update with all the remarks addressed. Note that I have a bmd fork on codeberg where I actually develop and only mirror to github. In case you can't edit the PR to point to [codeberg git](ssh://git@codeberg.org/hardesk17/blackmagic.git) I could reopen it from here, but I feel this is falling into shape and we can finish with the current one as it is, eh?

We don't mind having to manually mirror to get this PR over the finish line - after which you can then do all future PRs directly on Codeberg, so that's fine as is 👍

We don't mind having to manually mirror to get this PR over the finish line - after which you can then do all future PRs directly on Codeberg, so that's fine as is 👍
dragonmux force-pushed hardesk/mspm0u from 06b960262b
Some checks failed
ci/woodpecker/pr/build-firmware/4 Pipeline was successful
ci/woodpecker/pr/build-firmware/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 Pipeline was successful
ci/woodpecker/pr/build-firmware/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/5 Pipeline was successful
ci/woodpecker/pr/build-firmware/3 Pipeline was successful
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 Pipeline was successful
ci/woodpecker/pr/build-firmware/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline failed
ci/woodpecker/pr/build-firmware/12 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/14 Pipeline was successful
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-linux/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/18 Pipeline was successful
ci/woodpecker/pr/build-firmware/20 Pipeline was successful
ci/woodpecker/pr/build-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
to 8f5578b0ee
Some checks failed
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 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/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 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/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline failed
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/14 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-firmware/18 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-windows Pipeline was successful
2026年03月22日 14:27:45 +01:00
Compare

Looks like all the major stuff is resolved - nicely done! The only item that remains is a little formatting for that multi-line comment - the /* and */ want to be in their own lines per our note example. With that taken care of, we're happy to approve this for merge and get this in.

Looks like all the major stuff is resolved - nicely done! The only item that remains is a little formatting for that multi-line comment - the `/*` and `*/` want to be in their own lines per our note example. With that taken care of, we're happy to approve this for merge and get this in.
First-time contributor
Copy link

Didn't notice there's a new comment regarding the multiline comment.

Please update one more time. I reformatted it and while doing so found another comment was out of date, so fixed that as well. While reviewing I also noticed that flashstub/mspm0.ld has 4k as RAM size. I decreased that to 1k as that is the lowest available ram size on supported devices and we want the stub to fit there.

Didn't notice there's a new comment regarding the multiline comment. Please update one more time. I reformatted it and while doing so found another comment was out of date, so fixed that as well. While reviewing I also noticed that flashstub/mspm0.ld has 4k as RAM size. I decreased that to 1k as that is the lowest available ram size on supported devices and we want the stub to fit there.
First-time contributor
Copy link

Also, now the build with the default enabled targets does NOT seem to fit into 128k. What's the plan here?

Also, now the build with the default enabled targets does NOT seem to fit into 128k. What's the plan here?
dragonmux force-pushed hardesk/mspm0u from 8f5578b0ee
Some checks failed
ci/woodpecker/pr/build-firmware/6 Pipeline was successful
ci/woodpecker/pr/build-firmware/7 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/1 Pipeline was successful
ci/woodpecker/pr/build-firmware/8 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/9 Pipeline was successful
ci/woodpecker/pr/build-firmware/13 Pipeline failed
ci/woodpecker/pr/build-firmware/15 Pipeline was successful
ci/woodpecker/pr/build-firmware/10 Pipeline was successful
ci/woodpecker/pr/build-firmware/11 Pipeline was successful
ci/woodpecker/pr/build-firmware/12 Pipeline was successful
ci/woodpecker/pr/build-firmware/16 Pipeline was successful
ci/woodpecker/pr/build-firmware/14 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-firmware/18 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-windows Pipeline was successful
to 7d51c11415
Some checks failed
ci/woodpecker/pr/build-linux/2 Pipeline was successful
ci/woodpecker/pr/build-firmware/17 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-firmware/19 Pipeline was successful
ci/woodpecker/pr/build-firmware/18 Pipeline was successful
ci/woodpecker/pr/build-windows Pipeline was successful
ci/woodpecker/push/build-firmware/6 Pipeline was successful
ci/woodpecker/push/build-firmware/5 Pipeline was successful
ci/woodpecker/push/build-firmware/2 Pipeline was successful
ci/woodpecker/push/build-firmware/3 Pipeline was successful
ci/woodpecker/push/build-firmware/4 Pipeline was successful
ci/woodpecker/push/build-firmware/1 Pipeline was successful
ci/woodpecker/push/build-firmware/7 Pipeline was successful
ci/woodpecker/push/build-firmware/8 Pipeline was successful
ci/woodpecker/push/build-firmware/13 Pipeline failed
ci/woodpecker/push/build-firmware/14 Pipeline was successful
ci/woodpecker/push/build-firmware/12 Pipeline was successful
ci/woodpecker/push/build-firmware/10 Pipeline was successful
ci/woodpecker/push/build-firmware/9 Pipeline was successful
ci/woodpecker/push/build-firmware/11 Pipeline was successful
ci/woodpecker/push/build-firmware/15 Pipeline was successful
ci/woodpecker/push/build-linux/2 Pipeline was successful
ci/woodpecker/push/build-linux/1 Pipeline was successful
ci/woodpecker/push/build-firmware/20 Pipeline was successful
ci/woodpecker/push/build-firmware/17 Pipeline was successful
ci/woodpecker/push/build-firmware/16 Pipeline was successful
ci/woodpecker/push/build-firmware/19 Pipeline was successful
ci/woodpecker/push/build-firmware/18 Pipeline was successful
ci/woodpecker/push/build-windows Pipeline was successful
2026年03月22日 15:32:53 +01:00
Compare

We have to re-tune the enabled targets in the common targets firmware - this was already the case before your PR and thus not a problem for you to address. We're aware of it, there is a plan, we just haven't gotten around to it yet as we've been fighting other fires and such 😅

We have to re-tune the enabled targets in the common targets firmware - this was already the case before your PR and thus not a problem for you to address. We're aware of it, there is a plan, we just haven't gotten around to it yet as we've been fighting other fires and such 😅
dragonmux left a comment
Copy link

LGTM, merging. Thank you for the contribution!

LGTM, merging. Thank you for the contribution!
dragonmux deleted branch hardesk/mspm0u 2026年03月22日 15:39:33 +01:00
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
3 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!2189
Reference in a new issue
blackmagic-debug/blackmagic
No description provided.
Delete branch "hardesk/mspm0u"

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?