• Niklas Söderlund's avatar
    ravb: add wake-on-lan support via magic packet · 3e3d6477
    Niklas Söderlund authored
    WoL is enabled in the suspend callback by setting MagicPacket detection
    and disabling all interrupts expect MagicPacket. In the resume path the
    driver needs to reset the hardware to rearm the WoL logic, this prevents
    the driver from simply restoring the registers and to take advantage of
    that ravb was not suspended to reduce resume time. To reset the
    hardware the driver closes the device, sets it in reset mode and reopens
    the device just like it would do in a normal suspend/resume scenario
    without WoL enabled, but it both closes and opens the device in the
    resume callback since the device needs to be reset for WoL to work.
    
    One quirk needed for WoL is that the module clock needs to be prevented
    from being switched off by Runtime PM. To keep the clock alive the
    suspend callback need to call clk_enable() directly to increase the
    usage count of the clock. Then when Runtime PM decreases the clock usage
    count it won't reach 0 and be switched off.
    Signed-off-by: default avatarNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Acked-by: default avatarSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3e3d6477
ravb.h 22.7 KB