Hi, On Thu, May 2, 2024 at 6:42 AM Linus Walleij <linus.walleij@xxxxxxxxxx> wrote: > > On Wed, May 1, 2024 at 5:43 PM Douglas Anderson <dianders@xxxxxxxxxxxx> wrote: > > > Consensus on the mailing lists is that panels shouldn't use a table of > > init commands but should instead use init functions. With the recently > > introduced mipi_dsi_dcs_write_seq_multi() this is not only clean/easy > > but also saves space. Measuring before/after this change: > > > > $ scripts/bloat-o-meter \ > > .../before/panel-boe-tv101wum-nl6.ko \ > > .../after/panel-boe-tv101wum-nl6.ko > > add/remove: 14/8 grow/shrink: 0/1 up/down: 27062/-31433 (-4371) > > Function old new delta > > inx_hj110iz_init - 7040 +7040 > > boe_tv110c9m_init - 6440 +6440 > > boe_init - 5916 +5916 > > starry_qfh032011_53g_init - 1944 +1944 > > starry_himax83102_j02_init - 1228 +1228 > > inx_hj110iz_init.d - 1040 +1040 > > boe_tv110c9m_init.d - 982 +982 > > auo_b101uan08_3_init - 944 +944 > > boe_init.d - 580 +580 > > starry_himax83102_j02_init.d - 512 +512 > > starry_qfh032011_53g_init.d - 180 +180 > > auo_kd101n80_45na_init - 172 +172 > > auo_b101uan08_3_init.d - 82 +82 > > auo_kd101n80_45na_init.d - 2 +2 > > auo_kd101n80_45na_init_cmd 144 - -144 > > boe_panel_prepare 592 440 -152 > > auo_b101uan08_3_init_cmd 1056 - -1056 > > starry_himax83102_j02_init_cmd 1392 - -1392 > > starry_qfh032011_53g_init_cmd 2256 - -2256 > > .compoundliteral 3393 - -3393 > > boe_init_cmd 7008 - -7008 > > boe_tv110c9m_init_cmd 7656 - -7656 > > inx_hj110iz_init_cmd 8376 - -8376 > > Total: Before=37297, After=32926, chg -11.72% > > > > Let's do the conversion. > > > > Since we're touching all the tables, let's also convert hex numbers to > > lower case as per kernel conventions. > > > > Signed-off-by: Douglas Anderson <dianders@xxxxxxxxxxxx> > > Wow that's a *VERY* nice patch. > Reviewed-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Thanks! > The metrics surprisingly reports more compact object code, > I wasn't expecting this, but it's nice. I think it has to do with the design of the table structure in this driver. Each "struct panel_init_cmd" was 24-bytes big. That means that to represent one 1-byte sequence we needed 24 bytes + 1 bytes cmd + 1 byte seq = 26 bytes. Lots of overhead for 2 bytes of content. The old table stuff could certainly have been made _a lot_ less overhead, but since it wasn't then it also wasn't hard to be better than it with it via the new style. FWIW, it also wouldn't be terribly hard to save a tiny bit more space with the new style if we wanted. It gets a little ugly, but it doesn't affect callers of the macro. Specifically, if you assume people aren't going to pass more than 256-byte sequences, you could stuff the length in the data: #define mipi_dsi_dcs_write_seq_multi(ctx, cmd, seq...) \ - do { \ - static const u8 d[] = { cmd, seq }; \ - mipi_dsi_dcs_write_buffer_multi(ctx, d, ARRAY_SIZE(d)); \ + do { \ + static const u8 d[] = { \ + (sizeof((u8[]){seq})/sizeof(u8)) + 1, cmd, seq }; \ + mipi_dsi_dcs_write_buffer_multi(ctx, d); \ } while (0) ...and then snag the length out of the first byte of the data in mipi_dsi_dcs_write_buffer_multi(). If you do this, you actually get another 10% space savings on this driver. :-P add/remove: 0/0 grow/shrink: 7/7 up/down: 1140/-4560 (-3420) Function old new delta inx_hj110iz_init.d 1040 1385 +345 boe_tv110c9m_init.d 982 1297 +315 boe_init.d 580 870 +290 starry_qfh032011_53g_init.d 180 271 +91 starry_himax83102_j02_init.d 512 568 +56 auo_b101uan08_3_init.d 82 123 +41 auo_kd101n80_45na_init.d 2 4 +2 auo_kd101n80_45na_init 172 164 -8 auo_b101uan08_3_init 944 780 -164 starry_himax83102_j02_init 1228 1004 -224 starry_qfh032011_53g_init 1944 1580 -364 boe_init 5916 4756 -1160 boe_tv110c9m_init 6440 5180 -1260 inx_hj110iz_init 7040 5660 -1380 Total: Before=32906, After=29486, chg -10.39% I feel like people would balk at that, though... -Doug