[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>
This commit is contained in:
parent
79d4dd77f0
commit
b2b3dc2fc4
|
@ -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;
|
||||
|
||||
return "unknown 88F6000 variant";
|
||||
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";
|
||||
}
|
||||
}
|
||||
|
||||
static int __init is_l2_writethrough(void)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue