The board supports both single and dual core parts. The board I have is single core.
> -----Original Message----- > From: Kumar Gala [mailto:[EMAIL PROTECTED] > Sent: Wednesday, August 01, 2007 9:18 AM > To: [EMAIL PROTECTED] > Cc: [email protected] > Subject: Re: [PATCH] Add support for Wind River SBC8641D board > > > On Jul 31, 2007, at 7:36 PM, Joe Hamman wrote: > > > Add support for Wind River's SBC8641D reference board. > > Is this a single core or dual core chip? > > > > > Signed-off by: Joe Hamman <[EMAIL PROTECTED]> > > > > diff -purN -X dontdiff linux-2.6/arch/powerpc/boot/dts/sbc8641d.dts > > linux-2.6-esi/arch/powerpc/boot/dts/sbc8641d.dts > > --- linux-2.6/arch/powerpc/boot/dts/sbc8641d.dts 1969-12-31 > > 18:00:00.000000000 -0600 > > +++ linux-2.6-esi/arch/powerpc/boot/dts/sbc8641d.dts 2007-07-31 > > 13:15:15.000000000 -0500 > > @@ -0,0 +1,160 @@ > > +/* > > + * SBC8641D Device Tree Source > > + * > > + * Copyright 2007 Embedded Specialties, Inc. > > + * Joe Hamman [EMAIL PROTECTED] > > + * > > + * Copyright 2006 Freescale Semiconductor Inc. > > + * > > + * This program is free software; you can redistribute it and/or > > modify it > > + * under the terms of the GNU General Public License as > > published by the > > + * Free Software Foundation; either version 2 of the License, or > > (at your > > + * option) any later version. > > + */ > > + > > + > > +/ { > > + model = "SBC8641D"; > > + compatible = "mpc86xx"; > > + #address-cells = <1>; > > + #size-cells = <1>; > > + > > + cpus { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + PowerPC,[EMAIL PROTECTED] { > > + device_type = "cpu"; > > + reg = <0>; > > + d-cache-line-size = <20>; // 32 bytes > > + i-cache-line-size = <20>; // 32 bytes > > + d-cache-size = <8000>; // L1, 32K > > + i-cache-size = <8000>; // L1, 32K > > + timebase-frequency = <0>; // 33 MHz, from uboot > > + bus-frequency = <0>; // From uboot > > + clock-frequency = <0>; // From uboot > > + 32-bit; > > + }; > > if this is really an 8641D I'd expect a 2nd cpu node. > > > + }; > > + > > + memory { > > + device_type = "memory"; > > + reg = <00000000 20000000>; // 512M at 0x0 > > + }; > > + > > + [EMAIL PROTECTED] { > > + #address-cells = <1>; > > + #size-cells = <1>; > > + #interrupt-cells = <2>; > > + device_type = "soc"; > > + ranges = <0 f8000000 00100000>; > > + reg = <f8000000 00100000>; // CCSRBAR 1M > > + bus-frequency = <0>; > > + > > + [EMAIL PROTECTED] { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + device_type = "mdio"; > > + compatible = "gianfar"; > > + reg = <24520 20>; > > + phy1f: [EMAIL PROTECTED] { > > + reg = <1f>; > > + device_type = "ethernet-phy"; > > + }; > > + phy0: [EMAIL PROTECTED] { > > + reg = <0>; > > + device_type = "ethernet-phy"; > > + }; > > + phy1: [EMAIL PROTECTED] { > > + reg = <1>; > > + device_type = "ethernet-phy"; > > + }; > > + phy2: [EMAIL PROTECTED] { > > + reg = <2>; > > + device_type = "ethernet-phy"; > > + }; > > + }; > > + > > + [EMAIL PROTECTED] { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + device_type = "network"; > > + model = "eTSEC"; > > + compatible = "gianfar"; > > + reg = <24000 1000>; > > + mac-address = [ 00 E0 0C 00 73 00 ]; > > > > + interrupts = <1d 2 1e 2 22 2>; > > + interrupt-parent = <&mpic>; > > + phy-handle = <&phy1f>; > > + }; > > + > > + [EMAIL PROTECTED] { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + device_type = "network"; > > + model = "eTSEC"; > > + compatible = "gianfar"; > > + reg = <25000 1000>; > > + mac-address = [ 00 E0 0C 00 73 01 ]; > > + interrupts = <23 2 24 2 28 2>; > > + interrupt-parent = <&mpic>; > > + phy-handle = <&phy0>; > > + }; > > + > > + [EMAIL PROTECTED] { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + device_type = "network"; > > + model = "eTSEC"; > > + compatible = "gianfar"; > > + reg = <26000 1000>; > > + mac-address = [ 00 E0 0C 00 02 FD ]; > > + interrupts = <1F 2 20 2 21 2>; > > + interrupt-parent = <&mpic>; > > + phy-handle = <&phy1>; > > + }; > > + > > + [EMAIL PROTECTED] { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + device_type = "network"; > > + model = "eTSEC"; > > + compatible = "gianfar"; > > + reg = <27000 1000>; > > + mac-address = [ 00 E0 0C 00 03 FD ]; > > + interrupts = <25 2 26 2 27 2>; > > + interrupt-parent = <&mpic>; > > + phy-handle = <&phy2>; > > + }; > > + > > + [EMAIL PROTECTED] { > > + device_type = "serial"; > > + compatible = "ns16550"; > > + reg = <4500 100>; > > + clock-frequency = <0>; > > + interrupts = <2a 2>; > > + interrupt-parent = <&mpic>; > > + }; > > + > > + [EMAIL PROTECTED] { > > + device_type = "serial"; > > + compatible = "ns16550"; > > + reg = <4600 100>; > > + clock-frequency = <0>; > > + interrupts = <1c 2>; > > + interrupt-parent = <&mpic>; > > + }; > > + > > + mpic: [EMAIL PROTECTED] { > > + clock-frequency = <0>; > > + interrupt-controller; > > + #address-cells = <0>; > > + #interrupt-cells = <2>; > > + reg = <40000 40000>; > > + built-in; > > + compatible = "chrp,open-pic"; > > + device_type = "open-pic"; > > + big-endian; > > + }; > > + }; > > +}; > > [snip] > > > diff -purN -X dontdiff linux-2.6/arch/powerpc/platforms/86xx/ > > Kconfig linux-2.6-esi/arch/powerpc/platforms/86xx/Kconfig > > --- linux-2.6/arch/powerpc/platforms/86xx/Kconfig 2007-07-31 > > 10:15:36.000000000 -0500 > > +++ linux-2.6-esi/arch/powerpc/platforms/86xx/Kconfig 2007-07-31 > > 10:36:45.000000000 -0500 > > @@ -10,6 +10,12 @@ config MPC8641_HPCN > > help > > This option enables support for the MPC8641 HPCN board. > > > > +config SBC8641D > > + bool "Wind River SBC8641D" > > + select DEFAULT_UIMAGE > > + help > > + This option enables support for the SBC8641D board. > > + > > endchoice > > > > config MPC8641 > > @@ -18,3 +24,4 @@ config MPC8641 > > select PPC_UDBG_16550 > > select MPIC > > default y if MPC8641_HPCN > > + default y if SBC8641D > > diff -purN -X dontdiff linux-2.6/arch/powerpc/platforms/86xx/ > > Makefile linux-2.6-esi/arch/powerpc/platforms/86xx/Makefile > > --- linux-2.6/arch/powerpc/platforms/86xx/Makefile 2007-07-31 > > 10:15:36.000000000 -0500 > > +++ linux-2.6-esi/arch/powerpc/platforms/86xx/Makefile 2007-07-31 > > 10:37:30.000000000 -0500 > > @@ -4,3 +4,4 @@ > > > > obj-$(CONFIG_SMP) += mpc86xx_smp.o > > obj-$(CONFIG_MPC8641_HPCN) += mpc86xx_hpcn.o > > +obj-$(CONFIG_SBC8641D) += sbc8641d.o > > diff -purN -X dontdiff linux-2.6/arch/powerpc/platforms/86xx/ > > sbc8641d.c linux-2.6-esi/arch/powerpc/platforms/86xx/sbc8641d.c > > --- linux-2.6/arch/powerpc/platforms/86xx/sbc8641d.c 1969-12-31 > > 18:00:00.000000000 -0600 > > +++ linux-2.6-esi/arch/powerpc/platforms/86xx/sbc8641d.c 2007-07-31 > > 15:55:59.000000000 -0500 > > @@ -0,0 +1,206 @@ > > +/* > > + * SBC8641D board specific routines > > + * > > + * Copyright 2007 Embedded Specialties, Inc. > > + * Joe Hamman <[EMAIL PROTECTED]> > > + * > > + * Recode: ZHANG WEI <[EMAIL PROTECTED]> > > + * Initial author: Xianghua Xiao <[EMAIL PROTECTED]> > > + * > > + * Copyright 2006 Freescale Semiconductor Inc. > > + * > > + * This program is free software; you can redistribute it and/or > > modify it > > + * under the terms of the GNU General Public License as > > published by the > > + * Free Software Foundation; either version 2 of the License, or > > (at your > > + * option) any later version. > > + */ > > + > > +#include <linux/stddef.h> > > +#include <linux/kernel.h> > > +#include <linux/pci.h> > > +#include <linux/kdev_t.h> > > +#include <linux/delay.h> > > +#include <linux/seq_file.h> > > + > > +#include <asm/system.h> > > +#include <asm/time.h> > > +#include <asm/machdep.h> > > +#include <asm/pci-bridge.h> > > +#include <asm/mpc86xx.h> > > +#include <asm/prom.h> > > +#include <mm/mmu_decl.h> > > +#include <asm/udbg.h> > > +#include <asm/i8259.h> > > +#include <asm-generic/rtc.h> > > +#include <asm/mpic.h> > > + > > +#include <sysdev/fsl_soc.h> > > + > > +#include "mpc86xx.h" > > +#include "sbc8641d.h" > > + > > +#define DEBUG > > + > > +#ifdef DEBUG > > +#define DBG(fmt...) do { printk(KERN_ERR fmt); } while(0) > > +#else > > +#define DBG(fmt...) do { } while(0) > > +#endif > > + > > +/* unsigned long isa_io_base = 0; > > +unsigned long isa_mem_base = 0; > > +unsigned long pci_dram_offset = 0; */ > > + > > + > > +void __init > > +sbc8641d_init_irq(void) > > +{ > > + struct mpic *mpic1; > > + struct device_node *np; > > + struct resource res; > > + > > + /* Determine PIC address. */ > > + np = of_find_node_by_type(NULL, "open-pic"); > > + if (np == NULL) > > + return; > > + of_address_to_resource(np, 0, &res); > > + > > + /* Alloc mpic structure and per isu has 16 INT entries. */ > > + mpic1 = mpic_alloc(np, res.start, > > + MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN, > > + 16, NR_IRQS - 4, > > + " MPIC "); > > + BUG_ON(mpic1 == NULL); > > + > > + mpic_assign_isu(mpic1, 0, res.start + 0x10000); > > + > > + /* 48 Internal Interrupts */ > > + mpic_assign_isu(mpic1, 1, res.start + 0x10200); > > + mpic_assign_isu(mpic1, 2, res.start + 0x10400); > > + mpic_assign_isu(mpic1, 3, res.start + 0x10600); > > + > > + /* 16 External interrupts > > + * Moving them from [0 - 15] to [64 - 79] > > + */ > > + mpic_assign_isu(mpic1, 4, res.start + 0x10000); > > + > > look at a 2.6.22-rc1 kernel to see how this has changed. It also > effects the .dts interrupt numbers. Please match how the mpc8641hpcn > does things. > > > + mpic_init(mpic1); > > + > > +} > > + > > + > > +static void __init > > +sbc8641d_setup_arch(void) > > +{ > > + struct device_node *np; > > + > > + if (ppc_md.progress) > > + ppc_md.progress("sbc8641d_setup_arch()", 0); > > + > > + np = of_find_node_by_type(NULL, "cpu"); > > + if (np != 0) { > > + const unsigned int *fp; > > + > > + fp = get_property(np, "clock-frequency", NULL); > > + if (fp != 0) > > + loops_per_jiffy = *fp / HZ; > > + else > > + loops_per_jiffy = 50000000 / HZ; > > + of_node_put(np); > > + } > > git ride of this code to find loops_per_jiffy. > > > + > > + printk("SBC8641D board from Wind River Systems\n"); > > + > > +#ifdef CONFIG_SMP > > + mpc86xx_smp_init(); > > +#endif > > +} > > + > > + > > +void > > +sbc8641d_show_cpuinfo(struct seq_file *m) > > +{ > > + struct device_node *root; > > + uint memsize = total_memory; > > + const char *model = ""; > > + uint svid = mfspr(SPRN_SVR); > > + > > + seq_printf(m, "Vendor\t\t: Wind River Systems\n"); > > + > > + root = of_find_node_by_path("/"); > > + if (root) > > + model = get_property(root, "model", NULL); > > + seq_printf(m, "Machine\t\t: %s\n", model); > > + of_node_put(root); > > + > > + seq_printf(m, "SVR\t\t: 0x%x\n", svid); > > + seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); > > +} > > + > > This is mostly redundant with the basic show cpu info, do you need > your own? > > > + > > +/* > > + * Called very early, device-tree isn't unflattened > > + */ > > +static int __init sbc8641d_probe(void) > > +{ > > + unsigned long root = of_get_flat_dt_root(); > > + > > + if (of_flat_dt_is_compatible(root, "mpc86xx")) > > + return 1; /* Looks good */ > > the check you have is too generic, you probably need something more > specific in the top level compatible property. > > > + > > + return 0; > > +} > > + > > + > > +void > > +sbc8641d_restart(char *cmd) > > +{ > > + void __iomem *rstcr; > > + > > + rstcr = ioremap(get_immrbase() + MPC86XX_RSTCR_OFFSET, 0x100); > > + > > + local_irq_disable(); > > + > > + /* Assert reset request to Reset Control Register */ > > + out_be32(rstcr, 0x2); > > + > > + /* not reached */ > > +} > > + > > + > > +long __init > > +sbc8641d_time_init(void) > > +{ > > + unsigned int temp; > > + > > + /* Set the time base to zero */ > > + mtspr(SPRN_TBWL, 0); > > + mtspr(SPRN_TBWU, 0); > > + > > + temp = mfspr(SPRN_HID0); > > + temp |= HID0_TBEN; > > + mtspr(SPRN_HID0, temp); > > + asm volatile("isync"); > > + > > + return 0; > > +} > > + > > + > > +define_machine(sbc8641d) { > > + .name = "SBC8641D", > > + .probe = sbc8641d_probe, > > + .setup_arch = sbc8641d_setup_arch, > > + .init_IRQ = sbc8641d_init_irq, > > + .show_cpuinfo = sbc8641d_show_cpuinfo, > > + .get_irq = mpic_get_irq, > > + .restart = sbc8641d_restart, > > + .time_init = sbc8641d_time_init, > > + .calibrate_decr = generic_calibrate_decr, > > + .progress = udbg_progress, > > + > > +#ifdef CONFIG_GEN_RTC > > + /* RTC interface, using functions in include/asm-generic/rtc.h */ > > + .get_rtc_time = get_rtc_time, > > + .set_rtc_time = set_rtc_time, > > +#endif > > +}; > > diff -purN -X dontdiff linux-2.6/arch/powerpc/platforms/86xx/ > > sbc8641d.h linux-2.6-esi/arch/powerpc/platforms/86xx/sbc8641d.h > > --- linux-2.6/arch/powerpc/platforms/86xx/sbc8641d.h 1969-12-31 > > 18:00:00.000000000 -0600 > > +++ linux-2.6-esi/arch/powerpc/platforms/86xx/sbc8641d.h 2007-07-31 > > 15:57:01.000000000 -0500 > > @@ -0,0 +1,24 @@ > > +/* > > + * SBC8641D board definitions > > + * > > + * Copyright 2007 Embedded Specialties, Inc. > > + * Joe Hamman <[EMAIL PROTECTED]> > > + * > > + * Copyright 2006 Freescale Semiconductor Inc. > > + * > > + * This program is free software; you can redistribute it and/or > > modify it > > + * under the terms of the GNU General Public License as > > published by the > > + * Free Software Foundation; either version 2 of the License, or > > (at your > > + * option) any later version. > > + * > > + * Author: Xianghua Xiao <[EMAIL PROTECTED]> > > + */ > > + > > +#ifndef __SBC8641D_H__ > > +#define __SBC8641D_H__ > > + > > +#include <linux/init.h> > > + > > +#define MPC86XX_RSTCR_OFFSET (0xe00b0) /* Reset Control Register > */ > > + > > +#endif /* __SBC8641D_H__ */ > > diff -purN -X dontdiff linux-2.6/drivers/net/gianfar.h linux-2.6- > > esi/drivers/net/gianfar.h > > --- linux-2.6/drivers/net/gianfar.h 2007-07-31 10:15:39.000000000 > > -0500 > > +++ linux-2.6-esi/drivers/net/gianfar.h 2007-07-31 > > 10:39:10.000000000 -0500 > > @@ -131,7 +131,7 @@ extern const char gfar_driver_version[]; > > #define DEFAULT_RXCOUNT 16 > > #define DEFAULT_RXTIME 4 > > > > -#define TBIPA_VALUE 0x1f > > +#define TBIPA_VALUE 0x1e > > we need to turn this into a config option or something. > > > #define MIIMCFG_INIT_VALUE 0x00000007 > > #define MIIMCFG_RESET 0x80000000 > > #define MIIMIND_BUSY 0x00000001 > > _______________________________________________ Linuxppc-embedded mailing list [email protected] https://ozlabs.org/mailman/listinfo/linuxppc-embedded
