[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)
|
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 = {
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* 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";
|
|
||||||
case 1:
|
|
||||||
return "88F6192";
|
|
||||||
case 2:
|
|
||||||
return "88F6281";
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
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,
|
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 @@
|
|||||||
#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 @@
|
|||||||
|
|
||||||
#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)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user