diff options
Diffstat (limited to 'results/classifier/deepseek-2-tmp/output/mistranslation/1587535')
| -rw-r--r-- | results/classifier/deepseek-2-tmp/output/mistranslation/1587535 | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/results/classifier/deepseek-2-tmp/output/mistranslation/1587535 b/results/classifier/deepseek-2-tmp/output/mistranslation/1587535 new file mode 100644 index 000000000..5c52c0aae --- /dev/null +++ b/results/classifier/deepseek-2-tmp/output/mistranslation/1587535 @@ -0,0 +1,31 @@ + +Incorrect MAS1_TSIZE_SHIFT in ppce500_spin.c causes incorrectly sized TLB. + +When e500 PPC is booted multi-core, the non-boot cores are started via +the spin table. ppce500_spin.c:spin_kick() calls +mmubooke_create_initial_mapping() to allocate a 64MB TLB entry, but +the created TLB entry is only 256KB. + +The root cause is that the function computing the size of the TLB +entry, namely booke206_page_size_to_tlb assumes MAS1.TSIZE as defined +by latter PPC cores, specifically n to the power of FOUR * 1KB. The +result is then used by mmubooke_create_initial_mapping using +MAS1_TSIZE_SHIFT, but MAS1_TSIZE_SHIFT is defined assuming TLB entries +are n to the power of TWO * 1KB. I.e., a difference of shift=7 or +shift=8. + +Simply changing MAS1_TSIZE_SHIFT from 7 to 8 is not appropriate since +the macro is used elsewhere. + +Removing the ">>1" from: + +> static inline hwaddr booke206_page_size_to_tlb(uint64_t size) +> { +> return ctz32(size >> 10) >> 1; + +and adding an appropriate comment is what I used as a work around: + +> static inline hwaddr booke206_page_size_to_tlb(uint64_t size) +> { +> // resulting size is based on MAS1_TSIZE_SHIFT=7 TLB size. +> return ctz32(size >> 10); \ No newline at end of file |