* [PATCH 0/4] Add support for 750CL Holly board
@ 2007-05-04 18:13 Josh Boyer
2007-05-04 18:14 ` [PATCH 1/4] " Josh Boyer
` (3 more replies)
0 siblings, 4 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-04 18:13 UTC (permalink / raw)
To: linuxppc-dev
Hi All,
This is the initial round of support for the 750CL Holly eval board. It
should also work for the 750GX Hickory board as well. Overall this is
mostly ready to go, but I'm still fighting a minor issue with PCI. I
wanted to get this put out for review while I fix that.
Comments welcome.
thx,
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 18:13 [PATCH 0/4] Add support for 750CL Holly board Josh Boyer
@ 2007-05-04 18:14 ` Josh Boyer
2007-05-04 18:35 ` Kumar Gala
` (2 more replies)
2007-05-04 18:15 ` [PATCH 2/4] Holly defconfig Josh Boyer
` (2 subsequent siblings)
3 siblings, 3 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-04 18:14 UTC (permalink / raw)
To: linuxppc-dev
Add PowerPC 750 Holly/Hickory platform support
Signed-off-by: Stephen Winiecki <stevewin@us.ibm.com>
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
---
arch/powerpc/Kconfig | 2
arch/powerpc/platforms/embedded6xx/Kconfig | 12 -
arch/powerpc/platforms/embedded6xx/Makefile | 1
arch/powerpc/platforms/embedded6xx/holly.c | 326 ++++++++++++++++++++++++++++
arch/powerpc/platforms/embedded6xx/holly.h | 24 ++
drivers/net/tsi108_eth.h | 4
include/asm-powerpc/tsi108.h | 4
7 files changed, 371 insertions(+), 2 deletions(-)
--- linux-2.6.orig/arch/powerpc/Kconfig
+++ linux-2.6/arch/powerpc/Kconfig
@@ -659,7 +659,7 @@ config MCA
config PCI
bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \
|| PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \
- || MPC7448HPC2 || PPC_PS3
+ || MPC7448HPC2 || PPC_PS3 || HOLLY
default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx \
&& !PPC_85xx && !PPC_86xx
default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS
--- linux-2.6.orig/arch/powerpc/platforms/embedded6xx/Kconfig
+++ linux-2.6/arch/powerpc/platforms/embedded6xx/Kconfig
@@ -25,11 +25,21 @@ config MPC7448HPC2
help
Select MPC7448HPC2 if configuring for Freescale MPC7448HPC2 (Taiga)
platform
+
+config HOLLY
+ bool "PPC750GX/CL with TSI10x bridge (Hickory/Holly)"
+ select TSI108_BRIDGE
+ select PPC_UDBG_16550
+ select MPIC
+ select MPIC_WEIRD
+ help
+ Select HOLLY if configuring for an IBM 750GX/CL Eval
+ Board with TSI108/9 bridge (Hickory/Holly)
endchoice
config TSI108_BRIDGE
bool
- depends on MPC7448HPC2
+ depends on MPC7448HPC2 || HOLLY
default y
config MPC10X_BRIDGE
--- linux-2.6.orig/arch/powerpc/platforms/embedded6xx/Makefile
+++ linux-2.6/arch/powerpc/platforms/embedded6xx/Makefile
@@ -3,3 +3,4 @@
#
obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o
obj-$(CONFIG_LINKSTATION) += linkstation.o ls_uart.o
+obj-$(CONFIG_HOLLY) += holly.o
--- /dev/null
+++ linux-2.6/arch/powerpc/platforms/embedded6xx/holly.c
@@ -0,0 +1,326 @@
+/*
+ * Board setup routines for the IBM 750GX/CL platform w/ TSI10x bridge
+ *
+ * Copyright 2007 IBM Corporation
+ *
+ * Stephen Winiecki <stevewin@us.ibm.com>
+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>
+ *
+ * Based on code from mpc7448_hpc2.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ */
+
+#include <linux/stddef.h>
+#include <linux/kernel.h>
+#include <linux/pci.h>
+#include <linux/kdev_t.h>
+#include <linux/console.h>
+#include <linux/delay.h>
+#include <linux/irq.h>
+#include <linux/ide.h>
+#include <linux/seq_file.h>
+#include <linux/root_dev.h>
+#include <linux/serial.h>
+#include <linux/tty.h>
+#include <linux/serial_core.h>
+
+#include <asm/system.h>
+#include <asm/time.h>
+#include <asm/machdep.h>
+#include <asm/prom.h>
+#include <asm/udbg.h>
+#include <asm/tsi108.h>
+#include <asm/pci-bridge.h>
+#include <asm/reg.h>
+#include <mm/mmu_decl.h>
+#include "holly.h"
+#include <asm/tsi108_irq.h>
+#include <asm/mpic.h>
+#include <asm/of_platform.h>
+
+#undef DEBUG
+#ifdef DEBUG
+#define DBG(fmt...) do { printk(fmt); } while(0)
+#else
+#define DBG(fmt...) do { } while(0)
+#endif
+
+#ifndef CONFIG_PCI
+pci_dram_offset = PPC750GXCL_TSI_PCI_MEM_OFFSET;
+#endif
+
+extern int tsi108_setup_pci(struct device_node *dev);
+extern void tsi108_pci_int_init(struct device_node *node);
+extern void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc);
+
+int holly_exclude_device(u_char bus, u_char devfn)
+{
+ if (bus == 0 && PCI_SLOT(devfn) == 0)
+ return PCIBIOS_DEVICE_NOT_FOUND;
+ else
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static void holly_remap_bridge(void)
+{
+ u32 lut_val, lut_addr = 0x900, misc_cfg;
+ int i;
+
+ printk(KERN_ERR "Remapping PCI bridge\n");
+
+ /* Re-init the PCI bridge and LUT registers to have mappings that don't
+ * rely on PIBS */
+ for (i = 0; i < 31; i++) {
+ tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x00000201);
+ lut_addr += 4;
+ tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x0);
+ lut_addr += 4;
+ }
+
+ /* Reserve the last LUT entry for PCI I/O space */
+ tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x00000241);
+ lut_addr += 4;
+ tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x0);
+
+ /* Map PCI I/O space */
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x210, 0x0);
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x20c, 0x1);
+
+ /* Map PCI CFG space */
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x208, 0x0);
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x204, 0x7c000000 | 0x01);
+
+ /* We don't need MEM32 and PRM remapping so disable them */
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x214, 0x0);
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x220, 0x0);
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x230, 0x0);
+
+ /* Set P2O_BAR0 */
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x14, 0x0);
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x10, 0xc0000000);
+
+ /* Init the PCI LUTs to do no remapping */
+ lut_addr = 0x500;
+ lut_val = 0x00000002;
+
+ for (i = 0; i < 32; i++) {
+ tsi108_write_reg(TSI108_PCI_OFFSET + lut_addr, lut_val);
+ lut_addr += 4;
+ tsi108_write_reg(TSI108_PCI_OFFSET + lut_addr, 0x40000000);
+ lut_addr += 4;
+ lut_val += 0x02000000;
+ }
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x4c, 0x00007900);
+
+ /* Set 64-bit PCI bus address for system memory */
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x1c, 0x0);
+ tsi108_write_reg(TSI108_PCI_OFFSET + 0x18, 0x0);
+}
+
+static void __init holly_setup_arch(void)
+{
+ struct device_node *cpu;
+ struct device_node *np;
+
+ if (ppc_md.progress)
+ ppc_md.progress("holly_setup_arch():set_bridge", 0);
+
+ cpu = of_find_node_by_type(NULL, "cpu");
+ if (cpu != 0) {
+ const unsigned int *fp;
+
+ fp = of_get_property(cpu, "clock-frequency", NULL);
+ if (fp != 0)
+ loops_per_jiffy = *fp / HZ;
+ else
+ loops_per_jiffy = 50000000 / HZ;
+ of_node_put(cpu);
+ }
+ tsi108_csr_vir_base = get_vir_csrbase();
+
+ /* setup PCI host bridge */
+ holly_remap_bridge();
+#ifdef CONFIG_PCI
+ for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
+ tsi108_setup_pci(np);
+
+ ppc_md.pci_exclude_device = holly_exclude_device;
+ if (ppc_md.progress)
+ ppc_md.progress("tsi108: resources set", 0x100);
+#endif
+ printk(KERN_INFO "PPC750GX/CL Platform\n");
+}
+
+/*
+ * Interrupt setup and service. Interrrupts on the holly come
+ * from the four external INT pins, PCI interrupts are routed via
+ * PCI interrupt control registers, it generates internal IRQ23
+ *
+ * Interrupt routing on the Holly Board:
+ * TSI108:PB_INT[0] -> CPU0:INT#
+ * TSI108:PB_INT[1] -> CPU0:MCP#
+ * TSI108:PB_INT[2] -> N/C
+ * TSI108:PB_INT[3] -> N/C
+ */
+static void __init holly_init_IRQ(void)
+{
+ struct mpic *mpic;
+ phys_addr_t mpic_paddr = 0;
+ struct device_node *tsi_pic;
+#ifdef CONFIG_PCI
+ unsigned int cascade_pci_irq;
+ struct device_node *tsi_pci;
+ struct device_node *cascade_node = NULL;
+#endif
+
+ tsi_pic = of_find_node_by_type(NULL, "open-pic");
+ if (tsi_pic) {
+ unsigned int size;
+ const void *prop = of_get_property(tsi_pic, "reg", &size);
+ mpic_paddr = of_translate_address(tsi_pic, prop);
+ }
+
+ if (mpic_paddr == 0) {
+ printk(KERN_ERR "%s: No tsi108 PIC found !\n", __func__);
+ return;
+ }
+
+ DBG("%s: tsi108 pic phys_addr = 0x%x\n", __func__, (u32) mpic_paddr);
+
+ mpic = mpic_alloc(tsi_pic, mpic_paddr,
+ MPIC_PRIMARY | MPIC_BIG_ENDIAN | MPIC_WANTS_RESET |
+ MPIC_SPV_EOI | MPIC_NO_PTHROU_DIS | MPIC_REGSET_TSI108,
+ 24,
+ NR_IRQS-4, /* num_sources used */
+ "Tsi108_PIC");
+
+ BUG_ON(mpic == NULL);
+
+ mpic_assign_isu(mpic, 0, mpic_paddr + 0x100);
+
+ mpic_init(mpic);
+
+#ifdef CONFIG_PCI
+ tsi_pci = of_find_node_by_type(NULL, "pci");
+ if (tsi_pci == NULL) {
+ printk(KERN_ERR "%s: No tsi108 pci node found !\n", __func__);
+ return;
+ }
+
+ cascade_node = of_find_node_by_type(NULL, "pic-router");
+ if (cascade_node == NULL) {
+ printk(KERN_ERR "%s: No tsi108 pci cascade node found !\n", __func__);
+ return;
+ }
+
+ cascade_pci_irq = irq_of_parse_and_map(tsi_pci, 0);
+ DBG("%s: tsi108 cascade_pci_irq = 0x%x\n", __func__, (u32) cascade_pci_irq);
+ tsi108_pci_int_init(cascade_node);
+ set_irq_data(cascade_pci_irq, mpic);
+ set_irq_chained_handler(cascade_pci_irq, tsi108_irq_cascade);
+#endif
+ /* Configure MPIC outputs to CPU0 */
+ tsi108_write_reg(TSI108_MPIC_OFFSET + 0x30c, 0);
+ of_node_put(tsi_pic);
+}
+
+void holly_show_cpuinfo(struct seq_file *m)
+{
+ seq_printf(m, "vendor\t\t: IBM\n");
+ seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
+}
+
+void holly_restart(char *cmd)
+{
+ unsigned long *ocn_bar1 = NULL;
+ unsigned long bar;
+ struct device_node *bridge = NULL;
+ const void *prop;
+ int size;
+ phys_addr_t addr = 0xc0000000;
+
+ local_irq_disable();
+
+ bridge = of_find_node_by_type(NULL, "tsi-bridge");
+ if (bridge) {
+ prop = of_get_property(bridge, "reg", &size);
+ addr = of_translate_address(bridge, prop);
+ }
+ addr += (TSI108_PB_OFFSET + 0x414);
+
+ ocn_bar1 = ioremap(addr, 0x4);
+
+ /* Turn on the BOOT bit so the addresses are correctly
+ * routed to the HLP interface */
+ bar = ioread32be(ocn_bar1);
+ bar |= 2;
+ iowrite32be(bar, ocn_bar1);
+ iosync();
+
+ /* Set SRR0 to the reset vector and turn on MSR_IP */
+ mtspr(SPRN_SRR0, 0xfff00100);
+ mtspr(SPRN_SRR1, MSR_IP);
+
+ /* Do an rfi to jump back to firmware. Somewhat evil,
+ * but it works
+ */
+ __asm__ __volatile__("rfi" : : : "memory");
+
+ /* Spin until reset happens. Shouldn't really get here */
+ for (;;) ;
+}
+
+void holly_power_off(void)
+{
+ local_irq_disable();
+ /* No way to shut power off with software */
+ for (;;) ;
+}
+
+void holly_halt(void)
+{
+ holly_power_off();
+}
+
+/*
+ * Called very early, device-tree isn't unflattened
+ */
+static int __init holly_probe(void)
+{
+ unsigned long root = of_get_flat_dt_root();
+
+ if (!of_flat_dt_is_compatible(root, "ppc750"))
+ return 0;
+ return 1;
+}
+
+static int ppc750_machine_check_exception(struct pt_regs *regs)
+{
+ extern void tsi108_clear_pci_cfg_error(void);
+ const struct exception_table_entry *entry;
+
+ /* Are we prepared to handle this fault */
+ if ((entry = search_exception_tables(regs->nip)) != NULL) {
+ tsi108_clear_pci_cfg_error();
+ regs->msr |= MSR_RI;
+ regs->nip = entry->fixup;
+ return 1;
+ }
+ return 0;
+}
+
+define_machine(holly){
+ .name = "PPC750 GX/CL TSI",
+ .probe = holly_probe,
+ .setup_arch = holly_setup_arch,
+ .init_IRQ = holly_init_IRQ,
+ .show_cpuinfo = holly_show_cpuinfo,
+ .get_irq = mpic_get_irq,
+ .restart = holly_restart,
+ .calibrate_decr = generic_calibrate_decr,
+ .machine_check_exception = ppc750_machine_check_exception,
+ .progress = udbg_progress,
+};
--- /dev/null
+++ linux-2.6/arch/powerpc/platforms/embedded6xx/holly.h
@@ -0,0 +1,24 @@
+/*
+ * Definitions for the IBM 750GX/CL platform w/ TSI10x bridge
+ *
+ * Copyright 2007 IBM Corporation
+ *
+ * Stephen Winiecki <stevewin@us.ibm.com>
+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>
+ *
+ * Based on code from mpc7448_hpc2.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ */
+
+#ifndef __PPC_PLATFORMS_PPC750GXCL_TSI_H
+#define __PPC_PLATFORMS_PPC750GXCL_TSI_H
+
+#include <asm/ppcboot.h>
+
+/* Base Addresses for the PCI bus
+ */
+#define PPC750GXCL_TSI_PCI_MEM_OFFSET (0x00000000)
+#endif /* __PPC_PLATFORMS_H */
--- linux-2.6.orig/drivers/net/tsi108_eth.h
+++ linux-2.6/drivers/net/tsi108_eth.h
@@ -49,7 +49,11 @@
*/
#define PHY_MV88E 1 /* Marvel 88Exxxx PHY */
#define PHY_BCM54XX 2 /* Broardcom BCM54xx PHY */
+#if defined(CONFIG_HOLLY)
+#define TSI108_PHY_TYPE PHY_BCM54XX
+#else
#define TSI108_PHY_TYPE PHY_MV88E
+#endif
/*
* TSI108 GIGE port registers
--- linux-2.6.orig/include/asm-powerpc/tsi108.h
+++ linux-2.6/include/asm-powerpc/tsi108.h
@@ -68,7 +68,11 @@
#define TSI108_PB_ERRCS_ES (1 << 1)
#define TSI108_PB_ISR_PBS_RD_ERR (1 << 8)
+#ifdef CONFIG_HOLLY
+#define TSI108_PCI_CFG_BASE_PHYS (0x7c000000)
+#else
#define TSI108_PCI_CFG_BASE_PHYS (0xfb000000)
+#endif
#define TSI108_PCI_CFG_SIZE (0x01000000)
/* Global variables */
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 2/4] Holly defconfig
2007-05-04 18:13 [PATCH 0/4] Add support for 750CL Holly board Josh Boyer
2007-05-04 18:14 ` [PATCH 1/4] " Josh Boyer
@ 2007-05-04 18:15 ` Josh Boyer
2007-05-04 18:16 ` [PATCH 3/4] Holly DTS Josh Boyer
2007-05-04 18:16 ` [PATCH 4/4] Holly bootwrapper Josh Boyer
3 siblings, 0 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-04 18:15 UTC (permalink / raw)
To: linuxppc-dev
Holly/Hickory defconfig
Signed-off-by: Stephen Winiecki <stevewin@us.ibm.com>
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
---
arch/powerpc/configs/holly_defconfig | 1067 +++++++++++++++++++++++++++++++++++
1 file changed, 1067 insertions(+)
--- /dev/null
+++ linux-2.6/arch/powerpc/configs/holly_defconfig
@@ -0,0 +1,1067 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21
+# Mon Apr 30 12:51:49 2007
+#
+# CONFIG_PPC64 is not set
+CONFIG_PPC32=y
+CONFIG_PPC_MERGE=y
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_IRQ_PER_CPU=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_PPC=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_PPC_OF=y
+CONFIG_PPC_UDBG_16550=y
+# CONFIG_GENERIC_TBSYNC is not set
+CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
+# CONFIG_DEFAULT_UIMAGE is not set
+
+#
+# Processor support
+#
+CONFIG_CLASSIC32=y
+# CONFIG_PPC_82xx is not set
+# CONFIG_PPC_83xx is not set
+# CONFIG_PPC_85xx is not set
+# CONFIG_PPC_86xx is not set
+# CONFIG_PPC_8xx is not set
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_E200 is not set
+CONFIG_6xx=y
+CONFIG_PPC_FPU=y
+# CONFIG_PPC_DCR_NATIVE is not set
+# CONFIG_PPC_DCR_MMIO is not set
+# CONFIG_ALTIVEC is not set
+CONFIG_PPC_STD_MMU=y
+CONFIG_PPC_STD_MMU_32=y
+# CONFIG_SMP is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Platform support
+#
+# CONFIG_PPC_MULTIPLATFORM is not set
+CONFIG_EMBEDDED6xx=y
+# CONFIG_APUS is not set
+# CONFIG_PPC_MPC52xx is not set
+# CONFIG_PPC_MPC5200 is not set
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_NATIVE is not set
+# CONFIG_PQ2ADS is not set
+# CONFIG_LINKSTATION is not set
+# CONFIG_MPC7448HPC2 is not set
+CONFIG_HOLLY=y
+CONFIG_TSI108_BRIDGE=y
+CONFIG_MPIC=y
+CONFIG_MPIC_WEIRD=y
+# CONFIG_PPC_I8259 is not set
+# CONFIG_PPC_RTAS is not set
+# CONFIG_MMIO_NVRAM is not set
+# CONFIG_PPC_MPC106 is not set
+# CONFIG_PPC_970_NAP is not set
+# CONFIG_PPC_INDIRECT_IO is not set
+# CONFIG_GENERIC_IOMAP is not set
+
+#
+# CPU Frequency support
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_TAU is not set
+# CONFIG_CPM2 is not set
+
+#
+# Kernel options
+#
+# CONFIG_HIGHMEM is not set
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_PROC_DEVICETREE=y
+# CONFIG_CMDLINE_BOOL is not set
+# CONFIG_PM is not set
+# CONFIG_SECCOMP is not set
+# CONFIG_WANT_DEVICE_TREE is not set
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+# CONFIG_PPC_INDIRECT_PCI is not set
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCIEPORTBUS is not set
+# CONFIG_PCI_DEBUG is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_BOOT_LOAD=0x00800000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=y
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=131072
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+CONFIG_SATA_MV=y
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+# CONFIG_MAC_EMUMOUSEBTN is not set
+# CONFIG_WINDFARM is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_FIXED_PHY is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+CONFIG_TSI108_ETH=y
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_PCI is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_UARTLITE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_FB is not set
+# CONFIG_FB_IBM_GXT4500 is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+# CONFIG_UCC_SLOW is not set
+# CONFIG_UCC_FAST is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+
+#
+# Instrumentation Support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_DEBUGGER=y
+CONFIG_XMON=y
+CONFIG_XMON_DEFAULT=y
+CONFIG_XMON_DISASSEMBLY=y
+# CONFIG_BDI_SWITCH is not set
+# CONFIG_BOOTX_TEXT is not set
+# CONFIG_PPC_EARLY_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/4] Holly DTS
2007-05-04 18:13 [PATCH 0/4] Add support for 750CL Holly board Josh Boyer
2007-05-04 18:14 ` [PATCH 1/4] " Josh Boyer
2007-05-04 18:15 ` [PATCH 2/4] Holly defconfig Josh Boyer
@ 2007-05-04 18:16 ` Josh Boyer
2007-05-04 23:51 ` David Gibson
2007-05-04 18:16 ` [PATCH 4/4] Holly bootwrapper Josh Boyer
3 siblings, 1 reply; 25+ messages in thread
From: Josh Boyer @ 2007-05-04 18:16 UTC (permalink / raw)
To: linuxppc-dev
Add Holly/Hickory DTS file
Signed-off-by: Stephen Winiecki <stevewin@us.ibm.com>
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
---
arch/powerpc/boot/dts/holly.dts | 229 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 229 insertions(+)
--- /dev/null
+++ linux-2.6/arch/powerpc/boot/dts/holly.dts
@@ -0,0 +1,229 @@
+/*
+ * Device Tree Source for IBM Holly/Hickory (PPC 750CL/GX with TSI controller)
+ * Copyright 2007, IBM Corporation
+ *
+ * Stephen Winiecki <stevewin@us.ibm.com>
+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>
+ *
+ * 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.
+ *
+ * To build:
+ * dtc -I dts -O asm -o holly.S -b 0 holly.dts
+ * dtc -I dts -O dtb -o holly.dtb -b 0 holly.dts
+ */
+
+/ {
+ model = "ppc750-tsi109";
+ compatible = "ppc750";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ cpus {
+ name = "cpus";
+ #address-cells = <1>;
+ #size-cells =<0>;
+ PowerPC,750@0 {
+ name = "PowerPC,750";
+ device_type = "cpu";
+ reg = <0>;
+ d-cache-line-size = <20>;
+ i-cache-line-size = <20>;
+ d-cache-size = <8000>;
+ i-cache-size = <8000>;
+ d-cache-sets = <80>;
+ i-cache-sets = <80>;
+ timebase-frequency = <2faf080>;
+ clock-frequency = <23c34600>;
+ bus-frequency = <bebc200>;
+ 32-bit;
+ };
+ };
+
+ memory@0 {
+ name = "memory";
+ device_type = "memory";
+ reg = <00000000 20000000>;
+ };
+
+ tsi109@c0000000 {
+ name = "tsi109";
+ device_type = "tsi-bridge";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <00000000 c0000000 00010000>;
+ reg = <c0000000 00010000>;
+ bus-frequency = <0>;
+
+ i2c@7000 {
+ name = "i2c";
+ device_type = "i2c";
+ compatible = "tsi-i2c";
+ interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
+ interrupts = <e 2>;
+ reg = <7000 400>;
+ };
+
+ mdio@6000 {
+ name = "mdio";
+ device_type = "mdio";
+ compatible = "tsi-ethernet";
+ ethernet-phy@6000 {
+ name = "ethernet-phy";
+ device_type = "ethernet-phy";
+ reg = <6000 50>;
+ phy-id = <1>;
+ linux,phandle = <421>;
+ };
+ ethernet-phy@6400 {
+ name = "ethernet-phy";
+ device_type = "ethernet-phy";
+ reg = <6000 50>;
+ phy-id = <2>;
+ linux,phandle = <422>;
+ };
+ };
+
+ ethernet@6200 {
+ name = "ethernet";
+ device_type = "network";
+ compatible = "tsi-ethernet";
+ model = "TSI-ETH";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <6000 200>;
+ address = [ 00 0d 60 f4 3f 04 ];
+ interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
+ interrupts = <10 2>;
+ phy-handle = <421>;
+ };
+
+ ethernet@6600 {
+ name = "ethernet";
+ device_type = "network";
+ compatible = "tsi-ethernet";
+ model = "TSI-ETH";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <6400 200>;
+ address = [ 00 0d 60 f4 3f 05 ];
+ interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
+ interrupts = <11 2>;
+ phy-handle = <422>;
+ };
+
+ serial@7808 {
+ name = "serial";
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <7808 200>;
+ virtual-reg = <c0007808>;
+ reg-shift = <0>;
+ clock-frequency = <3F9C6000>;
+ current-speed = <1c200>;
+ interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
+ interrupts = <c 2>;
+ };
+
+ serial@7c08 {
+ name = "serial";
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <7c08 200>;
+ virtual-reg = <c0007c08>;
+ reg-shift = <0>;
+ clock-frequency = <3F9C6000>;
+ current-speed = <1c200>;
+ interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
+ interrupts = <d 2>;
+ };
+
+ pic@7400 {
+ name = "pic";
+ device_type = "open-pic";
+ compatible = "chrp,open-pic";
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ reg = <7400 400>;
+ built-in;
+ big-endian;
+ };
+
+ pci@1000 {
+ name = "pci";
+ device_type = "pci";
+ compatible = "tsi109";
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ reg = <1000 1000>;
+ bus-range = <0 0>;
+ /*----------------------------------------------------+
+ | PCI memory range.
+ | 01 denotes I/O space
+ | 02 denotes 32-bit memory space
+ +----------------------------------------------------*/
+ ranges = <02000000 0 40000000 40000000 0 10000000
+ 01000000 0 00000000 7e000000 0 00010000>;
+ clock-frequency = <7f28154>;
+ interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
+ interrupts = <17 2>;
+ interrupt-map-mask = <f800 0 0 7>;
+ /*----------------------------------------------------+
+ | The INTA, INTB, INTC, INTD are shared.
+ +----------------------------------------------------*/
+ interrupt-map = <
+ /*--------------------------------------------+
+ | AD17.
+ +--------------------------------------------*/
+ 0800 0 0 1 1180 24 0
+ 0800 0 0 2 1180 25 0
+ 0800 0 0 3 1180 26 0
+ 0800 0 0 4 1180 27 0
+ /*--------------------------------------------+
+ | AD18.
+ +--------------------------------------------*/
+ 1000 0 0 1 1180 25 0
+ 1000 0 0 2 1180 26 0
+ 1000 0 0 3 1180 27 0
+ 1000 0 0 4 1180 24 0
+ /*--------------------------------------------+
+ | AD19.
+ +--------------------------------------------*/
+ 1800 0 0 1 1180 26 0
+ 1800 0 0 2 1180 27 0
+ 1800 0 0 3 1180 24 0
+ 1800 0 0 4 1180 25 0
+
+ 2000 0 0 1 1180 27 0
+ 2000 0 0 2 1180 24 0
+ 2000 0 0 3 1180 25 0
+ 2000 0 0 4 1180 26 0
+ >;
+
+ router@1180 {
+ name = "router";
+ device_type = "pic-router";
+ linux,phandle = <1180>;
+ interrupt-controller;
+ built-in;
+ big-endian;
+ clock-frequency = <0>;
+ #address-cells = <0>;
+ #interrupt-cells = <2>;
+ interrupts = <17 2>;
+ interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
+ };
+ };
+ };
+
+ chosen {
+ name = "chosen";
+ linux,stdout-path = "/tsi109@c0000000/serial@7808";
+ bootargs = "console=ttyS0,115200";
+ linux,platform = <0>;
+ linux,initrd-start = <0>;
+ linux,initrd-end = <0>;
+ };
+};
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 4/4] Holly bootwrapper
2007-05-04 18:13 [PATCH 0/4] Add support for 750CL Holly board Josh Boyer
` (2 preceding siblings ...)
2007-05-04 18:16 ` [PATCH 3/4] Holly DTS Josh Boyer
@ 2007-05-04 18:16 ` Josh Boyer
3 siblings, 0 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-04 18:16 UTC (permalink / raw)
To: linuxppc-dev
Add Holly/Hickory bootwrapper
Signed-off-by: Stephen Winiecki <stevewin@us.ibm.com>
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
---
arch/powerpc/boot/Makefile | 9 ++++++++-
arch/powerpc/boot/holly.c | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 1 deletion(-)
--- linux-2.6.orig/arch/powerpc/boot/Makefile
+++ linux-2.6/arch/powerpc/boot/Makefile
@@ -43,7 +43,7 @@ $(addprefix $(obj)/,$(zlib) main.o): $(a
src-wlib := string.S crt0.S stdio.c main.c flatdevtree.c flatdevtree_misc.c \
ns16550.c serial.c simple_alloc.c div64.S util.S \
gunzip_util.c elf_util.c $(zlib) devtree.c
-src-plat := of.c cuboot-83xx.c cuboot-85xx.c
+src-plat := of.c cuboot-83xx.c cuboot-85xx.c holly.c
src-boot := $(src-wlib) $(src-plat) empty.c
src-boot := $(addprefix $(obj)/, $(src-boot))
@@ -131,6 +131,7 @@ image-$(CONFIG_PPC_EFIKA) += zImage.chr
image-$(CONFIG_PPC_PMAC) += zImage.pmac
image-$(CONFIG_PPC_83xx) += cuImage.83xx
image-$(CONFIG_PPC_85xx) += cuImage.85xx
+image-$(CONFIG_HOLLY) += zImage.holly-elf
image-$(CONFIG_DEFAULT_UIMAGE) += uImage
# For 32-bit powermacs, build the COFF and miboot images
@@ -161,6 +162,12 @@ $(obj)/zImage.ps3: vmlinux
$(obj)/zImage.initrd.ps3: vmlinux
@echo " WARNING zImage.initrd.ps3 not supported (yet)"
+$(obj)/zImage.holly-elf: vmlinux $(wrapperbits)
+ $(call if_changed,wrap,holly,$(obj)/dts/holly.dts,,)
+
+$(obj)/zImage.initrd.holly-elf: vmlinux $(wrapperbits) $(obj)/ramdisk.image.gz
+ $(call if_changed,wrap,holly,$(obj)/dts/holly.dts,,$(obj)/ramdisk.image.gz)
+
$(obj)/uImage: vmlinux $(wrapperbits)
$(call if_changed,wrap,uboot)
--- /dev/null
+++ linux-2.6/arch/powerpc/boot/holly.c
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2007 IBM Corporation
+ *
+ * Stephen Winiecki <stevewin@us.ibm.com>
+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>
+ *
+ * Based on earlier code:
+ * Copyright (C) Paul Mackerras 1997.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ */
+#include <stdarg.h>
+#include <stddef.h>
+#include "types.h"
+#include "elf.h"
+#include "string.h"
+#include "stdio.h"
+#include "page.h"
+#include "ops.h"
+#include "io.h"
+
+extern char _start[];
+extern char _end[];
+extern char _dtb_start[];
+extern char _dtb_end[];
+
+BSS_STACK(4096);
+
+void platform_init(unsigned long r3, unsigned long r4, unsigned long r5)
+{
+ u32 heapsize = 0x8000000 - (u32)_end; /* 128M */
+
+ simple_alloc_init(_end, heapsize, 32, 64);
+ ft_init(_dtb_start, 0, 4);
+ serial_console_init();
+}
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 18:14 ` [PATCH 1/4] " Josh Boyer
@ 2007-05-04 18:35 ` Kumar Gala
2007-05-04 19:11 ` Josh Boyer
2007-05-04 19:01 ` Olof Johansson
2007-05-04 19:44 ` Arnd Bergmann
2 siblings, 1 reply; 25+ messages in thread
From: Kumar Gala @ 2007-05-04 18:35 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev
On May 4, 2007, at 1:14 PM, Josh Boyer wrote:
> Add PowerPC 750 Holly/Hickory platform support
>
> Signed-off-by: Stephen Winiecki <stevewin@us.ibm.com>
> Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
> ---
> arch/powerpc/Kconfig | 2
> arch/powerpc/platforms/embedded6xx/Kconfig | 12 -
> arch/powerpc/platforms/embedded6xx/Makefile | 1
> arch/powerpc/platforms/embedded6xx/holly.c | 326 ++++++++++++++++
> ++++++++++++
> arch/powerpc/platforms/embedded6xx/holly.h | 24 ++
> drivers/net/tsi108_eth.h | 4
> include/asm-powerpc/tsi108.h | 4
> 7 files changed, 371 insertions(+), 2 deletions(-)
>
> --- linux-2.6.orig/arch/powerpc/Kconfig
> +++ linux-2.6/arch/powerpc/Kconfig
> @@ -659,7 +659,7 @@ config MCA
> config PCI
> bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx ||
> PPC_86xx \
> || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \
> - || MPC7448HPC2 || PPC_PS3
> + || MPC7448HPC2 || PPC_PS3 || HOLLY
> default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx \
> && !PPC_85xx && !PPC_86xx
> default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS
> --- linux-2.6.orig/arch/powerpc/platforms/embedded6xx/Kconfig
> +++ linux-2.6/arch/powerpc/platforms/embedded6xx/Kconfig
> @@ -25,11 +25,21 @@ config MPC7448HPC2
> help
> Select MPC7448HPC2 if configuring for Freescale MPC7448HPC2
> (Taiga)
> platform
> +
> +config HOLLY
> + bool "PPC750GX/CL with TSI10x bridge (Hickory/Holly)"
> + select TSI108_BRIDGE
> + select PPC_UDBG_16550
> + select MPIC
> + select MPIC_WEIRD
> + help
> + Select HOLLY if configuring for an IBM 750GX/CL Eval
> + Board with TSI108/9 bridge (Hickory/Holly)
> endchoice
>
> config TSI108_BRIDGE
> bool
I wondering if we should have select MPIC and MPIC_WEIRD here instead
of on the board config.
> - depends on MPC7448HPC2
> + depends on MPC7448HPC2 || HOLLY
> default y
>
> config MPC10X_BRIDGE
> --- linux-2.6.orig/arch/powerpc/platforms/embedded6xx/Makefile
> +++ linux-2.6/arch/powerpc/platforms/embedded6xx/Makefile
> @@ -3,3 +3,4 @@
> #
> obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o
> obj-$(CONFIG_LINKSTATION) += linkstation.o ls_uart.o
> +obj-$(CONFIG_HOLLY) += holly.o
> --- /dev/null
> +++ linux-2.6/arch/powerpc/platforms/embedded6xx/holly.c
> @@ -0,0 +1,326 @@
> +/*
> + * Board setup routines for the IBM 750GX/CL platform w/ TSI10x
> bridge
> + *
> + * Copyright 2007 IBM Corporation
> + *
> + * Stephen Winiecki <stevewin@us.ibm.com>
> + * Josh Boyer <jwboyer@linux.vnet.ibm.com>
> + *
> + * Based on code from mpc7448_hpc2.c
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + */
> +
> +#include <linux/stddef.h>
> +#include <linux/kernel.h>
> +#include <linux/pci.h>
> +#include <linux/kdev_t.h>
> +#include <linux/console.h>
> +#include <linux/delay.h>
> +#include <linux/irq.h>
> +#include <linux/ide.h>
> +#include <linux/seq_file.h>
> +#include <linux/root_dev.h>
> +#include <linux/serial.h>
> +#include <linux/tty.h>
> +#include <linux/serial_core.h>
> +
> +#include <asm/system.h>
> +#include <asm/time.h>
> +#include <asm/machdep.h>
> +#include <asm/prom.h>
> +#include <asm/udbg.h>
> +#include <asm/tsi108.h>
> +#include <asm/pci-bridge.h>
> +#include <asm/reg.h>
> +#include <mm/mmu_decl.h>
> +#include "holly.h"
> +#include <asm/tsi108_irq.h>
> +#include <asm/mpic.h>
> +#include <asm/of_platform.h>
> +
> +#undef DEBUG
> +#ifdef DEBUG
> +#define DBG(fmt...) do { printk(fmt); } while(0)
> +#else
> +#define DBG(fmt...) do { } while(0)
> +#endif
> +
> +#ifndef CONFIG_PCI
> +pci_dram_offset = PPC750GXCL_TSI_PCI_MEM_OFFSET;
> +#endif
> +
> +extern int tsi108_setup_pci(struct device_node *dev);
> +extern void tsi108_pci_int_init(struct device_node *node);
> +extern void tsi108_irq_cascade(unsigned int irq, struct irq_desc
> *desc);
> +
> +int holly_exclude_device(u_char bus, u_char devfn)
> +{
> + if (bus == 0 && PCI_SLOT(devfn) == 0)
> + return PCIBIOS_DEVICE_NOT_FOUND;
> + else
> + return PCIBIOS_SUCCESSFUL;
> +}
> +
> +static void holly_remap_bridge(void)
> +{
> + u32 lut_val, lut_addr = 0x900, misc_cfg;
> + int i;
> +
> + printk(KERN_ERR "Remapping PCI bridge\n");
> +
> + /* Re-init the PCI bridge and LUT registers to have mappings that
> don't
> + * rely on PIBS */
> + for (i = 0; i < 31; i++) {
> + tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x00000201);
> + lut_addr += 4;
> + tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x0);
> + lut_addr += 4;
> + }
> +
> + /* Reserve the last LUT entry for PCI I/O space */
> + tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x00000241);
> + lut_addr += 4;
> + tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x0);
> +
> + /* Map PCI I/O space */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x210, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x20c, 0x1);
> +
> + /* Map PCI CFG space */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x208, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x204, 0x7c000000 | 0x01);
> +
> + /* We don't need MEM32 and PRM remapping so disable them */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x214, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x220, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x230, 0x0);
> +
> + /* Set P2O_BAR0 */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x14, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x10, 0xc0000000);
> +
> + /* Init the PCI LUTs to do no remapping */
> + lut_addr = 0x500;
> + lut_val = 0x00000002;
> +
> + for (i = 0; i < 32; i++) {
> + tsi108_write_reg(TSI108_PCI_OFFSET + lut_addr, lut_val);
> + lut_addr += 4;
> + tsi108_write_reg(TSI108_PCI_OFFSET + lut_addr, 0x40000000);
> + lut_addr += 4;
> + lut_val += 0x02000000;
> + }
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x4c, 0x00007900);
> +
> + /* Set 64-bit PCI bus address for system memory */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x1c, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x18, 0x0);
> +}
> +
> +static void __init holly_setup_arch(void)
> +{
> + struct device_node *cpu;
> + struct device_node *np;
> +
> + if (ppc_md.progress)
> + ppc_md.progress("holly_setup_arch():set_bridge", 0);
> +
> + cpu = of_find_node_by_type(NULL, "cpu");
> + if (cpu != 0) {
> + const unsigned int *fp;
> +
> + fp = of_get_property(cpu, "clock-frequency", NULL);
> + if (fp != 0)
> + loops_per_jiffy = *fp / HZ;
> + else
> + loops_per_jiffy = 50000000 / HZ;
> + of_node_put(cpu);
> + }
> + tsi108_csr_vir_base = get_vir_csrbase();
> +
> + /* setup PCI host bridge */
> + holly_remap_bridge();
> +#ifdef CONFIG_PCI
> + for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
> + tsi108_setup_pci(np);
> +
> + ppc_md.pci_exclude_device = holly_exclude_device;
> + if (ppc_md.progress)
> + ppc_md.progress("tsi108: resources set", 0x100);
> +#endif
> + printk(KERN_INFO "PPC750GX/CL Platform\n");
Should this be something like "Holly PPC750GX/CL Platform"
> +}
> +
> +/*
> + * Interrupt setup and service. Interrrupts on the holly come
> + * from the four external INT pins, PCI interrupts are routed via
> + * PCI interrupt control registers, it generates internal IRQ23
> + *
> + * Interrupt routing on the Holly Board:
> + * TSI108:PB_INT[0] -> CPU0:INT#
> + * TSI108:PB_INT[1] -> CPU0:MCP#
> + * TSI108:PB_INT[2] -> N/C
> + * TSI108:PB_INT[3] -> N/C
> + */
> +static void __init holly_init_IRQ(void)
> +{
> + struct mpic *mpic;
> + phys_addr_t mpic_paddr = 0;
> + struct device_node *tsi_pic;
> +#ifdef CONFIG_PCI
> + unsigned int cascade_pci_irq;
> + struct device_node *tsi_pci;
> + struct device_node *cascade_node = NULL;
> +#endif
> +
> + tsi_pic = of_find_node_by_type(NULL, "open-pic");
> + if (tsi_pic) {
> + unsigned int size;
> + const void *prop = of_get_property(tsi_pic, "reg", &size);
> + mpic_paddr = of_translate_address(tsi_pic, prop);
> + }
> +
> + if (mpic_paddr == 0) {
> + printk(KERN_ERR "%s: No tsi108 PIC found !\n", __func__);
> + return;
> + }
> +
> + DBG("%s: tsi108 pic phys_addr = 0x%x\n", __func__, (u32)
> mpic_paddr);
> +
> + mpic = mpic_alloc(tsi_pic, mpic_paddr,
> + MPIC_PRIMARY | MPIC_BIG_ENDIAN | MPIC_WANTS_RESET |
> + MPIC_SPV_EOI | MPIC_NO_PTHROU_DIS | MPIC_REGSET_TSI108,
> + 24,
> + NR_IRQS-4, /* num_sources used */
> + "Tsi108_PIC");
> +
> + BUG_ON(mpic == NULL);
> +
> + mpic_assign_isu(mpic, 0, mpic_paddr + 0x100);
> +
> + mpic_init(mpic);
> +
> +#ifdef CONFIG_PCI
> + tsi_pci = of_find_node_by_type(NULL, "pci");
> + if (tsi_pci == NULL) {
> + printk(KERN_ERR "%s: No tsi108 pci node found !\n", __func__);
> + return;
> + }
> +
> + cascade_node = of_find_node_by_type(NULL, "pic-router");
> + if (cascade_node == NULL) {
> + printk(KERN_ERR "%s: No tsi108 pci cascade node found !\n",
> __func__);
> + return;
> + }
> +
> + cascade_pci_irq = irq_of_parse_and_map(tsi_pci, 0);
> + DBG("%s: tsi108 cascade_pci_irq = 0x%x\n", __func__, (u32)
> cascade_pci_irq);
> + tsi108_pci_int_init(cascade_node);
> + set_irq_data(cascade_pci_irq, mpic);
> + set_irq_chained_handler(cascade_pci_irq, tsi108_irq_cascade);
> +#endif
> + /* Configure MPIC outputs to CPU0 */
> + tsi108_write_reg(TSI108_MPIC_OFFSET + 0x30c, 0);
> + of_node_put(tsi_pic);
> +}
> +
> +void holly_show_cpuinfo(struct seq_file *m)
> +{
> + seq_printf(m, "vendor\t\t: IBM\n");
> + seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
Should 'Holly' be in the machine name?
> +}
> +
> +void holly_restart(char *cmd)
> +{
> + unsigned long *ocn_bar1 = NULL;
This should probably be __be32 __iomem
> + unsigned long bar;
> + struct device_node *bridge = NULL;
> + const void *prop;
> + int size;
> + phys_addr_t addr = 0xc0000000;
> +
> + local_irq_disable();
> +
> + bridge = of_find_node_by_type(NULL, "tsi-bridge");
> + if (bridge) {
> + prop = of_get_property(bridge, "reg", &size);
> + addr = of_translate_address(bridge, prop);
> + }
> + addr += (TSI108_PB_OFFSET + 0x414);
> +
> + ocn_bar1 = ioremap(addr, 0x4);
> +
> + /* Turn on the BOOT bit so the addresses are correctly
> + * routed to the HLP interface */
> + bar = ioread32be(ocn_bar1);
> + bar |= 2;
> + iowrite32be(bar, ocn_bar1);
> + iosync();
> +
> + /* Set SRR0 to the reset vector and turn on MSR_IP */
> + mtspr(SPRN_SRR0, 0xfff00100);
> + mtspr(SPRN_SRR1, MSR_IP);
> +
> + /* Do an rfi to jump back to firmware. Somewhat evil,
> + * but it works
> + */
> + __asm__ __volatile__("rfi" : : : "memory");
> +
> + /* Spin until reset happens. Shouldn't really get here */
> + for (;;) ;
> +}
> +
> +void holly_power_off(void)
> +{
> + local_irq_disable();
> + /* No way to shut power off with software */
> + for (;;) ;
> +}
> +
> +void holly_halt(void)
> +{
> + holly_power_off();
> +}
> +
> +/*
> + * Called very early, device-tree isn't unflattened
> + */
> +static int __init holly_probe(void)
> +{
> + unsigned long root = of_get_flat_dt_root();
> +
> + if (!of_flat_dt_is_compatible(root, "ppc750"))
> + return 0;
This seems like to generic of a match.
> + return 1;
> +}
> +
> +static int ppc750_machine_check_exception(struct pt_regs *regs)
> +{
> + extern void tsi108_clear_pci_cfg_error(void);
> + const struct exception_table_entry *entry;
> +
> + /* Are we prepared to handle this fault */
> + if ((entry = search_exception_tables(regs->nip)) != NULL) {
> + tsi108_clear_pci_cfg_error();
> + regs->msr |= MSR_RI;
> + regs->nip = entry->fixup;
> + return 1;
> + }
> + return 0;
> +}
> +
> +define_machine(holly){
> + .name = "PPC750 GX/CL TSI",
> + .probe = holly_probe,
> + .setup_arch = holly_setup_arch,
> + .init_IRQ = holly_init_IRQ,
> + .show_cpuinfo = holly_show_cpuinfo,
> + .get_irq = mpic_get_irq,
> + .restart = holly_restart,
> + .calibrate_decr = generic_calibrate_decr,
> + .machine_check_exception = ppc750_machine_check_exception,
> + .progress = udbg_progress,
> +};
> --- /dev/null
> +++ linux-2.6/arch/powerpc/platforms/embedded6xx/holly.h
> @@ -0,0 +1,24 @@
> +/*
> + * Definitions for the IBM 750GX/CL platform w/ TSI10x bridge
> + *
> + * Copyright 2007 IBM Corporation
> + *
> + * Stephen Winiecki <stevewin@us.ibm.com>
> + * Josh Boyer <jwboyer@linux.vnet.ibm.com>
> + *
> + * Based on code from mpc7448_hpc2.h
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + */
> +
> +#ifndef __PPC_PLATFORMS_PPC750GXCL_TSI_H
> +#define __PPC_PLATFORMS_PPC750GXCL_TSI_H
> +
> +#include <asm/ppcboot.h>
> +
> +/* Base Addresses for the PCI bus
> + */
> +#define PPC750GXCL_TSI_PCI_MEM_OFFSET (0x00000000)
> +#endif /* __PPC_PLATFORMS_H */
> --- linux-2.6.orig/drivers/net/tsi108_eth.h
> +++ linux-2.6/drivers/net/tsi108_eth.h
> @@ -49,7 +49,11 @@
> */
> #define PHY_MV88E 1 /* Marvel 88Exxxx PHY */
> #define PHY_BCM54XX 2 /* Broardcom BCM54xx PHY */
> +#if defined(CONFIG_HOLLY)
> +#define TSI108_PHY_TYPE PHY_BCM54XX
> +#else
> #define TSI108_PHY_TYPE PHY_MV88E
> +#endif
This seems pretty bad. Can we at least make this some type of kernel
config since I'm guessing the tsi108 isn't using the phylib.
> /*
> * TSI108 GIGE port registers
> --- linux-2.6.orig/include/asm-powerpc/tsi108.h
> +++ linux-2.6/include/asm-powerpc/tsi108.h
> @@ -68,7 +68,11 @@
> #define TSI108_PB_ERRCS_ES (1 << 1)
> #define TSI108_PB_ISR_PBS_RD_ERR (1 << 8)
>
> +#ifdef CONFIG_HOLLY
> +#define TSI108_PCI_CFG_BASE_PHYS (0x7c000000)
> +#else
> #define TSI108_PCI_CFG_BASE_PHYS (0xfb000000)
> +#endif
> #define TSI108_PCI_CFG_SIZE (0x01000000)
> /* Global variables */
>
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 18:14 ` [PATCH 1/4] " Josh Boyer
2007-05-04 18:35 ` Kumar Gala
@ 2007-05-04 19:01 ` Olof Johansson
2007-05-04 19:18 ` Josh Boyer
2007-05-04 19:44 ` Arnd Bergmann
2 siblings, 1 reply; 25+ messages in thread
From: Olof Johansson @ 2007-05-04 19:01 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev
Hi,
Overall pretty good, I have a few comments below.
-Olof
On Fri, May 04, 2007 at 01:14:29PM -0500, Josh Boyer wrote:
> Add PowerPC 750 Holly/Hickory platform support
>
> Signed-off-by: Stephen Winiecki <stevewin@us.ibm.com>
> Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
> ---
> arch/powerpc/Kconfig | 2
> arch/powerpc/platforms/embedded6xx/Kconfig | 12 -
> arch/powerpc/platforms/embedded6xx/Makefile | 1
> arch/powerpc/platforms/embedded6xx/holly.c | 326 ++++++++++++++++++++++++++++
> arch/powerpc/platforms/embedded6xx/holly.h | 24 ++
> drivers/net/tsi108_eth.h | 4
> include/asm-powerpc/tsi108.h | 4
> 7 files changed, 371 insertions(+), 2 deletions(-)
>
> --- linux-2.6.orig/arch/powerpc/Kconfig
> +++ linux-2.6/arch/powerpc/Kconfig
> @@ -659,7 +659,7 @@ config MCA
> config PCI
> bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \
> || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \
> - || MPC7448HPC2 || PPC_PS3
> + || MPC7448HPC2 || PPC_PS3 || HOLLY
> default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx \
> && !PPC_85xx && !PPC_86xx
> default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS
> --- linux-2.6.orig/arch/powerpc/platforms/embedded6xx/Kconfig
> +++ linux-2.6/arch/powerpc/platforms/embedded6xx/Kconfig
> @@ -25,11 +25,21 @@ config MPC7448HPC2
> help
> Select MPC7448HPC2 if configuring for Freescale MPC7448HPC2 (Taiga)
> platform
> +
> +config HOLLY
> + bool "PPC750GX/CL with TSI10x bridge (Hickory/Holly)"
> + select TSI108_BRIDGE
> + select PPC_UDBG_16550
> + select MPIC
> + select MPIC_WEIRD
> + help
> + Select HOLLY if configuring for an IBM 750GX/CL Eval
> + Board with TSI108/9 bridge (Hickory/Holly)
> endchoice
>
> config TSI108_BRIDGE
> bool
> - depends on MPC7448HPC2
> + depends on MPC7448HPC2 || HOLLY
> default y
>
> config MPC10X_BRIDGE
> --- linux-2.6.orig/arch/powerpc/platforms/embedded6xx/Makefile
> +++ linux-2.6/arch/powerpc/platforms/embedded6xx/Makefile
> @@ -3,3 +3,4 @@
> #
> obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o
> obj-$(CONFIG_LINKSTATION) += linkstation.o ls_uart.o
> +obj-$(CONFIG_HOLLY) += holly.o
> --- /dev/null
> +++ linux-2.6/arch/powerpc/platforms/embedded6xx/holly.c
> @@ -0,0 +1,326 @@
> +/*
> + * Board setup routines for the IBM 750GX/CL platform w/ TSI10x bridge
> + *
> + * Copyright 2007 IBM Corporation
> + *
> + * Stephen Winiecki <stevewin@us.ibm.com>
> + * Josh Boyer <jwboyer@linux.vnet.ibm.com>
> + *
> + * Based on code from mpc7448_hpc2.c
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + */
> +
> +#include <linux/stddef.h>
> +#include <linux/kernel.h>
> +#include <linux/pci.h>
> +#include <linux/kdev_t.h>
> +#include <linux/console.h>
> +#include <linux/delay.h>
> +#include <linux/irq.h>
> +#include <linux/ide.h>
> +#include <linux/seq_file.h>
> +#include <linux/root_dev.h>
> +#include <linux/serial.h>
> +#include <linux/tty.h>
> +#include <linux/serial_core.h>
> +
> +#include <asm/system.h>
> +#include <asm/time.h>
> +#include <asm/machdep.h>
> +#include <asm/prom.h>
> +#include <asm/udbg.h>
> +#include <asm/tsi108.h>
> +#include <asm/pci-bridge.h>
> +#include <asm/reg.h>
> +#include <mm/mmu_decl.h>
> +#include "holly.h"
> +#include <asm/tsi108_irq.h>
> +#include <asm/mpic.h>
> +#include <asm/of_platform.h>
> +
> +#undef DEBUG
> +#ifdef DEBUG
> +#define DBG(fmt...) do { printk(fmt); } while(0)
> +#else
> +#define DBG(fmt...) do { } while(0)
> +#endif
Please use pr_debug() instead.
> +#ifndef CONFIG_PCI
> +pci_dram_offset = PPC750GXCL_TSI_PCI_MEM_OFFSET;
> +#endif
What's this about?
> +extern int tsi108_setup_pci(struct device_node *dev);
> +extern void tsi108_pci_int_init(struct device_node *node);
> +extern void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc);
> +
> +int holly_exclude_device(u_char bus, u_char devfn)
> +{
> + if (bus == 0 && PCI_SLOT(devfn) == 0)
> + return PCIBIOS_DEVICE_NOT_FOUND;
> + else
> + return PCIBIOS_SUCCESSFUL;
> +}
> +
> +static void holly_remap_bridge(void)
> +{
> + u32 lut_val, lut_addr = 0x900, misc_cfg;
Please initialize lut_addr right before using it instead of here, especially
since you re-assign it later on.
> + int i;
> +
> + printk(KERN_ERR "Remapping PCI bridge\n");
> +
> + /* Re-init the PCI bridge and LUT registers to have mappings that don't
> + * rely on PIBS */
Comment style
> + for (i = 0; i < 31; i++) {
> + tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x00000201);
> + lut_addr += 4;
> + tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x0);
> + lut_addr += 4;
> + }
> +
> + /* Reserve the last LUT entry for PCI I/O space */
> + tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x00000241);
> + lut_addr += 4;
> + tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x0);
> +
> + /* Map PCI I/O space */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x210, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x20c, 0x1);
> +
> + /* Map PCI CFG space */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x208, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x204, 0x7c000000 | 0x01);
> +
> + /* We don't need MEM32 and PRM remapping so disable them */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x214, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x220, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x230, 0x0);
It would be nice to get these constants defined up, but I know it's not always
practical. I'll bring it up anyway. :-)
> +
> + /* Set P2O_BAR0 */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x14, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x10, 0xc0000000);
> +
> + /* Init the PCI LUTs to do no remapping */
> + lut_addr = 0x500;
> + lut_val = 0x00000002;
> +
> + for (i = 0; i < 32; i++) {
> + tsi108_write_reg(TSI108_PCI_OFFSET + lut_addr, lut_val);
> + lut_addr += 4;
> + tsi108_write_reg(TSI108_PCI_OFFSET + lut_addr, 0x40000000);
> + lut_addr += 4;
> + lut_val += 0x02000000;
> + }
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x4c, 0x00007900);
> +
> + /* Set 64-bit PCI bus address for system memory */
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x1c, 0x0);
> + tsi108_write_reg(TSI108_PCI_OFFSET + 0x18, 0x0);
> +}
> +
> +static void __init holly_setup_arch(void)
> +{
> + struct device_node *cpu;
> + struct device_node *np;
> +
> + if (ppc_md.progress)
> + ppc_md.progress("holly_setup_arch():set_bridge", 0);
> +
> + cpu = of_find_node_by_type(NULL, "cpu");
> + if (cpu != 0) {
> + const unsigned int *fp;
> +
> + fp = of_get_property(cpu, "clock-frequency", NULL);
> + if (fp != 0)
> + loops_per_jiffy = *fp / HZ;
> + else
> + loops_per_jiffy = 50000000 / HZ;
> + of_node_put(cpu);
> + }
> + tsi108_csr_vir_base = get_vir_csrbase();
> +
> + /* setup PCI host bridge */
> + holly_remap_bridge();
> +#ifdef CONFIG_PCI
> + for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
> + tsi108_setup_pci(np);
On an environment without PCI, wouldn't it make more sense to leave it
out of the device tree, and thus not have a match in the above, instead
of taking out CONFIG_PCI?
> +
> + ppc_md.pci_exclude_device = holly_exclude_device;
> + if (ppc_md.progress)
> + ppc_md.progress("tsi108: resources set", 0x100);
> +#endif
> + printk(KERN_INFO "PPC750GX/CL Platform\n");
> +}
> +
> +/*
> + * Interrupt setup and service. Interrrupts on the holly come
> + * from the four external INT pins, PCI interrupts are routed via
> + * PCI interrupt control registers, it generates internal IRQ23
> + *
> + * Interrupt routing on the Holly Board:
> + * TSI108:PB_INT[0] -> CPU0:INT#
> + * TSI108:PB_INT[1] -> CPU0:MCP#
> + * TSI108:PB_INT[2] -> N/C
> + * TSI108:PB_INT[3] -> N/C
> + */
> +static void __init holly_init_IRQ(void)
> +{
> + struct mpic *mpic;
> + phys_addr_t mpic_paddr = 0;
> + struct device_node *tsi_pic;
> +#ifdef CONFIG_PCI
> + unsigned int cascade_pci_irq;
> + struct device_node *tsi_pci;
> + struct device_node *cascade_node = NULL;
> +#endif
> +
> + tsi_pic = of_find_node_by_type(NULL, "open-pic");
> + if (tsi_pic) {
> + unsigned int size;
> + const void *prop = of_get_property(tsi_pic, "reg", &size);
> + mpic_paddr = of_translate_address(tsi_pic, prop);
> + }
> +
> + if (mpic_paddr == 0) {
> + printk(KERN_ERR "%s: No tsi108 PIC found !\n", __func__);
> + return;
> + }
> +
> + DBG("%s: tsi108 pic phys_addr = 0x%x\n", __func__, (u32) mpic_paddr);
> +
> + mpic = mpic_alloc(tsi_pic, mpic_paddr,
> + MPIC_PRIMARY | MPIC_BIG_ENDIAN | MPIC_WANTS_RESET |
> + MPIC_SPV_EOI | MPIC_NO_PTHROU_DIS | MPIC_REGSET_TSI108,
> + 24,
> + NR_IRQS-4, /* num_sources used */
> + "Tsi108_PIC");
> +
> + BUG_ON(mpic == NULL);
> +
> + mpic_assign_isu(mpic, 0, mpic_paddr + 0x100);
> +
> + mpic_init(mpic);
> +
> +#ifdef CONFIG_PCI
> + tsi_pci = of_find_node_by_type(NULL, "pci");
> + if (tsi_pci == NULL) {
> + printk(KERN_ERR "%s: No tsi108 pci node found !\n", __func__);
> + return;
> + }
> +
> + cascade_node = of_find_node_by_type(NULL, "pic-router");
> + if (cascade_node == NULL) {
> + printk(KERN_ERR "%s: No tsi108 pci cascade node found !\n", __func__);
> + return;
> + }
> +
> + cascade_pci_irq = irq_of_parse_and_map(tsi_pci, 0);
> + DBG("%s: tsi108 cascade_pci_irq = 0x%x\n", __func__, (u32) cascade_pci_irq);
> + tsi108_pci_int_init(cascade_node);
> + set_irq_data(cascade_pci_irq, mpic);
> + set_irq_chained_handler(cascade_pci_irq, tsi108_irq_cascade);
> +#endif
> + /* Configure MPIC outputs to CPU0 */
> + tsi108_write_reg(TSI108_MPIC_OFFSET + 0x30c, 0);
> + of_node_put(tsi_pic);
> +}
> +
> +void holly_show_cpuinfo(struct seq_file *m)
> +{
> + seq_printf(m, "vendor\t\t: IBM\n");
> + seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
> +}
> +
> +void holly_restart(char *cmd)
> +{
> + unsigned long *ocn_bar1 = NULL;
> + unsigned long bar;
> + struct device_node *bridge = NULL;
> + const void *prop;
> + int size;
> + phys_addr_t addr = 0xc0000000;
> +
> + local_irq_disable();
> +
> + bridge = of_find_node_by_type(NULL, "tsi-bridge");
> + if (bridge) {
> + prop = of_get_property(bridge, "reg", &size);
> + addr = of_translate_address(bridge, prop);
> + }
> + addr += (TSI108_PB_OFFSET + 0x414);
> +
> + ocn_bar1 = ioremap(addr, 0x4);
> +
> + /* Turn on the BOOT bit so the addresses are correctly
> + * routed to the HLP interface */
> + bar = ioread32be(ocn_bar1);
> + bar |= 2;
> + iowrite32be(bar, ocn_bar1);
> + iosync();
> +
> + /* Set SRR0 to the reset vector and turn on MSR_IP */
> + mtspr(SPRN_SRR0, 0xfff00100);
> + mtspr(SPRN_SRR1, MSR_IP);
> +
> + /* Do an rfi to jump back to firmware. Somewhat evil,
> + * but it works
> + */
> + __asm__ __volatile__("rfi" : : : "memory");
Evil, yes, but it should work. Actually, it should work for me as well,
thanks for the tip. :)
> +
> + /* Spin until reset happens. Shouldn't really get here */
> + for (;;) ;
> +}
> +
> +void holly_power_off(void)
> +{
> + local_irq_disable();
> + /* No way to shut power off with software */
> + for (;;) ;
> +}
> +
> +void holly_halt(void)
> +{
> + holly_power_off();
> +}
> +
> +/*
> + * Called very early, device-tree isn't unflattened
> + */
> +static int __init holly_probe(void)
> +{
> + unsigned long root = of_get_flat_dt_root();
> +
> + if (!of_flat_dt_is_compatible(root, "ppc750"))
> + return 0;
That's a pretty broad compatible check?
> + return 1;
> +}
> +
> +static int ppc750_machine_check_exception(struct pt_regs *regs)
> +{
> + extern void tsi108_clear_pci_cfg_error(void);
> + const struct exception_table_entry *entry;
> +
> + /* Are we prepared to handle this fault */
> + if ((entry = search_exception_tables(regs->nip)) != NULL) {
> + tsi108_clear_pci_cfg_error();
> + regs->msr |= MSR_RI;
> + regs->nip = entry->fixup;
> + return 1;
> + }
> + return 0;
> +}
> +
> +define_machine(holly){
> + .name = "PPC750 GX/CL TSI",
> + .probe = holly_probe,
> + .setup_arch = holly_setup_arch,
> + .init_IRQ = holly_init_IRQ,
> + .show_cpuinfo = holly_show_cpuinfo,
> + .get_irq = mpic_get_irq,
> + .restart = holly_restart,
> + .calibrate_decr = generic_calibrate_decr,
> + .machine_check_exception = ppc750_machine_check_exception,
> + .progress = udbg_progress,
These look all unaligned for me.
> +};
> --- /dev/null
> +++ linux-2.6/arch/powerpc/platforms/embedded6xx/holly.h
> @@ -0,0 +1,24 @@
> +/*
> + * Definitions for the IBM 750GX/CL platform w/ TSI10x bridge
> + *
> + * Copyright 2007 IBM Corporation
> + *
> + * Stephen Winiecki <stevewin@us.ibm.com>
> + * Josh Boyer <jwboyer@linux.vnet.ibm.com>
> + *
> + * Based on code from mpc7448_hpc2.h
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + */
> +
> +#ifndef __PPC_PLATFORMS_PPC750GXCL_TSI_H
> +#define __PPC_PLATFORMS_PPC750GXCL_TSI_H
> +
> +#include <asm/ppcboot.h>
> +
> +/* Base Addresses for the PCI bus
> + */
> +#define PPC750GXCL_TSI_PCI_MEM_OFFSET (0x00000000)
> +#endif /* __PPC_PLATFORMS_H */
> --- linux-2.6.orig/drivers/net/tsi108_eth.h
> +++ linux-2.6/drivers/net/tsi108_eth.h
> @@ -49,7 +49,11 @@
> */
> #define PHY_MV88E 1 /* Marvel 88Exxxx PHY */
> #define PHY_BCM54XX 2 /* Broardcom BCM54xx PHY */
> +#if defined(CONFIG_HOLLY)
> +#define TSI108_PHY_TYPE PHY_BCM54XX
> +#else
> #define TSI108_PHY_TYPE PHY_MV88E
> +#endif
This won't work well if you ever want to build a multiplatform kernel.
>
> /*
> * TSI108 GIGE port registers
> --- linux-2.6.orig/include/asm-powerpc/tsi108.h
> +++ linux-2.6/include/asm-powerpc/tsi108.h
> @@ -68,7 +68,11 @@
> #define TSI108_PB_ERRCS_ES (1 << 1)
> #define TSI108_PB_ISR_PBS_RD_ERR (1 << 8)
>
> +#ifdef CONFIG_HOLLY
> +#define TSI108_PCI_CFG_BASE_PHYS (0x7c000000)
> +#else
> #define TSI108_PCI_CFG_BASE_PHYS (0xfb000000)
> +#endif
> #define TSI108_PCI_CFG_SIZE (0x01000000)
Same here. Shouldn't this come out of the devicetree?
-Olof
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 18:35 ` Kumar Gala
@ 2007-05-04 19:11 ` Josh Boyer
0 siblings, 0 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-04 19:11 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev
On Fri, 2007-05-04 at 13:35 -0500, Kumar Gala wrote:
> On May 4, 2007, at 1:14 PM, Josh Boyer wrote:
> > +
> > +config HOLLY
> > + bool "PPC750GX/CL with TSI10x bridge (Hickory/Holly)"
> > + select TSI108_BRIDGE
> > + select PPC_UDBG_16550
> > + select MPIC
> > + select MPIC_WEIRD
> > + help
> > + Select HOLLY if configuring for an IBM 750GX/CL Eval
> > + Board with TSI108/9 bridge (Hickory/Holly)
> > endchoice
> >
> > config TSI108_BRIDGE
> > bool
>
> I wondering if we should have select MPIC and MPIC_WEIRD here instead
> of on the board config.
Could be done, yes. I don't have an mpc7448hpc2 to test with, but I can
make that change.
> > + printk(KERN_INFO "PPC750GX/CL Platform\n");
>
> Should this be something like "Holly PPC750GX/CL Platform"
Well... no. It should really be "Hickory/Holly PPC750GX/CL Platform" to
be correct. But that sucks. Suppose I could match off of the cpu node
in the DT and just print one or the other... except they share a DT too
at the moment.
I'll think about what to do.
> > +void holly_show_cpuinfo(struct seq_file *m)
> > +{
> > + seq_printf(m, "vendor\t\t: IBM\n");
> > + seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
>
> Should 'Holly' be in the machine name?
Again, the whole "Hickory/Holly" thing.
>
> > +}
> > +
> > +void holly_restart(char *cmd)
> > +{
> > + unsigned long *ocn_bar1 = NULL;
>
> This should probably be __be32 __iomem
Good catch. I need to run this through sparse.
> > +/*
> > + * Called very early, device-tree isn't unflattened
> > + */
> > +static int __init holly_probe(void)
> > +{
> > + unsigned long root = of_get_flat_dt_root();
> > +
> > + if (!of_flat_dt_is_compatible(root, "ppc750"))
> > + return 0;
>
> This seems like to generic of a match.
Likely is, yes.
> > --- linux-2.6.orig/drivers/net/tsi108_eth.h
> > +++ linux-2.6/drivers/net/tsi108_eth.h
> > @@ -49,7 +49,11 @@
> > */
> > #define PHY_MV88E 1 /* Marvel 88Exxxx PHY */
> > #define PHY_BCM54XX 2 /* Broardcom BCM54xx PHY */
> > +#if defined(CONFIG_HOLLY)
> > +#define TSI108_PHY_TYPE PHY_BCM54XX
> > +#else
> > #define TSI108_PHY_TYPE PHY_MV88E
> > +#endif
>
> This seems pretty bad. Can we at least make this some type of kernel
> config since I'm guessing the tsi108 isn't using the phylib.
Yep.
Thanks for the comments. I'll fix it up in the next round.
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 19:01 ` Olof Johansson
@ 2007-05-04 19:18 ` Josh Boyer
2007-05-08 23:17 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 25+ messages in thread
From: Josh Boyer @ 2007-05-04 19:18 UTC (permalink / raw)
To: Olof Johansson; +Cc: linuxppc-dev
On Fri, 2007-05-04 at 14:01 -0500, Olof Johansson wrote:
> > +#undef DEBUG
> > +#ifdef DEBUG
> > +#define DBG(fmt...) do { printk(fmt); } while(0)
> > +#else
> > +#define DBG(fmt...) do { } while(0)
> > +#endif
>
> Please use pr_debug() instead.
/me hides head in shame. I'm guilt of the copy/paste crime. Will fix.
> > +#ifndef CONFIG_PCI
> > +pci_dram_offset = PPC750GXCL_TSI_PCI_MEM_OFFSET;
> > +#endif
>
> What's this about?
To be honest, I'm not sure. I haven't tried compiling without PCI.
Just following the Taiga board's example again.
> > +static void holly_remap_bridge(void)
> > +{
> > + u32 lut_val, lut_addr = 0x900, misc_cfg;
>
> Please initialize lut_addr right before using it instead of here, especially
> since you re-assign it later on.
Ok.
>
> > + int i;
> > +
> > + printk(KERN_ERR "Remapping PCI bridge\n");
> > +
> > + /* Re-init the PCI bridge and LUT registers to have mappings that don't
> > + * rely on PIBS */
>
> Comment style
Yep.
> > +
> > + /* We don't need MEM32 and PRM remapping so disable them */
> > + tsi108_write_reg(TSI108_PCI_OFFSET + 0x214, 0x0);
> > + tsi108_write_reg(TSI108_PCI_OFFSET + 0x220, 0x0);
> > + tsi108_write_reg(TSI108_PCI_OFFSET + 0x230, 0x0);
>
> It would be nice to get these constants defined up, but I know it's not always
> practical. I'll bring it up anyway. :-)
This is part of the on-going PCI fixup stuff. It'll get cleaned up in
the final version.
> > + /* setup PCI host bridge */
> > + holly_remap_bridge();
> > +#ifdef CONFIG_PCI
> > + for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
> > + tsi108_setup_pci(np);
>
> On an environment without PCI, wouldn't it make more sense to leave it
> out of the device tree, and thus not have a match in the above, instead
> of taking out CONFIG_PCI?
Yes, actually. Good catch.
> > +static int __init holly_probe(void)
> > +{
> > + unsigned long root = of_get_flat_dt_root();
> > +
> > + if (!of_flat_dt_is_compatible(root, "ppc750"))
> > + return 0;
>
> That's a pretty broad compatible check?
Yeah, will fix.
> > +define_machine(holly){
> > + .name = "PPC750 GX/CL TSI",
> > + .probe = holly_probe,
> > + .setup_arch = holly_setup_arch,
> > + .init_IRQ = holly_init_IRQ,
> > + .show_cpuinfo = holly_show_cpuinfo,
> > + .get_irq = mpic_get_irq,
> > + .restart = holly_restart,
> > + .calibrate_decr = generic_calibrate_decr,
> > + .machine_check_exception = ppc750_machine_check_exception,
> > + .progress = udbg_progress,
>
> These look all unaligned for me.
Erg.
> > --- linux-2.6.orig/drivers/net/tsi108_eth.h
> > +++ linux-2.6/drivers/net/tsi108_eth.h
> > @@ -49,7 +49,11 @@
> > */
> > #define PHY_MV88E 1 /* Marvel 88Exxxx PHY */
> > #define PHY_BCM54XX 2 /* Broardcom BCM54xx PHY */
> > +#if defined(CONFIG_HOLLY)
> > +#define TSI108_PHY_TYPE PHY_BCM54XX
> > +#else
> > #define TSI108_PHY_TYPE PHY_MV88E
> > +#endif
>
> This won't work well if you ever want to build a multiplatform kernel.
I know. What do you suggest? TSI doesn't use phylib, and adding a
property to specify PHY type in the DT seems like a hack too...
> > * TSI108 GIGE port registers
> > --- linux-2.6.orig/include/asm-powerpc/tsi108.h
> > +++ linux-2.6/include/asm-powerpc/tsi108.h
> > @@ -68,7 +68,11 @@
> > #define TSI108_PB_ERRCS_ES (1 << 1)
> > #define TSI108_PB_ISR_PBS_RD_ERR (1 << 8)
> >
> > +#ifdef CONFIG_HOLLY
> > +#define TSI108_PCI_CFG_BASE_PHYS (0x7c000000)
> > +#else
> > #define TSI108_PCI_CFG_BASE_PHYS (0xfb000000)
> > +#endif
> > #define TSI108_PCI_CFG_SIZE (0x01000000)
>
> Same here. Shouldn't this come out of the devicetree?
As a "reg" property perhaps? I'm not a DT guru, so I was a bit lost as
to how to fix that up.
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 18:14 ` [PATCH 1/4] " Josh Boyer
2007-05-04 18:35 ` Kumar Gala
2007-05-04 19:01 ` Olof Johansson
@ 2007-05-04 19:44 ` Arnd Bergmann
2007-05-04 20:01 ` Josh Boyer
` (2 more replies)
2 siblings, 3 replies; 25+ messages in thread
From: Arnd Bergmann @ 2007-05-04 19:44 UTC (permalink / raw)
To: linuxppc-dev
On Friday 04 May 2007, Josh Boyer wrote:
> +
> +#undef DEBUG
> +#ifdef DEBUG
> +#define DBG(fmt...) do { printk(fmt); } while(0)
> +#else
> +#define DBG(fmt...) do { } while(0)
> +#endif
Please replace this with the generic pr_debug()
> +#ifndef CONFIG_PCI
> +pci_dram_offset = PPC750GXCL_TSI_PCI_MEM_OFFSET;
> +#endif
This looks like the compile would expect a type.
> +extern int tsi108_setup_pci(struct device_node *dev);
> +extern void tsi108_pci_int_init(struct device_node *node);
> +extern void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc);
please move any extern declarations into a header file that
is included by both the file that defines and uses them
> +static void holly_remap_bridge(void)
> +{
> + u32 lut_val, lut_addr = 0x900, misc_cfg;
> + int i;
> +
> + printk(KERN_ERR "Remapping PCI bridge\n");
Is it an error to remap the bridge? If not, KERN_INFO would be more
appropriate ;-)
> +void holly_show_cpuinfo(struct seq_file *m)
> +{
> + seq_printf(m, "vendor\t\t: IBM\n");
> + seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
> +}
If it's an IBM product, it should come with a product code like 123-4567,
which fits in here, instead of just listing the CPU.
> +static int ppc750_machine_check_exception(struct pt_regs *regs)
> +{
> + extern void tsi108_clear_pci_cfg_error(void);
move declaration to header file.
> + const struct exception_table_entry *entry;
> +
> + /* Are we prepared to handle this fault */
> + if ((entry = search_exception_tables(regs->nip)) != NULL) {
> + tsi108_clear_pci_cfg_error();
> + regs->msr |= MSR_RI;
> + regs->nip = entry->fixup;
> + return 1;
> + }
> + return 0;
> +}
Are you sure that you can use the generic exception table mechanism
like this? I can't see why it doesn't work, but it's something I haven't
seen anyone do like this.
> --- linux-2.6.orig/drivers/net/tsi108_eth.h
> +++ linux-2.6/drivers/net/tsi108_eth.h
> @@ -49,7 +49,11 @@
> */
> #define PHY_MV88E 1 /* Marvel 88Exxxx PHY */
> #define PHY_BCM54XX 2 /* Broardcom BCM54xx PHY */
> +#if defined(CONFIG_HOLLY)
> +#define TSI108_PHY_TYPE PHY_BCM54XX
> +#else
> #define TSI108_PHY_TYPE PHY_MV88E
> +#endif
>
this breaks multiplatform setups.
> --- linux-2.6.orig/include/asm-powerpc/tsi108.h
> +++ linux-2.6/include/asm-powerpc/tsi108.h
> @@ -68,7 +68,11 @@
> #define TSI108_PB_ERRCS_ES (1 << 1)
> #define TSI108_PB_ISR_PBS_RD_ERR (1 << 8)
>
> +#ifdef CONFIG_HOLLY
> +#define TSI108_PCI_CFG_BASE_PHYS (0x7c000000)
> +#else
> #define TSI108_PCI_CFG_BASE_PHYS (0xfb000000)
> +#endif
> #define TSI108_PCI_CFG_SIZE (0x01000000)
> /* Global variables */
>
Same here.
Arnd <><
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 19:44 ` Arnd Bergmann
@ 2007-05-04 20:01 ` Josh Boyer
2007-05-05 11:08 ` Arnd Bergmann
2007-05-08 23:20 ` Benjamin Herrenschmidt
2007-05-05 14:39 ` Olof Johansson
2007-05-08 23:19 ` Benjamin Herrenschmidt
2 siblings, 2 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-04 20:01 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: linuxppc-dev
On Fri, 2007-05-04 at 21:44 +0200, Arnd Bergmann wrote:
> On Friday 04 May 2007, Josh Boyer wrote:
> > +
> > +#undef DEBUG
> > +#ifdef DEBUG
> > +#define DBG(fmt...) do { printk(fmt); } while(0)
> > +#else
> > +#define DBG(fmt...) do { } while(0)
> > +#endif
>
> Please replace this with the generic pr_debug()
Already noted, but yes.
> > +extern int tsi108_setup_pci(struct device_node *dev);
> > +extern void tsi108_pci_int_init(struct device_node *node);
> > +extern void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc);
>
> please move any extern declarations into a header file that
> is included by both the file that defines and uses them
Ok.
>
> > +static void holly_remap_bridge(void)
> > +{
> > + u32 lut_val, lut_addr = 0x900, misc_cfg;
> > + int i;
> > +
> > + printk(KERN_ERR "Remapping PCI bridge\n");
>
> Is it an error to remap the bridge? If not, KERN_INFO would be more
> appropriate ;-)
This whole function is under work at the moment, so it'll get cleaned
up.
>
> > +void holly_show_cpuinfo(struct seq_file *m)
> > +{
> > + seq_printf(m, "vendor\t\t: IBM\n");
> > + seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
> > +}
>
> If it's an IBM product, it should come with a product code like 123-4567,
> which fits in here, instead of just listing the CPU.
Erm... why? There are other boards that don't do this as well...
>
> > +static int ppc750_machine_check_exception(struct pt_regs *regs)
> > +{
> > + extern void tsi108_clear_pci_cfg_error(void);
>
> move declaration to header file.
Ok.
>
> > + const struct exception_table_entry *entry;
> > +
> > + /* Are we prepared to handle this fault */
> > + if ((entry = search_exception_tables(regs->nip)) != NULL) {
> > + tsi108_clear_pci_cfg_error();
> > + regs->msr |= MSR_RI;
> > + regs->nip = entry->fixup;
> > + return 1;
> > + }
> > + return 0;
> > +}
>
> Are you sure that you can use the generic exception table mechanism
> like this? I can't see why it doesn't work, but it's something I haven't
> seen anyone do like this.
Yes, this works and is actually required. See tsi108_pci.c for where
the fixup/exception table information is generated.
> > --- linux-2.6.orig/drivers/net/tsi108_eth.h
> > +++ linux-2.6/drivers/net/tsi108_eth.h
> > @@ -49,7 +49,11 @@
> > */
> > #define PHY_MV88E 1 /* Marvel 88Exxxx PHY */
> > #define PHY_BCM54XX 2 /* Broardcom BCM54xx PHY */
> > +#if defined(CONFIG_HOLLY)
> > +#define TSI108_PHY_TYPE PHY_BCM54XX
> > +#else
> > #define TSI108_PHY_TYPE PHY_MV88E
> > +#endif
> >
>
> this breaks multiplatform setups.
I know. Looking for a better suggestions. Kumar suggested a Kconfig
option at least, which is what I'm going to go with unless someone has a
better idea...
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] Holly DTS
2007-05-04 18:16 ` [PATCH 3/4] Holly DTS Josh Boyer
@ 2007-05-04 23:51 ` David Gibson
2007-05-05 3:18 ` Josh Boyer
0 siblings, 1 reply; 25+ messages in thread
From: David Gibson @ 2007-05-04 23:51 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev
On Fri, May 04, 2007 at 01:16:00PM -0500, Josh Boyer wrote:
> Add Holly/Hickory DTS file
[...]
> + mdio@6000 {
> + name = "mdio";
> + device_type = "mdio";
> + compatible = "tsi-ethernet";
> + ethernet-phy@6000 {
> + name = "ethernet-phy";
> + device_type = "ethernet-phy";
> + reg = <6000 50>;
> + phy-id = <1>;
> + linux,phandle = <421>;
Kill the explicit phandles, please.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] Holly DTS
2007-05-04 23:51 ` David Gibson
@ 2007-05-05 3:18 ` Josh Boyer
0 siblings, 0 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-05 3:18 UTC (permalink / raw)
To: David Gibson; +Cc: linuxppc-dev
On Sat, 2007-05-05 at 09:51 +1000, David Gibson wrote:
> On Fri, May 04, 2007 at 01:16:00PM -0500, Josh Boyer wrote:
> > Add Holly/Hickory DTS file
>
> [...]
> > + mdio@6000 {
> > + name = "mdio";
> > + device_type = "mdio";
> > + compatible = "tsi-ethernet";
> > + ethernet-phy@6000 {
> > + name = "ethernet-phy";
> > + device_type = "ethernet-phy";
> > + reg = <6000 50>;
> > + phy-id = <1>;
> > + linux,phandle = <421>;
>
> Kill the explicit phandles, please.
Will do. Forgot there were still there actually.
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 20:01 ` Josh Boyer
@ 2007-05-05 11:08 ` Arnd Bergmann
2007-05-05 11:44 ` Josh Boyer
` (2 more replies)
2007-05-08 23:20 ` Benjamin Herrenschmidt
1 sibling, 3 replies; 25+ messages in thread
From: Arnd Bergmann @ 2007-05-05 11:08 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev
On Friday 04 May 2007, Josh Boyer wrote:
>=20
> > If it's an IBM product, it should come with a product code like 123-456=
7,
> > which fits in here, instead of just listing the CPU.
>=20
> Erm... why? =A0There are other boards that don't do this as well...
We did it on the Cell blade because we were asked to do it by
the people responsible for the hardware, who were following
their rules. I assumed that the same rules apply here as well,
but maybe they are specific to the server line.
> > > --- linux-2.6.orig/drivers/net/tsi108_eth.h
> > > +++ linux-2.6/drivers/net/tsi108_eth.h
> > > @@ -49,7 +49,11 @@
> > > =A0 */
> > > =A0#define PHY_MV88E=A0=A01=A0=A0=A0=A0=A0=A0=A0/* Marvel 88Exxxx PHY=
*/
> > > =A0#define PHY_BCM54XX=A0=A0=A0=A0=A0=A0=A0=A02=A0=A0=A0=A0=A0=A0=A0/=
* Broardcom BCM54xx PHY */
> > > +#if defined(CONFIG_HOLLY)
> > > +#define TSI108_PHY_TYPE PHY_BCM54XX
> > > +#else
> > > =A0#define TSI108_PHY_TYPE=A0=A0=A0=A0PHY_MV88E
> > > +#endif
> > > =A0
> >=20
> > this breaks multiplatform setups.
>=20
> I know. =A0Looking for a better suggestions. =A0Kumar suggested a Kconfig
> option at least, which is what I'm going to go with unless someone has a
> better idea...
A Kconfig option won't help at all. The phy should come as a device node
below the ethernet device. When probing the device, look at the
"compatible" and "reg" properties in there.
Arnd <><
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-05 11:08 ` Arnd Bergmann
@ 2007-05-05 11:44 ` Josh Boyer
2007-05-05 14:41 ` Olof Johansson
2007-05-08 23:24 ` Benjamin Herrenschmidt
2 siblings, 0 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-05 11:44 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: linuxppc-dev
On Sat, 2007-05-05 at 13:08 +0200, Arnd Bergmann wrote:
> On Friday 04 May 2007, Josh Boyer wrote:
> >
> > > If it's an IBM product, it should come with a product code like 123-4567,
> > > which fits in here, instead of just listing the CPU.
> >
> > Erm... why? There are other boards that don't do this as well...
>
> We did it on the Cell blade because we were asked to do it by
> the people responsible for the hardware, who were following
> their rules. I assumed that the same rules apply here as well,
> but maybe they are specific to the server line.
I've heard of no such rule from the people I've been working with. This
is an internal matter though, so I'll do some checking.
> > > > --- linux-2.6.orig/drivers/net/tsi108_eth.h
> > > > +++ linux-2.6/drivers/net/tsi108_eth.h
> > > > @@ -49,7 +49,11 @@
> > > > */
> > > > #define PHY_MV88E 1 /* Marvel 88Exxxx PHY */
> > > > #define PHY_BCM54XX 2 /* Broardcom BCM54xx PHY */
> > > > +#if defined(CONFIG_HOLLY)
> > > > +#define TSI108_PHY_TYPE PHY_BCM54XX
> > > > +#else
> > > > #define TSI108_PHY_TYPE PHY_MV88E
> > > > +#endif
> > > >
> > >
> > > this breaks multiplatform setups.
> >
> > I know. Looking for a better suggestions. Kumar suggested a Kconfig
> > option at least, which is what I'm going to go with unless someone has a
> > better idea...
>
> A Kconfig option won't help at all. The phy should come as a device node
> below the ethernet device. When probing the device, look at the
> "compatible" and "reg" properties in there.
A Kconfig option is better than what's currently there, but yes I know
what you mean. The phys are already part of the device tree, so I think
I'll add a compatible property as you suggested and add that to the
hw_info structure that the ethernet driver uses to init things.
Seems silly to carry this around in a data structure for a single use,
but I don't see another way of doing it while still making the
multiplatform thing happy.
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 19:44 ` Arnd Bergmann
2007-05-04 20:01 ` Josh Boyer
@ 2007-05-05 14:39 ` Olof Johansson
2007-05-05 15:11 ` Josh Boyer
2007-05-08 23:19 ` Benjamin Herrenschmidt
2 siblings, 1 reply; 25+ messages in thread
From: Olof Johansson @ 2007-05-05 14:39 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: linuxppc-dev
On Fri, May 04, 2007 at 09:44:30PM +0200, Arnd Bergmann wrote:
> > --- linux-2.6.orig/include/asm-powerpc/tsi108.h
> > +++ linux-2.6/include/asm-powerpc/tsi108.h
> > @@ -68,7 +68,11 @@
> > #define TSI108_PB_ERRCS_ES (1 << 1)
> > #define TSI108_PB_ISR_PBS_RD_ERR (1 << 8)
> >
> > +#ifdef CONFIG_HOLLY
> > +#define TSI108_PCI_CFG_BASE_PHYS (0x7c000000)
> > +#else
> > #define TSI108_PCI_CFG_BASE_PHYS (0xfb000000)
> > +#endif
> > #define TSI108_PCI_CFG_SIZE (0x01000000)
> > /* Global variables */
> >
>
> Same here.
It would be very easy to take tsi108_setup_pci take the config base as
a function paramter and pass it in from the board setup code, and store
it in a static variable to be used for the tsi108_clear_pci_cfg_error
function.
That'd easily make the code multiplatform friendly without having to
add it to the device tree. Very few other platforms have the config base
address in there, if any. It shouldn't be a requirement that Holly has it.
-Olof
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-05 11:08 ` Arnd Bergmann
2007-05-05 11:44 ` Josh Boyer
@ 2007-05-05 14:41 ` Olof Johansson
2007-05-08 23:24 ` Benjamin Herrenschmidt
2 siblings, 0 replies; 25+ messages in thread
From: Olof Johansson @ 2007-05-05 14:41 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: linuxppc-dev
On Sat, May 05, 2007 at 01:08:11PM +0200, Arnd Bergmann wrote:
> On Friday 04 May 2007, Josh Boyer wrote:
> >
> > > If it's an IBM product, it should come with a product code like 123-4567,
> > > which fits in here, instead of just listing the CPU.
> >
> > Erm... why? ?There are other boards that don't do this as well...
>
> We did it on the Cell blade because we were asked to do it by
> the people responsible for the hardware, who were following
> their rules. I assumed that the same rules apply here as well,
> but maybe they are specific to the server line.
>
> > > > --- linux-2.6.orig/drivers/net/tsi108_eth.h
> > > > +++ linux-2.6/drivers/net/tsi108_eth.h
> > > > @@ -49,7 +49,11 @@
> > > > ? */
> > > > ?#define PHY_MV88E??1???????/* Marvel 88Exxxx PHY */
> > > > ?#define PHY_BCM54XX????????2???????/* Broardcom BCM54xx PHY */
> > > > +#if defined(CONFIG_HOLLY)
> > > > +#define TSI108_PHY_TYPE PHY_BCM54XX
> > > > +#else
> > > > ?#define TSI108_PHY_TYPE????PHY_MV88E
> > > > +#endif
> > > > ?
> > >
> > > this breaks multiplatform setups.
> >
> > I know. ?Looking for a better suggestions. ?Kumar suggested a Kconfig
> > option at least, which is what I'm going to go with unless someone has a
> > better idea...
>
> A Kconfig option won't help at all. The phy should come as a device node
> below the ethernet device. When probing the device, look at the
> "compatible" and "reg" properties in there.
In a perfect world, yes, but does it need to hold up the rest of the
code being merged if it's changed later? It's just used to blast a few
values at init time now, I'm suspecting to set things such as LED settings
(but I can't verify since I don't have any broadcom datasheets).
Even better long-term would be to have a phylib driver for the TSI and
autoprobe the model. Neither should have to hold up a board port merge
in my opinion.
-Olof
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-05 14:39 ` Olof Johansson
@ 2007-05-05 15:11 ` Josh Boyer
2007-05-06 0:09 ` Arnd Bergmann
0 siblings, 1 reply; 25+ messages in thread
From: Josh Boyer @ 2007-05-05 15:11 UTC (permalink / raw)
To: Olof Johansson; +Cc: linuxppc-dev, Arnd Bergmann
On Sat, 2007-05-05 at 09:39 -0500, Olof Johansson wrote:
> On Fri, May 04, 2007 at 09:44:30PM +0200, Arnd Bergmann wrote:
>
> > > --- linux-2.6.orig/include/asm-powerpc/tsi108.h
> > > +++ linux-2.6/include/asm-powerpc/tsi108.h
> > > @@ -68,7 +68,11 @@
> > > #define TSI108_PB_ERRCS_ES (1 << 1)
> > > #define TSI108_PB_ISR_PBS_RD_ERR (1 << 8)
> > >
> > > +#ifdef CONFIG_HOLLY
> > > +#define TSI108_PCI_CFG_BASE_PHYS (0x7c000000)
> > > +#else
> > > #define TSI108_PCI_CFG_BASE_PHYS (0xfb000000)
> > > +#endif
> > > #define TSI108_PCI_CFG_SIZE (0x01000000)
> > > /* Global variables */
> > >
> >
> > Same here.
>
> It would be very easy to take tsi108_setup_pci take the config base as
> a function paramter and pass it in from the board setup code, and store
> it in a static variable to be used for the tsi108_clear_pci_cfg_error
> function.
>
> That'd easily make the code multiplatform friendly without having to
> add it to the device tree. Very few other platforms have the config base
> address in there, if any. It shouldn't be a requirement that Holly has it.
Yeah, after thinking about it, that's what I plan on doing actually.
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-05 15:11 ` Josh Boyer
@ 2007-05-06 0:09 ` Arnd Bergmann
0 siblings, 0 replies; 25+ messages in thread
From: Arnd Bergmann @ 2007-05-06 0:09 UTC (permalink / raw)
To: Josh Boyer; +Cc: Olof Johansson, linuxppc-dev
On Saturday 05 May 2007, Josh Boyer wrote:
> >
> > It would be very easy to take tsi108_setup_pci take the config base as
> > a function paramter and pass it in from the board setup code, and store
> > it in a static variable to be used for the tsi108_clear_pci_cfg_error
> > function.
> >
> > That'd easily make the code multiplatform friendly without having to
> > add it to the device tree. Very few other platforms have the config base
> > address in there, if any. It shouldn't be a requirement that Holly has it.
>
> Yeah, after thinking about it, that's what I plan on doing actually.
>
Yes, sounds fair enough. The more interesting bits to clean up in the
driver are to convert it to an of_platform_driver and to use phylib, and
then autodetecting this will be trivial, and until then hardcoding in the
board setup seems a good solution.
Arnd <><
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 19:18 ` Josh Boyer
@ 2007-05-08 23:17 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 25+ messages in thread
From: Benjamin Herrenschmidt @ 2007-05-08 23:17 UTC (permalink / raw)
To: Josh Boyer; +Cc: Olof Johansson, linuxppc-dev
> > This won't work well if you ever want to build a multiplatform kernel.
>
> I know. What do you suggest? TSI doesn't use phylib, and adding a
> property to specify PHY type in the DT seems like a hack too...
Fix the TSI network driver. PHYs can be probed.
> As a "reg" property perhaps? I'm not a DT guru, so I was a bit lost as
> to how to fix that up.
Yes, it's common to get the config space address of the "reg" property
of the bridge.
Ben.
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 19:44 ` Arnd Bergmann
2007-05-04 20:01 ` Josh Boyer
2007-05-05 14:39 ` Olof Johansson
@ 2007-05-08 23:19 ` Benjamin Herrenschmidt
2007-05-09 0:39 ` Josh Boyer
2 siblings, 1 reply; 25+ messages in thread
From: Benjamin Herrenschmidt @ 2007-05-08 23:19 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: linuxppc-dev
On Fri, 2007-05-04 at 21:44 +0200, Arnd Bergmann wrote:
> > +void holly_show_cpuinfo(struct seq_file *m)
> > +{
> > + seq_printf(m, "vendor\t\t: IBM\n");
> > + seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
> > +}
>
> If it's an IBM product, it should come with a product code like 123-4567,
> which fits in here, instead of just listing the CPU.
Should probably come from the device tree anyway.
> > +static int ppc750_machine_check_exception(struct pt_regs *regs)
> > +{
> > + extern void tsi108_clear_pci_cfg_error(void);
>
> move declaration to header file.
>
> > + const struct exception_table_entry *entry;
> > +
> > + /* Are we prepared to handle this fault */
> > + if ((entry = search_exception_tables(regs->nip)) != NULL) {
> > + tsi108_clear_pci_cfg_error();
> > + regs->msr |= MSR_RI;
> > + regs->nip = entry->fixup;
> > + return 1;
> > + }
> > + return 0;
> > +}
>
> Are you sure that you can use the generic exception table mechanism
> like this? I can't see why it doesn't work, but it's something I haven't
> seen anyone do like this.
Also, can't the TSI be configured to not generate MCE in that case ?
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-04 20:01 ` Josh Boyer
2007-05-05 11:08 ` Arnd Bergmann
@ 2007-05-08 23:20 ` Benjamin Herrenschmidt
2007-05-09 0:32 ` Josh Boyer
1 sibling, 1 reply; 25+ messages in thread
From: Benjamin Herrenschmidt @ 2007-05-08 23:20 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev, Arnd Bergmann
> I know. Looking for a better suggestions. Kumar suggested a Kconfig
> option at least, which is what I'm going to go with unless someone has a
> better idea...
Yes, I do: Fix the TSI driver, it should be trivial :-)
Ben.
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-05 11:08 ` Arnd Bergmann
2007-05-05 11:44 ` Josh Boyer
2007-05-05 14:41 ` Olof Johansson
@ 2007-05-08 23:24 ` Benjamin Herrenschmidt
2 siblings, 0 replies; 25+ messages in thread
From: Benjamin Herrenschmidt @ 2007-05-08 23:24 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: linuxppc-dev
> A Kconfig option won't help at all. The phy should come as a device node
> below the ethernet device. When probing the device, look at the
> "compatible" and "reg" properties in there.
That's overkill. You don't need that unless you add specific
config/setup informations for the PHY. PHYs can be probed easily enough.
Ben.
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-08 23:20 ` Benjamin Herrenschmidt
@ 2007-05-09 0:32 ` Josh Boyer
0 siblings, 0 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-09 0:32 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Arnd Bergmann
On Wed, 2007-05-09 at 09:20 +1000, Benjamin Herrenschmidt wrote:
> > I know. Looking for a better suggestions. Kumar suggested a Kconfig
> > option at least, which is what I'm going to go with unless someone has a
> > better idea...
>
> Yes, I do: Fix the TSI driver, it should be trivial :-)
You're a bit late. It was fixed in a more generic manner :)
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Add support for 750CL Holly board
2007-05-08 23:19 ` Benjamin Herrenschmidt
@ 2007-05-09 0:39 ` Josh Boyer
0 siblings, 0 replies; 25+ messages in thread
From: Josh Boyer @ 2007-05-09 0:39 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Arnd Bergmann
On Wed, 2007-05-09 at 09:19 +1000, Benjamin Herrenschmidt wrote:
> On Fri, 2007-05-04 at 21:44 +0200, Arnd Bergmann wrote:
>
> > > +void holly_show_cpuinfo(struct seq_file *m)
> > > +{
> > > + seq_printf(m, "vendor\t\t: IBM\n");
> > > + seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
> > > +}
> >
> > If it's an IBM product, it should come with a product code like 123-4567,
> > which fits in here, instead of just listing the CPU.
>
> Should probably come from the device tree anyway.
It will with some cleanup patches I'm planning on.
> > > + const struct exception_table_entry *entry;
> > > +
> > > + /* Are we prepared to handle this fault */
> > > + if ((entry = search_exception_tables(regs->nip)) != NULL) {
> > > + tsi108_clear_pci_cfg_error();
> > > + regs->msr |= MSR_RI;
> > > + regs->nip = entry->fixup;
> > > + return 1;
> > > + }
> > > + return 0;
> > > +}
> >
> > Are you sure that you can use the generic exception table mechanism
> > like this? I can't see why it doesn't work, but it's something I haven't
> > seen anyone do like this.
>
> Also, can't the TSI be configured to not generate MCE in that case ?
Not that I'm aware of. They should only occur on the initial PCI bus
scan.
josh
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2007-05-09 0:44 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-04 18:13 [PATCH 0/4] Add support for 750CL Holly board Josh Boyer
2007-05-04 18:14 ` [PATCH 1/4] " Josh Boyer
2007-05-04 18:35 ` Kumar Gala
2007-05-04 19:11 ` Josh Boyer
2007-05-04 19:01 ` Olof Johansson
2007-05-04 19:18 ` Josh Boyer
2007-05-08 23:17 ` Benjamin Herrenschmidt
2007-05-04 19:44 ` Arnd Bergmann
2007-05-04 20:01 ` Josh Boyer
2007-05-05 11:08 ` Arnd Bergmann
2007-05-05 11:44 ` Josh Boyer
2007-05-05 14:41 ` Olof Johansson
2007-05-08 23:24 ` Benjamin Herrenschmidt
2007-05-08 23:20 ` Benjamin Herrenschmidt
2007-05-09 0:32 ` Josh Boyer
2007-05-05 14:39 ` Olof Johansson
2007-05-05 15:11 ` Josh Boyer
2007-05-06 0:09 ` Arnd Bergmann
2007-05-08 23:19 ` Benjamin Herrenschmidt
2007-05-09 0:39 ` Josh Boyer
2007-05-04 18:15 ` [PATCH 2/4] Holly defconfig Josh Boyer
2007-05-04 18:16 ` [PATCH 3/4] Holly DTS Josh Boyer
2007-05-04 23:51 ` David Gibson
2007-05-05 3:18 ` Josh Boyer
2007-05-04 18:16 ` [PATCH 4/4] Holly bootwrapper Josh Boyer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).