| John Crispin | 8ec6d93 | 2011-03-30 09:27:48 +0200 | [diff] [blame] | 1 | /* | 
|  | 2 | *  This program is free software; you can redistribute it and/or modify it | 
|  | 3 | *  under the terms of the GNU General Public License version 2 as published | 
|  | 4 | *  by the Free Software Foundation. | 
|  | 5 | * | 
|  | 6 | *  EBU - the external bus unit attaches PCI, NOR and NAND | 
|  | 7 | * | 
|  | 8 | *  Copyright (C) 2010 John Crispin <blogic@openwrt.org> | 
|  | 9 | */ | 
|  | 10 |  | 
|  | 11 | #include <linux/kernel.h> | 
|  | 12 | #include <linux/module.h> | 
|  | 13 | #include <linux/version.h> | 
|  | 14 | #include <linux/ioport.h> | 
|  | 15 |  | 
|  | 16 | #include <lantiq_soc.h> | 
|  | 17 |  | 
|  | 18 | /* all access to the ebu must be locked */ | 
|  | 19 | DEFINE_SPINLOCK(ebu_lock); | 
|  | 20 | EXPORT_SYMBOL_GPL(ebu_lock); | 
|  | 21 |  | 
|  | 22 | static struct resource ltq_ebu_resource = { | 
|  | 23 | .name	= "ebu", | 
|  | 24 | .start	= LTQ_EBU_BASE_ADDR, | 
|  | 25 | .end	= LTQ_EBU_BASE_ADDR + LTQ_EBU_SIZE - 1, | 
|  | 26 | .flags	= IORESOURCE_MEM, | 
|  | 27 | }; | 
|  | 28 |  | 
|  | 29 | /* remapped base addr of the clock unit and external bus unit */ | 
|  | 30 | void __iomem *ltq_ebu_membase; | 
|  | 31 |  | 
|  | 32 | static int __init lantiq_ebu_init(void) | 
|  | 33 | { | 
|  | 34 | /* insert and request the memory region */ | 
|  | 35 | if (insert_resource(&iomem_resource, <q_ebu_resource) < 0) | 
|  | 36 | panic("Failed to insert ebu memory\n"); | 
|  | 37 |  | 
|  | 38 | if (request_mem_region(ltq_ebu_resource.start, | 
|  | 39 | resource_size(<q_ebu_resource), "ebu") < 0) | 
|  | 40 | panic("Failed to request ebu memory\n"); | 
|  | 41 |  | 
|  | 42 | /* remap ebu register range */ | 
|  | 43 | ltq_ebu_membase = ioremap_nocache(ltq_ebu_resource.start, | 
|  | 44 | resource_size(<q_ebu_resource)); | 
|  | 45 | if (!ltq_ebu_membase) | 
|  | 46 | panic("Failed to remap ebu memory\n"); | 
|  | 47 |  | 
|  | 48 | /* make sure to unprotect the memory region where flash is located */ | 
|  | 49 | ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_BUSCON0) & ~EBU_WRDIS, LTQ_EBU_BUSCON0); | 
|  | 50 | return 0; | 
|  | 51 | } | 
|  | 52 |  | 
|  | 53 | postcore_initcall(lantiq_ebu_init); |