From 237c049cfe54bb630074de8fb48b86a747e02aa1 Mon Sep 17 00:00:00 2001 From: Ronen Shitrit Date: Mon, 15 Sep 2008 10:40:35 +0300 Subject: [PATCH] --- yaml --- r: 112511 b: refs/heads/master c: b2b3dc2fc41ef441610d0140f0f5ccacbd43f40c h: refs/heads/master i: 112509: 3a4294b90305fd5116ae80c23e18f8ec91389cc3 112507: bda8900b8d8138fbfd1c9d209a65098ce6b27444 112503: d1304ea1d94548d217cf39e76100ea72d061001b 112495: 7947f766360abc233e1e767b1dbb73acacadf012 112479: e8eb3435633c3bf84d1caabe2c117267cf21c23a 112447: 996fb8414eafb1c95806a02042f0ef4141a21db7 112383: 4eb0d3933b3a4281b4c8246c765754838664ea7b v: v3 --- [refs] | 2 +- trunk/arch/arm/mach-kirkwood/common.c | 43 +++++++++++++++---- trunk/arch/arm/mach-kirkwood/common.h | 2 + .../arm/mach-kirkwood/include/mach/kirkwood.h | 14 ++++++ trunk/arch/arm/mach-kirkwood/pcie.c | 6 +++ 5 files changed, 57 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index d16c5b9e41bd..df216f271207 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 79d4dd77f0d86e4315887edaa5dfabb0c2081ba7 +refs/heads/master: b2b3dc2fc41ef441610d0140f0f5ccacbd43f40c diff --git a/trunk/arch/arm/mach-kirkwood/common.c b/trunk/arch/arm/mach-kirkwood/common.c index 2e79dabac53c..c8516e352d1c 100644 --- a/trunk/arch/arm/mach-kirkwood/common.c +++ b/trunk/arch/arm/mach-kirkwood/common.c @@ -532,6 +532,12 @@ int kirkwood_tclk; int __init kirkwood_find_tclk(void) { + u32 dev, rev; + + kirkwood_pcie_id(&dev, &rev); + if (dev == MV88F6281_DEV_ID && rev == MV88F6281_REV_A0) + return 200000000; + return 166666667; } @@ -549,18 +555,37 @@ struct sys_timer kirkwood_timer = { /***************************************************************************** * General ****************************************************************************/ +/* + * Identify device ID and revision. + */ static char * __init kirkwood_id(void) { - switch (readl(DEVICE_ID) & 0x3) { - case 0: - return "88F6180"; - case 1: - return "88F6192"; - case 2: - return "88F6281"; + u32 dev, rev; + + kirkwood_pcie_id(&dev, &rev); + + if (dev == MV88F6281_DEV_ID) { + if (rev == MV88F6281_REV_Z0) + return "MV88F6281-Z0"; + else if (rev == MV88F6281_REV_A0) + return "MV88F6281-A0"; + else + return "MV88F6281-Rev-Unsupported"; + } else if (dev == MV88F6192_DEV_ID) { + if (rev == MV88F6192_REV_Z0) + return "MV88F6192-Z0"; + else if (rev == MV88F6192_REV_A0) + return "MV88F6192-A0"; + else + return "MV88F6192-Rev-Unsupported"; + } else if (dev == MV88F6180_DEV_ID) { + if (rev == MV88F6180_REV_A0) + return "MV88F6180-Rev-A0"; + else + return "MV88F6180-Rev-Unsupported"; + } else { + return "Device-Unknown"; } - - return "unknown 88F6000 variant"; } static int __init is_l2_writethrough(void) diff --git a/trunk/arch/arm/mach-kirkwood/common.h b/trunk/arch/arm/mach-kirkwood/common.h index 69cd113af03a..02abef1b3219 100644 --- a/trunk/arch/arm/mach-kirkwood/common.h +++ b/trunk/arch/arm/mach-kirkwood/common.h @@ -28,6 +28,8 @@ void kirkwood_setup_pcie_io_win(int window, u32 base, u32 size, void kirkwood_setup_pcie_mem_win(int window, u32 base, u32 size, int maj, int min); +void kirkwood_pcie_id(u32 *dev, u32 *rev); + void kirkwood_ehci_init(void); void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); void kirkwood_pcie_init(void); diff --git a/trunk/arch/arm/mach-kirkwood/include/mach/kirkwood.h b/trunk/arch/arm/mach-kirkwood/include/mach/kirkwood.h index 5c69992295e8..eae42406fd86 100644 --- a/trunk/arch/arm/mach-kirkwood/include/mach/kirkwood.h +++ b/trunk/arch/arm/mach-kirkwood/include/mach/kirkwood.h @@ -67,6 +67,20 @@ #define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128) #define L2_WRITETHROUGH 0x00000010 +/* + * Supported devices and revisions. + */ +#define MV88F6281_DEV_ID 0x6281 +#define MV88F6281_REV_Z0 0 +#define MV88F6281_REV_A0 2 + +#define MV88F6192_DEV_ID 0x6192 +#define MV88F6192_REV_Z0 0 +#define MV88F6192_REV_A0 2 + +#define MV88F6180_DEV_ID 0x6180 +#define MV88F6180_REV_A0 2 + /* * Register Map */ diff --git a/trunk/arch/arm/mach-kirkwood/pcie.c b/trunk/arch/arm/mach-kirkwood/pcie.c index 2195fa31f6b7..f6b08f207c89 100644 --- a/trunk/arch/arm/mach-kirkwood/pcie.c +++ b/trunk/arch/arm/mach-kirkwood/pcie.c @@ -18,6 +18,12 @@ #define PCIE_BASE ((void __iomem *)PCIE_VIRT_BASE) +void __init kirkwood_pcie_id(u32 *dev, u32 *rev) +{ + *dev = orion_pcie_dev_id(PCIE_BASE); + *rev = orion_pcie_rev(PCIE_BASE); +} + static int pcie_valid_config(int bus, int dev) { /*