Commit b2b3dc2f authored by Ronen Shitrit's avatar Ronen Shitrit Committed by Nicolas Pitre

[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: default avatarRonen Shitrit <rshitrit@marvell.com>
Signed-off-by: default avatarLennert Buytenhek <buytenh@marvell.com>
parent 79d4dd77
...@@ -532,6 +532,12 @@ int kirkwood_tclk; ...@@ -532,6 +532,12 @@ int kirkwood_tclk;
int __init kirkwood_find_tclk(void) 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; return 166666667;
} }
...@@ -549,18 +555,37 @@ struct sys_timer kirkwood_timer = { ...@@ -549,18 +555,37 @@ struct sys_timer kirkwood_timer = {
/***************************************************************************** /*****************************************************************************
* General * General
****************************************************************************/ ****************************************************************************/
/*
* Identify device ID and revision.
*/
static char * __init kirkwood_id(void) static char * __init kirkwood_id(void)
{ {
switch (readl(DEVICE_ID) & 0x3) { u32 dev, rev;
case 0:
return "88F6180"; kirkwood_pcie_id(&dev, &rev);
case 1:
return "88F6192"; if (dev == MV88F6281_DEV_ID) {
case 2: if (rev == MV88F6281_REV_Z0)
return "88F6281"; 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) static int __init is_l2_writethrough(void)
......
...@@ -28,6 +28,8 @@ void kirkwood_setup_pcie_io_win(int window, u32 base, u32 size, ...@@ -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, void kirkwood_setup_pcie_mem_win(int window, u32 base, u32 size,
int maj, int min); int maj, int min);
void kirkwood_pcie_id(u32 *dev, u32 *rev);
void kirkwood_ehci_init(void); void kirkwood_ehci_init(void);
void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data);
void kirkwood_pcie_init(void); void kirkwood_pcie_init(void);
......
...@@ -67,6 +67,20 @@ ...@@ -67,6 +67,20 @@
#define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128) #define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128)
#define L2_WRITETHROUGH 0x00000010 #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 * Register Map
*/ */
......
...@@ -18,6 +18,12 @@ ...@@ -18,6 +18,12 @@
#define PCIE_BASE ((void __iomem *)PCIE_VIRT_BASE) #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) static int pcie_valid_config(int bus, int dev)
{ {
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment