@@ -643,7 +643,7 @@ static int get_physical_address(CPUM68KState *env, hwaddr *physical,
643
643
/* Transparent Translation Register bit */
644
644
env -> mmu .mmusr = M68K_MMU_T_040 | M68K_MMU_R_040 ;
645
645
}
646
- * physical = address & TARGET_PAGE_MASK ;
646
+ * physical = address ;
647
647
* page_size = TARGET_PAGE_SIZE ;
648
648
return 0 ;
649
649
}
@@ -771,7 +771,7 @@ static int get_physical_address(CPUM68KState *env, hwaddr *physical,
771
771
}
772
772
* page_size = 1 << page_bits ;
773
773
page_mask = ~(* page_size - 1 );
774
- * physical = next & page_mask ;
774
+ * physical = ( next & page_mask ) + ( address & ( * page_size - 1 )) ;
775
775
776
776
if (access_type & ACCESS_PTEST ) {
777
777
env -> mmu .mmusr |= next & M68K_MMU_SR_MASK_040 ;
@@ -820,10 +820,12 @@ hwaddr m68k_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
820
820
if (env -> sr & SR_S ) {
821
821
access_type |= ACCESS_SUPER ;
822
822
}
823
+
823
824
if (get_physical_address (env , & phys_addr , & prot ,
824
825
addr , access_type , & page_size ) != 0 ) {
825
826
return -1 ;
826
827
}
828
+
827
829
return phys_addr ;
828
830
}
829
831
@@ -887,10 +889,8 @@ bool m68k_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
887
889
ret = get_physical_address (& cpu -> env , & physical , & prot ,
888
890
address , access_type , & page_size );
889
891
if (likely (ret == 0 )) {
890
- address &= TARGET_PAGE_MASK ;
891
- physical += address & (page_size - 1 );
892
- tlb_set_page (cs , address , physical ,
893
- prot , mmu_idx , TARGET_PAGE_SIZE );
892
+ tlb_set_page (cs , address & TARGET_PAGE_MASK ,
893
+ physical & TARGET_PAGE_MASK , prot , mmu_idx , page_size );
894
894
return true;
895
895
}
896
896
@@ -1379,9 +1379,8 @@ void HELPER(ptest)(CPUM68KState *env, uint32_t addr, uint32_t is_read)
1379
1379
ret = get_physical_address (env , & physical , & prot , addr ,
1380
1380
access_type , & page_size );
1381
1381
if (ret == 0 ) {
1382
- addr &= TARGET_PAGE_MASK ;
1383
- physical += addr & (page_size - 1 );
1384
- tlb_set_page (env_cpu (env ), addr , physical ,
1382
+ tlb_set_page (env_cpu (env ), addr & TARGET_PAGE_MASK ,
1383
+ physical & TARGET_PAGE_MASK ,
1385
1384
prot , access_type & ACCESS_SUPER ?
1386
1385
MMU_KERNEL_IDX : MMU_USER_IDX , page_size );
1387
1386
}
0 commit comments