As I understand it, the e1000e.c was implemented by 82574L spec(
https://www.intel.com/content/dam/doc/datasheet/82574l-gbe-controller-datasheet.pdf
).
In the same spec there is 10.2.4 paragraph which provides more details when
ICR should be cleared.

> • Case 1 - Interrupt Mask register equals 0x0000 (mask all): ICR content
> is cleared.
> • Case 2 - Interrupt was asserted (ICR.INT_ASSERT=1) and auto mask is
> active: ICR
> content is cleared, and the IAM register is written to the IMC register.
> • Case 3 - Interrupt was not asserted (ICR.INT_ASSERT=0): Read has no side
> affect.


On Fri, May 29, 2020 at 10:35 AM Jason Wang <jasow...@redhat.com> wrote:

>
> On 2020/5/29 下午3:18, Jason Wang wrote:
> >
> > On 2020/5/13 下午7:31, and...@daynix.com wrote:
> >> From: Andrew Melnychenko <and...@daynix.com>
> >>
> >> Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1707441
> >> Added ICR clearing if there is IMS bit - according to the note by
> >> section 13.3.27 of the 8257X developers manual.
> >>
> >> Signed-off-by: Andrew Melnychenko <and...@daynix.com>
> >> ---
> >>   hw/net/e1000e_core.c | 10 ++++++++++
> >>   hw/net/trace-events  |  1 +
> >>   2 files changed, 11 insertions(+)
> >>
> >> diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c
> >> index d5676871fa..10212d7932 100644
> >> --- a/hw/net/e1000e_core.c
> >> +++ b/hw/net/e1000e_core.c
> >> @@ -2624,6 +2624,16 @@ e1000e_mac_icr_read(E1000ECore *core, int index)
> >>           e1000e_clear_ims_bits(core, core->mac[IAM]);
> >>       }
> >>   +    /*
> >> +     * PCIe* GbE Controllers Open Source Software Developer's Manual
> >> +     * 13.3.27 Interrupt Cause Read Register
> >> +     */
> >> +    if ((core->mac[ICR] & E1000_ICR_ASSERTED) &&
> >> +        (core->mac[ICR] & core->mac[IMS])) {
> >> + trace_e1000e_irq_icr_clear_icr_bit_ims(core->mac[ICR],
> >> core->mac[IMS]);
> >> +        core->mac[ICR] = 0;
> >> +    }
> >> +
> >
> >
> > Hi Andrew:
> >
> > So my comments still. I think we need to implement 82574l behavior (if
> > you go through e1000e.c all chapters it mentioned is for 82574l
> > datasheet not the one you pointed to me).
> >
> > And actually the 82574l behavior is much more simpler.
>
>
> To be more specific.
>
> See chapter 7.4.5 which describes the ICR clearing.
>
> It has three methods for clearing: auto-clear, clear-on-write and
> clear-on-read.
>
> And in the part of "Read to clear" it said:
>
> """
> All bits in the ICR register are cleared on a read to ICR.
>
> """
>
> So there's no need to IMS and other stuffs here.
>
> Thanks
>
>
> >
> > Thanks
>
>

Reply via email to