<p>Gaggery Tsai has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/27644">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mb/google/poppy/variant/nami: Overwrite AC/DC loadlines<br><br>This patch adds a fucntion to overwrite AC/DC loadlines for differnt<br>projects.<br><br>BUG=b:111761175<br>BRANCH=None<br>TEST=emerge-nami coreboot chromeos-bootimage and use DCI to dump<br>     AC/DC loadline settings.<br><br>Change-Id: Id0068c5334c257b9f4c32b6088becbfe8391a864<br>Signed-off-by: Gaggery Tsai <gaggery.tsai@intel.com><br>---<br>A src/mainboard/google/poppy/variants/nami/include/variant/variant.h<br>M src/mainboard/google/poppy/variants/nami/mainboard.c<br>2 files changed, 173 insertions(+), 27 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/44/27644/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/mainboard/google/poppy/variants/nami/include/variant/variant.h b/src/mainboard/google/poppy/variants/nami/include/variant/variant.h</span><br><span>new file mode 100644</span><br><span>index 0000000..4a3d37a</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/google/poppy/variants/nami/include/variant/variant.h</span><br><span>@@ -0,0 +1,132 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</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%);">+#ifndef __SKU_VARIANT_H__</span><br><span style="color: hsl(120, 100%, 40%);">+#define __SKU_VARIANT_H__</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum project_sku {</span><br><span style="color: hsl(120, 100%, 40%);">+   PRJ_LIST_MIN = 0x1,</span><br><span style="color: hsl(120, 100%, 40%);">+   PRJ_AKALI = PRJ_LIST_MIN,</span><br><span style="color: hsl(120, 100%, 40%);">+     PRJ_TBD = PRJ_AKALI + 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      PRJ_VAYNE = PRJ_TBD + 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      PRJ_SONA = PRJ_VAYNE + 1,</span><br><span style="color: hsl(120, 100%, 40%);">+     PRJ_PANTHEON = PRJ_SONA + 1,</span><br><span style="color: hsl(120, 100%, 40%);">+  PRJ_LIST_MAX = PRJ_PANTHEON</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 PRJ_DEFAULT PRJ_VAYNE</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Variant for AKALI */</span><br><span style="color: hsl(120, 100%, 40%);">+#define AKALI_SA_AC_LOADLINE       1100</span><br><span style="color: hsl(120, 100%, 40%);">+#define AKALI_SA_DC_LOADLINE      1028</span><br><span style="color: hsl(120, 100%, 40%);">+#define AKALI_IA_AC_LOADLINE      272</span><br><span style="color: hsl(120, 100%, 40%);">+#define AKALI_IA_DC_LOADLINE       247</span><br><span style="color: hsl(120, 100%, 40%);">+#define AKALI_GT_AC_LOADLINE       314</span><br><span style="color: hsl(120, 100%, 40%);">+#define AKALI_GT_DC_LOADLINE       321</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Variant for Nami */</span><br><span style="color: hsl(120, 100%, 40%);">+#define NAMI_SA_AC_LOADLINE 1490</span><br><span style="color: hsl(120, 100%, 40%);">+#define NAMI_SA_DC_LOADLINE 1420</span><br><span style="color: hsl(120, 100%, 40%);">+#define NAMI_IA_AC_LOADLINE  400</span><br><span style="color: hsl(120, 100%, 40%);">+#define NAMI_IA_DC_LOADLINE        400</span><br><span style="color: hsl(120, 100%, 40%);">+#define NAMI_GT_AC_LOADLINE        310</span><br><span style="color: hsl(120, 100%, 40%);">+#define NAMI_GT_DC_LOADLINE        310</span><br><span style="color: hsl(120, 100%, 40%);">+#define NAMI_GTS_AC_LOADLINE       310</span><br><span style="color: hsl(120, 100%, 40%);">+#define NAMI_GTS_DC_LOADLINE       310</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const struct {</span><br><span style="color: hsl(120, 100%, 40%);">+ enum project_sku sku;</span><br><span style="color: hsl(120, 100%, 40%);">+ int ac_loadline[NUM_VR_DOMAINS];</span><br><span style="color: hsl(120, 100%, 40%);">+      int dc_loadline[NUM_VR_DOMAINS];</span><br><span style="color: hsl(120, 100%, 40%);">+} sku_ll_mapping[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+      [PRJ_AKALI] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .sku = PRJ_AKALI,</span><br><span style="color: hsl(120, 100%, 40%);">+             .ac_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      AKALI_SA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                 AKALI_IA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                 AKALI_GT_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                 AKALI_GT_AC_LOADLINE</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            .dc_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      AKALI_SA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                 AKALI_IA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                 AKALI_GT_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                 AKALI_GT_DC_LOADLINE</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%);">+    [PRJ_SONA] = {</span><br><span style="color: hsl(120, 100%, 40%);">+                .sku = PRJ_SONA,</span><br><span style="color: hsl(120, 100%, 40%);">+              .ac_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      NAMI_SA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_IA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GT_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GTS_AC_LOADLINE</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            .dc_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      NAMI_SA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_IA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GT_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GTS_DC_LOADLINE</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%);">+    [PRJ_TBD] = {</span><br><span style="color: hsl(120, 100%, 40%);">+         .sku = PRJ_TBD,</span><br><span style="color: hsl(120, 100%, 40%);">+               .ac_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      NAMI_SA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_IA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GT_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GTS_AC_LOADLINE</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            .dc_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      NAMI_SA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_IA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GT_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GTS_DC_LOADLINE</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%);">+    [PRJ_VAYNE] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .sku = PRJ_VAYNE,</span><br><span style="color: hsl(120, 100%, 40%);">+             .ac_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      NAMI_SA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_IA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GT_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GTS_AC_LOADLINE</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            .dc_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      NAMI_SA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_IA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GT_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GTS_DC_LOADLINE</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%);">+    [PRJ_PANTHEON] = {</span><br><span style="color: hsl(120, 100%, 40%);">+            .sku = PRJ_PANTHEON,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ac_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      NAMI_SA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_IA_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GT_AC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GTS_AC_LOADLINE</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            .dc_loadline = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      NAMI_SA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_IA_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GT_DC_LOADLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+                  NAMI_GTS_DC_LOADLINE</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%);">+};</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%);">+#endif /* __OEM_SKU_VARIANT_H__ */</span><br><span>diff --git a/src/mainboard/google/poppy/variants/nami/mainboard.c b/src/mainboard/google/poppy/variants/nami/mainboard.c</span><br><span>index 8080c94..3c2c75f 100644</span><br><span>--- a/src/mainboard/google/poppy/variants/nami/mainboard.c</span><br><span>+++ b/src/mainboard/google/poppy/variants/nami/mainboard.c</span><br><span>@@ -28,6 +28,7 @@</span><br><span> #include <soc/ramstage.h></span><br><span> #include <string.h></span><br><span> #include <variant/sku.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <variant/variant.h></span><br><span> </span><br><span> #define PL2_I7_SKU 44</span><br><span> #define PL2_DEFAULT       29</span><br><span>@@ -61,33 +62,6 @@</span><br><span>      return sku_id;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Override dev tree settings per board */</span><br><span style="color: hsl(0, 100%, 40%);">-void variant_devtree_update(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     uint32_t sku_id = variant_board_sku();</span><br><span style="color: hsl(0, 100%, 40%);">-  struct device *root = SA_DEV_ROOT;</span><br><span style="color: hsl(0, 100%, 40%);">-      config_t *cfg = root->chip_info;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Update PL2 based on SKU. */</span><br><span style="color: hsl(0, 100%, 40%);">-  cfg->tdp_pl2_override = get_pl2(sku_id);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     switch (sku_id) {</span><br><span style="color: hsl(0, 100%, 40%);">-       case SKU_0_VAYNE:</span><br><span style="color: hsl(0, 100%, 40%);">-       case SKU_1_VAYNE:</span><br><span style="color: hsl(0, 100%, 40%);">-       case SKU_2_VAYNE:</span><br><span style="color: hsl(0, 100%, 40%);">-       case SKU_0_PANTHEON:</span><br><span style="color: hsl(0, 100%, 40%);">-    case SKU_1_PANTHEON:</span><br><span style="color: hsl(0, 100%, 40%);">-    case SKU_2_PANTHEON:</span><br><span style="color: hsl(0, 100%, 40%);">-    case SKU_0_SONA:</span><br><span style="color: hsl(0, 100%, 40%);">-        case SKU_1_SONA:</span><br><span style="color: hsl(0, 100%, 40%);">-                /* Disable unused port USB port */</span><br><span style="color: hsl(0, 100%, 40%);">-              cfg->usb2_ports[5].enable = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(0, 100%, 40%);">-  default:</span><br><span style="color: hsl(0, 100%, 40%);">-                break;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> const char *smbios_mainboard_sku(void)</span><br><span> {</span><br><span>    static char sku_str[14]; /* sku{0..4294967295} */</span><br><span>@@ -189,3 +163,43 @@</span><br><span>             break;</span><br><span>       }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Override dev tree settings per board */</span><br><span style="color: hsl(120, 100%, 40%);">+void variant_devtree_update(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t sku_id = variant_board_sku();</span><br><span style="color: hsl(120, 100%, 40%);">+        uint32_t i;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct device *root = SA_DEV_ROOT;</span><br><span style="color: hsl(120, 100%, 40%);">+    config_t *cfg = root->chip_info;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Update PL2 based on SKU. */</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg->tdp_pl2_override = get_pl2(sku_id);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (sku_id) {</span><br><span style="color: hsl(120, 100%, 40%);">+     case SKU_0_VAYNE:</span><br><span style="color: hsl(120, 100%, 40%);">+     case SKU_1_VAYNE:</span><br><span style="color: hsl(120, 100%, 40%);">+     case SKU_2_VAYNE:</span><br><span style="color: hsl(120, 100%, 40%);">+     case SKU_0_PANTHEON:</span><br><span style="color: hsl(120, 100%, 40%);">+  case SKU_1_PANTHEON:</span><br><span style="color: hsl(120, 100%, 40%);">+  case SKU_2_PANTHEON:</span><br><span style="color: hsl(120, 100%, 40%);">+  case SKU_0_SONA:</span><br><span style="color: hsl(120, 100%, 40%);">+      case SKU_1_SONA:</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Disable unused port USB port */</span><br><span style="color: hsl(120, 100%, 40%);">+            cfg->usb2_ports[5].enable = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</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%);">+   /* Update AC/DC loadlines based on OEM ID */</span><br><span style="color: hsl(120, 100%, 40%);">+  sku_id = read_oem_id();</span><br><span style="color: hsl(120, 100%, 40%);">+       if (sku_id < PRJ_LIST_MIN || sku_id > PRJ_LIST_MAX)</span><br><span style="color: hsl(120, 100%, 40%);">+             sku_id = PRJ_DEFAULT;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       for (i = 0; i < ARRAY_SIZE(cfg->domain_vr_config); i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+               cfg->domain_vr_config[i].ac_loadline = sku_ll_mapping[sku_id].ac_loadline[i];</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg->domain_vr_config[i].dc_loadline = sku_ll_mapping[sku_id].dc_loadline[i];</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/27644">change 27644</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/27644"/><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: Id0068c5334c257b9f4c32b6088becbfe8391a864 </div>
<div style="display:none"> Gerrit-Change-Number: 27644 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Gaggery Tsai <gaggery.tsai@intel.com> </div>