lkml.org 
[lkml]   [2020]   [Nov]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net-next 05/18] net: phy: marvell: implement generic .handle_interrupt() callback
    Date
    From: Ioana Ciornei <ioana.ciornei@nxp.com>

    In an attempt to actually support shared IRQs in phylib, we now move the
    responsibility of triggering the phylib state machine or just returning
    IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
    3 different IRQ handling callbacks (.handle_interrupt(),
    .did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
    driver implement directly an IRQ handler like any other device driver.
    Make this driver follow the new convention.

    Cc: Maxim Kochetkov <fido_max@inbox.ru>
    Cc: Baruch Siach <baruch@tkos.co.il>
    Cc: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    ---
    drivers/net/phy/marvell.c | 57 ++++++++++++++++++++++++---------------
    1 file changed, 36 insertions(+), 21 deletions(-)

    diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
    index 2563526bf4a6..bb843b960436 100644
    --- a/drivers/net/phy/marvell.c
    +++ b/drivers/net/phy/marvell.c
    @@ -327,6 +327,24 @@ static int marvell_config_intr(struct phy_device *phydev)
    return err;
    }

    +static irqreturn_t marvell_handle_interrupt(struct phy_device *phydev)
    +{
    + int irq_status;
    +
    + irq_status = phy_read(phydev, MII_M1011_IEVENT);
    + if (irq_status < 0) {
    + phy_error(phydev);
    + return IRQ_NONE;
    + }
    +
    + if (!(irq_status & MII_M1011_IMASK_INIT))
    + return IRQ_NONE;
    +
    + phy_trigger_machine(phydev);
    +
    + return IRQ_HANDLED;
    +}
    +
    static int marvell_set_polarity(struct phy_device *phydev, int polarity)
    {
    int reg;
    @@ -1659,18 +1677,6 @@ static int marvell_aneg_done(struct phy_device *phydev)
    return (retval < 0) ? retval : (retval & MII_M1011_PHY_STATUS_RESOLVED);
    }

    -static int m88e1121_did_interrupt(struct phy_device *phydev)
    -{
    - int imask;
    -
    - imask = phy_read(phydev, MII_M1011_IEVENT);
    -
    - if (imask & MII_M1011_IMASK_INIT)
    - return 1;
    -
    - return 0;
    -}
    -
    static void m88e1318_get_wol(struct phy_device *phydev,
    struct ethtool_wolinfo *wol)
    {
    @@ -2699,6 +2705,7 @@ static struct phy_driver marvell_drivers[] = {
    .config_aneg = m88e1101_config_aneg,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2717,6 +2724,7 @@ static struct phy_driver marvell_drivers[] = {
    .config_aneg = marvell_config_aneg,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2738,6 +2746,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2759,6 +2768,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2779,6 +2789,7 @@ static struct phy_driver marvell_drivers[] = {
    .config_aneg = m88e1118_config_aneg,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2798,7 +2809,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2820,7 +2831,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .get_wol = m88e1318_get_wol,
    .set_wol = m88e1318_set_wol,
    .resume = genphy_resume,
    @@ -2842,6 +2853,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = genphy_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2862,6 +2874,7 @@ static struct phy_driver marvell_drivers[] = {
    .config_aneg = m88e1118_config_aneg,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2880,6 +2893,7 @@ static struct phy_driver marvell_drivers[] = {
    .config_aneg = marvell_config_aneg,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2897,6 +2911,7 @@ static struct phy_driver marvell_drivers[] = {
    .config_init = m88e1116r_config_init,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2919,7 +2934,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .get_wol = m88e1318_get_wol,
    .set_wol = m88e1318_set_wol,
    .resume = marvell_resume,
    @@ -2948,7 +2963,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2974,7 +2989,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -2999,7 +3014,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -3020,7 +3035,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -3045,7 +3060,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    @@ -3067,7 +3082,7 @@ static struct phy_driver marvell_drivers[] = {
    .read_status = marvell_read_status,
    .ack_interrupt = marvell_ack_interrupt,
    .config_intr = marvell_config_intr,
    - .did_interrupt = m88e1121_did_interrupt,
    + .handle_interrupt = marvell_handle_interrupt,
    .resume = genphy_resume,
    .suspend = genphy_suspend,
    .read_page = marvell_read_page,
    --
    2.28.0
    \
     
     \ /
      Last update: 2020-11-12 17:01    [W:4.192 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site