linux-mips
[Top] [All Lists]

Re: VR4131 - MQ1132 - UPD63335

To: "Suresh. R" <suresh@mistralsoftware.com>
Subject: Re: VR4131 - MQ1132 - UPD63335
From: Ralf Baechle <ralf@linux-mips.org>
Date: Sat, 17 Jan 2004 13:20:22 +0100
Cc: linux-mips@linux-mips.org
In-reply-to: <40079391.7080301@mistralsoftware.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <40079391.7080301@mistralsoftware.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.4.1i
On Fri, Jan 16, 2004 at 01:02:33PM +0530, Suresh. R wrote:

>   This might be a very basic question, but I am very new to this field. 
> So please help me.
> 
> I am writing a linux device driver for UPD63335 audio codec. Its 
> controlled through the MQ1132 co-processor. The VR4131 is the processor. 
> The memory of MQ1132 is mapped to the processor memory in Kseg1 (0xA000 
> 0000 onwards) which the manual says is TLB Unmapped region. Now my 
> question is is it necessary to map this region before using it in Linux. 
> Actually I have WinCE code for my reference. In that code the programmer 
> is mapping the region using Virtual Cpoy and Virtual Alloc. Is it 
> necessary to do that or Can I directly address the memory locatoin.

Generally a driver under Linux maps a device in it's initialization
routine with a bit of code like

#define FOO_BASE        0x12340000UL            /* physical address */
#define FOO_SIZE        0x00001000UL

...
        struct foo_regs *base;

        base = ioremap(0x1234, FOO_SIZE);
        if (!base) {
                /* Failed, game over  */
                harakiri();
                ...
        }

        /* Success, make it blink ... */
        foo->blinkenlight = 42;
...
        /* Done, unmap before exiting.
        unmap(base);
...

This removes all knowledge about how a particular architecture handles
mappings from the driver and therefore is generally the prefered way in
Linux.

Linux/MIPS optimize the case where an unmapped area can be used, so no
runtime overhead at all.

  Ralf

<Prev in Thread] Current Thread [Next in Thread>