[PATCH v4 2/2] ethernet: eswin: Add eic7700 ethernet driver
Vadim Fedorenko
vadim.fedorenko at linux.dev
Wed Aug 27 05:43:31 PDT 2025
On 27/08/2025 09:14, weishangjuan at eswincomputing.com wrote:
> From: Shangjuan Wei <weishangjuan at eswincomputing.com>
>
> Add Ethernet controller support for Eswin's eic7700 SoC. The driver
> provides management and control of Ethernet signals for the eiC7700
> series chips.
>
> Signed-off-by: Zhi Li <lizhi2 at eswincomputing.com>
> Signed-off-by: Shangjuan Wei <weishangjuan at eswincomputing.com>
> ---
[...]
> +/**
> + * eic7700_apply_delay - Update TX or RX delay bits in delay parameter value.
> + * @delay_ps: Delay in picoseconds (capped at 12.7ns).
> + * @reg: Pointer to register value to modify.
> + * @is_rx: True for RX delay (bits 30:24), false for TX delay (bits 14:8).
> + *
> + * Converts delay to 0.1ns units, caps at 0x7F, and sets appropriate bits.
> + * Only RX or TX bits are updated; other bits remain unchanged.
> + */
> +static inline void eic7700_apply_delay(u32 delay_ps, u32 *reg, bool is_rx)
inlining functions in .c files is discouraged in netdev, let the
compiler decide inlining
> +{
> + if (!reg)
> + return;
please, avoid defensive programming. with this check you also mixing
code and variables..
> +
> + u32 val = min(delay_ps / 100, EIC7700_MAX_DELAY_UNIT);
> +> + if (is_rx) {
> + *reg &= ~EIC7700_ETH_RX_ADJ_DELAY;
> + *reg |= (val << 24) & EIC7700_ETH_RX_ADJ_DELAY;
> + } else {
> + *reg &= ~EIC7700_ETH_TX_ADJ_DELAY;
> + *reg |= (val << 8) & EIC7700_ETH_TX_ADJ_DELAY;
these 2 assignments should be converted to FIELD_PREP()
> + }
> +}
> +
More information about the linux-arm-kernel
mailing list