Path: blob/master/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c
10819 views
/*1* arch/arm/mach-orion5x/rd88f5181l-ge-setup.c2*3* Marvell Orion-VoIP GE Reference Design Setup4*5* This file is licensed under the terms of the GNU General Public6* License version 2. This program is licensed "as is" without any7* warranty of any kind, whether express or implied.8*/910#include <linux/kernel.h>11#include <linux/init.h>12#include <linux/platform_device.h>13#include <linux/pci.h>14#include <linux/irq.h>15#include <linux/mtd/physmap.h>16#include <linux/mv643xx_eth.h>17#include <linux/ethtool.h>18#include <linux/i2c.h>19#include <net/dsa.h>20#include <asm/mach-types.h>21#include <asm/gpio.h>22#include <asm/leds.h>23#include <asm/mach/arch.h>24#include <asm/mach/pci.h>25#include <mach/orion5x.h>26#include "common.h"27#include "mpp.h"2829/*****************************************************************************30* RD-88F5181L GE Info31****************************************************************************/32/*33* 16M NOR flash Device bus boot chip select34*/35#define RD88F5181L_GE_NOR_BOOT_BASE 0xff00000036#define RD88F5181L_GE_NOR_BOOT_SIZE SZ_16M373839/*****************************************************************************40* 16M NOR Flash on Device bus Boot chip select41****************************************************************************/42static struct physmap_flash_data rd88f5181l_ge_nor_boot_flash_data = {43.width = 1,44};4546static struct resource rd88f5181l_ge_nor_boot_flash_resource = {47.flags = IORESOURCE_MEM,48.start = RD88F5181L_GE_NOR_BOOT_BASE,49.end = RD88F5181L_GE_NOR_BOOT_BASE +50RD88F5181L_GE_NOR_BOOT_SIZE - 1,51};5253static struct platform_device rd88f5181l_ge_nor_boot_flash = {54.name = "physmap-flash",55.id = 0,56.dev = {57.platform_data = &rd88f5181l_ge_nor_boot_flash_data,58},59.num_resources = 1,60.resource = &rd88f5181l_ge_nor_boot_flash_resource,61};626364/*****************************************************************************65* General Setup66****************************************************************************/67static unsigned int rd88f5181l_ge_mpp_modes[] __initdata = {68MPP0_GPIO, /* LED1 */69MPP1_GPIO, /* LED5 */70MPP2_GPIO, /* LED4 */71MPP3_GPIO, /* LED3 */72MPP4_GPIO, /* PCI_intA */73MPP5_GPIO, /* RTC interrupt */74MPP6_PCI_CLK, /* CPU PCI refclk */75MPP7_PCI_CLK, /* PCI/PCIe refclk */76MPP8_GPIO, /* 88e6131 interrupt */77MPP9_GPIO, /* GE_RXERR */78MPP10_GPIO, /* PCI_intB */79MPP11_GPIO, /* LED2 */80MPP12_GIGE, /* GE_TXD[4] */81MPP13_GIGE, /* GE_TXD[5] */82MPP14_GIGE, /* GE_TXD[6] */83MPP15_GIGE, /* GE_TXD[7] */84MPP16_GIGE, /* GE_RXD[4] */85MPP17_GIGE, /* GE_RXD[5] */86MPP18_GIGE, /* GE_RXD[6] */87MPP19_GIGE, /* GE_RXD[7] */880,89};9091static struct mv643xx_eth_platform_data rd88f5181l_ge_eth_data = {92.phy_addr = MV643XX_ETH_PHY_NONE,93.speed = SPEED_1000,94.duplex = DUPLEX_FULL,95};9697static struct dsa_chip_data rd88f5181l_ge_switch_chip_data = {98.port_names[0] = "lan2",99.port_names[1] = "lan1",100.port_names[2] = "wan",101.port_names[3] = "cpu",102.port_names[5] = "lan4",103.port_names[7] = "lan3",104};105106static struct dsa_platform_data rd88f5181l_ge_switch_plat_data = {107.nr_chips = 1,108.chip = &rd88f5181l_ge_switch_chip_data,109};110111static struct i2c_board_info __initdata rd88f5181l_ge_i2c_rtc = {112I2C_BOARD_INFO("ds1338", 0x68),113};114115static void __init rd88f5181l_ge_init(void)116{117/*118* Setup basic Orion functions. Need to be called early.119*/120orion5x_init();121122orion5x_mpp_conf(rd88f5181l_ge_mpp_modes);123124/*125* Configure peripherals.126*/127orion5x_ehci0_init();128orion5x_eth_init(&rd88f5181l_ge_eth_data);129orion5x_eth_switch_init(&rd88f5181l_ge_switch_plat_data,130gpio_to_irq(8));131orion5x_i2c_init();132orion5x_uart0_init();133134orion5x_setup_dev_boot_win(RD88F5181L_GE_NOR_BOOT_BASE,135RD88F5181L_GE_NOR_BOOT_SIZE);136platform_device_register(&rd88f5181l_ge_nor_boot_flash);137138i2c_register_board_info(0, &rd88f5181l_ge_i2c_rtc, 1);139}140141static int __init142rd88f5181l_ge_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)143{144int irq;145146/*147* Check for devices with hard-wired IRQs.148*/149irq = orion5x_pci_map_irq(dev, slot, pin);150if (irq != -1)151return irq;152153/*154* Cardbus slot.155*/156if (pin == 1)157return gpio_to_irq(4);158else159return gpio_to_irq(10);160}161162static struct hw_pci rd88f5181l_ge_pci __initdata = {163.nr_controllers = 2,164.swizzle = pci_std_swizzle,165.setup = orion5x_pci_sys_setup,166.scan = orion5x_pci_sys_scan_bus,167.map_irq = rd88f5181l_ge_pci_map_irq,168};169170static int __init rd88f5181l_ge_pci_init(void)171{172if (machine_is_rd88f5181l_ge()) {173orion5x_pci_set_cardbus_mode();174pci_common_init(&rd88f5181l_ge_pci);175}176177return 0;178}179subsys_initcall(rd88f5181l_ge_pci_init);180181MACHINE_START(RD88F5181L_GE, "Marvell Orion-VoIP GE Reference Design")182/* Maintainer: Lennert Buytenhek <[email protected]> */183.boot_params = 0x00000100,184.init_machine = rd88f5181l_ge_init,185.map_io = orion5x_map_io,186.init_early = orion5x_init_early,187.init_irq = orion5x_init_irq,188.timer = &orion5x_timer,189.fixup = tag_fixup_mem32,190MACHINE_END191192193