Re: [PATCH 05/12] omap3evm: Add board revision function, v2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Hiremath, Vaibhav <hvaibhav@xxxxxx> [091116 19:56]:
> 
> > -----Original Message-----
> > From: Tony Lindgren [mailto:tony@xxxxxxxxxxx]
> > Sent: Tuesday, November 17, 2009 4:58 AM
> > To: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
> > Cc: Gupta, Ajay Kumar; linux-omap@xxxxxxxxxxxxxxx; Hiremath,
> > Vaibhav; Premi, Sanjeev
> > Subject: [PATCH 05/12] omap3evm: Add board revision function
> > 
> > From: Ajay Kumar Gupta <ajay.gupta@xxxxxx>
> > 
> > Added function to differentiate between the OMAP3EVM revisions. The
> > chip-id of the ethernet PHY is being used for this purpose.
> > 
> > Rev A to D : 0x01150000
> > Rev >= E   : 0x92200000
> > 
> > Signed-off-by: Vaibhav Hiremath <hvaibhav@xxxxxx>
> > Signed-off-by: Ajay Kumar Gupta <ajay.gupta@xxxxxx>
> > Signed-off-by: Sanjeev Premi <premi@xxxxxx>
> > Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>
> > ---
> >  arch/arm/mach-omap2/board-omap3evm.c    |   33
> > +++++++++++++++++++++++++++++++
> >  arch/arm/plat-omap/include/plat/board.h |   18 +++++++++++++++++
> >  2 files changed, 51 insertions(+), 0 deletions(-)
> > 
> > diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-
> > omap2/board-omap3evm.c
> > index 1edf06a..6bb9a37 100644
> > --- a/arch/arm/mach-omap2/board-omap3evm.c
> > +++ b/arch/arm/mach-omap2/board-omap3evm.c
> > @@ -46,9 +46,40 @@
> > 
> >  #define OMAP3EVM_ETHR_START	0x2c000000
> >  #define OMAP3EVM_ETHR_SIZE	1024
> > +#define OMAP3EVM_ETHR_ID_REV	0x50
> >  #define OMAP3EVM_ETHR_GPIO_IRQ	176
> >  #define OMAP3EVM_SMC911X_CS	5
> > 
> > +static u8 omap3_evm_version;
> > +
> > +u8 get_omap3_evm_rev(void)
> > +{
> > +	return omap3_evm_version;
> > +}
> > +EXPORT_SYMBOL(get_omap3_evm_rev);
> > +
> > +static void __init omap3_evm_get_revision(void)
> > +{
> > +	void __iomem *ioaddr;
> > +	unsigned int smsc_id;
> > +
> > +	/* Ethernet PHY ID is stored at ID_REV register */
> > +	ioaddr = ioremap_nocache(OMAP3EVM_ETHR_START, SZ_1K);
> [Hiremath, Vaibhav] I think we should check for the return value.

Good catch, updated version below.

Tony

>From f62482b652928c06c9ecfe546f03532276a6f5e6 Mon Sep 17 00:00:00 2001
From: Ajay Kumar Gupta <ajay.gupta@xxxxxx>
Date: Fri, 13 Nov 2009 17:37:30 -0800
Subject: [PATCH] omap3evm: Add board revision function

Added function to differentiate between the OMAP3EVM revisions. The
chip-id of the ethernet PHY is being used for this purpose.

Rev A to D : 0x01150000
Rev >= E   : 0x92200000

Signed-off-by: Vaibhav Hiremath <hvaibhav@xxxxxx>
Signed-off-by: Ajay Kumar Gupta <ajay.gupta@xxxxxx>
Signed-off-by: Sanjeev Premi <premi@xxxxxx>
Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>

diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index 1edf06a..149d45c 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -46,9 +46,42 @@
 
 #define OMAP3EVM_ETHR_START	0x2c000000
 #define OMAP3EVM_ETHR_SIZE	1024
+#define OMAP3EVM_ETHR_ID_REV	0x50
 #define OMAP3EVM_ETHR_GPIO_IRQ	176
 #define OMAP3EVM_SMC911X_CS	5
 
+static u8 omap3_evm_version;
+
+u8 get_omap3_evm_rev(void)
+{
+	return omap3_evm_version;
+}
+EXPORT_SYMBOL(get_omap3_evm_rev);
+
+static void __init omap3_evm_get_revision(void)
+{
+	void __iomem *ioaddr;
+	unsigned int smsc_id;
+
+	/* Ethernet PHY ID is stored at ID_REV register */
+	ioaddr = ioremap_nocache(OMAP3EVM_ETHR_START, SZ_1K);
+	if (!ioaddr)
+		return;
+	smsc_id = readl(ioaddr + OMAP3EVM_ETHR_ID_REV) & 0xFFFF0000;
+	iounmap(ioaddr);
+
+	switch (smsc_id) {
+	/*SMSC9115 chipset*/
+	case 0x01150000:
+		omap3_evm_version = OMAP3EVM_BOARD_GEN_1;
+		break;
+	/*SMSC 9220 chipset*/
+	case 0x92200000:
+	default:
+		omap3_evm_version = OMAP3EVM_BOARD_GEN_2;
+	}
+}
+
 static struct resource omap3evm_smc911x_resources[] = {
 	[0] =	{
 		.start	= OMAP3EVM_ETHR_START,
@@ -321,6 +354,8 @@ static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 
 static void __init omap3_evm_init(void)
 {
+	omap3_evm_get_revision();
+
 	omap3_evm_i2c_init();
 
 	platform_add_devices(omap3_evm_devices, ARRAY_SIZE(omap3_evm_devices));
diff --git a/arch/arm/plat-omap/include/plat/board.h b/arch/arm/plat-omap/include/plat/board.h
index c4fc69f..abb17b6 100644
--- a/arch/arm/plat-omap/include/plat/board.h
+++ b/arch/arm/plat-omap/include/plat/board.h
@@ -14,6 +14,18 @@
 
 #include <plat/gpio-switch.h>
 
+/*
+ * OMAP35x EVM revision
+ * Run time detection of EVM revision is done by reading Ethernet
+ * PHY ID -
+ *	GEN_1	= 0x01150000
+ *	GEN_2	= 0x92200000
+ */
+enum {
+	OMAP3EVM_BOARD_GEN_1 = 0,	/* EVM Rev between  A - D */
+	OMAP3EVM_BOARD_GEN_2,		/* EVM Rev >= Rev E */
+};
+
 /* Different peripheral ids */
 #define OMAP_TAG_CLOCK		0x4f01
 #define OMAP_TAG_LCD		0x4f05
@@ -157,4 +169,10 @@ extern int omap_board_config_size;
 /* for TI reference platforms sharing the same debug card */
 extern int debug_card_init(u32 addr, unsigned gpio);
 
+/* OMAP3EVM revision */
+#if defined(CONFIG_MACH_OMAP3EVM)
+u8 get_omap3_evm_rev(void);
+#else
+#define get_omap3_evm_rev() (-EINVAL)
+#endif
 #endif

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux