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

Commit fef1c772 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Paul Mackerras
Browse files

[PATCH] ppc64: add BPA platform type



This adds the basic support for running on BPA machines.
So far, this is only the IBM workstation, and it will
not run on others without a little more generalization.

It should be possible to configure a kernel for any
combination of CONFIG_PPC_BPA with any of the other
multiplatform targets.

Signed-off-by: default avatarArnd Bergmann <arndb@de.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 031f7ede
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -504,6 +504,13 @@ L: bonding-devel@lists.sourceforge.net
W:   http://sourceforge.net/projects/bonding/
S:   Supported

BROADBAND PROCESSOR ARCHITECTURE
P:	Arnd Bergmann
M:	arnd@arndb.de
L:	linuxppc64-dev@ozlabs.org
W:	http://linuxppc64.org
S:	Supported

BTTV VIDEO4LINUX DRIVER
P:	Gerd Knorr
M:	kraxel@bytesex.org
+5 −1
Original line number Diff line number Diff line
@@ -77,6 +77,10 @@ config PPC_PSERIES
	bool "  IBM pSeries & new iSeries"
	default y

config PPC_BPA
	bool "  Broadband Processor Architecture"
	depends on PPC_MULTIPLATFORM

config PPC_PMAC
	depends on PPC_MULTIPLATFORM
	bool "  Apple G5 based machines"
@@ -256,7 +260,7 @@ config MSCHUNKS

config PPC_RTAS
	bool
	depends on PPC_PSERIES
	depends on PPC_PSERIES || PPC_BPA
	default y

config RTAS_PROC
+2 −0
Original line number Diff line number Diff line
@@ -90,12 +90,14 @@ boot := arch/ppc64/boot
boottarget-$(CONFIG_PPC_PSERIES) := zImage zImage.initrd
boottarget-$(CONFIG_PPC_MAPLE) := zImage zImage.initrd
boottarget-$(CONFIG_PPC_ISERIES) := vmlinux.sminitrd vmlinux.initrd vmlinux.sm
boottarget-$(CONFIG_PPC_BPA) := zImage zImage.initrd
$(boottarget-y): vmlinux
	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@

bootimage-$(CONFIG_PPC_PSERIES) := $(boot)/zImage
bootimage-$(CONFIG_PPC_PMAC) := vmlinux
bootimage-$(CONFIG_PPC_MAPLE) := $(boot)/zImage
bootimage-$(CONFIG_PPC_BPA) := zImage
bootimage-$(CONFIG_PPC_ISERIES) := vmlinux
BOOTIMAGE := $(bootimage-y)
install: vmlinux
+3 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ obj-$(CONFIG_PPC_PSERIES) += pSeries_pci.o pSeries_lpar.o pSeries_hvCall.o \
			     pSeries_nvram.o rtasd.o ras.o pSeries_reconfig.o \
			     xics.o pSeries_setup.o pSeries_iommu.o

obj-$(CONFIG_PPC_BPA) += bpa_setup.o bpa_nvram.o

obj-$(CONFIG_EEH)		+= eeh.o
obj-$(CONFIG_PROC_FS)		+= proc_ppc64.o
obj-$(CONFIG_RTAS_FLASH)	+= rtas_flash.o
@@ -59,6 +61,7 @@ ifdef CONFIG_SMP
obj-$(CONFIG_PPC_PMAC)		+= pmac_smp.o smp-tbsync.o
obj-$(CONFIG_PPC_ISERIES)	+= iSeries_smp.o
obj-$(CONFIG_PPC_PSERIES)	+= pSeries_smp.o
obj-$(CONFIG_PPC_BPA)		+= pSeries_smp.o
obj-$(CONFIG_PPC_MAPLE)		+= smp-tbsync.o
endif

+135 −0
Original line number Diff line number Diff line
/*
 *  linux/arch/ppc/kernel/bpa_setup.c
 *
 *  Copyright (C) 1995  Linus Torvalds
 *  Adapted from 'alpha' version by Gary Thomas
 *  Modified by Cort Dougan (cort@cs.nmt.edu)
 *  Modified by PPC64 Team, IBM Corp
 *  Modified by BPA Team, IBM Deutschland Entwicklung GmbH
 *
 * 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.
 */
#undef DEBUG

#include <linux/config.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/stddef.h>
#include <linux/unistd.h>
#include <linux/slab.h>
#include <linux/user.h>
#include <linux/reboot.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h>
#include <linux/root_dev.h>
#include <linux/console.h>

#include <asm/mmu.h>
#include <asm/processor.h>
#include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/prom.h>
#include <asm/rtas.h>
#include <asm/pci-bridge.h>
#include <asm/iommu.h>
#include <asm/dma.h>
#include <asm/machdep.h>
#include <asm/time.h>
#include <asm/nvram.h>
#include <asm/cputable.h>

#include "pci.h"

#ifdef DEBUG
#define DBG(fmt...) udbg_printf(fmt)
#else
#define DBG(fmt...)
#endif

void bpa_get_cpuinfo(struct seq_file *m)
{
	struct device_node *root;
	const char *model = "";

	root = of_find_node_by_path("/");
	if (root)
		model = get_property(root, "model", NULL);
	seq_printf(m, "machine\t\t: BPA %s\n", model);
	of_node_put(root);
}

static void bpa_progress(char *s, unsigned short hex)
{
	printk("*** %04x : %s\n", hex, s ? s : "");
}

static void __init bpa_setup_arch(void)
{
#ifdef CONFIG_SMP
	smp_init_pSeries();
#endif

	/* init to some ~sane value until calibrate_delay() runs */
	loops_per_jiffy = 50000000;

	if (ROOT_DEV == 0) {
		printk("No ramdisk, default root is /dev/hda2\n");
		ROOT_DEV = Root_HDA2;
	}

	/* Find and initialize PCI host bridges */
	init_pci_config_tokens();
	find_and_init_phbs();

#ifdef CONFIG_DUMMY_CONSOLE
	conswitchp = &dummy_con;
#endif

	bpa_nvram_init();
}

/*
 * Early initialization.  Relocation is on but do not reference unbolted pages
 */
static void __init bpa_init_early(void)
{
	DBG(" -> bpa_init_early()\n");

	hpte_init_native();

	pci_direct_iommu_init();

	ppc64_interrupt_controller = IC_BPA_IIC;

	DBG(" <- bpa_init_early()\n");
}


static int __init bpa_probe(int platform)
{
	if (platform != PLATFORM_BPA)
		return 0;

	return 1;
}

struct machdep_calls __initdata bpa_md = {
	.probe			= bpa_probe,
	.setup_arch		= bpa_setup_arch,
	.init_early		= bpa_init_early,
	.get_cpuinfo		= bpa_get_cpuinfo,
	.restart		= rtas_restart,
	.power_off		= rtas_power_off,
	.halt			= rtas_halt,
	.get_boot_time		= rtas_get_boot_time,
	.get_rtc_time		= rtas_get_rtc_time,
	.set_rtc_time		= rtas_set_rtc_time,
	.calibrate_decr		= generic_calibrate_decr,
	.progress		= bpa_progress,
};
Loading