Commit 1716be6d authored by Jonas Gorski's avatar Jonas Gorski Committed by Jakub Kicinski
Browse files

net: dsa: b53: provide accessors for accessing ARL_SRCH_CTL



In order to more easily support more formats, move accessing
ARL_SRCH_CTL into helper functions to contain the differences.

Signed-off-by: default avatarJonas Gorski <jonas.gorski@gmail.com>
Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
Link: https://patch.msgid.link/20251107080749.26936-5-jonas.gorski@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent bf6e9d2a
Loading
Loading
Loading
Loading
+24 −13
Original line number Diff line number Diff line
@@ -2033,18 +2033,37 @@ int b53_fdb_del(struct dsa_switch *ds, int port,
}
EXPORT_SYMBOL(b53_fdb_del);

static int b53_arl_search_wait(struct b53_device *dev)
static void b53_read_arl_srch_ctl(struct b53_device *dev, u8 *val)
{
	unsigned int timeout = 1000;
	u8 reg, offset;
	u8 offset;

	if (is5325(dev) || is5365(dev))
		offset = B53_ARL_SRCH_CTL_25;
	else
		offset = B53_ARL_SRCH_CTL;

	b53_read8(dev, B53_ARLIO_PAGE, offset, val);
}

static void b53_write_arl_srch_ctl(struct b53_device *dev, u8 val)
{
	u8 offset;

	if (is5325(dev) || is5365(dev))
		offset = B53_ARL_SRCH_CTL_25;
	else
		offset = B53_ARL_SRCH_CTL;

	b53_write8(dev, B53_ARLIO_PAGE, offset, val);
}

static int b53_arl_search_wait(struct b53_device *dev)
{
	unsigned int timeout = 1000;
	u8 reg;

	do {
		b53_read8(dev, B53_ARLIO_PAGE, offset, &reg);
		b53_read_arl_srch_ctl(dev, &reg);
		if (!(reg & ARL_SRCH_STDN))
			return -ENOENT;

@@ -2099,23 +2118,15 @@ int b53_fdb_dump(struct dsa_switch *ds, int port,
	unsigned int count = 0, results_per_hit = 1;
	struct b53_device *priv = ds->priv;
	struct b53_arl_entry results[2];
	u8 offset;
	int ret;
	u8 reg;

	if (priv->num_arl_bins > 2)
		results_per_hit = 2;

	mutex_lock(&priv->arl_mutex);

	if (is5325(priv) || is5365(priv))
		offset = B53_ARL_SRCH_CTL_25;
	else
		offset = B53_ARL_SRCH_CTL;

	/* Start search operation */
	reg = ARL_SRCH_STDN;
	b53_write8(priv, B53_ARLIO_PAGE, offset, reg);
	b53_write_arl_srch_ctl(priv, ARL_SRCH_STDN);

	do {
		ret = b53_arl_search_wait(priv);