Commit 47da6aa7 authored by Chunfeng Yun's avatar Chunfeng Yun Committed by Vinod Koul
Browse files

phy: phy-bcm-ns-usb3: convert to readl_poll_timeout_atomic()

parent 37abc181
Loading
Loading
Loading
Loading
+9 −13
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#include <linux/bcma/bcma.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/iopoll.h>
#include <linux/mdio.h>
#include <linux/module.h>
#include <linux/of_address.h>
@@ -258,29 +259,24 @@ static struct mdio_driver bcm_ns_usb3_mdio_driver = {
 **************************************************/

static int bcm_ns_usb3_wait_reg(struct bcm_ns_usb3 *usb3, void __iomem *addr,
				u32 mask, u32 value, unsigned long timeout)
				u32 mask, u32 value, int usec)
{
	unsigned long deadline = jiffies + timeout;
	u32 val;
	int ret;

	do {
		val = readl(addr);
		if ((val & mask) == value)
			return 0;
		cpu_relax();
		udelay(10);
	} while (!time_after_eq(jiffies, deadline));

	ret = readl_poll_timeout_atomic(addr, val, ((val & mask) == value),
					10, usec);
	if (ret)
		dev_err(usb3->dev, "Timeout waiting for register %p\n", addr);

	return -EBUSY;
	return ret;
}

static inline int bcm_ns_usb3_mii_mng_wait_idle(struct bcm_ns_usb3 *usb3)
{
	return bcm_ns_usb3_wait_reg(usb3, usb3->ccb_mii + BCMA_CCB_MII_MNG_CTL,
				    0x0100, 0x0000,
				    usecs_to_jiffies(BCM_NS_USB3_MII_MNG_TIMEOUT_US));
				    BCM_NS_USB3_MII_MNG_TIMEOUT_US);
}

static int bcm_ns_usb3_platform_phy_write(struct bcm_ns_usb3 *usb3, u16 reg,