Added: Some register definitions for the Xeon Phi and build script for Linux kernel...
authorReto Achermann <acreto@student.ethz.ch>
Tue, 22 Apr 2014 19:53:41 +0000 (21:53 +0200)
committerStefan Kaestle <stefan.kaestle@inf.ethz.ch>
Wed, 20 Aug 2014 13:46:08 +0000 (15:46 +0200)
12 files changed:
devices/xeon_phi/xeon_phi_dma.dev
devices/xeon_phi/xeon_phi_irq.dev
devices/xeon_phi/xeon_phi_mcx.dev
devices/xeon_phi/xeon_phi_sbox.dev
devices/xeon_phi/xeon_phi_sensors.dev
devices/xeon_phi/xeon_phi_smpt.dev
hake/menu.lst.k1om
hake/symbolic_targets.mk
tools/xeon_phi/build.sh [new file with mode: 0644]
tools/xeon_phi/mpss.patch
usr/drivers/xeon_phi/Hakefile [new file with mode: 0644]
usr/drivers/xeon_phi/main.c [new file with mode: 0644]

index a74abfb..be9907b 100644 (file)
@@ -161,7 +161,25 @@ device xeon_phi_dma lsbfirst ( addr base ) "Intel Xeon Phi DMA System" {
      * Register Access: CRU
      */
     register dcr rw addr(base, 0xA280) "DMA Configuration Register" {
-        r 32 "";
+        co0    1 "DMA Channel 0 Owner";
+        ce0    1 "DMA Channel 0 Enable"; 
+        co1    1 "DMA Channel 0 Owner";
+        ce1    1 "DMA Channel 1 Enable"; 
+        co2    1 "DMA Channel 0 Owner";
+        ce2    1 "DMA Channel 2 Enable"; 
+        co3    1 "DMA Channel 0 Owner";
+        ce3    1 "DMA Channel 3 Enable"; 
+        co4    1 "DMA Channel 0 Owner";
+        ce4    1 "DMA Channel 4 Enable"; 
+        co5    1 "DMA Channel 0 Owner";
+        ce5    1 "DMA Channel 5 Enable"; 
+        co6    1 "DMA Channel 0 Owner";
+        ce6    1 "DMA Channel 6 Enable"; 
+        co7    1 "DMA Channel 0 Owner";
+        ce7    1 "DMA Channel 7 Enable"; 
+        arb_h  8 "Arb H";
+        arb_l  7 "Arb L";
+        p      1 "Priority EN";
     };
     
     /*
index 152e837..055f9a6 100644 (file)
@@ -54,4 +54,140 @@ device xeon_phi_irq lsbfirst ( addr base ) "Intel Xeon Phi Interrupts" {
     register marker_message_send rw addr(base, 0xCCA8) "32 Bits to log INTSCR field of Marker Message" { 
         value 32 "Value";
     };
+    
+    
+    register msix_ram rw addr(base, 0x7000) "MSI-X RAM" {
+       reg 32 "register";
+    };
+    
+    register sysint_debug rw addr(base, 0x9000) "SYSINT Debug Register" {
+       reg 32 "register";
+    };
+    
+    /*
+     * Note: This register contains the status for all of the System Interrupt 
+     * sources. When an Interrupt event occurs, the bit corresponding to the
+     * source shall be set in this register. If SW clears an System Interrupt 
+     * Status Register bit in the same clock as a HW event wants to set it,
+     * the clear shall have precedence over the set. 
+     * NOTE: While this behavior may seem counter-intuitive and that the HW may 
+     * risk losing Interrupts, it is actually the preferred implementation 
+     * because the SW flow must already prevent a race condition. Otherwise, the 
+     * same problem could occur if the HW event came one clock before the SW clear.
+     * Therefore, SW always services Interrupts after clearing the status. If the 
+     * SW clear did not have precedence, an additional Interrupt would be 
+     * generated for this condition even though SW had already handled the 
+     * Interrupt event, which would lead to an additional call of the ISR to 
+     * clear the status. 
+     * NOTE: Clear on Read functionality is not supported on this register at 
+     * the request of SW and HW debug support teams. This results in a slight 
+     * performance degradation in legacy INTx mode due to the additional UC Write 
+     * required to clear any status bits that were set.
+     */
+    
+    register int_status rw addr(base, 0x9004) "System Interrupt Status Register" {
+       reg 32 "registr3";
+    }
+    
+    /*
+     * Note: This register is used for SW testing and HW debug only. The intent 
+     * of this register is for SW to create the appearance of a HW interrupt 
+     * event for testing and debug. Writing a '1' to a bit in this register shall
+     * result in the corresponding bit in the System Interrupt Status register 
+     * to be set along with the same behavior as if that HW interrupt event had 
+     * occurred. Writing a '0' to a bit in this register shall have no effect.
+     */
+    register int_status_set rw addr(base, 0x9008) "System Interrupt Status Set Register" {
+       reg 32 "register";
+    };
+    
+    /*
+     * This register is used to enable individual Interrupt sources. An Interrupt
+     * source, captured in the System Interrupt Status register, shall be enabled 
+     * to generate Interrupt messages when the value of the corresponding bit in
+     * this register is '1', and disabled when '0'. SW enables a particular 
+     * Interrupt source by writing a '1' to the corresponding bit this register. 
+     * Writing a '0' to any bit has no effect. 
+     * NOTE: If SW wants to disable any previously enabled Interrupt sources from
+     * generating Interrupt messages, it should use the System Interrupt Disable
+     * register instead. 
+     * NOTE: The value of the bits in this register does not affect the System 
+     * interrupt Status register. They only affect the generation of the Interrupt
+     * messages.
+     * WARNING: The following should be true to avoid a hang condition: 
+     *    1. SW will always acknowledge an Interrupt Vector (clear status bit) 
+     *       before re-enabling it. 
+     *    2. SW will not blindly re-enable Vectors for which it did not receive 
+     *       an Interrupt.
+     * For the unlikely event that these rules need to be violated, you will need 
+     * to defeature ordering checks to avoid the hang condition.
+     */
+    register int_enable rw addr(base, 0x900C) "System Interrupt Enable Register" {
+    
+    };
+    
+    /* 
+     * This register is used to disable individual Interrupt sources. Writing a 
+     * '1' to a bit of this register clears the corresponding bit in the INTENB 
+     * register. Writing a '0' to any bit has no effect.
+     * NOTE: The reason that the Interrupt enables are split into two separate HW
+     * register interfaces is to prevent the need for a Read-Modify-Write 
+     * operation (and potential locks) when different pieces of SW are handling
+     * separate Interrupt sources.
+     */
+    register int_disable rw addr(base, 0x9010) "System Interrupt Disable" {
+    
+    };
+    
+    /*
+     * In systems that support MSI-X, the interrupt vector allows the ISR to know 
+     * which interrupt without reading the System Interrupt Status register when 
+     * a vector is uniquely assigned to an interrupt. In this case, the software
+     * overhead of a read or write transaction can be avoided by setting the 
+     * auto-clear bits in this register. When auto-clear is enabled for an 
+     * interrupt, the corresponding bit in the System Interrupt Status register 
+     * will be set when an event occurs, and the MSI-X message will be sent on 
+     * PCI- Express. Then the corresponding bit in the System Interrupt Status 
+     * register is cleared and can be asserted on a new event. The vector in the 
+     * MSI-X message indicates which interrupt caused the event ad defined by 
+     * the MSI Vector Assignment Regsiter.
+     * NOTE: To clarify the definition of SENT, the correspsonding bit will be 
+     * cleared once the Endpoint accepts the messages which either means it was
+     * sent or the vector was masked. 
+     * NOTE: If interrupts are not uniquely defined to a vector, those interrupts 
+     * should not use auto-clear. If auto-clear is enabled on an interrupt once
+     * the vector is sent, all interrupts assocated to that vector will be cleared.
+     */
+    register int_status_auto_clear rw addr(base, 0x9014) "System Interrupt Status Auto-Clear" {
+        reg 32 "ff";
+    };
+    
+    register itp_doorbell rw addr(base, 0x9030) "System Interrupt ITP Doorbell" {
+       reg 32 "ff";
+    };
+    
+    
+    /*
+     * Each of these registers assigns Interrupt sources from the System Interrupt 
+     * Status register to one of the 16 possible MSI(-X) Vectors. The bits set
+     * in a given register shall define the collection of Interrupt sources (from
+     * System Interrupt Status register) that are assigned to a particular Interrupt
+     * Vector. Register 0 shall assign Interrupt sources to Vector 0, Register 1 
+     * shall assign Interrupt sources to Vector 1, and so on. 
+     * NOTE: SW must ensure that no interrupts are enabled (in System Interrupt 
+     * Disable) before modifying the value of any MSI(-X) Vector Assignment 
+     * register, otherwise the behavior is undefined. 
+     * NOTE: SW shall be responsible for assigning each interrupt source to an 
+     * unique Vector, or otherwise must handle multiple interrupts for a given
+     * source. 
+     * NOTE: SW must ensure that interrupts sharing the same vector have the 
+     * correpsonding bits disabled System Interrupt Status Auto-clear register,
+     * otherwise the behavior is undefined.
+     */
+    regarray msi_vector rw addr(base, 0x9044) [16] "MSI(-X) Vector Assignment Register 0-15" {
+       reg 32 "ff";
+    };
+    
+    
+    
 };
