[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
/*
2008-03-27 14:51:41 -04:00
* arch / arm / mach - orion5x / common . c
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
*
2008-03-27 14:51:41 -04:00
* Core functions for Marvell Orion 5 x SoCs
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
*
* Maintainer : Tzachi Perelstein < tzachi @ marvell . com >
*
2008-03-27 14:51:41 -04:00
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed " as is " without any
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
* warranty of any kind , whether express or implied .
*/
# include <linux/kernel.h>
# include <linux/init.h>
2007-10-23 15:14:42 -04:00
# include <linux/platform_device.h>
2011-05-15 13:32:48 +02:00
# include <linux/dma-mapping.h>
2007-10-23 15:14:42 -04:00
# include <linux/serial_8250.h>
2008-03-27 14:51:39 -04:00
# include <linux/mbus.h>
2007-11-12 09:51:36 +02:00
# include <linux/mv643xx_i2c.h>
2008-03-27 14:51:39 -04:00
# include <linux/ata_platform.h>
2008-09-25 16:23:48 +02:00
# include <net/dsa.h>
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
# include <asm/page.h>
2008-02-29 21:12:57 +01:00
# include <asm/setup.h>
2007-10-23 15:14:42 -04:00
# include <asm/timex.h>
2008-02-29 21:12:57 +01:00
# include <asm/mach/arch.h>
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
# include <asm/mach/map.h>
2008-03-27 14:51:40 -04:00
# include <asm/mach/time.h>
2010-10-15 16:50:26 +02:00
# include <mach/bridge-regs.h>
2008-08-05 16:14:15 +01:00
# include <mach/hardware.h>
# include <mach/orion5x.h>
2008-08-09 13:44:58 +02:00
# include <plat/orion_nand.h>
# include <plat/time.h>
2011-05-15 13:32:41 +02:00
# include <plat/common.h>
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
# include "common.h"
/*****************************************************************************
* I / O Address Mapping
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-03-27 14:51:41 -04:00
static struct map_desc orion5x_io_desc [ ] __initdata = {
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
{
2008-03-27 14:51:41 -04:00
. virtual = ORION5X_REGS_VIRT_BASE ,
. pfn = __phys_to_pfn ( ORION5X_REGS_PHYS_BASE ) ,
. length = ORION5X_REGS_SIZE ,
2008-05-10 16:30:01 +02:00
. type = MT_DEVICE ,
} , {
2008-03-27 14:51:41 -04:00
. virtual = ORION5X_PCIE_IO_VIRT_BASE ,
. pfn = __phys_to_pfn ( ORION5X_PCIE_IO_PHYS_BASE ) ,
. length = ORION5X_PCIE_IO_SIZE ,
2008-05-10 16:30:01 +02:00
. type = MT_DEVICE ,
} , {
2008-03-27 14:51:41 -04:00
. virtual = ORION5X_PCI_IO_VIRT_BASE ,
. pfn = __phys_to_pfn ( ORION5X_PCI_IO_PHYS_BASE ) ,
. length = ORION5X_PCI_IO_SIZE ,
2008-05-10 16:30:01 +02:00
. type = MT_DEVICE ,
} , {
2008-03-27 14:51:41 -04:00
. virtual = ORION5X_PCIE_WA_VIRT_BASE ,
. pfn = __phys_to_pfn ( ORION5X_PCIE_WA_PHYS_BASE ) ,
. length = ORION5X_PCIE_WA_SIZE ,
2008-05-10 16:30:01 +02:00
. type = MT_DEVICE ,
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
} ,
} ;
2008-03-27 14:51:41 -04:00
void __init orion5x_map_io ( void )
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
{
2008-03-27 14:51:41 -04:00
iotable_init ( orion5x_io_desc , ARRAY_SIZE ( orion5x_io_desc ) ) ;
[ARM] basic support for the Marvell Orion SoC family
The Marvell Orion is a family of ARM SoCs with a DDR/DDR2 memory
controller, 10/100/1000 ethernet MAC, and USB 2.0 interfaces,
and, depending on the specific model, PCI-E interface, PCI-X
interface, SATA controllers, crypto unit, SPI interface, SDIO
interface, device bus, NAND controller, DMA engine and/or XOR
engine.
This contains the basic structure and architecture register definitions.
Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Reviewed-by: Nicolas Pitre <nico@marvell.com>
Reviewed-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2007-10-23 15:14:41 -04:00
}
2007-10-23 15:14:42 -04:00
2008-04-22 05:37:12 +02:00
/*****************************************************************************
* EHCI0
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void __init orion5x_ehci0_init ( void )
{
2011-05-15 13:32:49 +02:00
orion_ehci_init ( & orion5x_mbus_dram_info ,
ORION5X_USB0_PHYS_BASE , IRQ_ORION5X_USB0_CTRL ) ;
2008-04-22 05:37:12 +02:00
}
/*****************************************************************************
* EHCI1
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void __init orion5x_ehci1_init ( void )
{
2011-05-15 13:32:49 +02:00
orion_ehci_1_init ( & orion5x_mbus_dram_info ,
ORION5X_USB1_PHYS_BASE , IRQ_ORION5X_USB1_CTRL ) ;
2008-04-22 05:37:12 +02:00
}
2007-10-31 12:42:41 +02:00
/*****************************************************************************
2011-05-15 13:32:40 +02:00
* GE00
2007-10-31 12:42:41 +02:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-03-27 14:51:41 -04:00
void __init orion5x_eth_init ( struct mv643xx_eth_platform_data * eth_data )
2007-10-31 12:42:41 +02:00
{
2011-05-15 13:32:44 +02:00
orion_ge00_init ( eth_data , & orion5x_mbus_dram_info ,
ORION5X_ETH_PHYS_BASE , IRQ_ORION5X_ETH_SUM ,
IRQ_ORION5X_ETH_ERR , orion5x_tclk ) ;
2007-10-31 12:42:41 +02:00
}
2008-04-22 05:37:12 +02:00
2008-09-25 16:23:48 +02:00
/*****************************************************************************
* Ethernet switch
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void __init orion5x_eth_switch_init ( struct dsa_platform_data * d , int irq )
{
2011-05-15 13:32:44 +02:00
orion_ge00_switch_init ( d , irq ) ;
2008-09-25 16:23:48 +02:00
}
2007-11-12 09:51:36 +02:00
/*****************************************************************************
2008-04-22 05:37:12 +02:00
* I2C
2007-11-12 09:51:36 +02:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-22 05:37:12 +02:00
void __init orion5x_i2c_init ( void )
{
2011-05-15 13:32:45 +02:00
orion_i2c_init ( I2C_PHYS_BASE , IRQ_ORION5X_I2C , 8 ) ;
2008-04-22 05:37:12 +02:00
}
2008-01-29 11:33:32 -11:00
/*****************************************************************************
2008-04-22 05:37:12 +02:00
* SATA
2008-01-29 11:33:32 -11:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-03-27 14:51:41 -04:00
void __init orion5x_sata_init ( struct mv_sata_platform_data * sata_data )
2008-01-29 11:33:32 -11:00
{
2011-05-15 13:32:50 +02:00
orion_sata_init ( sata_data , & orion5x_mbus_dram_info ,
ORION5X_SATA_PHYS_BASE , IRQ_ORION5X_SATA ) ;
2008-01-29 11:33:32 -11:00
}
2008-04-22 05:37:12 +02:00
[ARM] Orion: add 88F6183 (Orion-1-90) support
The Orion-1-90 (88F6183) is another member of the Orion SoC family,
which has a 16 bit DDR2 interface, one x1 PCIe port (configurable as
Root Complex or Endpoint), one 10/100/1000 ethernet interface, one
USB 2.0 port with PHY, one SPDIF/I2S interface, one SDIO interface,
one TWSI interface, two UARTs, one SPI interface, a NAND controller,
a crypto engine, and a 4-channel DMA engine.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
2008-08-29 06:55:06 +02:00
/*****************************************************************************
* SPI
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void __init orion5x_spi_init ( )
{
2011-05-15 13:32:46 +02:00
orion_spi_init ( SPI_PHYS_BASE , orion5x_tclk ) ;
[ARM] Orion: add 88F6183 (Orion-1-90) support
The Orion-1-90 (88F6183) is another member of the Orion SoC family,
which has a 16 bit DDR2 interface, one x1 PCIe port (configurable as
Root Complex or Endpoint), one 10/100/1000 ethernet interface, one
USB 2.0 port with PHY, one SPDIF/I2S interface, one SDIO interface,
one TWSI interface, two UARTs, one SPI interface, a NAND controller,
a crypto engine, and a 4-channel DMA engine.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
2008-08-29 06:55:06 +02:00
}
2008-03-27 14:51:40 -04:00
/*****************************************************************************
2008-04-22 05:37:12 +02:00
* UART0
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void __init orion5x_uart0_init ( void )
{
2011-05-15 13:32:41 +02:00
orion_uart0_init ( UART0_VIRT_BASE , UART0_PHYS_BASE ,
IRQ_ORION5X_UART0 , orion5x_tclk ) ;
2008-04-22 05:37:12 +02:00
}
/*****************************************************************************
* UART1
2008-03-27 14:51:40 -04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-22 05:37:12 +02:00
void __init orion5x_uart1_init ( void )
{
2011-05-15 13:32:41 +02:00
orion_uart1_init ( UART1_VIRT_BASE , UART1_PHYS_BASE ,
IRQ_ORION5X_UART1 , orion5x_tclk ) ;
2008-04-22 05:37:12 +02:00
}
2008-03-27 14:51:40 -04:00
2008-06-16 23:25:12 -11:00
/*****************************************************************************
* XOR engine
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void __init orion5x_xor_init ( void )
{
2011-05-15 13:32:48 +02:00
orion_xor0_init ( & orion5x_mbus_dram_info ,
ORION5X_XOR_PHYS_BASE ,
ORION5X_XOR_PHYS_BASE + 0x200 ,
IRQ_ORION5X_XOR0 , IRQ_ORION5X_XOR1 ) ;
2008-06-16 23:25:12 -11:00
}
2009-05-07 22:59:24 +02:00
static struct resource orion5x_crypto_res [ ] = {
{
. name = " regs " ,
. start = ORION5X_CRYPTO_PHYS_BASE ,
. end = ORION5X_CRYPTO_PHYS_BASE + 0xffff ,
. flags = IORESOURCE_MEM ,
} , {
. name = " sram " ,
. start = ORION5X_SRAM_PHYS_BASE ,
. end = ORION5X_SRAM_PHYS_BASE + SZ_8K - 1 ,
. flags = IORESOURCE_MEM ,
} , {
. name = " crypto interrupt " ,
. start = IRQ_ORION5X_CESA ,
. end = IRQ_ORION5X_CESA ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device orion5x_crypto_device = {
. name = " mv_crypto " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( orion5x_crypto_res ) ,
. resource = orion5x_crypto_res ,
} ;
2009-06-11 22:27:20 +02:00
static int __init orion5x_crypto_init ( void )
2009-05-07 22:59:24 +02:00
{
int ret ;
ret = orion5x_setup_sram_win ( ) ;
if ( ret )
return ret ;
return platform_device_register ( & orion5x_crypto_device ) ;
}
2008-06-16 23:25:12 -11:00
2009-02-24 14:59:22 -08:00
/*****************************************************************************
* Watchdog
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void __init orion5x_wdt_init ( void )
{
2011-05-15 13:32:47 +02:00
orion_wdt_init ( orion5x_tclk ) ;
2009-02-24 14:59:22 -08:00
}
2008-04-22 05:37:12 +02:00
/*****************************************************************************
* Time handling
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2010-10-15 16:50:26 +02:00
void __init orion5x_init_early ( void )
{
orion_time_set_base ( TIMER_VIRT_BASE ) ;
}
2008-08-29 05:55:51 +02:00
int orion5x_tclk ;
int __init orion5x_find_tclk ( void )
{
[ARM] Orion: add 88F6183 (Orion-1-90) support
The Orion-1-90 (88F6183) is another member of the Orion SoC family,
which has a 16 bit DDR2 interface, one x1 PCIe port (configurable as
Root Complex or Endpoint), one 10/100/1000 ethernet interface, one
USB 2.0 port with PHY, one SPDIF/I2S interface, one SDIO interface,
one TWSI interface, two UARTs, one SPI interface, a NAND controller,
a crypto engine, and a 4-channel DMA engine.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
2008-08-29 06:55:06 +02:00
u32 dev , rev ;
orion5x_pcie_id ( & dev , & rev ) ;
if ( dev = = MV88F6183_DEV_ID & &
( readl ( MPP_RESET_SAMPLE ) & 0x00000200 ) = = 0 )
return 133333333 ;
2008-08-29 05:55:51 +02:00
return 166666667 ;
}
2008-03-27 14:51:41 -04:00
static void orion5x_timer_init ( void )
2008-03-27 14:51:40 -04:00
{
2008-08-29 05:55:51 +02:00
orion5x_tclk = orion5x_find_tclk ( ) ;
2010-10-15 16:50:26 +02:00
orion_time_init ( ORION5X_BRIDGE_VIRT_BASE , BRIDGE_INT_TIMER1_CLR ,
IRQ_ORION5X_BRIDGE , orion5x_tclk ) ;
2008-03-27 14:51:40 -04:00
}
2008-03-27 14:51:41 -04:00
struct sys_timer orion5x_timer = {
2008-05-10 16:30:01 +02:00
. init = orion5x_timer_init ,
2008-03-27 14:51:40 -04:00
} ;
2008-04-22 05:37:12 +02:00
2007-10-23 15:14:42 -04:00
/*****************************************************************************
* General
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
2008-04-25 16:31:32 -04:00
* Identify device ID and rev from PCIe configuration header space ' 0 ' .
2007-10-23 15:14:42 -04:00
*/
2008-03-27 14:51:41 -04:00
static void __init orion5x_id ( u32 * dev , u32 * rev , char * * dev_name )
2007-10-23 15:14:42 -04:00
{
2008-03-27 14:51:41 -04:00
orion5x_pcie_id ( dev , rev ) ;
2007-10-23 15:14:42 -04:00
if ( * dev = = MV88F5281_DEV_ID ) {
if ( * rev = = MV88F5281_REV_D2 ) {
* dev_name = " MV88F5281-D2 " ;
} else if ( * rev = = MV88F5281_REV_D1 ) {
* dev_name = " MV88F5281-D1 " ;
2008-08-09 15:17:27 +02:00
} else if ( * rev = = MV88F5281_REV_D0 ) {
* dev_name = " MV88F5281-D0 " ;
2007-10-23 15:14:42 -04:00
} else {
* dev_name = " MV88F5281-Rev-Unsupported " ;
}
} else if ( * dev = = MV88F5182_DEV_ID ) {
if ( * rev = = MV88F5182_REV_A2 ) {
* dev_name = " MV88F5182-A2 " ;
} else {
* dev_name = " MV88F5182-Rev-Unsupported " ;
}
2007-11-11 12:05:11 +01:00
} else if ( * dev = = MV88F5181_DEV_ID ) {
if ( * rev = = MV88F5181_REV_B1 ) {
* dev_name = " MV88F5181-Rev-B1 " ;
2008-05-31 08:30:40 +02:00
} else if ( * rev = = MV88F5181L_REV_A1 ) {
* dev_name = " MV88F5181L-Rev-A1 " ;
2007-11-11 12:05:11 +01:00
} else {
2008-05-31 08:30:40 +02:00
* dev_name = " MV88F5181(L)-Rev-Unsupported " ;
2007-11-11 12:05:11 +01:00
}
[ARM] Orion: add 88F6183 (Orion-1-90) support
The Orion-1-90 (88F6183) is another member of the Orion SoC family,
which has a 16 bit DDR2 interface, one x1 PCIe port (configurable as
Root Complex or Endpoint), one 10/100/1000 ethernet interface, one
USB 2.0 port with PHY, one SPDIF/I2S interface, one SDIO interface,
one TWSI interface, two UARTs, one SPI interface, a NAND controller,
a crypto engine, and a 4-channel DMA engine.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
2008-08-29 06:55:06 +02:00
} else if ( * dev = = MV88F6183_DEV_ID ) {
if ( * rev = = MV88F6183_REV_B0 ) {
* dev_name = " MV88F6183-Rev-B0 " ;
} else {
* dev_name = " MV88F6183-Rev-Unsupported " ;
}
2007-10-23 15:14:42 -04:00
} else {
* dev_name = " Device-Unknown " ;
}
}
2008-03-27 14:51:41 -04:00
void __init orion5x_init ( void )
2007-10-23 15:14:42 -04:00
{
char * dev_name ;
u32 dev , rev ;
2008-03-27 14:51:41 -04:00
orion5x_id ( & dev , & rev , & dev_name ) ;
2008-08-29 05:55:51 +02:00
printk ( KERN_INFO " Orion ID: %s. TCLK=%d. \n " , dev_name , orion5x_tclk ) ;
2007-10-23 15:14:42 -04:00
/*
* Setup Orion address map
*/
2008-03-27 14:51:41 -04:00
orion5x_setup_cpu_mbus_bridge ( ) ;
2008-08-09 15:17:27 +02:00
/*
* Don ' t issue " Wait for Interrupt " instruction if we are
* running on D0 5281 silicon .
*/
if ( dev = = MV88F5281_DEV_ID & & rev = = MV88F5281_REV_D0 ) {
printk ( KERN_INFO " Orion: Applying 5281 D0 WFI workaround. \n " ) ;
disable_hlt ( ) ;
}
2009-02-24 14:59:22 -08:00
2009-06-11 22:27:20 +02:00
/*
* The 5082 / 5181l / 5182 / 6082 / 6082l / 6183 have crypto
* while 5180 n / 5181 / 5281 don ' t have crypto .
*/
if ( ( dev = = MV88F5181_DEV_ID & & rev > = MV88F5181L_REV_A0 ) | |
dev = = MV88F5182_DEV_ID | | dev = = MV88F6183_DEV_ID )
orion5x_crypto_init ( ) ;
2009-02-24 14:59:22 -08:00
/*
* Register watchdog driver
*/
orion5x_wdt_init ( ) ;
2007-10-23 15:14:42 -04:00
}
2008-02-29 21:12:57 +01:00
/*
* Many orion - based systems have buggy bootloader implementations .
* This is a common fixup for bogus memory tags .
*/
void __init tag_fixup_mem32 ( struct machine_desc * mdesc , struct tag * t ,
char * * from , struct meminfo * meminfo )
{
for ( ; t - > hdr . size ; t = tag_next ( t ) )
if ( t - > hdr . tag = = ATAG_MEM & &
( ! t - > u . mem . size | | t - > u . mem . size & ~ PAGE_MASK | |
t - > u . mem . start & ~ PAGE_MASK ) ) {
printk ( KERN_WARNING
" Clearing invalid memory bank %dKB@0x%08x \n " ,
t - > u . mem . size / 1024 , t - > u . mem . start ) ;
t - > hdr . tag = 0 ;
}
}