diff options
| author | Ronen Shitrit <rshitrit@marvell.com> | 2008-09-15 03:40:35 -0400 |
|---|---|---|
| committer | Nicolas Pitre <nico@cam.org> | 2008-09-25 16:27:21 -0400 |
| commit | b2b3dc2fc41ef441610d0140f0f5ccacbd43f40c (patch) | |
| tree | 70116ea6c823e5ac6a8b048ee6911257e722e5b7 | |
| parent | 79d4dd77f0d86e4315887edaa5dfabb0c2081ba7 (diff) | |
[ARM] Kirkwood: add support for newer SoC models
Add support to the Kirkwood port for newer device models and silicon
revisions. Instead of looking at the DEVICE_ID register, the device
version is now determined by looking at the PCI-Express device ID and
revision registers, as it is done for orion5x, and this information
is used to determine the TCLK frequency, again, as it is done for
orion5x.
Signed-off-by: Ronen Shitrit <rshitrit@marvell.com>
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
| -rw-r--r-- | arch/arm/mach-kirkwood/common.c | 43 | ||||
| -rw-r--r-- | arch/arm/mach-kirkwood/common.h | 2 | ||||
| -rw-r--r-- | arch/arm/mach-kirkwood/include/mach/kirkwood.h | 14 | ||||
| -rw-r--r-- | arch/arm/mach-kirkwood/pcie.c | 6 |
4 files changed, 56 insertions, 9 deletions
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index 2e79dabac53c..c8516e352d1c 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
| @@ -532,6 +532,12 @@ int kirkwood_tclk; | |||
| 532 | 532 | ||
| 533 | int __init kirkwood_find_tclk(void) | 533 | int __init kirkwood_find_tclk(void) |
| 534 | { | 534 | { |
| 535 | u32 dev, rev; | ||
| 536 | |||
| 537 | kirkwood_pcie_id(&dev, &rev); | ||
| 538 | if (dev == MV88F6281_DEV_ID && rev == MV88F6281_REV_A0) | ||
| 539 | return 200000000; | ||
| 540 | |||
| 535 | return 166666667; | 541 | return 166666667; |
| 536 | } | 542 | } |
| 537 | 543 | ||
| @@ -549,18 +555,37 @@ struct sys_timer kirkwood_timer = { | |||
| 549 | /***************************************************************************** | 555 | /***************************************************************************** |
| 550 | * General | 556 | * General |
| 551 | ****************************************************************************/ | 557 | ****************************************************************************/ |
| 558 | /* | ||
| 559 | * Identify device ID and revision. | ||
| 560 | */ | ||
| 552 | static char * __init kirkwood_id(void) | 561 | static char * __init kirkwood_id(void) |
| 553 | { | 562 | { |
| 554 | switch (readl(DEVICE_ID) & 0x3) { | 563 | u32 dev, rev; |
| 555 | case 0: | 564 | |
| 556 | return "88F6180"; | 565 | kirkwood_pcie_id(&dev, &rev); |
| 557 | case 1: | 566 | |
| 558 | return "88F6192"; | 567 | if (dev == MV88F6281_DEV_ID) { |
| 559 | case 2: | 568 | if (rev == MV88F6281_REV_Z0) |
| 560 | return "88F6281"; | 569 | return "MV88F6281-Z0"; |
| 570 | else if (rev == MV88F6281_REV_A0) | ||
| 571 | return "MV88F6281-A0"; | ||
| 572 | else | ||
| 573 | return "MV88F6281-Rev-Unsupported"; | ||
| 574 | } else if (dev == MV88F6192_DEV_ID) { | ||
| 575 | if (rev == MV88F6192_REV_Z0) | ||
| 576 | return "MV88F6192-Z0"; | ||
| 577 | else if (rev == MV88F6192_REV_A0) | ||
| 578 | return "MV88F6192-A0"; | ||
| 579 | else | ||
| 580 | return "MV88F6192-Rev-Unsupported"; | ||
| 581 | } else if (dev == MV88F6180_DEV_ID) { | ||
| 582 | if (rev == MV88F6180_REV_A0) | ||
| 583 | return "MV88F6180-Rev-A0"; | ||
| 584 | else | ||
| 585 | return "MV88F6180-Rev-Unsupported"; | ||
| 586 | } else { | ||
| 587 | return "Device-Unknown"; | ||
| 561 | } | 588 | } |
| 562 | |||
| 563 | return "unknown 88F6000 variant"; | ||
| 564 | } | 589 | } |
| 565 | 590 | ||
| 566 | static int __init is_l2_writethrough(void) | 591 | static int __init is_l2_writethrough(void) |
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index 69cd113af03a..02abef1b3219 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h | |||
| @@ -28,6 +28,8 @@ void kirkwood_setup_pcie_io_win(int window, u32 base, u32 size, | |||
| 28 | void kirkwood_setup_pcie_mem_win(int window, u32 base, u32 size, | 28 | void kirkwood_setup_pcie_mem_win(int window, u32 base, u32 size, |
| 29 | int maj, int min); | 29 | int maj, int min); |
| 30 | 30 | ||
| 31 | void kirkwood_pcie_id(u32 *dev, u32 *rev); | ||
| 32 | |||
| 31 | void kirkwood_ehci_init(void); | 33 | void kirkwood_ehci_init(void); |
| 32 | void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); | 34 | void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); |
| 33 | void kirkwood_pcie_init(void); | 35 | void kirkwood_pcie_init(void); |
diff --git a/arch/arm/mach-kirkwood/include/mach/kirkwood.h b/arch/arm/mach-kirkwood/include/mach/kirkwood.h index 5c69992295e8..eae42406fd86 100644 --- a/arch/arm/mach-kirkwood/include/mach/kirkwood.h +++ b/arch/arm/mach-kirkwood/include/mach/kirkwood.h | |||
| @@ -68,6 +68,20 @@ | |||
| 68 | #define L2_WRITETHROUGH 0x00000010 | 68 | #define L2_WRITETHROUGH 0x00000010 |
| 69 | 69 | ||
| 70 | /* | 70 | /* |
| 71 | * Supported devices and revisions. | ||
| 72 | */ | ||
| 73 | #define MV88F6281_DEV_ID 0x6281 | ||
| 74 | #define MV88F6281_REV_Z0 0 | ||
| 75 | #define MV88F6281_REV_A0 2 | ||
| 76 | |||
| 77 | #define MV88F6192_DEV_ID 0x6192 | ||
| 78 | #define MV88F6192_REV_Z0 0 | ||
| 79 | #define MV88F6192_REV_A0 2 | ||
| 80 | |||
| 81 | #define MV88F6180_DEV_ID 0x6180 | ||
| 82 | #define MV88F6180_REV_A0 2 | ||
| 83 | |||
| 84 | /* | ||
| 71 | * Register Map | 85 | * Register Map |
| 72 | */ | 86 | */ |
| 73 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000) | 87 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000) |
diff --git a/arch/arm/mach-kirkwood/pcie.c b/arch/arm/mach-kirkwood/pcie.c index 2195fa31f6b7..f6b08f207c89 100644 --- a/arch/arm/mach-kirkwood/pcie.c +++ b/arch/arm/mach-kirkwood/pcie.c | |||
| @@ -18,6 +18,12 @@ | |||
| 18 | 18 | ||
| 19 | #define PCIE_BASE ((void __iomem *)PCIE_VIRT_BASE) | 19 | #define PCIE_BASE ((void __iomem *)PCIE_VIRT_BASE) |
| 20 | 20 | ||
| 21 | void __init kirkwood_pcie_id(u32 *dev, u32 *rev) | ||
| 22 | { | ||
| 23 | *dev = orion_pcie_dev_id(PCIE_BASE); | ||
| 24 | *rev = orion_pcie_rev(PCIE_BASE); | ||
| 25 | } | ||
| 26 | |||
| 21 | static int pcie_valid_config(int bus, int dev) | 27 | static int pcie_valid_config(int bus, int dev) |
| 22 | { | 28 | { |
| 23 | /* | 29 | /* |
