Base Taco Platform support
Subsystems (2)
PATCH 1/1 Base Taco Platform support
Here is a patch for the base taco platform. It is against for-2.6.25. It adds basically everything in the arch/powerpc.
Cheers,
Sean
arch/powerpc/Kconfig +1 -1
@@ -469,7 +469,7 @@ config MCA config PCI bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \ || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \ - || PPC_PS3 + || PPC_PS3 || TACO default y if !40x && !CPM2 && !8xx && !PPC_83xx \ && !PPC_85xx && !PPC_86xx default PCI_PERMEDIA if !4xx && !CPM2 && !8xx
arch/powerpc/boot/44x.h +1 -0
@@ -12,5 +12,6 @@void ebony_init (void *mac0,void *mac1);void bamboo_init (void *mac0,void *mac1); +void taco_init (void *mac0,void *mac1);#endif /* _PPC_BOOT_44X_H_ */
arch/powerpc/boot/Makefile +3 -2
@@ -56,13 +56,13 @@ src-wlib := string.S crt0.S stdio.c main.c \ gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \ 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \ cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \ - fsl-soc.c mpc8xx.c pq2.c + fsl-soc.c mpc8xx.c pq2.c taco.c src-plat := of.c cuboot-52xx.c cuboot-83xx.c cuboot-85xx.c holly.c \ cuboot-ebony.c treeboot-ebony.c prpmc2800.c \ ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \ cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c cuboot-bamboo.c \ fixed-head.S ep88xc.c cuboot-hpc2.c ep405.c cuboot-taishan.c \ - cuboot-katmai.c cuboot-rainier.c + cuboot-katmai.c cuboot-rainier.c cuboot-taco.c src-boot := $(src-wlib) $(src-plat) empty.c src-boot := $(addprefix $(obj)/, $(src-boot))
@@ -206,6 +206,7 @@ image-$(CONFIG_RAINIER) += cuImage.rainier image-$(CONFIG_WALNUT) += treeImage.walnut image-$(CONFIG_TAISHAN) += cuImage.taishan image-$(CONFIG_KATMAI) += cuImage.katmai +image-$(CONFIG_TACO) += cuImage.taco endif # For 32-bit powermacs, build the COFF and miboot images
arch/powerpc/kernel/cputable.c +12 -0
@@ -1226,6 +1226,18 @@ static struct cpu_spec __initdata cpu_specs[] = { .machine_check = machine_check_4xx, .platform = "ppc440", }, + {/* Matches both physical and logical PVR for 440EP (logical pvr = pvr | 0x8) */ + .pvr_mask = 0xf0000ff7, + .pvr_value = 0x400008d4, + .cpu_name = "440EP Rev. C", + .cpu_features = CPU_FTRS_44X, + .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, + .icache_bsize = 32, + .dcache_bsize = 32, + .cpu_setup = __setup_cpu_440ep, + .machine_check = machine_check_4xx, + .platform = "ppc440", + }, { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */ .pvr_mask = 0xf0000fff, .pvr_value = 0x400008db,
arch/powerpc/platforms/44x/Kconfig +8 -0
@@ -53,6 +53,14 @@ config RAINIER help This option enables support for the AMCC PPC440GRX evaluation board. +config TACO + bool "Taco" + depends on 44x + default n + select 440EP + help + This option enables support for the PIKA Appliance. + #config LUAN # bool "Luan" # depends on 44x
arch/powerpc/platforms/44x/Makefile +1 -0
@@ -5,3 +5,4 @@ obj-$(CONFIG_BAMBOO) += bamboo.o obj-$(CONFIG_SEQUOIA) += sequoia.o obj-$(CONFIG_KATMAI) += katmai.o obj-$(CONFIG_RAINIER) += rainier.o +obj-$(CONFIG_TACO) += taco.o
Quoted 1 line · Sean MacLennan
Here is a patch for the base taco platform. It is against for-2.6.25. It adds basically everything in the
arch/powerpc.
And here are the missing files :(
Cheers,
Sean
powerpc/boot/cuboot-taco.c new file +25 -0
@@ -0,0 +1,25 @@ +/* +* Copyright (c) 2008 PIKA Technologies +* Sean MacLennan <[email protected]> +* +* 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 "ops.h" +#include "44x.h" +#include "cuboot.h" + +#define TARGET_44x +#include "ppcboot.h" + +static bd_t bd; + +void platform_init (unsigned long r3,unsigned long r4,unsigned long r5, +unsigned long r6,unsigned long r7) +{ +CUBOOT_INIT (); + +taco_init (&bd.bi_enetaddr, &bd.bi_enet1addr); +}
powerpc/boot/dts/taco.dts new file +207 -0
207 lines not on this page · raw message
powerpc/boot/taco.c new file +33 -0
@@ -0,0 +1,33 @@ +/* +* Copyright (c) 2008 PIKA Technologies +* Sean MacLennan <[email protected]> +* +* 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; version 2 of the License +*/ +#include "ops.h" +#include "4xx.h" +#include "44x.h" + +static u8 *taco_mac0, *taco_mac1; + +static void taco_fixups (void ) +{ +unsigned long sysclk =66000000 ; + +ibm440ep_fixup_clocks (sysclk,11059200 ,50000000 ); +ibm4xx_sdram_fixup_memsize (); +ibm4xx_quiesce_eth ((u32 *)0xef600e00 , (u32 *)0xef600f00 ); +dt_fixup_mac_addresses (taco_mac0, taco_mac1); +} + +void taco_init (void *mac0,void *mac1) +{ + platform_ops.fixups = taco_fixups; + platform_ops.exit = ibm44x_dbcr_reset; + taco_mac0 = mac0; + taco_mac1 = mac1; +fdt_init (_dtb_start); +serial_console_init (); +}
powerpc/configs/taco_defconfig new file +1059 -0
1,059 lines not on this page · raw message
powerpc/platforms/44x/taco.c new file +205 -0
205 lines not on this page · raw message
Quoted 2 lines · Sean MacLennan
Here is a patch for the base taco platform. It is against for-2.6.25. It adds basically everything in the
arch/powerpc.
Care to tell us a bit more about what Taco is ? Even better is to also do that in your Kconfig entry, maybe along with a URL to your web site.
Cheers,
Ben.
Quoted 13 lines · Benjamin Herrenschmidt
Quoted 2 lines · Sean MacLennan
Here is a patch for the base taco platform. It is against for-2.6.25. It adds basically everything in the
arch/powerpc.Care to tell us a bit more about what Taco is ? Even better is to also do that in your
Kconfigentry, maybe along with a URL to your web site.Cheers,
Ben.
Can do, if I can figure out what it is ;) Basically it is a telephony appliance geared mainly to low-density asterisk users.
I will update the Kconfig.
Cheers,
Sean
Re: Base Warp Platform support
In reply to Benjamin HerrenschmidtIt has come down from on high that the taco will henceforth be know as the Warp(tm). So here are updated patches with the "great name change". I have also merged the NOR flash partitions into the dts file.
Cheers,
Sean
Re: Base Warp Platform support
So no comments? I got it perfect the first time :D
Cheers,
Sean
[PATCH 3/2] Base Warp Platform support
Ooops. Guess I am not perfect after all ;)
Cheers,
Sean
powerpc/platforms/44x/warp.c new file +239 -0
@@ -0,0 +1,239 @@ +/* +* PIKA Warp(tm) board specific routines +* +* Copyright (c) 2008 PIKA Technologies +* Sean MacLennan <[email protected]> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +*/ +#include <linux/init.h> +#include <linux/of_platform.h> +#include <linux/kthread.h> + +#include <asm/machdep.h> +#include <asm/prom.h> +#include <asm/udbg.h> +#include <asm/time.h> +#include <asm/uic.h> + +#include "44x.h" + +#define WARP_GPIO_BASE 0xEF600B00ULL + +static __initdata struct of_device_id warp_of_bus[] = { + { .compatible ="ibm,plb4" , }, + { .compatible ="ibm,opb" , }, + { .compatible ="ibm,ebc" , }, + {}, +}; + +static int __init warp_device_probe (void ) +{ +of_platform_bus_probe (NULL , warp_of_bus,NULL ); + +return 0 ; +} +machine_device_initcall (warp, warp_device_probe); + +static int __init warp_probe (void ) +{ +unsigned long root =of_get_flat_dt_root (); + +if (!of_flat_dt_is_compatible (root,"pika,warp" )) +return 0 ; + +return 1 ; +} + +define_machine (warp) { + .name = "Warp", + .probe = warp_probe, + .progress = udbg_progress, + .init_IRQ = uic_init_tree, + .get_irq = uic_get_irq, + .restart = ppc44x_reset_system, + .calibrate_decr = generic_calibrate_decr, +}; + +/* This is for the power LEDs 1 = on, 0 = off, -1 = leave alone */ +void warp_set_power_leds (int green,int red) +{ +static void *gpio_base =NULL ; +unsigned leds; + +if (gpio_base ==NULL ) { +if ((gpio_base =ioremap (WARP_GPIO_BASE ,0x148 )) ==NULL ) { +printk ("ERROR: Unable to remap GPIO base.\n" ); +return ; + } + } + + leds =readl (gpio_base +0x100 ); + +switch (green) { +case 0 : leds &= ~0x80 ;break ; +case 1 : leds |=0x80 ;break ; + } +switch (red) { +case 0 : leds &= ~0x40 ;break ; +case 1 : leds |=0x40 ;break ; + } + +writel (leds, gpio_base +0x100 ); +} +EXPORT_SYMBOL (warp_set_power_leds); + + +static int pika_dtm_thread (void *fpga) +{ +extern int ad7414_get_temp (int index); + +while (!kthread_should_stop ()) { +int temp =ad7414_get_temp (0 ); + +out_be32 (fpga, temp); + +set_current_state (TASK_INTERRUPTIBLE ); +schedule_timeout (HZ ); + } + +return 0 ; +} + + +static int __devinit warp_fpga_init (void ) +{ +struct device_node *np; +void *fpga; +int irq; +struct resource res; +struct task_struct *dtm_thread; + +if ((np =of_find_compatible_node (NULL ,NULL ,"pika,fpga" )) ==NULL ) { + printk(KERN_ERR __FILE__ ": Unable to find fpga\n"); +return -ENOENT ; + } + +if ((irq =irq_of_parse_and_map (np,0 )) ==NO_IRQ ) { + printk(KERN_ERR __FILE__ ": irq_of_parse_and_map failed\n"); +return -EBUSY ; + } + +/* We do not call of_iomap here since it would map in the entire +* fpga space, which is over 8k. +*/ +if (of_address_to_resource (np,0 , &res) || + (fpga =ioremap (res.start,0x24 )) ==NULL ) { + printk(KERN_ERR __FILE__ ": Unable to map FPGA\n"); +return -ENOENT ; + } + +/* Turn off the line LEDs */ +out_be32 (fpga +8 ,0 ); + + dtm_thread =kthread_run (pika_dtm_thread, fpga +0x20 ,"pika-dtm" ); + +if (IS_ERR (dtm_thread)) { +iounmap (fpga); + printk(KERN_ERR __FILE__ ": Unable to start PIKA DTM thread\n"); +return PTR_ERR (dtm_thread); + } + +return 0 ; +} +device_initcall (warp_fpga_init); + +#define NAND_FLASH +#ifdef NAND_FLASH +/* --- All of this code is for the NAND flash */ + +#include <linux/platform_device.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/map.h> +#include <linux/mtd/partitions.h> +#include <linux/mtd/nand.h> +#include <linux/mtd/ndfc.h> + + +#define CS_NAND_0 1/* use chip select 1 for NAND device 0 */ + +#define WARP_NAND_FLASH_REG_ADDR 0xD0000000UL +#define WARP_NAND_FLASH_REG_SIZE 0x2000 + +static struct resource warp_ndfc = { + .start =WARP_NAND_FLASH_REG_ADDR , + .end =WARP_NAND_FLASH_REG_ADDR +WARP_NAND_FLASH_REG_SIZE , + .flags =IORESOURCE_MEM , +}; + +static struct mtd_partition nand_parts[] = { + { + .name ="nand" , + .offset =0 , + .size =MTDPART_SIZ_FULL , + } +}; + +struct ndfc_controller_settings warp_ndfc_settings = { + .ccr_settings = (NDFC_CCR_BS (CS_NAND_0 ) |NDFC_CCR_ARAC1 ), + .ndfc_erpn =0 , +}; + +static struct ndfc_chip_settings warp_chip0_settings = { + .bank_settings =0x80002222 , +}; + +struct platform_nand_ctrl warp_nand_ctrl = { + .priv = &warp_ndfc_settings, +}; + +static struct platform_device warp_ndfc_device = { + .name ="ndfc-nand" , + .id =0 , + .dev = { + .platform_data = &warp_nand_ctrl, + }, + .num_resources =1 , + .resource = &warp_ndfc, +}; + +static struct nand_ecclayout nand_oob_16 = { + .eccbytes =3 , + .eccpos = {0 ,1 ,2 ,3 ,6 ,7 }, + .oobfree = { {.offset =8 , .length =16 } } +}; + +static struct platform_nand_chip warp_nand_chip0 = { + .nr_chips =1 , + .chip_offset =CS_NAND_0 , + .nr_partitions =ARRAY_SIZE (nand_parts), + .partitions = nand_parts, + .chip_delay =50 , + .ecclayout = &nand_oob_16, + .priv = &warp_chip0_settings, +}; + +static struct platform_device warp_nand_device = { + .name ="ndfc-chip" , + .id =0 , + .num_resources =1 , + .resource = &warp_ndfc, + .dev = { + .platform_data = &warp_nand_chip0, + .parent = &warp_ndfc_device.dev, + } +}; + +static int warp_setup_flash (void ) +{ +platform_device_register (&warp_ndfc_device); +platform_device_register (&warp_nand_device); + +return 0 ; +} +device_initcall (warp_setup_flash); + +#endif /* NAND_FLASH */
Re: Base Warp Platform support
In reply to Sean MacLennanQuoted 1 line · On Wed, 09 Jan 2008 12:30:39 -0500 Sean MacLennan <[email protected]>…
So no comments? I got it perfect the first time :D
Not quite.. :)
The way you have the patches laid out right now will break compiling and git bisecting.
Could you take these and roll them up into distinct patches that can all apply without breaking a compile individually? I recommend doing it this way:
Patch 1) platform files in arch/powerpc/platforms/44x/ Patch 2) DTS
Patch 3) boot files in arch/powerpc/boot Patch 4) defconfig
or something along those lines.
That way we can apply them in that order, nothing breaks for the compile, and they aren't scattered about. If you start a new email thread with those I think most of it looked fairly good otherwise.
Re: [PATCH 1/2] Base Warp Platform support
In reply to Benjamin Herrenschmidt*diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 66a3d8c..b3e4c35 100644
arch/powerpc/Kconfig +0 -0
@@ -469,7 +469,7 @@ config MCA
config PCI
bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \ || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \ - || PPC_PS3 + || PPC_PS3 || 44x default y if !40x && !CPM2 && !8xx && !PPC_83xx \ && !PPC_85xx && !PPC_86xx default PCI_PERMEDIA if !4xx && !CPM2 && !8xx
arch/powerpc/boot/44x.h +0 -0
@@ -12,5 +12,6 @@
void ebony_init(void *mac0, void *mac1);
void bamboo_init(void *mac0, void *mac1);
+void warp_init(void *mac0, void *mac1);
#endif /* _PPC_BOOT_44X_H_ */
arch/powerpc/boot/Makefile +0 -0
@@ -56,13 +56,13 @@ src-wlib := string.S crt0.S stdio.c main.c \
gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \ 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \ cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \ - fsl-soc.c mpc8xx.c pq2.c + fsl-soc.c mpc8xx.c pq2.c warp.c src-plat := of.c cuboot-52xx.c cuboot-83xx.c cuboot-85xx.c holly.c \ cuboot-ebony.c treeboot-ebony.c prpmc2800.c \ ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \ cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c cuboot-bamboo.c \ fixed-head.S ep88xc.c cuboot-hpc2.c ep405.c cuboot-taishan.c \
- cuboot-katmai.c cuboot-rainier.c
+ cuboot-katmai.c cuboot-rainier.c cuboot-warp.c
src-boot := $(src-wlib) $(src-plat) empty.c
src-boot := $(addprefix $(obj)/, $(src-boot))
@@ -206,6 +206,7 @@ image-$(CONFIG_RAINIER) += cuImage.rainier
image-$(CONFIG_WALNUT) += treeImage.walnut
image-$(CONFIG_TAISHAN) += cuImage.taishan
image-$(CONFIG_KATMAI) += cuImage.katmai
+image-$(CONFIG_WARP) += cuImage.warp
endif
# For 32-bit powermacs, build the COFF and miboot images
arch/powerpc/kernel/cputable.c +0 -0
@@ -1226,6 +1226,18 @@ static struct cpu_spec __initdata cpu_specs[] = {
.machine_check = machine_check_4xx, .platform = "ppc440", },
+ { /* Matches both physical and logical PVR for 440EP (logical pvr = pvr | 0x8) */
+ .pvr_mask = 0xf0000ff7,
+ .pvr_value = 0x400008d4,
+ .cpu_name = "440EP Rev. C",
+ .cpu_features = CPU_FTRS_44X,
+ .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
+ .icache_bsize = 32,
+ .dcache_bsize = 32,
+ .cpu_setup = __setup_cpu_440ep,
+ .machine_check = machine_check_4xx,
+ .platform = "ppc440",
+ },
{ /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
.pvr_mask = 0xf0000fff,
.pvr_value = 0x400008db,arch/powerpc/platforms/44x/Kconfig +0 -0
@@ -53,6 +53,19 @@ config RAINIER
help
This option enables support for the AMCC PPC440GRX evaluation board.
+config WARP
+ bool "PIKA Warp"
+ depends on 44x
+ default n
+ select 440EP
+ help
+ This option enables support for the PIKA Warp(tm) Appliance. The Warp
+ is a small computer replacement with up to 9 ports of FXO/FXS plus VOIP
+ stations and trunks.
+
+ See http://www.pikatechnologies.com/ and follow the "PIKA for Computer
+ Telephony Developers" link for more information.
+
#config LUAN
# bool "Luan"
# depends on 44x
arch/powerpc/platforms/44x/Makefile +0 -0
@@ -5,3 +5,4 @@ obj-$(CONFIG_BAMBOO) += bamboo.o
obj-$(CONFIG_SEQUOIA) += sequoia.o
obj-$(CONFIG_KATMAI) += katmai.o
obj-$(CONFIG_RAINIER) += rainier.o
+obj-$(CONFIG_WARP) += warp.o
powerpc/configs/warp_defconfig new file +1057 -0
1,057 lines not on this page · raw message
*
Re: [PATCH 2/2] Base Warp Platform support
In reply to Benjamin Herrenschmidtpowerpc/boot/cuboot-warp.c new file +25 -0
@@ -0,0 +1,25 @@ +/* +* Copyright (c) 2008 PIKA Technologies +* Sean MacLennan <[email protected]> +* +* 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 "ops.h" +#include "44x.h" +#include "cuboot.h" + +#define TARGET_44x +#include "ppcboot.h" + +static bd_t bd; + +void platform_init (unsigned long r3,unsigned long r4,unsigned long r5, +unsigned long r6,unsigned long r7) +{ +CUBOOT_INIT (); + +warp_init (&bd.bi_enetaddr, &bd.bi_enet1addr); +}
powerpc/boot/dts/warp.dts new file +232 -0
232 lines not on this page · raw message
powerpc/boot/warp.c new file +33 -0
@@ -0,0 +1,33 @@ +/* +* Copyright (c) 2008 PIKA Technologies +* Sean MacLennan <[email protected]> +* +* 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; version 2 of the License +*/ +#include "ops.h" +#include "4xx.h" +#include "44x.h" + +static u8 *warp_mac0, *warp_mac1; + +static void warp_fixups (void ) +{ +unsigned long sysclk =66000000 ; + +ibm440ep_fixup_clocks (sysclk,11059200 ,50000000 ); +ibm4xx_sdram_fixup_memsize (); +ibm4xx_quiesce_eth ((u32 *)0xef600e00 , (u32 *)0xef600f00 ); +dt_fixup_mac_addresses (warp_mac0, warp_mac1); +} + +void warp_init (void *mac0,void *mac1) +{ + platform_ops.fixups = warp_fixups; + platform_ops.exit = ibm44x_dbcr_reset; + warp_mac0 = mac0; + warp_mac1 = mac1; +fdt_init (_dtb_start); +serial_console_init (); +}