\ No newline at end of file
index 23ab464..deb46de 100644 (file)
  * description: register definitions for the Xeon Phi system memory page tables
  */
 
-device xeon_phi_smpt lsbfirst ( addr base ) "Intel Xeon Phi System Memory Page Tables" {
+device xeon_phi_mcheck lsbfirst ( addr base ) "Intel Xeon Phi Machine Check Registers" {
 
+    
+  
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
-     * Register Access: TRM
-     * Number: 32
+     * Reset Dmain: GRPA_PWRGD
+     * Register Access: CRU, TRM
      */
-    regarray entry rw addr(base, 3100) [32] "System Memory Page Table Entry" { 
-        value 32 "Value";
+    register ctl_lo rw addr(base, 0x3090) "MCX Control Lo" {
+        reg 32 "";
+    };
+    
+    /*
+     * Protection Level: Ring 0
+     * Visibility: Host / Coprocessor
+     * Reset Dmain: GRPA_PWRGD
+     * Register Access: CRU, TRM
+     */
+    register ctl_hi rw addr(base, 0x3094) "MCX Control Hi" {
+        reg 32 "";
+    };
+    
+    /*
+     * Protection Level: Ring 0
+     * Visibility: Host / Coprocessor
+     * Reset Dmain: GRPA_PWRGD
+     * Register Access: CRU, TRM
+     */
+    register status_lo rw addr(base, 0x3098) "MCX Status Lo" {
+        reg 32 "";
+    };
+    
+    /*
+     * Protection Level: Ring 0
+     * Visibility: Host / Coprocessor
+     * Reset Dmain: GRPA_PWRGD
+     * Register Access: CRU, TRM
+     */
+    register status_hi rw addr(base, 0x309C) "MCX Status Hi" {
+        reg 32 "";
+    };
+    
+    /*
+     * Protection Level: Ring 0
+     * Visibility: Host / Coprocessor
+     * Reset Dmain: GRPA_PWRGD
+     * Register Access: CRU, TRM
+     */
+    register addr_lo rw addr(base, 0x30A0) "MCX Address Lo" {
+        reg 32 "";
+    };
+    
+    /*
+     * Protection Level: Ring 0
+     * Visibility: Host / Coprocessor
+     * Reset Dmain: GRPA_PWRGD
+     * Register Access: CRU, TRM
+     */
+    register addr_hi rw addr(base, 0x30A4) "MCX Address Hi" {
+        reg 32 "";
+    };
+    
+    /*
+     * Protection Level: Ring 0
+     * Visibility: Host / Coprocessor
+     * Reset Dmain: GRPA_PWRGD
+     * Register Access: CRU, TRM
+     */ 
+    register misc rw addr(base, 0x30A8) "Machine Check Misc" {
+        reg 32 "";
+    };
+    
+    /*
+     * Protection Level: Ring 0
+     * Visibility: Host / Coprocessor
+     * Reset Dmain: GRPA_PWRGD
+     * Register Access: CRU, TRM
+     */ 
+    register misc2 rw addr(base, 0x30AC) "Machine Check Misc 2" {
+       reg 32 "";
     };
-
 
 };
\ No newline at end of file
index 7302b65..ab77cd0 100644 (file)
 
 device knc_sbox lsbfirst ( addr base ) "intel xeon phi (knights corner) sbox" {
 
-register oc_i2c_icr rw addr(base, 0x1000) "foo" { };
-register thermal_status rw addr(base, 0x1018) "Status and Log info for all the thermal interrupts " {
-        U32 thermal_monitor_status                         : 1; // bit 0 This bit is set whenever the current die temp exceeds the thermal monitor control temperature 
-        U32 thermal_monitor_log                            : 1; // bit 1 This bit is a sticky version of Thermal_Monitor_Status, cleared by s/w or by reset 
-        U32 out_of_spec_status                             : 1; // bit 2 This bit is set whenever the current die temp exceeds the Out of Spec temperature; is sticky 
-        U32 out_of_spec_log                                : 1; // bit 3 This bit is also a sticky version of Out_Of_Spec_Status 
-        U32 thermal_threshold1_status                      : 1; // bit 4 This bit is set whenever the current die temp exceeds the software programmed thermal threshold
-        U32 thermal_threshold1_log                         : 1; // bit 5 This bit is a sticky version of Thermal_Threshold1_Status, cleared by s/w or by reset 
-        U32 thermal_threshold2_status                      : 1; // bit 6 This bit is set whenever the current die temp exceeds the software programmed thermal threshold
-        U32 thermal_threshold2_log                         : 1; // bit 7 This bit is a sticky version of Thermal_Threshold2_Status, cleared by s/w or by reset 
-        U32 fan_monitor_status                             : 1; // bit 8 This bit is an indication if there was an error/fail condition with the Off-chip Fan  
-        U32 fan_monitor_log                                : 1; // bit 9 This bit is a sticky version of Fan_Monitor_Status, cleared by s/w or by reset 
-        U32 system_hot_status                              : 1; // bit 10 This bit is an indication if any other device on the MIC Card is hot 
-        U32 system_hot_log                                 : 1; // bit 11 This bit is a sticky version of System_Hot_Status, cleared by s/w or by reset 
-        U32 rsvd0                                          :20; // bit 12-31
- };
-
-
-register thermal_interrupt_enable rw addr(base, 0x101c) " Register that controls the interrupt response to thermal events" {
-       U32 high_temp_interrupt_enable                     : 1; // bit 0 This bit enables/disables the s/w programmed HIGH temp interrupt 
-       U32 low_temp_interrupt_enable                      : 1; // bit 1 This bit enables/disables the s/w programmed  LOW temp interrupt 
-       U32 out_of_spec_interrupt_enable                   : 1; // bit 2 This bit enables/disables the Out of Spec Temp interrupt 
-       U32 fan_monitor_interrupt_enable                   : 1; // bit 3 This bit enables/disables the interrupt from Fan Control Unit    
-       U32 system_monitor_interrupt_enable                : 1; // bit 4 This bit enables/disables the system hot interrupts 
-       U32 mclk_ratio_interrupt_enable                    : 1; // bit 5 This bit enables/disables the mclk ratio interrupts 
-       U32 alert_interrupt_enable                         : 1; // bit 6 This bit enables/disables the ALERT# interrupts 
-       U32 gpuhot_interrupt_enable                        : 1; // bit 7 This bit enables/disables the GPUHOT# interrupts 
-       U32 pwralert_interrupt_enable                      : 1; // bit 8 This bit enables/disables the PWRALERT# interrupt 
-       U32 rsvd0                                          : 1; // bit 9
-       U32 sw_threshold1_temp                             :10; // bit 10-19 Software Programmable Thermal Threshold #1 
-       U32 sw_threshold1_enable                           : 1; // bit 20 This bit enables/disables the sw threshold #1 interrupts 
-       U32 sw_threshold2_temp                             :10; // bit 21-30 Software Programmable Thermal Threshold #2 
-       U32 sw_threshold2_enable                           : 1; // bit 31 This bit enables/disables the sw threshold #2 interrupts  };
-register status_fan1 rw addr(base, 0x1024) "foo" { };
-register status_fan2 rw addr(base, 0x1028) "foo" { };
-register speed_override_fan rw addr(base, 0x102c) "foo" { };
-register board_temp1 rw addr(base, 0x1030) "foo" { };
-register board_temp2 rw addr(base, 0x1034) "foo" { };
-register board_voltage_sense rw addr(base, 0x1038) "foo" { };
-
-register current_die_temp0 rw addr(base, 0x103c) "Consists of Current Die Temperatures of sensors 0 thru 2" {
-        U32 sensor0_temp                                   :10; // bit 0-9 current Temperature of Sensor0
-        U32 sensor1_temp                                   :10; // bit 10-19 current Temperature of Sensor1
-        U32 sensor2_temp                                   :10; // bit 20-29 current Temperature of Sensor2
-        U32 rsvd0                                          : 2; // bit 30-31
-};
-
-
-register current_die_temp1 rw addr(base, 0x1040) "Consists of Current Die Temperatures of sensors 0 thru 2" {
-        U32 sensor0_temp                                   :10; // bit 0-9 current Temperature of Sensor0
-        U32 sensor1_temp                                   :10; // bit 10-19 current Temperature of Sensor1
-        U32 sensor2_temp                                   :10; // bit 20-29 current Temperature of Sensor2
-        U32 rsvd0                                          : 2; // bit 30-31
-}
-
-;
-register current_die_temp2 rw addr(base, 0x1044) "Consists of Current Die Temperatures of sensors 0 thru 2" {
-        U32 sensor0_temp                                   :10; // bit 0-9 current Temperature of Sensor0
-        U32 sensor1_temp                                   :10; // bit 10-19 current Temperature of Sensor1
-        U32 sensor2_temp                                   :10; // bit 20-29 current Temperature of Sensor2
-        U32 rsvd0                                          : 2; // bit 30-31
-};
-
-
-register max_die_temp0 rw addr(base, 0x1048) "foo" { };
-register max_die_temp1 rw addr(base, 0x104c) "foo" { };
-register max_die_temp2 rw addr(base, 0x1050) "foo" { };
 
 
 register elapsed_time_low rw addr(base, 0x1074) "Elapsed Time Clock Timer - lower 32 bits" { 
@@ -119,30 +52,6 @@ register sicr0 rw addr(base, 0x9004) "System Interrupt Cause Read Register 0 " {
 };
 
 
-register sice0 rw addr(base, 0x900c) "foo" { };
-register sicc0 rw addr(base, 0x9010) "foo" { };
-register sicr1 rw addr(base, 0x901c) "foo" { };
-register sicc1 rw addr(base, 0x9028) "foo" { };
-register pmu_period_sel rw addr(base, 0x1070) "foo" { };
-
-
-register thermal_status_interrupt rw addr(base, 0x107c) "Status and Log info for KNC new thermal interrupts" { 
-       U32 mclk_ratio_status                              : 1; // bit 0 This bit is set whenever MCLK Ratio Changes. Cleared by SW writing. 
-       U32 mclk_ratio_log                                 : 1; // bit 1 This bit is also a sticky version of MCLK_Ratio_Status 
-       U32 alert_status                                   : 1; // bit 2 This bit is set whenever ALERT# pin is asserted. Cleared by SW writing. 
-       U32 alert_log                                      : 1; // bit 3 This bit is a sticky version of Alert_Status, cleared by s/w or by reset 
-       U32 gpuhot_status                                  : 1; // bit 4 This bit reflects the real-time value of the GPUHOT# pin (synchronized to SCLK domain). 
-       U32 gpuhot_log                                     : 1; // bit 5 This bit is set on the assertion edge of GPUHOT# and remains set until software clears it by doing a write. 
-       U32 pwralert_status                                : 1; // bit 6 This bit reflects the real-time value of the PWRALERT# pin (synchronized to SCLK domain). 
-       U32 pwralert_log                                   : 1; // bit 7 This bit is set on the assertion edge of PWRALERT# and remains set until software clears it by doing a write. 
-       U32 rsvd0                                          :23; // bit 8-30
-       U32 etc_freeze                                     : 1; // bit 31 This bit freeze the increment of elapsed-time counter 
-};
-
-
-register thermal_status_2 rw addr(base, 0x1080) "foo" { };
-register thermal_test_2 rw addr(base, 0x1084) "foo" { };
-
 
 register corefreq rw addr(base, 0x4100) "Core Frequency " { 
        U32 ratio                                          :12; // bit 0-11 Ratio
@@ -190,155 +99,6 @@ register mxar14 rw addr(base, 0x9078) "foo" { };
 register mxar15 rw addr(base, 0x907c) "foo" { };
 register msixpbacr rw addr(base, 0x9080) "foo" { };
 register msixpbacr_k1om rw addr(base, 0x9084) "foo" { };
-register dcar_0 rw addr(base, 0xa000) "foo" { };
-register dhpr_0 rw addr(base, 0xa004) "foo" { };
-register dtpr_0 rw addr(base, 0xa008) "foo" { };
-register daux_lo_0 rw addr(base, 0xa00c) "foo" { };
-register daux_hi_0 rw addr(base, 0xa010) "foo" { };
-register drar_lo_0 rw addr(base, 0xa014) "foo" { };
-register drar_hi_0 rw addr(base, 0xa018) "foo" { };
-register ditr_0 rw addr(base, 0xa01c) "foo" { };
-register dstat_0 rw addr(base, 0xa020) "foo" { };
-register dstatwb_lo_0 rw addr(base, 0xa024) "foo" { };
-register dstatwb_hi_0 rw addr(base, 0xa028) "foo" { };
-register dcherr_0 rw addr(base, 0xa02c) "foo" { };
-register dcherrmsk_0 rw addr(base, 0xa030) "foo" { };
-register dcar_1 rw addr(base, 0xa040) "foo" { };
-register dhpr_1 rw addr(base, 0xa044) "foo" { };
-register dtpr_1 rw addr(base, 0xa048) "foo" { };
-register daux_lo_1 rw addr(base, 0xa04c) "foo" { };
-register daux_hi_1 rw addr(base, 0xa050) "foo" { };
-register drar_lo_1 rw addr(base, 0xa054) "foo" { };
-register drar_hi_1 rw addr(base, 0xa058) "foo" { };
-register ditr_1 rw addr(base, 0xa05c) "foo" { };
-register dstat_1 rw addr(base, 0xa060) "foo" { };
-register dstatwb_lo_1 rw addr(base, 0xa064) "foo" { };
-register dstatwb_hi_1 rw addr(base, 0xa068) "foo" { };
-register dcherr_1 rw addr(base, 0xa06c) "foo" { };
-register dcherrmsk_1 rw addr(base, 0xa070) "foo" { };
-register dcar_2 rw addr(base, 0xa080) "foo" { };
-register dhpr_2 rw addr(base, 0xa084) "foo" { };
-register dtpr_2 rw addr(base, 0xa088) "foo" { };
-register daux_lo_2 rw addr(base, 0xa08c) "foo" { };
-register daux_hi_2 rw addr(base, 0xa090) "foo" { };
-register drar_lo_2 rw addr(base, 0xa094) "foo" { };
-register drar_hi_2 rw addr(base, 0xa098) "foo" { };
-register ditr_2 rw addr(base, 0xa09c) "foo" { };
-register dstat_2 rw addr(base, 0xa0a0) "foo" { };
-register dstatwb_lo_2 rw addr(base, 0xa0a4) "foo" { };
-register dstatwb_hi_2 rw addr(base, 0xa0a8) "foo" { };
-register dcherr_2 rw addr(base, 0xa0ac) "foo" { };
-register dcherrmsk_2 rw addr(base, 0xa0b0) "foo" { };
-register dcar_3 rw addr(base, 0xa0c0) "foo" { };
-register dhpr_3 rw addr(base, 0xa0c4) "foo" { };
-register dtpr_3 rw addr(base, 0xa0c8) "foo" { };
-register daux_lo_3 rw addr(base, 0xa0cc) "foo" { };
-register daux_hi_3 rw addr(base, 0xa0d0) "foo" { };
-register drar_lo_3 rw addr(base, 0xa0d4) "foo" { };
-register drar_hi_3 rw addr(base, 0xa0d8) "foo" { };
-register ditr_3 rw addr(base, 0xa0dc) "foo" { };
-register dstat_3 rw addr(base, 0xa0e0) "foo" { };
-register dstatwb_lo_3 rw addr(base, 0xa0e4) "foo" { };
-register dstatwb_hi_3 rw addr(base, 0xa0e8) "foo" { };
-register dcherr_3 rw addr(base, 0xa0ec) "foo" { };
-register dcherrmsk_3 rw addr(base, 0xa0f0) "foo" { };
-register dcar_4 rw addr(base, 0xa100) "foo" { };
-register dhpr_4 rw addr(base, 0xa104) "foo" { };
-register dtpr_4 rw addr(base, 0xa108) "foo" { };
-register daux_lo_4 rw addr(base, 0xa10c) "foo" { };
-register daux_hi_4 rw addr(base, 0xa110) "foo" { };
-register drar_lo_4 rw addr(base, 0xa114) "foo" { };
-register drar_hi_4 rw addr(base, 0xa118) "foo" { };
-register ditr_4 rw addr(base, 0xa11c) "foo" { };
-register dstat_4 rw addr(base, 0xa120) "foo" { };
-register dstatwb_lo_4 rw addr(base, 0xa124) "foo" { };
-register dstatwb_hi_4 rw addr(base, 0xa128) "foo" { };
-register dcherr_4 rw addr(base, 0xa12c) "foo" { };
-register dcherrmsk_4 rw addr(base, 0xa130) "foo" { };
-register dcar_5 rw addr(base, 0xa140) "foo" { };
-register dhpr_5 rw addr(base, 0xa144) "foo" { };
-register dtpr_5 rw addr(base, 0xa148) "foo" { };
-register daux_lo_5 rw addr(base, 0xa14c) "foo" { };
-register daux_hi_5 rw addr(base, 0xa150) "foo" { };
-register drar_lo_5 rw addr(base, 0xa154) "foo" { };
-register drar_hi_5 rw addr(base, 0xa158) "foo" { };
-register ditr_5 rw addr(base, 0xa15c) "foo" { };
-register dstat_5 rw addr(base, 0xa160) "foo" { };
-register dstatwb_lo_5 rw addr(base, 0xa164) "foo" { };
-register dstatwb_hi_5 rw addr(base, 0xa168) "foo" { };
-register dcherr_5 rw addr(base, 0xa16c) "foo" { };
-register dcherrmsk_5 rw addr(base, 0xa170) "foo" { };
-register dcar_6 rw addr(base, 0xa180) "foo" { };
-register dhpr_6 rw addr(base, 0xa184) "foo" { };
-register dtpr_6 rw addr(base, 0xa188) "foo" { };
-register daux_lo_6 rw addr(base, 0xa18c) "foo" { };
-register daux_hi_6 rw addr(base, 0xa190) "foo" { };
-register drar_lo_6 rw addr(base, 0xa194) "foo" { };
-register drar_hi_6 rw addr(base, 0xa198) "foo" { };
-register ditr_6 rw addr(base, 0xa19c) "foo" { };
-register dstat_6 rw addr(base, 0xa1a0) "foo" { };
-register dstatwb_lo_6 rw addr(base, 0xa1a4) "foo" { };
-register dstatwb_hi_6 rw addr(base, 0xa1a8) "foo" { };
-register dcherr_6 rw addr(base, 0xa1ac) "foo" { };
-register dcherrmsk_6 rw addr(base, 0xa1b0) "foo" { };
-register dcar_7 rw addr(base, 0xa1c0) "foo" { };
-register dhpr_7 rw addr(base, 0xa1c4) "foo" { };
-register dtpr_7 rw addr(base, 0xa1c8) "foo" { };
-register daux_lo_7 rw addr(base, 0xa1cc) "foo" { };
-register daux_hi_7 rw addr(base, 0xa1d0) "foo" { };
-register drar_lo_7 rw addr(base, 0xa1d4) "foo" { };
-register drar_hi_7 rw addr(base, 0xa1d8) "foo" { };
-register ditr_7 rw addr(base, 0xa1dc) "foo" { };
-register dstat_7 rw addr(base, 0xa1e0) "foo" { };
-register dstatwb_lo_7 rw addr(base, 0xa1e4) "foo" { };
-register dstatwb_hi_7 rw addr(base, 0xa1e8) "foo" { };
-register dcherr_7 rw addr(base, 0xa1ec) "foo" { };
-register dcherrmsk_7 rw addr(base, 0xa1f0) "foo" { };
-register dcr rw addr(base, 0xa280) "DMA Configuration Register" { 
-    co0    1 "DMA Channel 0 Owner";
-    ce0    1 "DMA Channel 0 Enable"; 
-    co1    1 "DMA Channel 0 Owner";
-    ce1    1 "DMA Channel 1 Enable"; 
-    co2    1 "DMA Channel 0 Owner";
-    ce2    1 "DMA Channel 2 Enable"; 
-    co3    1 "DMA Channel 0 Owner";
-    ce3    1 "DMA Channel 3 Enable"; 
-    co4    1 "DMA Channel 0 Owner";
-    ce4    1 "DMA Channel 4 Enable"; 
-    co5    1 "DMA Channel 0 Owner";
-    ce5    1 "DMA Channel 5 Enable"; 
-    co6    1 "DMA Channel 0 Owner";
-    ce6    1 "DMA Channel 6 Enable"; 
-    co7    1 "DMA Channel 0 Owner";
-    ce7    1 "DMA Channel 7 Enable"; 
-    arb_h  8 "Arb H";
-    arb_l  7 "Arb L";
-    p      1 "Priority EN";
-};
-register apicicr0 rw addr(base, 0xa9d0) "foo" { };
-register apicicr1 rw addr(base, 0xa9d8) "foo" { };
-register apicicr2 rw addr(base, 0xa9e0) "foo" { };
-register apicicr3 rw addr(base, 0xa9e8) "foo" { };
-register apicicr4 rw addr(base, 0xa9f0) "foo" { };
-register apicicr5 rw addr(base, 0xa9f8) "foo" { };
-register apicicr6 rw addr(base, 0xaa00) "foo" { };
-register apicicr7 rw addr(base, 0xaa08) "foo" { };
-register scratch0 rw addr(base, 0xab20) "foo" { };
-register scratch1 rw addr(base, 0xab24) "foo" { };
-register scratch2 rw addr(base, 0xab28) "foo" { };
-register scratch3 rw addr(base, 0xab2c) "foo" { };
-register scratch4 rw addr(base, 0xab30) "foo" { };
-register scratch5 rw addr(base, 0xab34) "foo" { };
-register scratch6 rw addr(base, 0xab38) "foo" { };
-register scratch7 rw addr(base, 0xab3c) "foo" { };
-register scratch8 rw addr(base, 0xab40) "foo" { };
-register scratch9 rw addr(base, 0xab44) "foo" { };
-register scratch10 rw addr(base, 0xab48) "foo" { };
-register scratch11 rw addr(base, 0xab4c) "foo" { };
-register scratch12 rw addr(base, 0xab50) "foo" { };
-register scratch13 rw addr(base, 0xab54) "foo" { };
-register scratch14 rw addr(base, 0xab58) "foo" { };
-register scratch15 rw addr(base, 0xab5c) "foo" { };
 register rdmasr0 rw addr(base, 0xb180) "foo" { };
 register sbq_flush rw addr(base, 0xb1a0 ) "foo" { };
 register tlb_flush rw addr(base, 0xb1a4) "foo" { };
index be9d0ca..0f5ed7f 100644 (file)
@@ -17,27 +17,52 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRAP_PWRDG, HOT_RESET
+     * Reset Domain: GRAP_PWRDG, HOT_RESET
      * Register Access: TRM
      */
     register thermal_status rw addr(base, 0x1018) "Status and Log info for all the thermal interrupts" { 
-        value 32 "Value";
+        thermal_monitor_status     1 "Set whenever the current die temp exceeds the thermal monitor control temperature";
+        thermal_monitor_log        1 "Sticky version of Thermal_Monitor_Status, cleared by s/w or by reset";
+        out_of_spec_status         1 "Set whenever the current die temp exceeds the Out of Spec temperature; is sticky"; 
+        out_of_spec_log            1 "Sticky version of Out_Of_Spec_Status ";
+        thermal_threshold1_status  1 "Set whenever the current die temp exceeds the software programmed thermal threshold";
+        thermal_threshold1_log     1 "Sticky version of Thermal_Threshold1_Status, cleared by s/w or by reset"; 
+        thermal_threshold2_status  1 "Set whenever the current die temp exceeds the software programmed thermal threshold2";
+        thermal_threshold2_log     1 "Sticky version of Thermal_Threshold2_Status, cleared by s/w or by reset"; 
+        fan_monitor_status         1 "Indication if there was an error/fail condition with the Off-chip Fan";  
+        fan_monitor_log            1 "Sticky version of Fan_Monitor_Status, cleared by s/w or by reset"; 
+        system_hot_status          1 "Indication if any other device on the MIC Card is hot";
+        system_hot_log             1 "Sticky version of System_Hot_Status, cleared by s/w or by reset"; 
+        _                         20 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
-    register thermal_irq rw addr(base, 0x101C) "Register that controls the interrupt response to thermal events" { 
-        value 32 "Value";
+    register thermal_irq_enable rw addr(base, 0x101C) "Register that controls the interrupt response to thermal events" { 
+        high_temp             1 "enables/disables the s/w programmed HIGH temp interrupt"; 
+        low_temp              1 "enables/disables the s/w programmed  LOW temp interrupt"; 
+        out_of_spec           1 "enables/disables the Out of Spec Temp interrupt"; 
+        fan_monitor           1 "enables/disables the interrupt from Fan Control Unit";      
+        system_monitor        1 "enables/disables the system hot interrupts"; 
+        mclk_ratio            1 "enables/disables the mclk ratio interrupts"; 
+        alert                 1 "enables/disables the ALERT# interrupts"; 
+        gpuhot                1 "enables/disables the GPUHOT# interrupts"; 
+        pwralert              1 "enables/disables the PWRALERT# interrupt"; 
+        _                     1 "Reserved";
+        sw_threshold1_temp   10 "Software Programmable Thermal Threshold #1"; 
+        sw_threshold1_enable  1 "enables/disables the sw threshold #1 interrupts"; 
+        sw_threshold2_temp   10 "Software Programmable Thermal Threshold #2"; 
+        sw_threshold2_enable  1 "enables/disables the sw threshold #2 interrupts";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
     register micro_controller_fan_status rw addr(base, 0x1020) "Upto data Status information from the Fan microcontroller" { 
@@ -47,7 +72,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
     register status_fan1 rw addr(base, 0x1024) "32 bit Status of Fan #1" { 
@@ -57,7 +82,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
     register status_fan2 rw addr(base, 0x1028) "32 bit Status of Fan #2" { 
@@ -67,7 +92,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRPA_PWRDG, HOT_RESET
+     * Reset Domain: GRPA_PWRDG, HOT_RESET
      * Register Access: TRM
      */
     register speed_override_fan rw addr(base, 0x102C) "Override of fan speed" { 
@@ -77,7 +102,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
     register board_temp1 rw addr(base, 0x1030) "Temperature from Sensors 1 and 2 on LRB Card" { 
@@ -87,7 +112,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
     register board_temp2 rw addr(base, 0x1034) "Temperature from Sensors 3 and 4 on LRB Card" { 
@@ -97,7 +122,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
     register board_voltage rw addr(base, 0x1038) "Digitized value of Voltage sense input to LRB" { 
@@ -107,97 +132,124 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register current_die_temp0 rw addr(base, 0x103C) "Consists of Current Die Temperatures of sensors 0 thru 2" { 
-        value 32 "Value";
+        sensor0 10 "current temperature of sensor 0";
+        sensor1 10 "current temperature of sensor 1";
+        sensor2 10 "current temperature of sensor 2";
+        _        2 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register current_die_temp1 rw addr(base, 0x1040) "Consists of Current Die Temperatures of sensors 3 thru 5" { 
-        value 32 "Value";
+        sensor3 10 "current temperature of sensor 3";
+        sensor4 10 "current temperature of sensor 4";
+        sensor5 10 "current temperature of sensor 5";
+        _        2 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register current_die_temp2 rw addr(base, 0x1044) "Consists of Current Die Temperatures of sensors 6 thru 8" { 
-        value 32 "Value";
+        sensor6 10 "current temperature of sensor 6";
+        sensor7 10 "current temperature of sensor 7";
+        sensor8 10 "current temperature of sensor 8";
+        _        2 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRPA_PWRDG
+     * Reset Domain: GRPA_PWRDG
      * Register Access: TRM
      */
     register max_die_temp0 rw addr(base, 0x1048) "Consists of Maximum Die Temperatures of sensors 0 thru 2" { 
-        value 32 "Value";
+        sensor0 10 "maximum temperature of sensor 0";
+        sensor1 10 "maximum temperature of sensor 1";
+        sensor2 10 "maximum temperature of sensor 2";
+        _        2 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRPA_PWRDG
+     * Reset Domain: GRPA_PWRDG
      * Register Access: TRM
      */
     register max_die_temp1 rw addr(base, 0x104C) "Consists of Maximum Die Temperatures of sensors 3 thru 5" { 
-        value 32 "Value";
+        sensor3 10 "maximum temperature of sensor 3";
+        sensor4 10 "maximum temperature of sensor 4";
+        sensor5 10 "maximum temperature of sensor 5";
+        _        2 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRPA_PWRDG
+     * Reset Domain: GRPA_PWRDG
      * Register Access: TRM
      */
     register max_die_temp2 rw addr(base, 0x1050) "Consists of Maximum Die Temperatures of sensors 6 thru 8" { 
-        value 32 "Value";
+        sensor6 10 "maximum temperature of sensor 6";
+        sensor7 10 "maximum temperature of sensor 7";
+        sensor8 10 "maximum temperature of sensor 8";
+        _        2 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRPA_PWRDG
+     * Reset Domain: GRPA_PWRDG
      * Register Access: TRM
      */
     register min_die_temp0 rw addr(base, 0x1054) "Consists of Minimum Die Temperatures of sensors 0 thru 2" { 
-        value 32 "Value";
+        sensor0 10 "minimum temperature of sensor 0";
+        sensor1 10 "minimum temperature of sensor 1";
+        sensor2 10 "minimum temperature of sensor 2";
+        _        2 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRPA_PWRDG
+     * Reset Domain: GRPA_PWRDG
      * Register Access: TRM
      */
     register min_die_temp1 rw addr(base, 0x1058) "Consists of Minimum Die Temperatures of sensors 3 thru 5" { 
-        value 32 "Value";
+        sensor3 10 "minimum temperature of sensor 3";
+        sensor4 10 "minimum temperature of sensor 4";
+        sensor5 10 "minimum temperature of sensor 5";
+        _        2 "Reserved";;
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRPA_PWRDG
+     * Reset Domain: GRPA_PWRDG
      * Register Access: TRM
      */
     register min_die_temp2 rw addr(base, 0x105C) "Consists of Minimum Die Temperatures of sensors 6 thru 8" { 
-        value 32 "Value";
+        sensor6 10 "minimum temperature of sensor 6";
+        sensor7 10 "minimum temperature of sensor 7";
+        sensor8 10 "minimum temperature of sensor 8";
+        _        2 "Reserved";
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: GRPA_PWRDG
+     * Reset Domain: GRPA_PWRDG
      * Register Access: TRM
      */
     register min_die_temp2 rw addr(base, 0x105C) "Consists of Minimum Die Temperatures of sensors 6 thru 8" { 
@@ -207,7 +259,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
     register thermal_status2 rw addr(base, 0x1080) "Thermal Status for LRB2" { 
@@ -217,17 +269,26 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET, HOT_RESET
+     * Reset Domain: CSR_RESET, HOT_RESET
      * Register Access: TRM
      */
     register thermal_status_irq rw addr(base, 0x107C) "Status and Log info for lrb2 new thermal interrupts" { 
-        value 32 "Value";
+        mclk_ratio_status 1 "Set whenever MCLK Ratio Changes. Cleared by SW writing.";
+        mclk_ratio_log    1 "A sticky version of MCLK_Ratio_Status";
+        alert_status      1 "Set whenever ALERT# pin is asserted. Cleared by SW writing.";
+        alert_log         1 "A sticky version of Alert_Status, cleared by s/w or by reset";
+        gpuhot_status     1 "Reflects the real-time value of the GPUHOT# pin (synchronized to SCLK domain).";
+        gpuhot_log        1 "Set on the assertion edge of GPUHOT# and remains set until software clears it by doing a write.";
+        pwralert_status   1 "Reflects the real-time value of the PWRALERT# pin (synchronized to SCLK domain).;
+        pwralert_log      1 "Set on the assertion edge of PWRALERT# and remains set until software clears it by doing a write."
+        _                23 "Reserved";
+        etc_freeze        1 "freeze the increment of elapsed-time counter"; 
     };
 
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_temp_settings0 rw addr(base, 0x1090) "External Thermal Sensor Setting - Sensor #0" {
@@ -237,7 +298,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_temp_settings1 rw addr(base, 0x1094) "External Thermal Sensor Setting - Sensor #1" {
@@ -247,7 +308,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_temp_settings2 rw addr(base, 0x1098) "External Thermal Sensor Setting - Sensor #2" {
@@ -257,7 +318,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_temp_settings3 rw addr(base, 0x109C) "External Thermal Sensor Setting - Sensor #3" {
@@ -267,7 +328,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_temp_settings4 rw addr(base, 0x10A0) "External Thermal Sensor Setting - Sensor #4" {
@@ -277,7 +338,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_temp_settings5 rw addr(base, 0x10A4) "External Thermal Sensor Setting - Sensor #5" {
@@ -287,7 +348,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_controlparams0 rw addr(base, 0x10A8) "External Thermal Sensor Parameters - Sensor #0" {
@@ -297,7 +358,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_controlparams1 rw addr(base, 0x10AC) "External Thermal Sensor Parameters - Sensor #1" {
@@ -307,7 +368,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_controlparams2 rw addr(base, 0x10B0) "External Thermal Sensor Parameters - Sensor #2" {
@@ -317,7 +378,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_controlparams3 rw addr(base, 0x10B4) "External Thermal Sensor Parameters - Sensor #3" {
@@ -327,7 +388,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_controlparams4 rw addr(base, 0x10B8) "External Thermal Sensor Parameters - Sensor #4" {
@@ -337,7 +398,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_controlparams5 rw addr(base, 0x10BC) "External Thermal Sensor Parameters - Sensor #5" {
@@ -347,7 +408,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_temp_status0 rw addr(base, 0x10C0) "External Thermal Sensor Status - Sensor #0 ~ #2" {
@@ -358,7 +419,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register ext_temp_status1 rw addr(base, 0x10C4) "External Thermal Sensor Status - Sensor #3 ~ #5" {
@@ -369,7 +430,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register int_fan_status rw addr(base, 0x10C8) "Internal Thermal Sensor Status" {
@@ -380,7 +441,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register int_fan_control0 rw addr(base, 0x10CC) "Internal Thermal Sensor Setting/Parameters and FCU Configuration - 0" {
@@ -391,7 +452,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register int_fan_control1 rw addr(base, 0x10D0) "Internal Thermal Sensor Setting/Parameters and FCU Configuration - 1" {
@@ -401,7 +462,7 @@ device xeon_phi_sensors lsbfirst ( addr base ) "Intel Xeon Phi Sensors" {
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
-     * Reset Dmain: CSR_RESET
+     * Reset Domain: CSR_RESET
      * Register Access: TRM
      */
     register int_fan_control2 rw addr(base, 0x10D4) "Internal Thermal Sensor Setting/Parameters and FCU Configuration - 2" {
index 76552f0..5867e94 100644 (file)
  * xeon_phi_smpt.dev
  *
  * description: register definitions for the Xeon Phi system memory page tables
+ *
+ *   #define BUILD_SMPT(NO_SNOOP, HOST_ADDR)  \
+       (uint32_t)(((((HOST_ADDR)<< 2) & (~0x03)) | ((NO_SNOOP) & (0x01))))
+       
+    constants 
+    
+    #define SMPT_MASK          0x1F
+    #define MIC_SYSTEM_PAGE_SHIFT      34ULL
+    #define MIC_SYSTEM_PAGE_MASK       ((1ULL << MIC_SYSTEM_PAGE_SHIFT) - 1ULL)
+    
+    micscif_smpt.c/.h
  */
 
 device xeon_phi_smpt lsbfirst ( addr base ) "Intel Xeon Phi System Memory Page Tables" {
 
+    constants snooping "System Snooping Control" {
+        enabled  = 0  "Enable Snooping";
+        disabled = 1  "Disabled Snooping";
+    };
+
     /*
      * Protection Level: Ring 0
      * Visibility: Host / Coprocessor
@@ -21,8 +37,10 @@ device xeon_phi_smpt lsbfirst ( addr base ) "Intel Xeon Phi System Memory Page T
      * Register Access: TRM
      * Number: 32
      */
-    regarray entry rw addr(base, 0x3100) [32] "System Memory Page Table Entry" { 
-        value 32 "Value";
+    regarray entry rw addr(base, 0x3100) [32] "System Memory Page Table Entry" {
+        snoop_disabled 1 type(snooping) "Disable snooping";
+        _              1 "Reserved"
+        host_address  30 "High 32bit of the host address";
     };
 
 
index 5c12c65..8fb570c 100644 (file)
@@ -26,7 +26,7 @@ module  /k1om/sbin/skb boot
 #modulenounzip /skb_ramfs.cpio.gz nospawn
 #module  /k1om/sbin/kaluga boot
 #module  /k1om/sbin/acpi boot
-module  /k1om/sbin/spawnd boot bootk1om=0-227
+module  /k1om/sbin/spawnd boot bootk1om=0-3
 module  /k1om/sbin/startd boot
 #module /k1om/sbin/routing_setup boot
 
index 39a8dbb..d5209f3 100644 (file)
@@ -499,8 +499,7 @@ XEON_PHI_MODULES =\
        k1om/sbin/ramfsd \
        k1om/sbin/skb \
        k1om/sbin/spawnd \
-       k1om/sbin/startd \
-       k1om/sbin/acpi
+       k1om/sbin/startd 
        
 
 menu.lst.k1om: $(SRCDIR)/hake/menu.lst.k1om
diff --git a/tools/xeon_phi/build.sh b/tools/xeon_phi/build.sh
new file mode 100644 (file)
index 0000000..6fef109
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+##########################################################################
+# Copyright (c) 2014 ETH Zurich.
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached LICENSE file.
+# If you do not find this file, copies can be found by writing to:
+# ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
+#########################################################################
+
+
+
+#
+# NOTE: You need to put this script into your mpss-modules source directory
+#       Make sure you have the requirements as stated in the Intel
+#      MPSS manual fulfilled.
+#
+
+patch host/uos_download.c < mpss.patch
+
+make MIC_CARD_ARCH=k1om -j 10
+
+has_mic=$(lsmod|grep mic)
+
+if [[ "$has_mic" != "" ]]; then
+       modprobe -r mic 
+fi
+
+cp mic.ko /lib/modules/2.6.32-431.el6.x86_64/extra/mic_mod.ko
+
+depmod -a
+
+modprobe mic_mod
index 00e8c49..5089a15 100644 (file)
@@ -1,10 +1,20 @@
-@@ -1399,6 +1399,116 @@
-       return ret;
- }
+--- host/uos_download.orig.c   2014-04-17 17:31:40.071065688 +0200
++++ host/uos_download.c        2014-04-17 18:03:33.043070686 +0200
+@@ -67,6 +67,177 @@
+ #define RESET_FAILED_F2               12870
+ #define RESET_FAILED_F4               13382
  
++
++/**
++ * ==========================================================================
++ " Patched part for getting serial out from the xeon phi
++ */
++
++
 +#define MSG_BOOT  ((0xB0 << 8) | 0x01)
 +#define TASK_NAME_LENGTH 20
 +#define XEON_PHI_BUFFER_LENGTH 1024
++#define XEON_PHI_POLL_GIVEUP 0xFF
 +struct xeon_phi_recv {
 +        struct task_struct *thread;
 +        char task_name[TASK_NAME_LENGTH];
 +        mic_ctx_t *mic_ctx;
 +        uint32_t devid;
 +        union xeon_phi_message data, ctrl;
-+        uint32_t i;
++        uint32_t i, notready, nodata;
 +      MIC_STATUS ms;
 +        ts = (struct xeon_phi_recv *)arg;
 +        mic_ctx = ts->mic_ctx;
 +        devid = mic_ctx->bi_id;
 +      ts->idx=0;
++      /* wait 10 seconds to give the system time to boot */
++      msleep(10000);  
++
 +        printk("[xeon phi %d] : recv thread started.\n", devid);
++      SBOX_WRITE(0, mic_ctx->mmio.va, SBOX_SCRATCH8);
++
++      nodata = XEON_PHI_POLL_GIVEUP;
++      notready=0x1;
 +        while(1) {
-+                i = 0;
++              
 +              ms = mic_ctx->state;
 +               if (!(ms == MIC_SHUTDOWN 
 +                               || ms == MIC_BOOT
 +                         || ms == MIC_ONLINE
 +                       || ms == MIC_BOOTFAIL)
 +                         || mic_ctx->mmio.va == 0) {
-+                      msleep(1000);
++                      notready = !notready;
++                      if (notready) {
++                              msleep(500);                            
++                      } else {
++                              yield();                        
++                      }
 +                        continue;
-+                }
++                }     
 +              ctrl.val = SBOX_READ(mic_ctx->mmio.va, SBOX_SCRATCH8);
 +                if (!ctrl.val) {
-+                               yield();
++                      if (--nodata) {
++                              continue;
++                      }
++                      // reset counter
++                      nodata = XEON_PHI_POLL_GIVEUP;
++                      notready = !notready;
++                      if (notready) {
++                              msleep(100);
++                      } else {
++                              yield();
++                      }
 +                        continue;
 +                }
 +
++                i = 0;
 +                data.val = SBOX_READ(mic_ctx->mmio.va, SBOX_SCRATCH15);
 +                while(i < 4 && ctrl.c[i]) {
-+                      if (ctrl.c[i] != 0x7A) {
-+                              printk("[xeon phi %d] : ERROR invalid ctrl value.%x \n", devid,
-+                                       ctrl.c[i]);
-+                      }
-+                        if (ctrl.c[i]&0x80) {
++                      if (ctrl.c[i]&0x80) {
 +                              i++;
 +                              continue;
 +                      }
++                      if (ctrl.c[i] != 0x7A) {
++                              printk("[xeon phi %d] : ERROR invalid ctrl value.%x\n", devid,
++                                       ctrl.c[i]);
++                      }
++                      /* always issue a new line */
 +                        if (data.c[i] == '\n') {
 +                                ts->buf[ts->idx] = '\0';
 +                                printk("[xeon phi %d] : %s\n", devid, ts->buf);
 +                                ts->idx = 0;
++                      /* there was a "flush" so flush buffer to log */
 +                      } else if (data.c[i] == 0x4){
 +                              ts->buf[ts->idx] = '\0';
 +                                printk("[xeon phi %d] : %s\n", devid, ts->buf);
 +                                ts->idx = 0;
++                      /* buffer is full, flush buffer */
 +                        } else if (ts->idx == XEON_PHI_BUFFER_LENGTH){
 +                                ts->buf[ts->idx] = '\0';
 +                                printk("[xeon phi %d] : %s\n", devid, ts->buf);
 +                                ts->buf[0] = data.c[i];
 +                                ts->idx = 1;
++                      /* just store the char */
 +                        } else {
 +                                ts->buf[ts->idx] = data.c[i];
 +                                ts->idx++;
 +                        }
 +                        i++;
 +                }
++              /* acknowledge the data receive */
 +                SBOX_WRITE(0, mic_ctx->mmio.va, SBOX_SCRATCH8);
 +        }
 +
 +
 +        devid = mic_ctx->bi_id;
 +
-+        printk("Creating recv thread for %d\n", devid);
++        printk("[xeon phpi %d] : Creating recv thread\n", devid);
 +
 +        ts = &(recv_threads[devid]);
 +
 +}
 +
 +
- int
- adapter_init_device(mic_ctx_t *mic_ctx)
++static void xeon_phi_stop_uart_thread(mic_ctx_t *mic_ctx)
++{
++      struct xeon_phi_recv *ts;
++      uint32_t devid;
++
++      devid = mic_ctx->bi_id;
++      ts = &(recv_threads[devid]);
++      
++      if (ts->thread) {       
++              printk("[xeon phi %d] : stopping receive thread\n", devid);
++              // todo: check return value
++              kthread_stop(ts->thread);
++      } else {
++              printk("[xeon phi %d] : no thread to stop ??\n", devid);
++      }
++      memset(ts, 0, sizeof(struct xeon_phi_recv));
++}
++
++
++/**
++ " End of Patch
++ * ==========================================================================
++ */
++
++
+ void ramoops_remove(mic_ctx_t *mic_ctx);
+ static struct proc_dir_entry *ramoops_dir;
+@@ -958,7 +1129,10 @@
+ adapter_stop_device(mic_ctx_t *mic_ctx, int wait_reset, int reattempt)
  {
-@@ -1515,6 +1625,9 @@
-       sku_build_table(mic_ctx);
-       /* Determine the amount of compensation that needs to be applied to MIC's ETC timer */
-       calculate_etc_compensation(mic_ctx);
+       0;
+-
 +      
-+      xeon_phi_setup_uart_threads(mic_ctx);
++      // stop our thread don't call this here
++      //xeon_phi_stop_uart_thread(mic_ctx);
 +      
+       micvcons_stop(mic_ctx);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34) || \
+       defined(RHEL_RELEASE_CODE)
+@@ -1516,6 +1690,8 @@
+       /* Determine the amount of compensation that needs to be applied to MIC's ETC timer */
+       calculate_etc_compensation(mic_ctx);
  
++      xeon_phi_setup_uart_threads(mic_ctx);
++
        return 0;
  
+ adap_init_unmapmmio:
diff --git a/usr/drivers/xeon_phi/Hakefile b/usr/drivers/xeon_phi/Hakefile
new file mode 100644 (file)
index 0000000..6bb95a0
--- /dev/null
@@ -0,0 +1,17 @@
+--------------------------------------------------------------------------
+-- Copyright (c) 2007-2010, ETH Zurich.
+-- All rights reserved.
+--
+-- This file is distributed under the terms in the attached LICENSE file.
+-- If you do not find this file, copies can be found by writing to:
+-- ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
+--
+-- Hakefile for /usr/drivers/xeon_phi
+-- 
+--------------------------------------------------------------------------
+
+[ build application { target = "xeon_phi",
+                      cFiles = [ "main.c" ],
+                      architectures = [ "x86_64" ]
+                    }
+]
diff --git a/usr/drivers/xeon_phi/main.c b/usr/drivers/xeon_phi/main.c
new file mode 100644 (file)
index 0000000..11da963
--- /dev/null
@@ -0,0 +1,15 @@
+/**
+ * \file
+ * \brief Driver for booting the Xeon Phi Coprocessor card on a Barrelfish Host
+ */
+
+/*
+ * Copyright (c) 2014 ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+
+