linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Marcelo Tosatti <marcelo.tosatti@cyclades.com>
To: Dan Malek <dan@embeddededge.com>
Cc: linux-ppc-embedded <linuxppc-embedded@ozlabs.org>
Subject: [RFT] 8xx cpm_hostalloc patch was: allow coherent DMA API to work before main page allocator is set up
Date: Sat, 21 May 2005 19:27:13 -0300	[thread overview]
Message-ID: <20050521222713.GA28813@logos.cnet> (raw)
In-Reply-To: <5d184282e7d324fb009b8dcf6e6f967d@embeddededge.com>

[-- Attachment #1: Type: text/plain, Size: 2299 bytes --]


Can someone with 8xx using the cpm_uart driver please test 
the attached patch? It should avoid corruption of the pinned
8Mbyte CONFIG_PIN_TLB entry, as noted by Dan. 

On Sat, May 21, 2005 at 05:21:47PM -0400, Dan Malek wrote:
> 
> On May 20, 2005, at 1:51 PM, Marcelo Tosatti wrote:
> 
> >I must be missing something very obvious here, can you explain how
> >did you arrange things in v2.4 such that the console's ->setup
> >method is called _after_ mem_init() ?
> 
> The driver used to use the serial port configuration as left by the
> boot rom until very late into the initialization.  As I have said many
> times in the past, the serial driver went through three different
> levels of configuration.  There was an early configuration that was
> used for kgdb, a later one used by the serial kernel printk, and
> finally a full configuration by the serial driver. 

I have missed your statements about that in the past.

OK, the v2.4 driver is using the dual port RAM: 

        /* Allocate space for two FIFOs.  We can't allocate from host
         * memory yet because vm allocator isn't initialized
         * during this early console init.
         */
        dp_addr = m8xx_cpm_dpalloc(2*EARLY_BUF_SIZE);
        mem_addr = (uint)(&cpmp->cp_dpmem[dp_addr]);

> It's sad that "moving forward" is done at a cost of throwing away
> features that were important. 

Now that I think of it, no v2.6 driver should be calling
dma_alloc_coherent() before mem_init(). I was seeing the problem
because we're still using the old uart driver, which does that, and 
our timer setup routine also.

> is a quick fix, but this further ensures features like pinned TLB
> entries won't work. 

Actually, the quick fix to use bootmem allocator ensures that the 
pinned TLB is _preserved_ (by using a pagetableentry from the consistent 
DMA address space to mark as uncached and invalidate, instead of a pte 
from the kernel direct mapped virtual space which blows away the 8Mbyte
entry - current v2.6 state).

Why do you say that "further ensures that features like pinned TLB 
entries won't work" ? 

If there is really a problem with using the bootmem allocator for 
noncacheable purposes (which I can't see), it should be pretty easy 
to modify cpm_uart to use dpram instead of host bootmem RAM, right?


[-- Attachment #2: 8xx.patch --]
[-- Type: text/plain, Size: 1981 bytes --]

--- linux-2.6.11.orig/arch/ppc/syslib/m8xx_setup.c	2005-05-20 13:53:17.000000000 -0300
+++ linux-2.6.11/arch/ppc/syslib/m8xx_setup.c	2005-05-20 15:59:24.000000000 -0300
@@ -57,7 +57,7 @@
 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 @@
 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();
--- linux-2.6.11.orig/arch/ppc/8xx_io/commproc.c	2005-05-20 13:53:17.000000000 -0300
+++ linux-2.6.11/arch/ppc/8xx_io/commproc.c	2005-05-22 00:29:42.000000000 -0300
@@ -39,8 +39,6 @@
 #include <asm/tlbflush.h>
 #include <asm/rheap.h>
 
-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 */
@@ -111,11 +109,10 @@
 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 +140,6 @@
 	/* 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;

  reply	other threads:[~2005-05-22  3:51 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-20 14:12 [PATCH] allow coherent DMA API to work before main page allocator is set up Marcelo Tosatti
2005-05-20 21:03 ` Dan Malek
2005-05-20 17:51   ` Marcelo Tosatti
2005-05-21 21:21     ` Dan Malek
2005-05-21 22:27       ` Marcelo Tosatti [this message]
2005-05-23  6:27         ` [RFT] 8xx cpm_hostalloc patch was: " Pantelis Antoniou
2005-05-23 15:19           ` Dan Malek
2005-05-27 15:48         ` [PATCH] PSC with devfs on 5200 Mark Chambers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050521222713.GA28813@logos.cnet \
    --to=marcelo.tosatti@cyclades.com \
    --cc=dan@embeddededge.com \
    --cc=linuxppc-embedded@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).