From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@semihalf-com.20150623.gappssmtp.com header.s=20150623 header.b=w7xtaYs+; spf=none, err=SPF record not found (domain: semihalf.com, ip: 209.85.208.193, mailfrom: mw@semihalf.com) Received: from mail-lj1-f193.google.com (mail-lj1-f193.google.com [209.85.208.193]) by groups.io with SMTP; Sun, 05 May 2019 19:37:20 -0700 Received: by mail-lj1-f193.google.com with SMTP id z5so4602159lji.10 for ; Sun, 05 May 2019 19:37:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mLBQ3H6+JjRJYsmqeLDyFmCbQ/x27UVDNCuQS+UXWaM=; b=w7xtaYs+IkCCaxEHsXf3Nbr5TB2asj8bvJsh+ibQEm+XkHDL0ctJD5oTHQ90wO7oK3 QLcRBHv+A/F/Q8JQsMqFGvuicsXB81Qr9IRBkeSts4Fu6Tck4iNtFOwyfyqvqCEBue1R fi6I05VMhxVNRHWQHXNkQh2ub21O2fz6MeIZ0Om77Mm3USVpAXB7ScEHypq3HW8QZh26 vyHShvquSeCNeRDps1YYvY+WxxaqU7ZVfGCCIYLkvK1Nm5jBInTPh/H4KL24NGbUnpsq d9DxKPq28joKk2uoN8X7d9n3x8J47yzd5J384fq+dWgKjdsUxBHzfoGPyrArlzIUL3rf QJxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mLBQ3H6+JjRJYsmqeLDyFmCbQ/x27UVDNCuQS+UXWaM=; b=MufE4KzzD0yZ579NH9I7rFQojF5xV4lOO6lGFi7dZJa0sqN82Hc85lcgRIrQ72RI2t /7X9n1fv8EC2tT/EoS0d4Z5rZ0OdWPWHKYsHExR5PEL9OAUW87JyHNcYTJ3bHhXXjeYn Ebs5hgQYDZu+tWApKT9D04n8kyR0V29Fu03ABe7bQViLh7XzV+JeR/zuEyGg7mA0L2Sm Z3TaR0sCZwTUzwe0diOMsAhk9MrhrOKQRYgplpEaIYI7e8dtBBlsLlVkmbmmU6lxTigU QN/J5YMW7KGeZBsMA6q0NjZc6dD9a/l3BOLEQhQDYfYpIYwKsksIojj5YlP66P14ohXN 0T3Q== X-Gm-Message-State: APjAAAVW5JcvIyGIv9iUuIfq8XMtTFJSycGsx95H15398XMhnq9/tLAW RW4cc5eFQw2r/G40Xu0YIF9xaSsc798= X-Google-Smtp-Source: APXvYqytfaw/JX2xrivE2CVpQ2w/GQYbZck4YAN0Kvv7Nx+zvz78qKDcAP12m72jWkaRmR2RxkniZA== X-Received: by 2002:a2e:85d2:: with SMTP id h18mr11784407ljj.128.1557110238366; Sun, 05 May 2019 19:37:18 -0700 (PDT) Return-Path: Received: from gilgamesh.semihalf.com (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id v6sm288378lfg.96.2019.05.05.19.37.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 05 May 2019 19:37:17 -0700 (PDT) From: "Marcin Wojtas" To: devel@edk2.groups.io Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org, mw@semihalf.com, jsd@semihalf.com, jaz@semihalf.com, kostap@marvell.com, Jici.Gao@arm.com Subject: [edk2-platforms: PATCH v2 2/4] Marvell/Drivers: MvPhyDxe: Refactor 88E1510 initialization Date: Mon, 6 May 2019 04:37:05 +0200 Message-Id: <1557110227-31466-3-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1557110227-31466-1-git-send-email-mw@semihalf.com> References: <1557110227-31466-1-git-send-email-mw@semihalf.com> This patch adds only a non-functional change, extracting common startup autonegotiation configuration into a separate routine. It will be re-used in 88E1112 PHY support addition in a following patch. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Marcin Wojtas --- Silicon/Marvell/Drivers/Net/MvPhyDxe/MvPhyDxe.c | 86 +++++++++++++------- 1 file changed, 57 insertions(+), 29 deletions(-) diff --git a/Silicon/Marvell/Drivers/Net/MvPhyDxe/MvPhyDxe.c b/Silicon/Marvell/Drivers/Net/MvPhyDxe/MvPhyDxe.c index 9be0489..63af640 100644 --- a/Silicon/Marvell/Drivers/Net/MvPhyDxe/MvPhyDxe.c +++ b/Silicon/Marvell/Drivers/Net/MvPhyDxe/MvPhyDxe.c @@ -251,6 +251,58 @@ MvPhyParseStatus ( return EFI_SUCCESS; } +/** + Configure PHY device autonegotiation. + + @param[in out] *PhyDevice A pointer to configured PHY device structure. + +**/ +STATIC +EFI_STATUS +MvPhyConfigureAutonegotiation ( + IN OUT PHY_DEVICE *PhyDevice + ) +{ + UINT32 Data; + INTN Index; + + /* Read BMSR register in order to check autoneg capabilities and status. */ + Mdio->Read (Mdio, PhyDevice->Addr, PhyDevice->MdioIndex, MII_BMSR, &Data); + + if ((Data & BMSR_ANEGCAPABLE) && !(Data & BMSR_ANEGCOMPLETE)) { + + DEBUG ((DEBUG_INFO, + "%a: Waiting for PHY auto negotiation...", + __FUNCTION__)); + + /* Wait for autonegotiation to complete and read media status */ + for (Index = 0; !(Data & BMSR_ANEGCOMPLETE); Index++) { + if (Index > PHY_AUTONEGOTIATE_TIMEOUT) { + DEBUG ((DEBUG_ERROR, "%a: Timeout\n", __FUNCTION__)); + PhyDevice->LinkUp = FALSE; + return EFI_TIMEOUT; + } + gBS->Stall (1000); /* 1 ms */ + Mdio->Read (Mdio, PhyDevice->Addr, PhyDevice->MdioIndex, MII_BMSR, &Data); + } + + PhyDevice->LinkUp = TRUE; + DEBUG ((DEBUG_INFO, "%a: link up\n", __FUNCTION__)); + } else { + Mdio->Read (Mdio, PhyDevice->Addr, PhyDevice->MdioIndex, MII_BMSR, &Data); + + if (Data & BMSR_LSTATUS) { + PhyDevice->LinkUp = TRUE; + DEBUG ((DEBUG_INFO, "%a: link up\n", __FUNCTION__)); + } else { + PhyDevice->LinkUp = FALSE; + DEBUG ((DEBUG_INFO, "%a: link down\n", __FUNCTION__)); + } + } + + return EFI_SUCCESS; +} + STATIC VOID MvPhy1512WriteBits ( @@ -282,8 +334,7 @@ MvPhyInit1512 ( IN OUT PHY_DEVICE *PhyDev ) { - UINT32 Data; - INTN i; + EFI_STATUS Status; if (PhyDev->Connection == PHY_CONNECTION_SGMII) { /* Select page 0xff and update configuration registers according to @@ -321,34 +372,11 @@ MvPhyInit1512 ( if (!PcdGetBool (PcdPhyStartupAutoneg)) return EFI_SUCCESS; - Mdio->Read (Mdio, PhyDev->Addr, PhyDev->MdioIndex, MII_BMSR, &Data); - - if ((Data & BMSR_ANEGCAPABLE) && !(Data & BMSR_ANEGCOMPLETE)) { - - DEBUG((DEBUG_ERROR, "MvPhyDxe: Waiting for PHY auto negotiation... ")); - for (i = 0; !(Data & BMSR_ANEGCOMPLETE); i++) { - if (i > PHY_AUTONEGOTIATE_TIMEOUT) { - DEBUG((DEBUG_ERROR, "timeout\n")); - PhyDev->LinkUp = FALSE; - return EFI_TIMEOUT; - } - - gBS->Stall(1000); /* 1 ms */ - Mdio->Read (Mdio, PhyDev->Addr, PhyDev->MdioIndex, MII_BMSR, &Data); - } - PhyDev->LinkUp = TRUE; - DEBUG((DEBUG_INFO, "MvPhyDxe: link up\n")); - } else { - Mdio->Read (Mdio, PhyDev->Addr, PhyDev->MdioIndex, MII_BMSR, &Data); - - if (Data & BMSR_LSTATUS) { - PhyDev->LinkUp = TRUE; - DEBUG((DEBUG_INFO, "MvPhyDxe: link up\n")); - } else { - PhyDev->LinkUp = FALSE; - DEBUG((DEBUG_INFO, "MvPhyDxe: link down\n")); - } + Status = MvPhyConfigureAutonegotiation (PhyDev); + if (EFI_ERROR (Status)) { + return Status; } + MvPhyParseStatus (PhyDev); return EFI_SUCCESS; -- 2.7.4