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

Commit 1c1eb580 authored by Marek Vasut's avatar Marek Vasut Committed by David S. Miller
Browse files

net: dsa: microchip: Replace ad-hoc polling with regmap



Regmap provides polling function to poll for bits in a register,
use in instead of reimplementing it.

Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Tristram Ha <Tristram.Ha@microchip.com>
Cc: Woojung Huh <Woojung.Huh@microchip.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d7ee2878
Loading
Loading
Loading
Loading
+5 −9
Original line number Diff line number Diff line
@@ -263,12 +263,8 @@ static int ksz9477_reset_switch(struct ksz_device *dev)
static void ksz9477_r_mib_cnt(struct ksz_device *dev, int port, u16 addr,
			      u64 *cnt)
{
	struct ksz_poll_ctx ctx = {
		.dev = dev,
		.port = port,
		.offset = REG_PORT_MIB_CTRL_STAT__4,
	};
	struct ksz_port *p = &dev->ports[port];
	unsigned int val;
	u32 data;
	int ret;

@@ -278,11 +274,11 @@ static void ksz9477_r_mib_cnt(struct ksz_device *dev, int port, u16 addr,
	data |= (addr << MIB_COUNTER_INDEX_S);
	ksz_pwrite32(dev, port, REG_PORT_MIB_CTRL_STAT__4, data);

	ret = readx_poll_timeout(ksz_pread32_poll, &ctx, data,
				 !(data & MIB_COUNTER_READ), 10, 1000);

	ret = regmap_read_poll_timeout(dev->regmap[2],
			PORT_CTRL_ADDR(port, REG_PORT_MIB_CTRL_STAT__4),
			val, !(val & MIB_COUNTER_READ), 10, 1000);
	/* failed to read MIB. get out of loop */
	if (ret < 0) {
	if (ret) {
		dev_dbg(dev->dev, "Failed to get MIB\n");
		return;
	}
+0 −14
Original line number Diff line number Diff line
@@ -119,20 +119,6 @@ static inline void ksz_pwrite32(struct ksz_device *dev, int port, int offset,
	ksz_write32(dev, dev->dev_ops->get_port_addr(port, offset), data);
}

struct ksz_poll_ctx {
	struct ksz_device *dev;
	int port;
	int offset;
};

static inline u32 ksz_pread32_poll(struct ksz_poll_ctx *ctx)
{
	u32 data;

	ksz_pread32(ctx->dev, ctx->port, ctx->offset, &data);
	return data;
}

/* Regmap tables generation */
#define KSZ_SPI_OP_RD		3
#define KSZ_SPI_OP_WR		2