From: Marcelo Tosatti Touching the pte directly causes the 8Mbyte TLB entry to be invalidated. This has been fixed in v2.4 for ages. Signed-off-by: Marcelo Tosatti Signed-off-by: Andrew Morton --- arch/ppc/8xx_io/commproc.c | 18 +----------------- arch/ppc/syslib/m8xx_setup.c | 8 ++------ 2 files changed, 3 insertions(+), 23 deletions(-) diff -puN arch/ppc/8xx_io/commproc.c~ppc32-8xx-commproc-avoid-direct-pte-manipulation-use-dma-coherent-api-instead arch/ppc/8xx_io/commproc.c --- devel/arch/ppc/8xx_io/commproc.c~ppc32-8xx-commproc-avoid-direct-pte-manipulation-use-dma-coherent-api-instead 2005-08-06 21:24:17.000000000 -0700 +++ devel-akpm/arch/ppc/8xx_io/commproc.c 2005-08-06 21:24:17.000000000 -0700 @@ -39,8 +39,6 @@ #include #include -extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep); - static void m8xx_cpm_dpinit(void); static uint host_buffer; /* One page of host buffer */ static uint host_end; /* end + 1 */ @@ -108,14 +106,11 @@ struct hw_interrupt_type cpm_pic = { .end = cpm_eoi, }; -extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr); - void -m8xx_cpm_reset(uint bootpage) +m8xx_cpm_reset(void) { volatile immap_t *imp; volatile cpm8xx_t *commproc; - pte_t *pte; imp = (immap_t *)IMAP_ADDR; commproc = (cpm8xx_t *)&imp->im_cpm; @@ -143,17 +138,6 @@ m8xx_cpm_reset(uint bootpage) /* Reclaim the DP memory for our use. */ m8xx_cpm_dpinit(); - /* get the PTE for the bootpage */ - if (!get_pteptr(&init_mm, bootpage, &pte)) - panic("get_pteptr failed\n"); - - /* and make it uncachable */ - pte_val(*pte) |= _PAGE_NO_CACHE; - _tlbie(bootpage); - - host_buffer = bootpage; - host_end = host_buffer + PAGE_SIZE; - /* Tell everyone where the comm processor resides. */ cpmp = (cpm8xx_t *)commproc; diff -puN arch/ppc/syslib/m8xx_setup.c~ppc32-8xx-commproc-avoid-direct-pte-manipulation-use-dma-coherent-api-instead arch/ppc/syslib/m8xx_setup.c --- devel/arch/ppc/syslib/m8xx_setup.c~ppc32-8xx-commproc-avoid-direct-pte-manipulation-use-dma-coherent-api-instead 2005-08-06 21:24:17.000000000 -0700 +++ devel-akpm/arch/ppc/syslib/m8xx_setup.c 2005-08-06 21:24:17.000000000 -0700 @@ -57,7 +57,7 @@ unsigned char __res[sizeof(bd_t)]; extern void m8xx_ide_init(void); extern unsigned long find_available_memory(void); -extern void m8xx_cpm_reset(uint cpm_page); +extern void m8xx_cpm_reset(); extern void m8xx_wdt_handler_install(bd_t *bp); extern void rpxfb_alloc_pages(void); extern void cpm_interrupt_init(void); @@ -70,13 +70,9 @@ board_init(void) void __init m8xx_setup_arch(void) { - int cpm_page; - - cpm_page = (int) alloc_bootmem_pages(PAGE_SIZE); - /* Reset the Communication Processor Module. */ - m8xx_cpm_reset(cpm_page); + m8xx_cpm_reset(); #ifdef CONFIG_FB_RPX rpxfb_alloc_pages(); _