Path: blob/master/arch/powerpc/platforms/8xx/ep88xc.c
10819 views
/*1* Platform setup for the Embedded Planet EP88xC board2*3* Author: Scott Wood <[email protected]>4* Copyright 2007 Freescale Semiconductor, Inc.5*6* This file is licensed under the terms of the GNU General Public License7* version 2. This program is licensed "as is" without any warranty of any8* kind, whether express or implied.9*/1011#include <linux/init.h>12#include <linux/of_platform.h>1314#include <asm/machdep.h>15#include <asm/io.h>16#include <asm/udbg.h>17#include <asm/cpm1.h>1819#include "mpc8xx.h"2021struct cpm_pin {22int port, pin, flags;23};2425static struct cpm_pin ep88xc_pins[] = {26/* SMC1 */27{1, 24, CPM_PIN_INPUT}, /* RX */28{1, 25, CPM_PIN_INPUT | CPM_PIN_SECONDARY}, /* TX */2930/* SCC2 */31{0, 12, CPM_PIN_INPUT}, /* TX */32{0, 13, CPM_PIN_INPUT}, /* RX */33{2, 8, CPM_PIN_INPUT | CPM_PIN_SECONDARY | CPM_PIN_GPIO}, /* CD */34{2, 9, CPM_PIN_INPUT | CPM_PIN_SECONDARY | CPM_PIN_GPIO}, /* CTS */35{2, 14, CPM_PIN_INPUT}, /* RTS */3637/* MII1 */38{0, 0, CPM_PIN_INPUT},39{0, 1, CPM_PIN_INPUT},40{0, 2, CPM_PIN_INPUT},41{0, 3, CPM_PIN_INPUT},42{0, 4, CPM_PIN_OUTPUT},43{0, 10, CPM_PIN_OUTPUT},44{0, 11, CPM_PIN_OUTPUT},45{1, 19, CPM_PIN_INPUT},46{1, 31, CPM_PIN_INPUT},47{2, 12, CPM_PIN_INPUT},48{2, 13, CPM_PIN_INPUT},49{3, 8, CPM_PIN_INPUT},50{4, 30, CPM_PIN_OUTPUT},51{4, 31, CPM_PIN_OUTPUT},5253/* MII2 */54{4, 14, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},55{4, 15, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},56{4, 16, CPM_PIN_OUTPUT},57{4, 17, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},58{4, 18, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},59{4, 19, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},60{4, 20, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},61{4, 21, CPM_PIN_OUTPUT},62{4, 22, CPM_PIN_OUTPUT},63{4, 23, CPM_PIN_OUTPUT},64{4, 24, CPM_PIN_OUTPUT},65{4, 25, CPM_PIN_OUTPUT},66{4, 26, CPM_PIN_OUTPUT},67{4, 27, CPM_PIN_OUTPUT},68{4, 28, CPM_PIN_OUTPUT},69{4, 29, CPM_PIN_OUTPUT},7071/* USB */72{0, 6, CPM_PIN_INPUT}, /* CLK2 */73{0, 14, CPM_PIN_INPUT}, /* USBOE */74{0, 15, CPM_PIN_INPUT}, /* USBRXD */75{2, 6, CPM_PIN_OUTPUT}, /* USBTXN */76{2, 7, CPM_PIN_OUTPUT}, /* USBTXP */77{2, 10, CPM_PIN_INPUT}, /* USBRXN */78{2, 11, CPM_PIN_INPUT}, /* USBRXP */7980/* Misc */81{1, 26, CPM_PIN_INPUT}, /* BRGO2 */82{1, 27, CPM_PIN_INPUT}, /* BRGO1 */83};8485static void __init init_ioports(void)86{87int i;8889for (i = 0; i < ARRAY_SIZE(ep88xc_pins); i++) {90struct cpm_pin *pin = &ep88xc_pins[i];91cpm1_set_pin(pin->port, pin->pin, pin->flags);92}9394cpm1_clk_setup(CPM_CLK_SMC1, CPM_BRG1, CPM_CLK_RTX);95cpm1_clk_setup(CPM_CLK_SCC1, CPM_CLK2, CPM_CLK_TX); /* USB */96cpm1_clk_setup(CPM_CLK_SCC1, CPM_CLK2, CPM_CLK_RX);97cpm1_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_TX);98cpm1_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_RX);99}100101static u8 __iomem *ep88xc_bcsr;102103#define BCSR7_SCC2_ENABLE 0x10104105#define BCSR8_PHY1_ENABLE 0x80106#define BCSR8_PHY1_POWER 0x40107#define BCSR8_PHY2_ENABLE 0x20108#define BCSR8_PHY2_POWER 0x10109110#define BCSR9_USB_ENABLE 0x80111#define BCSR9_USB_POWER 0x40112#define BCSR9_USB_HOST 0x20113#define BCSR9_USB_FULL_SPEED_TARGET 0x10114115static void __init ep88xc_setup_arch(void)116{117struct device_node *np;118119cpm_reset();120init_ioports();121122np = of_find_compatible_node(NULL, NULL, "fsl,ep88xc-bcsr");123if (!np) {124printk(KERN_CRIT "Could not find fsl,ep88xc-bcsr node\n");125return;126}127128ep88xc_bcsr = of_iomap(np, 0);129of_node_put(np);130131if (!ep88xc_bcsr) {132printk(KERN_CRIT "Could not remap BCSR\n");133return;134}135136setbits8(&ep88xc_bcsr[7], BCSR7_SCC2_ENABLE);137setbits8(&ep88xc_bcsr[8], BCSR8_PHY1_ENABLE | BCSR8_PHY1_POWER |138BCSR8_PHY2_ENABLE | BCSR8_PHY2_POWER);139}140141static int __init ep88xc_probe(void)142{143unsigned long root = of_get_flat_dt_root();144return of_flat_dt_is_compatible(root, "fsl,ep88xc");145}146147static struct of_device_id __initdata of_bus_ids[] = {148{ .name = "soc", },149{ .name = "cpm", },150{ .name = "localbus", },151{},152};153154static int __init declare_of_platform_devices(void)155{156/* Publish the QE devices */157of_platform_bus_probe(NULL, of_bus_ids, NULL);158159return 0;160}161machine_device_initcall(ep88xc, declare_of_platform_devices);162163define_machine(ep88xc) {164.name = "Embedded Planet EP88xC",165.probe = ep88xc_probe,166.setup_arch = ep88xc_setup_arch,167.init_IRQ = mpc8xx_pics_init,168.get_irq = mpc8xx_get_irq,169.restart = mpc8xx_restart,170.calibrate_decr = mpc8xx_calibrate_decr,171.set_rtc_time = mpc8xx_set_rtc_time,172.get_rtc_time = mpc8xx_get_rtc_time,173.progress = udbg_progress,174};175176177