public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Tanmay Inamdar <tinamdar@apm.com>
Cc: Arnd Bergmann <arnd@arndb.de>,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] powerpc/40x: Add APM8018X SOC support
Date: Mon, 28 Nov 2011 10:19:17 +1100	[thread overview]
Message-ID: <1322435957.23348.23.camel@pasglop> (raw)
In-Reply-To: <CACoXjcnfCM8Z5qFfrHtxsXkpf492LVbkDA3X=a9dRv9Lcv7Asw@mail.gmail.com>

On Fri, 2011-11-25 at 17:49 +0530, Tanmay Inamdar wrote:

>         
>         >
>         > +#if defined(CONFIG_APM8018X)
>         > +/* CPR */
>         > +#define DCRN_CPR0_CONFIG_ADDR        0xa
>         > +#define DCRN_CPR1_CONFIG_DATA        0xb
>         > +/* AHB */
>         > +#define DCRN_SDR1_CONFIG_ADDR        0xc
>         > +#define DCRN_SDR1_CONFIG_DATA        0xd
>         > +#else
>         >  /* CPRs (440GX and 440SP/440SPe) */
>         >  #define DCRN_CPR0_CONFIG_ADDR        0xc
>         >  #define DCRN_CPR0_CONFIG_DATA        0xd
>         > +#endif /* CONFIG_APM8018X */
>         
>         
>         same comment as above.
>  
> Some existing drivers use these macros. If I change the names, I will
> have to update the
> driver code.

Right, the best approach is to create a small wrapper that provides cpr
and sdr accesses using helpers. That way you can:

 - Properly lock since it's all indirect

 - Obtain the right DCRs at boot time, stick them in variables
   and use them at runtime, avoiding the hard coded constants completely

 - Make the code generally look much better

Ie. Provide something like read_sdr1() and write_sdr1() accessors and
change the drivers to use them.

>         > diff --git a/arch/powerpc/kernel/cputable.c
>         b/arch/powerpc/kernel/cputable.c
>         > index edae5bb..e5c51a6 100644
>         > --- a/arch/powerpc/kernel/cputable.c
>         > +++ b/arch/powerpc/kernel/cputable.c
>         > @@ -1505,6 +1505,58 @@ static struct cpu_spec __initdata
>         cpu_specs[] = {
>         >               .machine_check          = machine_check_4xx,
>         >               .platform               = "ppc405",
>         >       },
>         > +     {       /* APM80186-SK */
>         > +             .pvr_mask               = 0xffffffff,
>         > +             .pvr_value              = 0x7ff11432,
>         
>         
>         If you mask out the lower bits, you only need a single entry
>         instead of
>         four identical ones.
> 
> You are right. But each PVR represent different version of SOC. If I
> create single entry, then I will have to give generic cpu_name which I
> don't want.

Note that you should really tell you designers to move away from using
the PVR to identify the SoC's. This is BAD and isn't sustainable long
run. Stick to representing the core itself in the PVR and provide a
different mechanism to identify the SoC (different SPR would do, or even
a DCR).

>         > --- a/arch/powerpc/kernel/udbg_16550.c
>         > +++ b/arch/powerpc/kernel/udbg_16550.c
>         > @@ -18,6 +18,19 @@ extern void real_writeb(u8 data, volatile
>         u8 __iomem *addr);
>         >  extern u8 real_205_readb(volatile u8 __iomem  *addr);
>         >  extern void real_205_writeb(u8 data, volatile u8 __iomem
>         *addr);
>         >
>         > +#ifdef CONFIG_UART_16550_WORD_ADDRESSABLE
>         > +struct NS16550 {
>         > +     /* this struct must be packed */
>         > +     unsigned char rbr;  /* 0 */ u8 s0[3];
>         > +     unsigned char ier;  /* 1 */ u8 s1[3];
>         > +     unsigned char fcr;  /* 2 */ u8 s2[3];
>         > +     unsigned char lcr;  /* 3 */ u8 s3[3];
>         > +     unsigned char mcr;  /* 4 */ u8 s4[3];
>         > +     unsigned char lsr;  /* 5 */ u8 s5[3];
>         > +     unsigned char msr;  /* 6 */ u8 s6[3];
>         > +     unsigned char scr;  /* 7 */ u8 s7[3];
>         > +};
>         > +#else
>         >  struct NS16550 {
>         >       /* this struct must be packed */
>         >       unsigned char rbr;  /* 0 */
>         > @@ -29,6 +42,7 @@ struct NS16550 {
>         >       unsigned char msr;  /* 6 */
>         >       unsigned char scr;  /* 7 */
>         >  };
>         > +#endif /* CONFIG_UART_16550_WORD_ADDRESSABLE */
>         >
>         
>         
>         Same things as with the register definitions. Please make this
>         run-time selectable to allow build-time configurations that
>         support both layouts.
> 
> Yes. I will try to find better solution. 

Cheers,
Ben.




  parent reply	other threads:[~2011-11-27 23:19 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-23  9:44 [PATCH] powerpc/40x: Add APM8018X SOC support Tanmay Inamdar
2011-11-23 10:23 ` Paul Bolle
2011-11-23 14:10 ` Josh Boyer
2011-11-23 14:15 ` Arnd Bergmann
     [not found]   ` <CACoXjcnfCM8Z5qFfrHtxsXkpf492LVbkDA3X=a9dRv9Lcv7Asw@mail.gmail.com>
2011-11-25 12:53     ` Arnd Bergmann
2011-11-27 23:19     ` Benjamin Herrenschmidt [this message]
2011-11-29  6:11       ` Tanmay Inamdar
2011-11-23 16:16 ` Kumar Gala
2011-11-25 12:22   ` Tanmay Inamdar

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=1322435957.23348.23.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=arnd@arndb.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=tinamdar@apm.com \
    /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