On Tue, 4 Feb 2025 at 08:37, Peter Maydell <peter.mayd...@linaro.org> wrote:

> On Thu, 30 Jan 2025 at 22:31, Edgar E. Iglesias
> <edgar.igles...@gmail.com> wrote:
> > On Mon, Jan 27, 2025 at 8:40 AM Peter Maydell <peter.mayd...@linaro.org>
> wrote:
> >> On Thu, 19 Dec 2024 at 06:17, Andrew.Yuan <andrew.y...@jaguarmicro.com>
> wrote:
> >> > -            rx_cmp = rxbuf_ptr[offset] << 8 | rxbuf_ptr[offset];
> >> > -            mask = FIELD_EX32(cr0, TYPE2_COMPARE_0_WORD_0,
> MASK_VALUE);
> >> > -            compare = FIELD_EX32(cr0, TYPE2_COMPARE_0_WORD_0,
> COMPARE_VALUE);
> >> > +            disable_mask =
> >> > +                FIELD_EX32(cr1, TYPE2_COMPARE_0_WORD_1,
> DISABLE_MASK);
> >> > +            if (disable_mask) {
> >> > +                /*
> >> > +                 * If disable_mask is set,
> >> > +                 * mask_value is used as an additional 2 byte
> Compare Value.
> >> > +                 * To simple, set mask = 0xFFFFFFFF, if disable_mask
> is set.
> >> > +                 */
> >> > +                rx_cmp = ldl_le_p(rxbuf_ptr + offset);
> >> > +                mask = 0xFFFFFFFF;
> >> > +                compare = cr0;
> >> > +            } else {
> >> > +                rx_cmp = lduw_le_p(rxbuf_ptr + offset);
> >>
> >> Is the change in behaviour in the !disable_mask codepath here
> >> intentional? Previously we use one byte from rxbuf_ptr[offset],
> >> duplicated into both halves of rx_cmp; now we will load two
> >> different bytes from rxbuf_ptr[offset] and rxbuf_ptr[offset + 1].
> >>
> >> If this is intended, we should say so in the commit message.
> >>
> >
> > I agree that it should be mentioned (looks like a correct bugfix).
>
> Thanks. I've expanded the commit message:
>
>     hw/net/cadence_gem:  Fix the mask/compare/disable-mask logic
>
>     Our current handling of the mask/compare logic in the Cadence
>     GEM ethernet device is wrong:
>      (1) we load the same byte twice from rx_buf when
>          creating the compare value
>      (2) we ignore the DISABLE_MASK flag
>
>     The "Cadence IP for Gigabit Ethernet MAC Part Number: IP7014 IP Rev:
>     R1p12 - Doc Rev: 1.3 User Guide" states that if the DISABLE_MASK bit
>     in type2_compare_x_word_1 is set, the mask_value field in
>     type2_compare_x_word_0 is used as an additional 2 byte Compare Value.
>
>     Correct these bugs:
>      * in the !disable_mask codepath, use lduw_le_p() so we
>        correctly load a 16-bit value for comparison
>      * in the disable_mask codepath, we load a full 4-byte value
>        from rx_buf for the comparison, set the compare value to
>        the whole of the cr0 register (i.e. the concatenation of
>        the mask and compare fields), and set mask to 0xffffffff
>        to force a 32-bit comparison
>
> and also tweaked the comment a bit:
>
> +                /*
> +                 * If disable_mask is set, mask_value is used as an
> +                 * additional 2 byte Compare Value; that is equivalent
> +                 * to using the whole cr0 register as the comparison
> value.
> +                 * Load 32 bits of data from rx_buf, and set mask to
> +                 * all-ones so we compare all 32 bits.
> +                 */
>
> and applied this to target-arm.next.
>
> > Other than that this patch looks good to me!
>
> Can I call that a Reviewed-by (with the above changes)?


Yes, thanks!!



>
> thanks
> -- PMM
>

Reply via email to