From: "Mark A. Greer" This patch updates the support for the ev64260 eval platform from Marvell. It: - uses the platform_notify hook to update platform_data - fixes a bug where a window to a device is disabled instead of enabled - does some misc fixups Signed-off-by: Mark A. Greer Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc/boot/simple/misc-ev64260.S | 10 +-- 25-akpm/arch/ppc/platforms/ev64260.c | 90 +++++++++++++++++----------- 2 files changed, 59 insertions(+), 41 deletions(-) diff -puN arch/ppc/boot/simple/misc-ev64260.S~ppc32-ev64260-update arch/ppc/boot/simple/misc-ev64260.S --- 25/arch/ppc/boot/simple/misc-ev64260.S~ppc32-ev64260-update 2005-01-25 22:21:48.520049584 -0800 +++ 25-akpm/arch/ppc/boot/simple/misc-ev64260.S 2005-01-25 22:21:48.526048672 -0800 @@ -6,12 +6,10 @@ * * Author: Mark Greer * - * Copyright 2001 MontaVista Software Inc. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. + * 2001 (c) MontaVista Software, Inc. This file is licensed under + * the terms of the GNU General Public License version 2. This program + * is licensed "as is" without any warranty of any kind, whether express + * or implied. */ #include diff -puN arch/ppc/platforms/ev64260.c~ppc32-ev64260-update arch/ppc/platforms/ev64260.c --- 25/arch/ppc/platforms/ev64260.c~ppc32-ev64260-update 2005-01-25 22:21:48.522049280 -0800 +++ 25-akpm/arch/ppc/platforms/ev64260.c 2005-01-25 22:21:48.527048520 -0800 @@ -294,7 +294,7 @@ ev64260_setup_bridge(void) /* Lookup PCI host bridges */ if (mv64x60_init(&bh, &si)) - printk("Bridge initialization failed.\n"); + printk(KERN_ERR "Bridge initialization failed.\n"); pci_dram_offset = 0; /* System mem at same addr on PCI & cpu bus */ ppc_md.pci_swizzle = common_swizzle; @@ -337,7 +337,8 @@ ev64260_early_serial_map(void) #endif if (early_serial_setup(&port) != 0) - printk("Early serial init of port 0 failed\n"); + printk(KERN_WARNING "Early serial init of port 0" + "failed\n"); first_time = 0; } @@ -351,35 +352,6 @@ ev64260_early_serial_map(void) } #endif -static int __init -ev64260_fixup_pd(void) -{ -#if defined(CONFIG_SERIAL_MPSC) - struct list_head *entry; - struct platform_device *pd; - struct device *dev; - struct mpsc_pd_dd *dd; - - list_for_each(entry, &platform_bus_type.devices.list) { - dev = container_of(entry, struct device, bus_list); - pd = container_of(dev, struct platform_device, dev); - - if (!strncmp(pd->name, MPSC_CTLR_NAME, BUS_ID_SIZE)) { - dd = (struct mpsc_pd_dd *) dev_get_drvdata(&pd->dev); - - dd->max_idle = 40; - dd->default_baud = EV64260_DEFAULT_BAUD; - dd->brg_clk_src = EV64260_MPSC_CLK_SRC; - dd->brg_clk_freq = EV64260_MPSC_CLK_FREQ; - } - } -#endif - - return 0; -} - -subsys_initcall(ev64260_fixup_pd); - static void __init ev64260_setup_arch(void) { @@ -417,8 +389,8 @@ ev64260_setup_arch(void) ev64260_early_serial_map(); #endif - printk(BOARD_VENDOR " " BOARD_MACHINE "\n"); - printk("EV-64260-BP port (C) 2001 MontaVista Software, Inc. (source@mvista.com)\n"); + printk(KERN_INFO "%s %s port (C) 2001 MontaVista Software, Inc." + "(source@mvista.com)\n", BOARD_VENDOR, BOARD_MACHINE); if (ppc_md.progress) ppc_md.progress("ev64260_setup_arch: exit", 0); @@ -426,6 +398,50 @@ ev64260_setup_arch(void) return; } +/* Platform device data fixup routines. */ +#if defined(CONFIG_SERIAL_MPSC) +static void __init +ev64260_fixup_mpsc_pdata(struct platform_device *pdev) +{ + struct mpsc_pdata *pdata; + + pdata = (struct mpsc_pdata *)pdev->dev.platform_data; + + pdata->max_idle = 40; + pdata->default_baud = EV64260_DEFAULT_BAUD; + pdata->brg_clk_src = EV64260_MPSC_CLK_SRC; + pdata->brg_clk_freq = EV64260_MPSC_CLK_FREQ; + + return; +} + +static int __init +ev64260_platform_notify(struct device *dev) +{ + static struct { + char *bus_id; + void ((*rtn)(struct platform_device *pdev)); + } dev_map[] = { + { MPSC_CTLR_NAME "0", ev64260_fixup_mpsc_pdata }, + { MPSC_CTLR_NAME "1", ev64260_fixup_mpsc_pdata }, + }; + struct platform_device *pdev; + int i; + + if (dev && dev->bus_id) + for (i=0; ibus_id, dev_map[i].bus_id, + BUS_ID_SIZE)) { + + pdev = container_of(dev, + struct platform_device, dev); + dev_map[i].rtn(pdev); + } + + return 0; +} +#endif + static void ev64260_reset_board(void *addr) { @@ -462,7 +478,7 @@ ev64260_reset_board(void *addr) /* map bootrom back in to gt @ reset defaults */ mv64x60_set_32bit_window(&bh, MV64x60_CPU2BOOT_WIN, 0xff800000, 8*1024*1024, 0); - bh.ci->disable_window_32bit(&bh, MV64x60_CPU2BOOT_WIN); + bh.ci->enable_window_32bit(&bh, MV64x60_CPU2BOOT_WIN); /* move reg base back to default, setup default pci0 */ mv64x60_write(&bh, MV64x60_INTERNAL_SPACE_DECODE, @@ -531,7 +547,7 @@ ev64260_calibrate_decr(void) freq = ev64260_get_bus_speed()/4; - printk("time_init: decrementer frequency = %lu.%.6lu MHz\n", + printk(KERN_INFO "time_init: decrementer frequency = %lu.%.6lu MHz\n", freq/1000000, freq%1000000); tb_ticks_per_jiffy = freq / HZ; @@ -627,5 +643,9 @@ platform_init(unsigned long r3, unsigned #endif +#if defined(CONFIG_SERIAL_MPSC) + platform_notify = ev64260_platform_notify; +#endif + return; } _