From: Pavel Belous <[email protected]>
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.