diff options
author | Arnd Bergmann <arndb@de.ibm.com> | 2005-10-31 20:08:40 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-11-01 21:03:04 +1100 |
commit | edf03c1ee84e5095e8f4a4b8ad6e0784118cb176 (patch) | |
tree | 2b86e57df3cfd2767fffb55ccf4b04e4d28c5c75 /arch/ppc64/kernel | |
parent | e9add2eeb182e2bf1863c548f7a8173c45b4b92f (diff) |
[PATCH] powerpc: move mmio_nvram.c over to arch/powerpc
The nvram code formally known as bpa_nvram.c is rather
generic really, so it is quite likely to be useful to
future boards not based on cell.
This patch puts it into arch/powerpc/sysdev.
Signed-off-by: Arnd Bergmann <arndb@de.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/ppc64/kernel')
-rw-r--r-- | arch/ppc64/kernel/Makefile | 2 | ||||
-rw-r--r-- | arch/ppc64/kernel/bpa_nvram.c | 118 |
2 files changed, 1 insertions, 119 deletions
diff --git a/arch/ppc64/kernel/Makefile b/arch/ppc64/kernel/Makefile index a01a9de9eb5..afd44511444 100644 --- a/arch/ppc64/kernel/Makefile +++ b/arch/ppc64/kernel/Makefile @@ -31,7 +31,7 @@ endif obj-$(CONFIG_PPC_PSERIES) += rtasd.o udbg_16550.o -obj-$(CONFIG_PPC_CELL) += bpa_setup.o bpa_iommu.o bpa_nvram.o \ +obj-$(CONFIG_PPC_CELL) += bpa_setup.o bpa_iommu.o \ bpa_iic.o spider-pic.o obj-$(CONFIG_KEXEC) += machine_kexec.o diff --git a/arch/ppc64/kernel/bpa_nvram.c b/arch/ppc64/kernel/bpa_nvram.c deleted file mode 100644 index 74e0d31a355..00000000000 --- a/arch/ppc64/kernel/bpa_nvram.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * memory mapped NVRAM - * - * (C) Copyright IBM Corp. 2005 - * - * Authors : Utz Bacher <utz.bacher@de.ibm.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, 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/fs.h> -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/spinlock.h> -#include <linux/types.h> - -#include <asm/machdep.h> -#include <asm/nvram.h> -#include <asm/prom.h> - -static void __iomem *mmio_nvram_start; -static long mmio_nvram_len; -static spinlock_t mmio_nvram_lock = SPIN_LOCK_UNLOCKED; - -static ssize_t mmio_nvram_read(char *buf, size_t count, loff_t *index) -{ - unsigned long flags; - - if (*index >= mmio_nvram_len) - return 0; - if (*index + count > mmio_nvram_len) - count = mmio_nvram_len - *index; - - spin_lock_irqsave(&mmio_nvram_lock, flags); - - memcpy_fromio(buf, mmio_nvram_start + *index, count); - - spin_unlock_irqrestore(&mmio_nvram_lock, flags); - - *index += count; - return count; -} - -static ssize_t mmio_nvram_write(char *buf, size_t count, loff_t *index) -{ - unsigned long flags; - - if (*index >= mmio_nvram_len) - return 0; - if (*index + count > mmio_nvram_len) - count = mmio_nvram_len - *index; - - spin_lock_irqsave(&mmio_nvram_lock, flags); - - memcpy_toio(mmio_nvram_start + *index, buf, count); - - spin_unlock_irqrestore(&mmio_nvram_lock, flags); - - *index += count; - return count; -} - -static ssize_t mmio_nvram_get_size(void) -{ - return mmio_nvram_len; -} - -int __init mmio_nvram_init(void) -{ - struct device_node *nvram_node; - unsigned long *buffer; - int proplen; - unsigned long nvram_addr; - int ret; - - ret = -ENODEV; - nvram_node = of_find_node_by_type(NULL, "nvram"); - if (!nvram_node) - goto out; - - ret = -EIO; - buffer = (unsigned long *)get_property(nvram_node, "reg", &proplen); - if (proplen != 2*sizeof(unsigned long)) - goto out; - - ret = -ENODEV; - nvram_addr = buffer[0]; - mmio_nvram_len = buffer[1]; - if ( (!mmio_nvram_len) || (!nvram_addr) ) - goto out; - - mmio_nvram_start = ioremap(nvram_addr, mmio_nvram_len); - if (!mmio_nvram_start) - goto out; - - printk(KERN_INFO "mmio NVRAM, %luk mapped to %p\n", - mmio_nvram_len >> 10, mmio_nvram_start); - - ppc_md.nvram_read = mmio_nvram_read; - ppc_md.nvram_write = mmio_nvram_write; - ppc_md.nvram_size = mmio_nvram_get_size; - -out: - of_node_put(nvram_node); - return ret; -} |