* [PATCH rtw-next 1/2] wifi: rtw88: add __packed to efuse map and do assertion
@ 2026-04-11 7:24 Ping-Ke Shih
2026-04-11 7:24 ` [PATCH rtw-next 2/2] wifi: rtw89: " Ping-Ke Shih
0 siblings, 1 reply; 2+ messages in thread
From: Ping-Ke Shih @ 2026-04-11 7:24 UTC (permalink / raw)
To: linux-wireless; +Cc: rtl8821cerfe2
As arm-linux-gnueabi-gcc compiler align struct field is not always like
gcc on x86 target, the efuse map layout might not be expected. Add __packed
and do assertion to ensure it is expected.
Complied test only with arm-linux-gnueabi-gcc and x86 gcc.
Cc: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
drivers/net/wireless/realtek/rtw88/rtw8703b.h | 2 ++
drivers/net/wireless/realtek/rtw88/rtw8723x.h | 4 +++-
drivers/net/wireless/realtek/rtw88/rtw8821c.h | 4 +++-
drivers/net/wireless/realtek/rtw88/rtw8822b.h | 4 +++-
drivers/net/wireless/realtek/rtw88/rtw8822c.h | 4 +++-
drivers/net/wireless/realtek/rtw88/rtw88xxa.h | 2 +-
6 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.h b/drivers/net/wireless/realtek/rtw88/rtw8703b.h
index 3e2da2e6739d..e3d709635902 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.h
@@ -70,6 +70,8 @@ struct phy_status_8703b {
#endif
} __packed;
+static_assert(sizeof(struct phy_status_8703b) == 28);
+
/* Baseband registers */
#define REG_BB_PWR_SAV5_11N 0x0818
/* BIT(11) should be 1 for 8703B *and* 8723D, which means LNA uses 4
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723x.h b/drivers/net/wireless/realtek/rtw88/rtw8723x.h
index 0fc70dfdfc8b..da674ab7cb78 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8723x.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.h
@@ -95,9 +95,11 @@ struct rtw8723x_efuse {
struct rtw8723xe_efuse e;
struct rtw8723xu_efuse u;
struct rtw8723xs_efuse s;
- };
+ } __packed;
} __packed;
+static_assert(sizeof(struct rtw8723x_efuse) == 0x120);
+
#define RTW8723X_IQK_ADDA_REG_NUM 16
#define RTW8723X_IQK_MAC8_REG_NUM 3
#define RTW8723X_IQK_MAC32_REG_NUM 1
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.h b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
index 954e93c8020d..ac9773b6dee5 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
@@ -101,9 +101,11 @@ struct rtw8821c_efuse {
struct rtw8821ce_efuse e;
struct rtw8821cu_efuse u;
struct rtw8821cs_efuse s;
- };
+ } __packed;
} __packed;
+static_assert(sizeof(struct rtw8821c_efuse) == 0x200);
+
static inline void
_rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
{
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.h b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
index 9fca9ba67c90..656f8830a394 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
@@ -103,9 +103,11 @@ struct rtw8822b_efuse {
struct rtw8822be_efuse e;
struct rtw8822bu_efuse u;
struct rtw8822bs_efuse s;
- };
+ } __packed;
} __packed;
+static_assert(sizeof(struct rtw8822b_efuse) == 0x200);
+
static inline void
_rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
{
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
index fc62b67a15f2..e1423448c453 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
@@ -102,9 +102,11 @@ struct rtw8822c_efuse {
struct rtw8822ce_efuse e;
struct rtw8822cu_efuse u;
struct rtw8822cs_efuse s;
- };
+ } __packed;
} __packed;
+static_assert(sizeof(struct rtw8822c_efuse) == 0x19a);
+
enum rtw8822c_dpk_agc_phase {
RTW_DPK_GAIN_CHECK,
RTW_DPK_GAIN_LARGE,
diff --git a/drivers/net/wireless/realtek/rtw88/rtw88xxa.h b/drivers/net/wireless/realtek/rtw88/rtw88xxa.h
index 09a45c1a4129..1b5297c942d8 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw88xxa.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw88xxa.h
@@ -58,7 +58,7 @@ struct rtw88xxa_efuse {
union {
struct rtw8821au_efuse rtw8821au;
struct rtw8812au_efuse rtw8812au;
- };
+ } __packed;
} __packed;
static_assert(sizeof(struct rtw88xxa_efuse) == 512);
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH rtw-next 2/2] wifi: rtw89: add __packed to efuse map and do assertion
2026-04-11 7:24 [PATCH rtw-next 1/2] wifi: rtw88: add __packed to efuse map and do assertion Ping-Ke Shih
@ 2026-04-11 7:24 ` Ping-Ke Shih
0 siblings, 0 replies; 2+ messages in thread
From: Ping-Ke Shih @ 2026-04-11 7:24 UTC (permalink / raw)
To: linux-wireless; +Cc: rtl8821cerfe2
As arm-linux-gnueabi-gcc compiler align struct field is not always like
gcc on x86 target, the efuse map layout might not be expected. Add __packed
and do assertion to ensure it is expected.
Complied test only with arm-linux-gnueabi-gcc and x86 gcc.
Cc: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
drivers/net/wireless/realtek/rtw89/rtw8851b.h | 8 +++++---
drivers/net/wireless/realtek/rtw89/rtw8852a.h | 8 +++++---
drivers/net/wireless/realtek/rtw89/rtw8852b_common.h | 8 +++++---
drivers/net/wireless/realtek/rtw89/rtw8852c.h | 8 +++++---
drivers/net/wireless/realtek/rtw89/rtw8922a.h | 2 ++
drivers/net/wireless/realtek/rtw89/rtw8922d.h | 2 ++
6 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.h b/drivers/net/wireless/realtek/rtw89/rtw8851b.h
index 1a5c52654d8a..5c2e26c04cd9 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8851b.h
+++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.h
@@ -13,11 +13,11 @@
struct rtw8851bu_efuse {
u8 rsvd[0x88];
u8 mac_addr[ETH_ALEN];
-};
+} __packed;
struct rtw8851be_efuse {
u8 mac_addr[ETH_ALEN];
-};
+} __packed;
struct rtw8851b_tssi_offset {
u8 cck_tssi[TSSI_CCK_CH_GROUP_NUM];
@@ -68,9 +68,11 @@ struct rtw8851b_efuse {
union {
struct rtw8851bu_efuse u;
struct rtw8851be_efuse e;
- };
+ } __packed;
} __packed;
+static_assert(sizeof(struct rtw8851b_efuse) == 0x48e);
+
extern const struct rtw89_chip_info rtw8851b_chip_info;
#endif
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852a.h b/drivers/net/wireless/realtek/rtw89/rtw8852a.h
index d6c1acd09238..0d381f6fd182 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852a.h
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852a.h
@@ -19,11 +19,11 @@ enum rtw8852a_pmac_mode {
struct rtw8852au_efuse {
u8 rsvd[0x38];
u8 mac_addr[ETH_ALEN];
-};
+} __packed;
struct rtw8852ae_efuse {
u8 mac_addr[ETH_ALEN];
-};
+} __packed;
struct rtw8852a_tssi_offset {
u8 cck_tssi[TSSI_CCK_CH_GROUP_NUM];
@@ -78,9 +78,11 @@ struct rtw8852a_efuse {
union {
struct rtw8852au_efuse u;
struct rtw8852ae_efuse e;
- };
+ } __packed;
} __packed;
+static_assert(sizeof(struct rtw8852a_efuse) == 0x43e);
+
struct rtw8852a_bb_pmac_info {
u8 en_pmac_tx:1;
u8 is_cck:1;
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852b_common.h b/drivers/net/wireless/realtek/rtw89/rtw8852b_common.h
index 3dce5422f41e..89e936e4b211 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852b_common.h
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852b_common.h
@@ -20,11 +20,11 @@ enum rtw8852bx_pmac_mode {
struct rtw8852bx_u_efuse {
u8 rsvd[0x88];
u8 mac_addr[ETH_ALEN];
-};
+} __packed;
struct rtw8852bx_e_efuse {
u8 mac_addr[ETH_ALEN];
-};
+} __packed;
struct rtw8852bx_tssi_offset {
u8 cck_tssi[TSSI_CCK_CH_GROUP_NUM];
@@ -89,9 +89,11 @@ struct rtw8852bx_efuse {
union {
struct rtw8852bx_u_efuse u;
struct rtw8852bx_e_efuse e;
- };
+ } __packed;
} __packed;
+static_assert(sizeof(struct rtw8852bx_efuse) == 0x48e);
+
struct rtw8852bx_bb_pmac_info {
u8 en_pmac_tx:1;
u8 is_cck:1;
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.h b/drivers/net/wireless/realtek/rtw89/rtw8852c.h
index 8585921ac6c4..49cb6b4b3b7c 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.h
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.h
@@ -13,11 +13,11 @@
struct rtw8852c_u_efuse {
u8 rsvd[0x88];
u8 mac_addr[ETH_ALEN];
-};
+} __packed;
struct rtw8852c_e_efuse {
u8 mac_addr[ETH_ALEN];
-};
+} __packed;
struct rtw8852c_tssi_offset {
u8 cck_tssi[TSSI_CCK_CH_GROUP_NUM];
@@ -95,9 +95,11 @@ struct rtw8852c_efuse {
union {
struct rtw8852c_u_efuse u;
struct rtw8852c_e_efuse e;
- };
+ } __packed;
} __packed;
+static_assert(sizeof(struct rtw8852c_efuse) == 0x48e);
+
extern const struct rtw89_chip_info rtw8852c_chip_info;
#endif
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922a.h b/drivers/net/wireless/realtek/rtw89/rtw8922a.h
index a29cfa5b4291..33c87bcc403c 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8922a.h
+++ b/drivers/net/wireless/realtek/rtw89/rtw8922a.h
@@ -68,6 +68,8 @@ struct rtw8922a_efuse {
struct rtw8922a_rx_gain_6g rx_gain_6g_b;
} __packed;
+static_assert(sizeof(struct rtw8922a_efuse) == 0x1b8);
+
extern const struct rtw89_chip_info rtw8922a_chip_info;
extern const struct rtw89_chip_variant rtw8922ae_vs_variant;
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922d.h b/drivers/net/wireless/realtek/rtw89/rtw8922d.h
index 22a7d1cc244f..6d0fb01c1216 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8922d.h
+++ b/drivers/net/wireless/realtek/rtw89/rtw8922d.h
@@ -77,6 +77,8 @@ struct rtw8922d_efuse {
struct rtw8922d_rx_gain_6g rx_gain_6g_b_2;
} __packed;
+static_assert(sizeof(struct rtw8922d_efuse) == 0x222);
+
extern const struct rtw89_chip_info rtw8922d_chip_info;
extern const struct rtw89_chip_variant rtw8922de_vs_variant;
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-04-11 7:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-11 7:24 [PATCH rtw-next 1/2] wifi: rtw88: add __packed to efuse map and do assertion Ping-Ke Shih
2026-04-11 7:24 ` [PATCH rtw-next 2/2] wifi: rtw89: " Ping-Ke Shih
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox