[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[XenPPC] [xenppc-unstable] [POWERPC][XEN] HID paranoia!



# HG changeset patch
# User Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
# Node ID 3e99cf85d57d5fa56fe5eb47b019f2989009d50c
# Parent  67953e195eb74f79ab2fd70315e585a7f8941161
[POWERPC][XEN] HID paranoia!

Used some HIDs to debug an issue, so decided to clean some stuff up.

Signed-off-by: Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
---
 xen/arch/powerpc/powerpc64/ppc970.c            |  109 ++++++++++++-------------
 xen/include/asm-powerpc/powerpc64/ppc970-hid.h |  105 ++++++++++++++++--------
 xen/include/asm-powerpc/powerpc64/processor.h  |    7 +
 3 files changed, 132 insertions(+), 89 deletions(-)

diff -r 67953e195eb7 -r 3e99cf85d57d xen/arch/powerpc/powerpc64/ppc970.c
--- a/xen/arch/powerpc/powerpc64/ppc970.c       Wed Aug 30 15:09:47 2006 -0400
+++ b/xen/arch/powerpc/powerpc64/ppc970.c       Wed Aug 30 18:01:15 2006 -0400
@@ -34,17 +34,17 @@
 
 struct rma_settings {
     int order;
-    int rmlr0;
-    int rmlr12;
+    int rmlr_0;
+    int rmlr_1_2;
 };
 
 static struct rma_settings rma_orders[] = {
-    { .order = 26, .rmlr0 = 0, .rmlr12 = 3, }, /*  64 MB */
-    { .order = 27, .rmlr0 = 1, .rmlr12 = 3, }, /* 128 MB */
-    { .order = 28, .rmlr0 = 1, .rmlr12 = 0, }, /* 256 MB */
-    { .order = 30, .rmlr0 = 0, .rmlr12 = 2, }, /*   1 GB */
-    { .order = 34, .rmlr0 = 0, .rmlr12 = 1, }, /*  16 GB */
-    { .order = 38, .rmlr0 = 0, .rmlr12 = 0, }, /* 256 GB */
+    { .order = 26, .rmlr_0 = 0, .rmlr_1_2 = 3, }, /*  64 MB */
+    { .order = 27, .rmlr_0 = 1, .rmlr_1_2 = 3, }, /* 128 MB */
+    { .order = 28, .rmlr_0 = 1, .rmlr_1_2 = 0, }, /* 256 MB */
+    { .order = 30, .rmlr_0 = 0, .rmlr_1_2 = 2, }, /*   1 GB */
+    { .order = 34, .rmlr_0 = 0, .rmlr_1_2 = 1, }, /*  16 GB */
+    { .order = 38, .rmlr_0 = 0, .rmlr_1_2 = 0, }, /* 256 GB */
 };
 
 static uint log_large_page_sizes[] = {
@@ -130,22 +130,21 @@ void cpu_initialize(int cpuid)
     mtdec(timebase_freq);
     mthdec(timebase_freq);
 
-    hid0.bits.nap = 1;
-    hid0.bits.dpm = 1;
-    hid0.bits.nhr = 1;
-    hid0.bits.hdice = 1; /* enable HDEC */
-    hid0.bits.eb_therm = 1;
-    hid0.bits.en_attn = 1;
+    hid0.bits.nap = 1;      /* NAP */
+    hid0.bits.dpm = 1;      /* Dynamic Power Management */
+    hid0.bits.nhr = 0;      /* ! Not Hard Reset */
+    hid0.bits.hdice_en = 1; /* enable HDEC */
+    hid0.bits.en_therm = 0; /* ! Enable ext thermal ints */
+    /* onlu debug Xen should do this */
+    hid0.bits.en_attn = 1; /* Enable attn instruction */
+
 #ifdef SERIALIZE
-    ulong s = 0;
-
-    s |= 1UL << (63-0);     /* one_ppc */
-    s |= 1UL << (63-2);     /* isync_sc */
-    s |= 1UL << (63-16);     /* inorder */
+    hid0.bits.one_ppc = 1;
+    hid0.bits.isync_sc = 1;
+    hid0.bits.inorder = 1;
     /* may not want these */
-    s |= 1UL << (63-1);     /* do_single */
-    s |= 1UL << (63-3);     /* ser-gp */
-    hid0.word |= s;
+    hid0.bits.do_single = 1;
+    hid0.bits.ser-gp = 1;
 #endif
 
     printk("CPU #%d: Hello World! SP = %lx TOC = %lx HID0 = %lx\n", 
@@ -153,36 +152,36 @@ void cpu_initialize(int cpuid)
 
     mthid0(hid0.word);
 
-    hid1.bits.bht_pm = 7;
-    hid1.bits.en_ls = 1;
-
-    hid1.bits.en_cc = 1;
-    hid1.bits.en_ic = 1;
-
-    hid1.bits.pf_mode = 2;
-
-    hid1.bits.en_if_cach = 1;
-    hid1.bits.en_ic_rec = 1;
-    hid1.bits.en_id_rec = 1;
-    hid1.bits.en_er_rec = 1;
-
-    hid1.bits.en_sp_itw = 1;
+    hid1.bits.bht_pm = 7; /* branch history table prediction mode */
+    hid1.bits.en_ls = 1; /* enable link stack */
+
+    hid1.bits.en_cc = 1; /* enable count cache */
+    hid1.bits.en_ic = 1; /* enable inst cache */
+
+    hid1.bits.pf_mode = 2; /* prefetch mode */
+
+    hid1.bits.en_if_cach = 1; /* i-fetch cacheability control */
+    hid1.bits.en_ic_rec = 1; /* i-cache parity error recovery */
+    hid1.bits.en_id_rec = 1; /* i-dir parity error recovery */
+    hid1.bits.en_er_rec = 1; /* i-ERAT parity error recovery */
+
+    hid1.bits.en_sp_itw = 1; /* En speculative tablewalks */
     mthid1(hid1.word);
 
     /* no changes to hid4 but we want to make sure that secondaries
      * are sane */
-    if (cpuid > 0)
-        mthid4(hid4.word);
-
-    hid5.bits.DCBZ_size = 0;
-    hid5.bits.DCBZ32_ill = 0;
+    hid4.bits.lg_pg_dis = 0;    /* make sure we enable large pages */
+    mthid4(hid4.word);
+
+    hid5.bits.DCBZ_size = 0; /* make dcbz size 32 bytes */
+    hid5.bits.DCBZ32_ill = 0; /* make dzbz 32byte illeagal */
     mthid5(hid5.word);
 
-#ifdef DUMP_HIDS
-    printk("hid0 0x%lx\n"
-           "hid1 0x%lx\n"
-           "hid4 0x%lx\n"
-           "hid5 0x%lx\n",
+#ifndef DUMP_HIDS
+    printk("hid0 0x%016lx\n"
+           "hid1 0x%016lx\n"
+           "hid4 0x%016lx\n"
+           "hid5 0x%016lx\n",
            mfhid0(), mfhid1(), mfhid4(), mfhid5());
 #endif
 
@@ -200,18 +199,18 @@ void cpu_init_vcpu(struct vcpu *v)
 
     hid4.word = mfhid4();
 
-    hid4.bits.lpes0 = 0; /* exceptions set MSR_HV=1 */
-    hid4.bits.lpes1 = 1; /* RMA applies */
-
-    hid4.bits.rmor = page_to_maddr(d->arch.rma_page) >> 26;
-
-    hid4.bits.lpid01 = d->domain_id & 3;
-    hid4.bits.lpid25 = (d->domain_id >> 2) & 0xf;
+    hid4.bits.lpes_0 = 0; /* external exceptions set MSR_HV=1 */
+    hid4.bits.lpes_1 = 1; /* RMA applies */
+
+    hid4.bits.rmor_0_15 = page_to_maddr(d->arch.rma_page) >> 26;
+
+    hid4.bits.lpid_0_1 = d->domain_id & 3;
+    hid4.bits.lpid_2_5 = (d->domain_id >> 2) & 0xf;
 
     rma_settings = cpu_find_rma(d->arch.rma_order + PAGE_SHIFT);
     ASSERT(rma_settings != NULL);
-    hid4.bits.rmlr0 = rma_settings->rmlr0;
-    hid4.bits.rmlr12 = rma_settings->rmlr12;
+    hid4.bits.rmlr_0 = rma_settings->rmlr_0;
+    hid4.bits.rmlr_1_2 = rma_settings->rmlr_1_2;
 
     v->arch.cpu.hid4.word = hid4.word;
 }
diff -r 67953e195eb7 -r 3e99cf85d57d 
xen/include/asm-powerpc/powerpc64/ppc970-hid.h
--- a/xen/include/asm-powerpc/powerpc64/ppc970-hid.h    Wed Aug 30 15:09:47 
2006 -0400
+++ b/xen/include/asm-powerpc/powerpc64/ppc970-hid.h    Wed Aug 30 18:01:15 
2006 -0400
@@ -29,22 +29,30 @@
 
 union hid0 {
     struct hid0_bits {
-        ulong   _unused_0_8:    9;
-        ulong   nap:            1;
-        ulong   _unused_10:     1;
-        ulong   dpm:            1;  /* Dynamic Power Management */
-        ulong   _unused_12_14:  3;
-        ulong   nhr:            1;  /* Not Hard Reset */
-        ulong   inorder:        1;
+        ulong   one_ppc:        1; /* One PowerPC AS insn per dispatch group */
+        ulong   do_single:      1; /* Single group completion */
+        ulong   isync_sc:       1; /* Disable isync scoreboard optimization */
+        ulong   ser_gp:         1; /* Serial Group Dispatch */
+        ulong  _reserved_04_08: 5;
+        ulong   nap:            1; /* Nap */
+        ulong   _reserved_10:   1;
+        ulong   dpm:            1; /* Dynamic Power Management */
+        ulong   _reserved_12:   1;
+        ulong   tg:             1; /* Perfmon threshold granualrity control */
+        ulong   hang_dis:       1; /* Disable cpu hang detection mechanism */
+        ulong   nhr:            1; /* Not Hard Reset */
+        ulong   inorder:        1; /* Serial Group Issue */
         ulong   _reserved17:    1;
-        ulong   tb_ctrl:        1;
-        ulong   ext_tb_enb:     1;  /* timebase is linked to external clock */
-        ulong   _unused_20_22:  3;
-        ulong   hdice:          1;  /* HDEC enable */
-        ulong   eb_therm:       1;  /* Enable ext thermal ints */
+        ulong   tb_ctrl:        1; /* Enable time base couting while stopped */
+        ulong   ext_tb_enb:     1; /* timebase is linked to external clock */
+        ulong   _unused_20_21:  2;
+        ulong   ciabr_en:       1;  /* CIABR enable */
+        ulong   hdice_en:       1;  /* HDEC enable */
+        ulong   en_therm:       1;  /* Enable ext thermal ints */
         ulong   _unused_25_30:  6;
         ulong   en_attn:        1;  /* Enable attn instruction */
-        ulong   _unused_32_63:  32;
+        ulong   en_mck:         1;  /* En external machine check interrupts */
+        ulong   _unused_33_63:  31;
     } bits;
     ulong word;
 };
@@ -62,11 +70,11 @@ union hid1 {
         ulong en_ic_rec:        1; /* i-cache parity error recovery */
         ulong en_id_rec:        1; /* i-dir parity error recovery */
         ulong en_er_rec:        1; /* i-ERAT parity error recovery */
-        ulong ic_pe:            1;
-        ulong icd0_pe:          1;
+        ulong ic_pe:            1; /* Force instruction cache parity error */
+        ulong icd0_pe:          1; /* Force insn cache dir 0 parity error */
         ulong _reserved_16:     1;
-        ulong ier_pe:           1;
-        ulong en_sp_itw:        1;
+        ulong ier_pe:           1; /* force i-ERAT parity error (inject) */
+        ulong en_sp_itw:        1; /* En speculative tablewalks */
         ulong _reserved_19_63:  45;
     } bits;
     ulong word;
@@ -74,32 +82,61 @@ union hid1 {
 
 union hid4 {
     struct hid4_bits {
-        ulong   lpes0:          1;  /* LPAR Environment Selector bit 0 */
-        ulong   rmlr12:         2;  /* RMLR 1:2 */
-        ulong   lpid25:         4;  /* LPAR ID bits 2:5 */
-        ulong   rmor:           16; /* real mode offset region */
-        ulong   rm_ci:          1;  /* real mode cache-inhibit */
-        ulong   force_ai:       1;  /* Force alignment interrupt */
-        ulong   _unused:        32;
-        ulong   lpes1:          1;  /* LPAR Environment Selector bit 1 */
-        ulong   rmlr0:          1;  /* RMLR 0 */
+        ulong   lpes_0:         1; /* LPAR Environment Selector bit 0 */
+        ulong   rmlr_1_2:       2; /* RMLR 1:2 */
+        ulong   lpid_2_5:       4; /* LPAR ID bits 2:5 */
+        ulong   rmor_0_15:     16; /* real mode offset region */
+        ulong   rm_ci:          1; /* real mode cache-inhibit */
+        ulong   force_ai:       1; /* Force alignment interrupt */
+        ulong   dis_pref:       1; /* disable prefetching */
+        ulong   res_pref:       1; /* reset data prefetching mechanism */
+        ulong   en_sp_dtw:      1; /* enable speculative load tablewalk */
+        ulong   l1dc_flsh:      1; /* L1 cache flash invalidate */
+        ulong   dis_derpc:      2; /* Disable d-ERAT parity checking */
+        ulong   dis_derpg:      1; /* Disable d-ERAT parity generation */
+        ulong   dis_derat:      2; /* Disable d-ERAT */
+        ulong   dis_dctpc:      2; /* Dis data cache tag paritiy checking */
+        ulong   dis_dctpg:      1; /* Dis data cache tag paritiy generation */
+        ulong   dis_dcset:      2; /* Disable data cache set */
+        ulong   dis_dcpc:       2; /* Disable data cache paritiy checking */
+        ulong   dis_dcpg:       1; /* Disable data cache paritiy generation */
+        ulong   dis_dcrtpc:     2; /* Disable data cache real add tag parity */
+        ulong   dis_tlbpc:      4; /* Disable TLB paritiy checking */
+        ulong   dis_tlbpg:      1; /* Disable TLB paritiy generation */
+        ulong   dis_tlbset:     4; /* Disable TLB set */
+        ulong   dis_slbpc:      1; /* Disable SLB paritiy checking */
+        ulong   dis_slbpg:      1; /* Disable SLB paritiy generation */
+        ulong   mck_inj:        1; /* Machine check inject enable */
+        ulong   dis_stfwd:      1; /* Disbale store forwarding */
+        ulong   lpes_1:         1;  /* LPAR Environment Selector bit 1 */
+        ulong   rmlr_0:         1;  /* RMLR 0 */
         ulong   _reserved:      1;
         ulong   dis_splarx:     1;  /* Disable spec. lwarx/ldarx */
         ulong   lg_pg_dis:      1;  /* Disable large page support */
-        ulong   lpid01:         2;  /* LPAR ID bits 0:1 */
+        ulong   lpid_0_1:       2;  /* LPAR ID bits 0:1 */
     } bits;
     ulong word;
 };
 
 union hid5 {
     struct hid5_bits {
-        ulong  _reserved_0_31:  32;
-        ulong   hrmor:          16;
-        ulong   _reserver_48_49:2;
-        ulong   _unused_50_55:  6;
-        ulong   DCBZ_size:      1;
-        ulong   DCBZ32_ill:     1;
-        ulong  _unused_58_63:   6;
+        ulong _reserved_0_31: 32;
+        ulong hrmor_0_15:     16;
+        ulong _reserved_48_49: 2;
+        ulong DC_mck:          1; /* Machine check enabled for dcache errors */
+        ulong dis_pwrsave:     1; /* Dis pwrsave on on L1 and d-ERAT */
+        ulong force_G:         1; /* Force gaurded load */
+        ulong DC_repl:         1; /* D-Cache replacement algo */
+        ulong hwr_stms:        1; /* Number of available HW prefetch streams */
+        ulong dst_noop:        1; /* D-stream Touch no-op */
+        ulong DCBZ_size:       1; /* make dcbz size 32 bytes */
+        ulong DCBZ32_ill:      1; /* make dzbz 32byte illeagal */
+        ulong tlb_map:         1; /* TLB mapping */
+        ulong lmq_port:        1; /* Demand miss (LMQ to STS) */
+        ulong lmq_size_0:      1; /* number of outstanding req. to STS */
+        ulong  _reserved_61:   1;
+        ulong  tch_nop:        1; /* make dcbtand dcbtst ack like no-ops */
+        ulong  lmq_size_1:     1; /* second bit to lmq_size_0 */
     } bits;
     ulong word;
 };
diff -r 67953e195eb7 -r 3e99cf85d57d 
xen/include/asm-powerpc/powerpc64/processor.h
--- a/xen/include/asm-powerpc/powerpc64/processor.h     Wed Aug 30 15:09:47 
2006 -0400
+++ b/xen/include/asm-powerpc/powerpc64/processor.h     Wed Aug 30 18:01:15 
2006 -0400
@@ -138,6 +138,12 @@ static inline void mthid0(ulong val)
     __asm__ __volatile__ (
             "sync\n"
             "mtspr %0, %1\n"
+            "mfspr %0, %1\n"
+            "mfspr %0, %1\n"
+            "mfspr %0, %1\n"
+            "mfspr %0, %1\n"
+            "mfspr %0, %1\n"
+            "mfspr %0, %1\n"
             "isync\n"
             : : "i"(SPRN_HID0), "r"(val));
 }
@@ -152,6 +158,7 @@ static inline void mthid1(ulong val)
 {
     __asm__ __volatile__ (
             "sync\n"
+            "mtspr %0, %1\n"
             "mtspr %0, %1\n"
             "isync\n"
             : : "i"(SPRN_HID1), "r"(val));

_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ppc-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.