<p>Martin Roth <strong>merged</strong> this change.</p><p><a href="https://review.coreboot.org/28880">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  build bot (Jenkins): Verified
  Martin Roth: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">libpayload/apic: Register a spurious interrupt vector<br><br>We should have a spurious interrupt vector just incase we get one. The<br>handler doesn't need to do anything.<br><br>BUG=b:116777191<br>TEST=Booted depthcharge on grunt and inspected the register. I can't<br>generate a spurious interrupt, so I can't validate that the handler gets<br>called.<br><br>Change-Id: I9e49e617f4375eb5eb00d0715c1902f77e2bf284<br>Signed-off-by: Raul E Rangel <rrangel@chromium.org><br>Reviewed-on: https://review.coreboot.org/28880<br>Tested-by: build bot (Jenkins) <no-reply@coreboot.org><br>Reviewed-by: Martin Roth <martinroth@google.com><br>---<br>M payloads/libpayload/arch/x86/apic.c<br>1 file changed, 21 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/payloads/libpayload/arch/x86/apic.c b/payloads/libpayload/arch/x86/apic.c</span><br><span>index 3b294cb..db81ea1 100644</span><br><span>--- a/payloads/libpayload/arch/x86/apic.c</span><br><span>+++ b/payloads/libpayload/arch/x86/apic.c</span><br><span>@@ -42,7 +42,6 @@</span><br><span> #define XAPIC_ENABLED_BIT         (1 << 11)</span><br><span> #define X2APIC_ENABLED_BIT           (1 << 10)</span><br><span> #define APIC_MASKED_BIT                      (1 << 16)</span><br><span style="color: hsl(0, 100%, 40%);">-#define APIC_SW_ENABLED_BIT              (1 << 8)</span><br><span> </span><br><span> #define APIC_ID                           0x020</span><br><span> #define   APIC_ID_SHIFT                        24</span><br><span>@@ -54,6 +53,9 @@</span><br><span> #define   APIC_TASK_PRIORITY_MASK     0xFFUL</span><br><span> #define APIC_EOI                      0x0B0</span><br><span> #define APIC_SPURIOUS                  0x0F0</span><br><span style="color: hsl(120, 100%, 40%);">+#define   APIC_SW_ENABLED_BIT            (1 << 8)</span><br><span style="color: hsl(120, 100%, 40%);">+#define   APIC_SPURIOUS_VECTOR_MASK     0xFFUL</span><br><span style="color: hsl(120, 100%, 40%);">+#define APIC_SPURIOUS                   0x0F0</span><br><span> #define APIC_LVT_TIMER                 0x320</span><br><span> #define APIC_TIMER_INIT_COUNT          0x380</span><br><span> #define APIC_TIMER_CUR_COUNT           0x390</span><br><span>@@ -63,7 +65,8 @@</span><br><span> </span><br><span> #define APIC_LVT_SIZE                  0x010</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define APIC_TIMER_VECTOR              0x20</span><br><span style="color: hsl(120, 100%, 40%);">+#define APIC_TIMER_VECTOR         0x20UL</span><br><span style="color: hsl(120, 100%, 40%);">+#define APIC_SPURIOUS_VECTOR            0xFFUL</span><br><span> </span><br><span> static uint32_t apic_bar;</span><br><span> static int _apic_initialized;</span><br><span>@@ -143,6 +146,8 @@</span><br><span>       timer_waiting = 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void suprious_interrupt_handler(u8 vector) {}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void apic_eoi(uint8_t vector)</span><br><span> {</span><br><span>    die_if(!apic_bar, "APIC is not initialized");</span><br><span>@@ -255,6 +260,17 @@</span><br><span>       apic_write32(APIC_SPURIOUS, reg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void apic_setup_spurious(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  uint32_t reg = apic_read32(APIC_SPURIOUS);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  reg &= ~APIC_SPURIOUS_VECTOR_MASK;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      reg |= APIC_SPURIOUS_VECTOR;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        apic_write32(APIC_SPURIOUS, reg);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void apic_init(void)</span><br><span> {</span><br><span>  uint64_t apic_bar_reg;</span><br><span>@@ -274,12 +290,15 @@</span><br><span> </span><br><span>   apic_reset_all_lvts();</span><br><span>       apic_set_task_priority(0);</span><br><span style="color: hsl(120, 100%, 40%);">+    apic_setup_spurious();</span><br><span> </span><br><span>   apic_sw_enable();</span><br><span> </span><br><span>        apic_init_timer();</span><br><span> </span><br><span>       set_interrupt_handler(APIC_TIMER_VECTOR, &timer_interrupt_handler);</span><br><span style="color: hsl(120, 100%, 40%);">+       set_interrupt_handler(APIC_SPURIOUS_VECTOR,</span><br><span style="color: hsl(120, 100%, 40%);">+                         &suprious_interrupt_handler);</span><br><span> </span><br><span>  _apic_initialized = 1;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/28880">change 28880</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/28880"/><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: merged </div>
<div style="display:none"> Gerrit-Change-Id: I9e49e617f4375eb5eb00d0715c1902f77e2bf284 </div>
<div style="display:none"> Gerrit-Change-Number: 28880 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Raul Rangel <rrangel@chromium.org> </div>
<div style="display:none"> Gerrit-Reviewer: Martin Roth <martinroth@google.com> </div>
<div style="display:none"> Gerrit-Reviewer: Raul Rangel <rrangel@chromium.org> </div>
<div style="display:none"> Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org> </div>