Skip to content

Commit dca08a5

Browse files
keith-packardtomi-font
authored andcommitted
[zep fromtree] api-tests/drivers: Add 'volatile' to all cmsdk device registers
This ensures that GCC 14.3 performs the register accesses in the specified manner instead of reordering or combining them using strd/ldrd instructions. Signed-off-by: Keith Packard <[email protected]> (cherry picked from commit f0d43a6) Signed-off-by: Tomi Fontanilles <[email protected]>
1 parent 6ed1c9b commit dca08a5

File tree

2 files changed

+20
-17
lines changed

2 files changed

+20
-17
lines changed

api-tests/platform/drivers/uart/cmsdk/pal_uart.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,18 @@
3636
#define CMSDK_UART_INTSTATUS_TXIRQ_Pos 0 /* CMSDK_UART STATUS: TXIRQ Position */
3737
#define CMSDK_UART_INTSTATUS_TXIRQ_Msk (0x01ul << CMSDK_UART_INTSTATUS_TXIRQ_Pos)
3838
/* CMSDK_UART STATUS: TXIRQ Mask */
39+
typedef volatile uint32_t vuint32_t;
3940

4041
/* typedef's */
4142
typedef struct {
42-
uint32_t DATA; /* Offset: 0x000 (R/W) Data Register */
43-
uint32_t STATE; /* Offset: 0x004 (R/W) Status state */
44-
uint32_t CTRL; /* Offset: 0x008 (R/W) Control Register */
43+
vuint32_t DATA; /* Offset: 0x000 (R/W) Data Register */
44+
vuint32_t STATE; /* Offset: 0x004 (R/W) Status state */
45+
vuint32_t CTRL; /* Offset: 0x008 (R/W) Control Register */
4546
union {
46-
uint32_t INTSTATUS; /* Offset: 0x00C (R/ ) Interrupt Status Register */
47-
uint32_t INTCLEAR; /* Offset: 0x00C ( /W) Interrupt Clear Register */
47+
vuint32_t INTSTATUS; /* Offset: 0x00C (R/ ) Interrupt Status Register */
48+
vuint32_t INTCLEAR; /* Offset: 0x00C ( /W) Interrupt Clear Register */
4849
};
49-
uint32_t BAUDDIV; /* Offset: 0x010 (R/W) Baud rate divider */
50+
vuint32_t BAUDDIV; /* Offset: 0x010 (R/W) Baud rate divider */
5051
} uart_t;
5152

5253

api-tests/platform/drivers/watchdog/cmsdk/pal_wd_cmsdk.h

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,20 @@
2222

2323
#define WDOG_TIMER_MAX_VALUE 0xFFFFFFFF
2424

25+
typedef volatile uint32_t vuint32_t;
26+
2527
typedef struct {
26-
uint32_t LOAD; /* Offset: 0x000 (R/W) Watchdog Load Register */
27-
uint32_t VALUE; /* Offset: 0x004 (R/ ) Watchdog Value Register */
28-
uint32_t CTRL; /* Offset: 0x008 (R/W) Watchdog Control Register */
29-
uint32_t INTCLR; /* Offset: 0x00C ( /W) Watchdog Clear Interrupt Register */
30-
uint32_t RAWINTSTAT; /* Offset: 0x010 (R/ ) Watchdog Raw Interrupt Status Register */
31-
uint32_t MASKINTSTAT; /* Offset: 0x014 (R/ ) Watchdog Interrupt Status Register */
32-
uint32_t RESERVED0[762];
33-
uint32_t LOCK; /* Offset: 0xC00 (R/W) Watchdog Lock Register */
34-
uint32_t RESERVED1[191];
35-
uint32_t ITCR; /* Offset: 0xF00 (R/W) Watchdog Integration Test Control Register */
36-
uint32_t ITOP; /* Offset: 0xF04 ( /W) Watchdog Integration Test Output Set Register */
28+
vuint32_t LOAD; /* Offset: 0x000 (R/W) Watchdog Load Register */
29+
vuint32_t VALUE; /* Offset: 0x004 (R/ ) Watchdog Value Register */
30+
vuint32_t CTRL; /* Offset: 0x008 (R/W) Watchdog Control Register */
31+
vuint32_t INTCLR; /* Offset: 0x00C ( /W) Watchdog Clear Interrupt Register */
32+
vuint32_t RAWINTSTAT; /* Offset: 0x010 (R/ ) Watchdog Raw Interrupt Status Register */
33+
vuint32_t MASKINTSTAT; /* Offset: 0x014 (R/ ) Watchdog Interrupt Status Register */
34+
vuint32_t RESERVED0[762];
35+
vuint32_t LOCK; /* Offset: 0xC00 (R/W) Watchdog Lock Register */
36+
vuint32_t RESERVED1[191];
37+
vuint32_t ITCR; /* Offset: 0xF00 (R/W) Watchdog Integration Test Control Register */
38+
vuint32_t ITOP; /* Offset: 0xF04 ( /W) Watchdog Integration Test Output Set Register */
3739
} wd_timer_t;
3840

3941
/* WATCHDOG LOAD Register Definitions */

0 commit comments

Comments
 (0)