<p>Richard Spiegel has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/21904">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">soc/amd/stoneyridge/lpc.c: Break lpc_enable_childrens_resources<br><br>The code has 8 layers of indentation. Break is needed as preparation to<br>replace magic numbers with literals, which would cause several lines to<br>become larger than 80 characters.<br><br>Change-Id: I265cfac2049733481faf8a6e5b02e34aadae11f5<br>Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com><br>---<br>M src/soc/amd/stoneyridge/lpc.c<br>1 file changed, 143 insertions(+), 113 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/04/21904/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/src/soc/amd/stoneyridge/lpc.c b/src/soc/amd/stoneyridge/lpc.c<br>index 7886433..e2db90f 100644<br>--- a/src/soc/amd/stoneyridge/lpc.c<br>+++ b/src/soc/amd/stoneyridge/lpc.c<br>@@ -152,6 +152,142 @@<br>  pci_dev_set_resources(dev);<br> }<br> <br>+/*<br>+ * Originally part of lpc_enable_childrens_resources. Separated into<br>+ * independent function, to reduce the indentation of original function.<br>+ * Now this function sets the resource for a particular child while<br>+ * lpc_enable_childrens_resources finds all children and call this<br>+ * function for each child found.<br>+ */<br>+static void set_lpc_resource(device_t child,<br>+                                int *variable_num,<br>+                           u16 *reg_var,<br>+                                u32 *reg,<br>+                            u32 *reg_x,<br>+                          u16 reg_size,<br>+                                u8  *wiosize)<br>+{<br>+    struct resource *res;<br>+        u32 base, end;  /*  don't need long long */<br>+      u32 rsize = 0, set = 0, set_x = 0;<br>+   u16 var_num;<br>+<br>+      var_num = *variable_num;<br>+     for (res = child->resource_list ; res ; res = res->next) {<br>+             if (!(res->flags & IORESOURCE_IO))<br>+                    continue;<br>+            base = res->base;<br>+         end = resource_end(res);<br>+             /* find a resource size */<br>+           printk(BIOS_DEBUG,<br>+                "Southbridge LPC decode:%s, base=0x%08x, end=0x%08x\n",<br>+                    dev_path(child), base, end);<br>+            switch (base) {<br>+              case 0x60:      /*  KB */<br>+            case 0x64:      /*  MS */<br>+                    set |= (1 << 29);<br>+                      rsize = 1;<br>+                   break;<br>+               case 0x3f8:     /*  COM1 */<br>+                  set |= (1 << 6);<br>+                       rsize = 8;<br>+                   break;<br>+               case 0x2f8:     /*  COM2 */<br>+                  set |= (1 << 7);<br>+                       rsize = 8;<br>+                   break;<br>+               case 0x378:     /*  Parallel 1 */<br>+                    set |= (1 << 0);<br>+                       set |= (1 << 1); /* + 0x778 for ECP */<br>+                 rsize = 8;<br>+                   break;<br>+               case 0x3f0:     /*  FD0 */<br>+                   set |= (1 << 26);<br>+                      rsize = 8;<br>+                   break;<br>+               case 0x220:     /*  0x220 - 0x227 */<br>+                 set |= (1 << 8);<br>+                       rsize = 8;<br>+                   break;<br>+               case 0x228:     /*  0x228 - 0x22f */<br>+                 set |= (1 << 9);<br>+                       rsize = 8;<br>+                   break;<br>+               case 0x238:     /*  0x238 - 0x23f */<br>+                 set |= (1 << 10);<br>+                      rsize = 8;<br>+                   break;<br>+               case 0x300:     /*  0x300 - 0x301 */<br>+                 set |= (1 << 18);<br>+                      rsize = 2;<br>+                   break;<br>+               case 0x400:<br>+                  set_x |= (1 << 16);<br>+                    rsize = 0x40;<br>+                        break;<br>+               case 0x480:<br>+                  set_x |= (1 << 17);<br>+                    rsize = 0x40;<br>+                        break;<br>+               case 0x500:<br>+                  set_x |= (1 << 18);<br>+                    rsize = 0x40;<br>+                        break;<br>+               case 0x580:<br>+                  set_x |= (1 << 19);<br>+                    rsize = 0x40;<br>+                        break;<br>+               case 0x4700:<br>+                 set_x |= (1 << 22);<br>+                    rsize = 0xc;<br>+                 break;<br>+               case 0xfd60:<br>+                 set_x |= (1 << 23);<br>+                    rsize = 16;<br>+                  break;<br>+               default:<br>+                     rsize = 0;<br>+                   /* try AGESA allocated region in region 0 */<br>+                 if ((var_num > 0) && ((base >= reg_var[0]) &&<br>+                      ((base + res->size) <= (reg_var[0] + reg_size))))<br>+                          rsize = reg_size;<br>+            }<br>+            /* check if region found and matches the enable */<br>+           if (res->size <= rsize) {<br>+                      *reg |= set;<br>+                 *reg_x |= set_x;<br>+             /* check if we can fit resource in variable range */<br>+         } else if ((var_num < 3) && ((res->size <= 16) ||<br>+                           (res->size == 512))) {<br>+                    /* use variable ranges if pre-defined do not match */<br>+                        switch (var_num) {<br>+                   case 0:<br>+                              *reg_x |= (1 << 2);<br>+                            if (res->size <= 16)<br>+                                   *wiosize |= (1 << 0);<br>+                          break;<br>+                       case 1:<br>+                              *reg_x |= (1 << 24);<br>+                           if (res->size <= 16)<br>+                                   *wiosize |= (1 << 2);<br>+                          break;<br>+                       case 2:<br>+                              *reg_x |= (1 << 25);<br>+                           if (res->size <= 16)<br>+                                   *wiosize |= (1 << 3);<br>+                          break;<br>+                       }<br>+                    reg_var[var_num++] =<br>+                     base & 0xffff;<br>+               } else {<br>+                     printk(BIOS_ERR, "cannot fit LPC decode region:");<br>+                 printk(BIOS_ERR, "%s, base = 0x%08x, end = 0x%08x\n",<br>+                              dev_path(child), base, end);<br>+         }<br>+    }<br>+    *variable_num = var_num;<br>+}<br>+<br> /**<br>  * @brief Enable resources for children devices<br>  *<br>@@ -205,119 +341,13 @@<br>               child = child->sibling) {<br>                     if (child->enabled<br>                             && (child->path.type == DEVICE_PATH_PNP)) {<br>-                           struct resource *res;<br>-                                for (res = child->resource_list ; res ; res = res->next) {<br>-                                     u32 base, end;  /*  don't need long long */<br>-                                      u32 rsize, set = 0, set_x = 0;<br>-                                       if (!(res->flags & IORESOURCE_IO))<br>-                                            continue;<br>-                                    base = res->base;<br>-                                 end = resource_end(res);<br>-                                     /* find a resource size */<br>-                                   printk(BIOS_DEBUG, "Southbridge LPC decode:%s, base=0x%08x, end=0x%08x\n",<br>-                                      dev_path(child), base, end);<br>-                                    switch (base) {<br>-                                      case 0x60:      /*  KB */<br>-                                    case 0x64:      /*  MS */<br>-                                            set |= (1 << 29);<br>-                                              rsize = 1;<br>-                                           break;<br>-                                       case 0x3f8:     /*  COM1 */<br>-                                          set |= (1 << 6);<br>-                                               rsize = 8;<br>-                                           break;<br>-                                       case 0x2f8:     /*  COM2 */<br>-                                          set |= (1 << 7);<br>-                                               rsize = 8;<br>-                                           break;<br>-                                       case 0x378:     /*  Parallel 1 */<br>-                                            set |= (1 << 0);<br>-                                               set |= (1 << 1); /* + 0x778 for ECP */<br>-                                         rsize = 8;<br>-                                           break;<br>-                                       case 0x3f0:     /*  FD0 */<br>-                                           set |= (1 << 26);<br>-                                              rsize = 8;<br>-                                           break;<br>-                                       case 0x220:     /*  0x220 - 0x227 */<br>-                                         set |= (1 << 8);<br>-                                               rsize = 8;<br>-                                           break;<br>-                                       case 0x228:     /*  0x228 - 0x22f */<br>-                                         set |= (1 << 9);<br>-                                               rsize = 8;<br>-                                           break;<br>-                                       case 0x238:     /*  0x238 - 0x23f */<br>-                                         set |= (1 << 10);<br>-                                              rsize = 8;<br>-                                           break;<br>-                                       case 0x300:     /*  0x300 - 0x301 */<br>-                                         set |= (1 << 18);<br>-                                              rsize = 2;<br>-                                           break;<br>-                                       case 0x400:<br>-                                          set_x |= (1 << 16);<br>-                                            rsize = 0x40;<br>-                                                break;<br>-                                       case 0x480:<br>-                                          set_x |= (1 << 17);<br>-                                            rsize = 0x40;<br>-                                                break;<br>-                                       case 0x500:<br>-                                          set_x |= (1 << 18);<br>-                                            rsize = 0x40;<br>-                                                break;<br>-                                       case 0x580:<br>-                                          set_x |= (1 << 19);<br>-                                            rsize = 0x40;<br>-                                                break;<br>-                                       case 0x4700:<br>-                                         set_x |= (1 << 22);<br>-                                            rsize = 0xc;<br>-                                         break;<br>-                                       case 0xfd60:<br>-                                         set_x |= (1 << 23);<br>-                                            rsize = 16;<br>-                                          break;<br>-                                       default:<br>-                                             rsize = 0;<br>-                                           /* try AGESA allocated region in region 0 */<br>-                                         if ((var_num > 0) && ((base >= reg_var[0]) &&<br>-                                                          ((base + res->size) <= (reg_var[0] + reg_size[0]))))<br>-                                                   rsize = reg_size[0];<br>-                                 }<br>-                                    /* check if region found and matches the enable */<br>-                                   if (res->size <= rsize) {<br>-                                              reg |= set;<br>-                                          reg_x |= set_x;<br>-                                      /* check if we can fit resource in variable range */<br>-                                 } else if ((var_num < 3) &&<br>-                                                   ((res->size <= 16) || (res->size == 512))) {<br>-                                            /* use variable ranges if pre-defined do not match */<br>-                                                switch (var_num) {<br>-                                           case 0:<br>-                                                      reg_x |= (1 << 2);<br>-                                                     if (res->size <= 16)<br>-                                                           wiosize |= (1 << 0);<br>-                                                   break;<br>-                                               case 1:<br>-                                                      reg_x |= (1 << 24);<br>-                                                    if (res->size <= 16)<br>-                                                           wiosize |= (1 << 2);<br>-                                                   break;<br>-                                               case 2:<br>-                                                      reg_x |= (1 << 25);<br>-                                                    if (res->size <= 16)<br>-                                                           wiosize |= (1 << 3);<br>-                                                   break;<br>-                                               }<br>-                                            reg_var[var_num++] =<br>-                                             base & 0xffff;<br>-                                       } else {<br>-                                             printk(BIOS_ERR, "cannot fit LPC decode region:%s, base=0x%08x, end=0x%08x\n",<br>-                                                     dev_path(child), base, end);<br>-                                 }<br>-                            }<br>+                            set_lpc_resource(child,<br>+                                              &var_num,<br>+                                                reg_var,<br>+                                             &reg,<br>+                                            &reg_x,<br>+                                          reg_size[0],<br>+                                         &wiosize);<br>                        }<br>             }<br>     }<br></pre><p>To view, visit <a href="https://review.coreboot.org/21904">change 21904</a>. To unsubscribe, 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/21904"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I265cfac2049733481faf8a6e5b02e34aadae11f5 </div>
<div style="display:none"> Gerrit-Change-Number: 21904 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Spiegel <richard.spiegel@silverbackltd.com> </div>