Changeset 970


Ignore:
Timestamp:
Apr 6, 2015, 11:53:18 AM (9 years ago)
Author:
cfuguet
Message:

bugfix in vci_cc_vcache_wrapper: remove a wrong assert condition

  • Remove a wrong assert condition on the treatment of external requests (CP2) for dcache and icache physical address invalidation.
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/reconfiguration/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp

    r928 r970  
    11391139            else if ((int) r_dcache_xtn_opcode.read() == (int) iss_t::XTN_MMU_ICACHE_PA_INV)
    11401140            {
    1141                 if (sizeof(paddr_t) <= 32)
    1142                 {
    1143                     assert(r_mmu_word_hi.read() == 0 &&
    1144                     "illegal XTN request in ICACHE: high bits should be 0 for 32bit paddr");
    1145                     r_icache_vci_paddr = (paddr_t) r_mmu_word_lo.read();
    1146                 }
    1147                 else
    1148                 {
    1149                     r_icache_vci_paddr = (paddr_t) r_mmu_word_hi.read() << 32 |
    1150                                          (paddr_t) r_mmu_word_lo.read();
    1151                 }
     1141                uint64_t pa = ((uint64_t)r_mmu_word_hi.read() << 32) |
     1142                              ((uint64_t)r_mmu_word_lo.read());
     1143
     1144                r_icache_vci_paddr = (paddr_t)pa;
    11521145                r_icache_fsm = ICACHE_XTN_CACHE_INVAL_PA;
    11531146            }
     
    26402633
    26412634                    case iss_t::XTN_MMU_DCACHE_PA_INV: // dcache, dtlb & itlb access
     2635                    {
     2636                        uint64_t pa = ((uint64_t)r_mmu_word_hi.read() << 32) |
     2637                                      ((uint64_t)r_mmu_word_lo.read());
     2638
     2639                        r_dcache_save_paddr = (paddr_t)pa;
    26422640                        r_dcache_fsm = DCACHE_XTN_DC_INVAL_PA;
    2643                         if (sizeof(paddr_t) <= 32)
    2644                         {
    2645                             assert(r_mmu_word_hi.read() == 0 &&
    2646                             "high bits should be 0 for 32bit paddr");
    2647                             r_dcache_save_paddr = (paddr_t)r_mmu_word_lo.read();
    2648                         }
    2649                         else
    2650                         {
    2651                             r_dcache_save_paddr = (paddr_t)r_mmu_word_hi.read() << 32 |
    2652                                                   (paddr_t)r_mmu_word_lo.read();
    2653                         }
    26542641                        break;
    2655 
     2642                    }
    26562643                    case iss_t::XTN_DCACHE_FLUSH: // itlb and dtlb must be reset
    26572644                        r_dcache_flush_count = 0;
  • trunk/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp

    r896 r970  
    11001100            else if ((int) r_dcache_xtn_opcode.read() == (int) iss_t::XTN_MMU_ICACHE_PA_INV)
    11011101            {
    1102                 if (sizeof(paddr_t) <= 32)
    1103                 {
    1104                     assert(r_mmu_word_hi.read() == 0 &&
    1105                     "illegal XTN request in ICACHE: high bits should be 0 for 32bit paddr");
    1106                     r_icache_vci_paddr = (paddr_t) r_mmu_word_lo.read();
    1107                 }
    1108                 else
    1109                 {
    1110                     r_icache_vci_paddr = (paddr_t) r_mmu_word_hi.read() << 32 |
    1111                                          (paddr_t) r_mmu_word_lo.read();
    1112                 }
     1102                uint64_t pa = ((uint64_t)r_mmu_word_hi.read() << 32) |
     1103                              ((uint64_t)r_mmu_word_lo.read());
     1104
     1105                r_icache_vci_paddr = (paddr_t)pa;
    11131106                r_icache_fsm = ICACHE_XTN_CACHE_INVAL_PA;
    11141107            }
     
    25922585
    25932586                    case iss_t::XTN_MMU_DCACHE_PA_INV: // dcache, dtlb & itlb access
     2587                    {
     2588                        uint64_t pa = ((uint64_t)r_mmu_word_hi.read() << 32) |
     2589                                      ((uint64_t)r_mmu_word_lo.read());
     2590
     2591                        r_dcache_save_paddr = (paddr_t)pa;
    25942592                        r_dcache_fsm = DCACHE_XTN_DC_INVAL_PA;
    2595                         if (sizeof(paddr_t) <= 32)
    2596                         {
    2597                             assert(r_mmu_word_hi.read() == 0 &&
    2598                             "high bits should be 0 for 32bit paddr");
    2599                             r_dcache_save_paddr = (paddr_t)r_mmu_word_lo.read();
    2600                         }
    2601                         else
    2602                         {
    2603                             r_dcache_save_paddr = (paddr_t)r_mmu_word_hi.read() << 32 |
    2604                                                   (paddr_t)r_mmu_word_lo.read();
    2605                         }
    26062593                        break;
    2607 
     2594                    }
    26082595                    case iss_t::XTN_DCACHE_FLUSH: // itlb and dtlb must be reset
    26092596                        r_dcache_flush_count = 0;
Note: See TracChangeset for help on using the changeset viewer.