<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>+ ®,<br>+ ®_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>