Hallo AngeloGioacchino,
On Mon, Aug 04, 2025 at 10:50:01AM +0200, AngeloGioacchino Del Regno wrote:
> Il 25/07/25 17:45, Uwe Kleine-König ha scritto:
> > The general register layout contains some per-chip registers starting at
> > offset 0 and then at a higher address there are n nearly identical and
> > equidistant blocks for the registers of the n channels.
> >
> > This allows to represent the offsets of per-channel registers as $base +
> > i * $width instead of listing all (or too many) offsets explicitly in an
> > array. So for a small additional effort in pwm_mediatek_writel() the
> > three arrays with the channel offsets can be dropped.
> >
> > The size changes according to bloat-o-meter are:
> >
> > add/remove: 0/3 grow/shrink: 1/0 up/down: 12/-96 (-84)
> > Function old new delta
> > pwm_mediatek_apply 696 708 +12
> > mtk_pwm_reg_offset_v3 32 - -32
> > mtk_pwm_reg_offset_v2 32 - -32
> > mtk_pwm_reg_offset_v1 32 - -32
> > Total: Before=5347, After=5263, chg -1.57%
> >
> > Signed-off-by: Uwe Kleine-König <u.kleine-koenig at baylibre.com>
>
> What if we do, instead...
>
> struct pwm_mediatek_regs {
> u16 pwm_ck_26m_sel_reg;
> u16 chan_base;
> u16 chan_width;
> };
>
> struct pwm_mediatek_regs pwm_v1_reg_data = {
> .pwm_ck_26m_sel_reg = PWM_CK_26M_SEL,
> .chan_base = 0x10,
> .chan_width = 0x40,
> };
>
> static const struct pwm_mediatek_of_data mt7986_pwm_data = {
> ....
> .reg_data = &pwm_v1_reg_data,
> };
>
> ...that should reduce the bloat even more :-)
Having the three u16 directly in pwm_mediatek_of_data is cheaper because
.reg_data is a pointer and so 64 bits wide (on arm64) and so bigger than
3xu16. Also having the data directly in pwm_mediatek_of_data saves one
indirection and so it should also be slightly faster.
Best regards
Uwe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20250804/66065a8b/attachment.sig>