<p>You-Cheng Syu has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/c/coreboot/+/30328">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mediatek/mt8183: Reduce compiled code size of SPI related code.<br><br>Refactor function mtk_spi_set_gpio_pinmux to reduce compiled code size.<br>This change can save us about 552 bytes (before compression).<br><br>Idea from Julius's comment in https://review.coreboot.org/c/coreboot/+/27498/4<br><br>BRANCH=none<br>BUG=b:120588396<br>TEST=manually boot into kernel<br><br>Change-Id: I93bc88c535b6a2ff94e85f247cf2d51f60b9b29c<br>Signed-off-by: You-Cheng Syu <youcheng@google.com><br>---<br>M src/soc/mediatek/mt8183/spi.c<br>1 file changed, 64 insertions(+), 62 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/28/30328/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/soc/mediatek/mt8183/spi.c b/src/soc/mediatek/mt8183/spi.c</span><br><span>index 0088d46..c85221c 100644</span><br><span>--- a/src/soc/mediatek/mt8183/spi.c</span><br><span>+++ b/src/soc/mediatek/mt8183/spi.c</span><br><span>@@ -42,69 +42,71 @@</span><br><span>         }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void mtk_spi_set_gpio_pinmux(unsigned int bus,</span><br><span style="color: hsl(0, 100%, 40%);">-                            enum spi_pad_mask pad_select)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     switch (bus) {</span><br><span style="color: hsl(0, 100%, 40%);">-  case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-         if (pad_select == SPI_PAD0_MASK) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gpio_set_mode(GPIO(SPI_MI), PAD_SPI_MI_FUNC_SPI0_MI);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(SPI_CSB), PAD_SPI_CSB_FUNC_SPI0_CSB);</span><br><span style="color: hsl(0, 100%, 40%);">-                        gpio_set_mode(GPIO(SPI_MO), PAD_SPI_MO_FUNC_SPI0_MO);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(SPI_CLK), PAD_SPI_CLK_FUNC_SPI0_CLK);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-         if (pad_select == SPI_PAD0_MASK) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gpio_set_mode(GPIO(SPI1_MI),</span><br><span style="color: hsl(0, 100%, 40%);">-                                    PAD_SPI1_MI_FUNC_SPI1_A_MI);</span><br><span style="color: hsl(0, 100%, 40%);">-                    gpio_set_mode(GPIO(SPI1_CSB),</span><br><span style="color: hsl(0, 100%, 40%);">-                                   PAD_SPI1_CSB_FUNC_SPI1_A_CSB);</span><br><span style="color: hsl(0, 100%, 40%);">-                  gpio_set_mode(GPIO(SPI1_MO),</span><br><span style="color: hsl(0, 100%, 40%);">-                                    PAD_SPI1_MO_FUNC_SPI1_A_MO);</span><br><span style="color: hsl(0, 100%, 40%);">-                    gpio_set_mode(GPIO(SPI1_CLK),</span><br><span style="color: hsl(0, 100%, 40%);">-                                   PAD_SPI1_CLK_FUNC_SPI1_A_CLK);</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-               if (pad_select == SPI_PAD1_MASK) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gpio_set_mode(GPIO(EINT7), PAD_EINT7_FUNC_SPI1_B_MI);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(EINT8), PAD_EINT8_FUNC_SPI1_B_CSB);</span><br><span style="color: hsl(0, 100%, 40%);">-                  gpio_set_mode(GPIO(EINT9), PAD_EINT9_FUNC_SPI1_B_MO);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(EINT10), PAD_EINT10_FUNC_SPI1_B_CLK);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-         if (pad_select == SPI_PAD0_MASK) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gpio_set_mode(GPIO(KPCOL1), PAD_KPCOL1_FUNC_SPI2_MI);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(EINT0), PAD_EINT0_FUNC_SPI2_CSB);</span><br><span style="color: hsl(0, 100%, 40%);">-                    gpio_set_mode(GPIO(EINT1), PAD_EINT1_FUNC_SPI2_MO);</span><br><span style="color: hsl(0, 100%, 40%);">-                     gpio_set_mode(GPIO(EINT2), PAD_EINT2_FUNC_SPI2_CLK);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-         if (pad_select == SPI_PAD0_MASK) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gpio_set_mode(GPIO(DPI_D8), PAD_DPI_D8_FUNC_SPI3_MI);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(DPI_D9), PAD_DPI_D9_FUNC_SPI3_CSB);</span><br><span style="color: hsl(0, 100%, 40%);">-                  gpio_set_mode(GPIO(DPI_D10), PAD_DPI_D10_FUNC_SPI3_MO);</span><br><span style="color: hsl(0, 100%, 40%);">-                 gpio_set_mode(GPIO(DPI_D11), PAD_DPI_D11_FUNC_SPI3_CLK);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-         if (pad_select == SPI_PAD0_MASK) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gpio_set_mode(GPIO(DPI_D4), PAD_DPI_D4_FUNC_SPI4_MI);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(DPI_D5), PAD_DPI_D5_FUNC_SPI4_CSB);</span><br><span style="color: hsl(0, 100%, 40%);">-                  gpio_set_mode(GPIO(DPI_D6), PAD_DPI_D6_FUNC_SPI4_MO);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(DPI_D7), PAD_DPI_D7_FUNC_SPI4_CLK);</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-         if (pad_select == SPI_PAD0_MASK) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gpio_set_mode(GPIO(DPI_D0), PAD_DPI_D0_FUNC_SPI5_MI);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(DPI_D1), PAD_DPI_D1_FUNC_SPI5_CSB);</span><br><span style="color: hsl(0, 100%, 40%);">-                  gpio_set_mode(GPIO(DPI_D2), PAD_DPI_D2_FUNC_SPI5_MO);</span><br><span style="color: hsl(0, 100%, 40%);">-                   gpio_set_mode(GPIO(DPI_D3), PAD_DPI_D3_FUNC_SPI5_CLK);</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(120, 100%, 40%);">+struct pad_func {</span><br><span style="color: hsl(120, 100%, 40%);">+     u8 pin_id;</span><br><span style="color: hsl(120, 100%, 40%);">+    u8 func;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define PAD_FUNC(name, func) {PAD_##name##_ID, PAD_##name##_FUNC_##func}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct pad_func pad0_funcs[SPI_BUS_NUMBER][4] = {</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             PAD_FUNC(SPI_MI, SPI0_MI),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(SPI_CSB, SPI0_CSB),</span><br><span style="color: hsl(120, 100%, 40%);">+          PAD_FUNC(SPI_MO, SPI0_MO),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(SPI_CLK, SPI0_CLK),</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             PAD_FUNC(SPI1_MI, SPI1_A_MI),</span><br><span style="color: hsl(120, 100%, 40%);">+         PAD_FUNC(SPI1_CSB, SPI1_A_CSB),</span><br><span style="color: hsl(120, 100%, 40%);">+               PAD_FUNC(SPI1_MO, SPI1_A_MO),</span><br><span style="color: hsl(120, 100%, 40%);">+         PAD_FUNC(SPI1_CLK, SPI1_A_CLK),</span><br><span style="color: hsl(120, 100%, 40%);">+       },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             PAD_FUNC(KPCOL1, SPI2_MI),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(EINT0, SPI2_CSB),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(EINT1, SPI2_MO),</span><br><span style="color: hsl(120, 100%, 40%);">+             PAD_FUNC(EINT2, SPI2_CLK),</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             PAD_FUNC(DPI_D8, SPI3_MI),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(DPI_D9, SPI3_CSB),</span><br><span style="color: hsl(120, 100%, 40%);">+           PAD_FUNC(DPI_D10, SPI3_MO),</span><br><span style="color: hsl(120, 100%, 40%);">+           PAD_FUNC(DPI_D11, SPI3_CLK),</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             PAD_FUNC(DPI_D4, SPI4_MI),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(DPI_D5, SPI4_CSB),</span><br><span style="color: hsl(120, 100%, 40%);">+           PAD_FUNC(DPI_D6, SPI4_MO),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(DPI_D7, SPI4_CLK),</span><br><span style="color: hsl(120, 100%, 40%);">+   },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             PAD_FUNC(DPI_D0, SPI5_MI),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(DPI_D1, SPI5_CSB),</span><br><span style="color: hsl(120, 100%, 40%);">+           PAD_FUNC(DPI_D2, SPI5_MO),</span><br><span style="color: hsl(120, 100%, 40%);">+            PAD_FUNC(DPI_D3, SPI5_CLK),</span><br><span>  }</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct pad_func bus1_pad1_funcs[4] = {</span><br><span style="color: hsl(120, 100%, 40%);">+  PAD_FUNC(EINT7, SPI1_B_MI),</span><br><span style="color: hsl(120, 100%, 40%);">+   PAD_FUNC(EINT8, SPI1_B_CSB),</span><br><span style="color: hsl(120, 100%, 40%);">+  PAD_FUNC(EINT9, SPI1_B_MO),</span><br><span style="color: hsl(120, 100%, 40%);">+   PAD_FUNC(EINT10, SPI1_B_CLK),</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void mtk_spi_set_gpio_pinmux(unsigned int bus, enum spi_pad_mask pad_select)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  assert(bus < SPI_BUS_NUMBER);</span><br><span style="color: hsl(120, 100%, 40%);">+      const struct pad_func *ptr;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pad_select == SPI_PAD0_MASK) {</span><br><span style="color: hsl(120, 100%, 40%);">+            ptr = pad0_funcs[bus];</span><br><span style="color: hsl(120, 100%, 40%);">+        } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              assert(bus == 1 && pad_select == SPI_PAD1_MASK);</span><br><span style="color: hsl(120, 100%, 40%);">+              ptr = bus1_pad1_funcs;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     for (int i = 0; i < 4; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+                gpio_set_mode((gpio_t){.id = ptr[i].pin_id}, ptr[i].func);</span><br><span> }</span><br><span> </span><br><span> void mtk_spi_set_timing(struct mtk_spi_regs *regs, u32 sck_ticks, u32 cs_ticks)</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/c/coreboot/+/30328">change 30328</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/c/coreboot/+/30328"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I93bc88c535b6a2ff94e85f247cf2d51f60b9b29c </div>
<div style="display:none"> Gerrit-Change-Number: 30328 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: You-Cheng Syu <youcheng@google.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>