Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a3bf5fa7 authored by Mark Einon's avatar Mark Einon Committed by Greg Kroah-Hartman
Browse files

staging: et131x: Introduce et1310_in_phy_coma() call



In several places in the code, the pm_csr register is read and the PHY_SW_COMA bit checked.

Move this check into its own small function to make the code more readable.

Signed-off-by: default avatarMark Einon <mark.einon@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 53c3ee0d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -612,7 +612,7 @@ void et1310_setup_device_for_multicast(struct et131x_adapter *adapter)

	/* Write out the new hash to the device */
	pm_csr = readl(&adapter->regs->global.pm_csr);
	if ((pm_csr & ET_PM_PHY_SW_COMA) == 0) {
	if (!et1310_in_phy_coma(adapter)) {
		writel(hash1, &rxmac->multi_hash1);
		writel(hash2, &rxmac->multi_hash2);
		writel(hash3, &rxmac->multi_hash3);
@@ -653,7 +653,7 @@ void et1310_setup_device_for_unicast(struct et131x_adapter *adapter)
		   adapter->addr[5];

	pm_csr = readl(&adapter->regs->global.pm_csr);
	if ((pm_csr & ET_PM_PHY_SW_COMA) == 0) {
	if (!et1310_in_phy_coma(adapter)) {
		writel(uni_pf1, &rxmac->uni_pf_addr1);
		writel(uni_pf2, &rxmac->uni_pf_addr2);
		writel(uni_pf3, &rxmac->uni_pf_addr3);
+15 −0
Original line number Diff line number Diff line
@@ -86,6 +86,21 @@
#include "et131x_adapter.h"
#include "et131x.h"

/**
 * et1310_in_phy_coma - check if the device is in phy coma
 * @adapter: pointer to our adapter structure
 *
 * Returns 0 if the device is not in phy coma, 1 if it is in phy coma
 */
int et1310_in_phy_coma(struct et131x_adapter *adapter)
{
	u32 pmcsr;

	pmcsr = readl(&adapter->regs->global.pm_csr);

	return ET_PM_PHY_SW_COMA & pmcsr ? 1 : 0;
}

/**
 * et1310_enable_phy_coma - called when network cable is unplugged
 * @adapter: pointer to our adapter structure
+1 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ void et131x_enable_txrx(struct net_device *netdev);
void et131x_disable_txrx(struct net_device *netdev);

/* et1310_pm.c */
int et1310_in_phy_coma(struct et131x_adapter *adapter);
void et1310_enable_phy_coma(struct et131x_adapter *adapter);
void et1310_disable_phy_coma(struct et131x_adapter *adapter);

+9 −19
Original line number Diff line number Diff line
@@ -239,15 +239,11 @@ static int et131x_pci_init(struct et131x_adapter *adapter,
void et131x_error_timer_handler(unsigned long data)
{
	struct et131x_adapter *adapter = (struct et131x_adapter *) data;
	u32 pm_csr;

	pm_csr = readl(&adapter->regs->global.pm_csr);

	if ((pm_csr & ET_PM_PHY_SW_COMA) == 0)
	if (!et1310_in_phy_coma(adapter))
		et1310_update_macstat_host_counters(adapter);
	else
		dev_err(&adapter->pdev->dev,
		    "No interrupts, in PHY coma, pm_csr = 0x%x\n", pm_csr);
		dev_err(&adapter->pdev->dev, "No interrupts, in PHY coma\n");

	if (!(adapter->bmsr & BMSR_LSTATUS) &&
	    adapter->boot_coma < 11) {
@@ -256,7 +252,7 @@ void et131x_error_timer_handler(unsigned long data)

	if (adapter->boot_coma == 10) {
		if (!(adapter->bmsr & BMSR_LSTATUS)) {
			if ((pm_csr & ET_PM_PHY_SW_COMA) == 0) {
			if (!et1310_in_phy_coma(adapter)) {
				/* NOTE - This was originally a 'sync with
				 *  interrupt'. How to do that under Linux?
				 */
@@ -443,9 +439,6 @@ static void et131x_adjust_link(struct net_device *netdev)
{
	struct et131x_adapter *adapter = netdev_priv(netdev);
	struct  phy_device *phydev = adapter->phydev;
	struct address_map __iomem *iomem = adapter->regs;

	u32 pm_csr;

	if (netif_carrier_ok(netdev)) {
		adapter->boot_coma = 20;
@@ -488,16 +481,13 @@ static void et131x_adjust_link(struct net_device *netdev)
	}

	if (phydev->link != adapter->link) {
		/* If we are in coma mode, we need to disable it. */
		pm_csr = readl(&iomem->global.pm_csr);
		if (pm_csr & ET_PM_PHY_SW_COMA) {
		/*
		 * Check to see if we are in coma mode and if
		 * so, disable it because we will not be able
		 * to read PHY values until we are out.
		 */
		if (et1310_in_phy_coma(adapter))
			et1310_disable_phy_coma(adapter);
		}

		if (phydev->link) {
			adapter->boot_coma = 20;
+1 −1
Original line number Diff line number Diff line
@@ -304,7 +304,7 @@ void et131x_isr_handler(struct work_struct *work)
				 * bp xon/xoff)
				 */
				pm_csr = readl(&iomem->global.pm_csr);
				if ((pm_csr & ET_PM_PHY_SW_COMA) == 0)
				if (!et1310_in_phy_coma(adapter))
					writel(3, &iomem->txmac.bp_ctrl);
			}
		}