Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c38fc2b authored by Grant Likely's avatar Grant Likely Committed by Paul Mackerras
Browse files

[POWERPC] Stop using ppc_sys for Xilinx Virtex boards



The arch/ppc/syslib/ppc_sys.c infrastructure does not work well for the
virtex ports.  Move the ml300 and ml403 board ports over to use the new
virtex_devices infrastructure.

Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Acked-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent d26cd570
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -28,5 +28,4 @@ obj-$(CONFIG_440SP) += ibm440sp.o
obj-$(CONFIG_440SPE)		+= ppc440spe.o
obj-$(CONFIG_405EP)		+= ibm405ep.o
obj-$(CONFIG_405GPR)		+= ibm405gpr.o
obj-$(CONFIG_XILINX_VIRTEX)	+= virtex.o

arch/ppc/platforms/4xx/virtex.c

deleted100644 → 0
+0 −56
Original line number Diff line number Diff line
/*
 * Virtex-II Pro & Virtex-4 FX common infrastructure
 *
 * Maintainer: Grant Likely <grant.likely@secretlab.ca>
 *
 * Copyright 2005 Secret Lab Technologies Ltd.
 * Copyright 2005 General Dynamics Canada Ltd.
 * Copyright 2005 Freescale Semiconductor 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.
 */

#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/serial_8250.h>
#include <asm/ppc_sys.h>
#include <platforms/4xx/virtex.h>
#include <platforms/4xx/xparameters/xparameters.h>

#define XPAR_UART(num) { \
		.mapbase  = XPAR_UARTNS550_##num##_BASEADDR + 3, \
		.irq	  = XPAR_INTC_0_UARTNS550_##num##_VEC_ID, \
		.iotype	  = UPIO_MEM, \
		.uartclk  = XPAR_UARTNS550_##num##_CLOCK_FREQ_HZ, \
		.flags	  = UPF_BOOT_AUTOCONF, \
		.regshift = 2, \
	}

struct plat_serial8250_port serial_platform_data[] = {
#ifdef XPAR_UARTNS550_0_BASEADDR
	XPAR_UART(0),
#endif
#ifdef XPAR_UARTNS550_1_BASEADDR
	XPAR_UART(1),
#endif
#ifdef XPAR_UARTNS550_2_BASEADDR
	XPAR_UART(2),
#endif
#ifdef XPAR_UARTNS550_3_BASEADDR
	XPAR_UART(3),
#endif
	{ }, /* terminated by empty record */
};

struct platform_device ppc_sys_platform_devices[] = {
	[VIRTEX_UART] = {
		.name		= "serial8250",
		.id		= 0,
		.dev.platform_data = serial_platform_data,
	},
};
+1 −6
Original line number Diff line number Diff line
@@ -20,12 +20,7 @@
 #define BASE_BAUD		(0) /* dummy value; not used */
#endif

/* Device type enumeration for platform bus definitions */
#ifndef __ASSEMBLY__
enum ppc_sys_devices {
	VIRTEX_UART, NUM_PPC_SYS_DEVS,
};
  
typedef struct board_info {
	unsigned int	 bi_memsize;		/* DRAM installed, in bytes */
	unsigned char	 bi_enetaddr[6];	/* Local Ethernet MAC address */
+4 −60
Original line number Diff line number Diff line
@@ -18,9 +18,9 @@
#include <linux/serialP.h>
#include <asm/io.h>
#include <asm/machdep.h>
#include <asm/ppc_sys.h>

#include <syslib/gen550.h>
#include <syslib/virtex_devices.h>
#include <platforms/4xx/xparameters/xparameters.h>

/*
@@ -53,25 +53,9 @@
 *          ppc4xx_pic_init			arch/ppc/syslib/xilinx_pic.c
 */

/* Board specifications structures */
struct ppc_sys_spec *cur_ppc_sys_spec;
struct ppc_sys_spec ppc_sys_specs[] = {
	{
		/* Only one entry, always assume the same design */
		.ppc_sys_name	= "Xilinx ML300 Reference Design",
		.mask 		= 0x00000000,
		.value 		= 0x00000000,
		.num_devices	= 1,
		.device_list	= (enum ppc_sys_devices[])
		{
			VIRTEX_UART,
		},
	},
};
const char* virtex_machine_name = "ML300 Reference Design";

#if defined(XPAR_POWER_0_POWERDOWN_BASEADDR)

static volatile unsigned *powerdown_base =
    (volatile unsigned *) XPAR_POWER_0_POWERDOWN_BASEADDR;

@@ -96,52 +80,14 @@ ml300_map_io(void)
#endif
}

/* Early serial support functions */
static void __init
ml300_early_serial_init(int num, struct plat_serial8250_port *pdata)
{
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
	struct uart_port serial_req;

	memset(&serial_req, 0, sizeof(serial_req));
	serial_req.mapbase	= pdata->mapbase;
	serial_req.membase	= pdata->membase;
	serial_req.irq		= pdata->irq;
	serial_req.uartclk	= pdata->uartclk;
	serial_req.regshift	= pdata->regshift;
	serial_req.iotype	= pdata->iotype;
	serial_req.flags	= pdata->flags;
	gen550_init(num, &serial_req);
#endif
}

