All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Golle <daniel@makrotopia.org>
To: Rasmus Villemoes <ravi@prevas.dk>
Cc: netdev@vger.kernel.org, "Benny (Ying-Tsan) Weng" <yweng@maxlinear.com>
Subject: Re: question on gswip_pce_table_entry_write() in lantiq_gswip_common.c
Date: Tue, 23 Dec 2025 11:03:43 +0000	[thread overview]
Message-ID: <aUp3D45Ka-rYL44u@makrotopia.org> (raw)
In-Reply-To: <87sed1shwl.fsf@prevas.dk>

Hi Rasmus,

On Tue, Dec 23, 2025 at 09:48:26AM +0100, Rasmus Villemoes wrote:
> Hi
> 
> Reading gswip_pce_table_entry_write() in lantiq_gswip_common.c, I'm
> wondering if it really has to do all that it does. In particular, it
> seems to write the same value to (a subset of) the GSWIP_PCE_TBL_CTRL
> reg twice, then it reads the reg value back, manually tweaks the
> remaining bits appropriately and folds in the "start access bit", then
> writes the whole value to the register.

My understanding of GSWIP_PCE_TBL_CTRL is that this register is used to
set the table and address/index to used for subsequent access with the
GSWIP_PCE_TBL_* registers.

It also looks weird to me, but I didn't have much time to try to
optimize it, the sequence of register access is present since the
initial support for VLAN unaware bridge offloading

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8206e0ce96b33e6513615de9151e794bbc9f3786

> 
> Why couldn't that be done by reading the register, do all the masking
> and bit setting, then doing a single write of the whole thing?

I agree, and it looks like it could be improved in this way, the only
"special" bit there is probably GSWIP_PCE_TBL_CTRL_BAS.

> 
> The data sheet doesn't say anything about this complicated scheme being
> necessary.
> 
> Another thing: I'd really appreciate it if someone could point me to
> documentation on the various tables, i.e. what does val[2] of an entry
> in GSWIP_TABLE_VLAN_MAPPING actually mean? I can see that BIT(port) is
> either set or cleared from it depending on 'untagged', so I can
> sort-of-guess, but I'd prefer to have it documented so I don't have to
> guess. AFAICT, none of the documents I can download from MaxLinear spell
> this out in any way.

I also don't have any for-human documentation for the switch table entry
formats and registers. I doubt any documentation of that actually
exists.

Most of the switching engine itself is covered in

GSW12x_GSW14x_Register_Description_PR_Rev1.1.pdf

but also that doesn't describe the individual tables. My reference for
that is the old/proprietary SW-API driver which describes some (but not
all) of the table entry formats in code at least...

You find the SW-API as part of various GPL leaks, all files there are
under a dual BSD/GPLv2 license, so I can also share my (latest/official)
version of that driver with you in case you don't have it.


Cheers


Daniel

  reply	other threads:[~2025-12-23 11:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-23  8:48 question on gswip_pce_table_entry_write() in lantiq_gswip_common.c Rasmus Villemoes
2025-12-23 11:03 ` Daniel Golle [this message]
2025-12-23 11:45   ` Rasmus Villemoes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aUp3D45Ka-rYL44u@makrotopia.org \
    --to=daniel@makrotopia.org \
    --cc=netdev@vger.kernel.org \
    --cc=ravi@prevas.dk \
    --cc=yweng@maxlinear.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.