diff options
author | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
---|---|---|
committer | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
commit | 871480933a1c28f8a9fed4c4d34d06c439a7a422 (patch) | |
tree | 8718f573808810c2a1e8cb8fb6ac469093ca2784 /ANDROID_3.4.5/arch/powerpc/platforms/44x | |
parent | 9d40ac5867b9aefe0722bc1f110b965ff294d30d (diff) | |
download | FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.gz FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.bz2 FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.zip |
Moved, renamed, and deleted files
The original directory structure was scattered and unorganized.
Changes are basically to make it look like kernel structure.
Diffstat (limited to 'ANDROID_3.4.5/arch/powerpc/platforms/44x')
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/44x.h | 11 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/Kconfig | 329 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/Makefile | 13 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/canyonlands.c | 134 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/currituck.c | 204 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/ebony.c | 70 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/idle.c | 67 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/iss4xx.c | 168 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/misc_44x.S | 46 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/ppc44x_simple.c | 91 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/sam440ep.c | 79 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/virtex.c | 62 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/virtex_ml510.c | 29 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/powerpc/platforms/44x/warp.c | 320 |
14 files changed, 0 insertions, 1623 deletions
diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/44x.h b/ANDROID_3.4.5/arch/powerpc/platforms/44x/44x.h deleted file mode 100644 index 63f703ec..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/44x.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __POWERPC_PLATFORMS_44X_44X_H -#define __POWERPC_PLATFORMS_44X_44X_H - -extern u8 as1_readb(volatile u8 __iomem *addr); -extern void as1_writeb(u8 data, volatile u8 __iomem *addr); - -#define GPIO0_OSRH 0xC -#define GPIO0_TSRH 0x14 -#define GPIO0_ISR1H 0x34 - -#endif /* __POWERPC_PLATFORMS_44X_44X_H */ diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/Kconfig b/ANDROID_3.4.5/arch/powerpc/platforms/44x/Kconfig deleted file mode 100644 index 2e4e64ab..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/Kconfig +++ /dev/null @@ -1,329 +0,0 @@ -config PPC_47x - bool "Support for 47x variant" - depends on 44x - default n - select MPIC - help - This option enables support for the 47x family of processors and is - not currently compatible with other 44x or 46x varients - -config BAMBOO - bool "Bamboo" - depends on 44x - default n - select PPC44x_SIMPLE - select 440EP - select PCI - help - This option enables support for the IBM PPC440EP evaluation board. - -config BLUESTONE - bool "Bluestone" - depends on 44x - default n - select PPC44x_SIMPLE - select APM821xx - select PPC4xx_PCI_EXPRESS - select IBM_EMAC_RGMII - help - This option enables support for the APM APM821xx Evaluation board. - -config EBONY - bool "Ebony" - depends on 44x - default y - select 440GP - select PCI - select OF_RTC - help - This option enables support for the IBM PPC440GP evaluation board. - -config SAM440EP - bool "Sam440ep" - depends on 44x - default n - select 440EP - select PCI - help - This option enables support for the ACube Sam440ep board. - -config SEQUOIA - bool "Sequoia" - depends on 44x - default n - select PPC44x_SIMPLE - select 440EPX - help - This option enables support for the AMCC PPC440EPX evaluation board. - -config TAISHAN - bool "Taishan" - depends on 44x - default n - select PPC44x_SIMPLE - select 440GX - select PCI - help - This option enables support for the AMCC PPC440GX "Taishan" - evaluation board. - -config KATMAI - bool "Katmai" - depends on 44x - default n - select PPC44x_SIMPLE - select 440SPe - select PCI - select PPC4xx_PCI_EXPRESS - select PCI_MSI - select PPC4xx_MSI - help - This option enables support for the AMCC PPC440SPe evaluation board. - -config RAINIER - bool "Rainier" - depends on 44x - default n - select PPC44x_SIMPLE - select 440GRX - select PCI - 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 ARCHES - bool "Arches" - depends on 44x - default n - select PPC44x_SIMPLE - select 460EX # Odd since it uses 460GT but the effects are the same - select PCI - select PPC4xx_PCI_EXPRESS - help - This option enables support for the AMCC Dual PPC460GT evaluation board. - -config CANYONLANDS - bool "Canyonlands" - depends on 44x - default n - select 460EX - select PCI - select PPC4xx_PCI_EXPRESS - select PCI_MSI - select PPC4xx_MSI - select IBM_EMAC_RGMII - select IBM_EMAC_ZMII - help - This option enables support for the AMCC PPC460EX evaluation board. - -config GLACIER - bool "Glacier" - depends on 44x - default n - select PPC44x_SIMPLE - select 460EX # Odd since it uses 460GT but the effects are the same - select PCI - select PPC4xx_PCI_EXPRESS - select IBM_EMAC_RGMII - select IBM_EMAC_ZMII - help - This option enables support for the AMCC PPC460GT evaluation board. - -config REDWOOD - bool "Redwood" - depends on 44x - default n - select PPC44x_SIMPLE - select 460SX - select PCI - select PPC4xx_PCI_EXPRESS - select PCI_MSI - select PPC4xx_MSI - help - This option enables support for the AMCC PPC460SX Redwood board. - -config EIGER - bool "Eiger" - depends on 44x - default n - select PPC44x_SIMPLE - select 460SX - select PCI - select PPC4xx_PCI_EXPRESS - select IBM_EMAC_RGMII - help - This option enables support for the AMCC PPC460SX evaluation board. - -config YOSEMITE - bool "Yosemite" - depends on 44x - default n - select PPC44x_SIMPLE - select 440EP - select PCI - help - This option enables support for the AMCC PPC440EP evaluation board. - -config ISS4xx - bool "ISS 4xx Simulator" - depends on (44x || 40x) - default n - select 405GP if 40x - select 440GP if 44x && !PPC_47x - select PPC_FPU - select OF_RTC - help - This option enables support for the IBM ISS simulation environment - -config CURRITUCK - bool "IBM Currituck (476fpe) Support" - depends on PPC_47x - default n - select SWIOTLB - select 476FPE - select PPC4xx_PCI_EXPRESS - help - This option enables support for the IBM Currituck (476fpe) evaluation board - -config ICON - bool "Icon" - depends on 44x - default n - select PPC44x_SIMPLE - select 440SPe - select PCI - select PPC4xx_PCI_EXPRESS - help - This option enables support for the AMCC PPC440SPe evaluation board. - -config XILINX_VIRTEX440_GENERIC_BOARD - bool "Generic Xilinx Virtex 5 FXT board support" - depends on 44x - default n - select XILINX_VIRTEX_5_FXT - help - This option enables generic support for Xilinx Virtex based boards - that use a 440 based processor in the Virtex 5 FXT FPGA architecture. - - The generic virtex board support matches any device tree which - specifies 'xlnx,virtex440' in its compatible field. This includes - the Xilinx ML5xx reference designs using the powerpc core. - - Most Virtex 5 designs should use this unless it needs to do some - special configuration at board probe time. - -config XILINX_ML510 - bool "Xilinx ML510 extra support" - depends on XILINX_VIRTEX440_GENERIC_BOARD - select PPC_PCI_CHOICE - select XILINX_PCI if PCI - select PPC_INDIRECT_PCI if PCI - select PPC_I8259 if PCI - help - This option enables extra support for features on the Xilinx ML510 - board. The ML510 has a PCI bus with ALI south bridge. - -config PPC44x_SIMPLE - bool "Simple PowerPC 44x board support" - depends on 44x - default n - help - This option enables the simple PowerPC 44x platform support. - -config PPC4xx_GPIO - bool "PPC4xx GPIO support" - depends on 44x - select ARCH_REQUIRE_GPIOLIB - select GENERIC_GPIO - help - Enable gpiolib support for ppc440 based boards - -# 44x specific CPU modules, selected based on the board above. -config 440EP - bool - select PPC_FPU - select IBM440EP_ERR42 - select IBM_EMAC_ZMII - select USB_ARCH_HAS_OHCI - -config 440EPX - bool - select PPC_FPU - select IBM_EMAC_EMAC4 - select IBM_EMAC_RGMII - select IBM_EMAC_ZMII - -config 440GRX - bool - select IBM_EMAC_EMAC4 - select IBM_EMAC_RGMII - select IBM_EMAC_ZMII - -config 440GP - bool - select IBM_EMAC_ZMII - -config 440GX - bool - select IBM_EMAC_EMAC4 - select IBM_EMAC_RGMII - select IBM_EMAC_ZMII #test only - select IBM_EMAC_TAH #test only - -config 440SP - bool - -config 440SPe - bool - select IBM_EMAC_EMAC4 - -config 460EX - bool - select PPC_FPU - select IBM_EMAC_EMAC4 - select IBM_EMAC_TAH - -config 460SX - bool - select PPC_FPU - select IBM_EMAC_EMAC4 - select IBM_EMAC_RGMII - select IBM_EMAC_ZMII - select IBM_EMAC_TAH - -config 476FPE - bool - select PPC_FPU - -config APM821xx - bool - select PPC_FPU - select IBM_EMAC_EMAC4 - select IBM_EMAC_TAH - -# 44x errata/workaround config symbols, selected by the CPU models above -config IBM440EP_ERR42 - bool - -# Xilinx specific config options. -config XILINX_VIRTEX - bool - select DEFAULT_UIMAGE - -# Xilinx Virtex 5 FXT FPGA architecture, selected by a Xilinx board above -config XILINX_VIRTEX_5_FXT - bool - select XILINX_VIRTEX - diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/Makefile b/ANDROID_3.4.5/arch/powerpc/platforms/44x/Makefile deleted file mode 100644 index d03833ab..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -obj-$(CONFIG_44x) += misc_44x.o -ifneq ($(CONFIG_PPC4xx_CPM),y) -obj-$(CONFIG_44x) += idle.o -endif -obj-$(CONFIG_PPC44x_SIMPLE) += ppc44x_simple.o -obj-$(CONFIG_EBONY) += ebony.o -obj-$(CONFIG_SAM440EP) += sam440ep.o -obj-$(CONFIG_WARP) += warp.o -obj-$(CONFIG_XILINX_VIRTEX_5_FXT) += virtex.o -obj-$(CONFIG_XILINX_ML510) += virtex_ml510.o -obj-$(CONFIG_ISS4xx) += iss4xx.o -obj-$(CONFIG_CANYONLANDS)+= canyonlands.o -obj-$(CONFIG_CURRITUCK) += currituck.o diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/canyonlands.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/canyonlands.c deleted file mode 100644 index e300dd4c..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/canyonlands.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * This contain platform specific code for APM PPC460EX based Canyonlands - * board. - * - * Copyright (c) 2010, Applied Micro Circuits Corporation - * Author: Rupjyoti Sarmah <rsarmah@apm.com> - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - */ -#include <linux/kernel.h> -#include <linux/init.h> -#include <asm/pci-bridge.h> -#include <asm/ppc4xx.h> -#include <asm/udbg.h> -#include <asm/uic.h> -#include <linux/of_platform.h> -#include <linux/delay.h> -#include "44x.h" - -#define BCSR_USB_EN 0x11 - -static __initdata struct of_device_id ppc460ex_of_bus[] = { - { .compatible = "ibm,plb4", }, - { .compatible = "ibm,opb", }, - { .compatible = "ibm,ebc", }, - { .compatible = "simple-bus", }, - {}, -}; - -static int __init ppc460ex_device_probe(void) -{ - of_platform_bus_probe(NULL, ppc460ex_of_bus, NULL); - - return 0; -} -machine_device_initcall(canyonlands, ppc460ex_device_probe); - -/* Using this code only for the Canyonlands board. */ - -static int __init ppc460ex_probe(void) -{ - unsigned long root = of_get_flat_dt_root(); - if (of_flat_dt_is_compatible(root, "amcc,canyonlands")) { - pci_set_flags(PCI_REASSIGN_ALL_RSRC); - return 1; - } - return 0; -} - -/* USB PHY fixup code on Canyonlands kit. */ - -static int __init ppc460ex_canyonlands_fixup(void) -{ - u8 __iomem *bcsr ; - void __iomem *vaddr; - struct device_node *np; - int ret = 0; - - np = of_find_compatible_node(NULL, NULL, "amcc,ppc460ex-bcsr"); - if (!np) { - printk(KERN_ERR "failed did not find amcc, ppc460ex bcsr node\n"); - return -ENODEV; - } - - bcsr = of_iomap(np, 0); - of_node_put(np); - - if (!bcsr) { - printk(KERN_CRIT "Could not remap bcsr\n"); - ret = -ENODEV; - goto err_bcsr; - } - - np = of_find_compatible_node(NULL, NULL, "ibm,ppc4xx-gpio"); - if (!np) { - printk(KERN_ERR "failed did not find ibm,ppc4xx-gpio node\n"); - return -ENODEV; - } - - vaddr = of_iomap(np, 0); - of_node_put(np); - - if (!vaddr) { - printk(KERN_CRIT "Could not get gpio node address\n"); - ret = -ENODEV; - goto err_gpio; - } - /* Disable USB, through the BCSR7 bits */ - setbits8(&bcsr[7], BCSR_USB_EN); - - /* Wait for a while after reset */ - msleep(100); - - /* Enable USB here */ - clrbits8(&bcsr[7], BCSR_USB_EN); - - /* - * Configure multiplexed gpio16 and gpio19 as alternate1 output - * source after USB reset. In this configuration gpio16 will be - * USB2HStop and gpio19 will be USB2DStop. For more details refer to - * table 34-7 of PPC460EX user manual. - */ - setbits32((vaddr + GPIO0_OSRH), 0x42000000); - setbits32((vaddr + GPIO0_TSRH), 0x42000000); -err_gpio: - iounmap(vaddr); -err_bcsr: - iounmap(bcsr); - return ret; -} -machine_device_initcall(canyonlands, ppc460ex_canyonlands_fixup); -define_machine(canyonlands) { - .name = "Canyonlands", - .probe = ppc460ex_probe, - .progress = udbg_progress, - .init_IRQ = uic_init_tree, - .get_irq = uic_get_irq, - .restart = ppc4xx_reset_system, - .calibrate_decr = generic_calibrate_decr, -}; diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/currituck.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/currituck.c deleted file mode 100644 index 583e67fe..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/currituck.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Currituck board specific routines - * - * Copyright © 2011 Tony Breeds IBM Corporation - * - * Based on earlier code: - * Matt Porter <mporter@kernel.crashing.org> - * Copyright 2002-2005 MontaVista Software Inc. - * - * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net> - * Copyright (c) 2003-2005 Zultys Technologies - * - * Rewritten and ported to the merged powerpc tree: - * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation. - * Copyright © 2011 David Kliekamp IBM Corporation - * - * 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/memblock.h> -#include <linux/of.h> -#include <linux/of_platform.h> -#include <linux/rtc.h> - -#include <asm/machdep.h> -#include <asm/prom.h> -#include <asm/udbg.h> -#include <asm/time.h> -#include <asm/uic.h> -#include <asm/ppc4xx.h> -#include <asm/mpic.h> -#include <asm/mmu.h> - -#include <linux/pci.h> - -static __initdata struct of_device_id ppc47x_of_bus[] = { - { .compatible = "ibm,plb4", }, - { .compatible = "ibm,plb6", }, - { .compatible = "ibm,opb", }, - { .compatible = "ibm,ebc", }, - {}, -}; - -/* The EEPROM is missing and the default values are bogus. This forces USB in - * to EHCI mode */ -static void __devinit quirk_ppc_currituck_usb_fixup(struct pci_dev *dev) -{ - if (of_machine_is_compatible("ibm,currituck")) { - pci_write_config_dword(dev, 0xe0, 0x0114231f); - pci_write_config_dword(dev, 0xe4, 0x00006c40); - } -} -DECLARE_PCI_FIXUP_HEADER(0x1033, 0x0035, quirk_ppc_currituck_usb_fixup); - -static int __init ppc47x_device_probe(void) -{ - of_platform_bus_probe(NULL, ppc47x_of_bus, NULL); - - return 0; -} -machine_device_initcall(ppc47x, ppc47x_device_probe); - -/* We can have either UICs or MPICs */ -static void __init ppc47x_init_irq(void) -{ - struct device_node *np; - - /* Find top level interrupt controller */ - for_each_node_with_property(np, "interrupt-controller") { - if (of_get_property(np, "interrupts", NULL) == NULL) - break; - } - if (np == NULL) - panic("Can't find top level interrupt controller"); - - /* Check type and do appropriate initialization */ - if (of_device_is_compatible(np, "chrp,open-pic")) { - /* The MPIC driver will get everything it needs from the - * device-tree, just pass 0 to all arguments - */ - struct mpic *mpic = - mpic_alloc(np, 0, MPIC_NO_RESET, 0, 0, " MPIC "); - BUG_ON(mpic == NULL); - mpic_init(mpic); - ppc_md.get_irq = mpic_get_irq; - } else - panic("Unrecognized top level interrupt controller"); -} - -#ifdef CONFIG_SMP -static void __cpuinit smp_ppc47x_setup_cpu(int cpu) -{ - mpic_setup_this_cpu(); -} - -static int __cpuinit smp_ppc47x_kick_cpu(int cpu) -{ - struct device_node *cpunode = of_get_cpu_node(cpu, NULL); - const u64 *spin_table_addr_prop; - u32 *spin_table; - extern void start_secondary_47x(void); - - BUG_ON(cpunode == NULL); - - /* Assume spin table. We could test for the enable-method in - * the device-tree but currently there's little point as it's - * our only supported method - */ - spin_table_addr_prop = - of_get_property(cpunode, "cpu-release-addr", NULL); - - if (spin_table_addr_prop == NULL) { - pr_err("CPU%d: Can't start, missing cpu-release-addr !\n", - cpu); - return 1; - } - - /* Assume it's mapped as part of the linear mapping. This is a bit - * fishy but will work fine for now - * - * XXX: Is there any reason to assume differently? - */ - spin_table = (u32 *)__va(*spin_table_addr_prop); - pr_debug("CPU%d: Spin table mapped at %p\n", cpu, spin_table); - - spin_table[3] = cpu; - smp_wmb(); - spin_table[1] = __pa(start_secondary_47x); - mb(); - - return 0; -} - -static struct smp_ops_t ppc47x_smp_ops = { - .probe = smp_mpic_probe, - .message_pass = smp_mpic_message_pass, - .setup_cpu = smp_ppc47x_setup_cpu, - .kick_cpu = smp_ppc47x_kick_cpu, - .give_timebase = smp_generic_give_timebase, - .take_timebase = smp_generic_take_timebase, -}; - -static void __init ppc47x_smp_init(void) -{ - if (mmu_has_feature(MMU_FTR_TYPE_47x)) - smp_ops = &ppc47x_smp_ops; -} - -#else /* CONFIG_SMP */ -static void __init ppc47x_smp_init(void) { } -#endif /* CONFIG_SMP */ - -static void __init ppc47x_setup_arch(void) -{ - - /* No need to check the DMA config as we /know/ our windows are all of - * RAM. Lets hope that doesn't change */ -#ifdef CONFIG_SWIOTLB - if (memblock_end_of_DRAM() > 0xffffffff) { - ppc_swiotlb_enable = 1; - set_pci_dma_ops(&swiotlb_dma_ops); - ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb; - } -#endif - ppc47x_smp_init(); -} - -/* - * Called very early, MMU is off, device-tree isn't unflattened - */ -static int __init ppc47x_probe(void) -{ - unsigned long root = of_get_flat_dt_root(); - - if (!of_flat_dt_is_compatible(root, "ibm,currituck")) - return 0; - - return 1; -} - -/* Use USB controller should have been hardware swizzled but it wasn't :( */ -static void ppc47x_pci_irq_fixup(struct pci_dev *dev) -{ - if (dev->vendor == 0x1033 && (dev->device == 0x0035 || - dev->device == 0x00e0)) { - dev->irq = irq_create_mapping(NULL, 47); - pr_info("%s: Mapping irq 47 %d\n", __func__, dev->irq); - } -} - -define_machine(ppc47x) { - .name = "PowerPC 47x", - .probe = ppc47x_probe, - .progress = udbg_progress, - .init_IRQ = ppc47x_init_irq, - .setup_arch = ppc47x_setup_arch, - .pci_irq_fixup = ppc47x_pci_irq_fixup, - .restart = ppc4xx_reset_system, - .calibrate_decr = generic_calibrate_decr, -}; diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/ebony.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/ebony.c deleted file mode 100644 index 6a4232bb..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/ebony.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Ebony board specific routines - * - * Matt Porter <mporter@kernel.crashing.org> - * Copyright 2002-2005 MontaVista Software Inc. - * - * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net> - * Copyright (c) 2003-2005 Zultys Technologies - * - * Rewritten and ported to the merged powerpc tree: - * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation. - * - * 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/rtc.h> - -#include <asm/machdep.h> -#include <asm/prom.h> -#include <asm/udbg.h> -#include <asm/time.h> -#include <asm/uic.h> -#include <asm/pci-bridge.h> -#include <asm/ppc4xx.h> - -static __initdata struct of_device_id ebony_of_bus[] = { - { .compatible = "ibm,plb4", }, - { .compatible = "ibm,opb", }, - { .compatible = "ibm,ebc", }, - {}, -}; - -static int __init ebony_device_probe(void) -{ - of_platform_bus_probe(NULL, ebony_of_bus, NULL); - of_instantiate_rtc(); - - return 0; -} -machine_device_initcall(ebony, ebony_device_probe); - -/* - * Called very early, MMU is off, device-tree isn't unflattened - */ -static int __init ebony_probe(void) -{ - unsigned long root = of_get_flat_dt_root(); - - if (!of_flat_dt_is_compatible(root, "ibm,ebony")) - return 0; - - pci_set_flags(PCI_REASSIGN_ALL_RSRC); - - return 1; -} - -define_machine(ebony) { - .name = "Ebony", - .probe = ebony_probe, - .progress = udbg_progress, - .init_IRQ = uic_init_tree, - .get_irq = uic_get_irq, - .restart = ppc4xx_reset_system, - .calibrate_decr = generic_calibrate_decr, -}; diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/idle.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/idle.c deleted file mode 100644 index 7a81f921..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/idle.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2008 IBM Corp. - * - * Based on arch/powerpc/platforms/pasemi/idle.c: - * Copyright (C) 2006-2007 PA Semi, Inc - * - * Added by: Jerone Young <jyoung5@us.ibm.com> - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include <linux/of.h> -#include <linux/kernel.h> -#include <asm/machdep.h> - -static int mode_spin; - -static void ppc44x_idle(void) -{ - unsigned long msr_save; - - msr_save = mfmsr(); - /* set wait state MSR */ - mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE|MSR_DE); - isync(); - /* return to initial state */ - mtmsr(msr_save); - isync(); -} - -int __init ppc44x_idle_init(void) -{ - if (!mode_spin) { - /* If we are not setting spin mode - then we set to wait mode */ - ppc_md.power_save = &ppc44x_idle; - } - - return 0; -} - -arch_initcall(ppc44x_idle_init); - -static int __init idle_param(char *p) -{ - - if (!strcmp("spin", p)) { - mode_spin = 1; - ppc_md.power_save = NULL; - } - - return 0; -} - -early_param("idle", idle_param); diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/iss4xx.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/iss4xx.c deleted file mode 100644 index a28a8629..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/iss4xx.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * PPC476 board specific routines - * - * Copyright 2010 Torez Smith, IBM Corporation. - * - * Based on earlier code: - * Matt Porter <mporter@kernel.crashing.org> - * Copyright 2002-2005 MontaVista Software Inc. - * - * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net> - * Copyright (c) 2003-2005 Zultys Technologies - * - * Rewritten and ported to the merged powerpc tree: - * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation. - * - * 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/rtc.h> - -#include <asm/machdep.h> -#include <asm/prom.h> -#include <asm/udbg.h> -#include <asm/time.h> -#include <asm/uic.h> -#include <asm/ppc4xx.h> -#include <asm/mpic.h> -#include <asm/mmu.h> - -static __initdata struct of_device_id iss4xx_of_bus[] = { - { .compatible = "ibm,plb4", }, - { .compatible = "ibm,plb6", }, - { .compatible = "ibm,opb", }, - { .compatible = "ibm,ebc", }, - {}, -}; - -static int __init iss4xx_device_probe(void) -{ - of_platform_bus_probe(NULL, iss4xx_of_bus, NULL); - of_instantiate_rtc(); - - return 0; -} -machine_device_initcall(iss4xx, iss4xx_device_probe); - -/* We can have either UICs or MPICs */ -static void __init iss4xx_init_irq(void) -{ - struct device_node *np; - - /* Find top level interrupt controller */ - for_each_node_with_property(np, "interrupt-controller") { - if (of_get_property(np, "interrupts", NULL) == NULL) - break; - } - if (np == NULL) - panic("Can't find top level interrupt controller"); - - /* Check type and do appropriate initialization */ - if (of_device_is_compatible(np, "ibm,uic")) { - uic_init_tree(); - ppc_md.get_irq = uic_get_irq; -#ifdef CONFIG_MPIC - } else if (of_device_is_compatible(np, "chrp,open-pic")) { - /* The MPIC driver will get everything it needs from the - * device-tree, just pass 0 to all arguments - */ - struct mpic *mpic = mpic_alloc(np, 0, MPIC_NO_RESET, 0, 0, " MPIC "); - BUG_ON(mpic == NULL); - mpic_init(mpic); - ppc_md.get_irq = mpic_get_irq; -#endif - } else - panic("Unrecognized top level interrupt controller"); -} - -#ifdef CONFIG_SMP -static void __cpuinit smp_iss4xx_setup_cpu(int cpu) -{ - mpic_setup_this_cpu(); -} - -static int __cpuinit smp_iss4xx_kick_cpu(int cpu) -{ - struct device_node *cpunode = of_get_cpu_node(cpu, NULL); - const u64 *spin_table_addr_prop; - u32 *spin_table; - extern void start_secondary_47x(void); - - BUG_ON(cpunode == NULL); - - /* Assume spin table. We could test for the enable-method in - * the device-tree but currently there's little point as it's - * our only supported method - */ - spin_table_addr_prop = of_get_property(cpunode, "cpu-release-addr", - NULL); - if (spin_table_addr_prop == NULL) { - pr_err("CPU%d: Can't start, missing cpu-release-addr !\n", cpu); - return -ENOENT; - } - - /* Assume it's mapped as part of the linear mapping. This is a bit - * fishy but will work fine for now - */ - spin_table = (u32 *)__va(*spin_table_addr_prop); - pr_debug("CPU%d: Spin table mapped at %p\n", cpu, spin_table); - - spin_table[3] = cpu; - smp_wmb(); - spin_table[1] = __pa(start_secondary_47x); - mb(); - - return 0; -} - -static struct smp_ops_t iss_smp_ops = { - .probe = smp_mpic_probe, - .message_pass = smp_mpic_message_pass, - .setup_cpu = smp_iss4xx_setup_cpu, - .kick_cpu = smp_iss4xx_kick_cpu, - .give_timebase = smp_generic_give_timebase, - .take_timebase = smp_generic_take_timebase, -}; - -static void __init iss4xx_smp_init(void) -{ - if (mmu_has_feature(MMU_FTR_TYPE_47x)) - smp_ops = &iss_smp_ops; -} - -#else /* CONFIG_SMP */ -static void __init iss4xx_smp_init(void) { } -#endif /* CONFIG_SMP */ - -static void __init iss4xx_setup_arch(void) -{ - iss4xx_smp_init(); -} - -/* - * Called very early, MMU is off, device-tree isn't unflattened - */ -static int __init iss4xx_probe(void) -{ - unsigned long root = of_get_flat_dt_root(); - - if (!of_flat_dt_is_compatible(root, "ibm,iss-4xx")) - return 0; - - return 1; -} - -define_machine(iss4xx) { - .name = "ISS-4xx", - .probe = iss4xx_probe, - .progress = udbg_progress, - .init_IRQ = iss4xx_init_irq, - .setup_arch = iss4xx_setup_arch, - .restart = ppc4xx_reset_system, - .calibrate_decr = generic_calibrate_decr, -}; diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/misc_44x.S b/ANDROID_3.4.5/arch/powerpc/platforms/44x/misc_44x.S deleted file mode 100644 index dc12b800..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/misc_44x.S +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file contains miscellaneous low-level functions for PPC 44x. - * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation. - * - * 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 <asm/reg.h> -#include <asm/ppc_asm.h> - - .text - -/* - * Do an IO access in AS1 - */ -_GLOBAL(as1_readb) - mfmsr r7 - ori r0,r7,MSR_DS - sync - mtmsr r0 - sync - isync - lbz r3,0(r3) - sync - mtmsr r7 - sync - isync - blr - -_GLOBAL(as1_writeb) - mfmsr r7 - ori r0,r7,MSR_DS - sync - mtmsr r0 - sync - isync - stb r3,0(r4) - sync - mtmsr r7 - sync - isync - blr diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/ppc44x_simple.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/ppc44x_simple.c deleted file mode 100644 index 3ffb9154..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/ppc44x_simple.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Generic PowerPC 44x platform support - * - * Copyright 2008 IBM Corporation - * - * 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. - * - * This implements simple platform support for PowerPC 44x chips. This is - * mostly used for eval boards or other simple and "generic" 44x boards. If - * your board has custom functions or hardware, then you will likely want to - * implement your own board.c file to accommodate it. - */ - -#include <asm/machdep.h> -#include <asm/pci-bridge.h> -#include <asm/ppc4xx.h> -#include <asm/prom.h> -#include <asm/time.h> -#include <asm/udbg.h> -#include <asm/uic.h> - -#include <linux/init.h> -#include <linux/of_platform.h> - -static __initdata struct of_device_id ppc44x_of_bus[] = { - { .compatible = "ibm,plb4", }, - { .compatible = "ibm,opb", }, - { .compatible = "ibm,ebc", }, - { .compatible = "simple-bus", }, - {}, -}; - -static int __init ppc44x_device_probe(void) -{ - of_platform_bus_probe(NULL, ppc44x_of_bus, NULL); - - return 0; -} -machine_device_initcall(ppc44x_simple, ppc44x_device_probe); - -/* This is the list of boards that can be supported by this simple - * platform code. This does _not_ mean the boards are compatible, - * as they most certainly are not from a device tree perspective. - * However, their differences are handled by the device tree and the - * drivers and therefore they don't need custom board support files. - * - * Again, if your board needs to do things differently then create a - * board.c file for it rather than adding it to this list. - */ -static char *board[] __initdata = { - "amcc,arches", - "amcc,bamboo", - "apm,bluestone", - "amcc,glacier", - "ibm,ebony", - "amcc,eiger", - "amcc,katmai", - "amcc,rainier", - "amcc,redwood", - "amcc,sequoia", - "amcc,taishan", - "amcc,yosemite", - "mosaixtech,icon" -}; - -static int __init ppc44x_probe(void) -{ - unsigned long root = of_get_flat_dt_root(); - int i = 0; - - for (i = 0; i < ARRAY_SIZE(board); i++) { - if (of_flat_dt_is_compatible(root, board[i])) { - pci_set_flags(PCI_REASSIGN_ALL_RSRC); - return 1; - } - } - - return 0; -} - -define_machine(ppc44x_simple) { - .name = "PowerPC 44x Platform", - .probe = ppc44x_probe, - .progress = udbg_progress, - .init_IRQ = uic_init_tree, - .get_irq = uic_get_irq, - .restart = ppc4xx_reset_system, - .calibrate_decr = generic_calibrate_decr, -}; diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/sam440ep.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/sam440ep.c deleted file mode 100644 index 9e09b835..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/sam440ep.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Sam440ep board specific routines based off bamboo.c code - * original copyrights below - * - * Wade Farnsworth <wfarnsworth@mvista.com> - * Copyright 2004 MontaVista Software Inc. - * - * Rewritten and ported to the merged powerpc tree: - * Josh Boyer <jwboyer@linux.vnet.ibm.com> - * Copyright 2007 IBM Corporation - * - * Modified from bamboo.c for sam440ep: - * Copyright 2008 Giuseppe Coviello <gicoviello@gmail.com> - * - * 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 <asm/machdep.h> -#include <asm/prom.h> -#include <asm/udbg.h> -#include <asm/time.h> -#include <asm/uic.h> -#include <asm/pci-bridge.h> -#include <asm/ppc4xx.h> -#include <linux/i2c.h> - -static __initdata struct of_device_id sam440ep_of_bus[] = { - { .compatible = "ibm,plb4", }, - { .compatible = "ibm,opb", }, - { .compatible = "ibm,ebc", }, - {}, -}; - -static int __init sam440ep_device_probe(void) -{ - of_platform_bus_probe(NULL, sam440ep_of_bus, NULL); - - return 0; -} -machine_device_initcall(sam440ep, sam440ep_device_probe); - -static int __init sam440ep_probe(void) -{ - unsigned long root = of_get_flat_dt_root(); - - if (!of_flat_dt_is_compatible(root, "acube,sam440ep")) - return 0; - - pci_set_flags(PCI_REASSIGN_ALL_RSRC); - - return 1; -} - -define_machine(sam440ep) { - .name = "Sam440ep", - .probe = sam440ep_probe, - .progress = udbg_progress, - .init_IRQ = uic_init_tree, - .get_irq = uic_get_irq, - .restart = ppc4xx_reset_system, - .calibrate_decr = generic_calibrate_decr, -}; - -static struct i2c_board_info sam440ep_rtc_info = { - .type = "m41st85", - .addr = 0x68, - .irq = -1, -}; - -static int sam440ep_setup_rtc(void) -{ - return i2c_register_board_info(0, &sam440ep_rtc_info, 1); -} -machine_device_initcall(sam440ep, sam440ep_setup_rtc); diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/virtex.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/virtex.c deleted file mode 100644 index cf96ccaa..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/virtex.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Xilinx Virtex 5FXT based board support, derived from - * the Xilinx Virtex (IIpro & 4FX) based board support - * - * Copyright 2007 Secret Lab Technologies Ltd. - * Copyright 2008 Xilinx, Inc. - * - * 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. - */ - -#include <linux/init.h> -#include <linux/of_platform.h> -#include <asm/machdep.h> -#include <asm/prom.h> -#include <asm/time.h> -#include <asm/xilinx_intc.h> -#include <asm/xilinx_pci.h> -#include <asm/reg.h> -#include <asm/ppc4xx.h> -#include "44x.h" - -static struct of_device_id xilinx_of_bus_ids[] __initdata = { - { .compatible = "simple-bus", }, - { .compatible = "xlnx,plb-v46-1.00.a", }, - { .compatible = "xlnx,plb-v46-1.02.a", }, - { .compatible = "xlnx,plb-v34-1.01.a", }, - { .compatible = "xlnx,plb-v34-1.02.a", }, - { .compatible = "xlnx,opb-v20-1.10.c", }, - { .compatible = "xlnx,dcr-v29-1.00.a", }, - { .compatible = "xlnx,compound", }, - {} -}; - -static int __init virtex_device_probe(void) -{ - of_platform_bus_probe(NULL, xilinx_of_bus_ids, NULL); - - return 0; -} -machine_device_initcall(virtex, virtex_device_probe); - -static int __init virtex_probe(void) -{ - unsigned long root = of_get_flat_dt_root(); - - if (!of_flat_dt_is_compatible(root, "xlnx,virtex440")) - return 0; - - return 1; -} - -define_machine(virtex) { - .name = "Xilinx Virtex440", - .probe = virtex_probe, - .setup_arch = xilinx_pci_init, - .init_IRQ = xilinx_intc_init_tree, - .get_irq = xilinx_intc_get_irq, - .calibrate_decr = generic_calibrate_decr, - .restart = ppc4xx_reset_system, -}; diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/virtex_ml510.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/virtex_ml510.c deleted file mode 100644 index ba4a6e38..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/virtex_ml510.c +++ /dev/null @@ -1,29 +0,0 @@ -#include <asm/i8259.h> -#include <linux/pci.h> -#include "44x.h" - -/** - * ml510_ail_quirk - */ -static void __devinit ml510_ali_quirk(struct pci_dev *dev) -{ - /* Enable the IDE controller */ - pci_write_config_byte(dev, 0x58, 0x4c); - /* Assign irq 14 to the primary ide channel */ - pci_write_config_byte(dev, 0x44, 0x0d); - /* Assign irq 15 to the secondary ide channel */ - pci_write_config_byte(dev, 0x75, 0x0f); - /* Set the ide controller in native mode */ - pci_write_config_byte(dev, 0x09, 0xff); - - /* INTB = disabled, INTA = disabled */ - pci_write_config_byte(dev, 0x48, 0x00); - /* INTD = disabled, INTC = disabled */ - pci_write_config_byte(dev, 0x4a, 0x00); - /* Audio = INT7, Modem = disabled. */ - pci_write_config_byte(dev, 0x4b, 0x60); - /* USB = INT7 */ - pci_write_config_byte(dev, 0x74, 0x06); -} -DECLARE_PCI_FIXUP_EARLY(0x10b9, 0x1533, ml510_ali_quirk); - diff --git a/ANDROID_3.4.5/arch/powerpc/platforms/44x/warp.c b/ANDROID_3.4.5/arch/powerpc/platforms/44x/warp.c deleted file mode 100644 index 4cfa4990..00000000 --- a/ANDROID_3.4.5/arch/powerpc/platforms/44x/warp.c +++ /dev/null @@ -1,320 +0,0 @@ -/* - * PIKA Warp(tm) board specific routines - * - * Copyright (c) 2008-2009 PIKA Technologies - * Sean MacLennan <smaclennan@pikatech.com> - * - * 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 <linux/i2c.h> -#include <linux/interrupt.h> -#include <linux/delay.h> -#include <linux/of_gpio.h> -#include <linux/of_i2c.h> -#include <linux/slab.h> -#include <linux/export.h> - -#include <asm/machdep.h> -#include <asm/prom.h> -#include <asm/udbg.h> -#include <asm/time.h> -#include <asm/uic.h> -#include <asm/ppc4xx.h> - - -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; - - /* For __dma_alloc_coherent */ - ISA_DMA_THRESHOLD = ~0L; - - return 1; -} - -define_machine(warp) { - .name = "Warp", - .probe = warp_probe, - .progress = udbg_progress, - .init_IRQ = uic_init_tree, - .get_irq = uic_get_irq, - .restart = ppc4xx_reset_system, - .calibrate_decr = generic_calibrate_decr, -}; - - -static int __init warp_post_info(void) -{ - struct device_node *np; - void __iomem *fpga; - u32 post1, post2; - - /* Sighhhh... POST information is in the sd area. */ - np = of_find_compatible_node(NULL, NULL, "pika,fpga-sd"); - if (np == NULL) - return -ENOENT; - - fpga = of_iomap(np, 0); - of_node_put(np); - if (fpga == NULL) - return -ENOENT; - - post1 = in_be32(fpga + 0x40); - post2 = in_be32(fpga + 0x44); - - iounmap(fpga); - - if (post1 || post2) - printk(KERN_INFO "Warp POST %08x %08x\n", post1, post2); - else - printk(KERN_INFO "Warp POST OK\n"); - - return 0; -} - - -#ifdef CONFIG_SENSORS_AD7414 - -static LIST_HEAD(dtm_shutdown_list); -static void __iomem *dtm_fpga; -static unsigned green_led, red_led; - - -struct dtm_shutdown { - struct list_head list; - void (*func)(void *arg); - void *arg; -}; - - -int pika_dtm_register_shutdown(void (*func)(void *arg), void *arg) -{ - struct dtm_shutdown *shutdown; - - shutdown = kmalloc(sizeof(struct dtm_shutdown), GFP_KERNEL); - if (shutdown == NULL) - return -ENOMEM; - - shutdown->func = func; - shutdown->arg = arg; - - list_add(&shutdown->list, &dtm_shutdown_list); - - return 0; -} - -int pika_dtm_unregister_shutdown(void (*func)(void *arg), void *arg) -{ - struct dtm_shutdown *shutdown; - - list_for_each_entry(shutdown, &dtm_shutdown_list, list) - if (shutdown->func == func && shutdown->arg == arg) { - list_del(&shutdown->list); - kfree(shutdown); - return 0; - } - - return -EINVAL; -} - -static irqreturn_t temp_isr(int irq, void *context) -{ - struct dtm_shutdown *shutdown; - int value = 1; - - local_irq_disable(); - - gpio_set_value(green_led, 0); - - /* Run through the shutdown list. */ - list_for_each_entry(shutdown, &dtm_shutdown_list, list) - shutdown->func(shutdown->arg); - - printk(KERN_EMERG "\n\nCritical Temperature Shutdown\n\n"); - - while (1) { - if (dtm_fpga) { - unsigned reset = in_be32(dtm_fpga + 0x14); - out_be32(dtm_fpga + 0x14, reset); - } - - gpio_set_value(red_led, value); - value ^= 1; - mdelay(500); - } - - /* Not reached */ - return IRQ_HANDLED; -} - -static int pika_setup_leds(void) -{ - struct device_node *np, *child; - - np = of_find_compatible_node(NULL, NULL, "gpio-leds"); - if (!np) { - printk(KERN_ERR __FILE__ ": Unable to find leds\n"); - return -ENOENT; - } - - for_each_child_of_node(np, child) - if (strcmp(child->name, "green") == 0) - green_led = of_get_gpio(child, 0); - else if (strcmp(child->name, "red") == 0) - red_led = of_get_gpio(child, 0); - - of_node_put(np); - - return 0; -} - -static void pika_setup_critical_temp(struct device_node *np, - struct i2c_client *client) -{ - int irq, rc; - - /* Do this before enabling critical temp interrupt since we - * may immediately interrupt. - */ - pika_setup_leds(); - - /* These registers are in 1 degree increments. */ - i2c_smbus_write_byte_data(client, 2, 65); /* Thigh */ - i2c_smbus_write_byte_data(client, 3, 0); /* Tlow */ - - irq = irq_of_parse_and_map(np, 0); - if (irq == NO_IRQ) { - printk(KERN_ERR __FILE__ ": Unable to get ad7414 irq\n"); - return; - } - - rc = request_irq(irq, temp_isr, 0, "ad7414", NULL); - if (rc) { - printk(KERN_ERR __FILE__ - ": Unable to request ad7414 irq %d = %d\n", irq, rc); - return; - } -} - -static inline void pika_dtm_check_fan(void __iomem *fpga) -{ - static int fan_state; - u32 fan = in_be32(fpga + 0x34) & (1 << 14); - - if (fan_state != fan) { - fan_state = fan; - if (fan) - printk(KERN_WARNING "Fan rotation error detected." - " Please check hardware.\n"); - } -} - -static int pika_dtm_thread(void __iomem *fpga) -{ - struct device_node *np; - struct i2c_client *client; - - np = of_find_compatible_node(NULL, NULL, "adi,ad7414"); - if (np == NULL) - return -ENOENT; - - client = of_find_i2c_device_by_node(np); - if (client == NULL) { - of_node_put(np); - return -ENOENT; - } - - pika_setup_critical_temp(np, client); - - of_node_put(np); - - printk(KERN_INFO "Warp DTM thread running.\n"); - - while (!kthread_should_stop()) { - int val; - - val = i2c_smbus_read_word_data(client, 0); - if (val < 0) - dev_dbg(&client->dev, "DTM read temp failed.\n"); - else { - s16 temp = swab16(val); - out_be32(fpga + 0x20, temp); - } - - pika_dtm_check_fan(fpga); - - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(HZ); - } - - return 0; -} - -static int __init pika_dtm_start(void) -{ - struct task_struct *dtm_thread; - struct device_node *np; - - np = of_find_compatible_node(NULL, NULL, "pika,fpga"); - if (np == NULL) - return -ENOENT; - - dtm_fpga = of_iomap(np, 0); - of_node_put(np); - if (dtm_fpga == NULL) - return -ENOENT; - - /* Must get post info before thread starts. */ - warp_post_info(); - - dtm_thread = kthread_run(pika_dtm_thread, dtm_fpga, "pika-dtm"); - if (IS_ERR(dtm_thread)) { - iounmap(dtm_fpga); - return PTR_ERR(dtm_thread); - } - - return 0; -} -machine_late_initcall(warp, pika_dtm_start); - -#else /* !CONFIG_SENSORS_AD7414 */ - -int pika_dtm_register_shutdown(void (*func)(void *arg), void *arg) -{ - return 0; -} - -int pika_dtm_unregister_shutdown(void (*func)(void *arg), void *arg) -{ - return 0; -} - -machine_late_initcall(warp, warp_post_info); - -#endif - -EXPORT_SYMBOL(pika_dtm_register_shutdown); -EXPORT_SYMBOL(pika_dtm_unregister_shutdown); |