soc/qc/common: Update SPMI_ADDR macro for better type safety
Update the SPMI_ADDR macro to wrap both the slave and reg arguments in parentheses. The previous definition, ((slave << 16) | reg), led to incorrect address calculation when the slave argument was an arithmetic or logical expression (e.g., (a | b)), as the bit-shift operator (<<) has higher precedence than the logical OR (|). The revised macro guarantees that the full slave expression is evaluated before the bit shift, ensuring correct SPMI register address construction. Key changes: - Wrap slave and reg arguments in parentheses within SPMI_ADDR definition. BUG=b:439819922 TEST=Verify that the SPMI_ADDR output is correct. e.g. SPMI_ADDR(0x02 | 0x01, 0x200) Output before this change: ``` ((0x02 | 0x01 << 16) | 0x200) (0x02 | 0x010000 | 0x200) (0x010202) ``` Output after this change: ``` (((0x02 | 0x01) << 16) | 0x200) (((0x03) << 16) | 0x200) ((0x030000) | 0x200) (0x030200) ``` Change-Id: I58b36b62f0b5a59c03a1c1d08640fe9086d81d7a Signed-off-by: Kapil Porwal <kapilporwal@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/90198 Reviewed-by: Subrata Banik <subratabanik@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
cb1045a8b8
commit
9f675eb96b
1 changed files with 1 additions and 1 deletions
|
|
@ -7,7 +7,7 @@
|
|||
#include <stdint.h>
|
||||
|
||||
/* Macro to construct SPMI address from slave ID and register offset */
|
||||
#define SPMI_ADDR(slave, reg) ((slave << 16) | reg)
|
||||
#define SPMI_ADDR(slave, reg) (((slave) << 16) | (reg))
|
||||
|
||||
int spmi_read8(uint32_t addr);
|
||||
int spmi_write8(uint32_t addr, uint8_t data);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue