[PATCH v2 1/8] pwm: mediatek: Simplify representation of channel offsets

Uwe Kleine-König u.kleine-koenig at baylibre.com
Mon Aug 4 03:30:45 PDT 2025


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-arm-kernel/attachments/20250804/66065a8b/attachment.sig>


More information about the linux-arm-kernel mailing list