From: Pavel Belous <pavel.bel...@aquantia.com> Date: Wed, 23 Aug 2017 17:05:05 +0300
> diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h > b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h > index a66aee5..fc69408a 100644 > --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h > +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.h > @@ -160,6 +160,19 @@ enum hal_atl_utils_fw_state_e { > MPI_POWER = 4, > }; > > +union hal_atl_utils_hw_mpi_state_reg { > + u32 val; > + struct { > + u8 e_state; > + u8 reserved1; > + u8 u_speed; > + u8 reserved2:1; > + u8 disable_dirty_wake:1; > + u8 reserved3:2; > + u8 u_downshift:4; > + }; > +}; > + You need to consider endianness when declaring bitfields in C. Seriously, I'd rather you simply fixed the shifts and masks into the u32 value than going down this route.