From: David Gibson <david@gibson.dropbear.id.au>
To: g r1x <gr1xmail@gmail.com>
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: How to access DCR registers in powerpc440gx? Got err when use macro def in Linux kernel
Date: Fri, 11 Sep 2009 15:31:06 +1000 [thread overview]
Message-ID: <20090911053106.GB11840@yookeroo.seuss> (raw)
In-Reply-To: <8abf57fa0909102114hf935c21h5dd727ba2a9a4825@mail.gmail.com>
On Fri, Sep 11, 2009 at 12:14:55PM +0800, g r1x wrote:
> Now, I'm writing a DMA driver on powerpc
> 440gx platform(2.6.26.5), as the only way to set up DMA Controller is
> to access it's dcr registers with 'mfdcr' and 'mtdcr'.
>
> I've found some dma code in Linux kernel 2.6.26.5, so I copy the code
> u wrote to my driver module directory, and include them, but when I
> compile my driver, gcc complains following err messages:
[snip]
> #define mfdcr(rn) \
> ({ \
> unsigned long rval; \
> asm volatile("mfdcr %0,%1" : "=r"(rval) : "i"(rn)); \
> rval; \
> })
This form of mfdcr macro will only work when passed a constant DCR
number. That's a limitation in the actual CPU implementation of the
mfdcr instruction (the DCR number is part of the instruction opcode).
Some newer cores have an indirect for of mfdcr which allows the DCR
number to be specified in a register, but I don't know if 440gx is one
of them.
In current kernels we have some DCR macros that use a big table of
pre-generated instructions in order to allow accesses to runtime
computed DCR numbers. But either they didn't exist in 2.6.26, or they
have a different name, I don't remember.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
next prev parent reply other threads:[~2009-09-11 5:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-10 17:24 How to access DCR registers in powerpc440gx? Got err when use macro def in Linux kernel g r1x
2009-09-11 4:14 ` g r1x
2009-09-11 5:31 ` David Gibson [this message]
2009-09-14 12:59 ` Arnd Bergmann
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=20090911053106.GB11840@yookeroo.seuss \
--to=david@gibson.dropbear.id.au \
--cc=gr1xmail@gmail.com \
--cc=linuxppc-dev@lists.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