[PATCH v2 2/3] ep93xx: added chip revision reading function
Mika Westerberg
mika.westerberg at iki.fi
Sun Mar 21 14:45:26 EDT 2010
On Sat, Mar 20, 2010 at 02:42:26PM -0500, H Hartley Sweeten wrote:
> On Saturday, March 20, 2010 11:31 AM, Mika Westerberg wrote:
> > 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.
>
> The system_rev != the chip revision.
>
> >> 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 :)
>
> This is not a good idea.
>
> system_rev, system_serial_high, and system_serial_low are all passed to
> the kernel by the bootloader as ATAGs. If your bootloader doesn't pass
> the ATAGs it should be fixed. Overriding the variables breaks what they
> are intended for.
Ok, thanks for clarification. It seems that in my platform, the bootloader
doesn't handle these correctly.
> I have some patches for Redboot but Cirrus still has not sent in the FSF
> paperwork to transfer the ep93xx port to eCos. With those patches and
> the /proc/cpuinfo extension patches I mentioned previously I get the
> following on my system:
>
> / # cat /proc/cpuinfo
> Processor : ARM920T rev 0 (v4l)
> BogoMIPS : 99.53
> Features : swp half thumb crunch
> CPU implementer : 0x41
> CPU architecture: 4T
> CPU variant : 0x1
> CPU part : 0x920
> CPU revision : 0
>
> Hardware : Vision Engraving Systems EP9307
> Revision : 0001
> Serial : 4943410027260017
>
> System Type : iMARC
>
> Unique ID : 921040f8
> Maverick Key : 921040f85b6f0e7b76eb23d24309b3 OK
> Silicon Rev : E2
> Watchdog : active
> Reset duration : active
> Boot mode : normal async internal 16-bit
> / #
Cool! You should definitely repost your patches.
Regards,
MW
More information about the linux-arm-kernel
mailing list