void __init
ml300_early_serial_map(void)
{
#ifdef CONFIG_SERIAL_8250
	struct plat_serial8250_port *pdata;
	int i = 0;

	pdata = (struct plat_serial8250_port *) ppc_sys_get_pdata(VIRTEX_UART);
	while(pdata && pdata->flags)
	{
		pdata->membase = ioremap(pdata->mapbase, 0x100);
		ml300_early_serial_init(i, pdata);
		pdata++;
		i++;
	}
#endif /* CONFIG_SERIAL_8250 */
}

void __init
ml300_setup_arch(void)
{
	ml300_early_serial_map();
	virtex_early_serial_map();
	ppc4xx_setup_arch();	/* calls ppc4xx_find_bridges() */

	/* Identify the system */
	printk(KERN_INFO "Xilinx Virtex-II Pro port\n");
	printk(KERN_INFO "Port by MontaVista Software, Inc. (source@mvista.com)\n");
	printk(KERN_INFO "Xilinx ML300 Reference System (Virtex-II Pro)\n");
}

/* Called after board_setup_irq from ppc4xx_init_IRQ(). */
@@ -157,8 +103,6 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
{
	ppc4xx_init(r3, r4, r5, r6, r7);

	identify_ppc_sys_by_id(mfspr(SPRN_PVR));

	ppc_md.setup_arch = ml300_setup_arch;
	ppc_md.setup_io_mappings = ml300_map_io;
	ppc_md.init_IRQ = ml300_init_irq;
@@ -168,7 +112,7 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
#endif

#ifdef CONFIG_KGDB
	ppc_md.early_serial_map = ml300_early_serial_map;
	ppc_md.early_serial_map = virtex_early_serial_map;
#endif
}
+4 −61
Original line number Diff line number Diff line
/*
 * arch/ppc/platforms/4xx/xilinx_ml403.c
 *
 * Xilinx ML403 evaluation board initialization
 *
 * Author: Grant Likely <grant.likely@secretlab.ca>
 *
 * 2005 (c) Secret Lab Technologies Ltd.
 * 2005-2007 (c) Secret Lab Technologies Ltd.
 * 2002-2004 (c) MontaVista Software, Inc.
 *
 * This file is licensed under the terms of the GNU General Public License
@@ -22,9 +20,9 @@
#include <linux/serialP.h>
#include <asm/io.h>
#include <asm/machdep.h>
#include <asm/ppc_sys.h>

#include <syslib/gen550.h>
#include <syslib/virtex_devices.h>
#include <platforms/4xx/xparameters/xparameters.h>

/*
@@ -57,25 +55,9 @@
 *          ppc4xx_pic_init			arch/ppc/syslib/xilinx_pic.c
 */

/* Board specifications structures */
struct ppc_sys_spec *cur_ppc_sys_spec;
struct ppc_sys_spec ppc_sys_specs[] = {
	{
		/* Only one entry, always assume the same design */
		.ppc_sys_name	= "Xilinx ML403 Reference Design",
		.mask 		= 0x00000000,
		.value 		= 0x00000000,
		.num_devices	= 1,
		.device_list	= (enum ppc_sys_devices[])
		{
			VIRTEX_UART,
		},
	},
};
const char* virtex_machine_name = "ML403 Reference Design";

#if defined(XPAR_POWER_0_POWERDOWN_BASEADDR)

static volatile unsigned *powerdown_base =
    (volatile unsigned *) XPAR_POWER_0_POWERDOWN_BASEADDR;

@@ -100,47 +82,10 @@ ml403_map_io(void)
#endif
}

/* Early serial support functions */
static void __init
ml403_early_serial_init(int num, struct plat_serial8250_port *pdata)
{
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
	struct uart_port serial_req;

	memset(&serial_req, 0, sizeof(serial_req));
	serial_req.mapbase	= pdata->mapbase;
	serial_req.membase	= pdata->membase;
	serial_req.irq		= pdata->irq;
	serial_req.uartclk	= pdata->uartclk;
	serial_req.regshift	= pdata->regshift;
	serial_req.iotype	= pdata->iotype;
	serial_req.flags	= pdata->flags;
	gen550_init(num, &serial_req);
#endif
}

void __init
ml403_early_serial_map(void)
{
#ifdef CONFIG_SERIAL_8250
	struct plat_serial8250_port *pdata;
	int i = 0;

	pdata = (struct plat_serial8250_port *) ppc_sys_get_pdata(VIRTEX_UART);
	while(pdata && pdata->flags)
	{
		pdata->membase = ioremap(pdata->mapbase, 0x100);
		ml403_early_serial_init(i, pdata);
		pdata++;
		i++;
	}
#endif /* CONFIG_SERIAL_8250 */
}

void __init
ml403_setup_arch(void)
{
	ml403_early_serial_map();
	virtex_early_serial_map();
	ppc4xx_setup_arch();	/* calls ppc4xx_find_bridges() */

	/* Identify the system */
@@ -160,8 +105,6 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
{
	ppc4xx_init(r3, r4, r5, r6, r7);

	identify_ppc_sys_by_id(mfspr(SPRN_PVR));

	ppc_md.setup_arch = ml403_setup_arch;
	ppc_md.setup_io_mappings = ml403_map_io;
	ppc_md.init_IRQ = ml403_init_irq;
@@ -171,7 +114,7 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
#endif

#ifdef CONFIG_KGDB
	ppc_md.early_serial_map = ml403_early_serial_map;
	ppc_md.early_serial_map = virtex_early_serial_map;
#endif
}
Loading