[PATCH v2 2/3] ep93xx: added chip revision reading function

Mika Westerberg mika.westerberg at iki.fi
Sat Mar 20 14:31:27 EDT 2010


On Sat, Mar 20, 2010 at 06:07:50PM +0000, Martin Guy wrote:
> On 3/18/10, Mika Westerberg <mika.westerberg at iki.fi> wrote:
> > Added a new function: ep93xx_chip_revision() which reads chip revision from the
> >  sysconfig register.
> >
> >  diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
> >  index 90fb591..07572bb 100644
> >  --- a/arch/arm/mach-ep93xx/core.c
> >  +++ b/arch/arm/mach-ep93xx/core.c
> >  @@ -222,6 +222,20 @@ void ep93xx_devcfg_set_clear(unsigned int set_bits, unsigned int clear_bits)
> >   }
> >   EXPORT_SYMBOL(ep93xx_devcfg_set_clear);
> >
> >  +/**
> >  + * ep93xx_chip_revision() - returns the EP93xx chip revision
> >  + *
> >  + * See <mach/platform.h> for more information.
> >  + */
> >  +unsigned int ep93xx_chip_revision(void)
> >  +{
> >  +       unsigned int v;
> >  +
> >  +       v = __raw_readl(EP93XX_SYSCON_SYSCFG);
> >  +       v &= EP93XX_SYSCON_SYSCFG_REV_MASK;
> >  +       v >>= EP93XX_SYSCON_SYSCFG_REV_SHIFT;
> >  +       return v;
> >  +}
> 
>   The chip revision is normally placed in the global unsigned int
> "system_rev", which is also reported by /proc/cpuinfo.

Is system_rev same as cpu chip revision? I think it should contain
board revision number or something similar.

>   It normally seems to be set from the atags passed by the bootloader
> but uboot on this platform doesn't provide that, so it remains 0.

Neither my platform (uses redboot):

Hardware        : Technologic Systems TS-72xx SBC
Revision        : 0000
Serial          : 0000000000000000

>   The same applies to the very similar variables system_serial_low and
> system_serial_high (which also remain 0 on this u-boot platform).
> Shall we also set these from the hardware on ep93xx during thus giving
> them non-zero values in /proc/cpuinfo too?
>   As to where...? The other platforms that set these variables from
> hardware queries do it in the board-specific files' MACHINE_START
> function, but we'd have to do this in every board file, or have some
> comon routine and modify every mach-ep93xx board file. The only common
> routine all ep93xx board inits seem to have is ep93xx_init_devices.
> This seems the least-resistance place to do this, but has nothing to
> do with initlalizing devices of course. Is making another function in
> toe core file and modifying every board's init function preferable?
> 
> Also, I have the simpler
>     system_rev = *((unsigned int *)EP93XX_SYSCON_CHIP_ID) >> 28;
>     system_serial_low = *((unsigned int *)EP93XX_SECURITY_UNIQID);
> but maybe explicit readl and use of long defines are preferable.

I'm not the best guy to answer these. Maybe Hartley Sweeten or Ryan
Mallon have some ideas about this. I didn't even know that such
variable exists :)

Regards,
MW



More information about the linux-arm-kernel mailing list