mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm: (130 commits) [ARM] 3856/1: Add clocksource for Intel IXP4xx platforms [ARM] 3855/1: Add generic time support [ARM] 3873/1: S3C24XX: Add irq_chip names [ARM] 3872/1: S3C24XX: Apply consistant tabbing to irq_chips [ARM] 3871/1: S3C24XX: Fix ordering of EINT4..23 [ARM] nommu: confirms the CR_V bit in nommu mode [ARM] nommu: abort handler fixup for !CPU_CP15_MMU cores. [ARM] 3870/1: AT91: Start removing static memory mappings [ARM] 3869/1: AT91: NAND support for DK and KB9202 boards [ARM] 3868/1: AT91 hardware header update [ARM] 3867/1: AT91 GPIO update [ARM] 3866/1: AT91 clock update [ARM] 3865/1: AT91RM9200 header updates [ARM] 3862/2: S3C2410 - add basic power management support for AML M5900 series [ARM] kthread: switch arch/arm/kernel/apm.c [ARM] Off-by-one in arch/arm/common/icst* [ARM] 3864/1: Refactore sharpsl_pm [ARM] 3863/1: Add Locomo SPI Device [ARM] 3847/2: Convert LOMOMO to use struct device for GPIOs [ARM] Use CPU_CACHE_* where possible in asm/cacheflush.h ...
This commit is contained in:
		
						commit
						ebdea46fec
					
				
					 264 changed files with 10757 additions and 9662 deletions
				
			
		|  | @ -17,6 +17,10 @@ config ARM | |||
| 	  Europe.  There is an ARM Linux project with a web page at | ||||
| 	  <http://www.arm.linux.org.uk/>. | ||||
| 
 | ||||
| config GENERIC_TIME | ||||
| 	bool | ||||
| 	default n | ||||
| 
 | ||||
| config MMU | ||||
| 	bool | ||||
| 	default y | ||||
|  | @ -51,6 +55,10 @@ config GENERIC_HARDIRQS | |||
| 	bool | ||||
| 	default y | ||||
| 
 | ||||
| config TRACE_IRQFLAGS_SUPPORT | ||||
| 	bool | ||||
| 	default y | ||||
| 
 | ||||
| config HARDIRQS_SW_RESEND | ||||
| 	bool | ||||
| 	default y | ||||
|  | @ -91,7 +99,7 @@ config ARCH_MTD_XIP | |||
| 
 | ||||
| config VECTORS_BASE | ||||
| 	hex | ||||
| 	default 0xffff0000 if MMU | ||||
| 	default 0xffff0000 if MMU || CPU_HIGH_VECTOR | ||||
| 	default DRAM_BASE if REMAP_VECTORS_TO_RAM | ||||
| 	default 0x00000000 | ||||
| 	help | ||||
|  | @ -198,16 +206,27 @@ config ARCH_IMX | |||
| 	help | ||||
| 	  Support for Motorola's i.MX family of processors (MX1, MXL). | ||||
| 
 | ||||
| config ARCH_IOP3XX | ||||
| 	bool "IOP3xx-based" | ||||
| config ARCH_IOP32X | ||||
| 	bool "IOP32x-based" | ||||
| 	depends on MMU | ||||
| 	select PLAT_IOP | ||||
| 	select PCI | ||||
| 	help | ||||
| 	  Support for Intel's IOP3XX (XScale) family of processors. | ||||
| 	  Support for Intel's 80219 and IOP32X (XScale) family of | ||||
| 	  processors. | ||||
| 
 | ||||
| config ARCH_IOP33X | ||||
| 	bool "IOP33x-based" | ||||
| 	depends on MMU | ||||
| 	select PLAT_IOP | ||||
| 	select PCI | ||||
| 	help | ||||
| 	  Support for Intel's IOP33X (XScale) family of processors. | ||||
| 
 | ||||
| config ARCH_IXP4XX | ||||
| 	bool "IXP4xx-based" | ||||
| 	depends on MMU | ||||
| 	select GENERIC_TIME | ||||
| 	help | ||||
| 	  Support for Intel's IXP4XX (XScale) family of processors. | ||||
| 
 | ||||
|  | @ -308,7 +327,9 @@ source "arch/arm/mach-footbridge/Kconfig" | |||
| 
 | ||||
| source "arch/arm/mach-integrator/Kconfig" | ||||
| 
 | ||||
| source "arch/arm/mach-iop3xx/Kconfig" | ||||
| source "arch/arm/mach-iop32x/Kconfig" | ||||
| 
 | ||||
| source "arch/arm/mach-iop33x/Kconfig" | ||||
| 
 | ||||
| source "arch/arm/mach-ixp4xx/Kconfig" | ||||
| 
 | ||||
|  | @ -348,6 +369,9 @@ source "arch/arm/mach-netx/Kconfig" | |||
| config ARCH_ACORN | ||||
| 	bool | ||||
| 
 | ||||
| config PLAT_IOP | ||||
| 	bool | ||||
| 
 | ||||
| source arch/arm/mm/Kconfig | ||||
| 
 | ||||
| #  bool 'Use XScale PMU as timer source' CONFIG_XSCALE_PMU_TIMER | ||||
|  | @ -602,6 +626,7 @@ config LEDS_CPU | |||
| 
 | ||||
| config ALIGNMENT_TRAP | ||||
| 	bool | ||||
| 	depends on CPU_CP15_MMU | ||||
| 	default y if !ARCH_EBSA110 | ||||
| 	help | ||||
| 	  ARM processors can not fetch/store information which is not | ||||
|  | @ -633,11 +658,12 @@ config ZBOOT_ROM_BSS | |||
| 	hex "Compressed ROM boot loader BSS address" | ||||
| 	default "0" | ||||
| 	help | ||||
| 	  The base address of 64KiB of read/write memory in the target | ||||
| 	  for the ROM-able zImage, which must be available while the | ||||
| 	  decompressor is running.  Platforms which normally make use of | ||||
| 	  ROM-able zImage formats normally set this to a suitable | ||||
| 	  value in their defconfig file. | ||||
| 	  The base address of an area of read/write memory in the target | ||||
| 	  for the ROM-able zImage which must be available while the | ||||
| 	  decompressor is running. It must be large enough to hold the | ||||
| 	  entire decompressed kernel plus an additional 128 KiB. | ||||
| 	  Platforms which normally make use of ROM-able zImage formats | ||||
| 	  normally set this to a suitable value in their defconfig file. | ||||
| 
 | ||||
| 	  If ZBOOT_ROM is not enabled, this has no effect. | ||||
| 
 | ||||
|  | @ -832,7 +858,7 @@ source "drivers/base/Kconfig" | |||
| 
 | ||||
| source "drivers/connector/Kconfig" | ||||
| 
 | ||||
| if ALIGNMENT_TRAP | ||||
| if ALIGNMENT_TRAP || !CPU_CP15_MMU | ||||
| source "drivers/mtd/Kconfig" | ||||
| endif | ||||
| 
 | ||||
|  | @ -844,7 +870,7 @@ source "drivers/block/Kconfig" | |||
| 
 | ||||
| source "drivers/acorn/block/Kconfig" | ||||
| 
 | ||||
| if PCMCIA || ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX \ | ||||
| if PCMCIA || ARCH_CLPS7500 || ARCH_IOP32X || ARCH_IOP33X || ARCH_IXP4XX \ | ||||
| 	|| ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC \ | ||||
| 	|| ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE \ | ||||
| 	|| ARCH_IXP23XX | ||||
|  |  | |||
|  | @ -25,6 +25,14 @@ config FLASH_SIZE | |||
| 	hex 'FLASH Size' if SET_MEM_PARAM | ||||
| 	default 0x00400000 | ||||
| 
 | ||||
| config PROCESSOR_ID | ||||
| 	hex | ||||
| 	default 0x00007700 | ||||
| 	depends on !CPU_CP15 | ||||
| 	help | ||||
| 	  If processor has no CP15 register, this processor ID is | ||||
| 	  used instead of the auto-probing which utilizes the register. | ||||
| 
 | ||||
| config REMAP_VECTORS_TO_RAM | ||||
| 	bool 'Install vectors to the begining of RAM' if DRAM_BASE | ||||
| 	depends on DRAM_BASE | ||||
|  |  | |||
|  | @ -55,7 +55,12 @@ arch-$(CONFIG_CPU_32v3)		:=-D__LINUX_ARM_ARCH__=3 -march=armv3 | |||
| # This selects how we optimise for the processor.
 | ||||
| tune-$(CONFIG_CPU_ARM610)	:=-mtune=arm610 | ||||
| tune-$(CONFIG_CPU_ARM710)	:=-mtune=arm710 | ||||
| tune-$(CONFIG_CPU_ARM7TDMI)	:=-mtune=arm7tdmi | ||||
| tune-$(CONFIG_CPU_ARM720T)	:=-mtune=arm7tdmi | ||||
| tune-$(CONFIG_CPU_ARM740T)	:=-mtune=arm7tdmi | ||||
| tune-$(CONFIG_CPU_ARM9TDMI)	:=-mtune=arm9tdmi | ||||
| tune-$(CONFIG_CPU_ARM940T)	:=-mtune=arm9tdmi | ||||
| tune-$(CONFIG_CPU_ARM946T)	:=$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi) | ||||
| tune-$(CONFIG_CPU_ARM920T)	:=-mtune=arm9tdmi | ||||
| tune-$(CONFIG_CPU_ARM922T)	:=-mtune=arm9tdmi | ||||
| tune-$(CONFIG_CPU_ARM925T)	:=-mtune=arm9tdmi | ||||
|  | @ -101,7 +106,8 @@ endif | |||
|  machine-$(CONFIG_ARCH_INTEGRATOR) := integrator | ||||
|  textofs-$(CONFIG_ARCH_CLPS711X)   := 0x00028000 | ||||
|  machine-$(CONFIG_ARCH_CLPS711X)   := clps711x | ||||
|  machine-$(CONFIG_ARCH_IOP3XX)	   := iop3xx | ||||
|  machine-$(CONFIG_ARCH_IOP32X)	   := iop32x | ||||
|  machine-$(CONFIG_ARCH_IOP33X)	   := iop33x | ||||
|  machine-$(CONFIG_ARCH_IXP4XX)	   := ixp4xx | ||||
|  machine-$(CONFIG_ARCH_IXP2000)    := ixp2000 | ||||
|  machine-$(CONFIG_ARCH_IXP23XX)    := ixp23xx | ||||
|  | @ -157,6 +163,7 @@ core-$(CONFIG_FPE_FASTFPE)	+= $(FASTFPE_OBJ) | |||
| core-$(CONFIG_VFP)		+= arch/arm/vfp/ | ||||
| 
 | ||||
| # If we have a common platform directory, then include it in the build.
 | ||||
| core-$(CONFIG_PLAT_IOP)		+= arch/arm/plat-iop/ | ||||
| core-$(CONFIG_ARCH_OMAP)	+= arch/arm/plat-omap/ | ||||
| 
 | ||||
| drivers-$(CONFIG_OPROFILE)      += arch/arm/oprofile/ | ||||
|  |  | |||
|  | @ -51,7 +51,11 @@ OBJS		+= head-at91rm9200.o | |||
| endif | ||||
| 
 | ||||
| ifeq ($(CONFIG_CPU_BIG_ENDIAN),y) | ||||
| ifeq ($(CONFIG_CPU_CP15),y) | ||||
| OBJS		+= big-endian.o | ||||
| else | ||||
| # The endian should be set by h/w design.
 | ||||
| endif | ||||
| endif | ||||
| 
 | ||||
| #
 | ||||
|  |  | |||
|  | @ -20,11 +20,21 @@ | |||
| #ifdef DEBUG | ||||
| 
 | ||||
| #if defined(CONFIG_DEBUG_ICEDCC) | ||||
| 
 | ||||
| #ifdef CONFIG_CPU_V6 | ||||
| 		.macro	loadsp, rb | ||||
| 		.endm | ||||
| 		.macro	writeb, ch, rb | ||||
| 		mcr	p14, 0, \ch, c0, c5, 0 | ||||
| 		.endm | ||||
| #else | ||||
| 		.macro	loadsp, rb | ||||
| 		.endm | ||||
| 		.macro	writeb, ch, rb | ||||
| 		mcr	p14, 0, \ch, c0, c1, 0 | ||||
| 		.endm | ||||
| #endif | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| #include <asm/arch/debug-macro.S> | ||||
|  | @ -42,12 +52,6 @@ | |||
| 		add	\rb, \rb, #0x00010000	@ Ser1
 | ||||
| #endif | ||||
| 		.endm | ||||
| #elif defined(CONFIG_ARCH_IOP331) | ||||
| 		.macro loadsp, rb | ||||
|                 mov   	\rb, #0xff000000 | ||||
|                 orr     \rb, \rb, #0x00ff0000 | ||||
|                 orr     \rb, \rb, #0x0000f700   @ location of the UART
 | ||||
| 		.endm | ||||
| #elif defined(CONFIG_ARCH_S3C2410) | ||||
| 		.macro loadsp, rb | ||||
| 		mov	\rb, #0x50000000 | ||||
|  | @ -78,9 +82,11 @@ | |||
| 		kphex	r6, 8		/* processor id */ | ||||
| 		kputc	#':' | ||||
| 		kphex	r7, 8		/* architecture id */ | ||||
| #ifdef CONFIG_CPU_CP15 | ||||
| 		kputc	#':' | ||||
| 		mrc	p15, 0, r0, c1, c0 | ||||
| 		kphex	r0, 8		/* control reg */ | ||||
| #endif | ||||
| 		kputc	#'\n' | ||||
| 		kphex	r5, 8		/* decompressed kernel start */ | ||||
| 		kputc	#'-' | ||||
|  | @ -503,7 +509,11 @@ call_kernel:	bl	cache_clean_flush | |||
|  */ | ||||
| 
 | ||||
| call_cache_fn:	adr	r12, proc_types | ||||
| #ifdef CONFIG_CPU_CP15 | ||||
| 		mrc	p15, 0, r6, c0, c0	@ get processor ID
 | ||||
| #else | ||||
| 		ldr	r6, =CONFIG_PROCESSOR_ID | ||||
| #endif | ||||
| 1:		ldr	r1, [r12, #0]		@ get value
 | ||||
| 		ldr	r2, [r12, #4]		@ get mask
 | ||||
| 		eor	r1, r1, r6		@ (real ^ match)
 | ||||
|  |  | |||
|  | @ -30,6 +30,25 @@ static void putstr(const char *ptr); | |||
| #include <asm/arch/uncompress.h> | ||||
| 
 | ||||
| #ifdef CONFIG_DEBUG_ICEDCC | ||||
| 
 | ||||
| #ifdef CONFIG_CPU_V6 | ||||
| 
 | ||||
| static void icedcc_putc(int ch) | ||||
| { | ||||
| 	int status, i = 0x4000000; | ||||
| 
 | ||||
| 	do { | ||||
| 		if (--i < 0) | ||||
| 			return; | ||||
| 
 | ||||
| 		asm volatile ("mrc p14, 0, %0, c0, c1, 0" : "=r" (status)); | ||||
| 	} while (status & (1 << 29)); | ||||
| 
 | ||||
| 	asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch)); | ||||
| } | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| static void icedcc_putc(int ch) | ||||
| { | ||||
| 	int status, i = 0x4000000; | ||||
|  | @ -44,6 +63,8 @@ static void icedcc_putc(int ch) | |||
| 	asm("mcr p14, 0, %0, c1, c0, 0" : : "r" (ch)); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #define putc(ch)	icedcc_putc(ch) | ||||
| #define flush()	do { } while (0) | ||||
| #endif | ||||
|  |  | |||
|  | @ -57,7 +57,7 @@ icst307_khz_to_vco(const struct icst307_params *p, unsigned long freq) | |||
| 			break; | ||||
| 	} while (i < ARRAY_SIZE(idx2s)); | ||||
| 
 | ||||
| 	if (i > ARRAY_SIZE(idx2s)) | ||||
| 	if (i >= ARRAY_SIZE(idx2s)) | ||||
| 		return vco; | ||||
| 
 | ||||
| 	vco.s = idx2s[i]; | ||||
|  | @ -119,7 +119,7 @@ icst307_ps_to_vco(const struct icst307_params *p, unsigned long period) | |||
| 			break; | ||||
| 	} while (i < ARRAY_SIZE(idx2s)); | ||||
| 
 | ||||
| 	if (i > ARRAY_SIZE(idx2s)) | ||||
| 	if (i >= ARRAY_SIZE(idx2s)) | ||||
| 		return vco; | ||||
| 
 | ||||
| 	vco.s = idx2s[i]; | ||||
|  |  | |||
|  | @ -55,7 +55,7 @@ icst525_khz_to_vco(const struct icst525_params *p, unsigned long freq) | |||
| 			break; | ||||
| 	} while (i < ARRAY_SIZE(idx2s)); | ||||
| 
 | ||||
| 	if (i > ARRAY_SIZE(idx2s)) | ||||
| 	if (i >= ARRAY_SIZE(idx2s)) | ||||
| 		return vco; | ||||
| 
 | ||||
| 	vco.s = idx2s[i]; | ||||
|  | @ -118,7 +118,7 @@ icst525_ps_to_vco(const struct icst525_params *p, unsigned long period) | |||
| 			break; | ||||
| 	} while (i < ARRAY_SIZE(idx2s)); | ||||
| 
 | ||||
| 	if (i > ARRAY_SIZE(idx2s)) | ||||
| 	if (i >= ARRAY_SIZE(idx2s)) | ||||
| 		return vco; | ||||
| 
 | ||||
| 	vco.s = idx2s[i]; | ||||
|  |  | |||
|  | @ -121,6 +121,13 @@ static struct locomo_dev_info locomo_devices[] = { | |||
| 		.offset		= 0, | ||||
| 		.length		= 0, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.devid		= LOCOMO_DEVID_SPI, | ||||
| 		.irq		= {}, | ||||
| 		.name		= "locomo-spi", | ||||
| 		.offset		= LOCOMO_SPI, | ||||
| 		.length		= 0x30, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  | @ -374,7 +381,7 @@ static void locomo_spi_handler(unsigned int irq, struct irqdesc *desc, | |||
| 	struct irqdesc *d; | ||||
| 	void __iomem *mapbase = get_irq_chipdata(irq); | ||||
| 
 | ||||
| 	req = locomo_readl(mapbase + LOCOMO_SPIIR) & 0x000F; | ||||
| 	req = locomo_readl(mapbase + LOCOMO_SPI + LOCOMO_SPIIR) & 0x000F; | ||||
| 	if (req) { | ||||
| 		irq = LOCOMO_IRQ_SPI_START; | ||||
| 		d = irq_desc + irq; | ||||
|  | @ -391,35 +398,35 @@ static void locomo_spi_ack_irq(unsigned int irq) | |||
| { | ||||
| 	void __iomem *mapbase = get_irq_chipdata(irq); | ||||
| 	unsigned int r; | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPIWE); | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPI + LOCOMO_SPIWE); | ||||
| 	r |= (0x0001 << (irq - LOCOMO_IRQ_SPI_START)); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPIWE); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPI + LOCOMO_SPIWE); | ||||
| 
 | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPIIS); | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPI + LOCOMO_SPIIS); | ||||
| 	r &= ~(0x0001 << (irq - LOCOMO_IRQ_SPI_START)); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPIIS); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPI + LOCOMO_SPIIS); | ||||
| 
 | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPIWE); | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPI + LOCOMO_SPIWE); | ||||
| 	r &= ~(0x0001 << (irq - LOCOMO_IRQ_SPI_START)); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPIWE); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPI + LOCOMO_SPIWE); | ||||
| } | ||||
| 
 | ||||
| static void locomo_spi_mask_irq(unsigned int irq) | ||||
| { | ||||
| 	void __iomem *mapbase = get_irq_chipdata(irq); | ||||
| 	unsigned int r; | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPIIE); | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPI + LOCOMO_SPIIE); | ||||
| 	r &= ~(0x0001 << (irq - LOCOMO_IRQ_SPI_START)); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPIIE); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPI + LOCOMO_SPIIE); | ||||
| } | ||||
| 
 | ||||
| static void locomo_spi_unmask_irq(unsigned int irq) | ||||
| { | ||||
| 	void __iomem *mapbase = get_irq_chipdata(irq); | ||||
| 	unsigned int r; | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPIIE); | ||||
| 	r = locomo_readl(mapbase + LOCOMO_SPI + LOCOMO_SPIIE); | ||||
| 	r |= (0x0001 << (irq - LOCOMO_IRQ_SPI_START)); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPIIE); | ||||
| 	locomo_writel(r, mapbase + LOCOMO_SPI + LOCOMO_SPIIE); | ||||
| } | ||||
| 
 | ||||
| static struct irq_chip locomo_spi_chip = { | ||||
|  | @ -814,12 +821,15 @@ static inline struct locomo *locomo_chip_driver(struct locomo_dev *ldev) | |||
| 	return (struct locomo *)dev_get_drvdata(ldev->dev.parent); | ||||
| } | ||||
| 
 | ||||
| void locomo_gpio_set_dir(struct locomo_dev *ldev, unsigned int bits, unsigned int dir) | ||||
| void locomo_gpio_set_dir(struct device *dev, unsigned int bits, unsigned int dir) | ||||
| { | ||||
| 	struct locomo *lchip = locomo_chip_driver(ldev); | ||||
| 	struct locomo *lchip = dev_get_drvdata(dev); | ||||
| 	unsigned long flags; | ||||
| 	unsigned int r; | ||||
| 
 | ||||
| 	if (!lchip) | ||||
| 		return; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&lchip->lock, flags); | ||||
| 
 | ||||
| 	r = locomo_readl(lchip->base + LOCOMO_GPD); | ||||
|  | @ -836,12 +846,15 @@ void locomo_gpio_set_dir(struct locomo_dev *ldev, unsigned int bits, unsigned in | |||
| 	spin_unlock_irqrestore(&lchip->lock, flags); | ||||
| } | ||||
| 
 | ||||
| unsigned int locomo_gpio_read_level(struct locomo_dev *ldev, unsigned int bits) | ||||
| int locomo_gpio_read_level(struct device *dev, unsigned int bits) | ||||
| { | ||||
| 	struct locomo *lchip = locomo_chip_driver(ldev); | ||||
| 	struct locomo *lchip = dev_get_drvdata(dev); | ||||
| 	unsigned long flags; | ||||
| 	unsigned int ret; | ||||
| 
 | ||||
| 	if (!lchip) | ||||
| 		return -ENODEV; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&lchip->lock, flags); | ||||
| 	ret = locomo_readl(lchip->base + LOCOMO_GPL); | ||||
| 	spin_unlock_irqrestore(&lchip->lock, flags); | ||||
|  | @ -850,12 +863,15 @@ unsigned int locomo_gpio_read_level(struct locomo_dev *ldev, unsigned int bits) | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| unsigned int locomo_gpio_read_output(struct locomo_dev *ldev, unsigned int bits) | ||||
| int locomo_gpio_read_output(struct device *dev, unsigned int bits) | ||||
| { | ||||
| 	struct locomo *lchip = locomo_chip_driver(ldev); | ||||
| 	struct locomo *lchip = dev_get_drvdata(dev); | ||||
| 	unsigned long flags; | ||||
| 	unsigned int ret; | ||||
| 
 | ||||
| 	if (!lchip) | ||||
| 		return -ENODEV; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&lchip->lock, flags); | ||||
| 	ret = locomo_readl(lchip->base + LOCOMO_GPO); | ||||
| 	spin_unlock_irqrestore(&lchip->lock, flags); | ||||
|  | @ -864,12 +880,15 @@ unsigned int locomo_gpio_read_output(struct locomo_dev *ldev, unsigned int bits) | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| void locomo_gpio_write(struct locomo_dev *ldev, unsigned int bits, unsigned int set) | ||||
| void locomo_gpio_write(struct device *dev, unsigned int bits, unsigned int set) | ||||
| { | ||||
| 	struct locomo *lchip = locomo_chip_driver(ldev); | ||||
| 	struct locomo *lchip = dev_get_drvdata(dev); | ||||
| 	unsigned long flags; | ||||
| 	unsigned int r; | ||||
| 
 | ||||
| 	if (!lchip) | ||||
| 		return; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&lchip->lock, flags); | ||||
| 
 | ||||
| 	r = locomo_readl(lchip->base + LOCOMO_GPO); | ||||
|  | @ -1058,9 +1077,9 @@ void locomo_frontlight_set(struct locomo_dev *dev, int duty, int vr, int bpwf) | |||
| 	struct locomo *lchip = locomo_chip_driver(dev); | ||||
| 
 | ||||
| 	if (vr) | ||||
| 		locomo_gpio_write(dev, LOCOMO_GPIO_FL_VR, 1); | ||||
| 		locomo_gpio_write(dev->dev.parent, LOCOMO_GPIO_FL_VR, 1); | ||||
| 	else | ||||
| 		locomo_gpio_write(dev, LOCOMO_GPIO_FL_VR, 0); | ||||
| 		locomo_gpio_write(dev->dev.parent, LOCOMO_GPIO_FL_VR, 0); | ||||
| 
 | ||||
| 	spin_lock_irqsave(&lchip->lock, flags); | ||||
| 	locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS); | ||||
|  |  | |||
|  | @ -40,6 +40,7 @@ | |||
| #define SHARPSL_CHARGE_FINISH_TIME             (msecs_to_jiffies(10*60*1000)) /* 10 min */ | ||||
| #define SHARPSL_BATCHK_TIME                    (msecs_to_jiffies(15*1000))    /* 15 sec */ | ||||
| #define SHARPSL_BATCHK_TIME_SUSPEND            (60*10)                        /* 10 min */ | ||||
| 
 | ||||
| #define SHARPSL_WAIT_CO_TIME                   15  /* 15 sec */ | ||||
| #define SHARPSL_WAIT_DISCHARGE_ON              100 /* 100 msec */ | ||||
| #define SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP   10  /* 10 msec */ | ||||
|  | @ -575,6 +576,9 @@ static int corgi_pxa_pm_enter(suspend_state_t state) | |||
| 	while (corgi_enter_suspend(alarm_time,alarm_status,state)) | ||||
| 		{} | ||||
| 
 | ||||
| 	if (sharpsl_pm.machinfo->earlyresume) | ||||
| 		sharpsl_pm.machinfo->earlyresume(); | ||||
| 
 | ||||
| 	dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n"); | ||||
| 
 | ||||
| 	return 0; | ||||
|  |  | |||
|  | @ -126,6 +126,7 @@ CONFIG_CRUNCH=y | |||
| # EP93xx Platforms | ||||
| # | ||||
| CONFIG_MACH_EDB9302=y | ||||
| CONFIG_MACH_EDB9312=y | ||||
| CONFIG_MACH_EDB9315=y | ||||
| CONFIG_MACH_EDB9315A=y | ||||
| CONFIG_MACH_GESBC9312=y | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -1,50 +1,63 @@ | |||
| # | ||||
| # Automatically generated make config: don't edit | ||||
| # Linux kernel version: 2.6.12-rc1-bk2 | ||||
| # Sun Mar 27 17:33:39 2005 | ||||
| # Linux kernel version: 2.6.18-rc7 | ||||
| # Tue Sep 19 00:30:42 2006 | ||||
| # | ||||
| CONFIG_ARM=y | ||||
| CONFIG_MMU=y | ||||
| CONFIG_UID16=y | ||||
| CONFIG_GENERIC_HARDIRQS=y | ||||
| CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||||
| CONFIG_HARDIRQS_SW_RESEND=y | ||||
| CONFIG_GENERIC_IRQ_PROBE=y | ||||
| CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||||
| CONFIG_GENERIC_HWEIGHT=y | ||||
| CONFIG_GENERIC_CALIBRATE_DELAY=y | ||||
| CONFIG_GENERIC_IOMAP=y | ||||
| CONFIG_VECTORS_BASE=0xffff0000 | ||||
| CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||||
| 
 | ||||
| # | ||||
| # Code maturity level options | ||||
| # | ||||
| CONFIG_EXPERIMENTAL=y | ||||
| CONFIG_CLEAN_COMPILE=y | ||||
| CONFIG_BROKEN_ON_SMP=y | ||||
| CONFIG_INIT_ENV_ARG_LIMIT=32 | ||||
| 
 | ||||
| # | ||||
| # General setup | ||||
| # | ||||
| CONFIG_LOCALVERSION="" | ||||
| CONFIG_LOCALVERSION_AUTO=y | ||||
| CONFIG_SWAP=y | ||||
| CONFIG_SYSVIPC=y | ||||
| # CONFIG_POSIX_MQUEUE is not set | ||||
| CONFIG_BSD_PROCESS_ACCT=y | ||||
| # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||||
| # CONFIG_TASKSTATS is not set | ||||
| CONFIG_SYSCTL=y | ||||
| # CONFIG_AUDIT is not set | ||||
| # CONFIG_HOTPLUG is not set | ||||
| CONFIG_KOBJECT_UEVENT=y | ||||
| # CONFIG_IKCONFIG is not set | ||||
| # CONFIG_RELAY is not set | ||||
| CONFIG_INITRAMFS_SOURCE="" | ||||
| CONFIG_UID16=y | ||||
| CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||||
| # CONFIG_EMBEDDED is not set | ||||
| CONFIG_KALLSYMS=y | ||||
| CONFIG_KALLSYMS_ALL=y | ||||
| # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||||
| CONFIG_HOTPLUG=y | ||||
| CONFIG_PRINTK=y | ||||
| CONFIG_BUG=y | ||||
| CONFIG_ELF_CORE=y | ||||
| CONFIG_BASE_FULL=y | ||||
| CONFIG_RT_MUTEXES=y | ||||
| CONFIG_FUTEX=y | ||||
| CONFIG_EPOLL=y | ||||
| CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||||
| CONFIG_SHMEM=y | ||||
| CONFIG_CC_ALIGN_FUNCTIONS=0 | ||||
| CONFIG_CC_ALIGN_LABELS=0 | ||||
| CONFIG_CC_ALIGN_LOOPS=0 | ||||
| CONFIG_CC_ALIGN_JUMPS=0 | ||||
| CONFIG_SLAB=y | ||||
| CONFIG_VM_EVENT_COUNTERS=y | ||||
| # CONFIG_TINY_SHMEM is not set | ||||
| CONFIG_BASE_SMALL=0 | ||||
| # CONFIG_SLOB is not set | ||||
| 
 | ||||
| # | ||||
| # Loadable module support | ||||
|  | @ -52,24 +65,52 @@ CONFIG_BASE_SMALL=0 | |||
| CONFIG_MODULES=y | ||||
| CONFIG_MODULE_UNLOAD=y | ||||
| # CONFIG_MODULE_FORCE_UNLOAD is not set | ||||
| CONFIG_OBSOLETE_MODPARM=y | ||||
| # CONFIG_MODVERSIONS is not set | ||||
| # CONFIG_MODULE_SRCVERSION_ALL is not set | ||||
| CONFIG_KMOD=y | ||||
| 
 | ||||
| # | ||||
| # Block layer | ||||
| # | ||||
| # CONFIG_BLK_DEV_IO_TRACE is not set | ||||
| 
 | ||||
| # | ||||
| # IO Schedulers | ||||
| # | ||||
| CONFIG_IOSCHED_NOOP=y | ||||
| CONFIG_IOSCHED_AS=y | ||||
| CONFIG_IOSCHED_DEADLINE=y | ||||
| CONFIG_IOSCHED_CFQ=y | ||||
| # CONFIG_DEFAULT_AS is not set | ||||
| # CONFIG_DEFAULT_DEADLINE is not set | ||||
| CONFIG_DEFAULT_CFQ=y | ||||
| # CONFIG_DEFAULT_NOOP is not set | ||||
| CONFIG_DEFAULT_IOSCHED="cfq" | ||||
| 
 | ||||
| # | ||||
| # System Type | ||||
| # | ||||
| # CONFIG_ARCH_AAEC2000 is not set | ||||
| # CONFIG_ARCH_INTEGRATOR is not set | ||||
| # CONFIG_ARCH_REALVIEW is not set | ||||
| # CONFIG_ARCH_VERSATILE is not set | ||||
| # CONFIG_ARCH_AT91 is not set | ||||
| # CONFIG_ARCH_CLPS7500 is not set | ||||
| # CONFIG_ARCH_CLPS711X is not set | ||||
| # CONFIG_ARCH_CO285 is not set | ||||
| # CONFIG_ARCH_EBSA110 is not set | ||||
| # CONFIG_ARCH_EP93XX is not set | ||||
| # CONFIG_ARCH_FOOTBRIDGE is not set | ||||
| # CONFIG_ARCH_INTEGRATOR is not set | ||||
| CONFIG_ARCH_IOP3XX=y | ||||
| # CONFIG_ARCH_NETX is not set | ||||
| # CONFIG_ARCH_H720X is not set | ||||
| # CONFIG_ARCH_IMX is not set | ||||
| # CONFIG_ARCH_IOP32X is not set | ||||
| CONFIG_ARCH_IOP33X=y | ||||
| # CONFIG_ARCH_IXP4XX is not set | ||||
| # CONFIG_ARCH_IXP2000 is not set | ||||
| # CONFIG_ARCH_IXP23XX is not set | ||||
| # CONFIG_ARCH_L7200 is not set | ||||
| # CONFIG_ARCH_PNX4008 is not set | ||||
| # CONFIG_ARCH_PXA is not set | ||||
| # CONFIG_ARCH_RPC is not set | ||||
| # CONFIG_ARCH_SA1100 is not set | ||||
|  | @ -77,28 +118,17 @@ CONFIG_ARCH_IOP3XX=y | |||
| # CONFIG_ARCH_SHARK is not set | ||||
| # CONFIG_ARCH_LH7A40X is not set | ||||
| # CONFIG_ARCH_OMAP is not set | ||||
| # CONFIG_ARCH_VERSATILE is not set | ||||
| # CONFIG_ARCH_IMX is not set | ||||
| # CONFIG_ARCH_H720X is not set | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Implementation Options | ||||
| # IOP33x Implementation Options | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Platform Types | ||||
| # IOP33x Platform Types | ||||
| # | ||||
| # CONFIG_ARCH_IQ80321 is not set | ||||
| # CONFIG_ARCH_IQ31244 is not set | ||||
| # CONFIG_ARCH_IQ80331 is not set | ||||
| CONFIG_ARCH_IQ80331=y | ||||
| CONFIG_MACH_IQ80332=y | ||||
| # CONFIG_ARCH_EP80219 is not set | ||||
| CONFIG_ARCH_IOP331=y | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Chipset Features | ||||
| # | ||||
| # CONFIG_IOP331_STEPD is not set | ||||
| CONFIG_PLAT_IOP=y | ||||
| 
 | ||||
| # | ||||
| # Processor Type | ||||
|  | @ -109,7 +139,6 @@ CONFIG_CPU_32v5=y | |||
| CONFIG_CPU_ABRT_EV5T=y | ||||
| CONFIG_CPU_CACHE_VIVT=y | ||||
| CONFIG_CPU_TLB_V4WBI=y | ||||
| CONFIG_CPU_MINICACHE=y | ||||
| 
 | ||||
| # | ||||
| # Processor Features | ||||
|  | @ -121,8 +150,7 @@ CONFIG_XSCALE_PMU=y | |||
| # Bus support | ||||
| # | ||||
| CONFIG_PCI=y | ||||
| # CONFIG_PCI_LEGACY_PROC is not set | ||||
| CONFIG_PCI_NAMES=y | ||||
| # CONFIG_PCI_DEBUG is not set | ||||
| 
 | ||||
| # | ||||
| # PCCARD (PCMCIA/CardBus) support | ||||
|  | @ -133,6 +161,19 @@ CONFIG_PCI_NAMES=y | |||
| # Kernel Features | ||||
| # | ||||
| # CONFIG_PREEMPT is not set | ||||
| # CONFIG_NO_IDLE_HZ is not set | ||||
| CONFIG_HZ=100 | ||||
| # CONFIG_AEABI is not set | ||||
| # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||||
| CONFIG_SELECT_MEMORY_MODEL=y | ||||
| CONFIG_FLATMEM_MANUAL=y | ||||
| # CONFIG_DISCONTIGMEM_MANUAL is not set | ||||
| # CONFIG_SPARSEMEM_MANUAL is not set | ||||
| CONFIG_FLATMEM=y | ||||
| CONFIG_FLAT_NODE_MEM_MAP=y | ||||
| # CONFIG_SPARSEMEM_STATIC is not set | ||||
| CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||||
| # CONFIG_RESOURCES_64BIT is not set | ||||
| CONFIG_ALIGNMENT_TRAP=y | ||||
| 
 | ||||
| # | ||||
|  | @ -140,7 +181,7 @@ CONFIG_ALIGNMENT_TRAP=y | |||
| # | ||||
| CONFIG_ZBOOT_ROM_TEXT=0x0 | ||||
| CONFIG_ZBOOT_ROM_BSS=0x0 | ||||
| CONFIG_CMDLINE="ip=boot root=nfs console=ttyS0,115200" | ||||
| CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp" | ||||
| # CONFIG_XIP_KERNEL is not set | ||||
| 
 | ||||
| # | ||||
|  | @ -166,6 +207,93 @@ CONFIG_BINFMT_AOUT=y | |||
| # Power management options | ||||
| # | ||||
| # CONFIG_PM is not set | ||||
| # CONFIG_APM is not set | ||||
| 
 | ||||
| # | ||||
| # Networking | ||||
| # | ||||
| CONFIG_NET=y | ||||
| 
 | ||||
| # | ||||
| # Networking options | ||||
| # | ||||
| # CONFIG_NETDEBUG is not set | ||||
| CONFIG_PACKET=y | ||||
| CONFIG_PACKET_MMAP=y | ||||
| CONFIG_UNIX=y | ||||
| CONFIG_XFRM=y | ||||
| # CONFIG_XFRM_USER is not set | ||||
| # CONFIG_NET_KEY is not set | ||||
| CONFIG_INET=y | ||||
| CONFIG_IP_MULTICAST=y | ||||
| # CONFIG_IP_ADVANCED_ROUTER is not set | ||||
| CONFIG_IP_FIB_HASH=y | ||||
| CONFIG_IP_PNP=y | ||||
| # CONFIG_IP_PNP_DHCP is not set | ||||
| CONFIG_IP_PNP_BOOTP=y | ||||
| # CONFIG_IP_PNP_RARP is not set | ||||
| # CONFIG_NET_IPIP is not set | ||||
| # CONFIG_NET_IPGRE is not set | ||||
| # CONFIG_IP_MROUTE is not set | ||||
| # CONFIG_ARPD is not set | ||||
| # CONFIG_SYN_COOKIES is not set | ||||
| # CONFIG_INET_AH is not set | ||||
| # CONFIG_INET_ESP is not set | ||||
| # CONFIG_INET_IPCOMP is not set | ||||
| # CONFIG_INET_XFRM_TUNNEL is not set | ||||
| # CONFIG_INET_TUNNEL is not set | ||||
| CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||||
| CONFIG_INET_XFRM_MODE_TUNNEL=y | ||||
| CONFIG_INET_DIAG=y | ||||
| CONFIG_INET_TCP_DIAG=y | ||||
| # CONFIG_TCP_CONG_ADVANCED is not set | ||||
| CONFIG_TCP_CONG_BIC=y | ||||
| # CONFIG_IPV6 is not set | ||||
| # CONFIG_INET6_XFRM_TUNNEL is not set | ||||
| # CONFIG_INET6_TUNNEL is not set | ||||
| # CONFIG_NETWORK_SECMARK is not set | ||||
| # CONFIG_NETFILTER is not set | ||||
| 
 | ||||
| # | ||||
| # DCCP Configuration (EXPERIMENTAL) | ||||
| # | ||||
| # CONFIG_IP_DCCP is not set | ||||
| 
 | ||||
| # | ||||
| # SCTP Configuration (EXPERIMENTAL) | ||||
| # | ||||
| # CONFIG_IP_SCTP is not set | ||||
| 
 | ||||
| # | ||||
| # TIPC Configuration (EXPERIMENTAL) | ||||
| # | ||||
| # CONFIG_TIPC is not set | ||||
| # CONFIG_ATM is not set | ||||
| # CONFIG_BRIDGE is not set | ||||
| # CONFIG_VLAN_8021Q is not set | ||||
| # CONFIG_DECNET is not set | ||||
| # CONFIG_LLC2 is not set | ||||
| # CONFIG_IPX is not set | ||||
| # CONFIG_ATALK is not set | ||||
| # CONFIG_X25 is not set | ||||
| # CONFIG_LAPB is not set | ||||
| # CONFIG_NET_DIVERT is not set | ||||
| # CONFIG_ECONET is not set | ||||
| # CONFIG_WAN_ROUTER is not set | ||||
| 
 | ||||
| # | ||||
| # QoS and/or fair queueing | ||||
| # | ||||
| # CONFIG_NET_SCHED is not set | ||||
| 
 | ||||
| # | ||||
| # Network testing | ||||
| # | ||||
| # CONFIG_NET_PKTGEN is not set | ||||
| # CONFIG_HAMRADIO is not set | ||||
| # CONFIG_IRDA is not set | ||||
| # CONFIG_BT is not set | ||||
| # CONFIG_IEEE80211 is not set | ||||
| 
 | ||||
| # | ||||
| # Device Drivers | ||||
|  | @ -177,6 +305,13 @@ CONFIG_BINFMT_AOUT=y | |||
| CONFIG_STANDALONE=y | ||||
| CONFIG_PREVENT_FIRMWARE_BUILD=y | ||||
| # CONFIG_FW_LOADER is not set | ||||
| # CONFIG_DEBUG_DRIVER is not set | ||||
| # CONFIG_SYS_HYPERVISOR is not set | ||||
| 
 | ||||
| # | ||||
| # Connector - unified userspace <-> kernelspace linker | ||||
| # | ||||
| # CONFIG_CONNECTOR is not set | ||||
| 
 | ||||
| # | ||||
| # Memory Technology Devices (MTD) | ||||
|  | @ -200,6 +335,7 @@ CONFIG_MTD_BLOCK=y | |||
| # CONFIG_FTL is not set | ||||
| # CONFIG_NFTL is not set | ||||
| # CONFIG_INFTL is not set | ||||
| # CONFIG_RFD_FTL is not set | ||||
| 
 | ||||
| # | ||||
| # RAM/ROM/Flash chip drivers | ||||
|  | @ -222,6 +358,7 @@ CONFIG_MTD_CFI_I1=y | |||
| CONFIG_MTD_CFI_I2=y | ||||
| # CONFIG_MTD_CFI_I4 is not set | ||||
| # CONFIG_MTD_CFI_I8 is not set | ||||
| # CONFIG_MTD_OTP is not set | ||||
| CONFIG_MTD_CFI_INTELEXT=y | ||||
| # CONFIG_MTD_CFI_AMDSTD is not set | ||||
| # CONFIG_MTD_CFI_STAA is not set | ||||
|  | @ -229,18 +366,18 @@ CONFIG_MTD_CFI_UTIL=y | |||
| # CONFIG_MTD_RAM is not set | ||||
| # CONFIG_MTD_ROM is not set | ||||
| # CONFIG_MTD_ABSENT is not set | ||||
| # CONFIG_MTD_XIP is not set | ||||
| # CONFIG_MTD_OBSOLETE_CHIPS is not set | ||||
| 
 | ||||
| # | ||||
| # Mapping drivers for chip access | ||||
| # | ||||
| # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||||
| CONFIG_MTD_PHYSMAP=y | ||||
| CONFIG_MTD_PHYSMAP_START=0xc0000000 | ||||
| CONFIG_MTD_PHYSMAP_LEN=0x00800000 | ||||
| CONFIG_MTD_PHYSMAP_START=0x0 | ||||
| CONFIG_MTD_PHYSMAP_LEN=0x0 | ||||
| CONFIG_MTD_PHYSMAP_BANKWIDTH=1 | ||||
| # CONFIG_MTD_ARM_INTEGRATOR is not set | ||||
| # CONFIG_MTD_EDB7312 is not set | ||||
| # CONFIG_MTD_PLATRAM is not set | ||||
| 
 | ||||
| # | ||||
| # Self-contained MTD device drivers | ||||
|  | @ -249,7 +386,6 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1 | |||
| # CONFIG_MTD_SLRAM is not set | ||||
| # CONFIG_MTD_PHRAM is not set | ||||
| # CONFIG_MTD_MTDRAM is not set | ||||
| # CONFIG_MTD_BLKMTD is not set | ||||
| # CONFIG_MTD_BLOCK2MTD is not set | ||||
| 
 | ||||
| # | ||||
|  | @ -264,6 +400,11 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1 | |||
| # | ||||
| # CONFIG_MTD_NAND is not set | ||||
| 
 | ||||
| # | ||||
| # OneNAND Flash Device Drivers | ||||
| # | ||||
| # CONFIG_MTD_ONENAND is not set | ||||
| 
 | ||||
| # | ||||
| # Parallel port support | ||||
| # | ||||
|  | @ -276,7 +417,6 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1 | |||
| # | ||||
| # Block devices | ||||
| # | ||||
| # CONFIG_BLK_DEV_FD is not set | ||||
| # CONFIG_BLK_CPQ_DA is not set | ||||
| # CONFIG_BLK_CPQ_CISS_DA is not set | ||||
| # CONFIG_BLK_DEV_DAC960 is not set | ||||
|  | @ -288,17 +428,9 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1 | |||
| CONFIG_BLK_DEV_RAM=y | ||||
| CONFIG_BLK_DEV_RAM_COUNT=16 | ||||
| CONFIG_BLK_DEV_RAM_SIZE=8192 | ||||
| # CONFIG_BLK_DEV_INITRD is not set | ||||
| CONFIG_INITRAMFS_SOURCE="" | ||||
| CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||||
| CONFIG_BLK_DEV_INITRD=y | ||||
| # CONFIG_CDROM_PKTCDVD is not set | ||||
| 
 | ||||
| # | ||||
| # IO Schedulers | ||||
| # | ||||
| CONFIG_IOSCHED_NOOP=y | ||||
| CONFIG_IOSCHED_AS=y | ||||
| CONFIG_IOSCHED_DEADLINE=y | ||||
| CONFIG_IOSCHED_CFQ=y | ||||
| # CONFIG_ATA_OVER_ETH is not set | ||||
| 
 | ||||
| # | ||||
|  | @ -309,6 +441,7 @@ CONFIG_IOSCHED_CFQ=y | |||
| # | ||||
| # SCSI device support | ||||
| # | ||||
| # CONFIG_RAID_ATTRS is not set | ||||
| CONFIG_SCSI=y | ||||
| CONFIG_SCSI_PROC_FS=y | ||||
| 
 | ||||
|  | @ -320,6 +453,7 @@ CONFIG_BLK_DEV_SD=y | |||
| # CONFIG_CHR_DEV_OSST is not set | ||||
| # CONFIG_BLK_DEV_SR is not set | ||||
| CONFIG_CHR_DEV_SG=y | ||||
| # CONFIG_CHR_DEV_SCH is not set | ||||
| 
 | ||||
| # | ||||
| # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||||
|  | @ -334,10 +468,12 @@ CONFIG_CHR_DEV_SG=y | |||
| # CONFIG_SCSI_SPI_ATTRS is not set | ||||
| # CONFIG_SCSI_FC_ATTRS is not set | ||||
| # CONFIG_SCSI_ISCSI_ATTRS is not set | ||||
| # CONFIG_SCSI_SAS_ATTRS is not set | ||||
| 
 | ||||
| # | ||||
| # SCSI low-level drivers | ||||
| # | ||||
| # CONFIG_ISCSI_TCP is not set | ||||
| # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||||
| # CONFIG_SCSI_3W_9XXX is not set | ||||
| # CONFIG_SCSI_ACARD is not set | ||||
|  | @ -348,25 +484,19 @@ CONFIG_CHR_DEV_SG=y | |||
| # CONFIG_SCSI_DPT_I2O is not set | ||||
| # CONFIG_MEGARAID_NEWGEN is not set | ||||
| # CONFIG_MEGARAID_LEGACY is not set | ||||
| # CONFIG_MEGARAID_SAS is not set | ||||
| # CONFIG_SCSI_SATA is not set | ||||
| # CONFIG_SCSI_BUSLOGIC is not set | ||||
| # CONFIG_SCSI_HPTIOP is not set | ||||
| # CONFIG_SCSI_DMX3191D is not set | ||||
| # CONFIG_SCSI_EATA is not set | ||||
| # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||||
| # CONFIG_SCSI_GDTH is not set | ||||
| # CONFIG_SCSI_IPS is not set | ||||
| # CONFIG_SCSI_INITIO is not set | ||||
| # CONFIG_SCSI_INIA100 is not set | ||||
| # CONFIG_SCSI_SYM53C8XX_2 is not set | ||||
| # CONFIG_SCSI_IPR is not set | ||||
| # CONFIG_SCSI_QLOGIC_FC is not set | ||||
| # CONFIG_SCSI_QLOGIC_1280 is not set | ||||
| CONFIG_SCSI_QLA2XXX=y | ||||
| # CONFIG_SCSI_QLA21XX is not set | ||||
| # CONFIG_SCSI_QLA22XX is not set | ||||
| # CONFIG_SCSI_QLA2300 is not set | ||||
| # CONFIG_SCSI_QLA2322 is not set | ||||
| # CONFIG_SCSI_QLA6312 is not set | ||||
| # CONFIG_SCSI_QLA_FC is not set | ||||
| # CONFIG_SCSI_LPFC is not set | ||||
| # CONFIG_SCSI_DC395x is not set | ||||
| # CONFIG_SCSI_DC390T is not set | ||||
| # CONFIG_SCSI_NSP32 is not set | ||||
|  | @ -381,8 +511,7 @@ CONFIG_MD_LINEAR=y | |||
| CONFIG_MD_RAID0=y | ||||
| CONFIG_MD_RAID1=y | ||||
| # CONFIG_MD_RAID10 is not set | ||||
| CONFIG_MD_RAID5=y | ||||
| # CONFIG_MD_RAID6 is not set | ||||
| # CONFIG_MD_RAID456 is not set | ||||
| # CONFIG_MD_MULTIPATH is not set | ||||
| # CONFIG_MD_FAULTY is not set | ||||
| CONFIG_BLK_DEV_DM=y | ||||
|  | @ -396,6 +525,9 @@ CONFIG_BLK_DEV_DM=y | |||
| # Fusion MPT device support | ||||
| # | ||||
| # CONFIG_FUSION is not set | ||||
| # CONFIG_FUSION_SPI is not set | ||||
| # CONFIG_FUSION_FC is not set | ||||
| # CONFIG_FUSION_SAS is not set | ||||
| 
 | ||||
| # | ||||
| # IEEE 1394 (FireWire) support | ||||
|  | @ -408,71 +540,8 @@ CONFIG_BLK_DEV_DM=y | |||
| # CONFIG_I2O is not set | ||||
| 
 | ||||
| # | ||||
| # Networking support | ||||
| # Network device support | ||||
| # | ||||
| CONFIG_NET=y | ||||
| 
 | ||||
| # | ||||
| # Networking options | ||||
| # | ||||
| CONFIG_PACKET=y | ||||
| CONFIG_PACKET_MMAP=y | ||||
| # CONFIG_NETLINK_DEV is not set | ||||
| CONFIG_UNIX=y | ||||
| # CONFIG_NET_KEY is not set | ||||
| CONFIG_INET=y | ||||
| CONFIG_IP_MULTICAST=y | ||||
| # CONFIG_IP_ADVANCED_ROUTER is not set | ||||
| CONFIG_IP_PNP=y | ||||
| # CONFIG_IP_PNP_DHCP is not set | ||||
| CONFIG_IP_PNP_BOOTP=y | ||||
| # CONFIG_IP_PNP_RARP is not set | ||||
| # CONFIG_NET_IPIP is not set | ||||
| # CONFIG_NET_IPGRE is not set | ||||
| # CONFIG_IP_MROUTE is not set | ||||
| # CONFIG_ARPD is not set | ||||
| # CONFIG_SYN_COOKIES is not set | ||||
| # CONFIG_INET_AH is not set | ||||
| # CONFIG_INET_ESP is not set | ||||
| # CONFIG_INET_IPCOMP is not set | ||||
| # CONFIG_INET_TUNNEL is not set | ||||
| CONFIG_IP_TCPDIAG=y | ||||
| # CONFIG_IP_TCPDIAG_IPV6 is not set | ||||
| # CONFIG_IPV6 is not set | ||||
| # CONFIG_NETFILTER is not set | ||||
| 
 | ||||
| # | ||||
| # SCTP Configuration (EXPERIMENTAL) | ||||
| # | ||||
| # CONFIG_IP_SCTP is not set | ||||
| # CONFIG_ATM is not set | ||||
| # CONFIG_BRIDGE is not set | ||||
| # CONFIG_VLAN_8021Q is not set | ||||
| # CONFIG_DECNET is not set | ||||
| # CONFIG_LLC2 is not set | ||||
| # CONFIG_IPX is not set | ||||
| # CONFIG_ATALK is not set | ||||
| # CONFIG_X25 is not set | ||||
| # CONFIG_LAPB is not set | ||||
| # CONFIG_NET_DIVERT is not set | ||||
| # CONFIG_ECONET is not set | ||||
| # CONFIG_WAN_ROUTER is not set | ||||
| 
 | ||||
| # | ||||
| # QoS and/or fair queueing | ||||
| # | ||||
| # CONFIG_NET_SCHED is not set | ||||
| # CONFIG_NET_CLS_ROUTE is not set | ||||
| 
 | ||||
| # | ||||
| # Network testing | ||||
| # | ||||
| # CONFIG_NET_PKTGEN is not set | ||||
| # CONFIG_NETPOLL is not set | ||||
| # CONFIG_NET_POLL_CONTROLLER is not set | ||||
| # CONFIG_HAMRADIO is not set | ||||
| # CONFIG_IRDA is not set | ||||
| # CONFIG_BT is not set | ||||
| CONFIG_NETDEVICES=y | ||||
| # CONFIG_DUMMY is not set | ||||
| # CONFIG_BONDING is not set | ||||
|  | @ -484,6 +553,10 @@ CONFIG_NETDEVICES=y | |||
| # | ||||
| # CONFIG_ARCNET is not set | ||||
| 
 | ||||
| # | ||||
| # PHY device support | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Ethernet (10 or 100Mbit) | ||||
| # | ||||
|  | @ -501,14 +574,20 @@ CONFIG_E1000_NAPI=y | |||
| # CONFIG_HAMACHI is not set | ||||
| # CONFIG_YELLOWFIN is not set | ||||
| # CONFIG_R8169 is not set | ||||
| # CONFIG_SIS190 is not set | ||||
| # CONFIG_SKGE is not set | ||||
| # CONFIG_SKY2 is not set | ||||
| # CONFIG_SK98LIN is not set | ||||
| # CONFIG_TIGON3 is not set | ||||
| # CONFIG_BNX2 is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (10000 Mbit) | ||||
| # | ||||
| # CONFIG_CHELSIO_T1 is not set | ||||
| # CONFIG_IXGB is not set | ||||
| # CONFIG_S2IO is not set | ||||
| # CONFIG_MYRI10GE is not set | ||||
| 
 | ||||
| # | ||||
| # Token Ring devices | ||||
|  | @ -531,6 +610,8 @@ CONFIG_E1000_NAPI=y | |||
| # CONFIG_NET_FC is not set | ||||
| # CONFIG_SHAPER is not set | ||||
| # CONFIG_NETCONSOLE is not set | ||||
| # CONFIG_NETPOLL is not set | ||||
| # CONFIG_NET_POLL_CONTROLLER is not set | ||||
| 
 | ||||
| # | ||||
| # ISDN subsystem | ||||
|  | @ -568,7 +649,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | |||
| # | ||||
| # CONFIG_SERIO is not set | ||||
| # CONFIG_GAMEPORT is not set | ||||
| CONFIG_SOUND_GAMEPORT=y | ||||
| 
 | ||||
| # | ||||
| # Character devices | ||||
|  | @ -576,6 +656,7 @@ CONFIG_SOUND_GAMEPORT=y | |||
| CONFIG_VT=y | ||||
| CONFIG_VT_CONSOLE=y | ||||
| CONFIG_HW_CONSOLE=y | ||||
| # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||||
| # CONFIG_SERIAL_NONSTANDARD is not set | ||||
| 
 | ||||
| # | ||||
|  | @ -583,7 +664,9 @@ CONFIG_HW_CONSOLE=y | |||
| # | ||||
| CONFIG_SERIAL_8250=y | ||||
| CONFIG_SERIAL_8250_CONSOLE=y | ||||
| CONFIG_SERIAL_8250_PCI=y | ||||
| CONFIG_SERIAL_8250_NR_UARTS=4 | ||||
| CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||||
| # CONFIG_SERIAL_8250_EXTENDED is not set | ||||
| 
 | ||||
| # | ||||
|  | @ -591,6 +674,7 @@ CONFIG_SERIAL_8250_NR_UARTS=4 | |||
| # | ||||
| CONFIG_SERIAL_CORE=y | ||||
| CONFIG_SERIAL_CORE_CONSOLE=y | ||||
| # CONFIG_SERIAL_JSM is not set | ||||
| CONFIG_UNIX98_PTYS=y | ||||
| CONFIG_LEGACY_PTYS=y | ||||
| CONFIG_LEGACY_PTY_COUNT=256 | ||||
|  | @ -604,8 +688,8 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
| # Watchdog Cards | ||||
| # | ||||
| # CONFIG_WATCHDOG is not set | ||||
| CONFIG_HW_RANDOM=y | ||||
| # CONFIG_NVRAM is not set | ||||
| # CONFIG_RTC is not set | ||||
| # CONFIG_DTLK is not set | ||||
| # CONFIG_R3964 is not set | ||||
| # CONFIG_APPLICOM is not set | ||||
|  | @ -620,6 +704,7 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
| # TPM devices | ||||
| # | ||||
| # CONFIG_TCG_TPM is not set | ||||
| # CONFIG_TELCLOCK is not set | ||||
| 
 | ||||
| # | ||||
| # I2C support | ||||
|  | @ -644,14 +729,13 @@ CONFIG_I2C_CHARDEV=y | |||
| # CONFIG_I2C_AMD8111 is not set | ||||
| # CONFIG_I2C_I801 is not set | ||||
| # CONFIG_I2C_I810 is not set | ||||
| CONFIG_I2C_IOP3XX=y | ||||
| # CONFIG_I2C_ISA is not set | ||||
| # CONFIG_I2C_NFORCE2 is not set | ||||
| # CONFIG_I2C_PARPORT_LIGHT is not set | ||||
| # CONFIG_I2C_PIIX4 is not set | ||||
| CONFIG_I2C_IOP3XX=y | ||||
| # CONFIG_I2C_NFORCE2 is not set | ||||
| # CONFIG_I2C_OCORES is not set | ||||
| # CONFIG_I2C_PARPORT_LIGHT is not set | ||||
| # CONFIG_I2C_PROSAVAGE is not set | ||||
| # CONFIG_I2C_SAVAGE4 is not set | ||||
| # CONFIG_SCx200_ACB is not set | ||||
| # CONFIG_I2C_SIS5595 is not set | ||||
| # CONFIG_I2C_SIS630 is not set | ||||
| # CONFIG_I2C_SIS96X is not set | ||||
|  | @ -662,15 +746,45 @@ CONFIG_I2C_IOP3XX=y | |||
| # CONFIG_I2C_PCA_ISA is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware Sensors Chip support | ||||
| # Miscellaneous I2C Chip support | ||||
| # | ||||
| # CONFIG_I2C_SENSOR is not set | ||||
| # CONFIG_SENSORS_DS1337 is not set | ||||
| # CONFIG_SENSORS_DS1374 is not set | ||||
| # CONFIG_SENSORS_EEPROM is not set | ||||
| # CONFIG_SENSORS_PCF8574 is not set | ||||
| # CONFIG_SENSORS_PCA9539 is not set | ||||
| # CONFIG_SENSORS_PCF8591 is not set | ||||
| # CONFIG_SENSORS_MAX6875 is not set | ||||
| # CONFIG_I2C_DEBUG_CORE is not set | ||||
| # CONFIG_I2C_DEBUG_ALGO is not set | ||||
| # CONFIG_I2C_DEBUG_BUS is not set | ||||
| # CONFIG_I2C_DEBUG_CHIP is not set | ||||
| 
 | ||||
| # | ||||
| # SPI support | ||||
| # | ||||
| # CONFIG_SPI is not set | ||||
| # CONFIG_SPI_MASTER is not set | ||||
| 
 | ||||
| # | ||||
| # Dallas's 1-wire bus | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Hardware Monitoring support | ||||
| # | ||||
| CONFIG_HWMON=y | ||||
| # CONFIG_HWMON_VID is not set | ||||
| # CONFIG_SENSORS_ABITUGURU is not set | ||||
| # CONFIG_SENSORS_ADM1021 is not set | ||||
| # CONFIG_SENSORS_ADM1025 is not set | ||||
| # CONFIG_SENSORS_ADM1026 is not set | ||||
| # CONFIG_SENSORS_ADM1031 is not set | ||||
| # CONFIG_SENSORS_ADM9240 is not set | ||||
| # CONFIG_SENSORS_ASB100 is not set | ||||
| # CONFIG_SENSORS_ATXP1 is not set | ||||
| # CONFIG_SENSORS_DS1621 is not set | ||||
| # CONFIG_SENSORS_F71805F is not set | ||||
| # CONFIG_SENSORS_FSCHER is not set | ||||
| # CONFIG_SENSORS_FSCPOS is not set | ||||
| # CONFIG_SENSORS_GL518SM is not set | ||||
|  | @ -685,36 +799,45 @@ CONFIG_I2C_IOP3XX=y | |||
| # CONFIG_SENSORS_LM85 is not set | ||||
| # CONFIG_SENSORS_LM87 is not set | ||||
| # CONFIG_SENSORS_LM90 is not set | ||||
| # CONFIG_SENSORS_LM92 is not set | ||||
| # CONFIG_SENSORS_MAX1619 is not set | ||||
| # CONFIG_SENSORS_PC87360 is not set | ||||
| # CONFIG_SENSORS_SMSC47B397 is not set | ||||
| # CONFIG_SENSORS_SIS5595 is not set | ||||
| # CONFIG_SENSORS_SMSC47M1 is not set | ||||
| # CONFIG_SENSORS_SMSC47M192 is not set | ||||
| # CONFIG_SENSORS_SMSC47B397 is not set | ||||
| # CONFIG_SENSORS_VIA686A is not set | ||||
| # CONFIG_SENSORS_VT8231 is not set | ||||
| # CONFIG_SENSORS_W83781D is not set | ||||
| # CONFIG_SENSORS_W83791D is not set | ||||
| # CONFIG_SENSORS_W83792D is not set | ||||
| # CONFIG_SENSORS_W83L785TS is not set | ||||
| # CONFIG_SENSORS_W83627HF is not set | ||||
| 
 | ||||
| # | ||||
| # Other I2C Chip support | ||||
| # | ||||
| # CONFIG_SENSORS_EEPROM is not set | ||||
| # CONFIG_SENSORS_PCF8574 is not set | ||||
| # CONFIG_SENSORS_PCF8591 is not set | ||||
| # CONFIG_SENSORS_RTC8564 is not set | ||||
| # CONFIG_I2C_DEBUG_CORE is not set | ||||
| # CONFIG_I2C_DEBUG_ALGO is not set | ||||
| # CONFIG_I2C_DEBUG_BUS is not set | ||||
| # CONFIG_I2C_DEBUG_CHIP is not set | ||||
| # CONFIG_SENSORS_W83627EHF is not set | ||||
| # CONFIG_HWMON_DEBUG_CHIP is not set | ||||
| 
 | ||||
| # | ||||
| # Misc devices | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # LED devices | ||||
| # | ||||
| # CONFIG_NEW_LEDS is not set | ||||
| 
 | ||||
| # | ||||
| # LED drivers | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # LED Triggers | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Multimedia devices | ||||
| # | ||||
| # CONFIG_VIDEO_DEV is not set | ||||
| CONFIG_VIDEO_V4L2=y | ||||
| 
 | ||||
| # | ||||
| # Digital Video Broadcasting Devices | ||||
|  | @ -724,6 +847,7 @@ CONFIG_I2C_IOP3XX=y | |||
| # | ||||
| # Graphics support | ||||
| # | ||||
| CONFIG_FIRMWARE_EDID=y | ||||
| # CONFIG_FB is not set | ||||
| 
 | ||||
| # | ||||
|  | @ -731,6 +855,7 @@ CONFIG_I2C_IOP3XX=y | |||
| # | ||||
| # CONFIG_VGA_CONSOLE is not set | ||||
| CONFIG_DUMMY_CONSOLE=y | ||||
| # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||||
| 
 | ||||
| # | ||||
| # Sound | ||||
|  | @ -742,8 +867,13 @@ CONFIG_DUMMY_CONSOLE=y | |||
| # | ||||
| CONFIG_USB_ARCH_HAS_HCD=y | ||||
| CONFIG_USB_ARCH_HAS_OHCI=y | ||||
| CONFIG_USB_ARCH_HAS_EHCI=y | ||||
| # CONFIG_USB is not set | ||||
| 
 | ||||
| # | ||||
| # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # USB Gadget Support | ||||
| # | ||||
|  | @ -754,11 +884,18 @@ CONFIG_USB_ARCH_HAS_OHCI=y | |||
| # | ||||
| # CONFIG_MMC is not set | ||||
| 
 | ||||
| # | ||||
| # Real Time Clock | ||||
| # | ||||
| CONFIG_RTC_LIB=y | ||||
| # CONFIG_RTC_CLASS is not set | ||||
| 
 | ||||
| # | ||||
| # File systems | ||||
| # | ||||
| CONFIG_EXT2_FS=y | ||||
| # CONFIG_EXT2_FS_XATTR is not set | ||||
| # CONFIG_EXT2_FS_XIP is not set | ||||
| CONFIG_EXT3_FS=y | ||||
| CONFIG_EXT3_FS_XATTR=y | ||||
| # CONFIG_EXT3_FS_POSIX_ACL is not set | ||||
|  | @ -768,22 +905,22 @@ CONFIG_JBD=y | |||
| CONFIG_FS_MBCACHE=y | ||||
| # CONFIG_REISERFS_FS is not set | ||||
| # CONFIG_JFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # XFS support | ||||
| # | ||||
| # CONFIG_FS_POSIX_ACL is not set | ||||
| CONFIG_XFS_FS=y | ||||
| CONFIG_XFS_EXPORT=y | ||||
| # CONFIG_XFS_RT is not set | ||||
| # CONFIG_XFS_QUOTA is not set | ||||
| CONFIG_XFS_SECURITY=y | ||||
| CONFIG_XFS_POSIX_ACL=y | ||||
| # CONFIG_XFS_RT is not set | ||||
| # CONFIG_OCFS2_FS is not set | ||||
| # CONFIG_MINIX_FS is not set | ||||
| # CONFIG_ROMFS_FS is not set | ||||
| CONFIG_INOTIFY=y | ||||
| CONFIG_INOTIFY_USER=y | ||||
| # CONFIG_QUOTA is not set | ||||
| CONFIG_DNOTIFY=y | ||||
| # CONFIG_AUTOFS_FS is not set | ||||
| # CONFIG_AUTOFS4_FS is not set | ||||
| # CONFIG_FUSE_FS is not set | ||||
| 
 | ||||
| # | ||||
| # CD-ROM/DVD Filesystems | ||||
|  | @ -803,12 +940,10 @@ CONFIG_DNOTIFY=y | |||
| # | ||||
| CONFIG_PROC_FS=y | ||||
| CONFIG_SYSFS=y | ||||
| # CONFIG_DEVFS_FS is not set | ||||
| # CONFIG_DEVPTS_FS_XATTR is not set | ||||
| CONFIG_TMPFS=y | ||||
| # CONFIG_TMPFS_XATTR is not set | ||||
| # CONFIG_HUGETLB_PAGE is not set | ||||
| CONFIG_RAMFS=y | ||||
| # CONFIG_CONFIGFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Miscellaneous filesystems | ||||
|  | @ -834,16 +969,19 @@ CONFIG_RAMFS=y | |||
| # | ||||
| CONFIG_NFS_FS=y | ||||
| CONFIG_NFS_V3=y | ||||
| # CONFIG_NFS_V3_ACL is not set | ||||
| # CONFIG_NFS_V4 is not set | ||||
| # CONFIG_NFS_DIRECTIO is not set | ||||
| CONFIG_NFSD=y | ||||
| CONFIG_NFSD_V3=y | ||||
| # CONFIG_NFSD_V3_ACL is not set | ||||
| # CONFIG_NFSD_V4 is not set | ||||
| # CONFIG_NFSD_TCP is not set | ||||
| CONFIG_ROOT_NFS=y | ||||
| CONFIG_LOCKD=y | ||||
| CONFIG_LOCKD_V4=y | ||||
| CONFIG_EXPORTFS=y | ||||
| CONFIG_NFS_COMMON=y | ||||
| CONFIG_SUNRPC=y | ||||
| # CONFIG_RPCSEC_GSS_KRB5 is not set | ||||
| # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||||
|  | @ -852,6 +990,7 @@ CONFIG_SUNRPC=y | |||
| # CONFIG_NCP_FS is not set | ||||
| # CONFIG_CODA_FS is not set | ||||
| # CONFIG_AFS_FS is not set | ||||
| # CONFIG_9P_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Partition Types | ||||
|  | @ -871,6 +1010,7 @@ CONFIG_MSDOS_PARTITION=y | |||
| # CONFIG_SGI_PARTITION is not set | ||||
| # CONFIG_ULTRIX_PARTITION is not set | ||||
| # CONFIG_SUN_PARTITION is not set | ||||
| # CONFIG_KARMA_PARTITION is not set | ||||
| # CONFIG_EFI_PARTITION is not set | ||||
| 
 | ||||
| # | ||||
|  | @ -887,11 +1027,34 @@ CONFIG_MSDOS_PARTITION=y | |||
| # Kernel hacking | ||||
| # | ||||
| # CONFIG_PRINTK_TIME is not set | ||||
| # CONFIG_DEBUG_KERNEL is not set | ||||
| CONFIG_MAGIC_SYSRQ=y | ||||
| # CONFIG_UNUSED_SYMBOLS is not set | ||||
| CONFIG_DEBUG_KERNEL=y | ||||
| CONFIG_LOG_BUF_SHIFT=14 | ||||
| CONFIG_DETECT_SOFTLOCKUP=y | ||||
| # CONFIG_SCHEDSTATS is not set | ||||
| # CONFIG_DEBUG_SLAB is not set | ||||
| # CONFIG_DEBUG_RT_MUTEXES is not set | ||||
| # CONFIG_RT_MUTEX_TESTER is not set | ||||
| # CONFIG_DEBUG_SPINLOCK is not set | ||||
| # CONFIG_DEBUG_MUTEXES is not set | ||||
| # CONFIG_DEBUG_RWSEMS is not set | ||||
| # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||||
| # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||||
| # CONFIG_DEBUG_KOBJECT is not set | ||||
| CONFIG_DEBUG_BUGVERBOSE=y | ||||
| # CONFIG_DEBUG_INFO is not set | ||||
| # CONFIG_DEBUG_FS is not set | ||||
| # CONFIG_DEBUG_VM is not set | ||||
| CONFIG_FRAME_POINTER=y | ||||
| # CONFIG_UNWIND_INFO is not set | ||||
| # CONFIG_FORCED_INLINING is not set | ||||
| # CONFIG_RCU_TORTURE_TEST is not set | ||||
| CONFIG_DEBUG_USER=y | ||||
| # CONFIG_DEBUG_WAITQ is not set | ||||
| # CONFIG_DEBUG_ERRORS is not set | ||||
| CONFIG_DEBUG_LL=y | ||||
| # CONFIG_DEBUG_ICEDCC is not set | ||||
| 
 | ||||
| # | ||||
| # Security options | ||||
|  | @ -912,5 +1075,7 @@ CONFIG_DEBUG_USER=y | |||
| # Library routines | ||||
| # | ||||
| # CONFIG_CRC_CCITT is not set | ||||
| # CONFIG_CRC16 is not set | ||||
| # CONFIG_CRC32 is not set | ||||
| # CONFIG_LIBCRC32C is not set | ||||
| CONFIG_PLIST=y | ||||
|  | @ -1,922 +0,0 @@ | |||
| # | ||||
| # Automatically generated make config: don't edit | ||||
| # Linux kernel version: 2.6.12-rc1-bk2 | ||||
| # Sun Mar 27 02:10:38 2005 | ||||
| # | ||||
| CONFIG_ARM=y | ||||
| CONFIG_MMU=y | ||||
| CONFIG_UID16=y | ||||
| CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||||
| CONFIG_GENERIC_CALIBRATE_DELAY=y | ||||
| CONFIG_GENERIC_IOMAP=y | ||||
| 
 | ||||
| # | ||||
| # Code maturity level options | ||||
| # | ||||
| CONFIG_EXPERIMENTAL=y | ||||
| CONFIG_CLEAN_COMPILE=y | ||||
| CONFIG_BROKEN_ON_SMP=y | ||||
| 
 | ||||
| # | ||||
| # General setup | ||||
| # | ||||
| CONFIG_LOCALVERSION="" | ||||
| CONFIG_SWAP=y | ||||
| CONFIG_SYSVIPC=y | ||||
| # CONFIG_POSIX_MQUEUE is not set | ||||
| CONFIG_BSD_PROCESS_ACCT=y | ||||
| # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||||
| CONFIG_SYSCTL=y | ||||
| # CONFIG_AUDIT is not set | ||||
| # CONFIG_HOTPLUG is not set | ||||
| CONFIG_KOBJECT_UEVENT=y | ||||
| CONFIG_IKCONFIG=y | ||||
| CONFIG_IKCONFIG_PROC=y | ||||
| # CONFIG_EMBEDDED is not set | ||||
| CONFIG_KALLSYMS=y | ||||
| # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||||
| CONFIG_BASE_FULL=y | ||||
| CONFIG_FUTEX=y | ||||
| CONFIG_EPOLL=y | ||||
| CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||||
| CONFIG_SHMEM=y | ||||
| CONFIG_CC_ALIGN_FUNCTIONS=0 | ||||
| CONFIG_CC_ALIGN_LABELS=0 | ||||
| CONFIG_CC_ALIGN_LOOPS=0 | ||||
| CONFIG_CC_ALIGN_JUMPS=0 | ||||
| # CONFIG_TINY_SHMEM is not set | ||||
| CONFIG_BASE_SMALL=0 | ||||
| 
 | ||||
| # | ||||
| # Loadable module support | ||||
| # | ||||
| CONFIG_MODULES=y | ||||
| CONFIG_MODULE_UNLOAD=y | ||||
| # CONFIG_MODULE_FORCE_UNLOAD is not set | ||||
| CONFIG_OBSOLETE_MODPARM=y | ||||
| # CONFIG_MODVERSIONS is not set | ||||
| # CONFIG_MODULE_SRCVERSION_ALL is not set | ||||
| CONFIG_KMOD=y | ||||
| 
 | ||||
| # | ||||
| # System Type | ||||
| # | ||||
| # CONFIG_ARCH_CLPS7500 is not set | ||||
| # CONFIG_ARCH_CLPS711X is not set | ||||
| # CONFIG_ARCH_CO285 is not set | ||||
| # CONFIG_ARCH_EBSA110 is not set | ||||
| # CONFIG_ARCH_FOOTBRIDGE is not set | ||||
| # CONFIG_ARCH_INTEGRATOR is not set | ||||
| CONFIG_ARCH_IOP3XX=y | ||||
| # CONFIG_ARCH_IXP4XX is not set | ||||
| # CONFIG_ARCH_IXP2000 is not set | ||||
| # CONFIG_ARCH_L7200 is not set | ||||
| # CONFIG_ARCH_PXA is not set | ||||
| # CONFIG_ARCH_RPC is not set | ||||
| # CONFIG_ARCH_SA1100 is not set | ||||
| # CONFIG_ARCH_S3C2410 is not set | ||||
| # CONFIG_ARCH_SHARK is not set | ||||
| # CONFIG_ARCH_LH7A40X is not set | ||||
| # CONFIG_ARCH_OMAP is not set | ||||
| # CONFIG_ARCH_VERSATILE is not set | ||||
| # CONFIG_ARCH_IMX is not set | ||||
| # CONFIG_ARCH_H720X is not set | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Implementation Options | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Platform Types | ||||
| # | ||||
| # CONFIG_ARCH_IQ80321 is not set | ||||
| CONFIG_ARCH_IQ31244=y | ||||
| # CONFIG_ARCH_IQ80331 is not set | ||||
| # CONFIG_MACH_IQ80332 is not set | ||||
| # CONFIG_ARCH_EP80219 is not set | ||||
| CONFIG_ARCH_IOP321=y | ||||
| # CONFIG_ARCH_IOP331 is not set | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Chipset Features | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Processor Type | ||||
| # | ||||
| CONFIG_CPU_32=y | ||||
| CONFIG_CPU_XSCALE=y | ||||
| CONFIG_CPU_32v5=y | ||||
| CONFIG_CPU_ABRT_EV5T=y | ||||
| CONFIG_CPU_CACHE_VIVT=y | ||||
| CONFIG_CPU_TLB_V4WBI=y | ||||
| CONFIG_CPU_MINICACHE=y | ||||
| 
 | ||||
| # | ||||
| # Processor Features | ||||
| # | ||||
| # CONFIG_ARM_THUMB is not set | ||||
| CONFIG_XSCALE_PMU=y | ||||
| 
 | ||||
| # | ||||
| # Bus support | ||||
| # | ||||
| CONFIG_PCI=y | ||||
| # CONFIG_PCI_LEGACY_PROC is not set | ||||
| CONFIG_PCI_NAMES=y | ||||
| 
 | ||||
| # | ||||
| # PCCARD (PCMCIA/CardBus) support | ||||
| # | ||||
| # CONFIG_PCCARD is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel Features | ||||
| # | ||||
| # CONFIG_PREEMPT is not set | ||||
| CONFIG_ALIGNMENT_TRAP=y | ||||
| 
 | ||||
| # | ||||
| # Boot options | ||||
| # | ||||
| CONFIG_ZBOOT_ROM_TEXT=0x0 | ||||
| CONFIG_ZBOOT_ROM_BSS=0x0 | ||||
| CONFIG_CMDLINE="ip=boot root=nfs console=ttyS0,115200" | ||||
| # CONFIG_XIP_KERNEL is not set | ||||
| 
 | ||||
| # | ||||
| # Floating point emulation | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # At least one emulation must be selected | ||||
| # | ||||
| CONFIG_FPE_NWFPE=y | ||||
| # CONFIG_FPE_NWFPE_XP is not set | ||||
| # CONFIG_FPE_FASTFPE is not set | ||||
| 
 | ||||
| # | ||||
| # Userspace binary formats | ||||
| # | ||||
| CONFIG_BINFMT_ELF=y | ||||
| CONFIG_BINFMT_AOUT=y | ||||
| # CONFIG_BINFMT_MISC is not set | ||||
| # CONFIG_ARTHUR is not set | ||||
| 
 | ||||
| # | ||||
| # Power management options | ||||
| # | ||||
| # CONFIG_PM is not set | ||||
| 
 | ||||
| # | ||||
| # Device Drivers | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Generic Driver Options | ||||
| # | ||||
| CONFIG_STANDALONE=y | ||||
| CONFIG_PREVENT_FIRMWARE_BUILD=y | ||||
| # CONFIG_FW_LOADER is not set | ||||
| 
 | ||||
| # | ||||
| # Memory Technology Devices (MTD) | ||||
| # | ||||
| CONFIG_MTD=y | ||||
| # CONFIG_MTD_DEBUG is not set | ||||
| # CONFIG_MTD_CONCAT is not set | ||||
| CONFIG_MTD_PARTITIONS=y | ||||
| CONFIG_MTD_REDBOOT_PARTS=y | ||||
| CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 | ||||
| CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y | ||||
| CONFIG_MTD_REDBOOT_PARTS_READONLY=y | ||||
| # CONFIG_MTD_CMDLINE_PARTS is not set | ||||
| # CONFIG_MTD_AFS_PARTS is not set | ||||
| 
 | ||||
| # | ||||
| # User Modules And Translation Layers | ||||
| # | ||||
| CONFIG_MTD_CHAR=y | ||||
| CONFIG_MTD_BLOCK=y | ||||
| # CONFIG_FTL is not set | ||||
| # CONFIG_NFTL is not set | ||||
| # CONFIG_INFTL is not set | ||||
| 
 | ||||
| # | ||||
| # RAM/ROM/Flash chip drivers | ||||
| # | ||||
| CONFIG_MTD_CFI=y | ||||
| # CONFIG_MTD_JEDECPROBE is not set | ||||
| CONFIG_MTD_GEN_PROBE=y | ||||
| # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||||
| CONFIG_MTD_CFI_I1=y | ||||
| CONFIG_MTD_CFI_I2=y | ||||
| # CONFIG_MTD_CFI_I4 is not set | ||||
| # CONFIG_MTD_CFI_I8 is not set | ||||
| CONFIG_MTD_CFI_INTELEXT=y | ||||
| # CONFIG_MTD_CFI_AMDSTD is not set | ||||
| # CONFIG_MTD_CFI_STAA is not set | ||||
| CONFIG_MTD_CFI_UTIL=y | ||||
| # CONFIG_MTD_RAM is not set | ||||
| # CONFIG_MTD_ROM is not set | ||||
| # CONFIG_MTD_ABSENT is not set | ||||
| # CONFIG_MTD_XIP is not set | ||||
| 
 | ||||
| # | ||||
| # Mapping drivers for chip access | ||||
| # | ||||
| # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||||
| CONFIG_MTD_PHYSMAP=y | ||||
| CONFIG_MTD_PHYSMAP_START=0xf0000000 | ||||
| CONFIG_MTD_PHYSMAP_LEN=0x00800000 | ||||
| CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | ||||
| # CONFIG_MTD_ARM_INTEGRATOR is not set | ||||
| # CONFIG_MTD_EDB7312 is not set | ||||
| 
 | ||||
| # | ||||
| # Self-contained MTD device drivers | ||||
| # | ||||
| # CONFIG_MTD_PMC551 is not set | ||||
| # CONFIG_MTD_SLRAM is not set | ||||
| # CONFIG_MTD_PHRAM is not set | ||||
| # CONFIG_MTD_MTDRAM is not set | ||||
| # CONFIG_MTD_BLKMTD is not set | ||||
| # CONFIG_MTD_BLOCK2MTD is not set | ||||
| 
 | ||||
| # | ||||
| # Disk-On-Chip Device Drivers | ||||
| # | ||||
| # CONFIG_MTD_DOC2000 is not set | ||||
| # CONFIG_MTD_DOC2001 is not set | ||||
| # CONFIG_MTD_DOC2001PLUS is not set | ||||
| 
 | ||||
| # | ||||
| # NAND Flash Device Drivers | ||||
| # | ||||
| # CONFIG_MTD_NAND is not set | ||||
| 
 | ||||
| # | ||||
| # Parallel port support | ||||
| # | ||||
| # CONFIG_PARPORT is not set | ||||
| 
 | ||||
| # | ||||
| # Plug and Play support | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Block devices | ||||
| # | ||||
| # CONFIG_BLK_DEV_FD is not set | ||||
| # CONFIG_BLK_CPQ_DA is not set | ||||
| # CONFIG_BLK_CPQ_CISS_DA is not set | ||||
| # CONFIG_BLK_DEV_DAC960 is not set | ||||
| # CONFIG_BLK_DEV_UMEM is not set | ||||
| # CONFIG_BLK_DEV_COW_COMMON is not set | ||||
| # CONFIG_BLK_DEV_LOOP is not set | ||||
| # CONFIG_BLK_DEV_NBD is not set | ||||
| # CONFIG_BLK_DEV_SX8 is not set | ||||
| CONFIG_BLK_DEV_RAM=y | ||||
| CONFIG_BLK_DEV_RAM_COUNT=16 | ||||
| CONFIG_BLK_DEV_RAM_SIZE=8192 | ||||
| # CONFIG_BLK_DEV_INITRD is not set | ||||
| CONFIG_INITRAMFS_SOURCE="" | ||||
| # CONFIG_CDROM_PKTCDVD is not set | ||||
| 
 | ||||
| # | ||||
| # IO Schedulers | ||||
| # | ||||
| CONFIG_IOSCHED_NOOP=y | ||||
| CONFIG_IOSCHED_AS=y | ||||
| CONFIG_IOSCHED_DEADLINE=y | ||||
| CONFIG_IOSCHED_CFQ=y | ||||
| # CONFIG_ATA_OVER_ETH is not set | ||||
| 
 | ||||
| # | ||||
| # ATA/ATAPI/MFM/RLL support | ||||
| # | ||||
| # CONFIG_IDE is not set | ||||
| 
 | ||||
| # | ||||
| # SCSI device support | ||||
| # | ||||
| CONFIG_SCSI=y | ||||
| CONFIG_SCSI_PROC_FS=y | ||||
| 
 | ||||
| # | ||||
| # SCSI support type (disk, tape, CD-ROM) | ||||
| # | ||||
| CONFIG_BLK_DEV_SD=y | ||||
| # CONFIG_CHR_DEV_ST is not set | ||||
| # CONFIG_CHR_DEV_OSST is not set | ||||
| # CONFIG_BLK_DEV_SR is not set | ||||
| CONFIG_CHR_DEV_SG=y | ||||
| 
 | ||||
| # | ||||
| # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||||
| # | ||||
| # CONFIG_SCSI_MULTI_LUN is not set | ||||
| # CONFIG_SCSI_CONSTANTS is not set | ||||
| # CONFIG_SCSI_LOGGING is not set | ||||
| 
 | ||||
| # | ||||
| # SCSI Transport Attributes | ||||
| # | ||||
| # CONFIG_SCSI_SPI_ATTRS is not set | ||||
| # CONFIG_SCSI_FC_ATTRS is not set | ||||
| # CONFIG_SCSI_ISCSI_ATTRS is not set | ||||
| 
 | ||||
| # | ||||
| # SCSI low-level drivers | ||||
| # | ||||
| # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||||
| # CONFIG_SCSI_3W_9XXX is not set | ||||
| # CONFIG_SCSI_ACARD is not set | ||||
| # CONFIG_SCSI_AACRAID is not set | ||||
| # CONFIG_SCSI_AIC7XXX is not set | ||||
| # CONFIG_SCSI_AIC7XXX_OLD is not set | ||||
| # CONFIG_SCSI_AIC79XX is not set | ||||
| # CONFIG_SCSI_DPT_I2O is not set | ||||
| # CONFIG_MEGARAID_NEWGEN is not set | ||||
| # CONFIG_MEGARAID_LEGACY is not set | ||||
| # CONFIG_SCSI_SATA is not set | ||||
| # CONFIG_SCSI_BUSLOGIC is not set | ||||
| # CONFIG_SCSI_DMX3191D is not set | ||||
| # CONFIG_SCSI_EATA is not set | ||||
| # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||||
| # CONFIG_SCSI_GDTH is not set | ||||
| # CONFIG_SCSI_IPS is not set | ||||
| # CONFIG_SCSI_INITIO is not set | ||||
| # CONFIG_SCSI_INIA100 is not set | ||||
| # CONFIG_SCSI_SYM53C8XX_2 is not set | ||||
| # CONFIG_SCSI_IPR is not set | ||||
| # CONFIG_SCSI_QLOGIC_FC is not set | ||||
| # CONFIG_SCSI_QLOGIC_1280 is not set | ||||
| CONFIG_SCSI_QLA2XXX=y | ||||
| # CONFIG_SCSI_QLA21XX is not set | ||||
| # CONFIG_SCSI_QLA22XX is not set | ||||
| # CONFIG_SCSI_QLA2300 is not set | ||||
| # CONFIG_SCSI_QLA2322 is not set | ||||
| # CONFIG_SCSI_QLA6312 is not set | ||||
| # CONFIG_SCSI_DC395x is not set | ||||
| # CONFIG_SCSI_DC390T is not set | ||||
| # CONFIG_SCSI_NSP32 is not set | ||||
| # CONFIG_SCSI_DEBUG is not set | ||||
| 
 | ||||
| # | ||||
| # Multi-device support (RAID and LVM) | ||||
| # | ||||
| CONFIG_MD=y | ||||
| CONFIG_BLK_DEV_MD=y | ||||
| # CONFIG_MD_LINEAR is not set | ||||
| CONFIG_MD_RAID0=y | ||||
| CONFIG_MD_RAID1=y | ||||
| # CONFIG_MD_RAID10 is not set | ||||
| CONFIG_MD_RAID5=y | ||||
| # CONFIG_MD_RAID6 is not set | ||||
| # CONFIG_MD_MULTIPATH is not set | ||||
| # CONFIG_MD_FAULTY is not set | ||||
| CONFIG_BLK_DEV_DM=y | ||||
| # CONFIG_DM_CRYPT is not set | ||||
| # CONFIG_DM_SNAPSHOT is not set | ||||
| # CONFIG_DM_MIRROR is not set | ||||
| # CONFIG_DM_ZERO is not set | ||||
| # CONFIG_DM_MULTIPATH is not set | ||||
| 
 | ||||
| # | ||||
| # Fusion MPT device support | ||||
| # | ||||
| # CONFIG_FUSION is not set | ||||
| 
 | ||||
| # | ||||
| # IEEE 1394 (FireWire) support | ||||
| # | ||||
| # CONFIG_IEEE1394 is not set | ||||
| 
 | ||||
| # | ||||
| # I2O device support | ||||
| # | ||||
| # CONFIG_I2O is not set | ||||
| 
 | ||||
| # | ||||
| # Networking support | ||||
| # | ||||
| CONFIG_NET=y | ||||
| 
 | ||||
| # | ||||
| # Networking options | ||||
| # | ||||
| CONFIG_PACKET=y | ||||
| CONFIG_PACKET_MMAP=y | ||||
| # CONFIG_NETLINK_DEV is not set | ||||
| CONFIG_UNIX=y | ||||
| # CONFIG_NET_KEY is not set | ||||
| CONFIG_INET=y | ||||
| CONFIG_IP_MULTICAST=y | ||||
| # CONFIG_IP_ADVANCED_ROUTER is not set | ||||
| CONFIG_IP_PNP=y | ||||
| # CONFIG_IP_PNP_DHCP is not set | ||||
| CONFIG_IP_PNP_BOOTP=y | ||||
| # CONFIG_IP_PNP_RARP is not set | ||||
| # CONFIG_NET_IPIP is not set | ||||
| # CONFIG_NET_IPGRE is not set | ||||
| # CONFIG_IP_MROUTE is not set | ||||
| # CONFIG_ARPD is not set | ||||
| # CONFIG_SYN_COOKIES is not set | ||||
| # CONFIG_INET_AH is not set | ||||
| # CONFIG_INET_ESP is not set | ||||
| # CONFIG_INET_IPCOMP is not set | ||||
| # CONFIG_INET_TUNNEL is not set | ||||
| CONFIG_IP_TCPDIAG=y | ||||
| # CONFIG_IP_TCPDIAG_IPV6 is not set | ||||
| # CONFIG_IPV6 is not set | ||||
| # CONFIG_NETFILTER is not set | ||||
| 
 | ||||
| # | ||||
| # SCTP Configuration (EXPERIMENTAL) | ||||
| # | ||||
| # CONFIG_IP_SCTP is not set | ||||
| # CONFIG_ATM is not set | ||||
| # CONFIG_BRIDGE is not set | ||||
| # CONFIG_VLAN_8021Q is not set | ||||
| # CONFIG_DECNET is not set | ||||
| # CONFIG_LLC2 is not set | ||||
| # CONFIG_IPX is not set | ||||
| # CONFIG_ATALK is not set | ||||
| # CONFIG_X25 is not set | ||||
| # CONFIG_LAPB is not set | ||||
| # CONFIG_NET_DIVERT is not set | ||||
| # CONFIG_ECONET is not set | ||||
| # CONFIG_WAN_ROUTER is not set | ||||
| 
 | ||||
| # | ||||
| # QoS and/or fair queueing | ||||
| # | ||||
| # CONFIG_NET_SCHED is not set | ||||
| # CONFIG_NET_CLS_ROUTE is not set | ||||
| 
 | ||||
| # | ||||
| # Network testing | ||||
| # | ||||
| # CONFIG_NET_PKTGEN is not set | ||||
| # CONFIG_NETPOLL is not set | ||||
| # CONFIG_NET_POLL_CONTROLLER is not set | ||||
| # CONFIG_HAMRADIO is not set | ||||
| # CONFIG_IRDA is not set | ||||
| # CONFIG_BT is not set | ||||
| CONFIG_NETDEVICES=y | ||||
| # CONFIG_DUMMY is not set | ||||
| # CONFIG_BONDING is not set | ||||
| # CONFIG_EQUALIZER is not set | ||||
| # CONFIG_TUN is not set | ||||
| 
 | ||||
| # | ||||
| # ARCnet devices | ||||
| # | ||||
| # CONFIG_ARCNET is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (10 or 100Mbit) | ||||
| # | ||||
| # CONFIG_NET_ETHERNET is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (1000 Mbit) | ||||
| # | ||||
| # CONFIG_ACENIC is not set | ||||
| # CONFIG_DL2K is not set | ||||
| CONFIG_E1000=y | ||||
| CONFIG_E1000_NAPI=y | ||||
| # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | ||||
| # CONFIG_NS83820 is not set | ||||
| # CONFIG_HAMACHI is not set | ||||
| # CONFIG_YELLOWFIN is not set | ||||
| # CONFIG_R8169 is not set | ||||
| # CONFIG_SK98LIN is not set | ||||
| # CONFIG_TIGON3 is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (10000 Mbit) | ||||
| # | ||||
| # CONFIG_IXGB is not set | ||||
| # CONFIG_S2IO is not set | ||||
| 
 | ||||
| # | ||||
| # Token Ring devices | ||||
| # | ||||
| # CONFIG_TR is not set | ||||
| 
 | ||||
| # | ||||
| # Wireless LAN (non-hamradio) | ||||
| # | ||||
| # CONFIG_NET_RADIO is not set | ||||
| 
 | ||||
| # | ||||
| # Wan interfaces | ||||
| # | ||||
| # CONFIG_WAN is not set | ||||
| # CONFIG_FDDI is not set | ||||
| # CONFIG_HIPPI is not set | ||||
| # CONFIG_PPP is not set | ||||
| # CONFIG_SLIP is not set | ||||
| # CONFIG_NET_FC is not set | ||||
| # CONFIG_SHAPER is not set | ||||
| # CONFIG_NETCONSOLE is not set | ||||
| 
 | ||||
| # | ||||
| # ISDN subsystem | ||||
| # | ||||
| # CONFIG_ISDN is not set | ||||
| 
 | ||||
| # | ||||
| # Input device support | ||||
| # | ||||
| CONFIG_INPUT=y | ||||
| 
 | ||||
| # | ||||
| # Userland interfaces | ||||
| # | ||||
| CONFIG_INPUT_MOUSEDEV=y | ||||
| # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||||
| CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||||
| CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||||
| # CONFIG_INPUT_JOYDEV is not set | ||||
| # CONFIG_INPUT_TSDEV is not set | ||||
| # CONFIG_INPUT_EVDEV is not set | ||||
| # CONFIG_INPUT_EVBUG is not set | ||||
| 
 | ||||
| # | ||||
| # Input Device Drivers | ||||
| # | ||||
| # CONFIG_INPUT_KEYBOARD is not set | ||||
| # CONFIG_INPUT_MOUSE is not set | ||||
| # CONFIG_INPUT_JOYSTICK is not set | ||||
| # CONFIG_INPUT_TOUCHSCREEN is not set | ||||
| # CONFIG_INPUT_MISC is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware I/O ports | ||||
| # | ||||
| # CONFIG_SERIO is not set | ||||
| # CONFIG_GAMEPORT is not set | ||||
| CONFIG_SOUND_GAMEPORT=y | ||||
| 
 | ||||
| # | ||||
| # Character devices | ||||
| # | ||||
| CONFIG_VT=y | ||||
| CONFIG_VT_CONSOLE=y | ||||
| CONFIG_HW_CONSOLE=y | ||||
| # CONFIG_SERIAL_NONSTANDARD is not set | ||||
| 
 | ||||
| # | ||||
| # Serial drivers | ||||
| # | ||||
| CONFIG_SERIAL_8250=y | ||||
| CONFIG_SERIAL_8250_CONSOLE=y | ||||
| CONFIG_SERIAL_8250_NR_UARTS=4 | ||||
| # CONFIG_SERIAL_8250_EXTENDED is not set | ||||
| 
 | ||||
| # | ||||
| # Non-8250 serial port support | ||||
| # | ||||
| CONFIG_SERIAL_CORE=y | ||||
| CONFIG_SERIAL_CORE_CONSOLE=y | ||||
| CONFIG_UNIX98_PTYS=y | ||||
| CONFIG_LEGACY_PTYS=y | ||||
| CONFIG_LEGACY_PTY_COUNT=256 | ||||
| 
 | ||||
| # | ||||
| # IPMI | ||||
| # | ||||
| # CONFIG_IPMI_HANDLER is not set | ||||
| 
 | ||||
| # | ||||
| # Watchdog Cards | ||||
| # | ||||
| # CONFIG_WATCHDOG is not set | ||||
| # CONFIG_NVRAM is not set | ||||
| # CONFIG_RTC is not set | ||||
| # CONFIG_DTLK is not set | ||||
| # CONFIG_R3964 is not set | ||||
| # CONFIG_APPLICOM is not set | ||||
| 
 | ||||
| # | ||||
| # Ftape, the floppy tape device driver | ||||
| # | ||||
| # CONFIG_DRM is not set | ||||
| # CONFIG_RAW_DRIVER is not set | ||||
| 
 | ||||
| # | ||||
| # TPM devices | ||||
| # | ||||
| # CONFIG_TCG_TPM is not set | ||||
| 
 | ||||
| # | ||||
| # I2C support | ||||
| # | ||||
| CONFIG_I2C=y | ||||
| CONFIG_I2C_CHARDEV=y | ||||
| 
 | ||||
| # | ||||
| # I2C Algorithms | ||||
| # | ||||
| # CONFIG_I2C_ALGOBIT is not set | ||||
| # CONFIG_I2C_ALGOPCF is not set | ||||
| # CONFIG_I2C_ALGOPCA is not set | ||||
| 
 | ||||
| # | ||||
| # I2C Hardware Bus support | ||||
| # | ||||
| # CONFIG_I2C_ALI1535 is not set | ||||
| # CONFIG_I2C_ALI1563 is not set | ||||
| # CONFIG_I2C_ALI15X3 is not set | ||||
| # CONFIG_I2C_AMD756 is not set | ||||
| # CONFIG_I2C_AMD8111 is not set | ||||
| # CONFIG_I2C_I801 is not set | ||||
| # CONFIG_I2C_I810 is not set | ||||
| CONFIG_I2C_IOP3XX=y | ||||
| # CONFIG_I2C_ISA is not set | ||||
| # CONFIG_I2C_NFORCE2 is not set | ||||
| # CONFIG_I2C_PARPORT_LIGHT is not set | ||||
| # CONFIG_I2C_PIIX4 is not set | ||||
| # CONFIG_I2C_PROSAVAGE is not set | ||||
| # CONFIG_I2C_SAVAGE4 is not set | ||||
| # CONFIG_SCx200_ACB is not set | ||||
| # CONFIG_I2C_SIS5595 is not set | ||||
| # CONFIG_I2C_SIS630 is not set | ||||
| # CONFIG_I2C_SIS96X is not set | ||||
| # CONFIG_I2C_STUB is not set | ||||
| # CONFIG_I2C_VIA is not set | ||||
| # CONFIG_I2C_VIAPRO is not set | ||||
| # CONFIG_I2C_VOODOO3 is not set | ||||
| # CONFIG_I2C_PCA_ISA is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware Sensors Chip support | ||||
| # | ||||
| # CONFIG_I2C_SENSOR is not set | ||||
| # CONFIG_SENSORS_ADM1021 is not set | ||||
| # CONFIG_SENSORS_ADM1025 is not set | ||||
| # CONFIG_SENSORS_ADM1026 is not set | ||||
| # CONFIG_SENSORS_ADM1031 is not set | ||||
| # CONFIG_SENSORS_ASB100 is not set | ||||
| # CONFIG_SENSORS_DS1621 is not set | ||||
| # CONFIG_SENSORS_FSCHER is not set | ||||
| # CONFIG_SENSORS_FSCPOS is not set | ||||
| # CONFIG_SENSORS_GL518SM is not set | ||||
| # CONFIG_SENSORS_GL520SM is not set | ||||
| # CONFIG_SENSORS_IT87 is not set | ||||
| # CONFIG_SENSORS_LM63 is not set | ||||
| # CONFIG_SENSORS_LM75 is not set | ||||
| # CONFIG_SENSORS_LM77 is not set | ||||
| # CONFIG_SENSORS_LM78 is not set | ||||
| # CONFIG_SENSORS_LM80 is not set | ||||
| # CONFIG_SENSORS_LM83 is not set | ||||
| # CONFIG_SENSORS_LM85 is not set | ||||
| # CONFIG_SENSORS_LM87 is not set | ||||
| # CONFIG_SENSORS_LM90 is not set | ||||
| # CONFIG_SENSORS_MAX1619 is not set | ||||
| # CONFIG_SENSORS_PC87360 is not set | ||||
| # CONFIG_SENSORS_SMSC47B397 is not set | ||||
| # CONFIG_SENSORS_SIS5595 is not set | ||||
| # CONFIG_SENSORS_SMSC47M1 is not set | ||||
| # CONFIG_SENSORS_VIA686A is not set | ||||
| # CONFIG_SENSORS_W83781D is not set | ||||
| # CONFIG_SENSORS_W83L785TS is not set | ||||
| # CONFIG_SENSORS_W83627HF is not set | ||||
| 
 | ||||
| # | ||||
| # Other I2C Chip support | ||||
| # | ||||
| # CONFIG_SENSORS_EEPROM is not set | ||||
| # CONFIG_SENSORS_PCF8574 is not set | ||||
| # CONFIG_SENSORS_PCF8591 is not set | ||||
| # CONFIG_SENSORS_RTC8564 is not set | ||||
| # CONFIG_I2C_DEBUG_CORE is not set | ||||
| # CONFIG_I2C_DEBUG_ALGO is not set | ||||
| # CONFIG_I2C_DEBUG_BUS is not set | ||||
| # CONFIG_I2C_DEBUG_CHIP is not set | ||||
| 
 | ||||
| # | ||||
| # Misc devices | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Multimedia devices | ||||
| # | ||||
| # CONFIG_VIDEO_DEV is not set | ||||
| 
 | ||||
| # | ||||
| # Digital Video Broadcasting Devices | ||||
| # | ||||
| # CONFIG_DVB is not set | ||||
| 
 | ||||
| # | ||||
| # Graphics support | ||||
| # | ||||
| # CONFIG_FB is not set | ||||
| 
 | ||||
| # | ||||
| # Console display driver support | ||||
| # | ||||
| # CONFIG_VGA_CONSOLE is not set | ||||
| CONFIG_DUMMY_CONSOLE=y | ||||
| 
 | ||||
| # | ||||
| # Sound | ||||
| # | ||||
| # CONFIG_SOUND is not set | ||||
| 
 | ||||
| # | ||||
| # USB support | ||||
| # | ||||
| CONFIG_USB_ARCH_HAS_HCD=y | ||||
| CONFIG_USB_ARCH_HAS_OHCI=y | ||||
| # CONFIG_USB is not set | ||||
| 
 | ||||
| # | ||||
| # USB Gadget Support | ||||
| # | ||||
| # CONFIG_USB_GADGET is not set | ||||
| 
 | ||||
| # | ||||
| # MMC/SD Card support | ||||
| # | ||||
| # CONFIG_MMC is not set | ||||
| 
 | ||||
| # | ||||
| # File systems | ||||
| # | ||||
| CONFIG_EXT2_FS=y | ||||
| # CONFIG_EXT2_FS_XATTR is not set | ||||
| CONFIG_EXT3_FS=y | ||||
| CONFIG_EXT3_FS_XATTR=y | ||||
| # CONFIG_EXT3_FS_POSIX_ACL is not set | ||||
| # CONFIG_EXT3_FS_SECURITY is not set | ||||
| CONFIG_JBD=y | ||||
| # CONFIG_JBD_DEBUG is not set | ||||
| CONFIG_FS_MBCACHE=y | ||||
| # CONFIG_REISERFS_FS is not set | ||||
| # CONFIG_JFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # XFS support | ||||
| # | ||||
| CONFIG_XFS_FS=y | ||||
| CONFIG_XFS_EXPORT=y | ||||
| # CONFIG_XFS_RT is not set | ||||
| # CONFIG_XFS_QUOTA is not set | ||||
| CONFIG_XFS_SECURITY=y | ||||
| CONFIG_XFS_POSIX_ACL=y | ||||
| # CONFIG_MINIX_FS is not set | ||||
| # CONFIG_ROMFS_FS is not set | ||||
| # CONFIG_QUOTA is not set | ||||
| CONFIG_DNOTIFY=y | ||||
| # CONFIG_AUTOFS_FS is not set | ||||
| # CONFIG_AUTOFS4_FS is not set | ||||
| 
 | ||||
| # | ||||
| # CD-ROM/DVD Filesystems | ||||
| # | ||||
| # CONFIG_ISO9660_FS is not set | ||||
| # CONFIG_UDF_FS is not set | ||||
| 
 | ||||
| # | ||||
| # DOS/FAT/NT Filesystems | ||||
| # | ||||
| # CONFIG_MSDOS_FS is not set | ||||
| # CONFIG_VFAT_FS is not set | ||||
| # CONFIG_NTFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Pseudo filesystems | ||||
| # | ||||
| CONFIG_PROC_FS=y | ||||
| CONFIG_SYSFS=y | ||||
| # CONFIG_DEVFS_FS is not set | ||||
| # CONFIG_DEVPTS_FS_XATTR is not set | ||||
| CONFIG_TMPFS=y | ||||
| # CONFIG_TMPFS_XATTR is not set | ||||
| # CONFIG_HUGETLB_PAGE is not set | ||||
| CONFIG_RAMFS=y | ||||
| 
 | ||||
| # | ||||
| # Miscellaneous filesystems | ||||
| # | ||||
| # CONFIG_ADFS_FS is not set | ||||
| # CONFIG_AFFS_FS is not set | ||||
| # CONFIG_HFS_FS is not set | ||||
| # CONFIG_HFSPLUS_FS is not set | ||||
| # CONFIG_BEFS_FS is not set | ||||
| # CONFIG_BFS_FS is not set | ||||
| # CONFIG_EFS_FS is not set | ||||
| # CONFIG_JFFS_FS is not set | ||||
| CONFIG_JFFS2_FS=y | ||||
| CONFIG_JFFS2_FS_DEBUG=0 | ||||
| # CONFIG_JFFS2_FS_NAND is not set | ||||
| # CONFIG_JFFS2_FS_NOR_ECC is not set | ||||
| # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||||
| CONFIG_JFFS2_ZLIB=y | ||||
| CONFIG_JFFS2_RTIME=y | ||||
| # CONFIG_JFFS2_RUBIN is not set | ||||
| # CONFIG_CRAMFS is not set | ||||
| # CONFIG_VXFS_FS is not set | ||||
| # CONFIG_HPFS_FS is not set | ||||
| # CONFIG_QNX4FS_FS is not set | ||||
| # CONFIG_SYSV_FS is not set | ||||
| # CONFIG_UFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Network File Systems | ||||
| # | ||||
| CONFIG_NFS_FS=y | ||||
| CONFIG_NFS_V3=y | ||||
| # CONFIG_NFS_V4 is not set | ||||
| # CONFIG_NFS_DIRECTIO is not set | ||||
| CONFIG_NFSD=y | ||||
| CONFIG_NFSD_V3=y | ||||
| # CONFIG_NFSD_V4 is not set | ||||
| # CONFIG_NFSD_TCP is not set | ||||
| CONFIG_ROOT_NFS=y | ||||
| CONFIG_LOCKD=y | ||||
| CONFIG_LOCKD_V4=y | ||||
| CONFIG_EXPORTFS=y | ||||
| CONFIG_SUNRPC=y | ||||
| # CONFIG_RPCSEC_GSS_KRB5 is not set | ||||
| # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||||
| # CONFIG_SMB_FS is not set | ||||
| # CONFIG_CIFS is not set | ||||
| # CONFIG_NCP_FS is not set | ||||
| # CONFIG_CODA_FS is not set | ||||
| # CONFIG_AFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Partition Types | ||||
| # | ||||
| CONFIG_PARTITION_ADVANCED=y | ||||
| # CONFIG_ACORN_PARTITION is not set | ||||
| # CONFIG_OSF_PARTITION is not set | ||||
| # CONFIG_AMIGA_PARTITION is not set | ||||
| # CONFIG_ATARI_PARTITION is not set | ||||
| # CONFIG_MAC_PARTITION is not set | ||||
| CONFIG_MSDOS_PARTITION=y | ||||
| # CONFIG_BSD_DISKLABEL is not set | ||||
| # CONFIG_MINIX_SUBPARTITION is not set | ||||
| # CONFIG_SOLARIS_X86_PARTITION is not set | ||||
| # CONFIG_UNIXWARE_DISKLABEL is not set | ||||
| # CONFIG_LDM_PARTITION is not set | ||||
| # CONFIG_SGI_PARTITION is not set | ||||
| # CONFIG_ULTRIX_PARTITION is not set | ||||
| # CONFIG_SUN_PARTITION is not set | ||||
| # CONFIG_EFI_PARTITION is not set | ||||
| 
 | ||||
| # | ||||
| # Native Language Support | ||||
| # | ||||
| # CONFIG_NLS is not set | ||||
| 
 | ||||
| # | ||||
| # Profiling support | ||||
| # | ||||
| # CONFIG_PROFILING is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel hacking | ||||
| # | ||||
| # CONFIG_PRINTK_TIME is not set | ||||
| # CONFIG_DEBUG_KERNEL is not set | ||||
| CONFIG_LOG_BUF_SHIFT=14 | ||||
| CONFIG_DEBUG_BUGVERBOSE=y | ||||
| CONFIG_FRAME_POINTER=y | ||||
| CONFIG_DEBUG_USER=y | ||||
| 
 | ||||
| # | ||||
| # Security options | ||||
| # | ||||
| # CONFIG_KEYS is not set | ||||
| # CONFIG_SECURITY is not set | ||||
| 
 | ||||
| # | ||||
| # Cryptographic options | ||||
| # | ||||
| # CONFIG_CRYPTO is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware crypto devices | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Library routines | ||||
| # | ||||
| # CONFIG_CRC_CCITT is not set | ||||
| CONFIG_CRC32=y | ||||
| # CONFIG_LIBCRC32C is not set | ||||
| CONFIG_ZLIB_INFLATE=y | ||||
| CONFIG_ZLIB_DEFLATE=y | ||||
|  | @ -1,843 +0,0 @@ | |||
| # | ||||
| # Automatically generated make config: don't edit | ||||
| # Linux kernel version: 2.6.12-rc1-bk2 | ||||
| # Sun Mar 27 13:24:10 2005 | ||||
| # | ||||
| CONFIG_ARM=y | ||||
| CONFIG_MMU=y | ||||
| CONFIG_UID16=y | ||||
| CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||||
| CONFIG_GENERIC_CALIBRATE_DELAY=y | ||||
| CONFIG_GENERIC_IOMAP=y | ||||
| 
 | ||||
| # | ||||
| # Code maturity level options | ||||
| # | ||||
| CONFIG_EXPERIMENTAL=y | ||||
| CONFIG_CLEAN_COMPILE=y | ||||
| CONFIG_BROKEN_ON_SMP=y | ||||
| 
 | ||||
| # | ||||
| # General setup | ||||
| # | ||||
| CONFIG_LOCALVERSION="" | ||||
| CONFIG_SWAP=y | ||||
| CONFIG_SYSVIPC=y | ||||
| # CONFIG_POSIX_MQUEUE is not set | ||||
| CONFIG_BSD_PROCESS_ACCT=y | ||||
| # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||||
| CONFIG_SYSCTL=y | ||||
| # CONFIG_AUDIT is not set | ||||
| # CONFIG_HOTPLUG is not set | ||||
| CONFIG_KOBJECT_UEVENT=y | ||||
| # CONFIG_IKCONFIG is not set | ||||
| # CONFIG_EMBEDDED is not set | ||||
| CONFIG_KALLSYMS=y | ||||
| # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||||
| CONFIG_BASE_FULL=y | ||||
| CONFIG_FUTEX=y | ||||
| CONFIG_EPOLL=y | ||||
| CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||||
| CONFIG_SHMEM=y | ||||
| CONFIG_CC_ALIGN_FUNCTIONS=0 | ||||
| CONFIG_CC_ALIGN_LABELS=0 | ||||
| CONFIG_CC_ALIGN_LOOPS=0 | ||||
| CONFIG_CC_ALIGN_JUMPS=0 | ||||
| # CONFIG_TINY_SHMEM is not set | ||||
| CONFIG_BASE_SMALL=0 | ||||
| 
 | ||||
| # | ||||
| # Loadable module support | ||||
| # | ||||
| CONFIG_MODULES=y | ||||
| CONFIG_MODULE_UNLOAD=y | ||||
| # CONFIG_MODULE_FORCE_UNLOAD is not set | ||||
| CONFIG_OBSOLETE_MODPARM=y | ||||
| # CONFIG_MODVERSIONS is not set | ||||
| # CONFIG_MODULE_SRCVERSION_ALL is not set | ||||
| CONFIG_KMOD=y | ||||
| 
 | ||||
| # | ||||
| # System Type | ||||
| # | ||||
| # CONFIG_ARCH_CLPS7500 is not set | ||||
| # CONFIG_ARCH_CLPS711X is not set | ||||
| # CONFIG_ARCH_CO285 is not set | ||||
| # CONFIG_ARCH_EBSA110 is not set | ||||
| # CONFIG_ARCH_FOOTBRIDGE is not set | ||||
| # CONFIG_ARCH_INTEGRATOR is not set | ||||
| CONFIG_ARCH_IOP3XX=y | ||||
| # CONFIG_ARCH_IXP4XX is not set | ||||
| # CONFIG_ARCH_IXP2000 is not set | ||||
| # CONFIG_ARCH_L7200 is not set | ||||
| # CONFIG_ARCH_PXA is not set | ||||
| # CONFIG_ARCH_RPC is not set | ||||
| # CONFIG_ARCH_SA1100 is not set | ||||
| # CONFIG_ARCH_S3C2410 is not set | ||||
| # CONFIG_ARCH_SHARK is not set | ||||
| # CONFIG_ARCH_LH7A40X is not set | ||||
| # CONFIG_ARCH_OMAP is not set | ||||
| # CONFIG_ARCH_VERSATILE is not set | ||||
| # CONFIG_ARCH_IMX is not set | ||||
| # CONFIG_ARCH_H720X is not set | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Implementation Options | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Platform Types | ||||
| # | ||||
| CONFIG_ARCH_IQ80321=y | ||||
| # CONFIG_ARCH_IQ31244 is not set | ||||
| # CONFIG_ARCH_IQ80331 is not set | ||||
| # CONFIG_MACH_IQ80332 is not set | ||||
| # CONFIG_ARCH_EP80219 is not set | ||||
| CONFIG_ARCH_IOP321=y | ||||
| # CONFIG_ARCH_IOP331 is not set | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Chipset Features | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Processor Type | ||||
| # | ||||
| CONFIG_CPU_32=y | ||||
| CONFIG_CPU_XSCALE=y | ||||
| CONFIG_CPU_32v5=y | ||||
| CONFIG_CPU_ABRT_EV5T=y | ||||
| CONFIG_CPU_CACHE_VIVT=y | ||||
| CONFIG_CPU_TLB_V4WBI=y | ||||
| CONFIG_CPU_MINICACHE=y | ||||
| 
 | ||||
| # | ||||
| # Processor Features | ||||
| # | ||||
| # CONFIG_ARM_THUMB is not set | ||||
| CONFIG_XSCALE_PMU=y | ||||
| 
 | ||||
| # | ||||
| # Bus support | ||||
| # | ||||
| CONFIG_PCI=y | ||||
| # CONFIG_PCI_LEGACY_PROC is not set | ||||
| CONFIG_PCI_NAMES=y | ||||
| 
 | ||||
| # | ||||
| # PCCARD (PCMCIA/CardBus) support | ||||
| # | ||||
| # CONFIG_PCCARD is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel Features | ||||
| # | ||||
| # CONFIG_PREEMPT is not set | ||||
| CONFIG_ALIGNMENT_TRAP=y | ||||
| 
 | ||||
| # | ||||
| # Boot options | ||||
| # | ||||
| CONFIG_ZBOOT_ROM_TEXT=0x0 | ||||
| CONFIG_ZBOOT_ROM_BSS=0x0 | ||||
| CONFIG_CMDLINE="ip=boot root=nfs console=ttyS0,115200" | ||||
| # CONFIG_XIP_KERNEL is not set | ||||
| 
 | ||||
| # | ||||
| # Floating point emulation | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # At least one emulation must be selected | ||||
| # | ||||
| CONFIG_FPE_NWFPE=y | ||||
| # CONFIG_FPE_NWFPE_XP is not set | ||||
| # CONFIG_FPE_FASTFPE is not set | ||||
| 
 | ||||
| # | ||||
| # Userspace binary formats | ||||
| # | ||||
| CONFIG_BINFMT_ELF=y | ||||
| CONFIG_BINFMT_AOUT=y | ||||
| # CONFIG_BINFMT_MISC is not set | ||||
| # CONFIG_ARTHUR is not set | ||||
| 
 | ||||
| # | ||||
| # Power management options | ||||
| # | ||||
| # CONFIG_PM is not set | ||||
| 
 | ||||
| # | ||||
| # Device Drivers | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Generic Driver Options | ||||
| # | ||||
| CONFIG_STANDALONE=y | ||||
| CONFIG_PREVENT_FIRMWARE_BUILD=y | ||||
| # CONFIG_FW_LOADER is not set | ||||
| 
 | ||||
| # | ||||
| # Memory Technology Devices (MTD) | ||||
| # | ||||
| CONFIG_MTD=y | ||||
| # CONFIG_MTD_DEBUG is not set | ||||
| # CONFIG_MTD_CONCAT is not set | ||||
| CONFIG_MTD_PARTITIONS=y | ||||
| CONFIG_MTD_REDBOOT_PARTS=y | ||||
| CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 | ||||
| CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y | ||||
| CONFIG_MTD_REDBOOT_PARTS_READONLY=y | ||||
| # CONFIG_MTD_CMDLINE_PARTS is not set | ||||
| # CONFIG_MTD_AFS_PARTS is not set | ||||
| 
 | ||||
| # | ||||
| # User Modules And Translation Layers | ||||
| # | ||||
| CONFIG_MTD_CHAR=y | ||||
| CONFIG_MTD_BLOCK=y | ||||
| # CONFIG_FTL is not set | ||||
| # CONFIG_NFTL is not set | ||||
| # CONFIG_INFTL is not set | ||||
| 
 | ||||
| # | ||||
| # RAM/ROM/Flash chip drivers | ||||
| # | ||||
| CONFIG_MTD_CFI=y | ||||
| # CONFIG_MTD_JEDECPROBE is not set | ||||
| CONFIG_MTD_GEN_PROBE=y | ||||
| # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||||
| CONFIG_MTD_CFI_I1=y | ||||
| CONFIG_MTD_CFI_I2=y | ||||
| # CONFIG_MTD_CFI_I4 is not set | ||||
| # CONFIG_MTD_CFI_I8 is not set | ||||
| CONFIG_MTD_CFI_INTELEXT=y | ||||
| # CONFIG_MTD_CFI_AMDSTD is not set | ||||
| # CONFIG_MTD_CFI_STAA is not set | ||||
| CONFIG_MTD_CFI_UTIL=y | ||||
| # CONFIG_MTD_RAM is not set | ||||
| # CONFIG_MTD_ROM is not set | ||||
| # CONFIG_MTD_ABSENT is not set | ||||
| # CONFIG_MTD_XIP is not set | ||||
| 
 | ||||
| # | ||||
| # Mapping drivers for chip access | ||||
| # | ||||
| # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||||
| CONFIG_MTD_PHYSMAP=y | ||||
| CONFIG_MTD_PHYSMAP_START=0xf0000000 | ||||
| CONFIG_MTD_PHYSMAP_LEN=0x00800000 | ||||
| CONFIG_MTD_PHYSMAP_BANKWIDTH=1 | ||||
| # CONFIG_MTD_ARM_INTEGRATOR is not set | ||||
| # CONFIG_MTD_EDB7312 is not set | ||||
| 
 | ||||
| # | ||||
| # Self-contained MTD device drivers | ||||
| # | ||||
| # CONFIG_MTD_PMC551 is not set | ||||
| # CONFIG_MTD_SLRAM is not set | ||||
| # CONFIG_MTD_PHRAM is not set | ||||
| # CONFIG_MTD_MTDRAM is not set | ||||
| # CONFIG_MTD_BLKMTD is not set | ||||
| # CONFIG_MTD_BLOCK2MTD is not set | ||||
| 
 | ||||
| # | ||||
| # Disk-On-Chip Device Drivers | ||||
| # | ||||
| # CONFIG_MTD_DOC2000 is not set | ||||
| # CONFIG_MTD_DOC2001 is not set | ||||
| # CONFIG_MTD_DOC2001PLUS is not set | ||||
| 
 | ||||
| # | ||||
| # NAND Flash Device Drivers | ||||
| # | ||||
| # CONFIG_MTD_NAND is not set | ||||
| 
 | ||||
| # | ||||
| # Parallel port support | ||||
| # | ||||
| # CONFIG_PARPORT is not set | ||||
| 
 | ||||
| # | ||||
| # Plug and Play support | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Block devices | ||||
| # | ||||
| # CONFIG_BLK_DEV_FD is not set | ||||
| # CONFIG_BLK_CPQ_DA is not set | ||||
| # CONFIG_BLK_CPQ_CISS_DA is not set | ||||
| # CONFIG_BLK_DEV_DAC960 is not set | ||||
| # CONFIG_BLK_DEV_UMEM is not set | ||||
| # CONFIG_BLK_DEV_COW_COMMON is not set | ||||
| # CONFIG_BLK_DEV_LOOP is not set | ||||
| # CONFIG_BLK_DEV_NBD is not set | ||||
| # CONFIG_BLK_DEV_SX8 is not set | ||||
| CONFIG_BLK_DEV_RAM=y | ||||
| CONFIG_BLK_DEV_RAM_COUNT=16 | ||||
| CONFIG_BLK_DEV_RAM_SIZE=8192 | ||||
| # CONFIG_BLK_DEV_INITRD is not set | ||||
| CONFIG_INITRAMFS_SOURCE="" | ||||
| # CONFIG_CDROM_PKTCDVD is not set | ||||
| 
 | ||||
| # | ||||
| # IO Schedulers | ||||
| # | ||||
| CONFIG_IOSCHED_NOOP=y | ||||
| CONFIG_IOSCHED_AS=y | ||||
| CONFIG_IOSCHED_DEADLINE=y | ||||
| CONFIG_IOSCHED_CFQ=y | ||||
| # CONFIG_ATA_OVER_ETH is not set | ||||
| 
 | ||||
| # | ||||
| # ATA/ATAPI/MFM/RLL support | ||||
| # | ||||
| # CONFIG_IDE is not set | ||||
| 
 | ||||
| # | ||||
| # SCSI device support | ||||
| # | ||||
| # CONFIG_SCSI is not set | ||||
| 
 | ||||
| # | ||||
| # Multi-device support (RAID and LVM) | ||||
| # | ||||
| # CONFIG_MD is not set | ||||
| 
 | ||||
| # | ||||
| # Fusion MPT device support | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # IEEE 1394 (FireWire) support | ||||
| # | ||||
| # CONFIG_IEEE1394 is not set | ||||
| 
 | ||||
| # | ||||
| # I2O device support | ||||
| # | ||||
| # CONFIG_I2O is not set | ||||
| 
 | ||||
| # | ||||
| # Networking support | ||||
| # | ||||
| CONFIG_NET=y | ||||
| 
 | ||||
| # | ||||
| # Networking options | ||||
| # | ||||
| CONFIG_PACKET=y | ||||
| CONFIG_PACKET_MMAP=y | ||||
| # CONFIG_NETLINK_DEV is not set | ||||
| CONFIG_UNIX=y | ||||
| # CONFIG_NET_KEY is not set | ||||
| CONFIG_INET=y | ||||
| CONFIG_IP_MULTICAST=y | ||||
| # CONFIG_IP_ADVANCED_ROUTER is not set | ||||
| CONFIG_IP_PNP=y | ||||
| # CONFIG_IP_PNP_DHCP is not set | ||||
| CONFIG_IP_PNP_BOOTP=y | ||||
| # CONFIG_IP_PNP_RARP is not set | ||||
| # CONFIG_NET_IPIP is not set | ||||
| # CONFIG_NET_IPGRE is not set | ||||
| # CONFIG_IP_MROUTE is not set | ||||
| # CONFIG_ARPD is not set | ||||
| # CONFIG_SYN_COOKIES is not set | ||||
| # CONFIG_INET_AH is not set | ||||
| # CONFIG_INET_ESP is not set | ||||
| # CONFIG_INET_IPCOMP is not set | ||||
| # CONFIG_INET_TUNNEL is not set | ||||
| CONFIG_IP_TCPDIAG=y | ||||
| # CONFIG_IP_TCPDIAG_IPV6 is not set | ||||
| # CONFIG_IPV6 is not set | ||||
| # CONFIG_NETFILTER is not set | ||||
| 
 | ||||
| # | ||||
| # SCTP Configuration (EXPERIMENTAL) | ||||
| # | ||||
| # CONFIG_IP_SCTP is not set | ||||
| # CONFIG_ATM is not set | ||||
| # CONFIG_BRIDGE is not set | ||||
| # CONFIG_VLAN_8021Q is not set | ||||
| # CONFIG_DECNET is not set | ||||
| # CONFIG_LLC2 is not set | ||||
| # CONFIG_IPX is not set | ||||
| # CONFIG_ATALK is not set | ||||
| # CONFIG_X25 is not set | ||||
| # CONFIG_LAPB is not set | ||||
| # CONFIG_NET_DIVERT is not set | ||||
| # CONFIG_ECONET is not set | ||||
| # CONFIG_WAN_ROUTER is not set | ||||
| 
 | ||||
| # | ||||
| # QoS and/or fair queueing | ||||
| # | ||||
| # CONFIG_NET_SCHED is not set | ||||
| # CONFIG_NET_CLS_ROUTE is not set | ||||
| 
 | ||||
| # | ||||
| # Network testing | ||||
| # | ||||
| # CONFIG_NET_PKTGEN is not set | ||||
| # CONFIG_NETPOLL is not set | ||||
| # CONFIG_NET_POLL_CONTROLLER is not set | ||||
| # CONFIG_HAMRADIO is not set | ||||
| # CONFIG_IRDA is not set | ||||
| # CONFIG_BT is not set | ||||
| CONFIG_NETDEVICES=y | ||||
| # CONFIG_DUMMY is not set | ||||
| # CONFIG_BONDING is not set | ||||
| # CONFIG_EQUALIZER is not set | ||||
| # CONFIG_TUN is not set | ||||
| 
 | ||||
| # | ||||
| # ARCnet devices | ||||
| # | ||||
| # CONFIG_ARCNET is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (10 or 100Mbit) | ||||
| # | ||||
| # CONFIG_NET_ETHERNET is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (1000 Mbit) | ||||
| # | ||||
| # CONFIG_ACENIC is not set | ||||
| # CONFIG_DL2K is not set | ||||
| CONFIG_E1000=y | ||||
| CONFIG_E1000_NAPI=y | ||||
| # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | ||||
| # CONFIG_NS83820 is not set | ||||
| # CONFIG_HAMACHI is not set | ||||
| # CONFIG_YELLOWFIN is not set | ||||
| # CONFIG_R8169 is not set | ||||
| # CONFIG_SK98LIN is not set | ||||
| # CONFIG_TIGON3 is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (10000 Mbit) | ||||
| # | ||||
| # CONFIG_IXGB is not set | ||||
| # CONFIG_S2IO is not set | ||||
| 
 | ||||
| # | ||||
| # Token Ring devices | ||||
| # | ||||
| # CONFIG_TR is not set | ||||
| 
 | ||||
| # | ||||
| # Wireless LAN (non-hamradio) | ||||
| # | ||||
| # CONFIG_NET_RADIO is not set | ||||
| 
 | ||||
| # | ||||
| # Wan interfaces | ||||
| # | ||||
| # CONFIG_WAN is not set | ||||
| # CONFIG_FDDI is not set | ||||
| # CONFIG_HIPPI is not set | ||||
| # CONFIG_PPP is not set | ||||
| # CONFIG_SLIP is not set | ||||
| # CONFIG_SHAPER is not set | ||||
| # CONFIG_NETCONSOLE is not set | ||||
| 
 | ||||
| # | ||||
| # ISDN subsystem | ||||
| # | ||||
| # CONFIG_ISDN is not set | ||||
| 
 | ||||
| # | ||||
| # Input device support | ||||
| # | ||||
| CONFIG_INPUT=y | ||||
| 
 | ||||
| # | ||||
| # Userland interfaces | ||||
| # | ||||
| CONFIG_INPUT_MOUSEDEV=y | ||||
| # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||||
| CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||||
| CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||||
| # CONFIG_INPUT_JOYDEV is not set | ||||
| # CONFIG_INPUT_TSDEV is not set | ||||
| # CONFIG_INPUT_EVDEV is not set | ||||
| # CONFIG_INPUT_EVBUG is not set | ||||
| 
 | ||||
| # | ||||
| # Input Device Drivers | ||||
| # | ||||
| # CONFIG_INPUT_KEYBOARD is not set | ||||
| # CONFIG_INPUT_MOUSE is not set | ||||
| # CONFIG_INPUT_JOYSTICK is not set | ||||
| # CONFIG_INPUT_TOUCHSCREEN is not set | ||||
| # CONFIG_INPUT_MISC is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware I/O ports | ||||
| # | ||||
| # CONFIG_SERIO is not set | ||||
| # CONFIG_GAMEPORT is not set | ||||
| CONFIG_SOUND_GAMEPORT=y | ||||
| 
 | ||||
| # | ||||
| # Character devices | ||||
| # | ||||
| CONFIG_VT=y | ||||
| CONFIG_VT_CONSOLE=y | ||||
| CONFIG_HW_CONSOLE=y | ||||
| # CONFIG_SERIAL_NONSTANDARD is not set | ||||
| 
 | ||||
| # | ||||
| # Serial drivers | ||||
| # | ||||
| CONFIG_SERIAL_8250=y | ||||
| CONFIG_SERIAL_8250_CONSOLE=y | ||||
| CONFIG_SERIAL_8250_NR_UARTS=4 | ||||
| # CONFIG_SERIAL_8250_EXTENDED is not set | ||||
| 
 | ||||
| # | ||||
| # Non-8250 serial port support | ||||
| # | ||||
| CONFIG_SERIAL_CORE=y | ||||
| CONFIG_SERIAL_CORE_CONSOLE=y | ||||
| CONFIG_UNIX98_PTYS=y | ||||
| CONFIG_LEGACY_PTYS=y | ||||
| CONFIG_LEGACY_PTY_COUNT=256 | ||||
| 
 | ||||
| # | ||||
| # IPMI | ||||
| # | ||||
| # CONFIG_IPMI_HANDLER is not set | ||||
| 
 | ||||
| # | ||||
| # Watchdog Cards | ||||
| # | ||||
| # CONFIG_WATCHDOG is not set | ||||
| # CONFIG_NVRAM is not set | ||||
| # CONFIG_RTC is not set | ||||
| # CONFIG_DTLK is not set | ||||
| # CONFIG_R3964 is not set | ||||
| # CONFIG_APPLICOM is not set | ||||
| 
 | ||||
| # | ||||
| # Ftape, the floppy tape device driver | ||||
| # | ||||
| # CONFIG_DRM is not set | ||||
| # CONFIG_RAW_DRIVER is not set | ||||
| 
 | ||||
| # | ||||
| # TPM devices | ||||
| # | ||||
| # CONFIG_TCG_TPM is not set | ||||
| 
 | ||||
| # | ||||
| # I2C support | ||||
| # | ||||
| CONFIG_I2C=y | ||||
| CONFIG_I2C_CHARDEV=y | ||||
| 
 | ||||
| # | ||||
| # I2C Algorithms | ||||
| # | ||||
| # CONFIG_I2C_ALGOBIT is not set | ||||
| # CONFIG_I2C_ALGOPCF is not set | ||||
| # CONFIG_I2C_ALGOPCA is not set | ||||
| 
 | ||||
| # | ||||
| # I2C Hardware Bus support | ||||
| # | ||||
| # CONFIG_I2C_ALI1535 is not set | ||||
| # CONFIG_I2C_ALI1563 is not set | ||||
| # CONFIG_I2C_ALI15X3 is not set | ||||
| # CONFIG_I2C_AMD756 is not set | ||||
| # CONFIG_I2C_AMD8111 is not set | ||||
| # CONFIG_I2C_I801 is not set | ||||
| # CONFIG_I2C_I810 is not set | ||||
| CONFIG_I2C_IOP3XX=y | ||||
| # CONFIG_I2C_ISA is not set | ||||
| # CONFIG_I2C_NFORCE2 is not set | ||||
| # CONFIG_I2C_PARPORT_LIGHT is not set | ||||
| # CONFIG_I2C_PIIX4 is not set | ||||
| # CONFIG_I2C_PROSAVAGE is not set | ||||
| # CONFIG_I2C_SAVAGE4 is not set | ||||
| # CONFIG_SCx200_ACB is not set | ||||
| # CONFIG_I2C_SIS5595 is not set | ||||
| # CONFIG_I2C_SIS630 is not set | ||||
| # CONFIG_I2C_SIS96X is not set | ||||
| # CONFIG_I2C_STUB is not set | ||||
| # CONFIG_I2C_VIA is not set | ||||
| # CONFIG_I2C_VIAPRO is not set | ||||
| # CONFIG_I2C_VOODOO3 is not set | ||||
| # CONFIG_I2C_PCA_ISA is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware Sensors Chip support | ||||
| # | ||||
| # CONFIG_I2C_SENSOR is not set | ||||
| # CONFIG_SENSORS_ADM1021 is not set | ||||
| # CONFIG_SENSORS_ADM1025 is not set | ||||
| # CONFIG_SENSORS_ADM1026 is not set | ||||
| # CONFIG_SENSORS_ADM1031 is not set | ||||
| # CONFIG_SENSORS_ASB100 is not set | ||||
| # CONFIG_SENSORS_DS1621 is not set | ||||
| # CONFIG_SENSORS_FSCHER is not set | ||||
| # CONFIG_SENSORS_FSCPOS is not set | ||||
| # CONFIG_SENSORS_GL518SM is not set | ||||
| # CONFIG_SENSORS_GL520SM is not set | ||||
| # CONFIG_SENSORS_IT87 is not set | ||||
| # CONFIG_SENSORS_LM63 is not set | ||||
| # CONFIG_SENSORS_LM75 is not set | ||||
| # CONFIG_SENSORS_LM77 is not set | ||||
| # CONFIG_SENSORS_LM78 is not set | ||||
| # CONFIG_SENSORS_LM80 is not set | ||||
| # CONFIG_SENSORS_LM83 is not set | ||||
| # CONFIG_SENSORS_LM85 is not set | ||||
| # CONFIG_SENSORS_LM87 is not set | ||||
| # CONFIG_SENSORS_LM90 is not set | ||||
| # CONFIG_SENSORS_MAX1619 is not set | ||||
| # CONFIG_SENSORS_PC87360 is not set | ||||
| # CONFIG_SENSORS_SMSC47B397 is not set | ||||
| # CONFIG_SENSORS_SIS5595 is not set | ||||
| # CONFIG_SENSORS_SMSC47M1 is not set | ||||
| # CONFIG_SENSORS_VIA686A is not set | ||||
| # CONFIG_SENSORS_W83781D is not set | ||||
| # CONFIG_SENSORS_W83L785TS is not set | ||||
| # CONFIG_SENSORS_W83627HF is not set | ||||
| 
 | ||||
| # | ||||
| # Other I2C Chip support | ||||
| # | ||||
| # CONFIG_SENSORS_EEPROM is not set | ||||
| # CONFIG_SENSORS_PCF8574 is not set | ||||
| # CONFIG_SENSORS_PCF8591 is not set | ||||
| # CONFIG_SENSORS_RTC8564 is not set | ||||
| # CONFIG_I2C_DEBUG_CORE is not set | ||||
| # CONFIG_I2C_DEBUG_ALGO is not set | ||||
| # CONFIG_I2C_DEBUG_BUS is not set | ||||
| # CONFIG_I2C_DEBUG_CHIP is not set | ||||
| 
 | ||||
| # | ||||
| # Misc devices | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Multimedia devices | ||||
| # | ||||
| # CONFIG_VIDEO_DEV is not set | ||||
| 
 | ||||
| # | ||||
| # Digital Video Broadcasting Devices | ||||
| # | ||||
| # CONFIG_DVB is not set | ||||
| 
 | ||||
| # | ||||
| # Graphics support | ||||
| # | ||||
| # CONFIG_FB is not set | ||||
| 
 | ||||
| # | ||||
| # Console display driver support | ||||
| # | ||||
| # CONFIG_VGA_CONSOLE is not set | ||||
| CONFIG_DUMMY_CONSOLE=y | ||||
| 
 | ||||
| # | ||||
| # Sound | ||||
| # | ||||
| # CONFIG_SOUND is not set | ||||
| 
 | ||||
| # | ||||
| # USB support | ||||
| # | ||||
| CONFIG_USB_ARCH_HAS_HCD=y | ||||
| CONFIG_USB_ARCH_HAS_OHCI=y | ||||
| # CONFIG_USB is not set | ||||
| 
 | ||||
| # | ||||
| # USB Gadget Support | ||||
| # | ||||
| # CONFIG_USB_GADGET is not set | ||||
| 
 | ||||
| # | ||||
| # MMC/SD Card support | ||||
| # | ||||
| # CONFIG_MMC is not set | ||||
| 
 | ||||
| # | ||||
| # File systems | ||||
| # | ||||
| CONFIG_EXT2_FS=y | ||||
| # CONFIG_EXT2_FS_XATTR is not set | ||||
| CONFIG_EXT3_FS=y | ||||
| CONFIG_EXT3_FS_XATTR=y | ||||
| # CONFIG_EXT3_FS_POSIX_ACL is not set | ||||
| # CONFIG_EXT3_FS_SECURITY is not set | ||||
| CONFIG_JBD=y | ||||
| # CONFIG_JBD_DEBUG is not set | ||||
| CONFIG_FS_MBCACHE=y | ||||
| # CONFIG_REISERFS_FS is not set | ||||
| # CONFIG_JFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # XFS support | ||||
| # | ||||
| CONFIG_XFS_FS=y | ||||
| CONFIG_XFS_EXPORT=y | ||||
| # CONFIG_XFS_RT is not set | ||||
| # CONFIG_XFS_QUOTA is not set | ||||
| CONFIG_XFS_SECURITY=y | ||||
| CONFIG_XFS_POSIX_ACL=y | ||||
| # CONFIG_MINIX_FS is not set | ||||
| # CONFIG_ROMFS_FS is not set | ||||
| # CONFIG_QUOTA is not set | ||||
| CONFIG_DNOTIFY=y | ||||
| # CONFIG_AUTOFS_FS is not set | ||||
| # CONFIG_AUTOFS4_FS is not set | ||||
| 
 | ||||
| # | ||||
| # CD-ROM/DVD Filesystems | ||||
| # | ||||
| # CONFIG_ISO9660_FS is not set | ||||
| # CONFIG_UDF_FS is not set | ||||
| 
 | ||||
| # | ||||
| # DOS/FAT/NT Filesystems | ||||
| # | ||||
| # CONFIG_MSDOS_FS is not set | ||||
| # CONFIG_VFAT_FS is not set | ||||
| # CONFIG_NTFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Pseudo filesystems | ||||
| # | ||||
| CONFIG_PROC_FS=y | ||||
| CONFIG_SYSFS=y | ||||
| # CONFIG_DEVFS_FS is not set | ||||
| # CONFIG_DEVPTS_FS_XATTR is not set | ||||
| CONFIG_TMPFS=y | ||||
| # CONFIG_TMPFS_XATTR is not set | ||||
| # CONFIG_HUGETLB_PAGE is not set | ||||
| CONFIG_RAMFS=y | ||||
| 
 | ||||
| # | ||||
| # Miscellaneous filesystems | ||||
| # | ||||
| # CONFIG_ADFS_FS is not set | ||||
| # CONFIG_AFFS_FS is not set | ||||
| # CONFIG_HFS_FS is not set | ||||
| # CONFIG_HFSPLUS_FS is not set | ||||
| # CONFIG_BEFS_FS is not set | ||||
| # CONFIG_BFS_FS is not set | ||||
| # CONFIG_EFS_FS is not set | ||||
| # CONFIG_JFFS_FS is not set | ||||
| CONFIG_JFFS2_FS=y | ||||
| CONFIG_JFFS2_FS_DEBUG=0 | ||||
| # CONFIG_JFFS2_FS_NAND is not set | ||||
| # CONFIG_JFFS2_FS_NOR_ECC is not set | ||||
| # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||||
| CONFIG_JFFS2_ZLIB=y | ||||
| CONFIG_JFFS2_RTIME=y | ||||
| # CONFIG_JFFS2_RUBIN is not set | ||||
| # CONFIG_CRAMFS is not set | ||||
| # CONFIG_VXFS_FS is not set | ||||
| # CONFIG_HPFS_FS is not set | ||||
| # CONFIG_QNX4FS_FS is not set | ||||
| # CONFIG_SYSV_FS is not set | ||||
| # CONFIG_UFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Network File Systems | ||||
| # | ||||
| CONFIG_NFS_FS=y | ||||
| CONFIG_NFS_V3=y | ||||
| # CONFIG_NFS_V4 is not set | ||||
| # CONFIG_NFS_DIRECTIO is not set | ||||
| CONFIG_NFSD=y | ||||
| CONFIG_NFSD_V3=y | ||||
| # CONFIG_NFSD_V4 is not set | ||||
| # CONFIG_NFSD_TCP is not set | ||||
| CONFIG_ROOT_NFS=y | ||||
| CONFIG_LOCKD=y | ||||
| CONFIG_LOCKD_V4=y | ||||
| CONFIG_EXPORTFS=y | ||||
| CONFIG_SUNRPC=y | ||||
| # CONFIG_RPCSEC_GSS_KRB5 is not set | ||||
| # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||||
| # CONFIG_SMB_FS is not set | ||||
| # CONFIG_CIFS is not set | ||||
| # CONFIG_NCP_FS is not set | ||||
| # CONFIG_CODA_FS is not set | ||||
| # CONFIG_AFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Partition Types | ||||
| # | ||||
| CONFIG_PARTITION_ADVANCED=y | ||||
| # CONFIG_ACORN_PARTITION is not set | ||||
| # CONFIG_OSF_PARTITION is not set | ||||
| # CONFIG_AMIGA_PARTITION is not set | ||||
| # CONFIG_ATARI_PARTITION is not set | ||||
| # CONFIG_MAC_PARTITION is not set | ||||
| CONFIG_MSDOS_PARTITION=y | ||||
| # CONFIG_BSD_DISKLABEL is not set | ||||
| # CONFIG_MINIX_SUBPARTITION is not set | ||||
| # CONFIG_SOLARIS_X86_PARTITION is not set | ||||
| # CONFIG_UNIXWARE_DISKLABEL is not set | ||||
| # CONFIG_LDM_PARTITION is not set | ||||
| # CONFIG_SGI_PARTITION is not set | ||||
| # CONFIG_ULTRIX_PARTITION is not set | ||||
| # CONFIG_SUN_PARTITION is not set | ||||
| # CONFIG_EFI_PARTITION is not set | ||||
| 
 | ||||
| # | ||||
| # Native Language Support | ||||
| # | ||||
| # CONFIG_NLS is not set | ||||
| 
 | ||||
| # | ||||
| # Profiling support | ||||
| # | ||||
| # CONFIG_PROFILING is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel hacking | ||||
| # | ||||
| # CONFIG_PRINTK_TIME is not set | ||||
| # CONFIG_DEBUG_KERNEL is not set | ||||
| CONFIG_LOG_BUF_SHIFT=14 | ||||
| CONFIG_DEBUG_BUGVERBOSE=y | ||||
| CONFIG_FRAME_POINTER=y | ||||
| CONFIG_DEBUG_USER=y | ||||
| 
 | ||||
| # | ||||
| # Security options | ||||
| # | ||||
| # CONFIG_KEYS is not set | ||||
| # CONFIG_SECURITY is not set | ||||
| 
 | ||||
| # | ||||
| # Cryptographic options | ||||
| # | ||||
| # CONFIG_CRYPTO is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware crypto devices | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Library routines | ||||
| # | ||||
| # CONFIG_CRC_CCITT is not set | ||||
| CONFIG_CRC32=y | ||||
| # CONFIG_LIBCRC32C is not set | ||||
| CONFIG_ZLIB_INFLATE=y | ||||
| CONFIG_ZLIB_DEFLATE=y | ||||
|  | @ -1,916 +0,0 @@ | |||
| # | ||||
| # Automatically generated make config: don't edit | ||||
| # Linux kernel version: 2.6.12-rc1-bk2 | ||||
| # Sun Mar 27 15:13:37 2005 | ||||
| # | ||||
| CONFIG_ARM=y | ||||
| CONFIG_MMU=y | ||||
| CONFIG_UID16=y | ||||
| CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||||
| CONFIG_GENERIC_CALIBRATE_DELAY=y | ||||
| CONFIG_GENERIC_IOMAP=y | ||||
| 
 | ||||
| # | ||||
| # Code maturity level options | ||||
| # | ||||
| CONFIG_EXPERIMENTAL=y | ||||
| CONFIG_CLEAN_COMPILE=y | ||||
| CONFIG_BROKEN_ON_SMP=y | ||||
| 
 | ||||
| # | ||||
| # General setup | ||||
| # | ||||
| CONFIG_LOCALVERSION="" | ||||
| CONFIG_SWAP=y | ||||
| CONFIG_SYSVIPC=y | ||||
| # CONFIG_POSIX_MQUEUE is not set | ||||
| CONFIG_BSD_PROCESS_ACCT=y | ||||
| # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||||
| CONFIG_SYSCTL=y | ||||
| # CONFIG_AUDIT is not set | ||||
| # CONFIG_HOTPLUG is not set | ||||
| CONFIG_KOBJECT_UEVENT=y | ||||
| # CONFIG_IKCONFIG is not set | ||||
| # CONFIG_EMBEDDED is not set | ||||
| CONFIG_KALLSYMS=y | ||||
| # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||||
| CONFIG_BASE_FULL=y | ||||
| CONFIG_FUTEX=y | ||||
| CONFIG_EPOLL=y | ||||
| CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||||
| CONFIG_SHMEM=y | ||||
| CONFIG_CC_ALIGN_FUNCTIONS=0 | ||||
| CONFIG_CC_ALIGN_LABELS=0 | ||||
| CONFIG_CC_ALIGN_LOOPS=0 | ||||
| CONFIG_CC_ALIGN_JUMPS=0 | ||||
| # CONFIG_TINY_SHMEM is not set | ||||
| CONFIG_BASE_SMALL=0 | ||||
| 
 | ||||
| # | ||||
| # Loadable module support | ||||
| # | ||||
| CONFIG_MODULES=y | ||||
| CONFIG_MODULE_UNLOAD=y | ||||
| # CONFIG_MODULE_FORCE_UNLOAD is not set | ||||
| CONFIG_OBSOLETE_MODPARM=y | ||||
| # CONFIG_MODVERSIONS is not set | ||||
| # CONFIG_MODULE_SRCVERSION_ALL is not set | ||||
| CONFIG_KMOD=y | ||||
| 
 | ||||
| # | ||||
| # System Type | ||||
| # | ||||
| # CONFIG_ARCH_CLPS7500 is not set | ||||
| # CONFIG_ARCH_CLPS711X is not set | ||||
| # CONFIG_ARCH_CO285 is not set | ||||
| # CONFIG_ARCH_EBSA110 is not set | ||||
| # CONFIG_ARCH_FOOTBRIDGE is not set | ||||
| # CONFIG_ARCH_INTEGRATOR is not set | ||||
| CONFIG_ARCH_IOP3XX=y | ||||
| # CONFIG_ARCH_IXP4XX is not set | ||||
| # CONFIG_ARCH_IXP2000 is not set | ||||
| # CONFIG_ARCH_L7200 is not set | ||||
| # CONFIG_ARCH_PXA is not set | ||||
| # CONFIG_ARCH_RPC is not set | ||||
| # CONFIG_ARCH_SA1100 is not set | ||||
| # CONFIG_ARCH_S3C2410 is not set | ||||
| # CONFIG_ARCH_SHARK is not set | ||||
| # CONFIG_ARCH_LH7A40X is not set | ||||
| # CONFIG_ARCH_OMAP is not set | ||||
| # CONFIG_ARCH_VERSATILE is not set | ||||
| # CONFIG_ARCH_IMX is not set | ||||
| # CONFIG_ARCH_H720X is not set | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Implementation Options | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Platform Types | ||||
| # | ||||
| # CONFIG_ARCH_IQ80321 is not set | ||||
| # CONFIG_ARCH_IQ31244 is not set | ||||
| CONFIG_ARCH_IQ80331=y | ||||
| # CONFIG_MACH_IQ80332 is not set | ||||
| # CONFIG_ARCH_EP80219 is not set | ||||
| CONFIG_ARCH_IOP331=y | ||||
| 
 | ||||
| # | ||||
| # IOP3xx Chipset Features | ||||
| # | ||||
| CONFIG_IOP331_STEPD=y | ||||
| 
 | ||||
| # | ||||
| # Processor Type | ||||
| # | ||||
| CONFIG_CPU_32=y | ||||
| CONFIG_CPU_XSCALE=y | ||||
| CONFIG_CPU_32v5=y | ||||
| CONFIG_CPU_ABRT_EV5T=y | ||||
| CONFIG_CPU_CACHE_VIVT=y | ||||
| CONFIG_CPU_TLB_V4WBI=y | ||||
| CONFIG_CPU_MINICACHE=y | ||||
| 
 | ||||
| # | ||||
| # Processor Features | ||||
| # | ||||
| # CONFIG_ARM_THUMB is not set | ||||
| CONFIG_XSCALE_PMU=y | ||||
| 
 | ||||
| # | ||||
| # Bus support | ||||
| # | ||||
| CONFIG_PCI=y | ||||
| # CONFIG_PCI_LEGACY_PROC is not set | ||||
| CONFIG_PCI_NAMES=y | ||||
| 
 | ||||
| # | ||||
| # PCCARD (PCMCIA/CardBus) support | ||||
| # | ||||
| # CONFIG_PCCARD is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel Features | ||||
| # | ||||
| # CONFIG_PREEMPT is not set | ||||
| CONFIG_ALIGNMENT_TRAP=y | ||||
| 
 | ||||
| # | ||||
| # Boot options | ||||
| # | ||||
| CONFIG_ZBOOT_ROM_TEXT=0x0 | ||||
| CONFIG_ZBOOT_ROM_BSS=0x0 | ||||
| CONFIG_CMDLINE="ip=boot root=nfs console=ttyS0,115200" | ||||
| # CONFIG_XIP_KERNEL is not set | ||||
| 
 | ||||
| # | ||||
| # Floating point emulation | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # At least one emulation must be selected | ||||
| # | ||||
| CONFIG_FPE_NWFPE=y | ||||
| # CONFIG_FPE_NWFPE_XP is not set | ||||
| # CONFIG_FPE_FASTFPE is not set | ||||
| 
 | ||||
| # | ||||
| # Userspace binary formats | ||||
| # | ||||
| CONFIG_BINFMT_ELF=y | ||||
| CONFIG_BINFMT_AOUT=y | ||||
| # CONFIG_BINFMT_MISC is not set | ||||
| # CONFIG_ARTHUR is not set | ||||
| 
 | ||||
| # | ||||
| # Power management options | ||||
| # | ||||
| # CONFIG_PM is not set | ||||
| 
 | ||||
| # | ||||
| # Device Drivers | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Generic Driver Options | ||||
| # | ||||
| CONFIG_STANDALONE=y | ||||
| CONFIG_PREVENT_FIRMWARE_BUILD=y | ||||
| # CONFIG_FW_LOADER is not set | ||||
| 
 | ||||
| # | ||||
| # Memory Technology Devices (MTD) | ||||
| # | ||||
| CONFIG_MTD=y | ||||
| # CONFIG_MTD_DEBUG is not set | ||||
| # CONFIG_MTD_CONCAT is not set | ||||
| CONFIG_MTD_PARTITIONS=y | ||||
| CONFIG_MTD_REDBOOT_PARTS=y | ||||
| CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 | ||||
| CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y | ||||
| CONFIG_MTD_REDBOOT_PARTS_READONLY=y | ||||
| # CONFIG_MTD_CMDLINE_PARTS is not set | ||||
| # CONFIG_MTD_AFS_PARTS is not set | ||||
| 
 | ||||
| # | ||||
| # User Modules And Translation Layers | ||||
| # | ||||
| CONFIG_MTD_CHAR=y | ||||
| CONFIG_MTD_BLOCK=y | ||||
| # CONFIG_FTL is not set | ||||
| # CONFIG_NFTL is not set | ||||
| # CONFIG_INFTL is not set | ||||
| 
 | ||||
| # | ||||
| # RAM/ROM/Flash chip drivers | ||||
| # | ||||
| CONFIG_MTD_CFI=y | ||||
| # CONFIG_MTD_JEDECPROBE is not set | ||||
| CONFIG_MTD_GEN_PROBE=y | ||||
| CONFIG_MTD_CFI_ADV_OPTIONS=y | ||||
| CONFIG_MTD_CFI_NOSWAP=y | ||||
| # CONFIG_MTD_CFI_BE_BYTE_SWAP is not set | ||||
| # CONFIG_MTD_CFI_LE_BYTE_SWAP is not set | ||||
| # CONFIG_MTD_CFI_GEOMETRY is not set | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||||
| CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||||
| # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||||
| CONFIG_MTD_CFI_I1=y | ||||
| CONFIG_MTD_CFI_I2=y | ||||
| # CONFIG_MTD_CFI_I4 is not set | ||||
| # CONFIG_MTD_CFI_I8 is not set | ||||
| CONFIG_MTD_CFI_INTELEXT=y | ||||
| # CONFIG_MTD_CFI_AMDSTD is not set | ||||
| # CONFIG_MTD_CFI_STAA is not set | ||||
| CONFIG_MTD_CFI_UTIL=y | ||||
| # CONFIG_MTD_RAM is not set | ||||
| # CONFIG_MTD_ROM is not set | ||||
| # CONFIG_MTD_ABSENT is not set | ||||
| # CONFIG_MTD_XIP is not set | ||||
| 
 | ||||
| # | ||||
| # Mapping drivers for chip access | ||||
| # | ||||
| # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||||
| CONFIG_MTD_PHYSMAP=y | ||||
| CONFIG_MTD_PHYSMAP_START=0xc0000000 | ||||
| CONFIG_MTD_PHYSMAP_LEN=0x00800000 | ||||
| CONFIG_MTD_PHYSMAP_BANKWIDTH=1 | ||||
| # CONFIG_MTD_ARM_INTEGRATOR is not set | ||||
| # CONFIG_MTD_EDB7312 is not set | ||||
| 
 | ||||
| # | ||||
| # Self-contained MTD device drivers | ||||
| # | ||||
| # CONFIG_MTD_PMC551 is not set | ||||
| # CONFIG_MTD_SLRAM is not set | ||||
| # CONFIG_MTD_PHRAM is not set | ||||
| # CONFIG_MTD_MTDRAM is not set | ||||
| # CONFIG_MTD_BLKMTD is not set | ||||
| # CONFIG_MTD_BLOCK2MTD is not set | ||||
| 
 | ||||
| # | ||||
| # Disk-On-Chip Device Drivers | ||||
| # | ||||
| # CONFIG_MTD_DOC2000 is not set | ||||
| # CONFIG_MTD_DOC2001 is not set | ||||
| # CONFIG_MTD_DOC2001PLUS is not set | ||||
| 
 | ||||
| # | ||||
| # NAND Flash Device Drivers | ||||
| # | ||||
| # CONFIG_MTD_NAND is not set | ||||
| 
 | ||||
| # | ||||
| # Parallel port support | ||||
| # | ||||
| # CONFIG_PARPORT is not set | ||||
| 
 | ||||
| # | ||||
| # Plug and Play support | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Block devices | ||||
| # | ||||
| # CONFIG_BLK_DEV_FD is not set | ||||
| # CONFIG_BLK_CPQ_DA is not set | ||||
| # CONFIG_BLK_CPQ_CISS_DA is not set | ||||
| # CONFIG_BLK_DEV_DAC960 is not set | ||||
| # CONFIG_BLK_DEV_UMEM is not set | ||||
| # CONFIG_BLK_DEV_COW_COMMON is not set | ||||
| # CONFIG_BLK_DEV_LOOP is not set | ||||
| # CONFIG_BLK_DEV_NBD is not set | ||||
| # CONFIG_BLK_DEV_SX8 is not set | ||||
| CONFIG_BLK_DEV_RAM=y | ||||
| CONFIG_BLK_DEV_RAM_COUNT=16 | ||||
| CONFIG_BLK_DEV_RAM_SIZE=8192 | ||||
| # CONFIG_BLK_DEV_INITRD is not set | ||||
| CONFIG_INITRAMFS_SOURCE="" | ||||
| # CONFIG_CDROM_PKTCDVD is not set | ||||
| 
 | ||||
| # | ||||
| # IO Schedulers | ||||
| # | ||||
| CONFIG_IOSCHED_NOOP=y | ||||
| CONFIG_IOSCHED_AS=y | ||||
| CONFIG_IOSCHED_DEADLINE=y | ||||
| CONFIG_IOSCHED_CFQ=y | ||||
| # CONFIG_ATA_OVER_ETH is not set | ||||
| 
 | ||||
| # | ||||
| # ATA/ATAPI/MFM/RLL support | ||||
| # | ||||
| # CONFIG_IDE is not set | ||||
| 
 | ||||
| # | ||||
| # SCSI device support | ||||
| # | ||||
| CONFIG_SCSI=y | ||||
| CONFIG_SCSI_PROC_FS=y | ||||
| 
 | ||||
| # | ||||
| # SCSI support type (disk, tape, CD-ROM) | ||||
| # | ||||
| CONFIG_BLK_DEV_SD=y | ||||
| # CONFIG_CHR_DEV_ST is not set | ||||
| # CONFIG_CHR_DEV_OSST is not set | ||||
| # CONFIG_BLK_DEV_SR is not set | ||||
| CONFIG_CHR_DEV_SG=y | ||||
| 
 | ||||
| # | ||||
| # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||||
| # | ||||
| # CONFIG_SCSI_MULTI_LUN is not set | ||||
| # CONFIG_SCSI_CONSTANTS is not set | ||||
| # CONFIG_SCSI_LOGGING is not set | ||||
| 
 | ||||
| # | ||||
| # SCSI Transport Attributes | ||||
| # | ||||
| # CONFIG_SCSI_SPI_ATTRS is not set | ||||
| # CONFIG_SCSI_FC_ATTRS is not set | ||||
| # CONFIG_SCSI_ISCSI_ATTRS is not set | ||||
| 
 | ||||
| # | ||||
| # SCSI low-level drivers | ||||
| # | ||||
| # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||||
| # CONFIG_SCSI_3W_9XXX is not set | ||||
| # CONFIG_SCSI_ACARD is not set | ||||
| # CONFIG_SCSI_AACRAID is not set | ||||
| # CONFIG_SCSI_AIC7XXX is not set | ||||
| # CONFIG_SCSI_AIC7XXX_OLD is not set | ||||
| # CONFIG_SCSI_AIC79XX is not set | ||||
| # CONFIG_SCSI_DPT_I2O is not set | ||||
| # CONFIG_MEGARAID_NEWGEN is not set | ||||
| # CONFIG_MEGARAID_LEGACY is not set | ||||
| # CONFIG_SCSI_SATA is not set | ||||
| # CONFIG_SCSI_BUSLOGIC is not set | ||||
| # CONFIG_SCSI_DMX3191D is not set | ||||
| # CONFIG_SCSI_EATA is not set | ||||
| # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||||
| # CONFIG_SCSI_GDTH is not set | ||||
| # CONFIG_SCSI_IPS is not set | ||||
| # CONFIG_SCSI_INITIO is not set | ||||
| # CONFIG_SCSI_INIA100 is not set | ||||
| # CONFIG_SCSI_SYM53C8XX_2 is not set | ||||
| # CONFIG_SCSI_IPR is not set | ||||
| # CONFIG_SCSI_QLOGIC_FC is not set | ||||
| # CONFIG_SCSI_QLOGIC_1280 is not set | ||||
| CONFIG_SCSI_QLA2XXX=y | ||||
| # CONFIG_SCSI_QLA21XX is not set | ||||
| # CONFIG_SCSI_QLA22XX is not set | ||||
| # CONFIG_SCSI_QLA2300 is not set | ||||
| # CONFIG_SCSI_QLA2322 is not set | ||||
| # CONFIG_SCSI_QLA6312 is not set | ||||
| # CONFIG_SCSI_DC395x is not set | ||||
| # CONFIG_SCSI_DC390T is not set | ||||
| # CONFIG_SCSI_NSP32 is not set | ||||
| # CONFIG_SCSI_DEBUG is not set | ||||
| 
 | ||||
| # | ||||
| # Multi-device support (RAID and LVM) | ||||
| # | ||||
| CONFIG_MD=y | ||||
| CONFIG_BLK_DEV_MD=y | ||||
| CONFIG_MD_LINEAR=y | ||||
| CONFIG_MD_RAID0=y | ||||
| CONFIG_MD_RAID1=y | ||||
| # CONFIG_MD_RAID10 is not set | ||||
| CONFIG_MD_RAID5=y | ||||
| # CONFIG_MD_RAID6 is not set | ||||
| # CONFIG_MD_MULTIPATH is not set | ||||
| # CONFIG_MD_FAULTY is not set | ||||
| CONFIG_BLK_DEV_DM=y | ||||
| # CONFIG_DM_CRYPT is not set | ||||
| # CONFIG_DM_SNAPSHOT is not set | ||||
| # CONFIG_DM_MIRROR is not set | ||||
| # CONFIG_DM_ZERO is not set | ||||
| # CONFIG_DM_MULTIPATH is not set | ||||
| 
 | ||||
| # | ||||
| # Fusion MPT device support | ||||
| # | ||||
| # CONFIG_FUSION is not set | ||||
| 
 | ||||
| # | ||||
| # IEEE 1394 (FireWire) support | ||||
| # | ||||
| # CONFIG_IEEE1394 is not set | ||||
| 
 | ||||
| # | ||||
| # I2O device support | ||||
| # | ||||
| # CONFIG_I2O is not set | ||||
| 
 | ||||
| # | ||||
| # Networking support | ||||
| # | ||||
| CONFIG_NET=y | ||||
| 
 | ||||
| # | ||||
| # Networking options | ||||
| # | ||||
| CONFIG_PACKET=y | ||||
| CONFIG_PACKET_MMAP=y | ||||
| # CONFIG_NETLINK_DEV is not set | ||||
| CONFIG_UNIX=y | ||||
| # CONFIG_NET_KEY is not set | ||||
| CONFIG_INET=y | ||||
| CONFIG_IP_MULTICAST=y | ||||
| # CONFIG_IP_ADVANCED_ROUTER is not set | ||||
| CONFIG_IP_PNP=y | ||||
| # CONFIG_IP_PNP_DHCP is not set | ||||
| CONFIG_IP_PNP_BOOTP=y | ||||
| # CONFIG_IP_PNP_RARP is not set | ||||
| # CONFIG_NET_IPIP is not set | ||||
| # CONFIG_NET_IPGRE is not set | ||||
| # CONFIG_IP_MROUTE is not set | ||||
| # CONFIG_ARPD is not set | ||||
| # CONFIG_SYN_COOKIES is not set | ||||
| # CONFIG_INET_AH is not set | ||||
| # CONFIG_INET_ESP is not set | ||||
| # CONFIG_INET_IPCOMP is not set | ||||
| # CONFIG_INET_TUNNEL is not set | ||||
| CONFIG_IP_TCPDIAG=y | ||||
| # CONFIG_IP_TCPDIAG_IPV6 is not set | ||||
| # CONFIG_IPV6 is not set | ||||
| # CONFIG_NETFILTER is not set | ||||
| 
 | ||||
| # | ||||
| # SCTP Configuration (EXPERIMENTAL) | ||||
| # | ||||
| # CONFIG_IP_SCTP is not set | ||||
| # CONFIG_ATM is not set | ||||
| # CONFIG_BRIDGE is not set | ||||
| # CONFIG_VLAN_8021Q is not set | ||||
| # CONFIG_DECNET is not set | ||||
| # CONFIG_LLC2 is not set | ||||
| # CONFIG_IPX is not set | ||||
| # CONFIG_ATALK is not set | ||||
| # CONFIG_X25 is not set | ||||
| # CONFIG_LAPB is not set | ||||
| # CONFIG_NET_DIVERT is not set | ||||
| # CONFIG_ECONET is not set | ||||
| # CONFIG_WAN_ROUTER is not set | ||||
| 
 | ||||
| # | ||||
| # QoS and/or fair queueing | ||||
| # | ||||
| # CONFIG_NET_SCHED is not set | ||||
| # CONFIG_NET_CLS_ROUTE is not set | ||||
| 
 | ||||
| # | ||||
| # Network testing | ||||
| # | ||||
| # CONFIG_NET_PKTGEN is not set | ||||
| # CONFIG_NETPOLL is not set | ||||
| # CONFIG_NET_POLL_CONTROLLER is not set | ||||
| # CONFIG_HAMRADIO is not set | ||||
| # CONFIG_IRDA is not set | ||||
| # CONFIG_BT is not set | ||||
| CONFIG_NETDEVICES=y | ||||
| # CONFIG_DUMMY is not set | ||||
| # CONFIG_BONDING is not set | ||||
| # CONFIG_EQUALIZER is not set | ||||
| # CONFIG_TUN is not set | ||||
| 
 | ||||
| # | ||||
| # ARCnet devices | ||||
| # | ||||
| # CONFIG_ARCNET is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (10 or 100Mbit) | ||||
| # | ||||
| # CONFIG_NET_ETHERNET is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (1000 Mbit) | ||||
| # | ||||
| # CONFIG_ACENIC is not set | ||||
| # CONFIG_DL2K is not set | ||||
| CONFIG_E1000=y | ||||
| CONFIG_E1000_NAPI=y | ||||
| # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | ||||
| # CONFIG_NS83820 is not set | ||||
| # CONFIG_HAMACHI is not set | ||||
| # CONFIG_YELLOWFIN is not set | ||||
| # CONFIG_R8169 is not set | ||||
| # CONFIG_SK98LIN is not set | ||||
| # CONFIG_TIGON3 is not set | ||||
| 
 | ||||
| # | ||||
| # Ethernet (10000 Mbit) | ||||
| # | ||||
| # CONFIG_IXGB is not set | ||||
| # CONFIG_S2IO is not set | ||||
| 
 | ||||
| # | ||||
| # Token Ring devices | ||||
| # | ||||
| # CONFIG_TR is not set | ||||
| 
 | ||||
| # | ||||
| # Wireless LAN (non-hamradio) | ||||
| # | ||||
| # CONFIG_NET_RADIO is not set | ||||
| 
 | ||||
| # | ||||
| # Wan interfaces | ||||
| # | ||||
| # CONFIG_WAN is not set | ||||
| # CONFIG_FDDI is not set | ||||
| # CONFIG_HIPPI is not set | ||||
| # CONFIG_PPP is not set | ||||
| # CONFIG_SLIP is not set | ||||
| # CONFIG_NET_FC is not set | ||||
| # CONFIG_SHAPER is not set | ||||
| # CONFIG_NETCONSOLE is not set | ||||
| 
 | ||||
| # | ||||
| # ISDN subsystem | ||||
| # | ||||
| # CONFIG_ISDN is not set | ||||
| 
 | ||||
| # | ||||
| # Input device support | ||||
| # | ||||
| CONFIG_INPUT=y | ||||
| 
 | ||||
| # | ||||
| # Userland interfaces | ||||
| # | ||||
| CONFIG_INPUT_MOUSEDEV=y | ||||
| # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||||
| CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||||
| CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||||
| # CONFIG_INPUT_JOYDEV is not set | ||||
| # CONFIG_INPUT_TSDEV is not set | ||||
| # CONFIG_INPUT_EVDEV is not set | ||||
| # CONFIG_INPUT_EVBUG is not set | ||||
| 
 | ||||
| # | ||||
| # Input Device Drivers | ||||
| # | ||||
| # CONFIG_INPUT_KEYBOARD is not set | ||||
| # CONFIG_INPUT_MOUSE is not set | ||||
| # CONFIG_INPUT_JOYSTICK is not set | ||||
| # CONFIG_INPUT_TOUCHSCREEN is not set | ||||
| # CONFIG_INPUT_MISC is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware I/O ports | ||||
| # | ||||
| # CONFIG_SERIO is not set | ||||
| # CONFIG_GAMEPORT is not set | ||||
| CONFIG_SOUND_GAMEPORT=y | ||||
| 
 | ||||
| # | ||||
| # Character devices | ||||
| # | ||||
| CONFIG_VT=y | ||||
| CONFIG_VT_CONSOLE=y | ||||
| CONFIG_HW_CONSOLE=y | ||||
| # CONFIG_SERIAL_NONSTANDARD is not set | ||||
| 
 | ||||
| # | ||||
| # Serial drivers | ||||
| # | ||||
| CONFIG_SERIAL_8250=y | ||||
| CONFIG_SERIAL_8250_CONSOLE=y | ||||
| CONFIG_SERIAL_8250_NR_UARTS=4 | ||||
| # CONFIG_SERIAL_8250_EXTENDED is not set | ||||
| 
 | ||||
| # | ||||
| # Non-8250 serial port support | ||||
| # | ||||
| CONFIG_SERIAL_CORE=y | ||||
| CONFIG_SERIAL_CORE_CONSOLE=y | ||||
| CONFIG_UNIX98_PTYS=y | ||||
| CONFIG_LEGACY_PTYS=y | ||||
| CONFIG_LEGACY_PTY_COUNT=256 | ||||
| 
 | ||||
| # | ||||
| # IPMI | ||||
| # | ||||
| # CONFIG_IPMI_HANDLER is not set | ||||
| 
 | ||||
| # | ||||
| # Watchdog Cards | ||||
| # | ||||
| # CONFIG_WATCHDOG is not set | ||||
| # CONFIG_NVRAM is not set | ||||
| # CONFIG_RTC is not set | ||||
| # CONFIG_DTLK is not set | ||||
| # CONFIG_R3964 is not set | ||||
| # CONFIG_APPLICOM is not set | ||||
| 
 | ||||
| # | ||||
| # Ftape, the floppy tape device driver | ||||
| # | ||||
| # CONFIG_DRM is not set | ||||
| # CONFIG_RAW_DRIVER is not set | ||||
| 
 | ||||
| # | ||||
| # TPM devices | ||||
| # | ||||
| # CONFIG_TCG_TPM is not set | ||||
| 
 | ||||
| # | ||||
| # I2C support | ||||
| # | ||||
| CONFIG_I2C=y | ||||
| CONFIG_I2C_CHARDEV=y | ||||
| 
 | ||||
| # | ||||
| # I2C Algorithms | ||||
| # | ||||
| # CONFIG_I2C_ALGOBIT is not set | ||||
| # CONFIG_I2C_ALGOPCF is not set | ||||
| # CONFIG_I2C_ALGOPCA is not set | ||||
| 
 | ||||
| # | ||||
| # I2C Hardware Bus support | ||||
| # | ||||
| # CONFIG_I2C_ALI1535 is not set | ||||
| # CONFIG_I2C_ALI1563 is not set | ||||
| # CONFIG_I2C_ALI15X3 is not set | ||||
| # CONFIG_I2C_AMD756 is not set | ||||
| # CONFIG_I2C_AMD8111 is not set | ||||
| # CONFIG_I2C_I801 is not set | ||||
| # CONFIG_I2C_I810 is not set | ||||
| CONFIG_I2C_IOP3XX=y | ||||
| # CONFIG_I2C_ISA is not set | ||||
| # CONFIG_I2C_NFORCE2 is not set | ||||
| # CONFIG_I2C_PARPORT_LIGHT is not set | ||||
| # CONFIG_I2C_PIIX4 is not set | ||||
| # CONFIG_I2C_PROSAVAGE is not set | ||||
| # CONFIG_I2C_SAVAGE4 is not set | ||||
| # CONFIG_SCx200_ACB is not set | ||||
| # CONFIG_I2C_SIS5595 is not set | ||||
| # CONFIG_I2C_SIS630 is not set | ||||
| # CONFIG_I2C_SIS96X is not set | ||||
| # CONFIG_I2C_STUB is not set | ||||
| # CONFIG_I2C_VIA is not set | ||||
| # CONFIG_I2C_VIAPRO is not set | ||||
| # CONFIG_I2C_VOODOO3 is not set | ||||
| # CONFIG_I2C_PCA_ISA is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware Sensors Chip support | ||||
| # | ||||
| # CONFIG_I2C_SENSOR is not set | ||||
| # CONFIG_SENSORS_ADM1021 is not set | ||||
| # CONFIG_SENSORS_ADM1025 is not set | ||||
| # CONFIG_SENSORS_ADM1026 is not set | ||||
| # CONFIG_SENSORS_ADM1031 is not set | ||||
| # CONFIG_SENSORS_ASB100 is not set | ||||
| # CONFIG_SENSORS_DS1621 is not set | ||||
| # CONFIG_SENSORS_FSCHER is not set | ||||
| # CONFIG_SENSORS_FSCPOS is not set | ||||
| # CONFIG_SENSORS_GL518SM is not set | ||||
| # CONFIG_SENSORS_GL520SM is not set | ||||
| # CONFIG_SENSORS_IT87 is not set | ||||
| # CONFIG_SENSORS_LM63 is not set | ||||
| # CONFIG_SENSORS_LM75 is not set | ||||
| # CONFIG_SENSORS_LM77 is not set | ||||
| # CONFIG_SENSORS_LM78 is not set | ||||
| # CONFIG_SENSORS_LM80 is not set | ||||
| # CONFIG_SENSORS_LM83 is not set | ||||
| # CONFIG_SENSORS_LM85 is not set | ||||
| # CONFIG_SENSORS_LM87 is not set | ||||
| # CONFIG_SENSORS_LM90 is not set | ||||
| # CONFIG_SENSORS_MAX1619 is not set | ||||
| # CONFIG_SENSORS_PC87360 is not set | ||||
| # CONFIG_SENSORS_SMSC47B397 is not set | ||||
| # CONFIG_SENSORS_SIS5595 is not set | ||||
| # CONFIG_SENSORS_SMSC47M1 is not set | ||||
| # CONFIG_SENSORS_VIA686A is not set | ||||
| # CONFIG_SENSORS_W83781D is not set | ||||
| # CONFIG_SENSORS_W83L785TS is not set | ||||
| # CONFIG_SENSORS_W83627HF is not set | ||||
| 
 | ||||
| # | ||||
| # Other I2C Chip support | ||||
| # | ||||
| # CONFIG_SENSORS_EEPROM is not set | ||||
| # CONFIG_SENSORS_PCF8574 is not set | ||||
| # CONFIG_SENSORS_PCF8591 is not set | ||||
| # CONFIG_SENSORS_RTC8564 is not set | ||||
| # CONFIG_I2C_DEBUG_CORE is not set | ||||
| # CONFIG_I2C_DEBUG_ALGO is not set | ||||
| # CONFIG_I2C_DEBUG_BUS is not set | ||||
| # CONFIG_I2C_DEBUG_CHIP is not set | ||||
| 
 | ||||
| # | ||||
| # Misc devices | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Multimedia devices | ||||
| # | ||||
| # CONFIG_VIDEO_DEV is not set | ||||
| 
 | ||||
| # | ||||
| # Digital Video Broadcasting Devices | ||||
| # | ||||
| # CONFIG_DVB is not set | ||||
| 
 | ||||
| # | ||||
| # Graphics support | ||||
| # | ||||
| # CONFIG_FB is not set | ||||
| 
 | ||||
| # | ||||
| # Console display driver support | ||||
| # | ||||
| # CONFIG_VGA_CONSOLE is not set | ||||
| CONFIG_DUMMY_CONSOLE=y | ||||
| 
 | ||||
| # | ||||
| # Sound | ||||
| # | ||||
| # CONFIG_SOUND is not set | ||||
| 
 | ||||
| # | ||||
| # USB support | ||||
| # | ||||
| CONFIG_USB_ARCH_HAS_HCD=y | ||||
| CONFIG_USB_ARCH_HAS_OHCI=y | ||||
| # CONFIG_USB is not set | ||||
| 
 | ||||
| # | ||||
| # USB Gadget Support | ||||
| # | ||||
| # CONFIG_USB_GADGET is not set | ||||
| 
 | ||||
| # | ||||
| # MMC/SD Card support | ||||
| # | ||||
| # CONFIG_MMC is not set | ||||
| 
 | ||||
| # | ||||
| # File systems | ||||
| # | ||||
| CONFIG_EXT2_FS=y | ||||
| # CONFIG_EXT2_FS_XATTR is not set | ||||
| CONFIG_EXT3_FS=y | ||||
| CONFIG_EXT3_FS_XATTR=y | ||||
| # CONFIG_EXT3_FS_POSIX_ACL is not set | ||||
| # CONFIG_EXT3_FS_SECURITY is not set | ||||
| CONFIG_JBD=y | ||||
| # CONFIG_JBD_DEBUG is not set | ||||
| CONFIG_FS_MBCACHE=y | ||||
| # CONFIG_REISERFS_FS is not set | ||||
| # CONFIG_JFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # XFS support | ||||
| # | ||||
| CONFIG_XFS_FS=y | ||||
| CONFIG_XFS_EXPORT=y | ||||
| # CONFIG_XFS_RT is not set | ||||
| # CONFIG_XFS_QUOTA is not set | ||||
| CONFIG_XFS_SECURITY=y | ||||
| CONFIG_XFS_POSIX_ACL=y | ||||
| # CONFIG_MINIX_FS is not set | ||||
| # CONFIG_ROMFS_FS is not set | ||||
| # CONFIG_QUOTA is not set | ||||
| CONFIG_DNOTIFY=y | ||||
| # CONFIG_AUTOFS_FS is not set | ||||
| # CONFIG_AUTOFS4_FS is not set | ||||
| 
 | ||||
| # | ||||
| # CD-ROM/DVD Filesystems | ||||
| # | ||||
| # CONFIG_ISO9660_FS is not set | ||||
| # CONFIG_UDF_FS is not set | ||||
| 
 | ||||
| # | ||||
| # DOS/FAT/NT Filesystems | ||||
| # | ||||
| # CONFIG_MSDOS_FS is not set | ||||
| # CONFIG_VFAT_FS is not set | ||||
| # CONFIG_NTFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Pseudo filesystems | ||||
| # | ||||
| CONFIG_PROC_FS=y | ||||
| CONFIG_SYSFS=y | ||||
| # CONFIG_DEVFS_FS is not set | ||||
| # CONFIG_DEVPTS_FS_XATTR is not set | ||||
| CONFIG_TMPFS=y | ||||
| # CONFIG_TMPFS_XATTR is not set | ||||
| # CONFIG_HUGETLB_PAGE is not set | ||||
| CONFIG_RAMFS=y | ||||
| 
 | ||||
| # | ||||
| # Miscellaneous filesystems | ||||
| # | ||||
| # CONFIG_ADFS_FS is not set | ||||
| # CONFIG_AFFS_FS is not set | ||||
| # CONFIG_HFS_FS is not set | ||||
| # CONFIG_HFSPLUS_FS is not set | ||||
| # CONFIG_BEFS_FS is not set | ||||
| # CONFIG_BFS_FS is not set | ||||
| # CONFIG_EFS_FS is not set | ||||
| # CONFIG_JFFS_FS is not set | ||||
| # CONFIG_JFFS2_FS is not set | ||||
| # CONFIG_CRAMFS is not set | ||||
| # CONFIG_VXFS_FS is not set | ||||
| # CONFIG_HPFS_FS is not set | ||||
| # CONFIG_QNX4FS_FS is not set | ||||
| # CONFIG_SYSV_FS is not set | ||||
| # CONFIG_UFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Network File Systems | ||||
| # | ||||
| CONFIG_NFS_FS=y | ||||
| CONFIG_NFS_V3=y | ||||
| # CONFIG_NFS_V4 is not set | ||||
| # CONFIG_NFS_DIRECTIO is not set | ||||
| CONFIG_NFSD=y | ||||
| CONFIG_NFSD_V3=y | ||||
| # CONFIG_NFSD_V4 is not set | ||||
| # CONFIG_NFSD_TCP is not set | ||||
| CONFIG_ROOT_NFS=y | ||||
| CONFIG_LOCKD=y | ||||
| CONFIG_LOCKD_V4=y | ||||
| CONFIG_EXPORTFS=y | ||||
| CONFIG_SUNRPC=y | ||||
| # CONFIG_RPCSEC_GSS_KRB5 is not set | ||||
| # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||||
| # CONFIG_SMB_FS is not set | ||||
| # CONFIG_CIFS is not set | ||||
| # CONFIG_NCP_FS is not set | ||||
| # CONFIG_CODA_FS is not set | ||||
| # CONFIG_AFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Partition Types | ||||
| # | ||||
| CONFIG_PARTITION_ADVANCED=y | ||||
| # CONFIG_ACORN_PARTITION is not set | ||||
| # CONFIG_OSF_PARTITION is not set | ||||
| # CONFIG_AMIGA_PARTITION is not set | ||||
| # CONFIG_ATARI_PARTITION is not set | ||||
| # CONFIG_MAC_PARTITION is not set | ||||
| CONFIG_MSDOS_PARTITION=y | ||||
| # CONFIG_BSD_DISKLABEL is not set | ||||
| # CONFIG_MINIX_SUBPARTITION is not set | ||||
| # CONFIG_SOLARIS_X86_PARTITION is not set | ||||
| # CONFIG_UNIXWARE_DISKLABEL is not set | ||||
| # CONFIG_LDM_PARTITION is not set | ||||
| # CONFIG_SGI_PARTITION is not set | ||||
| # CONFIG_ULTRIX_PARTITION is not set | ||||
| # CONFIG_SUN_PARTITION is not set | ||||
| # CONFIG_EFI_PARTITION is not set | ||||
| 
 | ||||
| # | ||||
| # Native Language Support | ||||
| # | ||||
| # CONFIG_NLS is not set | ||||
| 
 | ||||
| # | ||||
| # Profiling support | ||||
| # | ||||
| # CONFIG_PROFILING is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel hacking | ||||
| # | ||||
| # CONFIG_PRINTK_TIME is not set | ||||
| # CONFIG_DEBUG_KERNEL is not set | ||||
| CONFIG_LOG_BUF_SHIFT=14 | ||||
| CONFIG_DEBUG_BUGVERBOSE=y | ||||
| CONFIG_FRAME_POINTER=y | ||||
| CONFIG_DEBUG_USER=y | ||||
| 
 | ||||
| # | ||||
| # Security options | ||||
| # | ||||
| # CONFIG_KEYS is not set | ||||
| # CONFIG_SECURITY is not set | ||||
| 
 | ||||
| # | ||||
| # Cryptographic options | ||||
| # | ||||
| # CONFIG_CRYPTO is not set | ||||
| 
 | ||||
| # | ||||
| # Hardware crypto devices | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Library routines | ||||
| # | ||||
| # CONFIG_CRC_CCITT is not set | ||||
| # CONFIG_CRC32 is not set | ||||
| # CONFIG_LIBCRC32C is not set | ||||
|  | @ -1,14 +1,19 @@ | |||
| # | ||||
| # Automatically generated make config: don't edit | ||||
| # Linux kernel version: 2.6.17-git9 | ||||
| # Sun Jun 25 23:56:32 2006 | ||||
| # Linux kernel version: 2.6.18 | ||||
| # Wed Sep 20 20:27:31 2006 | ||||
| # | ||||
| CONFIG_ARM=y | ||||
| CONFIG_MMU=y | ||||
| CONFIG_GENERIC_HARDIRQS=y | ||||
| CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||||
| CONFIG_HARDIRQS_SW_RESEND=y | ||||
| CONFIG_GENERIC_IRQ_PROBE=y | ||||
| CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||||
| CONFIG_GENERIC_HWEIGHT=y | ||||
| CONFIG_GENERIC_CALIBRATE_DELAY=y | ||||
| CONFIG_VECTORS_BASE=0xffff0000 | ||||
| CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||||
| 
 | ||||
| # | ||||
| # Code maturity level options | ||||
|  | @ -26,14 +31,15 @@ CONFIG_SWAP=y | |||
| CONFIG_SYSVIPC=y | ||||
| # CONFIG_POSIX_MQUEUE is not set | ||||
| # CONFIG_BSD_PROCESS_ACCT is not set | ||||
| CONFIG_SYSCTL=y | ||||
| # CONFIG_TASKSTATS is not set | ||||
| # CONFIG_AUDIT is not set | ||||
| # CONFIG_IKCONFIG is not set | ||||
| # CONFIG_RELAY is not set | ||||
| CONFIG_INITRAMFS_SOURCE="" | ||||
| CONFIG_UID16=y | ||||
| CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||||
| # CONFIG_EMBEDDED is not set | ||||
| CONFIG_UID16=y | ||||
| CONFIG_SYSCTL=y | ||||
| CONFIG_KALLSYMS=y | ||||
| # CONFIG_KALLSYMS_ALL is not set | ||||
| # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||||
|  | @ -46,6 +52,8 @@ CONFIG_FUTEX=y | |||
| CONFIG_EPOLL=y | ||||
| CONFIG_SHMEM=y | ||||
| CONFIG_SLAB=y | ||||
| CONFIG_VM_EVENT_COUNTERS=y | ||||
| CONFIG_RT_MUTEXES=y | ||||
| # CONFIG_TINY_SHMEM is not set | ||||
| CONFIG_BASE_SMALL=0 | ||||
| # CONFIG_SLOB is not set | ||||
|  | @ -84,7 +92,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
| # CONFIG_ARCH_INTEGRATOR is not set | ||||
| # CONFIG_ARCH_REALVIEW is not set | ||||
| # CONFIG_ARCH_VERSATILE is not set | ||||
| # CONFIG_ARCH_AT91RM9200 is not set | ||||
| # CONFIG_ARCH_AT91 is not set | ||||
| # CONFIG_ARCH_CLPS7500 is not set | ||||
| # CONFIG_ARCH_CLPS711X is not set | ||||
| # CONFIG_ARCH_CO285 is not set | ||||
|  | @ -94,7 +102,8 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
| # CONFIG_ARCH_NETX is not set | ||||
| # CONFIG_ARCH_H720X is not set | ||||
| # CONFIG_ARCH_IMX is not set | ||||
| # CONFIG_ARCH_IOP3XX is not set | ||||
| # CONFIG_ARCH_IOP32X is not set | ||||
| # CONFIG_ARCH_IOP33X is not set | ||||
| # CONFIG_ARCH_IXP4XX is not set | ||||
| # CONFIG_ARCH_IXP2000 is not set | ||||
| # CONFIG_ARCH_IXP23XX is not set | ||||
|  | @ -122,13 +131,18 @@ CONFIG_ARCH_SMDK2410=y | |||
| CONFIG_ARCH_S3C2440=y | ||||
| CONFIG_SMDK2440_CPU2440=y | ||||
| CONFIG_SMDK2440_CPU2442=y | ||||
| CONFIG_MACH_S3C2413=y | ||||
| CONFIG_MACH_SMDK2413=y | ||||
| CONFIG_MACH_VR1000=y | ||||
| CONFIG_MACH_RX3715=y | ||||
| CONFIG_MACH_OTOM=y | ||||
| CONFIG_MACH_NEXCODER_2440=y | ||||
| CONFIG_MACH_VSTMS=y | ||||
| CONFIG_S3C2410_CLOCK=y | ||||
| CONFIG_S3C2410_PM=y | ||||
| CONFIG_CPU_S3C2410_DMA=y | ||||
| CONFIG_CPU_S3C2410=y | ||||
| CONFIG_S3C2412_PM=y | ||||
| CONFIG_CPU_S3C2412=y | ||||
| CONFIG_CPU_S3C244X=y | ||||
| CONFIG_CPU_S3C2440=y | ||||
|  | @ -156,7 +170,7 @@ CONFIG_S3C2410_LOWLEVEL_UART_PORT=0 | |||
| CONFIG_CPU_32=y | ||||
| CONFIG_CPU_ARM920T=y | ||||
| CONFIG_CPU_ARM926T=y | ||||
| CONFIG_CPU_32v4=y | ||||
| CONFIG_CPU_32v4T=y | ||||
| CONFIG_CPU_32v5=y | ||||
| CONFIG_CPU_ABRT_EV4T=y | ||||
| CONFIG_CPU_ABRT_EV5TJ=y | ||||
|  | @ -200,6 +214,7 @@ CONFIG_FLATMEM=y | |||
| CONFIG_FLAT_NODE_MEM_MAP=y | ||||
| # CONFIG_SPARSEMEM_STATIC is not set | ||||
| CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||||
| # CONFIG_RESOURCES_64BIT is not set | ||||
| CONFIG_ALIGNMENT_TRAP=y | ||||
| 
 | ||||
| # | ||||
|  | @ -304,7 +319,6 @@ CONFIG_TCP_CONG_BIC=y | |||
| # CONFIG_ATALK is not set | ||||
| # CONFIG_X25 is not set | ||||
| # CONFIG_LAPB is not set | ||||
| # CONFIG_NET_DIVERT is not set | ||||
| # CONFIG_ECONET is not set | ||||
| # CONFIG_WAN_ROUTER is not set | ||||
| 
 | ||||
|  | @ -460,6 +474,7 @@ CONFIG_BLK_DEV_NBD=m | |||
| CONFIG_BLK_DEV_RAM=y | ||||
| CONFIG_BLK_DEV_RAM_COUNT=16 | ||||
| CONFIG_BLK_DEV_RAM_SIZE=4096 | ||||
| CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||||
| CONFIG_BLK_DEV_INITRD=y | ||||
| # CONFIG_CDROM_PKTCDVD is not set | ||||
| CONFIG_ATA_OVER_ETH=m | ||||
|  | @ -640,6 +655,7 @@ CONFIG_SERIO_LIBPS2=y | |||
| CONFIG_VT=y | ||||
| CONFIG_VT_CONSOLE=y | ||||
| CONFIG_HW_CONSOLE=y | ||||
| # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||||
| CONFIG_SERIAL_NONSTANDARD=y | ||||
| # CONFIG_COMPUTONE is not set | ||||
| # CONFIG_ROCKETPORT is not set | ||||
|  | @ -716,6 +732,7 @@ CONFIG_S3C2410_WATCHDOG=y | |||
| # USB-based Watchdog Cards | ||||
| # | ||||
| # CONFIG_USBPCWATCHDOG is not set | ||||
| CONFIG_HW_RANDOM=y | ||||
| # CONFIG_NVRAM is not set | ||||
| CONFIG_S3C2410_RTC=y | ||||
| # CONFIG_DTLK is not set | ||||
|  | @ -857,12 +874,12 @@ CONFIG_VIDEO_V4L2=y | |||
| # | ||||
| # Graphics support | ||||
| # | ||||
| CONFIG_FIRMWARE_EDID=y | ||||
| CONFIG_FB=y | ||||
| CONFIG_FB_CFB_FILLRECT=y | ||||
| CONFIG_FB_CFB_COPYAREA=y | ||||
| CONFIG_FB_CFB_IMAGEBLIT=y | ||||
| # CONFIG_FB_MACMODES is not set | ||||
| CONFIG_FB_FIRMWARE_EDID=y | ||||
| # CONFIG_FB_BACKLIGHT is not set | ||||
| CONFIG_FB_MODE_HELPERS=y | ||||
| # CONFIG_FB_TILEBLITTING is not set | ||||
|  | @ -995,7 +1012,7 @@ CONFIG_USB_MON=y | |||
| # CONFIG_USB_LEGOTOWER is not set | ||||
| # CONFIG_USB_LCD is not set | ||||
| # CONFIG_USB_LED is not set | ||||
| # CONFIG_USB_CY7C63 is not set | ||||
| # CONFIG_USB_CYPRESS_CY7C63 is not set | ||||
| # CONFIG_USB_CYTHERM is not set | ||||
| # CONFIG_USB_PHIDGETKIT is not set | ||||
| # CONFIG_USB_PHIDGETSERVO is not set | ||||
|  | @ -1095,6 +1112,7 @@ CONFIG_JFFS2_FS=y | |||
| CONFIG_JFFS2_FS_DEBUG=0 | ||||
| CONFIG_JFFS2_FS_WRITEBUFFER=y | ||||
| # CONFIG_JFFS2_SUMMARY is not set | ||||
| # CONFIG_JFFS2_FS_XATTR is not set | ||||
| # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||||
| CONFIG_JFFS2_ZLIB=y | ||||
| CONFIG_JFFS2_RTIME=y | ||||
|  | @ -1202,14 +1220,19 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| # | ||||
| # CONFIG_PRINTK_TIME is not set | ||||
| CONFIG_MAGIC_SYSRQ=y | ||||
| # CONFIG_UNUSED_SYMBOLS is not set | ||||
| CONFIG_DEBUG_KERNEL=y | ||||
| CONFIG_LOG_BUF_SHIFT=16 | ||||
| CONFIG_DETECT_SOFTLOCKUP=y | ||||
| # CONFIG_SCHEDSTATS is not set | ||||
| # CONFIG_DEBUG_SLAB is not set | ||||
| CONFIG_DEBUG_MUTEXES=y | ||||
| # CONFIG_DEBUG_RT_MUTEXES is not set | ||||
| # CONFIG_RT_MUTEX_TESTER is not set | ||||
| # CONFIG_DEBUG_SPINLOCK is not set | ||||
| CONFIG_DEBUG_MUTEXES=y | ||||
| # CONFIG_DEBUG_RWSEMS is not set | ||||
| # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||||
| # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||||
| # CONFIG_DEBUG_KOBJECT is not set | ||||
| CONFIG_DEBUG_BUGVERBOSE=y | ||||
| CONFIG_DEBUG_INFO=y | ||||
|  | @ -1251,3 +1274,4 @@ CONFIG_CRC32=y | |||
| # CONFIG_LIBCRC32C is not set | ||||
| CONFIG_ZLIB_INFLATE=y | ||||
| CONFIG_ZLIB_DEFLATE=y | ||||
| CONFIG_PLIST=y | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ | |||
| #include <linux/list.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/completion.h> | ||||
| #include <linux/kthread.h> | ||||
| 
 | ||||
| #include <asm/apm.h> /* apm_power_info */ | ||||
| #include <asm/system.h> | ||||
|  | @ -80,7 +81,7 @@ struct apm_user { | |||
|  */ | ||||
| static int suspends_pending; | ||||
| static int apm_disabled; | ||||
| static int arm_apm_active; | ||||
| static struct task_struct *kapmd_tsk; | ||||
| 
 | ||||
| static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue); | ||||
| static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); | ||||
|  | @ -97,7 +98,6 @@ static LIST_HEAD(apm_user_list); | |||
|  * to be suspending the system. | ||||
|  */ | ||||
| static DECLARE_WAIT_QUEUE_HEAD(kapmd_wait); | ||||
| static DECLARE_COMPLETION(kapmd_exit); | ||||
| static DEFINE_SPINLOCK(kapmd_queue_lock); | ||||
| static struct apm_queue kapmd_queue; | ||||
| 
 | ||||
|  | @ -468,16 +468,13 @@ static int apm_get_info(char *buf, char **start, off_t fpos, int length) | |||
| 
 | ||||
| static int kapmd(void *arg) | ||||
| { | ||||
| 	daemonize("kapmd"); | ||||
| 	current->flags |= PF_NOFREEZE; | ||||
| 
 | ||||
| 	do { | ||||
| 		apm_event_t event; | ||||
| 
 | ||||
| 		wait_event_interruptible(kapmd_wait, | ||||
| 				!queue_empty(&kapmd_queue) || !arm_apm_active); | ||||
| 				!queue_empty(&kapmd_queue) || kthread_should_stop()); | ||||
| 
 | ||||
| 		if (!arm_apm_active) | ||||
| 		if (kthread_should_stop()) | ||||
| 			break; | ||||
| 
 | ||||
| 		spin_lock_irq(&kapmd_queue_lock); | ||||
|  | @ -508,7 +505,7 @@ static int kapmd(void *arg) | |||
| 		} | ||||
| 	} while (1); | ||||
| 
 | ||||
| 	complete_and_exit(&kapmd_exit, 0); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int __init apm_init(void) | ||||
|  | @ -520,13 +517,14 @@ static int __init apm_init(void) | |||
| 		return -ENODEV; | ||||
| 	} | ||||
| 
 | ||||
| 	arm_apm_active = 1; | ||||
| 
 | ||||
| 	ret = kernel_thread(kapmd, NULL, CLONE_KERNEL); | ||||
| 	if (ret < 0) { | ||||
| 		arm_apm_active = 0; | ||||
| 	kapmd_tsk = kthread_create(kapmd, NULL, "kapmd"); | ||||
| 	if (IS_ERR(kapmd_tsk)) { | ||||
| 		ret = PTR_ERR(kapmd_tsk); | ||||
| 		kapmd_tsk = NULL; | ||||
| 		return ret; | ||||
| 	} | ||||
| 	kapmd_tsk->flags |= PF_NOFREEZE; | ||||
| 	wake_up_process(kapmd_tsk); | ||||
| 
 | ||||
| #ifdef CONFIG_PROC_FS | ||||
| 	create_proc_info_entry("apm", 0, NULL, apm_get_info); | ||||
|  | @ -535,10 +533,7 @@ static int __init apm_init(void) | |||
| 	ret = misc_register(&apm_device); | ||||
| 	if (ret != 0) { | ||||
| 		remove_proc_entry("apm", NULL); | ||||
| 
 | ||||
| 		arm_apm_active = 0; | ||||
| 		wake_up(&kapmd_wait); | ||||
| 		wait_for_completion(&kapmd_exit); | ||||
| 		kthread_stop(kapmd_tsk); | ||||
| 	} | ||||
| 
 | ||||
| 	return ret; | ||||
|  | @ -549,9 +544,7 @@ static void __exit apm_exit(void) | |||
| 	misc_deregister(&apm_device); | ||||
| 	remove_proc_entry("apm", NULL); | ||||
| 
 | ||||
| 	arm_apm_active = 0; | ||||
| 	wake_up(&kapmd_wait); | ||||
| 	wait_for_completion(&kapmd_exit); | ||||
| 	kthread_stop(kapmd_tsk); | ||||
| } | ||||
| 
 | ||||
| module_init(apm_init); | ||||
|  |  | |||
|  | @ -21,6 +21,36 @@ | |||
| 
 | ||||
| #if defined(CONFIG_DEBUG_ICEDCC) | ||||
| 		@@ debug using ARM EmbeddedICE DCC channel
 | ||||
| 
 | ||||
| #if defined(CONFIG_CPU_V6) | ||||
| 
 | ||||
| 		.macro	addruart, rx | ||||
| 		.endm | ||||
| 
 | ||||
| 		.macro	senduart, rd, rx | ||||
| 		mcr	p14, 0, \rd, c0, c5, 0 | ||||
| 		.endm | ||||
| 
 | ||||
| 		.macro	busyuart, rd, rx | ||||
| 1001: | ||||
| 		mrc	p14, 0, \rx, c0, c1, 0 | ||||
| 		tst	\rx, #0x20000000 | ||||
| 		beq	1001b | ||||
| 		.endm | ||||
| 
 | ||||
| 		.macro	waituart, rd, rx | ||||
| 		mov	\rd, #0x2000000 | ||||
| 1001: | ||||
| 		subs	\rd, \rd, #1 | ||||
| 		bmi	1002f | ||||
| 		mrc	p14, 0, \rx, c0, c1, 0 | ||||
| 		tst	\rx, #0x20000000 | ||||
| 		bne	1001b | ||||
| 1002: | ||||
| 		.endm | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| 		.macro	addruart, rx | ||||
| 		.endm | ||||
| 
 | ||||
|  | @ -46,9 +76,12 @@ | |||
| 		bne	1001b | ||||
| 1002: | ||||
| 		.endm | ||||
| 
 | ||||
| #endif	/* CONFIG_CPU_V6 */ | ||||
| 
 | ||||
| #else | ||||
| #include <asm/arch/debug-macro.S> | ||||
| #endif | ||||
| #endif	/* CONFIG_DEBUG_ICEDCC */ | ||||
| 
 | ||||
| /* | ||||
|  * Useful debugging routines | ||||
|  |  | |||
|  | @ -191,6 +191,9 @@ __dabt_svc: | |||
| __irq_svc: | ||||
| 	svc_entry | ||||
| 
 | ||||
| #ifdef CONFIG_TRACE_IRQFLAGS | ||||
| 	bl	trace_hardirqs_off | ||||
| #endif | ||||
| #ifdef CONFIG_PREEMPT | ||||
| 	get_thread_info tsk | ||||
| 	ldr	r8, [tsk, #TI_PREEMPT]		@ get preempt count | ||||
|  | @ -211,6 +214,10 @@ preempt_return: | |||
| #endif | ||||
| 	ldr	r0, [sp, #S_PSR]		@ irqs are already disabled | ||||
| 	msr	spsr_cxsf, r0 | ||||
| #ifdef CONFIG_TRACE_IRQFLAGS | ||||
| 	tst	r0, #PSR_I_BIT | ||||
| 	bleq	trace_hardirqs_on | ||||
| #endif | ||||
| 	ldmia	sp, {r0 - pc}^			@ load r0 - pc, cpsr
 | ||||
| 
 | ||||
| 	.ltorg | ||||
|  | @ -398,6 +405,9 @@ __dabt_usr: | |||
| __irq_usr: | ||||
| 	usr_entry | ||||
| 
 | ||||
| #ifdef CONFIG_TRACE_IRQFLAGS | ||||
| 	bl	trace_hardirqs_off | ||||
| #endif | ||||
| 	get_thread_info tsk | ||||
| #ifdef CONFIG_PREEMPT | ||||
| 	ldr	r8, [tsk, #TI_PREEMPT]		@ get preempt count | ||||
|  | @ -412,6 +422,9 @@ __irq_usr: | |||
| 	teq	r0, r7 | ||||
| 	strne	r0, [r0, -r0] | ||||
| #endif | ||||
| #ifdef CONFIG_TRACE_IRQFLAGS | ||||
| 	bl	trace_hardirqs_on | ||||
| #endif | ||||
| 
 | ||||
| 	mov	why, #0 | ||||
| 	b	ret_to_user | ||||
|  |  | |||
|  | @ -9,7 +9,6 @@ | |||
|  * published by the Free Software Foundation. | ||||
|  * | ||||
|  *  Common kernel startup code (non-paged MM) | ||||
|  *    for 32-bit CPUs which has a process ID register(CP15). | ||||
|  * | ||||
|  */ | ||||
| #include <linux/linkage.h> | ||||
|  | @ -40,7 +39,11 @@ | |||
| ENTRY(stext) | ||||
| 	msr	cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode | ||||
| 						@ and irqs disabled
 | ||||
| #ifndef CONFIG_CPU_CP15 | ||||
| 	ldr	r9, =CONFIG_PROCESSOR_ID | ||||
| #else | ||||
| 	mrc	p15, 0, r9, c0, c0		@ get processor id
 | ||||
| #endif | ||||
| 	bl	__lookup_processor_type		@ r5=procinfo r9=cpuid
 | ||||
| 	movs	r10, r5				@ invalid processor (r5=0)?
 | ||||
| 	beq	__error_p				@ yes, error 'p'
 | ||||
|  | @ -58,6 +61,7 @@ ENTRY(stext) | |||
|  */ | ||||
| 	.type	__after_proc_init, %function | ||||
| __after_proc_init: | ||||
| #ifdef CONFIG_CPU_CP15 | ||||
| 	mrc	p15, 0, r0, c1, c0, 0		@ read control reg
 | ||||
| #ifdef CONFIG_ALIGNMENT_TRAP | ||||
| 	orr	r0, r0, #CR_A | ||||
|  | @ -72,8 +76,14 @@ __after_proc_init: | |||
| #endif | ||||
| #ifdef CONFIG_CPU_ICACHE_DISABLE | ||||
| 	bic	r0, r0, #CR_I | ||||
| #endif | ||||
| #ifdef CONFIG_CPU_HIGH_VECTOR | ||||
| 	orr	r0, r0, #CR_V | ||||
| #else | ||||
| 	bic	r0, r0, #CR_V | ||||
| #endif | ||||
| 	mcr	p15, 0, r0, c1, c0, 0		@ write control reg
 | ||||
| #endif /* CONFIG_CPU_CP15 */ | ||||
| 
 | ||||
| 	mov	pc, r13				@ clear the BSS and jump
 | ||||
| 						@ to start_kernel
 | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
|  *  linux/arch/arm/kernel/module.c | ||||
|  * | ||||
|  *  Copyright (C) 2002 Russell King. | ||||
|  *  Modified for nommu by Hyok S. Choi | ||||
|  * | ||||
|  * 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 | ||||
|  | @ -32,6 +33,7 @@ extern void _etext; | |||
| #define MODULE_START	(((unsigned long)&_etext + ~PGDIR_MASK) & PGDIR_MASK) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_MMU | ||||
| void *module_alloc(unsigned long size) | ||||
| { | ||||
| 	struct vm_struct *area; | ||||
|  | @ -46,6 +48,12 @@ void *module_alloc(unsigned long size) | |||
| 
 | ||||
| 	return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL); | ||||
| } | ||||
| #else /* CONFIG_MMU */ | ||||
| void *module_alloc(unsigned long size) | ||||
| { | ||||
| 	return size == 0 ? NULL : vmalloc(size); | ||||
| } | ||||
| #endif /* !CONFIG_MMU */ | ||||
| 
 | ||||
| void module_free(struct module *module, void *region) | ||||
| { | ||||
|  |  | |||
|  | @ -221,16 +221,26 @@ void __show_regs(struct pt_regs *regs) | |||
| 		processor_modes[processor_mode(regs)], | ||||
| 		thumb_mode(regs) ? " (T)" : "", | ||||
| 		get_fs() == get_ds() ? "kernel" : "user"); | ||||
| #if CONFIG_CPU_CP15 | ||||
| 	{ | ||||
| 		unsigned int ctrl, transbase, dac; | ||||
| 		unsigned int ctrl; | ||||
| 		  __asm__ ( | ||||
| 		"	mrc p15, 0, %0, c1, c0\n" | ||||
| 		"	mrc p15, 0, %1, c2, c0\n" | ||||
| 		"	mrc p15, 0, %2, c3, c0\n" | ||||
| 		: "=r" (ctrl), "=r" (transbase), "=r" (dac)); | ||||
| 		printk("Control: %04X  Table: %08X  DAC: %08X\n", | ||||
| 		  	ctrl, transbase, dac); | ||||
| 		: "=r" (ctrl)); | ||||
| 		printk("Control: %04X\n", ctrl); | ||||
| 	} | ||||
| #ifdef CONFIG_CPU_CP15_MMU | ||||
| 	{ | ||||
| 		unsigned int transbase, dac; | ||||
| 		  __asm__ ( | ||||
| 		"	mrc p15, 0, %0, c2, c0\n" | ||||
| 		"	mrc p15, 0, %1, c3, c0\n" | ||||
| 		: "=r" (transbase), "=r" (dac)); | ||||
| 		printk("Table: %08X  DAC: %08X\n", | ||||
| 		  	transbase, dac); | ||||
| 	} | ||||
| #endif | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void show_regs(struct pt_regs * regs) | ||||
|  |  | |||
|  | @ -69,10 +69,12 @@ EXPORT_SYMBOL(profile_pc); | |||
|  */ | ||||
| int (*set_rtc)(void); | ||||
| 
 | ||||
| #ifndef CONFIG_GENERIC_TIME | ||||
| static unsigned long dummy_gettimeoffset(void) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Scheduler clock - returns current time in nanosec units. | ||||
|  | @ -230,6 +232,7 @@ static inline void do_leds(void) | |||
| #define	do_leds() | ||||
| #endif | ||||
| 
 | ||||
| #ifndef CONFIG_GENERIC_TIME | ||||
| void do_gettimeofday(struct timeval *tv) | ||||
| { | ||||
| 	unsigned long flags; | ||||
|  | @ -291,6 +294,7 @@ int do_settimeofday(struct timespec *tv) | |||
| } | ||||
| 
 | ||||
| EXPORT_SYMBOL(do_settimeofday); | ||||
| #endif /* !CONFIG_GENERIC_TIME */ | ||||
| 
 | ||||
| /**
 | ||||
|  * save_time_delta - Save the offset between system time and RTC time | ||||
|  | @ -500,8 +504,10 @@ device_initcall(timer_init_sysfs); | |||
| 
 | ||||
| void __init time_init(void) | ||||
| { | ||||
| #ifndef CONFIG_GENERIC_TIME | ||||
| 	if (system_timer->offset == NULL) | ||||
| 		system_timer->offset = dummy_gettimeoffset; | ||||
| #endif | ||||
| 	system_timer->init(); | ||||
| 
 | ||||
| #ifdef CONFIG_NO_IDLE_HZ | ||||
|  |  | |||
|  | @ -191,7 +191,7 @@ void show_stack(struct task_struct *tsk, unsigned long *sp) | |||
| 	if (tsk != current) | ||||
| 		fp = thread_saved_fp(tsk); | ||||
| 	else | ||||
| 		asm("mov%? %0, fp" : "=r" (fp)); | ||||
| 		asm("mov %0, fp" : "=r" (fp) : : "cc"); | ||||
| 
 | ||||
| 	c_backtrace(fp, 0x10); | ||||
| 	barrier(); | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ | |||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include "generic.h" | ||||
| #include "clock.h" | ||||
| 
 | ||||
| static struct map_desc at91rm9200_io_desc[] __initdata = { | ||||
| 	{ | ||||
|  | @ -26,87 +27,224 @@ static struct map_desc at91rm9200_io_desc[] __initdata = { | |||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_SPI, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_SPI), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_SSC2, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_SSC2), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_SSC1, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_SSC1), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_SSC0, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_SSC0), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_US3, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_US3), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_US2, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_US2), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_US1, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_US1), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_US0, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_US0), | ||||
| 		.pfn		= __phys_to_pfn(AT91RM9200_BASE_SPI), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_EMAC, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_EMAC), | ||||
| 		.pfn		= __phys_to_pfn(AT91RM9200_BASE_EMAC), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_TWI, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_TWI), | ||||
| 		.pfn		= __phys_to_pfn(AT91RM9200_BASE_TWI), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_MCI, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_MCI), | ||||
| 		.pfn		= __phys_to_pfn(AT91RM9200_BASE_MCI), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_UDP, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_UDP), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_TCB1, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_TCB1), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_VA_BASE_TCB0, | ||||
| 		.pfn		= __phys_to_pfn(AT91_BASE_TCB0), | ||||
| 		.pfn		= __phys_to_pfn(AT91RM9200_BASE_UDP), | ||||
| 		.length		= SZ_16K, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, { | ||||
| 		.virtual	= AT91_SRAM_VIRT_BASE, | ||||
| 		.pfn		= __phys_to_pfn(AT91_SRAM_BASE), | ||||
| 		.length		= AT91_SRAM_SIZE, | ||||
| 		.pfn		= __phys_to_pfn(AT91RM9200_SRAM_BASE), | ||||
| 		.length		= AT91RM9200_SRAM_SIZE, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init at91rm9200_map_io(void) | ||||
| /* --------------------------------------------------------------------
 | ||||
|  *  Clocks | ||||
|  * -------------------------------------------------------------------- */ | ||||
| 
 | ||||
| /*
 | ||||
|  * The peripheral clocks. | ||||
|  */ | ||||
| static struct clk udc_clk = { | ||||
| 	.name		= "udc_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_UDP, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk ohci_clk = { | ||||
| 	.name		= "ohci_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_UHP, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk ether_clk = { | ||||
| 	.name		= "ether_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_EMAC, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk mmc_clk = { | ||||
| 	.name		= "mci_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_MCI, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk twi_clk = { | ||||
| 	.name		= "twi_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_TWI, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk usart0_clk = { | ||||
| 	.name		= "usart0_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_US0, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk usart1_clk = { | ||||
| 	.name		= "usart1_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_US1, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk usart2_clk = { | ||||
| 	.name		= "usart2_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_US2, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk usart3_clk = { | ||||
| 	.name		= "usart3_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_US3, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk spi_clk = { | ||||
| 	.name		= "spi_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_SPI, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk pioA_clk = { | ||||
| 	.name		= "pioA_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_PIOA, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk pioB_clk = { | ||||
| 	.name		= "pioB_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_PIOB, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk pioC_clk = { | ||||
| 	.name		= "pioC_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_PIOC, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| static struct clk pioD_clk = { | ||||
| 	.name		= "pioD_clk", | ||||
| 	.pmc_mask	= 1 << AT91RM9200_ID_PIOD, | ||||
| 	.type		= CLK_TYPE_PERIPHERAL, | ||||
| }; | ||||
| 
 | ||||
| static struct clk *periph_clocks[] __initdata = { | ||||
| 	&pioA_clk, | ||||
| 	&pioB_clk, | ||||
| 	&pioC_clk, | ||||
| 	&pioD_clk, | ||||
| 	&usart0_clk, | ||||
| 	&usart1_clk, | ||||
| 	&usart2_clk, | ||||
| 	&usart3_clk, | ||||
| 	&mmc_clk, | ||||
| 	&udc_clk, | ||||
| 	&twi_clk, | ||||
| 	&spi_clk, | ||||
| 	// ssc 0 .. ssc2
 | ||||
| 	// tc0 .. tc5
 | ||||
| 	&ohci_clk, | ||||
| 	ðer_clk, | ||||
| 	// irq0 .. irq6
 | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * The four programmable clocks. | ||||
|  * You must configure pin multiplexing to bring these signals out. | ||||
|  */ | ||||
| static struct clk pck0 = { | ||||
| 	.name		= "pck0", | ||||
| 	.pmc_mask	= AT91_PMC_PCK0, | ||||
| 	.type		= CLK_TYPE_PROGRAMMABLE, | ||||
| 	.id		= 0, | ||||
| }; | ||||
| static struct clk pck1 = { | ||||
| 	.name		= "pck1", | ||||
| 	.pmc_mask	= AT91_PMC_PCK1, | ||||
| 	.type		= CLK_TYPE_PROGRAMMABLE, | ||||
| 	.id		= 1, | ||||
| }; | ||||
| static struct clk pck2 = { | ||||
| 	.name		= "pck2", | ||||
| 	.pmc_mask	= AT91_PMC_PCK2, | ||||
| 	.type		= CLK_TYPE_PROGRAMMABLE, | ||||
| 	.id		= 2, | ||||
| }; | ||||
| static struct clk pck3 = { | ||||
| 	.name		= "pck3", | ||||
| 	.pmc_mask	= AT91_PMC_PCK3, | ||||
| 	.type		= CLK_TYPE_PROGRAMMABLE, | ||||
| 	.id		= 3, | ||||
| }; | ||||
| 
 | ||||
| static void __init at91rm9200_register_clocks(void) | ||||
| { | ||||
| 	iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc)); | ||||
| 	int i; | ||||
| 
 | ||||
| 	for (i = 0; i < ARRAY_SIZE(periph_clocks); i++) | ||||
| 		clk_register(periph_clocks[i]); | ||||
| 
 | ||||
| 	clk_register(&pck0); | ||||
| 	clk_register(&pck1); | ||||
| 	clk_register(&pck2); | ||||
| 	clk_register(&pck3); | ||||
| } | ||||
| 
 | ||||
| /* --------------------------------------------------------------------
 | ||||
|  *  GPIO | ||||
|  * -------------------------------------------------------------------- */ | ||||
| 
 | ||||
| static struct at91_gpio_bank at91rm9200_gpio[] = { | ||||
| 	{ | ||||
| 		.id		= AT91RM9200_ID_PIOA, | ||||
| 		.offset		= AT91_PIOA, | ||||
| 		.clock		= &pioA_clk, | ||||
| 	}, { | ||||
| 		.id		= AT91RM9200_ID_PIOB, | ||||
| 		.offset		= AT91_PIOB, | ||||
| 		.clock		= &pioB_clk, | ||||
| 	}, { | ||||
| 		.id		= AT91RM9200_ID_PIOC, | ||||
| 		.offset		= AT91_PIOC, | ||||
| 		.clock		= &pioC_clk, | ||||
| 	}, { | ||||
| 		.id		= AT91RM9200_ID_PIOD, | ||||
| 		.offset		= AT91_PIOD, | ||||
| 		.clock		= &pioD_clk, | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| /* --------------------------------------------------------------------
 | ||||
|  *  AT91RM9200 processor initialization | ||||
|  * -------------------------------------------------------------------- */ | ||||
| void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks) | ||||
| { | ||||
| 	/* Map peripherals */ | ||||
| 	iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc)); | ||||
| 
 | ||||
| 	/* Init clock subsystem */ | ||||
| 	at91_clock_init(main_clock); | ||||
| 
 | ||||
| 	/* Register the processor-specific clocks */ | ||||
| 	at91rm9200_register_clocks(); | ||||
| 
 | ||||
| 	/* Initialize GPIO subsystem */ | ||||
| 	at91_gpio_init(at91rm9200_gpio, banks); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* --------------------------------------------------------------------
 | ||||
|  *  Interrupt initialization | ||||
|  * -------------------------------------------------------------------- */ | ||||
| 
 | ||||
| /*
 | ||||
|  * The default interrupt priority levels (0 = lowest, 7 = highest). | ||||
|  */ | ||||
|  | @ -145,10 +283,14 @@ static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = { | |||
| 	0	/* Advanced Interrupt Controller (IRQ6) */ | ||||
| }; | ||||
| 
 | ||||
| void __init at91rm9200_init_irq(unsigned int priority[NR_AIC_IRQS]) | ||||
| void __init at91rm9200_init_interrupts(unsigned int priority[NR_AIC_IRQS]) | ||||
| { | ||||
| 	if (!priority) | ||||
| 		priority = at91rm9200_default_irq_priority; | ||||
| 
 | ||||
| 	/* Initialize the AIC interrupt controller */ | ||||
| 	at91_aic_init(priority); | ||||
| 
 | ||||
| 	/* Enable GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(); | ||||
| } | ||||
|  |  | |||
|  | @ -34,20 +34,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init onearm_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(PQFP_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -62,15 +53,18 @@ static struct at91_uart_config __initdata onearm_uart_config = { | |||
| 
 | ||||
| static void __init onearm_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 18.432 MHz crystal */ | ||||
| 	at91_clock_init(18432000); | ||||
| 	/* Initialize processor: 18.432 MHz crystal */ | ||||
| 	at91rm9200_initialize(18432000, AT91RM9200_PQFP); | ||||
| 
 | ||||
| 	/* Setup the serial ports and console */ | ||||
| 	at91_init_serial(&onearm_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init onearm_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| static struct at91_eth_data __initdata onearm_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PC4, | ||||
| 	.is_rmii	= 1, | ||||
|  |  | |||
|  | @ -35,20 +35,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init carmeva_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(BGA_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -63,15 +54,19 @@ static struct at91_uart_config __initdata carmeva_uart_config = { | |||
| 
 | ||||
| static void __init carmeva_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 20.000 MHz crystal */ | ||||
| 	at91_clock_init(20000000); | ||||
| 	/* Initialize processor: 20.000 MHz crystal */ | ||||
| 	at91rm9200_initialize(20000000, AT91RM9200_BGA); | ||||
| 
 | ||||
| 	/* Setup the serial ports and console */ | ||||
| 	at91_init_serial(&carmeva_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init carmeva_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static struct at91_eth_data __initdata carmeva_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PC4, | ||||
| 	.is_rmii	= 1, | ||||
|  |  | |||
|  | @ -34,20 +34,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init csb337_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(BGA_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -62,10 +53,8 @@ static struct at91_uart_config __initdata csb337_uart_config = { | |||
| 
 | ||||
| static void __init csb337_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 3.6864 MHz crystal */ | ||||
| 	at91_clock_init(3686400); | ||||
| 	/* Initialize processor: 3.6864 MHz crystal */ | ||||
| 	at91rm9200_initialize(3686400, AT91RM9200_BGA); | ||||
| 
 | ||||
| 	/* Setup the LEDs */ | ||||
| 	at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1); | ||||
|  | @ -74,6 +63,11 @@ static void __init csb337_map_io(void) | |||
| 	at91_init_serial(&csb337_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init csb337_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| static struct at91_eth_data __initdata csb337_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PC2, | ||||
| 	.is_rmii	= 0, | ||||
|  |  | |||
|  | @ -33,20 +33,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init csb637_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(BGA_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -61,10 +52,8 @@ static struct at91_uart_config __initdata csb637_uart_config = { | |||
| 
 | ||||
| static void __init csb637_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 3.6864 MHz crystal */ | ||||
| 	at91_clock_init(3686400); | ||||
| 	/* Initialize processor: 3.6864 MHz crystal */ | ||||
| 	at91rm9200_initialize(3686400, AT91RM9200_BGA); | ||||
| 
 | ||||
| 	/* Setup the LEDs */ | ||||
| 	at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); | ||||
|  | @ -73,6 +62,11 @@ static void __init csb637_map_io(void) | |||
| 	at91_init_serial(&csb637_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init csb637_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| static struct at91_eth_data __initdata csb637_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PC0, | ||||
| 	.is_rmii	= 0, | ||||
|  |  | |||
|  | @ -37,20 +37,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init dk_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(BGA_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -65,10 +56,8 @@ static struct at91_uart_config __initdata dk_uart_config = { | |||
| 
 | ||||
| static void __init dk_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 18.432 MHz crystal */ | ||||
| 	at91_clock_init(18432000); | ||||
| 	/* Initialize processor: 18.432 MHz crystal */ | ||||
| 	at91rm9200_initialize(18432000, AT91RM9200_BGA); | ||||
| 
 | ||||
| 	/* Setup the LEDs */ | ||||
| 	at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); | ||||
|  | @ -77,6 +66,11 @@ static void __init dk_map_io(void) | |||
| 	at91_init_serial(&dk_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init dk_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| static struct at91_eth_data __initdata dk_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PC4, | ||||
| 	.is_rmii	= 1, | ||||
|  | @ -128,6 +122,29 @@ static struct spi_board_info dk_spi_devices[] = { | |||
| #endif | ||||
| }; | ||||
| 
 | ||||
| static struct mtd_partition __initdata dk_nand_partition[] = { | ||||
| 	{ | ||||
| 		.name	= "NAND Partition 1", | ||||
| 		.offset	= 0, | ||||
| 		.size	= MTDPART_SIZ_FULL, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct mtd_partition *nand_partitions(int size, int *num_partitions) | ||||
| { | ||||
| 	*num_partitions = ARRAY_SIZE(dk_nand_partition); | ||||
| 	return dk_nand_partition; | ||||
| } | ||||
| 
 | ||||
| static struct at91_nand_data __initdata dk_nand_data = { | ||||
| 	.ale		= 22, | ||||
| 	.cle		= 21, | ||||
| 	.det_pin	= AT91_PIN_PB1, | ||||
| 	.rdy_pin	= AT91_PIN_PC2, | ||||
| 	// .enable_pin	= ... not there
 | ||||
| 	.partition_info	= nand_partitions, | ||||
| }; | ||||
| 
 | ||||
| static void __init dk_board_init(void) | ||||
| { | ||||
| 	/* Serial */ | ||||
|  | @ -153,6 +170,8 @@ static void __init dk_board_init(void) | |||
| 	at91_set_gpio_output(AT91_PIN_PB7, 1);	/* this MMC card slot can optionally use SPI signaling (CS3). */ | ||||
| 	at91_add_device_mmc(&dk_mmc_data); | ||||
| #endif | ||||
| 	/* NAND */ | ||||
| 	at91_add_device_nand(&dk_nand_data); | ||||
| 	/* VGA */ | ||||
| //	dk_add_device_video();
 | ||||
| } | ||||
|  |  | |||
|  | @ -35,20 +35,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init eb9200_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(BGA_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -63,15 +54,18 @@ static struct at91_uart_config __initdata eb9200_uart_config = { | |||
| 
 | ||||
| static void __init eb9200_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 18.432 MHz crystal */ | ||||
| 	at91_clock_init(18432000); | ||||
| 	/* Initialize processor: 18.432 MHz crystal */ | ||||
| 	at91rm9200_initialize(18432000, AT91RM9200_BGA); | ||||
| 
 | ||||
| 	/* Setup the serial ports and console */ | ||||
| 	at91_init_serial(&eb9200_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init eb9200_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| static struct at91_eth_data __initdata eb9200_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PC4, | ||||
| 	.is_rmii	= 1, | ||||
|  |  | |||
|  | @ -37,20 +37,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init ek_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(BGA_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -65,10 +56,8 @@ static struct at91_uart_config __initdata ek_uart_config = { | |||
| 
 | ||||
| static void __init ek_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 18.432 MHz crystal */ | ||||
| 	at91_clock_init(18432000); | ||||
| 	/* Initialize processor: 18.432 MHz crystal */ | ||||
| 	at91rm9200_initialize(18432000, AT91RM9200_BGA); | ||||
| 
 | ||||
| 	/* Setup the LEDs */ | ||||
| 	at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2); | ||||
|  | @ -77,6 +66,11 @@ static void __init ek_map_io(void) | |||
| 	at91_init_serial(&ek_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init ek_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| static struct at91_eth_data __initdata ek_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PC4, | ||||
| 	.is_rmii	= 1, | ||||
|  |  | |||
|  | @ -34,20 +34,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init kafa_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(PQFP_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -62,10 +53,8 @@ static struct at91_uart_config __initdata kafa_uart_config = { | |||
| 
 | ||||
| static void __init kafa_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 18.432 MHz crystal */ | ||||
| 	at91_clock_init(18432000); | ||||
| 	/* Initialize processor: 18.432 MHz crystal */ | ||||
| 	at91rm9200_initialize(18432000, AT91RM9200_PQFP); | ||||
| 
 | ||||
| 	/* Set up the LEDs */ | ||||
| 	at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4); | ||||
|  | @ -74,6 +63,11 @@ static void __init kafa_map_io(void) | |||
| 	at91_init_serial(&kafa_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init kafa_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| static struct at91_eth_data __initdata kafa_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PC4, | ||||
| 	.is_rmii	= 0, | ||||
|  |  | |||
|  | @ -35,20 +35,11 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/irq.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/board.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| static void __init kb9202_init_irq(void) | ||||
| { | ||||
| 	/* Initialize AIC controller */ | ||||
| 	at91rm9200_init_irq(NULL); | ||||
| 
 | ||||
| 	/* Set up the GPIO interrupts */ | ||||
| 	at91_gpio_irq_setup(PQFP_GPIO_BANKS); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Serial port configuration. | ||||
|  | @ -63,10 +54,8 @@ static struct at91_uart_config __initdata kb9202_uart_config = { | |||
| 
 | ||||
| static void __init kb9202_map_io(void) | ||||
| { | ||||
| 	at91rm9200_map_io(); | ||||
| 
 | ||||
| 	/* Initialize clocks: 10 MHz crystal */ | ||||
| 	at91_clock_init(10000000); | ||||
| 	/* Initialize processor: 10 MHz crystal */ | ||||
| 	at91rm9200_initialize(10000000, AT91RM9200_PQFP); | ||||
| 
 | ||||
| 	/* Set up the LEDs */ | ||||
| 	at91_init_leds(AT91_PIN_PC19, AT91_PIN_PC18); | ||||
|  | @ -75,6 +64,11 @@ static void __init kb9202_map_io(void) | |||
| 	at91_init_serial(&kb9202_uart_config); | ||||
| } | ||||
| 
 | ||||
| static void __init kb9202_init_irq(void) | ||||
| { | ||||
| 	at91rm9200_init_interrupts(NULL); | ||||
| } | ||||
| 
 | ||||
| static struct at91_eth_data __initdata kb9202_eth_data = { | ||||
| 	.phy_irq_pin	= AT91_PIN_PB29, | ||||
| 	.is_rmii	= 0, | ||||
|  | @ -95,6 +89,29 @@ static struct at91_mmc_data __initdata kb9202_mmc_data = { | |||
| 	.wire4		= 1, | ||||
| }; | ||||
| 
 | ||||
| static struct mtd_partition __initdata kb9202_nand_partition[] = { | ||||
| 	{ | ||||
| 		.name	= "nand_fs", | ||||
| 		.offset	= 0, | ||||
| 		.size	= MTDPART_SIZ_FULL, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct mtd_partition *nand_partitions(int size, int *num_partitions) | ||||
| { | ||||
| 	*num_partitions = ARRAY_SIZE(kb9202_nand_partition); | ||||
| 	return kb9202_nand_partition; | ||||
| } | ||||
| 
 | ||||
| static struct at91_nand_data __initdata kb9202_nand_data = { | ||||
| 	.ale		= 22, | ||||
| 	.cle		= 21, | ||||
| 	// .det_pin	= ... not there
 | ||||
| 	.rdy_pin	= AT91_PIN_PC29, | ||||
| 	.enable_pin	= AT91_PIN_PC28, | ||||
| 	.partition_info	= nand_partitions, | ||||
| }; | ||||
| 
 | ||||
| static void __init kb9202_board_init(void) | ||||
| { | ||||
| 	/* Serial */ | ||||
|  | @ -111,6 +128,8 @@ static void __init kb9202_board_init(void) | |||
| 	at91_add_device_i2c(); | ||||
| 	/* SPI */ | ||||
| 	at91_add_device_spi(NULL, 0); | ||||
| 	/* NAND */ | ||||
| 	at91_add_device_nand(&kb9202_nand_data); | ||||
| } | ||||
| 
 | ||||
| MACHINE_START(KB9200, "KB920x") | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| #include "clock.h" | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -38,23 +38,15 @@ | |||
|  * PLLB be used at other rates (on boards that don't need USB), etc. | ||||
|  */ | ||||
| 
 | ||||
| struct clk { | ||||
| 	const char	*name;		/* unique clock name */ | ||||
| 	const char	*function;	/* function of the clock */ | ||||
| 	struct device	*dev;		/* device associated with function */ | ||||
| 	unsigned long	rate_hz; | ||||
| 	struct clk	*parent; | ||||
| 	u32		pmc_mask; | ||||
| 	void		(*mode)(struct clk *, int); | ||||
| 	unsigned	id:2;		/* PCK0..3, or 32k/main/a/b */ | ||||
| 	unsigned	primary:1; | ||||
| 	unsigned	pll:1; | ||||
| 	unsigned	programmable:1; | ||||
| 	u16		users; | ||||
| }; | ||||
| #define clk_is_primary(x)	((x)->type & CLK_TYPE_PRIMARY) | ||||
| #define clk_is_programmable(x)	((x)->type & CLK_TYPE_PROGRAMMABLE) | ||||
| #define clk_is_peripheral(x)	((x)->type & CLK_TYPE_PERIPHERAL) | ||||
| 
 | ||||
| static spinlock_t	clk_lock; | ||||
| static u32		at91_pllb_usb_init; | ||||
| 
 | ||||
| static LIST_HEAD(clocks); | ||||
| static DEFINE_SPINLOCK(clk_lock); | ||||
| 
 | ||||
| static u32 at91_pllb_usb_init; | ||||
| 
 | ||||
| /*
 | ||||
|  * Four primary clock sources:  two crystal oscillators (32K, main), and | ||||
|  | @ -67,21 +59,20 @@ static struct clk clk32k = { | |||
| 	.rate_hz	= AT91_SLOW_CLOCK, | ||||
| 	.users		= 1,		/* always on */ | ||||
| 	.id		= 0, | ||||
| 	.primary	= 1, | ||||
| 	.type		= CLK_TYPE_PRIMARY, | ||||
| }; | ||||
| static struct clk main_clk = { | ||||
| 	.name		= "main", | ||||
| 	.pmc_mask	= AT91_PMC_MOSCS,	/* in PMC_SR */ | ||||
| 	.id		= 1, | ||||
| 	.primary	= 1, | ||||
| 	.type		= CLK_TYPE_PRIMARY, | ||||
| }; | ||||
| static struct clk plla = { | ||||
| 	.name		= "plla", | ||||
| 	.parent		= &main_clk, | ||||
| 	.pmc_mask	= AT91_PMC_LOCKA,	/* in PMC_SR */ | ||||
| 	.id		= 2, | ||||
| 	.primary	= 1, | ||||
| 	.pll		= 1, | ||||
| 	.type		= CLK_TYPE_PRIMARY | CLK_TYPE_PLL, | ||||
| }; | ||||
| 
 | ||||
| static void pllb_mode(struct clk *clk, int is_on) | ||||
|  | @ -94,6 +85,7 @@ static void pllb_mode(struct clk *clk, int is_on) | |||
| 	} else | ||||
| 		value = 0; | ||||
| 
 | ||||
| 	// REVISIT: Add work-around for AT91RM9200 Errata #26 ?
 | ||||
| 	at91_sys_write(AT91_CKGR_PLLBR, value); | ||||
| 
 | ||||
| 	do { | ||||
|  | @ -107,8 +99,7 @@ static struct clk pllb = { | |||
| 	.pmc_mask	= AT91_PMC_LOCKB,	/* in PMC_SR */ | ||||
| 	.mode		= pllb_mode, | ||||
| 	.id		= 3, | ||||
| 	.primary	= 1, | ||||
| 	.pll		= 1, | ||||
| 	.type		= CLK_TYPE_PRIMARY | CLK_TYPE_PLL, | ||||
| }; | ||||
| 
 | ||||
| static void pmc_sys_mode(struct clk *clk, int is_on) | ||||
|  | @ -133,41 +124,6 @@ static struct clk uhpck = { | |||
| 	.mode		= pmc_sys_mode, | ||||
| }; | ||||
| 
 | ||||
| #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS | ||||
| /*
 | ||||
|  * The four programmable clocks can be parented by any primary clock. | ||||
|  * You must configure pin multiplexing to bring these signals out. | ||||
|  */ | ||||
| static struct clk pck0 = { | ||||
| 	.name		= "pck0", | ||||
| 	.pmc_mask	= AT91_PMC_PCK0, | ||||
| 	.mode		= pmc_sys_mode, | ||||
| 	.programmable	= 1, | ||||
| 	.id		= 0, | ||||
| }; | ||||
| static struct clk pck1 = { | ||||
| 	.name		= "pck1", | ||||
| 	.pmc_mask	= AT91_PMC_PCK1, | ||||
| 	.mode		= pmc_sys_mode, | ||||
| 	.programmable	= 1, | ||||
| 	.id		= 1, | ||||
| }; | ||||
| static struct clk pck2 = { | ||||
| 	.name		= "pck2", | ||||
| 	.pmc_mask	= AT91_PMC_PCK2, | ||||
| 	.mode		= pmc_sys_mode, | ||||
| 	.programmable	= 1, | ||||
| 	.id		= 2, | ||||
| }; | ||||
| static struct clk pck3 = { | ||||
| 	.name		= "pck3", | ||||
| 	.pmc_mask	= AT91_PMC_PCK3, | ||||
| 	.mode		= pmc_sys_mode, | ||||
| 	.programmable	= 1, | ||||
| 	.id		= 3, | ||||
| }; | ||||
| #endif	/* CONFIG_AT91_PROGRAMMABLE_CLOCKS */ | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * The master clock is divided from the CPU clock (by 1-4).  It's used for | ||||
|  | @ -187,131 +143,21 @@ static void pmc_periph_mode(struct clk *clk, int is_on) | |||
| 		at91_sys_write(AT91_PMC_PCDR, clk->pmc_mask); | ||||
| } | ||||
| 
 | ||||
| static struct clk udc_clk = { | ||||
| 	.name		= "udc_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_UDP, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk ohci_clk = { | ||||
| 	.name		= "ohci_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_UHP, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk ether_clk = { | ||||
| 	.name		= "ether_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_EMAC, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk mmc_clk = { | ||||
| 	.name		= "mci_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_MCI, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk twi_clk = { | ||||
| 	.name		= "twi_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_TWI, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk usart0_clk = { | ||||
| 	.name		= "usart0_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_US0, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk usart1_clk = { | ||||
| 	.name		= "usart1_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_US1, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk usart2_clk = { | ||||
| 	.name		= "usart2_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_US2, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk usart3_clk = { | ||||
| 	.name		= "usart3_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_US3, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk spi_clk = { | ||||
| 	.name		= "spi0_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_SPI, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk pioA_clk = { | ||||
| 	.name		= "pioA_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_PIOA, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk pioB_clk = { | ||||
| 	.name		= "pioB_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_PIOB, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk pioC_clk = { | ||||
| 	.name		= "pioC_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_PIOC, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| static struct clk pioD_clk = { | ||||
| 	.name		= "pioD_clk", | ||||
| 	.parent		= &mck, | ||||
| 	.pmc_mask	= 1 << AT91_ID_PIOD, | ||||
| 	.mode		= pmc_periph_mode, | ||||
| }; | ||||
| 
 | ||||
| static struct clk *const clock_list[] = { | ||||
| 	/* four primary clocks -- MUST BE FIRST! */ | ||||
| 	&clk32k, | ||||
| 	&main_clk, | ||||
| 	&plla, | ||||
| 	&pllb, | ||||
| 
 | ||||
| 	/* PLLB children (USB) */ | ||||
| 	&udpck, | ||||
| 	&uhpck, | ||||
| 
 | ||||
| #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS | ||||
| 	/* programmable clocks */ | ||||
| 	&pck0, | ||||
| 	&pck1, | ||||
| 	&pck2, | ||||
| 	&pck3, | ||||
| #endif	/* CONFIG_AT91_PROGRAMMABLE_CLOCKS */ | ||||
| 
 | ||||
| 	/* MCK and peripherals */ | ||||
| 	&mck, | ||||
| 	&usart0_clk, | ||||
| 	&usart1_clk, | ||||
| 	&usart2_clk, | ||||
| 	&usart3_clk, | ||||
| 	&mmc_clk, | ||||
| 	&udc_clk, | ||||
| 	&twi_clk, | ||||
| 	&spi_clk, | ||||
| 	&pioA_clk, | ||||
| 	&pioB_clk, | ||||
| 	&pioC_clk, | ||||
| 	&pioD_clk, | ||||
| 	// ssc0..ssc2
 | ||||
| 	// tc0..tc5
 | ||||
| 	// irq0..irq6
 | ||||
| 	&ohci_clk, | ||||
| 	ðer_clk, | ||||
| }; | ||||
| static struct clk __init *at91_css_to_clk(unsigned long css) | ||||
| { | ||||
| 	switch (css) { | ||||
| 		case AT91_PMC_CSS_SLOW: | ||||
| 			return &clk32k; | ||||
| 		case AT91_PMC_CSS_MAIN: | ||||
| 			return &main_clk; | ||||
| 		case AT91_PMC_CSS_PLLA: | ||||
| 			return &plla; | ||||
| 		case AT91_PMC_CSS_PLLB: | ||||
| 			return &pllb; | ||||
| 	} | ||||
| 
 | ||||
| 	return NULL; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Associate a particular clock with a function (eg, "uart") and device. | ||||
|  | @ -329,14 +175,12 @@ void __init at91_clock_associate(const char *id, struct device *dev, const char | |||
| 	clk->dev = dev; | ||||
| } | ||||
| 
 | ||||
| /* clocks are all static for now; no refcounting necessary */ | ||||
| /* clocks cannot be de-registered no refcounting necessary */ | ||||
| struct clk *clk_get(struct device *dev, const char *id) | ||||
| { | ||||
| 	int i; | ||||
| 
 | ||||
| 	for (i = 0; i < ARRAY_SIZE(clock_list); i++) { | ||||
| 		struct clk *clk = clock_list[i]; | ||||
| 	struct clk *clk; | ||||
| 
 | ||||
| 	list_for_each_entry(clk, &clocks, node) { | ||||
| 		if (strcmp(id, clk->name) == 0) | ||||
| 			return clk; | ||||
| 		if (clk->function && (dev == clk->dev) && strcmp(id, clk->function) == 0) | ||||
|  | @ -424,7 +268,7 @@ long clk_round_rate(struct clk *clk, unsigned long rate) | |||
| 	unsigned	prescale; | ||||
| 	unsigned long	actual; | ||||
| 
 | ||||
| 	if (!clk->programmable) | ||||
| 	if (!clk_is_programmable(clk)) | ||||
| 		return -EINVAL; | ||||
| 	spin_lock_irqsave(&clk_lock, flags); | ||||
| 
 | ||||
|  | @ -446,7 +290,7 @@ int clk_set_rate(struct clk *clk, unsigned long rate) | |||
| 	unsigned	prescale; | ||||
| 	unsigned long	actual; | ||||
| 
 | ||||
| 	if (!clk->programmable) | ||||
| 	if (!clk_is_programmable(clk)) | ||||
| 		return -EINVAL; | ||||
| 	if (clk->users) | ||||
| 		return -EBUSY; | ||||
|  | @ -484,7 +328,7 @@ int clk_set_parent(struct clk *clk, struct clk *parent) | |||
| 
 | ||||
| 	if (clk->users) | ||||
| 		return -EBUSY; | ||||
| 	if (!parent->primary || !clk->programmable) | ||||
| 	if (!clk_is_primary(parent) || !clk_is_programmable(clk)) | ||||
| 		return -EINVAL; | ||||
| 	spin_lock_irqsave(&clk_lock, flags); | ||||
| 
 | ||||
|  | @ -497,6 +341,18 @@ int clk_set_parent(struct clk *clk, struct clk *parent) | |||
| } | ||||
| EXPORT_SYMBOL(clk_set_parent); | ||||
| 
 | ||||
| /* establish PCK0..PCK3 parentage and rate */ | ||||
| static void init_programmable_clock(struct clk *clk) | ||||
| { | ||||
| 	struct clk	*parent; | ||||
| 	u32		pckr; | ||||
| 
 | ||||
| 	pckr = at91_sys_read(AT91_PMC_PCKR(clk->id)); | ||||
| 	parent = at91_css_to_clk(pckr & AT91_PMC_CSS); | ||||
| 	clk->parent = parent; | ||||
| 	clk->rate_hz = parent->rate_hz / (1 << ((pckr >> 2) & 3)); | ||||
| } | ||||
| 
 | ||||
| #endif	/* CONFIG_AT91_PROGRAMMABLE_CLOCKS */ | ||||
| 
 | ||||
| /*------------------------------------------------------------------------*/ | ||||
|  | @ -506,6 +362,7 @@ EXPORT_SYMBOL(clk_set_parent); | |||
| static int at91_clk_show(struct seq_file *s, void *unused) | ||||
| { | ||||
| 	u32		scsr, pcsr, sr; | ||||
| 	struct clk	*clk; | ||||
| 	unsigned	i; | ||||
| 
 | ||||
| 	seq_printf(s, "SCSR = %8x\n", scsr = at91_sys_read(AT91_PMC_SCSR)); | ||||
|  | @ -523,9 +380,8 @@ static int at91_clk_show(struct seq_file *s, void *unused) | |||
| 
 | ||||
| 	seq_printf(s, "\n"); | ||||
| 
 | ||||
| 	for (i = 0; i < ARRAY_SIZE(clock_list); i++) { | ||||
| 		char		*state; | ||||
| 		struct clk	*clk = clock_list[i]; | ||||
| 	list_for_each_entry(clk, &clocks, node) { | ||||
| 		char	*state; | ||||
| 
 | ||||
| 		if (clk->mode == pmc_sys_mode) | ||||
| 			state = (scsr & clk->pmc_mask) ? "on" : "off"; | ||||
|  | @ -568,6 +424,28 @@ postcore_initcall(at91_clk_debugfs_init); | |||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /*------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| /* Register a new clock */ | ||||
| int __init clk_register(struct clk *clk) | ||||
| { | ||||
| 	if (clk_is_peripheral(clk)) { | ||||
| 		clk->parent = &mck; | ||||
| 		clk->mode = pmc_periph_mode; | ||||
| 		list_add_tail(&clk->node, &clocks); | ||||
| 	} | ||||
| #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS | ||||
| 	else if (clk_is_programmable(clk)) { | ||||
| 		clk->mode = pmc_sys_mode; | ||||
| 		init_programmable_clock(clk); | ||||
| 		list_add_tail(&clk->node, &clocks); | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| static u32 __init at91_pll_rate(struct clk *pll, u32 freq, u32 reg) | ||||
|  | @ -640,20 +518,17 @@ fail: | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Several unused clocks may be active.  Turn them off. | ||||
|  */ | ||||
| static void at91_periphclk_reset(void) | ||||
| static void __init at91_periphclk_reset(void) | ||||
| { | ||||
| 	unsigned long reg; | ||||
| 	int i; | ||||
| 	struct clk *clk; | ||||
| 
 | ||||
| 	reg = at91_sys_read(AT91_PMC_PCSR); | ||||
| 
 | ||||
| 	for (i = 0; i < ARRAY_SIZE(clock_list); i++) { | ||||
| 		struct clk	*clk = clock_list[i]; | ||||
| 
 | ||||
| 	list_for_each_entry(clk, &clocks, node) { | ||||
| 		if (clk->mode != pmc_periph_mode) | ||||
| 			continue; | ||||
| 
 | ||||
|  | @ -664,11 +539,25 @@ static void at91_periphclk_reset(void) | |||
| 	at91_sys_write(AT91_PMC_PCDR, reg); | ||||
| } | ||||
| 
 | ||||
| static struct clk *const standard_pmc_clocks[] __initdata = { | ||||
| 	/* four primary clocks */ | ||||
| 	&clk32k, | ||||
| 	&main_clk, | ||||
| 	&plla, | ||||
| 	&pllb, | ||||
| 
 | ||||
| 	/* PLLB children (USB) */ | ||||
| 	&udpck, | ||||
| 	&uhpck, | ||||
| 
 | ||||
| 	/* MCK */ | ||||
| 	&mck | ||||
| }; | ||||
| 
 | ||||
| int __init at91_clock_init(unsigned long main_clock) | ||||
| { | ||||
| 	unsigned tmp, freq, mckr; | ||||
| 
 | ||||
| 	spin_lock_init(&clk_lock); | ||||
| 	int i; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * When the bootloader initialized the main oscillator correctly, | ||||
|  | @ -709,11 +598,15 @@ int __init at91_clock_init(unsigned long main_clock) | |||
| 	 * For now, assume this parentage won't change. | ||||
| 	 */ | ||||
| 	mckr = at91_sys_read(AT91_PMC_MCKR); | ||||
| 	mck.parent = clock_list[mckr & AT91_PMC_CSS]; | ||||
| 	mck.parent = at91_css_to_clk(mckr & AT91_PMC_CSS); | ||||
| 	freq = mck.parent->rate_hz; | ||||
| 	freq /= (1 << ((mckr >> 2) & 3));		/* prescale */ | ||||
| 	mck.rate_hz = freq / (1 + ((mckr >> 8) & 3));	/* mdiv */ | ||||
| 
 | ||||
| 	/* Register the PMC's standard clocks */ | ||||
| 	for (i = 0; i < ARRAY_SIZE(standard_pmc_clocks); i++) | ||||
| 		list_add_tail(&standard_pmc_clocks[i]->node, &clocks); | ||||
| 
 | ||||
| 	/* MCK and CPU clock are "always on" */ | ||||
| 	clk_enable(&mck); | ||||
| 
 | ||||
|  | @ -722,35 +615,8 @@ int __init at91_clock_init(unsigned long main_clock) | |||
| 		(unsigned) main_clock / 1000000, | ||||
| 		((unsigned) main_clock % 1000000) / 1000); | ||||
| 
 | ||||
| #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS | ||||
| 	/* establish PCK0..PCK3 parentage */ | ||||
| 	for (tmp = 0; tmp < ARRAY_SIZE(clock_list); tmp++) { | ||||
| 		struct clk	*clk = clock_list[tmp], *parent; | ||||
| 		u32		pckr; | ||||
| 
 | ||||
| 		if (!clk->programmable) | ||||
| 			continue; | ||||
| 
 | ||||
| 		pckr = at91_sys_read(AT91_PMC_PCKR(clk->id)); | ||||
| 		parent = clock_list[pckr & AT91_PMC_CSS]; | ||||
| 		clk->parent = parent; | ||||
| 		clk->rate_hz = parent->rate_hz / (1 << ((pckr >> 2) & 3)); | ||||
| 
 | ||||
| 		if (clk->users == 0) { | ||||
| 			/* not being used, so switch it off */ | ||||
| 			at91_sys_write(AT91_PMC_SCDR, clk->pmc_mask); | ||||
| 		} | ||||
| 	} | ||||
| #else | ||||
| 	/* disable all programmable clocks */ | ||||
| 	at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK0 | AT91_PMC_PCK1 | AT91_PMC_PCK2 | AT91_PMC_PCK3); | ||||
| #endif | ||||
| 
 | ||||
| 	/* enable the PIO clocks */ | ||||
| 	clk_enable(&pioA_clk); | ||||
| 	clk_enable(&pioB_clk); | ||||
| 	clk_enable(&pioC_clk); | ||||
| 	clk_enable(&pioD_clk); | ||||
| 
 | ||||
| 	/* disable all other unused peripheral clocks */ | ||||
| 	at91_periphclk_reset(); | ||||
|  |  | |||
							
								
								
									
										30
									
								
								arch/arm/mach-at91rm9200/clock.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								arch/arm/mach-at91rm9200/clock.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-at91rm9200/clock.h | ||||
|  * | ||||
|  * 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. | ||||
|  */ | ||||
| 
 | ||||
| #define CLK_TYPE_PRIMARY	0x1 | ||||
| #define CLK_TYPE_PLL		0x2 | ||||
| #define CLK_TYPE_PROGRAMMABLE	0x4 | ||||
| #define CLK_TYPE_PERIPHERAL	0x8 | ||||
| 
 | ||||
| 
 | ||||
| struct clk { | ||||
| 	struct list_head node; | ||||
| 	const char	*name;		/* unique clock name */ | ||||
| 	const char	*function;	/* function of the clock */ | ||||
| 	struct device	*dev;		/* device associated with function */ | ||||
| 	unsigned long	rate_hz; | ||||
| 	struct clk	*parent; | ||||
| 	u32		pmc_mask; | ||||
| 	void		(*mode)(struct clk *, int); | ||||
| 	unsigned	id:2;		/* PCK0..3, or 32k/main/a/b */ | ||||
| 	unsigned	type;		/* clock type */ | ||||
| 	u16		users; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| extern int __init clk_register(struct clk *clk); | ||||
|  | @ -35,13 +35,13 @@ static struct at91_usbh_data usbh_data; | |||
| 
 | ||||
| static struct resource at91_usbh_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_UHP_BASE, | ||||
| 		.end	= AT91_UHP_BASE + SZ_1M - 1, | ||||
| 		.start	= AT91RM9200_UHP_BASE, | ||||
| 		.end	= AT91RM9200_UHP_BASE + SZ_1M - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_UHP, | ||||
| 		.end	= AT91_ID_UHP, | ||||
| 		.start	= AT91RM9200_ID_UHP, | ||||
| 		.end	= AT91RM9200_ID_UHP, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  | @ -80,13 +80,13 @@ static struct at91_udc_data udc_data; | |||
| 
 | ||||
| static struct resource at91_udc_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_BASE_UDP, | ||||
| 		.end	= AT91_BASE_UDP + SZ_16K - 1, | ||||
| 		.start	= AT91RM9200_BASE_UDP, | ||||
| 		.end	= AT91RM9200_BASE_UDP + SZ_16K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_UDP, | ||||
| 		.end	= AT91_ID_UDP, | ||||
| 		.start	= AT91RM9200_ID_UDP, | ||||
| 		.end	= AT91RM9200_ID_UDP, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  | @ -131,13 +131,13 @@ static struct at91_eth_data eth_data; | |||
| 
 | ||||
| static struct resource at91_eth_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_BASE_EMAC, | ||||
| 		.end	= AT91_BASE_EMAC + SZ_16K - 1, | ||||
| 		.start	= AT91_VA_BASE_EMAC, | ||||
| 		.end	= AT91_VA_BASE_EMAC + SZ_16K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_EMAC, | ||||
| 		.end	= AT91_ID_EMAC, | ||||
| 		.start	= AT91RM9200_ID_EMAC, | ||||
| 		.end	= AT91RM9200_ID_EMAC, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  | @ -263,13 +263,13 @@ static struct at91_mmc_data mmc_data; | |||
| 
 | ||||
| static struct resource at91_mmc_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_BASE_MCI, | ||||
| 		.end	= AT91_BASE_MCI + SZ_16K - 1, | ||||
| 		.start	= AT91RM9200_BASE_MCI, | ||||
| 		.end	= AT91RM9200_BASE_MCI + SZ_16K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_MCI, | ||||
| 		.end	= AT91_ID_MCI, | ||||
| 		.start	= AT91RM9200_ID_MCI, | ||||
| 		.end	= AT91RM9200_ID_MCI, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  | @ -423,13 +423,13 @@ static u64 spi_dmamask = 0xffffffffUL; | |||
| 
 | ||||
| static struct resource at91_spi_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_BASE_SPI, | ||||
| 		.end	= AT91_BASE_SPI + SZ_16K - 1, | ||||
| 		.start	= AT91RM9200_BASE_SPI, | ||||
| 		.end	= AT91RM9200_BASE_SPI + SZ_16K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_SPI, | ||||
| 		.end	= AT91_ID_SPI, | ||||
| 		.start	= AT91RM9200_ID_SPI, | ||||
| 		.end	= AT91RM9200_ID_SPI, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  | @ -582,13 +582,13 @@ static inline void configure_dbgu_pins(void) | |||
| 
 | ||||
| static struct resource uart0_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_BASE_US0, | ||||
| 		.end	= AT91_BASE_US0 + SZ_16K - 1, | ||||
| 		.start	= AT91RM9200_BASE_US0, | ||||
| 		.end	= AT91RM9200_BASE_US0 + SZ_16K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_US0, | ||||
| 		.end	= AT91_ID_US0, | ||||
| 		.start	= AT91RM9200_ID_US0, | ||||
| 		.end	= AT91RM9200_ID_US0, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  | @ -624,13 +624,13 @@ static inline void configure_usart0_pins(void) | |||
| 
 | ||||
| static struct resource uart1_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_BASE_US1, | ||||
| 		.end	= AT91_BASE_US1 + SZ_16K - 1, | ||||
| 		.start	= AT91RM9200_BASE_US1, | ||||
| 		.end	= AT91RM9200_BASE_US1 + SZ_16K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_US1, | ||||
| 		.end	= AT91_ID_US1, | ||||
| 		.start	= AT91RM9200_ID_US1, | ||||
| 		.end	= AT91RM9200_ID_US1, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  | @ -665,13 +665,13 @@ static inline void configure_usart1_pins(void) | |||
| 
 | ||||
| static struct resource uart2_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_BASE_US2, | ||||
| 		.end	= AT91_BASE_US2 + SZ_16K - 1, | ||||
| 		.start	= AT91RM9200_BASE_US2, | ||||
| 		.end	= AT91RM9200_BASE_US2 + SZ_16K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_US2, | ||||
| 		.end	= AT91_ID_US2, | ||||
| 		.start	= AT91RM9200_ID_US2, | ||||
| 		.end	= AT91RM9200_ID_US2, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  | @ -700,13 +700,13 @@ static inline void configure_usart2_pins(void) | |||
| 
 | ||||
| static struct resource uart3_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= AT91_BASE_US3, | ||||
| 		.end	= AT91_BASE_US3 + SZ_16K - 1, | ||||
| 		.start	= AT91RM9200_BASE_US3, | ||||
| 		.end	= AT91RM9200_BASE_US3 + SZ_16K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= AT91_ID_US3, | ||||
| 		.end	= AT91_ID_US3, | ||||
| 		.start	= AT91RM9200_ID_US3, | ||||
| 		.end	= AT91RM9200_ID_US3, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
|  |  | |||
|  | @ -8,18 +8,17 @@ | |||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
|  /* Processors */ | ||||
| extern void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks); | ||||
| 
 | ||||
|  /* Interrupts */ | ||||
| extern void __init at91rm9200_init_irq(unsigned int priority[]); | ||||
| extern void __init at91rm9200_init_interrupts(unsigned int priority[]); | ||||
| extern void __init at91_aic_init(unsigned int priority[]); | ||||
| extern void __init at91_gpio_irq_setup(unsigned banks); | ||||
| 
 | ||||
|  /* Timer */ | ||||
| struct sys_timer; | ||||
| extern struct sys_timer at91rm9200_timer; | ||||
| 
 | ||||
|  /* Memory Map */ | ||||
| extern void __init at91rm9200_map_io(void); | ||||
| 
 | ||||
|  /* Clocks */ | ||||
| extern int __init at91_clock_init(unsigned long main_clock); | ||||
| struct device; | ||||
|  | @ -29,3 +28,14 @@ extern void __init at91_clock_associate(const char *id, struct device *dev, cons | |||
| extern void at91_irq_suspend(void); | ||||
| extern void at91_irq_resume(void); | ||||
| 
 | ||||
|  /* GPIO */ | ||||
| #define AT91RM9200_PQFP		3	/* AT91RM9200 PQFP package has 3 banks */ | ||||
| #define AT91RM9200_BGA		4	/* AT91RM9200 BGA package has 4 banks */ | ||||
| 
 | ||||
| struct at91_gpio_bank { | ||||
| 	unsigned short id;		/* peripheral ID */ | ||||
| 	unsigned long offset;		/* offset from system peripheral base */ | ||||
| 	struct clk *clock;		/* associated clock */ | ||||
| }; | ||||
| extern void __init at91_gpio_init(struct at91_gpio_bank *, int nr_banks); | ||||
| extern void __init at91_gpio_irq_setup(void); | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ | |||
|  * (at your option) any later version. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/clk.h> | ||||
| #include <linux/errno.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/irq.h> | ||||
|  | @ -20,12 +21,12 @@ | |||
| #include <asm/hardware.h> | ||||
| #include <asm/arch/gpio.h> | ||||
| 
 | ||||
| static const u32 pio_controller_offset[4] = { | ||||
| 	AT91_PIOA, | ||||
| 	AT91_PIOB, | ||||
| 	AT91_PIOC, | ||||
| 	AT91_PIOD, | ||||
| }; | ||||
| #include "generic.h" | ||||
| 
 | ||||
| 
 | ||||
| static struct at91_gpio_bank *gpio; | ||||
| static int gpio_banks; | ||||
| 
 | ||||
| 
 | ||||
| static inline void __iomem *pin_to_controller(unsigned pin) | ||||
| { | ||||
|  | @ -33,8 +34,8 @@ static inline void __iomem *pin_to_controller(unsigned pin) | |||
| 
 | ||||
| 	pin -= PIN_BASE; | ||||
| 	pin /= 32; | ||||
| 	if (likely(pin < BGA_GPIO_BANKS)) | ||||
| 		return sys_base + pio_controller_offset[pin]; | ||||
| 	if (likely(pin < gpio_banks)) | ||||
| 		return sys_base + gpio[pin].offset; | ||||
| 
 | ||||
| 	return NULL; | ||||
| } | ||||
|  | @ -179,7 +180,6 @@ EXPORT_SYMBOL(at91_set_multi_drive); | |||
| 
 | ||||
| /*--------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * assuming the pin is muxed as a gpio output, set its value. | ||||
|  */ | ||||
|  | @ -216,8 +216,8 @@ EXPORT_SYMBOL(at91_get_gpio_value); | |||
| 
 | ||||
| #ifdef CONFIG_PM | ||||
| 
 | ||||
| static u32 wakeups[BGA_GPIO_BANKS]; | ||||
| static u32 backups[BGA_GPIO_BANKS]; | ||||
| static u32 wakeups[MAX_GPIO_BANKS]; | ||||
| static u32 backups[MAX_GPIO_BANKS]; | ||||
| 
 | ||||
| static int gpio_irq_set_wake(unsigned pin, unsigned state) | ||||
| { | ||||
|  | @ -226,7 +226,7 @@ static int gpio_irq_set_wake(unsigned pin, unsigned state) | |||
| 	pin -= PIN_BASE; | ||||
| 	pin /= 32; | ||||
| 
 | ||||
| 	if (unlikely(pin >= BGA_GPIO_BANKS)) | ||||
| 	if (unlikely(pin >= MAX_GPIO_BANKS)) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	if (state) | ||||
|  | @ -241,8 +241,8 @@ void at91_gpio_suspend(void) | |||
| { | ||||
| 	int i; | ||||
| 
 | ||||
| 	for (i = 0; i < BGA_GPIO_BANKS; i++) { | ||||
| 		u32 pio = pio_controller_offset[i]; | ||||
| 	for (i = 0; i < gpio_banks; i++) { | ||||
| 		u32 pio = gpio[i].offset; | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * Note: drivers should have disabled GPIO interrupts that | ||||
|  | @ -257,14 +257,14 @@ void at91_gpio_suspend(void) | |||
| 		 * first place! | ||||
| 		 */ | ||||
| 		backups[i] = at91_sys_read(pio + PIO_IMR); | ||||
| 		at91_sys_write(pio_controller_offset[i] + PIO_IDR, backups[i]); | ||||
| 		at91_sys_write(pio_controller_offset[i] + PIO_IER, wakeups[i]); | ||||
| 		at91_sys_write(pio + PIO_IDR, backups[i]); | ||||
| 		at91_sys_write(pio + PIO_IER, wakeups[i]); | ||||
| 
 | ||||
| 		if (!wakeups[i]) { | ||||
| 			disable_irq_wake(AT91_ID_PIOA + i); | ||||
| 			at91_sys_write(AT91_PMC_PCDR, 1 << (AT91_ID_PIOA + i)); | ||||
| 			disable_irq_wake(gpio[i].id); | ||||
| 			at91_sys_write(AT91_PMC_PCDR, 1 << gpio[i].id); | ||||
| 		} else { | ||||
| 			enable_irq_wake(AT91_ID_PIOA + i); | ||||
| 			enable_irq_wake(gpio[i].id); | ||||
| #ifdef CONFIG_PM_DEBUG | ||||
| 			printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", "ABCD"[i], wakeups[i]); | ||||
| #endif | ||||
|  | @ -276,16 +276,13 @@ void at91_gpio_resume(void) | |||
| { | ||||
| 	int i; | ||||
| 
 | ||||
| 	for (i = 0; i < BGA_GPIO_BANKS; i++) { | ||||
| 		at91_sys_write(pio_controller_offset[i] + PIO_IDR, wakeups[i]); | ||||
| 		at91_sys_write(pio_controller_offset[i] + PIO_IER, backups[i]); | ||||
| 	} | ||||
| 	for (i = 0; i < gpio_banks; i++) { | ||||
| 		u32 pio = gpio[i].offset; | ||||
| 
 | ||||
| 	at91_sys_write(AT91_PMC_PCER, | ||||
| 			  (1 << AT91_ID_PIOA) | ||||
| 			| (1 << AT91_ID_PIOB) | ||||
| 			| (1 << AT91_ID_PIOC) | ||||
| 			| (1 << AT91_ID_PIOD)); | ||||
| 		at91_sys_write(pio + PIO_IDR, wakeups[i]); | ||||
| 		at91_sys_write(pio + PIO_IER, backups[i]); | ||||
| 		at91_sys_write(AT91_PMC_PCER, 1 << gpio[i].id); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| #else | ||||
|  | @ -377,20 +374,25 @@ static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs | |||
| 	/* now it may re-trigger */ | ||||
| } | ||||
| 
 | ||||
| /* call this from board-specific init_irq */ | ||||
| void __init at91_gpio_irq_setup(unsigned banks) | ||||
| { | ||||
| 	unsigned	pioc, pin, id; | ||||
| /*--------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| 	if (banks > 4) | ||||
| 		banks = 4; | ||||
| 	for (pioc = 0, pin = PIN_BASE, id = AT91_ID_PIOA; | ||||
| 			pioc < banks; | ||||
| 			pioc++, id++) { | ||||
| /*
 | ||||
|  * Called from the processor-specific init to enable GPIO interrupt support. | ||||
|  */ | ||||
| void __init at91_gpio_irq_setup(void) | ||||
| { | ||||
| 	unsigned	pioc, pin; | ||||
| 
 | ||||
| 	for (pioc = 0, pin = PIN_BASE; | ||||
| 			pioc < gpio_banks; | ||||
| 			pioc++) { | ||||
| 		void __iomem	*controller; | ||||
| 		unsigned	id = gpio[pioc].id; | ||||
| 		unsigned	i; | ||||
| 
 | ||||
| 		controller = (void __iomem *) AT91_VA_BASE_SYS + pio_controller_offset[pioc]; | ||||
| 		clk_enable(gpio[pioc].clock);	/* enable PIO controller's clock */ | ||||
| 
 | ||||
| 		controller = (void __iomem *) AT91_VA_BASE_SYS + gpio[pioc].offset; | ||||
| 		__raw_writel(~0, controller + PIO_IDR); | ||||
| 
 | ||||
| 		set_irq_data(id, (void *) pin); | ||||
|  | @ -408,5 +410,16 @@ void __init at91_gpio_irq_setup(unsigned banks) | |||
| 
 | ||||
| 		set_irq_chained_handler(id, gpio_irq_handler); | ||||
| 	} | ||||
| 	pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, banks); | ||||
| 	pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, gpio_banks); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Called from the processor-specific init to enable GPIO pin support. | ||||
|  */ | ||||
| void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) | ||||
| { | ||||
| 	BUG_ON(nr_banks > MAX_GPIO_BANKS); | ||||
| 
 | ||||
| 	gpio = data; | ||||
| 	gpio_banks = nr_banks; | ||||
| } | ||||
|  |  | |||
|  | @ -34,8 +34,6 @@ | |||
| #include <asm/mach/irq.h> | ||||
| #include <asm/mach/map.h> | ||||
| 
 | ||||
| #include "generic.h" | ||||
| 
 | ||||
| 
 | ||||
| static void at91_aic_mask_irq(unsigned int irq) | ||||
| { | ||||
|  | @ -61,12 +59,12 @@ static int at91_aic_set_type(unsigned irq, unsigned type) | |||
| 		srctype = AT91_AIC_SRCTYPE_RISING; | ||||
| 		break; | ||||
| 	case IRQT_LOW: | ||||
| 		if ((irq > AT91_ID_FIQ) && (irq < AT91_ID_IRQ0))	/* only supported on external interrupts */ | ||||
| 		if ((irq > AT91_ID_FIQ) && (irq < AT91RM9200_ID_IRQ0))	/* only supported on external interrupts */ | ||||
| 			return -EINVAL; | ||||
| 		srctype = AT91_AIC_SRCTYPE_LOW; | ||||
| 		break; | ||||
| 	case IRQT_FALLING: | ||||
| 		if ((irq > AT91_ID_FIQ) && (irq < AT91_ID_IRQ0))	/* only supported on external interrupts */ | ||||
| 		if ((irq > AT91_ID_FIQ) && (irq < AT91RM9200_ID_IRQ0))	/* only supported on external interrupts */ | ||||
| 			return -EINVAL; | ||||
| 		srctype = AT91_AIC_SRCTYPE_FALLING; | ||||
| 		break; | ||||
|  |  | |||
|  | @ -123,13 +123,13 @@ static int at91_pm_enter(suspend_state_t state) | |||
| 			(at91_sys_read(AT91_PMC_PCSR) | ||||
| 					| (1 << AT91_ID_FIQ) | ||||
| 					| (1 << AT91_ID_SYS) | ||||
| 					| (1 << AT91_ID_IRQ0) | ||||
| 					| (1 << AT91_ID_IRQ1) | ||||
| 					| (1 << AT91_ID_IRQ2) | ||||
| 					| (1 << AT91_ID_IRQ3) | ||||
| 					| (1 << AT91_ID_IRQ4) | ||||
| 					| (1 << AT91_ID_IRQ5) | ||||
| 					| (1 << AT91_ID_IRQ6)) | ||||
| 					| (1 << AT91RM9200_ID_IRQ0) | ||||
| 					| (1 << AT91RM9200_ID_IRQ1) | ||||
| 					| (1 << AT91RM9200_ID_IRQ2) | ||||
| 					| (1 << AT91RM9200_ID_IRQ3) | ||||
| 					| (1 << AT91RM9200_ID_IRQ4) | ||||
| 					| (1 << AT91RM9200_ID_IRQ5) | ||||
| 					| (1 << AT91RM9200_ID_IRQ6)) | ||||
| 				& at91_sys_read(AT91_AIC_IMR), | ||||
| 			state); | ||||
| 
 | ||||
|  |  | |||
|  | @ -15,6 +15,12 @@ config MACH_EDB9302 | |||
| 	  Say 'Y' here if you want your kernel to support the Cirrus | ||||
| 	  Logic EDB9302 Evaluation Board. | ||||
| 
 | ||||
| config MACH_EDB9312 | ||||
| 	bool "Support Cirrus Logic EDB9312" | ||||
| 	help | ||||
| 	  Say 'Y' here if you want your kernel to support the Cirrus | ||||
| 	  Logic EDB9312 Evaluation Board. | ||||
| 
 | ||||
| config MACH_EDB9315 | ||||
| 	bool "Support Cirrus Logic EDB9315" | ||||
| 	help | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ obj-n			:= | |||
| obj-			:= | ||||
| 
 | ||||
| obj-$(CONFIG_MACH_EDB9302)	+= edb9302.o | ||||
| obj-$(CONFIG_MACH_EDB9312)	+= edb9312.o | ||||
| obj-$(CONFIG_MACH_EDB9315)	+= edb9315.o | ||||
| obj-$(CONFIG_MACH_EDB9315A)	+= edb9315a.o | ||||
| obj-$(CONFIG_MACH_GESBC9312)	+= gesbc9312.o | ||||
|  |  | |||
							
								
								
									
										63
									
								
								arch/arm/mach-ep93xx/edb9312.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								arch/arm/mach-ep93xx/edb9312.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-ep93xx/edb9312.c | ||||
|  * Cirrus Logic EDB9312 support. | ||||
|  * | ||||
|  * Copyright (C) 2006 Infosys Technologies Limited | ||||
|  * 	Toufeeq Hussain	<toufeeq_hussain@infosys.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/config.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/mm.h> | ||||
| #include <linux/sched.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/ioport.h> | ||||
| #include <linux/mtd/physmap.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/mach/arch.h> | ||||
| 
 | ||||
| static struct physmap_flash_data edb9312_flash_data = { | ||||
| 	.width		= 4, | ||||
| }; | ||||
| 
 | ||||
| static struct resource edb9312_flash_resource = { | ||||
| 	.start		= 0x60000000, | ||||
| 	.end		= 0x61ffffff, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device edb9312_flash = { | ||||
| 	.name		= "physmap-flash", | ||||
| 	.id		= 0, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &edb9312_flash_data, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &edb9312_flash_resource, | ||||
| }; | ||||
| 
 | ||||
| static void __init edb9312_init_machine(void) | ||||
| { | ||||
| 	ep93xx_init_devices(); | ||||
| 	platform_device_register(&edb9312_flash); | ||||
| } | ||||
| 
 | ||||
| MACHINE_START(EDB9312, "Cirrus Logic EDB9312 Evaluation Board") | ||||
| 	/* Maintainer: Toufeeq Hussain <toufeeq_hussain@infosys.com> */ | ||||
| 	.phys_io	= EP93XX_APB_PHYS_BASE, | ||||
| 	.io_pg_offst	= ((EP93XX_APB_VIRT_BASE) >> 18) & 0xfffc, | ||||
| 	.boot_params	= 0x00000100, | ||||
| 	.map_io		= ep93xx_map_io, | ||||
| 	.init_irq	= ep93xx_init_irq, | ||||
| 	.timer		= &ep93xx_timer, | ||||
| 	.init_machine	= edb9312_init_machine, | ||||
| MACHINE_END | ||||
|  | @ -69,16 +69,16 @@ dc21285_read_config(struct pci_bus *bus, unsigned int devfn, int where, | |||
| 	if (addr) | ||||
| 		switch (size) { | ||||
| 		case 1: | ||||
| 			asm("ldr%?b	%0, [%1, %2]" | ||||
| 				: "=r" (v) : "r" (addr), "r" (where)); | ||||
| 			asm("ldrb	%0, [%1, %2]" | ||||
| 				: "=r" (v) : "r" (addr), "r" (where) : "cc"); | ||||
| 			break; | ||||
| 		case 2: | ||||
| 			asm("ldr%?h	%0, [%1, %2]" | ||||
| 				: "=r" (v) : "r" (addr), "r" (where)); | ||||
| 			asm("ldrh	%0, [%1, %2]" | ||||
| 				: "=r" (v) : "r" (addr), "r" (where) : "cc"); | ||||
| 			break; | ||||
| 		case 4: | ||||
| 			asm("ldr%?	%0, [%1, %2]" | ||||
| 				: "=r" (v) : "r" (addr), "r" (where)); | ||||
| 			asm("ldr	%0, [%1, %2]" | ||||
| 				: "=r" (v) : "r" (addr), "r" (where) : "cc"); | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
|  | @ -103,16 +103,19 @@ dc21285_write_config(struct pci_bus *bus, unsigned int devfn, int where, | |||
| 	if (addr) | ||||
| 		switch (size) { | ||||
| 		case 1: | ||||
| 			asm("str%?b	%0, [%1, %2]" | ||||
| 				: : "r" (value), "r" (addr), "r" (where)); | ||||
| 			asm("strb	%0, [%1, %2]" | ||||
| 				: : "r" (value), "r" (addr), "r" (where) | ||||
| 				: "cc"); | ||||
| 			break; | ||||
| 		case 2: | ||||
| 			asm("str%?h	%0, [%1, %2]" | ||||
| 				: : "r" (value), "r" (addr), "r" (where)); | ||||
| 			asm("strh	%0, [%1, %2]" | ||||
| 				: : "r" (value), "r" (addr), "r" (where) | ||||
| 				: "cc"); | ||||
| 			break; | ||||
| 		case 4: | ||||
| 			asm("str%?	%0, [%1, %2]" | ||||
| 				: : "r" (value), "r" (addr), "r" (where)); | ||||
| 			asm("str	%0, [%1, %2]" | ||||
| 				: : "r" (value), "r" (addr), "r" (where) | ||||
| 				: "cc"); | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										35
									
								
								arch/arm/mach-iop32x/Kconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								arch/arm/mach-iop32x/Kconfig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| if ARCH_IOP32X | ||||
| 
 | ||||
| menu "IOP32x Implementation Options" | ||||
| 
 | ||||
| comment "IOP32x Platform Types" | ||||
| 
 | ||||
| config MACH_GLANTANK | ||||
| 	bool "Enable support for the IO-Data GLAN Tank" | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the GLAN Tank | ||||
| 	  NAS appliance or machines from IO-Data's HDL-Gxxx, HDL-GWxxx | ||||
| 	  and HDL-GZxxx series. | ||||
| 
 | ||||
| config ARCH_IQ80321 | ||||
| 	bool "Enable support for IQ80321" | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel IQ80321 | ||||
| 	  evaluation kit for the IOP321 processor. | ||||
| 
 | ||||
| config ARCH_IQ31244 | ||||
| 	bool "Enable support for EP80219/IQ31244" | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel EP80219 | ||||
| 	  evaluation kit for the Intel 80219 processor (a IOP321 variant) | ||||
| 	  or the IQ31244 evaluation kit for the IOP321 processor. | ||||
| 
 | ||||
| config MACH_N2100 | ||||
| 	bool "Enable support for the Thecus n2100" | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Thecus n2100 | ||||
| 	  NAS appliance. | ||||
| 
 | ||||
| endmenu | ||||
| 
 | ||||
| endif | ||||
							
								
								
									
										13
									
								
								arch/arm/mach-iop32x/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								arch/arm/mach-iop32x/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| #
 | ||||
| # Makefile for the linux kernel.
 | ||||
| #
 | ||||
| 
 | ||||
| obj-y			:= irq.o | ||||
| obj-m			:= | ||||
| obj-n			:= | ||||
| obj-			:= | ||||
| 
 | ||||
| obj-$(CONFIG_MACH_GLANTANK) += glantank.o | ||||
| obj-$(CONFIG_ARCH_IQ80321) += iq80321.o | ||||
| obj-$(CONFIG_ARCH_IQ31244) += iq31244.o | ||||
| obj-$(CONFIG_MACH_N2100) += n2100.o | ||||
							
								
								
									
										3
									
								
								arch/arm/mach-iop32x/Makefile.boot
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								arch/arm/mach-iop32x/Makefile.boot
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
|    zreladdr-y	:= 0xa0008000 | ||||
| params_phys-y	:= 0xa0000100 | ||||
| initrd_phys-y	:= 0xa0800000 | ||||
							
								
								
									
										195
									
								
								arch/arm/mach-iop32x/glantank.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								arch/arm/mach-iop32x/glantank.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,195 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop32x/glantank.c | ||||
|  * | ||||
|  * Board support code for the GLAN Tank. | ||||
|  * | ||||
|  * Copyright (C) 2006 Martin Michlmayr <tbm@cyrius.com> | ||||
|  * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org> | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/serial_core.h> | ||||
| #include <linux/serial_8250.h> | ||||
| #include <linux/mtd/physmap.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach/time.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/page.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * GLAN Tank timer tick configuration. | ||||
|  */ | ||||
| static void __init glantank_timer_init(void) | ||||
| { | ||||
| 	/* 33.333 MHz crystal.  */ | ||||
| 	iop3xx_init_time(200000000); | ||||
| } | ||||
| 
 | ||||
| static struct sys_timer glantank_timer = { | ||||
| 	.init		= glantank_timer_init, | ||||
| 	.offset		= iop3xx_gettimeoffset, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * GLAN Tank I/O. | ||||
|  */ | ||||
| static struct map_desc glantank_io_desc[] __initdata = { | ||||
| 	{	/* on-board devices */ | ||||
| 		.virtual	= GLANTANK_UART, | ||||
| 		.pfn		= __phys_to_pfn(GLANTANK_UART), | ||||
| 		.length		= 0x00100000, | ||||
| 		.type		= MT_DEVICE | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init glantank_map_io(void) | ||||
| { | ||||
| 	iop3xx_map_io(); | ||||
| 	iotable_init(glantank_io_desc, ARRAY_SIZE(glantank_io_desc)); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * GLAN Tank PCI. | ||||
|  */ | ||||
| #define INTA	IRQ_IOP32X_XINT0 | ||||
| #define INTB	IRQ_IOP32X_XINT1 | ||||
| #define INTC	IRQ_IOP32X_XINT2 | ||||
| #define INTD	IRQ_IOP32X_XINT3 | ||||
| 
 | ||||
| static inline int __init | ||||
| glantank_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||
| { | ||||
| 	static int pci_irq_table[][4] = { | ||||
| 		/*
 | ||||
| 		 * PCI IDSEL/INTPIN->INTLINE | ||||
| 		 * A       B       C       D | ||||
| 		 */ | ||||
| 		{INTD, INTD, INTD, INTD}, /* UART (8250) */ | ||||
| 		{INTA, INTA, INTA, INTA}, /* Ethernet (E1000) */ | ||||
| 		{INTB, INTB, INTB, INTB}, /* IDE (AEC6280R) */ | ||||
| 		{INTC, INTC, INTC, INTC}, /* USB (NEC) */ | ||||
| 	}; | ||||
| 
 | ||||
| 	BUG_ON(pin < 1 || pin > 4); | ||||
| 
 | ||||
| 	return pci_irq_table[slot % 4][pin - 1]; | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci glantank_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iop3xx_pci_setup, | ||||
| 	.preinit	= iop3xx_pci_preinit, | ||||
| 	.scan		= iop3xx_pci_scan_bus, | ||||
| 	.map_irq	= glantank_pci_map_irq, | ||||
| }; | ||||
| 
 | ||||
| static int __init glantank_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_glantank()) | ||||
| 		pci_common_init(&glantank_pci); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(glantank_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * GLAN Tank machine initialization. | ||||
|  */ | ||||
| static struct physmap_flash_data glantank_flash_data = { | ||||
| 	.width		= 1, | ||||
| }; | ||||
| 
 | ||||
| static struct resource glantank_flash_resource = { | ||||
| 	.start		= 0xf0000000, | ||||
| 	.end		= 0xf007ffff, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device glantank_flash_device = { | ||||
| 	.name		= "physmap-flash", | ||||
| 	.id		= 0, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &glantank_flash_data, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &glantank_flash_resource, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_serial8250_port glantank_serial_port[] = { | ||||
| 	{ | ||||
| 		.mapbase	= GLANTANK_UART, | ||||
| 		.membase	= (char *)GLANTANK_UART, | ||||
| 		.irq		= IRQ_IOP32X_XINT3, | ||||
| 		.flags		= UPF_SKIP_TEST, | ||||
| 		.iotype		= UPIO_MEM, | ||||
| 		.regshift	= 0, | ||||
| 		.uartclk	= 1843200, | ||||
| 	}, | ||||
| 	{ }, | ||||
| }; | ||||
| 
 | ||||
| static struct resource glantank_uart_resource = { | ||||
| 	.start		= GLANTANK_UART, | ||||
| 	.end		= GLANTANK_UART + 7, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device glantank_serial_device = { | ||||
| 	.name		= "serial8250", | ||||
| 	.id		= PLAT8250_DEV_PLATFORM, | ||||
| 	.dev		= { | ||||
| 		.platform_data		= glantank_serial_port, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &glantank_uart_resource, | ||||
| }; | ||||
| 
 | ||||
| static void glantank_power_off(void) | ||||
| { | ||||
| 	__raw_writeb(0x01, 0xfe8d0004); | ||||
| 
 | ||||
| 	while (1) | ||||
| 		; | ||||
| } | ||||
| 
 | ||||
| static void __init glantank_init_machine(void) | ||||
| { | ||||
| 	platform_device_register(&iop3xx_i2c0_device); | ||||
| 	platform_device_register(&iop3xx_i2c1_device); | ||||
| 	platform_device_register(&glantank_flash_device); | ||||
| 	platform_device_register(&glantank_serial_device); | ||||
| 
 | ||||
| 	pm_power_off = glantank_power_off; | ||||
| } | ||||
| 
 | ||||
| MACHINE_START(GLANTANK, "GLAN Tank") | ||||
| 	/* Maintainer: Lennert Buytenhek <buytenh@wantstofly.org> */ | ||||
| 	.phys_io	= GLANTANK_UART, | ||||
| 	.io_pg_offst	= ((GLANTANK_UART) >> 18) & 0xfffc, | ||||
| 	.boot_params	= 0xa0000100, | ||||
| 	.map_io		= glantank_map_io, | ||||
| 	.init_irq	= iop32x_init_irq, | ||||
| 	.timer		= &glantank_timer, | ||||
| 	.init_machine	= glantank_init_machine, | ||||
| MACHINE_END | ||||
							
								
								
									
										293
									
								
								arch/arm/mach-iop32x/iq31244.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										293
									
								
								arch/arm/mach-iop32x/iq31244.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,293 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop32x/iq31244.c | ||||
|  * | ||||
|  * Board support code for the Intel EP80219 and IQ31244 platforms. | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * Copyright 2003 (c) MontaVista, Software, Inc. | ||||
|  * Copyright (C) 2004 Intel Corp. | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/delay.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/pm.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/serial_core.h> | ||||
| #include <linux/serial_8250.h> | ||||
| #include <linux/mtd/physmap.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach/time.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/pgtable.h> | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * The EP80219 and IQ31244 use the same machine ID.  To find out | ||||
|  * which of the two we're running on, we look at the processor ID. | ||||
|  */ | ||||
| static int is_80219(void) | ||||
| { | ||||
| 	extern int processor_id; | ||||
| 	return !!((processor_id & 0xffffffe0) == 0x69052e20); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * EP80219/IQ31244 timer tick configuration. | ||||
|  */ | ||||
| static void __init iq31244_timer_init(void) | ||||
| { | ||||
| 	if (is_80219()) { | ||||
| 		/* 33.333 MHz crystal.  */ | ||||
| 		iop3xx_init_time(200000000); | ||||
| 	} else { | ||||
| 		/* 33.000 MHz crystal.  */ | ||||
| 		iop3xx_init_time(198000000); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static struct sys_timer iq31244_timer = { | ||||
| 	.init		= iq31244_timer_init, | ||||
| 	.offset		= iop3xx_gettimeoffset, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ31244 I/O. | ||||
|  */ | ||||
| static struct map_desc iq31244_io_desc[] __initdata = { | ||||
| 	{	/* on-board devices */ | ||||
| 		.virtual	= IQ31244_UART, | ||||
| 		.pfn		= __phys_to_pfn(IQ31244_UART), | ||||
| 		.length		= 0x00100000, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init iq31244_map_io(void) | ||||
| { | ||||
| 	iop3xx_map_io(); | ||||
| 	iotable_init(iq31244_io_desc, ARRAY_SIZE(iq31244_io_desc)); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * EP80219/IQ31244 PCI. | ||||
|  */ | ||||
| static inline int __init | ||||
| ep80219_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||
| { | ||||
| 	int irq; | ||||
| 
 | ||||
| 	if (slot == 0) { | ||||
| 		/* CFlash */ | ||||
| 		irq = IRQ_IOP32X_XINT1; | ||||
| 	} else if (slot == 1) { | ||||
| 		/* 82551 Pro 100 */ | ||||
| 		irq = IRQ_IOP32X_XINT0; | ||||
| 	} else if (slot == 2) { | ||||
| 		/* PCI-X Slot */ | ||||
| 		irq = IRQ_IOP32X_XINT3; | ||||
| 	} else if (slot == 3) { | ||||
| 		/* SATA */ | ||||
| 		irq = IRQ_IOP32X_XINT2; | ||||
| 	} else { | ||||
| 		printk(KERN_ERR "ep80219_pci_map_irq() called for unknown " | ||||
| 			"device PCI:%d:%d:%d\n", dev->bus->number, | ||||
| 			PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); | ||||
| 		irq = -1; | ||||
| 	} | ||||
| 
 | ||||
| 	return irq; | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci ep80219_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iop3xx_pci_setup, | ||||
| 	.preinit	= iop3xx_pci_preinit, | ||||
| 	.scan		= iop3xx_pci_scan_bus, | ||||
| 	.map_irq	= ep80219_pci_map_irq, | ||||
| }; | ||||
| 
 | ||||
| static inline int __init | ||||
| iq31244_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||
| { | ||||
| 	int irq; | ||||
| 
 | ||||
| 	if (slot == 0) { | ||||
| 		/* CFlash */ | ||||
| 		irq = IRQ_IOP32X_XINT1; | ||||
| 	} else if (slot == 1) { | ||||
| 		/* SATA */ | ||||
| 		irq = IRQ_IOP32X_XINT2; | ||||
| 	} else if (slot == 2) { | ||||
| 		/* PCI-X Slot */ | ||||
| 		irq = IRQ_IOP32X_XINT3; | ||||
| 	} else if (slot == 3) { | ||||
| 		/* 82546 GigE */ | ||||
| 		irq = IRQ_IOP32X_XINT0; | ||||
| 	} else { | ||||
| 		printk(KERN_ERR "iq31244_pci_map_irq called for unknown " | ||||
| 			"device PCI:%d:%d:%d\n", dev->bus->number, | ||||
| 			PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); | ||||
| 		irq = -1; | ||||
| 	} | ||||
| 
 | ||||
| 	return irq; | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci iq31244_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iop3xx_pci_setup, | ||||
| 	.preinit	= iop3xx_pci_preinit, | ||||
| 	.scan		= iop3xx_pci_scan_bus, | ||||
| 	.map_irq	= iq31244_pci_map_irq, | ||||
| }; | ||||
| 
 | ||||
| static int __init iq31244_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_iq31244()) { | ||||
| 		if (is_80219()) { | ||||
| 			pci_common_init(&ep80219_pci); | ||||
| 		} else { | ||||
| 			pci_common_init(&iq31244_pci); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(iq31244_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ31244 machine initialisation. | ||||
|  */ | ||||
| static struct physmap_flash_data iq31244_flash_data = { | ||||
| 	.width		= 2, | ||||
| }; | ||||
| 
 | ||||
| static struct resource iq31244_flash_resource = { | ||||
| 	.start		= 0xf0000000, | ||||
| 	.end		= 0xf07fffff, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iq31244_flash_device = { | ||||
| 	.name		= "physmap-flash", | ||||
| 	.id		= 0, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &iq31244_flash_data, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &iq31244_flash_resource, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_serial8250_port iq31244_serial_port[] = { | ||||
| 	{ | ||||
| 		.mapbase	= IQ31244_UART, | ||||
| 		.membase	= (char *)IQ31244_UART, | ||||
| 		.irq		= IRQ_IOP32X_XINT1, | ||||
| 		.flags		= UPF_SKIP_TEST, | ||||
| 		.iotype		= UPIO_MEM, | ||||
| 		.regshift	= 0, | ||||
| 		.uartclk	= 1843200, | ||||
| 	}, | ||||
| 	{ }, | ||||
| }; | ||||
| 
 | ||||
| static struct resource iq31244_uart_resource = { | ||||
| 	.start		= IQ31244_UART, | ||||
| 	.end		= IQ31244_UART + 7, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iq31244_serial_device = { | ||||
| 	.name		= "serial8250", | ||||
| 	.id		= PLAT8250_DEV_PLATFORM, | ||||
| 	.dev		= { | ||||
| 		.platform_data		= iq31244_serial_port, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &iq31244_uart_resource, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * This function will send a SHUTDOWN_COMPLETE message to the PIC | ||||
|  * controller over I2C.  We are not using the i2c subsystem since | ||||
|  * we are going to power off and it may be removed | ||||
|  */ | ||||
| void ep80219_power_off(void) | ||||
| { | ||||
| 	/*
 | ||||
| 	 * Send the Address byte w/ the start condition | ||||
| 	 */ | ||||
| 	*IOP3XX_IDBR1 = 0x60; | ||||
| 	*IOP3XX_ICR1 = 0xE9; | ||||
| 	mdelay(1); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Send the START_MSG byte w/ no start or stop condition | ||||
| 	 */ | ||||
| 	*IOP3XX_IDBR1 = 0x0F; | ||||
| 	*IOP3XX_ICR1 = 0xE8; | ||||
| 	mdelay(1); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Send the SHUTDOWN_COMPLETE Message ID byte w/ no start or | ||||
| 	 * stop condition | ||||
| 	 */ | ||||
| 	*IOP3XX_IDBR1 = 0x03; | ||||
| 	*IOP3XX_ICR1 = 0xE8; | ||||
| 	mdelay(1); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Send an ignored byte w/ stop condition | ||||
| 	 */ | ||||
| 	*IOP3XX_IDBR1 = 0x00; | ||||
| 	*IOP3XX_ICR1 = 0xEA; | ||||
| 
 | ||||
| 	while (1) | ||||
| 		; | ||||
| } | ||||
| 
 | ||||
| static void __init iq31244_init_machine(void) | ||||
| { | ||||
| 	platform_device_register(&iop3xx_i2c0_device); | ||||
| 	platform_device_register(&iop3xx_i2c1_device); | ||||
| 	platform_device_register(&iq31244_flash_device); | ||||
| 	platform_device_register(&iq31244_serial_device); | ||||
| 
 | ||||
| 	if (is_80219()) | ||||
| 		pm_power_off = ep80219_power_off; | ||||
| } | ||||
| 
 | ||||
| MACHINE_START(IQ31244, "Intel IQ31244") | ||||
| 	/* Maintainer: Intel Corp. */ | ||||
| 	.phys_io	= IQ31244_UART, | ||||
| 	.io_pg_offst	= ((IQ31244_UART) >> 18) & 0xfffc, | ||||
| 	.boot_params	= 0xa0000100, | ||||
| 	.map_io		= iq31244_map_io, | ||||
| 	.init_irq	= iop32x_init_irq, | ||||
| 	.timer		= &iq31244_timer, | ||||
| 	.init_machine	= iq31244_init_machine, | ||||
| MACHINE_END | ||||
							
								
								
									
										193
									
								
								arch/arm/mach-iop32x/iq80321.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								arch/arm/mach-iop32x/iq80321.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,193 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop32x/iq80321.c | ||||
|  * | ||||
|  * Board support code for the Intel IQ80321 platform. | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * Copyright (C) 2004 Intel Corp. | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/serial_core.h> | ||||
| #include <linux/serial_8250.h> | ||||
| #include <linux/mtd/physmap.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach/time.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/pgtable.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80321 timer tick configuration. | ||||
|  */ | ||||
| static void __init iq80321_timer_init(void) | ||||
| { | ||||
| 	/* 33.333 MHz crystal.  */ | ||||
| 	iop3xx_init_time(200000000); | ||||
| } | ||||
| 
 | ||||
| static struct sys_timer iq80321_timer = { | ||||
| 	.init		= iq80321_timer_init, | ||||
| 	.offset		= iop3xx_gettimeoffset, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80321 I/O. | ||||
|  */ | ||||
| static struct map_desc iq80321_io_desc[] __initdata = { | ||||
|  	{	/* on-board devices */ | ||||
| 		.virtual	= IQ80321_UART, | ||||
| 		.pfn		= __phys_to_pfn(IQ80321_UART), | ||||
| 		.length		= 0x00100000, | ||||
| 		.type		= MT_DEVICE, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init iq80321_map_io(void) | ||||
| { | ||||
| 	iop3xx_map_io(); | ||||
| 	iotable_init(iq80321_io_desc, ARRAY_SIZE(iq80321_io_desc)); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80321 PCI. | ||||
|  */ | ||||
| static inline int __init | ||||
| iq80321_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||
| { | ||||
| 	int irq; | ||||
| 
 | ||||
| 	if ((slot == 2 || slot == 6) && pin == 1) { | ||||
| 		/* PCI-X Slot INTA */ | ||||
| 		irq = IRQ_IOP32X_XINT2; | ||||
| 	} else if ((slot == 2 || slot == 6) && pin == 2) { | ||||
| 		/* PCI-X Slot INTA */ | ||||
| 		irq = IRQ_IOP32X_XINT3; | ||||
| 	} else if ((slot == 2 || slot == 6) && pin == 3) { | ||||
| 		/* PCI-X Slot INTA */ | ||||
| 		irq = IRQ_IOP32X_XINT0; | ||||
| 	} else if ((slot == 2 || slot == 6) && pin == 4) { | ||||
| 		/* PCI-X Slot INTA */ | ||||
| 		irq = IRQ_IOP32X_XINT1; | ||||
| 	} else if (slot == 4 || slot == 8) { | ||||
| 		/* Gig-E */ | ||||
| 		irq = IRQ_IOP32X_XINT0; | ||||
| 	} else { | ||||
| 		printk(KERN_ERR "iq80321_pci_map_irq() called for unknown " | ||||
| 			"device PCI:%d:%d:%d\n", dev->bus->number, | ||||
| 			PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); | ||||
| 		irq = -1; | ||||
| 	} | ||||
| 
 | ||||
| 	return irq; | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci iq80321_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iop3xx_pci_setup, | ||||
| 	.preinit	= iop3xx_pci_preinit, | ||||
| 	.scan		= iop3xx_pci_scan_bus, | ||||
| 	.map_irq	= iq80321_pci_map_irq, | ||||
| }; | ||||
| 
 | ||||
| static int __init iq80321_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_iq80321()) | ||||
| 		pci_common_init(&iq80321_pci); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(iq80321_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80321 machine initialisation. | ||||
|  */ | ||||
| static struct physmap_flash_data iq80321_flash_data = { | ||||
| 	.width		= 1, | ||||
| }; | ||||
| 
 | ||||
| static struct resource iq80321_flash_resource = { | ||||
| 	.start		= 0xf0000000, | ||||
| 	.end		= 0xf07fffff, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iq80321_flash_device = { | ||||
| 	.name		= "physmap-flash", | ||||
| 	.id		= 0, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &iq80321_flash_data, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &iq80321_flash_resource, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_serial8250_port iq80321_serial_port[] = { | ||||
| 	{ | ||||
| 		.mapbase	= IQ80321_UART, | ||||
| 		.membase	= (char *)IQ80321_UART, | ||||
| 		.irq		= IRQ_IOP32X_XINT1, | ||||
| 		.flags		= UPF_SKIP_TEST, | ||||
| 		.iotype		= UPIO_MEM, | ||||
| 		.regshift	= 0, | ||||
| 		.uartclk	= 1843200, | ||||
| 	}, | ||||
| 	{ }, | ||||
| }; | ||||
| 
 | ||||
| static struct resource iq80321_uart_resource = { | ||||
| 	.start		= IQ80321_UART, | ||||
| 	.end		= IQ80321_UART + 7, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iq80321_serial_device = { | ||||
| 	.name		= "serial8250", | ||||
| 	.id		= PLAT8250_DEV_PLATFORM, | ||||
| 	.dev		= { | ||||
| 		.platform_data		= iq80321_serial_port, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &iq80321_uart_resource, | ||||
| }; | ||||
| 
 | ||||
| static void __init iq80321_init_machine(void) | ||||
| { | ||||
| 	platform_device_register(&iop3xx_i2c0_device); | ||||
| 	platform_device_register(&iop3xx_i2c1_device); | ||||
| 	platform_device_register(&iq80321_flash_device); | ||||
| 	platform_device_register(&iq80321_serial_device); | ||||
| } | ||||
| 
 | ||||
| MACHINE_START(IQ80321, "Intel IQ80321") | ||||
| 	/* Maintainer: Intel Corp. */ | ||||
| 	.phys_io	= IQ80321_UART, | ||||
| 	.io_pg_offst	= ((IQ80321_UART) >> 18) & 0xfffc, | ||||
| 	.boot_params	= 0xa0000100, | ||||
| 	.map_io		= iq80321_map_io, | ||||
| 	.init_irq	= iop32x_init_irq, | ||||
| 	.timer		= &iq80321_timer, | ||||
| 	.init_machine	= iq80321_init_machine, | ||||
| MACHINE_END | ||||
							
								
								
									
										76
									
								
								arch/arm/mach-iop32x/irq.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								arch/arm/mach-iop32x/irq.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop32x/irq.c | ||||
|  * | ||||
|  * Generic IOP32X IRQ handling functionality | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * | ||||
|  * 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 <linux/init.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/list.h> | ||||
| #include <asm/mach/irq.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| static u32 iop32x_mask; | ||||
| 
 | ||||
| static inline void intctl_write(u32 val) | ||||
| { | ||||
| 	iop3xx_cp6_enable(); | ||||
| 	asm volatile("mcr p6, 0, %0, c0, c0, 0" : : "r" (val)); | ||||
| 	iop3xx_cp6_disable(); | ||||
| } | ||||
| 
 | ||||
| static inline void intstr_write(u32 val) | ||||
| { | ||||
| 	iop3xx_cp6_enable(); | ||||
| 	asm volatile("mcr p6, 0, %0, c4, c0, 0" : : "r" (val)); | ||||
| 	iop3xx_cp6_disable(); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop32x_irq_mask(unsigned int irq) | ||||
| { | ||||
| 	iop32x_mask &= ~(1 << irq); | ||||
| 	intctl_write(iop32x_mask); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop32x_irq_unmask(unsigned int irq) | ||||
| { | ||||
| 	iop32x_mask |= 1 << irq; | ||||
| 	intctl_write(iop32x_mask); | ||||
| } | ||||
| 
 | ||||
| struct irq_chip ext_chip = { | ||||
| 	.name	= "IOP32x", | ||||
| 	.ack	= iop32x_irq_mask, | ||||
| 	.mask	= iop32x_irq_mask, | ||||
| 	.unmask	= iop32x_irq_unmask, | ||||
| }; | ||||
| 
 | ||||
| void __init iop32x_init_irq(void) | ||||
| { | ||||
| 	int i; | ||||
| 
 | ||||
| 	intctl_write(0); | ||||
| 	intstr_write(0); | ||||
| 	if (machine_is_glantank() || | ||||
| 	    machine_is_iq80321() || | ||||
| 	    machine_is_iq31244() || | ||||
| 	    machine_is_n2100()) | ||||
| 		*IOP3XX_PCIIRSR = 0x0f; | ||||
| 
 | ||||
| 	for (i = 0; i < NR_IRQS; i++) { | ||||
| 		set_irq_chip(i, &ext_chip); | ||||
| 		set_irq_handler(i, do_level_IRQ); | ||||
| 		set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										251
									
								
								arch/arm/mach-iop32x/n2100.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								arch/arm/mach-iop32x/n2100.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,251 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop32x/n2100.c | ||||
|  * | ||||
|  * Board support code for the Thecus N2100 platform. | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * Copyright 2003 (c) MontaVista, Software, Inc. | ||||
|  * Copyright (C) 2004 Intel Corp. | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/delay.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/pm.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/serial_core.h> | ||||
| #include <linux/serial_8250.h> | ||||
| #include <linux/mtd/physmap.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <linux/reboot.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach/time.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/pgtable.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * N2100 timer tick configuration. | ||||
|  */ | ||||
| static void __init n2100_timer_init(void) | ||||
| { | ||||
| 	/* 33.000 MHz crystal.  */ | ||||
| 	iop3xx_init_time(198000000); | ||||
| } | ||||
| 
 | ||||
| static struct sys_timer n2100_timer = { | ||||
| 	.init		= n2100_timer_init, | ||||
| 	.offset		= iop3xx_gettimeoffset, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * N2100 I/O. | ||||
|  */ | ||||
| static struct map_desc n2100_io_desc[] __initdata = { | ||||
| 	{	/* on-board devices */ | ||||
| 		.virtual	= N2100_UART, | ||||
| 		.pfn		= __phys_to_pfn(N2100_UART), | ||||
| 		.length		= 0x00100000, | ||||
| 		.type		= MT_DEVICE | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init n2100_map_io(void) | ||||
| { | ||||
| 	iop3xx_map_io(); | ||||
| 	iotable_init(n2100_io_desc, ARRAY_SIZE(n2100_io_desc)); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * N2100 PCI. | ||||
|  */ | ||||
| static inline int __init | ||||
| n2100_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||
| { | ||||
| 	int irq; | ||||
| 
 | ||||
| 	if (PCI_SLOT(dev->devfn) == 1) { | ||||
| 		/* RTL8110SB #1 */ | ||||
| 		irq = IRQ_IOP32X_XINT0; | ||||
| 	} else if (PCI_SLOT(dev->devfn) == 2) { | ||||
| 		/* RTL8110SB #2 */ | ||||
| 		irq = IRQ_IOP32X_XINT1; | ||||
| 	} else if (PCI_SLOT(dev->devfn) == 3) { | ||||
| 		/* Sil3512 */ | ||||
| 		irq = IRQ_IOP32X_XINT2; | ||||
| 	} else if (PCI_SLOT(dev->devfn) == 4 && pin == 1) { | ||||
| 		/* VT6212 INTA */ | ||||
| 		irq = IRQ_IOP32X_XINT1; | ||||
| 	} else if (PCI_SLOT(dev->devfn) == 4 && pin == 2) { | ||||
| 		/* VT6212 INTB */ | ||||
| 		irq = IRQ_IOP32X_XINT0; | ||||
| 	} else if (PCI_SLOT(dev->devfn) == 4 && pin == 3) { | ||||
| 		/* VT6212 INTC */ | ||||
| 		irq = IRQ_IOP32X_XINT2; | ||||
| 	} else if (PCI_SLOT(dev->devfn) == 5) { | ||||
| 		/* Mini-PCI slot */ | ||||
| 		irq = IRQ_IOP32X_XINT3; | ||||
| 	} else { | ||||
| 		printk(KERN_ERR "n2100_pci_map_irq() called for unknown " | ||||
| 			"device PCI:%d:%d:%d\n", dev->bus->number, | ||||
| 			PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); | ||||
| 		irq = -1; | ||||
| 	} | ||||
| 
 | ||||
| 	return irq; | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci n2100_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iop3xx_pci_setup, | ||||
| 	.preinit	= iop3xx_pci_preinit, | ||||
| 	.scan		= iop3xx_pci_scan_bus, | ||||
| 	.map_irq	= n2100_pci_map_irq, | ||||
| }; | ||||
| 
 | ||||
| static int __init n2100_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_n2100()) | ||||
| 		pci_common_init(&n2100_pci); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(n2100_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * N2100 machine initialisation. | ||||
|  */ | ||||
| static struct physmap_flash_data n2100_flash_data = { | ||||
| 	.width		= 2, | ||||
| }; | ||||
| 
 | ||||
| static struct resource n2100_flash_resource = { | ||||
| 	.start		= 0xf0000000, | ||||
| 	.end		= 0xf0ffffff, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device n2100_flash_device = { | ||||
| 	.name		= "physmap-flash", | ||||
| 	.id		= 0, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &n2100_flash_data, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &n2100_flash_resource, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| static struct plat_serial8250_port n2100_serial_port[] = { | ||||
| 	{ | ||||
| 		.mapbase	= N2100_UART, | ||||
| 		.membase	= (char *)N2100_UART, | ||||
| 		.irq		= 0, | ||||
| 		.flags		= UPF_SKIP_TEST, | ||||
| 		.iotype		= UPIO_MEM, | ||||
| 		.regshift	= 0, | ||||
| 		.uartclk	= 1843200, | ||||
| 	}, | ||||
| 	{ }, | ||||
| }; | ||||
| 
 | ||||
| static struct resource n2100_uart_resource = { | ||||
| 	.start		= N2100_UART, | ||||
| 	.end		= N2100_UART + 7, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device n2100_serial_device = { | ||||
| 	.name		= "serial8250", | ||||
| 	.id		= PLAT8250_DEV_PLATFORM, | ||||
| 	.dev		= { | ||||
| 		.platform_data		= n2100_serial_port, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &n2100_uart_resource, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Pull PCA9532 GPIO #8 low to power off the machine. | ||||
|  */ | ||||
| static void n2100_power_off(void) | ||||
| { | ||||
| 	local_irq_disable(); | ||||
| 
 | ||||
| 	/* Start condition, I2C address of PCA9532, write transaction.  */ | ||||
| 	*IOP3XX_IDBR0 = 0xc0; | ||||
| 	*IOP3XX_ICR0 = 0xe9; | ||||
| 	mdelay(1); | ||||
| 
 | ||||
| 	/* Write address 0x08.  */ | ||||
| 	*IOP3XX_IDBR0 = 0x08; | ||||
| 	*IOP3XX_ICR0 = 0xe8; | ||||
| 	mdelay(1); | ||||
| 
 | ||||
| 	/* Write data 0x01, stop condition.  */ | ||||
| 	*IOP3XX_IDBR0 = 0x01; | ||||
| 	*IOP3XX_ICR0 = 0xea; | ||||
| 
 | ||||
| 	while (1) | ||||
| 		; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static struct timer_list power_button_poll_timer; | ||||
| 
 | ||||
| static void power_button_poll(unsigned long dummy) | ||||
| { | ||||
| 	if (gpio_line_get(N2100_POWER_BUTTON) == 0) { | ||||
| 		ctrl_alt_del(); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	power_button_poll_timer.expires = jiffies + (HZ / 10); | ||||
| 	add_timer(&power_button_poll_timer); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static void __init n2100_init_machine(void) | ||||
| { | ||||
| 	platform_device_register(&iop3xx_i2c0_device); | ||||
| 	platform_device_register(&n2100_flash_device); | ||||
| 	platform_device_register(&n2100_serial_device); | ||||
| 
 | ||||
| 	pm_power_off = n2100_power_off; | ||||
| 
 | ||||
| 	init_timer(&power_button_poll_timer); | ||||
| 	power_button_poll_timer.function = power_button_poll; | ||||
| 	power_button_poll_timer.expires = jiffies + (HZ / 10); | ||||
| 	add_timer(&power_button_poll_timer); | ||||
| } | ||||
| 
 | ||||
| MACHINE_START(N2100, "Thecus N2100") | ||||
| 	/* Maintainer: Lennert Buytenhek <buytenh@wantstofly.org> */ | ||||
| 	.phys_io	= N2100_UART, | ||||
| 	.io_pg_offst	= ((N2100_UART) >> 18) & 0xfffc, | ||||
| 	.boot_params	= 0xa0000100, | ||||
| 	.map_io		= n2100_map_io, | ||||
| 	.init_irq	= iop32x_init_irq, | ||||
| 	.timer		= &n2100_timer, | ||||
| 	.init_machine	= n2100_init_machine, | ||||
| MACHINE_END | ||||
							
								
								
									
										21
									
								
								arch/arm/mach-iop33x/Kconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								arch/arm/mach-iop33x/Kconfig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| if ARCH_IOP33X | ||||
| 
 | ||||
| menu "IOP33x Implementation Options" | ||||
| 
 | ||||
| comment "IOP33x Platform Types" | ||||
| 
 | ||||
| config ARCH_IQ80331 | ||||
| 	bool "Enable support for IQ80331" | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel IQ80331 | ||||
| 	  evaluation kit for the IOP331 chipset. | ||||
| 
 | ||||
| config MACH_IQ80332 | ||||
| 	bool "Enable support for IQ80332" | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel IQ80332 | ||||
| 	  evaluation kit for the IOP332 chipset. | ||||
| 
 | ||||
| endmenu | ||||
| 
 | ||||
| endif | ||||
							
								
								
									
										11
									
								
								arch/arm/mach-iop33x/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								arch/arm/mach-iop33x/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| #
 | ||||
| # Makefile for the linux kernel.
 | ||||
| #
 | ||||
| 
 | ||||
| obj-y			:= irq.o uart.o | ||||
| obj-m			:= | ||||
| obj-n			:= | ||||
| obj-			:= | ||||
| 
 | ||||
| obj-$(CONFIG_ARCH_IQ80331) += iq80331.o | ||||
| obj-$(CONFIG_MACH_IQ80332) += iq80332.o | ||||
							
								
								
									
										3
									
								
								arch/arm/mach-iop33x/Makefile.boot
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								arch/arm/mach-iop33x/Makefile.boot
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
|    zreladdr-y	:= 0x00008000 | ||||
| params_phys-y	:= 0x00000100 | ||||
| initrd_phys-y	:= 0x00800000 | ||||
							
								
								
									
										148
									
								
								arch/arm/mach-iop33x/iq80331.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								arch/arm/mach-iop33x/iq80331.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,148 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop33x/iq80331.c | ||||
|  * | ||||
|  * Board support code for the Intel IQ80331 platform. | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * Copyright (C) 2003 Intel Corp. | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/serial_core.h> | ||||
| #include <linux/serial_8250.h> | ||||
| #include <linux/mtd/physmap.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach/time.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/pgtable.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80331 timer tick configuration. | ||||
|  */ | ||||
| static void __init iq80331_timer_init(void) | ||||
| { | ||||
| 	/* D-Step parts run at a higher internal bus frequency */ | ||||
| 	if (*IOP3XX_ATURID >= 0xa) | ||||
| 		iop3xx_init_time(333000000); | ||||
| 	else | ||||
| 		iop3xx_init_time(266000000); | ||||
| } | ||||
| 
 | ||||
| static struct sys_timer iq80331_timer = { | ||||
| 	.init		= iq80331_timer_init, | ||||
| 	.offset		= iop3xx_gettimeoffset, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80331 PCI. | ||||
|  */ | ||||
| static inline int __init | ||||
| iq80331_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||
| { | ||||
| 	int irq; | ||||
| 
 | ||||
| 	if (slot == 1 && pin == 1) { | ||||
| 		/* PCI-X Slot INTA */ | ||||
| 		irq = IRQ_IOP33X_XINT1; | ||||
| 	} else if (slot == 1 && pin == 2) { | ||||
| 		/* PCI-X Slot INTB */ | ||||
| 		irq = IRQ_IOP33X_XINT2; | ||||
| 	} else if (slot == 1 && pin == 3) { | ||||
| 		/* PCI-X Slot INTC */ | ||||
| 		irq = IRQ_IOP33X_XINT3; | ||||
| 	} else if (slot == 1 && pin == 4) { | ||||
| 		/* PCI-X Slot INTD */ | ||||
| 		irq = IRQ_IOP33X_XINT0; | ||||
| 	} else if (slot == 2) { | ||||
| 		/* GigE */ | ||||
| 		irq = IRQ_IOP33X_XINT2; | ||||
| 	} else { | ||||
| 		printk(KERN_ERR "iq80331_pci_map_irq() called for unknown " | ||||
| 			"device PCI:%d:%d:%d\n", dev->bus->number, | ||||
| 			PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); | ||||
| 		irq = -1; | ||||
| 	} | ||||
| 
 | ||||
| 	return irq; | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci iq80331_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iop3xx_pci_setup, | ||||
| 	.preinit	= iop3xx_pci_preinit, | ||||
| 	.scan		= iop3xx_pci_scan_bus, | ||||
| 	.map_irq	= iq80331_pci_map_irq, | ||||
| }; | ||||
| 
 | ||||
| static int __init iq80331_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_iq80331()) | ||||
| 		pci_common_init(&iq80331_pci); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(iq80331_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80331 machine initialisation. | ||||
|  */ | ||||
| static struct physmap_flash_data iq80331_flash_data = { | ||||
| 	.width		= 1, | ||||
| }; | ||||
| 
 | ||||
| static struct resource iq80331_flash_resource = { | ||||
| 	.start		= 0xc0000000, | ||||
| 	.end		= 0xc07fffff, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iq80331_flash_device = { | ||||
| 	.name		= "physmap-flash", | ||||
| 	.id		= 0, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &iq80331_flash_data, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &iq80331_flash_resource, | ||||
| }; | ||||
| 
 | ||||
| static void __init iq80331_init_machine(void) | ||||
| { | ||||
| 	platform_device_register(&iop3xx_i2c0_device); | ||||
| 	platform_device_register(&iop3xx_i2c1_device); | ||||
| 	platform_device_register(&iop33x_uart0_device); | ||||
| 	platform_device_register(&iop33x_uart1_device); | ||||
| 	platform_device_register(&iq80331_flash_device); | ||||
| } | ||||
| 
 | ||||
| MACHINE_START(IQ80331, "Intel IQ80331") | ||||
| 	/* Maintainer: Intel Corp. */ | ||||
| 	.phys_io	= 0xfefff000, | ||||
| 	.io_pg_offst	= ((0xfffff000) >> 18) & 0xfffc, | ||||
| 	.boot_params	= 0x00000100, | ||||
| 	.map_io		= iop3xx_map_io, | ||||
| 	.init_irq	= iop33x_init_irq, | ||||
| 	.timer		= &iq80331_timer, | ||||
| 	.init_machine	= iq80331_init_machine, | ||||
| MACHINE_END | ||||
							
								
								
									
										148
									
								
								arch/arm/mach-iop33x/iq80332.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								arch/arm/mach-iop33x/iq80332.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,148 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop33x/iq80332.c | ||||
|  * | ||||
|  * Board support code for the Intel IQ80332 platform. | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * Copyright (C) 2004 Intel Corp. | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/serial_core.h> | ||||
| #include <linux/serial_8250.h> | ||||
| #include <linux/mtd/physmap.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach/time.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/pgtable.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80332 timer tick configuration. | ||||
|  */ | ||||
| static void __init iq80332_timer_init(void) | ||||
| { | ||||
| 	/* D-Step parts and the iop333 run at a higher internal bus frequency */ | ||||
| 	if (*IOP3XX_ATURID >= 0xa || *IOP3XX_ATUDID == 0x374) | ||||
| 		iop3xx_init_time(333000000); | ||||
| 	else | ||||
| 		iop3xx_init_time(266000000); | ||||
| } | ||||
| 
 | ||||
| static struct sys_timer iq80332_timer = { | ||||
| 	.init		= iq80332_timer_init, | ||||
| 	.offset		= iop3xx_gettimeoffset, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80332 PCI. | ||||
|  */ | ||||
| static inline int __init | ||||
| iq80332_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||
| { | ||||
| 	int irq; | ||||
| 
 | ||||
| 	if (slot == 4 && pin == 1) { | ||||
| 		/* PCI-X Slot INTA */ | ||||
| 		irq = IRQ_IOP33X_XINT0; | ||||
| 	} else if (slot == 4 && pin == 2) { | ||||
| 		/* PCI-X Slot INTB */ | ||||
| 		irq = IRQ_IOP33X_XINT1; | ||||
| 	} else if (slot == 4 && pin == 3) { | ||||
| 		/* PCI-X Slot INTC */ | ||||
| 		irq = IRQ_IOP33X_XINT2; | ||||
| 	} else if (slot == 4 && pin == 4) { | ||||
| 		/* PCI-X Slot INTD */ | ||||
| 		irq = IRQ_IOP33X_XINT3; | ||||
| 	} else if (slot == 6) { | ||||
| 		/* GigE */ | ||||
| 		irq = IRQ_IOP33X_XINT2; | ||||
| 	} else { | ||||
| 		printk(KERN_ERR "iq80332_pci_map_irq() called for unknown " | ||||
| 			"device PCI:%d:%d:%d\n", dev->bus->number, | ||||
| 			PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); | ||||
| 		irq = -1; | ||||
| 	} | ||||
| 
 | ||||
| 	return irq; | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci iq80332_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iop3xx_pci_setup, | ||||
| 	.preinit	= iop3xx_pci_preinit, | ||||
| 	.scan		= iop3xx_pci_scan_bus, | ||||
| 	.map_irq	= iq80332_pci_map_irq, | ||||
| }; | ||||
| 
 | ||||
| static int __init iq80332_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_iq80332()) | ||||
| 		pci_common_init(&iq80332_pci); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(iq80332_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80332 machine initialisation. | ||||
|  */ | ||||
| static struct physmap_flash_data iq80332_flash_data = { | ||||
| 	.width		= 1, | ||||
| }; | ||||
| 
 | ||||
| static struct resource iq80332_flash_resource = { | ||||
| 	.start		= 0xc0000000, | ||||
| 	.end		= 0xc07fffff, | ||||
| 	.flags		= IORESOURCE_MEM, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iq80332_flash_device = { | ||||
| 	.name		= "physmap-flash", | ||||
| 	.id		= 0, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &iq80332_flash_data, | ||||
| 	}, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= &iq80332_flash_resource, | ||||
| }; | ||||
| 
 | ||||
| static void __init iq80332_init_machine(void) | ||||
| { | ||||
| 	platform_device_register(&iop3xx_i2c0_device); | ||||
| 	platform_device_register(&iop3xx_i2c1_device); | ||||
| 	platform_device_register(&iop33x_uart0_device); | ||||
| 	platform_device_register(&iop33x_uart1_device); | ||||
| 	platform_device_register(&iq80332_flash_device); | ||||
| } | ||||
| 
 | ||||
| MACHINE_START(IQ80332, "Intel IQ80332") | ||||
| 	/* Maintainer: Intel Corp. */ | ||||
| 	.phys_io	= 0xfefff000, | ||||
| 	.io_pg_offst	= ((0xfffff000) >> 18) & 0xfffc, | ||||
| 	.boot_params	= 0x00000100, | ||||
| 	.map_io		= iop3xx_map_io, | ||||
| 	.init_irq	= iop33x_init_irq, | ||||
| 	.timer		= &iq80332_timer, | ||||
| 	.init_machine	= iq80332_init_machine, | ||||
| MACHINE_END | ||||
							
								
								
									
										127
									
								
								arch/arm/mach-iop33x/irq.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								arch/arm/mach-iop33x/irq.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,127 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop33x/irq.c | ||||
|  * | ||||
|  * Generic IOP331 IRQ handling functionality | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * Copyright (C) 2003 Intel Corp. | ||||
|  * | ||||
|  * 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 <linux/init.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/list.h> | ||||
| #include <asm/mach/irq.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| static u32 iop33x_mask0; | ||||
| static u32 iop33x_mask1; | ||||
| 
 | ||||
| static inline void intctl0_write(u32 val) | ||||
| { | ||||
| 	iop3xx_cp6_enable(); | ||||
| 	asm volatile("mcr p6, 0, %0, c0, c0, 0" : : "r" (val)); | ||||
| 	iop3xx_cp6_disable(); | ||||
| } | ||||
| 
 | ||||
| static inline void intctl1_write(u32 val) | ||||
| { | ||||
| 	iop3xx_cp6_enable(); | ||||
| 	asm volatile("mcr p6, 0, %0, c1, c0, 0" : : "r" (val)); | ||||
| 	iop3xx_cp6_disable(); | ||||
| } | ||||
| 
 | ||||
| static inline void intstr0_write(u32 val) | ||||
| { | ||||
| 	iop3xx_cp6_enable(); | ||||
| 	asm volatile("mcr p6, 0, %0, c2, c0, 0" : : "r" (val)); | ||||
| 	iop3xx_cp6_disable(); | ||||
| } | ||||
| 
 | ||||
| static inline void intstr1_write(u32 val) | ||||
| { | ||||
| 	iop3xx_cp6_enable(); | ||||
| 	asm volatile("mcr p6, 0, %0, c3, c0, 0" : : "r" (val)); | ||||
| 	iop3xx_cp6_disable(); | ||||
| } | ||||
| 
 | ||||
| static inline void intbase_write(u32 val) | ||||
| { | ||||
| 	iop3xx_cp6_enable(); | ||||
| 	asm volatile("mcr p6, 0, %0, c12, c0, 0" : : "r" (val)); | ||||
| 	iop3xx_cp6_disable(); | ||||
| } | ||||
| 
 | ||||
| static inline void intsize_write(u32 val) | ||||
| { | ||||
| 	iop3xx_cp6_enable(); | ||||
| 	asm volatile("mcr p6, 0, %0, c13, c0, 0" : : "r" (val)); | ||||
| 	iop3xx_cp6_disable(); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop33x_irq_mask1 (unsigned int irq) | ||||
| { | ||||
| 	iop33x_mask0 &= ~(1 << irq); | ||||
| 	intctl0_write(iop33x_mask0); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop33x_irq_mask2 (unsigned int irq) | ||||
| { | ||||
| 	iop33x_mask1 &= ~(1 << (irq - 32)); | ||||
| 	intctl1_write(iop33x_mask1); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop33x_irq_unmask1(unsigned int irq) | ||||
| { | ||||
| 	iop33x_mask0 |= 1 << irq; | ||||
| 	intctl0_write(iop33x_mask0); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop33x_irq_unmask2(unsigned int irq) | ||||
| { | ||||
| 	iop33x_mask1 |= (1 << (irq - 32)); | ||||
| 	intctl1_write(iop33x_mask1); | ||||
| } | ||||
| 
 | ||||
| struct irq_chip iop33x_irqchip1 = { | ||||
| 	.name	= "IOP33x-1", | ||||
| 	.ack	= iop33x_irq_mask1, | ||||
| 	.mask	= iop33x_irq_mask1, | ||||
| 	.unmask	= iop33x_irq_unmask1, | ||||
| }; | ||||
| 
 | ||||
| struct irq_chip iop33x_irqchip2 = { | ||||
| 	.name	= "IOP33x-2", | ||||
| 	.ack	= iop33x_irq_mask2, | ||||
| 	.mask	= iop33x_irq_mask2, | ||||
| 	.unmask	= iop33x_irq_unmask2, | ||||
| }; | ||||
| 
 | ||||
| void __init iop33x_init_irq(void) | ||||
| { | ||||
| 	int i; | ||||
| 
 | ||||
| 	intctl0_write(0); | ||||
| 	intctl1_write(0); | ||||
| 	intstr0_write(0); | ||||
| 	intstr1_write(0); | ||||
| 	intbase_write(0); | ||||
| 	intsize_write(1); | ||||
| 	if (machine_is_iq80331()) | ||||
| 		*IOP3XX_PCIIRSR = 0x0f; | ||||
| 
 | ||||
| 	for (i = 0; i < NR_IRQS; i++) { | ||||
| 		set_irq_chip(i, (i < 32) ? &iop33x_irqchip1 : &iop33x_irqchip2); | ||||
| 		set_irq_handler(i, do_level_IRQ); | ||||
| 		set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										105
									
								
								arch/arm/mach-iop33x/uart.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								arch/arm/mach-iop33x/uart.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,105 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop33x/uart.c | ||||
|  * | ||||
|  * Author: Dave Jiang (dave.jiang@intel.com) | ||||
|  * Copyright (C) 2004 Intel Corporation. | ||||
|  * | ||||
|  * 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 <linux/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/major.h> | ||||
| #include <linux/fs.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <linux/serial.h> | ||||
| #include <linux/tty.h> | ||||
| #include <linux/serial_8250.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/setup.h> | ||||
| #include <asm/system.h> | ||||
| #include <asm/memory.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/hardware/iop3xx.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/mach/arch.h> | ||||
| 
 | ||||
| #define IOP33X_UART_XTAL 33334000 | ||||
| 
 | ||||
| static struct plat_serial8250_port iop33x_uart0_data[] = { | ||||
| 	{ | ||||
| 		.membase	= (char *)IOP33X_UART0_VIRT, | ||||
| 		.mapbase	= IOP33X_UART0_PHYS, | ||||
| 		.irq		= IRQ_IOP33X_UART0, | ||||
| 		.uartclk	= IOP33X_UART_XTAL, | ||||
| 		.regshift	= 2, | ||||
| 		.iotype		= UPIO_MEM, | ||||
| 		.flags		= UPF_SKIP_TEST, | ||||
| 	}, | ||||
| 	{ }, | ||||
| }; | ||||
| 
 | ||||
| static struct resource iop33x_uart0_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= IOP33X_UART0_PHYS, | ||||
| 		.end	= IOP33X_UART0_PHYS + 0x3f, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= IRQ_IOP33X_UART0, | ||||
| 		.end	= IRQ_IOP33X_UART0, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| struct platform_device iop33x_uart0_device = { | ||||
| 	.name		= "serial8250", | ||||
| 	.id		= PLAT8250_DEV_PLATFORM, | ||||
| 	.dev		= { | ||||
| 		.platform_data		= iop33x_uart0_data, | ||||
| 	}, | ||||
| 	.num_resources	= 2, | ||||
| 	.resource	= iop33x_uart0_resources, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| static struct resource iop33x_uart1_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= IOP33X_UART1_PHYS, | ||||
| 		.end	= IOP33X_UART1_PHYS + 0x3f, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= IRQ_IOP33X_UART1, | ||||
| 		.end	= IRQ_IOP33X_UART1, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_serial8250_port iop33x_uart1_data[] = { | ||||
| 	{ | ||||
| 		.membase	= (char *)IOP33X_UART1_VIRT, | ||||
| 		.mapbase	= IOP33X_UART1_PHYS, | ||||
| 		.irq		= IRQ_IOP33X_UART1, | ||||
| 		.uartclk	= IOP33X_UART_XTAL, | ||||
| 		.regshift	= 2, | ||||
| 		.iotype		= UPIO_MEM, | ||||
| 		.flags		= UPF_SKIP_TEST, | ||||
| 	}, | ||||
| 	{ }, | ||||
| }; | ||||
| 
 | ||||
| struct platform_device iop33x_uart1_device = { | ||||
| 	.name		= "serial8250", | ||||
| 	.id		= PLAT8250_DEV_PLATFORM1, | ||||
| 	.dev		= { | ||||
| 		.platform_data		= iop33x_uart1_data, | ||||
| 	}, | ||||
| 	.num_resources	= 2, | ||||
| 	.resource	= iop33x_uart1_resources, | ||||
| }; | ||||
|  | @ -1,66 +0,0 @@ | |||
| if ARCH_IOP3XX | ||||
| 
 | ||||
| menu "IOP3xx Implementation Options" | ||||
| 
 | ||||
| comment "IOP3xx Platform Types" | ||||
| 
 | ||||
| config ARCH_IQ80321 | ||||
| 	bool "Enable support for IQ80321" | ||||
| 	select ARCH_IOP321 | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel IQ80321 | ||||
| 	  evaluation kit for the IOP321 chipset. | ||||
| 
 | ||||
| config ARCH_IQ31244 | ||||
| 	bool "Enable support for IQ31244" | ||||
| 	select ARCH_IOP321 | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel IQ31244 | ||||
| 	  evaluation kit for the IOP321 chipset. | ||||
| 
 | ||||
| config ARCH_IQ80331 | ||||
| 	bool "Enable support for IQ80331" | ||||
| 	select ARCH_IOP331 | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel IQ80331 | ||||
| 	  evaluation kit for the IOP331 chipset. | ||||
| 
 | ||||
| config MACH_IQ80332 | ||||
| 	bool "Enable support for IQ80332" | ||||
| 	select ARCH_IOP331 | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel IQ80332 | ||||
| 	  evaluation kit for the IOP332 chipset. | ||||
| 
 | ||||
| config ARCH_EP80219 | ||||
| 	bool "Enable support for EP80219" | ||||
| 	select ARCH_IOP321 | ||||
| 	select ARCH_IQ31244 | ||||
| 	help | ||||
| 	  Say Y here if you want to run your kernel on the Intel EP80219 | ||||
| 	  evaluation kit for the Intel 80219 chipset (a IOP321 variant). | ||||
| 
 | ||||
| # Which IOP variant are we running? | ||||
| config ARCH_IOP321 | ||||
| 	bool | ||||
| 	help | ||||
| 	  The IQ80321 uses the IOP321 variant. | ||||
| 	  The IQ31244 and EP80219 uses the IOP321 variant. | ||||
| 
 | ||||
| config ARCH_IOP331 | ||||
| 	bool | ||||
| 	default ARCH_IQ80331 | ||||
| 	help | ||||
| 	  The IQ80331, IQ80332, and IQ80333 uses the IOP331 variant. | ||||
| 
 | ||||
| comment "IOP3xx Chipset Features" | ||||
| 
 | ||||
| config IOP331_STEPD | ||||
| 	bool "Chip stepping D of the IOP80331 processor or IOP80333" | ||||
| 	depends on (ARCH_IOP331) | ||||
| 	help | ||||
| 	  Say Y here if you have StepD of the IOP80331 or IOP8033 | ||||
| 	  based platforms. | ||||
| 
 | ||||
| endmenu | ||||
| endif | ||||
|  | @ -1,23 +0,0 @@ | |||
| #
 | ||||
| # Makefile for the linux kernel.
 | ||||
| #
 | ||||
| 
 | ||||
| # Object file lists.
 | ||||
| 
 | ||||
| obj-y			:= common.o | ||||
| 
 | ||||
| obj-m			:= | ||||
| obj-n			:= | ||||
| obj-			:= | ||||
| 
 | ||||
| obj-$(CONFIG_ARCH_IOP321)  += iop321-setup.o iop321-irq.o iop321-pci.o iop321-time.o | ||||
| 
 | ||||
| obj-$(CONFIG_ARCH_IOP331)  += iop331-setup.o iop331-irq.o iop331-pci.o iop331-time.o | ||||
| 
 | ||||
| obj-$(CONFIG_ARCH_IQ80321) += iq80321-mm.o iq80321-pci.o | ||||
| 
 | ||||
| obj-$(CONFIG_ARCH_IQ31244) += iq31244-mm.o iq31244-pci.o | ||||
| 
 | ||||
| obj-$(CONFIG_ARCH_IQ80331) += iq80331-mm.o iq80331-pci.o | ||||
| 
 | ||||
| obj-$(CONFIG_MACH_IQ80332) += iq80332-mm.o iq80332-pci.o | ||||
|  | @ -1,9 +0,0 @@ | |||
|    zreladdr-y	:= 0xa0008000 | ||||
| params_phys-y	:= 0xa0000100 | ||||
| initrd_phys-y	:= 0xa0800000 | ||||
| ifeq ($(CONFIG_ARCH_IOP331),y) | ||||
|    zreladdr-y	:= 0x00008000 | ||||
| params_phys-y	:= 0x00000100 | ||||
| initrd_phys-y	:= 0x00800000 | ||||
| endif | ||||
| 
 | ||||
|  | @ -1,72 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/common.c | ||||
|  * | ||||
|  * Common routines shared across all IOP3xx implementations | ||||
|  * | ||||
|  * Author: Deepak Saxena <dsaxena@mvista.com> | ||||
|  * | ||||
|  * Copyright 2003 (c) MontaVista, Software, 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/delay.h> | ||||
| #include <asm/hardware.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Shared variables | ||||
|  */ | ||||
| unsigned long iop3xx_pcibios_min_io = 0; | ||||
| unsigned long iop3xx_pcibios_min_mem = 0; | ||||
| 
 | ||||
| #ifdef CONFIG_ARCH_EP80219 | ||||
| #include <linux/kernel.h> | ||||
| /*
 | ||||
|  * Default power-off for EP80219 | ||||
|  */ | ||||
| 
 | ||||
| static inline void ep80219_send_to_pic(__u8 c) { | ||||
| } | ||||
| 
 | ||||
| void ep80219_power_off(void) | ||||
| { | ||||
| 	/*
 | ||||
|      * This function will send a SHUTDOWN_COMPLETE message to the PIC controller | ||||
|      * over I2C.  We are not using the i2c subsystem since we are going to power | ||||
|      * off and it may be removed | ||||
|      */ | ||||
| 
 | ||||
| 	/* Send the Address byte w/ the start condition */ | ||||
| 	*IOP321_IDBR1 = 0x60; | ||||
| 	*IOP321_ICR1 = 0xE9; | ||||
|     mdelay(1); | ||||
| 
 | ||||
| 	/* Send the START_MSG byte w/ no start or stop condition */ | ||||
| 	*IOP321_IDBR1 = 0x0F; | ||||
| 	*IOP321_ICR1 = 0xE8; | ||||
|     mdelay(1); | ||||
| 
 | ||||
| 	/* Send the SHUTDOWN_COMPLETE Message ID byte w/ no start or stop condition */ | ||||
| 	*IOP321_IDBR1 = 0x03; | ||||
| 	*IOP321_ICR1 = 0xE8; | ||||
|     mdelay(1); | ||||
| 
 | ||||
| 	/* Send an ignored byte w/ stop condition */ | ||||
| 	*IOP321_IDBR1 = 0x00; | ||||
| 	*IOP321_ICR1 = 0xEA; | ||||
| 
 | ||||
| 	while (1) ; | ||||
| } | ||||
| 
 | ||||
| #include <linux/init.h> | ||||
| #include <linux/pm.h> | ||||
| 
 | ||||
| static int __init ep80219_init(void) | ||||
| { | ||||
| 	pm_power_off = ep80219_power_off; | ||||
| 	return 0; | ||||
| } | ||||
| arch_initcall(ep80219_init); | ||||
| #endif | ||||
|  | @ -1,97 +0,0 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-iop3xx/iop321-irq.c | ||||
|  * | ||||
|  * Generic IOP321 IRQ handling functionality | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * | ||||
|  * 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. | ||||
|  * | ||||
|  * Added IOP3XX chipset and IQ80321 board masking code. | ||||
|  * | ||||
|  */ | ||||
| #include <linux/init.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/list.h> | ||||
| 
 | ||||
| #include <asm/mach/irq.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/hardware.h> | ||||
| 
 | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| static u32 iop321_mask /* = 0 */; | ||||
| 
 | ||||
| static inline void intctl_write(u32 val) | ||||
| { | ||||
| 	asm volatile("mcr p6,0,%0,c0,c0,0"::"r" (val)); | ||||
| } | ||||
| 
 | ||||
| static inline void intstr_write(u32 val) | ||||
| { | ||||
| 	asm volatile("mcr p6,0,%0,c4,c0,0"::"r" (val)); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop321_irq_mask (unsigned int irq) | ||||
| { | ||||
| 
 | ||||
| 	iop321_mask &= ~(1 << (irq - IOP321_IRQ_OFS)); | ||||
| 
 | ||||
| 	intctl_write(iop321_mask); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop321_irq_unmask (unsigned int irq) | ||||
| { | ||||
| 	iop321_mask |= (1 << (irq - IOP321_IRQ_OFS)); | ||||
| 
 | ||||
| 	intctl_write(iop321_mask); | ||||
| } | ||||
| 
 | ||||
| struct irq_chip ext_chip = { | ||||
| 	.name	= "IOP", | ||||
| 	.ack    = iop321_irq_mask, | ||||
| 	.mask   = iop321_irq_mask, | ||||
| 	.unmask = iop321_irq_unmask, | ||||
| }; | ||||
| 
 | ||||
| void __init iop321_init_irq(void) | ||||
| { | ||||
| 	unsigned int i, tmp; | ||||
| 
 | ||||
| 	/* Enable access to coprocessor 6 for dealing with IRQs.
 | ||||
| 	 * From RMK: | ||||
| 	 * Basically, the Intel documentation here is poor.  It appears that | ||||
| 	 * you need to set the bit to be able to access the coprocessor from | ||||
| 	 * SVC mode.  Whether that allows access from user space or not is | ||||
| 	 * unclear. | ||||
| 	 */ | ||||
| 	asm volatile ( | ||||
| 		"mrc p15, 0, %0, c15, c1, 0\n\t" | ||||
| 		"orr %0, %0, %1\n\t" | ||||
| 		"mcr p15, 0, %0, c15, c1, 0\n\t" | ||||
| 		/* The action is delayed, so we have to do this: */ | ||||
| 		"mrc p15, 0, %0, c15, c1, 0\n\t" | ||||
| 		"mov %0, %0\n\t" | ||||
| 		"sub pc, pc, #4" | ||||
| 		: "=r" (tmp) : "i" (1 << 6) ); | ||||
| 
 | ||||
| 	intctl_write(0);		// disable all interrupts
 | ||||
| 	intstr_write(0);		// treat all as IRQ
 | ||||
| 	if(machine_is_iq80321() || | ||||
| 	   machine_is_iq31244()) 	// all interrupts are inputs to chip
 | ||||
| 		*IOP321_PCIIRSR = 0x0f; | ||||
| 
 | ||||
| 	for(i = IOP321_IRQ_OFS; i < NR_IOP321_IRQS; i++) | ||||
| 	{ | ||||
| 		set_irq_chip(i, &ext_chip); | ||||
| 		set_irq_handler(i, do_level_IRQ); | ||||
| 		set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -1,220 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/iop321-pci.c | ||||
|  * | ||||
|  * PCI support for the Intel IOP321 chipset | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * | ||||
|  * 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 <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/ioport.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/system.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/mach/pci.h> | ||||
| 
 | ||||
| #include <asm/arch/iop321.h> | ||||
| 
 | ||||
| // #define DEBUG
 | ||||
| 
 | ||||
| #ifdef DEBUG | ||||
| #define  DBG(x...) printk(x) | ||||
| #else | ||||
| #define  DBG(x...) do { } while (0) | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * This routine builds either a type0 or type1 configuration command.  If the | ||||
|  * bus is on the 80321 then a type0 made, else a type1 is created. | ||||
|  */ | ||||
| static u32 iop321_cfg_address(struct pci_bus *bus, int devfn, int where) | ||||
| { | ||||
| 	struct pci_sys_data *sys = bus->sysdata; | ||||
| 	u32 addr; | ||||
| 
 | ||||
| 	if (sys->busnr == bus->number) | ||||
| 		addr = 1 << (PCI_SLOT(devfn) + 16) | (PCI_SLOT(devfn) << 11); | ||||
| 	else | ||||
| 		addr = bus->number << 16 | PCI_SLOT(devfn) << 11 | 1; | ||||
| 
 | ||||
| 	addr |=	PCI_FUNC(devfn) << 8 | (where & ~3); | ||||
| 
 | ||||
| 	return addr; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * This routine checks the status of the last configuration cycle.  If an error | ||||
|  * was detected it returns a 1, else it returns a 0.  The errors being checked | ||||
|  * are parity, master abort, target abort (master and target).  These types of | ||||
|  * errors occure during a config cycle where there is no device, like during | ||||
|  * the discovery stage. | ||||
|  */ | ||||
| static int iop321_pci_status(void) | ||||
| { | ||||
| 	unsigned int status; | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Check the status registers. | ||||
| 	 */ | ||||
| 	status = *IOP321_ATUSR; | ||||
| 	if (status & 0xf900) | ||||
| 	{ | ||||
| 		DBG("\t\t\tPCI: P0 - status = 0x%08x\n", status); | ||||
| 		*IOP321_ATUSR = status & 0xf900; | ||||
| 		ret = 1; | ||||
| 	} | ||||
| 	status = *IOP321_ATUISR; | ||||
| 	if (status & 0x679f) | ||||
| 	{ | ||||
| 		DBG("\t\t\tPCI: P1 - status = 0x%08x\n", status); | ||||
| 		*IOP321_ATUISR = status & 0x679f; | ||||
| 		ret = 1; | ||||
| 	} | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Simply write the address register and read the configuration | ||||
|  * data.  Note that the 4 nop's ensure that we are able to handle | ||||
|  * a delayed abort (in theory.) | ||||
|  */ | ||||
| static inline u32 iop321_read(unsigned long addr) | ||||
| { | ||||
| 	u32 val; | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 		"str	%1, [%2]\n\t" | ||||
| 		"ldr	%0, [%3]\n\t" | ||||
| 		"nop\n\t" | ||||
| 		"nop\n\t" | ||||
| 		"nop\n\t" | ||||
| 		"nop\n\t" | ||||
| 		: "=r" (val) | ||||
| 		: "r" (addr), "r" (IOP321_OCCAR), "r" (IOP321_OCCDR)); | ||||
| 
 | ||||
| 	return val; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * The read routines must check the error status of the last configuration | ||||
|  * cycle.  If there was an error, the routine returns all hex f's. | ||||
|  */ | ||||
| static int | ||||
| iop321_read_config(struct pci_bus *bus, unsigned int devfn, int where, | ||||
| 		int size, u32 *value) | ||||
| { | ||||
| 	unsigned long addr = iop321_cfg_address(bus, devfn, where); | ||||
| 	u32 val = iop321_read(addr) >> ((where & 3) * 8); | ||||
| 
 | ||||
| 	if( iop321_pci_status() ) | ||||
| 		val = 0xffffffff; | ||||
| 
 | ||||
| 	*value = val; | ||||
| 
 | ||||
| 	return PCIBIOS_SUCCESSFUL; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| iop321_write_config(struct pci_bus *bus, unsigned int devfn, int where, | ||||
| 		int size, u32 value) | ||||
| { | ||||
| 	unsigned long addr = iop321_cfg_address(bus, devfn, where); | ||||
| 	u32 val; | ||||
| 
 | ||||
| 	if (size != 4) { | ||||
| 		val = iop321_read(addr); | ||||
| 		if (!iop321_pci_status() == 0) | ||||
| 			return PCIBIOS_SUCCESSFUL; | ||||
| 
 | ||||
| 		where = (where & 3) * 8; | ||||
| 
 | ||||
| 		if (size == 1) | ||||
| 			val &= ~(0xff << where); | ||||
| 		else | ||||
| 			val &= ~(0xffff << where); | ||||
| 
 | ||||
| 		*IOP321_OCCDR = val | value << where; | ||||
| 	} else { | ||||
| 		asm volatile( | ||||
| 			"str	%1, [%2]\n\t" | ||||
| 			"str	%0, [%3]\n\t" | ||||
| 			"nop\n\t" | ||||
| 			"nop\n\t" | ||||
| 			"nop\n\t" | ||||
| 			"nop\n\t" | ||||
| 			: | ||||
| 			: "r" (value), "r" (addr), | ||||
| 			  "r" (IOP321_OCCAR), "r" (IOP321_OCCDR)); | ||||
| 	} | ||||
| 
 | ||||
| 	return PCIBIOS_SUCCESSFUL; | ||||
| } | ||||
| 
 | ||||
| static struct pci_ops iop321_ops = { | ||||
| 	.read	= iop321_read_config, | ||||
| 	.write	= iop321_write_config, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * When a PCI device does not exist during config cycles, the 80200 gets a | ||||
|  * bus error instead of returning 0xffffffff. This handler simply returns. | ||||
|  */ | ||||
| int | ||||
| iop321_pci_abort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | ||||
| { | ||||
| 	DBG("PCI abort: address = 0x%08lx fsr = 0x%03x PC = 0x%08lx LR = 0x%08lx\n", | ||||
| 		addr, fsr, regs->ARM_pc, regs->ARM_lr); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If it was an imprecise abort, then we need to correct the | ||||
| 	 * return address to be _after_ the instruction. | ||||
| 	 */ | ||||
| 	if (fsr & (1 << 10)) | ||||
| 		regs->ARM_pc += 4; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Scan an IOP321 PCI bus.  sys->bus defines which bus we scan. | ||||
|  */ | ||||
| struct pci_bus *iop321_scan_bus(int nr, struct pci_sys_data *sys) | ||||
| { | ||||
| 	return pci_scan_bus(sys->busnr, &iop321_ops, sys); | ||||
| } | ||||
| 
 | ||||
| void iop321_init(void) | ||||
| { | ||||
| 	DBG("PCI:  Intel 80321 PCI init code.\n"); | ||||
| 	DBG("ATU: IOP321_ATUCMD=0x%04x\n", *IOP321_ATUCMD); | ||||
| 	DBG("ATU: IOP321_OMWTVR0=0x%04x, IOP321_OIOWTVR=0x%04x\n", | ||||
| 			*IOP321_OMWTVR0, | ||||
| 			*IOP321_OIOWTVR); | ||||
| 	DBG("ATU: IOP321_ATUCR=0x%08x\n", *IOP321_ATUCR); | ||||
| 	DBG("ATU: IOP321_IABAR0=0x%08x IOP321_IALR0=0x%08x IOP321_IATVR0=%08x\n", | ||||
| 			*IOP321_IABAR0, *IOP321_IALR0, *IOP321_IATVR0); | ||||
| 	DBG("ATU: IOP321_OMWTVR0=0x%08x\n", *IOP321_OMWTVR0); | ||||
| 	DBG("ATU: IOP321_IABAR1=0x%08x IOP321_IALR1=0x%08x\n", | ||||
| 			*IOP321_IABAR1, *IOP321_IALR1); | ||||
| 	DBG("ATU: IOP321_ERBAR=0x%08x IOP321_ERLR=0x%08x IOP321_ERTVR=%08x\n", | ||||
| 			*IOP321_ERBAR, *IOP321_ERLR, *IOP321_ERTVR); | ||||
| 	DBG("ATU: IOP321_IABAR2=0x%08x IOP321_IALR2=0x%08x IOP321_IATVR2=%08x\n", | ||||
| 			*IOP321_IABAR2, *IOP321_IALR2, *IOP321_IATVR2); | ||||
| 	DBG("ATU: IOP321_IABAR3=0x%08x IOP321_IALR3=0x%08x IOP321_IATVR3=%08x\n", | ||||
| 			*IOP321_IABAR3, *IOP321_IALR3, *IOP321_IATVR3); | ||||
| 
 | ||||
| 	hook_fault_code(16+6, iop321_pci_abort, SIGBUS, "imprecise external abort"); | ||||
| } | ||||
| 
 | ||||
|  | @ -1,173 +0,0 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-iop3xx/iop321-setup.c | ||||
|  * | ||||
|  * Author: Nicolas Pitre <nico@cam.org> | ||||
|  * Copyright (C) 2001 MontaVista Software, Inc. | ||||
|  * Copyright (C) 2004 Intel Corporation. | ||||
|  * | ||||
|  * 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 <linux/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/major.h> | ||||
| #include <linux/fs.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <linux/serial.h> | ||||
| #include <linux/tty.h> | ||||
| #include <linux/serial_core.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/setup.h> | ||||
| #include <asm/system.h> | ||||
| #include <asm/memory.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/mach/arch.h> | ||||
| 
 | ||||
| #define IOP321_UART_XTAL 1843200 | ||||
| 
 | ||||
| /*
 | ||||
|  * Standard IO mapping for all IOP321 based systems | ||||
|  */ | ||||
| static struct map_desc iop321_std_desc[] __initdata = { | ||||
| 	 {	/* mem mapped registers */ | ||||
| 		.virtual	= IOP321_VIRT_MEM_BASE, | ||||
| 		.pfn		= __phys_to_pfn(IOP321_PHYS_MEM_BASE), | ||||
| 		.length		= 0x00002000, | ||||
| 		.type		= MT_DEVICE | ||||
| 	 }, {	/* PCI IO space */ | ||||
| 		.virtual	= IOP321_PCI_LOWER_IO_VA, | ||||
| 		.pfn		= __phys_to_pfn(IOP321_PCI_LOWER_IO_PA), | ||||
| 		.length		= IOP321_PCI_IO_WINDOW_SIZE, | ||||
| 		.type		= MT_DEVICE | ||||
| 	 } | ||||
| }; | ||||
| 
 | ||||
| #ifdef CONFIG_ARCH_IQ80321 | ||||
| #define UARTBASE IQ80321_UART | ||||
| #define IRQ_UART IRQ_IQ80321_UART | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_ARCH_IQ31244 | ||||
| #define UARTBASE IQ31244_UART | ||||
| #define IRQ_UART IRQ_IQ31244_UART | ||||
| #endif | ||||
| 
 | ||||
| static struct uart_port iop321_serial_ports[] = { | ||||
| 	{ | ||||
| 		.membase	= (char*)(UARTBASE), | ||||
| 		.mapbase	= (UARTBASE), | ||||
| 		.irq		= IRQ_UART, | ||||
| 		.flags		= UPF_SKIP_TEST, | ||||
| 		.iotype		= UPIO_MEM, | ||||
| 		.regshift	= 0, | ||||
| 		.uartclk	= IOP321_UART_XTAL, | ||||
| 		.line		= 0, | ||||
| 		.type		= PORT_16550A, | ||||
| 		.fifosize	= 16 | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static struct resource iop32x_i2c_0_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start = 0xfffff680, | ||||
| 		.end = 0xfffff698, | ||||
| 		.flags = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start = IRQ_IOP321_I2C_0, | ||||
| 		.end = IRQ_IOP321_I2C_0, | ||||
| 		.flags = IORESOURCE_IRQ | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static struct resource iop32x_i2c_1_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start = 0xfffff6a0, | ||||
| 		.end = 0xfffff6b8, | ||||
| 		.flags = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start = IRQ_IOP321_I2C_1, | ||||
| 		.end = IRQ_IOP321_I2C_1, | ||||
| 		.flags = IORESOURCE_IRQ | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iop32x_i2c_0_controller = { | ||||
| 	.name = "IOP3xx-I2C", | ||||
| 	.id = 0, | ||||
| 	.num_resources = 2, | ||||
| 	.resource = iop32x_i2c_0_resources | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iop32x_i2c_1_controller = { | ||||
| 	.name = "IOP3xx-I2C", | ||||
| 	.id = 1, | ||||
| 	.num_resources = 2, | ||||
| 	.resource = iop32x_i2c_1_resources | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device *iop32x_devices[] __initdata = { | ||||
| 	&iop32x_i2c_0_controller, | ||||
| 	&iop32x_i2c_1_controller | ||||
| }; | ||||
| 
 | ||||
| void __init iop32x_init(void) | ||||
| { | ||||
| 	if(iop_is_321()) | ||||
| 	{ | ||||
| 		platform_add_devices(iop32x_devices, | ||||
| 				ARRAY_SIZE(iop32x_devices)); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void __init iop321_map_io(void) | ||||
| { | ||||
| 	iotable_init(iop321_std_desc, ARRAY_SIZE(iop321_std_desc)); | ||||
| 	early_serial_setup(&iop321_serial_ports[0]); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_ARCH_IQ80321 | ||||
| extern void iq80321_map_io(void); | ||||
| extern struct sys_timer iop321_timer; | ||||
| extern void iop321_init_time(void); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_ARCH_IQ31244 | ||||
| extern void iq31244_map_io(void); | ||||
| extern struct sys_timer iop321_timer; | ||||
| extern void iop321_init_time(void); | ||||
| #endif | ||||
| 
 | ||||
| #if defined(CONFIG_ARCH_IQ80321) | ||||
| MACHINE_START(IQ80321, "Intel IQ80321") | ||||
| 	/* Maintainer: Intel Corporation */ | ||||
| 	.phys_io	= IQ80321_UART, | ||||
| 	.io_pg_offst	= ((IQ80321_UART) >> 18) & 0xfffc, | ||||
| 	.map_io		= iq80321_map_io, | ||||
| 	.init_irq	= iop321_init_irq, | ||||
| 	.timer		= &iop321_timer, | ||||
| 	.boot_params	= 0xa0000100, | ||||
| 	.init_machine	= iop32x_init, | ||||
| MACHINE_END | ||||
| #elif defined(CONFIG_ARCH_IQ31244) | ||||
| MACHINE_START(IQ31244, "Intel IQ31244") | ||||
| 	/* Maintainer: Intel Corp. */ | ||||
| 	.phys_io	= IQ31244_UART, | ||||
| 	.io_pg_offst	= ((IQ31244_UART) >> 18) & 0xfffc, | ||||
| 	.map_io		= iq31244_map_io, | ||||
| 	.init_irq	= iop321_init_irq, | ||||
| 	.timer		= &iop321_timer, | ||||
| 	.boot_params	= 0xa0000100, | ||||
| 	.init_machine	= iop32x_init, | ||||
| MACHINE_END | ||||
| #else | ||||
| #error No machine descriptor defined for this IOP3XX implementation | ||||
| #endif | ||||
|  | @ -1,108 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/iop321-time.c | ||||
|  * | ||||
|  * Timer code for IOP321 based systems | ||||
|  * | ||||
|  * Author: Deepak Saxena <dsaxena@mvista.com> | ||||
|  * | ||||
|  * Copyright 2002-2003 MontaVista Software 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/kernel.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/time.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/timex.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/uaccess.h> | ||||
| #include <asm/mach/irq.h> | ||||
| #include <asm/mach/time.h> | ||||
| 
 | ||||
| #define IOP321_TIME_SYNC 0 | ||||
| 
 | ||||
| static inline unsigned long get_elapsed(void) | ||||
| { | ||||
| 	return LATCH - *IOP321_TU_TCR0; | ||||
| } | ||||
| 
 | ||||
| static unsigned long iop321_gettimeoffset(void) | ||||
| { | ||||
| 	unsigned long elapsed, usec; | ||||
| 	u32 tisr1, tisr2; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If an interrupt was pending before we read the timer, | ||||
| 	 * we've already wrapped.  Factor this into the time. | ||||
| 	 * If an interrupt was pending after we read the timer, | ||||
| 	 * it may have wrapped between checking the interrupt | ||||
| 	 * status and reading the timer.  Re-read the timer to | ||||
| 	 * be sure its value is after the wrap. | ||||
| 	 */ | ||||
| 
 | ||||
| 	asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr1)); | ||||
| 	elapsed = get_elapsed(); | ||||
| 	asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr2)); | ||||
| 
 | ||||
| 	if(tisr1 & 1) | ||||
| 		elapsed += LATCH; | ||||
| 	else if (tisr2 & 1) | ||||
| 		elapsed = LATCH + get_elapsed(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Now convert them to usec. | ||||
| 	 */ | ||||
| 	usec = (unsigned long)(elapsed / (CLOCK_TICK_RATE/1000000)); | ||||
| 
 | ||||
| 	return usec; | ||||
| } | ||||
| 
 | ||||
| static irqreturn_t | ||||
| iop321_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | ||||
| { | ||||
| 	u32 tisr; | ||||
| 
 | ||||
| 	write_seqlock(&xtime_lock); | ||||
| 
 | ||||
| 	asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr)); | ||||
| 	tisr |= 1; | ||||
| 	asm volatile("mcr p6, 0, %0, c6, c1, 0" : : "r" (tisr)); | ||||
| 
 | ||||
| 	timer_tick(regs); | ||||
| 
 | ||||
| 	write_sequnlock(&xtime_lock); | ||||
| 
 | ||||
| 	return IRQ_HANDLED; | ||||
| } | ||||
| 
 | ||||
| static struct irqaction iop321_timer_irq = { | ||||
| 	.name		= "IOP321 Timer Tick", | ||||
| 	.handler	= iop321_timer_interrupt, | ||||
| 	.flags		= IRQF_DISABLED | IRQF_TIMER, | ||||
| }; | ||||
| 
 | ||||
| static void __init iop321_timer_init(void) | ||||
| { | ||||
| 	u32 timer_ctl; | ||||
| 
 | ||||
| 	setup_irq(IRQ_IOP321_TIMER0, &iop321_timer_irq); | ||||
| 
 | ||||
| 	timer_ctl = IOP321_TMR_EN | IOP321_TMR_PRIVILEGED | IOP321_TMR_RELOAD | | ||||
| 			IOP321_TMR_RATIO_1_1; | ||||
| 
 | ||||
| 	asm volatile("mcr p6, 0, %0, c4, c1, 0" : : "r" (LATCH)); | ||||
| 
 | ||||
| 	asm volatile("mcr p6, 0, %0, c0, c1, 0"	: : "r" (timer_ctl)); | ||||
| } | ||||
| 
 | ||||
| struct sys_timer iop321_timer = { | ||||
| 	.init		= &iop321_timer_init, | ||||
| 	.offset		= iop321_gettimeoffset, | ||||
| }; | ||||
|  | @ -1,129 +0,0 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-iop3xx/iop331-irq.c | ||||
|  * | ||||
|  * Generic IOP331 IRQ handling functionality | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * Copyright (C) 2003 Intel Corp. | ||||
|  * | ||||
|  * 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 <linux/init.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/list.h> | ||||
| 
 | ||||
| #include <asm/mach/irq.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/hardware.h> | ||||
| 
 | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| static u32 iop331_mask0 = 0; | ||||
| static u32 iop331_mask1 = 0; | ||||
| 
 | ||||
| static inline void intctl_write0(u32 val) | ||||
| { | ||||
|     // INTCTL0
 | ||||
| 	asm volatile("mcr p6,0,%0,c0,c0,0"::"r" (val)); | ||||
| } | ||||
| 
 | ||||
| static inline void intctl_write1(u32 val) | ||||
| { | ||||
|     // INTCTL1
 | ||||
|     asm volatile("mcr p6,0,%0,c1,c0,0"::"r" (val)); | ||||
| } | ||||
| 
 | ||||
| static inline void intstr_write0(u32 val) | ||||
| { | ||||
|     // INTSTR0
 | ||||
| 	asm volatile("mcr p6,0,%0,c2,c0,0"::"r" (val)); | ||||
| } | ||||
| 
 | ||||
| static inline void intstr_write1(u32 val) | ||||
| { | ||||
|     // INTSTR1
 | ||||
| 	asm volatile("mcr p6,0,%0,c3,c0,0"::"r" (val)); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop331_irq_mask1 (unsigned int irq) | ||||
| { | ||||
|         iop331_mask0 &= ~(1 << (irq - IOP331_IRQ_OFS)); | ||||
|         intctl_write0(iop331_mask0); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop331_irq_mask2 (unsigned int irq) | ||||
| { | ||||
|         iop331_mask1 &= ~(1 << (irq - IOP331_IRQ_OFS - 32)); | ||||
|         intctl_write1(iop331_mask1); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop331_irq_unmask1(unsigned int irq) | ||||
| { | ||||
|         iop331_mask0 |= (1 << (irq - IOP331_IRQ_OFS)); | ||||
|         intctl_write0(iop331_mask0); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| iop331_irq_unmask2(unsigned int irq) | ||||
| { | ||||
|         iop331_mask1 |= (1 << (irq - IOP331_IRQ_OFS - 32)); | ||||
|         intctl_write1(iop331_mask1); | ||||
| } | ||||
| 
 | ||||
| struct irq_chip iop331_irqchip1 = { | ||||
| 	.name	= "IOP-1", | ||||
| 	.ack    = iop331_irq_mask1, | ||||
| 	.mask   = iop331_irq_mask1, | ||||
| 	.unmask = iop331_irq_unmask1, | ||||
| }; | ||||
| 
 | ||||
| struct irq_chip iop331_irqchip2 = { | ||||
| 	.name	= "IOP-2", | ||||
| 	.ack    = iop331_irq_mask2, | ||||
| 	.mask   = iop331_irq_mask2, | ||||
| 	.unmask = iop331_irq_unmask2, | ||||
| }; | ||||
| 
 | ||||
| void __init iop331_init_irq(void) | ||||
| { | ||||
| 	unsigned int i, tmp; | ||||
| 
 | ||||
| 	/* Enable access to coprocessor 6 for dealing with IRQs.
 | ||||
| 	 * From RMK: | ||||
| 	 * Basically, the Intel documentation here is poor.  It appears that | ||||
| 	 * you need to set the bit to be able to access the coprocessor from | ||||
| 	 * SVC mode.  Whether that allows access from user space or not is | ||||
| 	 * unclear. | ||||
| 	 */ | ||||
| 	asm volatile ( | ||||
| 		"mrc p15, 0, %0, c15, c1, 0\n\t" | ||||
| 		"orr %0, %0, %1\n\t" | ||||
| 		"mcr p15, 0, %0, c15, c1, 0\n\t" | ||||
| 		/* The action is delayed, so we have to do this: */ | ||||
| 		"mrc p15, 0, %0, c15, c1, 0\n\t" | ||||
| 		"mov %0, %0\n\t" | ||||
| 		"sub pc, pc, #4" | ||||
| 		: "=r" (tmp) : "i" (1 << 6) ); | ||||
| 
 | ||||
| 	intctl_write0(0);		// disable all interrupts
 | ||||
|     	intctl_write1(0); | ||||
| 	intstr_write0(0);		// treat all as IRQ
 | ||||
|     	intstr_write1(0); | ||||
| 	if(machine_is_iq80331()) 	// all interrupts are inputs to chip
 | ||||
| 		*IOP331_PCIIRSR = 0x0f; | ||||
| 
 | ||||
| 	for(i = IOP331_IRQ_OFS; i < NR_IOP331_IRQS; i++) | ||||
| 	{ | ||||
| 		set_irq_chip(i, (i < 32) ? &iop331_irqchip1 : &iop331_irqchip2); | ||||
| 		set_irq_handler(i, do_level_IRQ); | ||||
| 		set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -1,222 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/iop331-pci.c | ||||
|  * | ||||
|  * PCI support for the Intel IOP331 chipset | ||||
|  * | ||||
|  * Author: Dave Jiang (dave.jiang@intel.com) | ||||
|  * Copyright (C) 2003, 2004 Intel Corp. | ||||
|  * | ||||
|  * 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 <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/ioport.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/system.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/mach/pci.h> | ||||
| 
 | ||||
| #include <asm/arch/iop331.h> | ||||
| 
 | ||||
| #undef DEBUG | ||||
| #undef DEBUG1 | ||||
| 
 | ||||
| #ifdef DEBUG | ||||
| #define  DBG(x...) printk(x) | ||||
| #else | ||||
| #define  DBG(x...) do { } while (0) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef DEBUG1 | ||||
| #define  DBG1(x...) printk(x) | ||||
| #else | ||||
| #define  DBG1(x...) do { } while (0) | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * This routine builds either a type0 or type1 configuration command.  If the | ||||
|  * bus is on the 80331 then a type0 made, else a type1 is created. | ||||
|  */ | ||||
| static u32 iop331_cfg_address(struct pci_bus *bus, int devfn, int where) | ||||
| { | ||||
| 	struct pci_sys_data *sys = bus->sysdata; | ||||
| 	u32 addr; | ||||
| 
 | ||||
| 	if (sys->busnr == bus->number) | ||||
| 		addr = 1 << (PCI_SLOT(devfn) + 16) | (PCI_SLOT(devfn) << 11); | ||||
| 	else | ||||
| 		addr = bus->number << 16 | PCI_SLOT(devfn) << 11 | 1; | ||||
| 
 | ||||
| 	addr |=	PCI_FUNC(devfn) << 8 | (where & ~3); | ||||
| 
 | ||||
| 	return addr; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * This routine checks the status of the last configuration cycle.  If an error | ||||
|  * was detected it returns a 1, else it returns a 0.  The errors being checked | ||||
|  * are parity, master abort, target abort (master and target).  These types of | ||||
|  * errors occure during a config cycle where there is no device, like during | ||||
|  * the discovery stage. | ||||
|  */ | ||||
| static int iop331_pci_status(void) | ||||
| { | ||||
| 	unsigned int status; | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Check the status registers. | ||||
| 	 */ | ||||
| 	status = *IOP331_ATUSR; | ||||
| 	if (status & 0xf900) | ||||
| 	{ | ||||
| 		DBG("\t\t\tPCI: P0 - status = 0x%08x\n", status); | ||||
| 		*IOP331_ATUSR = status & 0xf900; | ||||
| 		ret = 1; | ||||
| 	} | ||||
| 	status = *IOP331_ATUISR; | ||||
| 	if (status & 0x679f) | ||||
| 	{ | ||||
| 		DBG("\t\t\tPCI: P1 - status = 0x%08x\n", status); | ||||
| 		*IOP331_ATUISR = status & 0x679f; | ||||
| 		ret = 1; | ||||
| 	} | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Simply write the address register and read the configuration | ||||
|  * data.  Note that the 4 nop's ensure that we are able to handle | ||||
|  * a delayed abort (in theory.) | ||||
|  */ | ||||
| static inline u32 iop331_read(unsigned long addr) | ||||
| { | ||||
| 	u32 val; | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 		"str	%1, [%2]\n\t" | ||||
| 		"ldr	%0, [%3]\n\t" | ||||
| 		"nop\n\t" | ||||
| 		"nop\n\t" | ||||
| 		"nop\n\t" | ||||
| 		"nop\n\t" | ||||
| 		: "=r" (val) | ||||
| 		: "r" (addr), "r" (IOP331_OCCAR), "r" (IOP331_OCCDR)); | ||||
| 
 | ||||
| 	return val; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * The read routines must check the error status of the last configuration | ||||
|  * cycle.  If there was an error, the routine returns all hex f's. | ||||
|  */ | ||||
| static int | ||||
| iop331_read_config(struct pci_bus *bus, unsigned int devfn, int where, | ||||
| 		int size, u32 *value) | ||||
| { | ||||
| 	unsigned long addr = iop331_cfg_address(bus, devfn, where); | ||||
| 	u32 val = iop331_read(addr) >> ((where & 3) * 8); | ||||
| 
 | ||||
| 	if( iop331_pci_status() ) | ||||
| 		val = 0xffffffff; | ||||
| 
 | ||||
| 	*value = val; | ||||
| 
 | ||||
| 	return PCIBIOS_SUCCESSFUL; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| iop331_write_config(struct pci_bus *bus, unsigned int devfn, int where, | ||||
| 		int size, u32 value) | ||||
| { | ||||
| 	unsigned long addr = iop331_cfg_address(bus, devfn, where); | ||||
| 	u32 val; | ||||
| 
 | ||||
| 	if (size != 4) { | ||||
| 		val = iop331_read(addr); | ||||
| 		if (!iop331_pci_status() == 0) | ||||
| 			return PCIBIOS_SUCCESSFUL; | ||||
| 
 | ||||
| 		where = (where & 3) * 8; | ||||
| 
 | ||||
| 		if (size == 1) | ||||
| 			val &= ~(0xff << where); | ||||
| 		else | ||||
| 			val &= ~(0xffff << where); | ||||
| 
 | ||||
| 		*IOP331_OCCDR = val | value << where; | ||||
| 	} else { | ||||
| 		asm volatile( | ||||
| 			"str	%1, [%2]\n\t" | ||||
| 			"str	%0, [%3]\n\t" | ||||
| 			"nop\n\t" | ||||
| 			"nop\n\t" | ||||
| 			"nop\n\t" | ||||
| 			"nop\n\t" | ||||
| 			: | ||||
| 			: "r" (value), "r" (addr), | ||||
| 			  "r" (IOP331_OCCAR), "r" (IOP331_OCCDR)); | ||||
| 	} | ||||
| 
 | ||||
| 	return PCIBIOS_SUCCESSFUL; | ||||
| } | ||||
| 
 | ||||
| static struct pci_ops iop331_ops = { | ||||
| 	.read	= iop331_read_config, | ||||
| 	.write	= iop331_write_config, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * When a PCI device does not exist during config cycles, the XScale gets a | ||||
|  * bus error instead of returning 0xffffffff. This handler simply returns. | ||||
|  */ | ||||
| int | ||||
| iop331_pci_abort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | ||||
| { | ||||
| 	DBG("PCI abort: address = 0x%08lx fsr = 0x%03x PC = 0x%08lx LR = 0x%08lx\n", | ||||
| 		addr, fsr, regs->ARM_pc, regs->ARM_lr); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If it was an imprecise abort, then we need to correct the | ||||
| 	 * return address to be _after_ the instruction. | ||||
| 	 */ | ||||
| 	if (fsr & (1 << 10)) | ||||
| 		regs->ARM_pc += 4; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Scan an IOP331 PCI bus.  sys->bus defines which bus we scan. | ||||
|  */ | ||||
| struct pci_bus *iop331_scan_bus(int nr, struct pci_sys_data *sys) | ||||
| { | ||||
| 	return pci_scan_bus(sys->busnr, &iop331_ops, sys); | ||||
| } | ||||
| 
 | ||||
| void iop331_init(void) | ||||
| { | ||||
| 	DBG1("PCI:  Intel 80331 PCI init code.\n"); | ||||
| 	DBG1("\tATU: IOP331_ATUCMD=0x%04x\n", *IOP331_ATUCMD); | ||||
| 	DBG1("\tATU: IOP331_OMWTVR0=0x%04x, IOP331_OIOWTVR=0x%04x\n", | ||||
| 			*IOP331_OMWTVR0, | ||||
| 			*IOP331_OIOWTVR); | ||||
| 	DBG1("\tATU: IOP331_OMWTVR1=0x%04x\n", *IOP331_OMWTVR1); | ||||
| 	DBG1("\tATU: IOP331_ATUCR=0x%08x\n", *IOP331_ATUCR); | ||||
| 	DBG1("\tATU: IOP331_IABAR0=0x%08x IOP331_IALR0=0x%08x IOP331_IATVR0=%08x\n", *IOP331_IABAR0, *IOP331_IALR0, *IOP331_IATVR0); | ||||
| 	DBG1("\tATU: IOP31_IABAR1=0x%08x IOP331_IALR1=0x%08x\n", *IOP331_IABAR1, *IOP331_IALR1); | ||||
| 	DBG1("\tATU: IOP331_ERBAR=0x%08x IOP331_ERLR=0x%08x IOP331_ERTVR=%08x\n", *IOP331_ERBAR, *IOP331_ERLR, *IOP331_ERTVR); | ||||
| 	DBG1("\tATU: IOP331_IABAR2=0x%08x IOP331_IALR2=0x%08x IOP331_IATVR2=%08x\n", *IOP331_IABAR2, *IOP331_IALR2, *IOP331_IATVR2); | ||||
| 	DBG1("\tATU: IOP331_IABAR3=0x%08x IOP331_IALR3=0x%08x IOP331_IATVR3=%08x\n", *IOP331_IABAR3, *IOP331_IALR3, *IOP331_IATVR3); | ||||
| 
 | ||||
| 	hook_fault_code(16+6, iop331_pci_abort, SIGBUS, "imprecise external abort"); | ||||
| } | ||||
| 
 | ||||
|  | @ -1,221 +0,0 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-iop3xx/iop331-setup.c | ||||
|  * | ||||
|  * Author: Dave Jiang (dave.jiang@intel.com) | ||||
|  * Copyright (C) 2004 Intel Corporation. | ||||
|  * | ||||
|  * 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 <linux/mm.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/major.h> | ||||
| #include <linux/fs.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <linux/serial.h> | ||||
| #include <linux/tty.h> | ||||
| #include <linux/serial_8250.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/setup.h> | ||||
| #include <asm/system.h> | ||||
| #include <asm/memory.h> | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/mach/arch.h> | ||||
| 
 | ||||
| #define IOP331_UART_XTAL 33334000 | ||||
| 
 | ||||
| /*
 | ||||
|  * Standard IO mapping for all IOP331 based systems | ||||
|  */ | ||||
| static struct map_desc iop331_std_desc[] __initdata = { | ||||
| 	{	/* mem mapped registers */ | ||||
| 		.virtual	= IOP331_VIRT_MEM_BASE, | ||||
| 		.pfn		= __phys_to_pfn(IOP331_PHYS_MEM_BASE), | ||||
| 		.length		= 0x00002000, | ||||
| 		.type		= MT_DEVICE | ||||
| 	}, {	/* PCI IO space */ | ||||
| 		.virtual	= IOP331_PCI_LOWER_IO_VA, | ||||
| 		.pfn		= __phys_to_pfn(IOP331_PCI_LOWER_IO_PA), | ||||
| 		.length		= IOP331_PCI_IO_WINDOW_SIZE, | ||||
| 		.type		= MT_DEVICE | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static struct resource iop33x_uart0_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start = IOP331_UART0_PHYS, | ||||
| 		.end = IOP331_UART0_PHYS + 0x3f, | ||||
| 		.flags = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start = IRQ_IOP331_UART0, | ||||
| 		.end = IRQ_IOP331_UART0, | ||||
| 		.flags = IORESOURCE_IRQ | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static struct resource iop33x_uart1_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start = IOP331_UART1_PHYS, | ||||
| 		.end = IOP331_UART1_PHYS + 0x3f, | ||||
| 		.flags = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start = IRQ_IOP331_UART1, | ||||
| 		.end = IRQ_IOP331_UART1, | ||||
| 		.flags = IORESOURCE_IRQ | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static struct plat_serial8250_port iop33x_uart0_data[] = { | ||||
| 	{ | ||||
|        .membase     = (char*)(IOP331_UART0_VIRT), | ||||
|        .mapbase     = (IOP331_UART0_PHYS), | ||||
|        .irq         = IRQ_IOP331_UART0, | ||||
|        .uartclk     = IOP331_UART_XTAL, | ||||
|        .regshift    = 2, | ||||
|        .iotype      = UPIO_MEM, | ||||
|        .flags       = UPF_SKIP_TEST, | ||||
| 	}, | ||||
| 	{  }, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_serial8250_port iop33x_uart1_data[] = { | ||||
| 	{ | ||||
|        .membase     = (char*)(IOP331_UART1_VIRT), | ||||
|        .mapbase     = (IOP331_UART1_PHYS), | ||||
|        .irq         = IRQ_IOP331_UART1, | ||||
|        .uartclk     = IOP331_UART_XTAL, | ||||
|        .regshift    = 2, | ||||
|        .iotype      = UPIO_MEM, | ||||
|        .flags       = UPF_SKIP_TEST, | ||||
| 	}, | ||||
| 	{  }, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iop33x_uart0 = { | ||||
|        .name = "serial8250", | ||||
|        .id = PLAT8250_DEV_PLATFORM, | ||||
|        .dev.platform_data = iop33x_uart0_data, | ||||
|        .num_resources = 2, | ||||
|        .resource = iop33x_uart0_resources, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iop33x_uart1 = { | ||||
|        .name = "serial8250", | ||||
|        .id = PLAT8250_DEV_PLATFORM1, | ||||
|        .dev.platform_data = iop33x_uart1_data, | ||||
|        .num_resources = 2, | ||||
|        .resource = iop33x_uart1_resources, | ||||
| }; | ||||
| 
 | ||||
| static struct resource iop33x_i2c_0_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start = 0xfffff680, | ||||
| 		.end = 0xfffff698, | ||||
| 		.flags = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start = IRQ_IOP331_I2C_0, | ||||
| 		.end = IRQ_IOP331_I2C_0, | ||||
| 		.flags = IORESOURCE_IRQ | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static struct resource iop33x_i2c_1_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start = 0xfffff6a0, | ||||
| 		.end = 0xfffff6b8, | ||||
| 		.flags = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start = IRQ_IOP331_I2C_1, | ||||
| 		.end = IRQ_IOP331_I2C_1, | ||||
| 		.flags = IORESOURCE_IRQ | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iop33x_i2c_0_controller = { | ||||
| 	.name = "IOP3xx-I2C", | ||||
| 	.id = 0, | ||||
| 	.num_resources = 2, | ||||
| 	.resource = iop33x_i2c_0_resources | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device iop33x_i2c_1_controller = { | ||||
| 	.name = "IOP3xx-I2C", | ||||
| 	.id = 1, | ||||
| 	.num_resources = 2, | ||||
| 	.resource = iop33x_i2c_1_resources | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device *iop33x_devices[] __initdata = { | ||||
| 	&iop33x_uart0, | ||||
| 	&iop33x_uart1, | ||||
| 	&iop33x_i2c_0_controller, | ||||
| 	&iop33x_i2c_1_controller | ||||
| }; | ||||
| 
 | ||||
| void __init iop33x_init(void) | ||||
| { | ||||
| 	if(iop_is_331()) | ||||
| 	{ | ||||
| 		platform_add_devices(iop33x_devices, | ||||
| 				ARRAY_SIZE(iop33x_devices)); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void __init iop331_map_io(void) | ||||
| { | ||||
| 	iotable_init(iop331_std_desc, ARRAY_SIZE(iop331_std_desc)); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_ARCH_IOP331 | ||||
| extern void iop331_init_irq(void); | ||||
| extern struct sys_timer iop331_timer; | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_ARCH_IQ80331 | ||||
| extern void iq80331_map_io(void); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_MACH_IQ80332 | ||||
| extern void iq80332_map_io(void); | ||||
| #endif | ||||
| 
 | ||||
| #if defined(CONFIG_ARCH_IQ80331) | ||||
| MACHINE_START(IQ80331, "Intel IQ80331") | ||||
| 	/* Maintainer: Intel Corp. */ | ||||
| 	.phys_io	= 0xfefff000, | ||||
| 	.io_pg_offst	= ((0xfffff000) >> 18) & 0xfffc, // virtual, physical
 | ||||
| 	.map_io		= iq80331_map_io, | ||||
| 	.init_irq	= iop331_init_irq, | ||||
| 	.timer		= &iop331_timer, | ||||
| 	.boot_params	= 0x0100, | ||||
| 	.init_machine	= iop33x_init, | ||||
| MACHINE_END | ||||
| 
 | ||||
| #elif defined(CONFIG_MACH_IQ80332) | ||||
| MACHINE_START(IQ80332, "Intel IQ80332") | ||||
| 	/* Maintainer: Intel Corp. */ | ||||
| 	.phys_io	= 0xfefff000, | ||||
| 	.io_pg_offst	= ((0xfffff000) >> 18) & 0xfffc, // virtual, physical
 | ||||
| 	.map_io		= iq80332_map_io, | ||||
| 	.init_irq	= iop331_init_irq, | ||||
| 	.timer		= &iop331_timer, | ||||
| 	.boot_params	= 0x0100, | ||||
| 	.init_machine	= iop33x_init, | ||||
| MACHINE_END | ||||
| 
 | ||||
| #else | ||||
| #error No machine descriptor defined for this IOP3XX implementation | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,106 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/iop331-time.c | ||||
|  * | ||||
|  * Timer code for IOP331 based systems | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * | ||||
|  * Copyright 2003 Intel Corp. | ||||
|  * | ||||
|  *  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/kernel.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/time.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/timex.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/uaccess.h> | ||||
| #include <asm/mach/irq.h> | ||||
| #include <asm/mach/time.h> | ||||
| 
 | ||||
| static inline unsigned long get_elapsed(void) | ||||
| { | ||||
| 	return LATCH - *IOP331_TU_TCR0; | ||||
| } | ||||
| 
 | ||||
| static unsigned long iop331_gettimeoffset(void) | ||||
| { | ||||
| 	unsigned long elapsed, usec; | ||||
| 	u32 tisr1, tisr2; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If an interrupt was pending before we read the timer, | ||||
| 	 * we've already wrapped.  Factor this into the time. | ||||
| 	 * If an interrupt was pending after we read the timer, | ||||
| 	 * it may have wrapped between checking the interrupt | ||||
| 	 * status and reading the timer.  Re-read the timer to | ||||
| 	 * be sure its value is after the wrap. | ||||
| 	 */ | ||||
| 
 | ||||
| 	asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr1)); | ||||
| 	elapsed = get_elapsed(); | ||||
| 	asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr2)); | ||||
| 
 | ||||
| 	if(tisr1 & 1) | ||||
| 		elapsed += LATCH; | ||||
| 	else if (tisr2 & 1) | ||||
| 		elapsed = LATCH + get_elapsed(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Now convert them to usec. | ||||
| 	 */ | ||||
| 	usec = (unsigned long)(elapsed / (CLOCK_TICK_RATE/1000000)); | ||||
| 
 | ||||
| 	return usec; | ||||
| } | ||||
| 
 | ||||
| static irqreturn_t | ||||
| iop331_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | ||||
| { | ||||
| 	u32 tisr; | ||||
| 
 | ||||
| 	write_seqlock(&xtime_lock); | ||||
| 
 | ||||
| 	asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr)); | ||||
| 	tisr |= 1; | ||||
| 	asm volatile("mcr p6, 0, %0, c6, c1, 0" : : "r" (tisr)); | ||||
| 
 | ||||
| 	timer_tick(regs); | ||||
| 
 | ||||
| 	write_sequnlock(&xtime_lock); | ||||
| 	return IRQ_HANDLED; | ||||
| } | ||||
| 
 | ||||
| static struct irqaction iop331_timer_irq = { | ||||
| 	.name		= "IOP331 Timer Tick", | ||||
| 	.handler	= iop331_timer_interrupt, | ||||
| 	.flags		= IRQF_DISABLED | IRQF_TIMER, | ||||
| }; | ||||
| 
 | ||||
| static void __init iop331_timer_init(void) | ||||
| { | ||||
| 	u32 timer_ctl; | ||||
| 
 | ||||
| 	setup_irq(IRQ_IOP331_TIMER0, &iop331_timer_irq); | ||||
| 
 | ||||
| 	timer_ctl = IOP331_TMR_EN | IOP331_TMR_PRIVILEGED | IOP331_TMR_RELOAD | | ||||
| 			IOP331_TMR_RATIO_1_1; | ||||
| 
 | ||||
| 	asm volatile("mcr p6, 0, %0, c4, c1, 0" : : "r" (LATCH)); | ||||
| 
 | ||||
| 	asm volatile("mcr p6, 0, %0, c0, c1, 0"	: : "r" (timer_ctl)); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| struct sys_timer iop331_timer = { | ||||
| 	.init		= iop331_timer_init, | ||||
| 	.offset		= iop331_gettimeoffset, | ||||
| }; | ||||
|  | @ -1,45 +0,0 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-iop3xx/mm.c | ||||
|  * | ||||
|  * Low level memory initialization for iq80321 platform | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/page.h> | ||||
| 
 | ||||
| #include <asm/mach/map.h> | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80321 specific IO mappings | ||||
|  * | ||||
|  * We use RedBoot's setup for the onboard devices. | ||||
|  */ | ||||
| static struct map_desc iq31244_io_desc[] __initdata = { | ||||
| 	{	/* on-board devices */ | ||||
| 		.virtual	= IQ31244_UART, | ||||
| 		.pfn		= __phys_to_pfn(IQ31244_UART), | ||||
| 		.length		= 0x00100000, | ||||
| 		.type		= MT_DEVICE | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| void __init iq31244_map_io(void) | ||||
| { | ||||
| 	iop321_map_io(); | ||||
| 
 | ||||
| 	iotable_init(iq31244_io_desc, ARRAY_SIZE(iq31244_io_desc)); | ||||
| } | ||||
|  | @ -1,129 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/iq80321-pci.c | ||||
|  * | ||||
|  * PCI support for the Intel IQ80321 reference board | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * Copyright (C) 2004 Intel Corp. | ||||
|  * | ||||
|  * 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 <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * The following macro is used to lookup irqs in a standard table | ||||
|  * format for those systems that do not already have PCI | ||||
|  * interrupts properly routed.  We assume 1 <= pin <= 4 | ||||
|  */ | ||||
| #define PCI_IRQ_TABLE_LOOKUP(minid,maxid)	\ | ||||
| ({ int _ctl_ = -1;				\ | ||||
|    unsigned int _idsel = idsel - minid;		\ | ||||
|    if (_idsel <= maxid)				\ | ||||
|       _ctl_ = pci_irq_table[_idsel][pin-1];	\ | ||||
|    _ctl_; }) | ||||
| 
 | ||||
| #define INTA	IRQ_IQ31244_INTA | ||||
| #define INTB	IRQ_IQ31244_INTB | ||||
| #define INTC	IRQ_IQ31244_INTC | ||||
| #define INTD	IRQ_IQ31244_INTD | ||||
| 
 | ||||
| #define INTE	IRQ_IQ31244_I82546 | ||||
| 
 | ||||
| static inline int __init | ||||
| iq31244_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) | ||||
| { | ||||
| 	static int pci_irq_table[][4] = { | ||||
| 		/*
 | ||||
| 		 * PCI IDSEL/INTPIN->INTLINE | ||||
| 		 * A       B       C       D | ||||
| 		 */ | ||||
| #ifdef CONFIG_ARCH_EP80219 | ||||
| 		{INTB, INTB, INTB, INTB}, /* CFlash */ | ||||
| 		{INTE, INTE, INTE, INTE}, /* 82551 Pro 100 */ | ||||
| 		{INTD, INTD, INTD, INTD}, /* PCI-X Slot */ | ||||
| 		{INTC, INTC, INTC, INTC}, /* SATA   */ | ||||
| #else | ||||
| 		{INTB, INTB, INTB, INTB}, /* CFlash */ | ||||
| 		{INTC, INTC, INTC, INTC}, /* SATA   */ | ||||
| 		{INTD, INTD, INTD, INTD}, /* PCI-X Slot */ | ||||
| 		{INTE, INTE, INTE, INTE}, /* 82546 GigE */ | ||||
| #endif // CONFIG_ARCH_EP80219
 | ||||
| 	}; | ||||
| 
 | ||||
| 	BUG_ON(pin < 1 || pin > 4); | ||||
| 
 | ||||
| 	return PCI_IRQ_TABLE_LOOKUP(0, 7); | ||||
| } | ||||
| 
 | ||||
| static int iq31244_setup(int nr, struct pci_sys_data *sys) | ||||
| { | ||||
| 	struct resource *res; | ||||
| 
 | ||||
| 	if(nr != 0) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL); | ||||
| 	if (!res) | ||||
| 		panic("PCI: unable to alloc resources"); | ||||
| 
 | ||||
| 	res[0].start = IOP321_PCI_LOWER_IO_VA; | ||||
| 	res[0].end   = IOP321_PCI_UPPER_IO_VA; | ||||
| 	res[0].name  = "IQ31244 PCI I/O Space"; | ||||
| 	res[0].flags = IORESOURCE_IO; | ||||
| 
 | ||||
| 	res[1].start = IOP321_PCI_LOWER_MEM_PA; | ||||
| 	res[1].end   = IOP321_PCI_UPPER_MEM_PA; | ||||
| 	res[1].name  = "IQ31244 PCI Memory Space"; | ||||
| 	res[1].flags = IORESOURCE_MEM; | ||||
| 
 | ||||
| 	request_resource(&ioport_resource, &res[0]); | ||||
| 	request_resource(&iomem_resource, &res[1]); | ||||
| 
 | ||||
| 	sys->mem_offset = IOP321_PCI_MEM_OFFSET; | ||||
| 	sys->io_offset  = IOP321_PCI_IO_OFFSET; | ||||
| 
 | ||||
| 	sys->resource[0] = &res[0]; | ||||
| 	sys->resource[1] = &res[1]; | ||||
| 	sys->resource[2] = NULL; | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static void iq31244_preinit(void) | ||||
| { | ||||
| 	iop321_init(); | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci iq31244_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iq31244_setup, | ||||
| 	.scan		= iop321_scan_bus, | ||||
| 	.preinit	= iq31244_preinit, | ||||
| 	.map_irq	= iq31244_map_irq | ||||
| }; | ||||
| 
 | ||||
| static int __init iq31244_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_iq31244()) | ||||
| 		pci_common_init(&iq31244_pci); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(iq31244_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,45 +0,0 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-iop3xx/mm.c | ||||
|  * | ||||
|  * Low level memory initialization for iq80321 platform | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/page.h> | ||||
| 
 | ||||
| #include <asm/mach/map.h> | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80321 specific IO mappings | ||||
|  * | ||||
|  * We use RedBoot's setup for the onboard devices. | ||||
|  */ | ||||
| static struct map_desc iq80321_io_desc[] __initdata = { | ||||
|  	{	/* on-board devices */ | ||||
| 		.virtual	= IQ80321_UART, | ||||
| 		.pfn		= __phys_to_pfn(IQ80321_UART), | ||||
| 		.length		= 0x00100000, | ||||
| 		.type		= MT_DEVICE | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| void __init iq80321_map_io(void) | ||||
| { | ||||
| 	iop321_map_io(); | ||||
| 
 | ||||
| 	iotable_init(iq80321_io_desc, ARRAY_SIZE(iq80321_io_desc)); | ||||
| } | ||||
|  | @ -1,123 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/iq80321-pci.c | ||||
|  * | ||||
|  * PCI support for the Intel IQ80321 reference board | ||||
|  * | ||||
|  * Author: Rory Bolt <rorybolt@pacbell.net> | ||||
|  * Copyright (C) 2002 Rory Bolt | ||||
|  * Copyright (C) 2004 Intel Corp. | ||||
|  * | ||||
|  * 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 <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * The following macro is used to lookup irqs in a standard table | ||||
|  * format for those systems that do not already have PCI | ||||
|  * interrupts properly routed.  We assume 1 <= pin <= 4 | ||||
|  */ | ||||
| #define PCI_IRQ_TABLE_LOOKUP(minid,maxid)	\ | ||||
| ({ int _ctl_ = -1;				\ | ||||
|    unsigned int _idsel = idsel - minid;		\ | ||||
|    if (_idsel <= maxid)				\ | ||||
|       _ctl_ = pci_irq_table[_idsel][pin-1];	\ | ||||
|    _ctl_; }) | ||||
| 
 | ||||
| #define INTA	IRQ_IQ80321_INTA | ||||
| #define INTB	IRQ_IQ80321_INTB | ||||
| #define INTC	IRQ_IQ80321_INTC | ||||
| #define INTD	IRQ_IQ80321_INTD | ||||
| 
 | ||||
| #define INTE	IRQ_IQ80321_I82544 | ||||
| 
 | ||||
| static inline int __init | ||||
| iq80321_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) | ||||
| { | ||||
| 	static int pci_irq_table[][4] = { | ||||
| 		/*
 | ||||
| 		 * PCI IDSEL/INTPIN->INTLINE | ||||
| 		 * A       B       C       D | ||||
| 		 */ | ||||
| 		{INTE, INTE, INTE, INTE}, /* Gig-E */ | ||||
| 		{-1, -1, -1, -1}, 	  /* Unused */ | ||||
| 		{INTC, INTD, INTA, INTB}, /* PCI-X Slot */ | ||||
| 		{-1, -1, -1, -1}, | ||||
| 	}; | ||||
| 
 | ||||
| 	BUG_ON(pin < 1 || pin > 4); | ||||
| 
 | ||||
| //	return PCI_IRQ_TABLE_LOOKUP(4, 7);
 | ||||
| 	return pci_irq_table[idsel%4][pin-1]; | ||||
| } | ||||
| 
 | ||||
| static int iq80321_setup(int nr, struct pci_sys_data *sys) | ||||
| { | ||||
| 	struct resource *res; | ||||
| 
 | ||||
| 	if(nr != 0) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL); | ||||
| 	if (!res) | ||||
| 		panic("PCI: unable to alloc resources"); | ||||
| 
 | ||||
| 	res[0].start = IOP321_PCI_LOWER_IO_VA; | ||||
| 	res[0].end   = IOP321_PCI_UPPER_IO_VA; | ||||
| 	res[0].name  = "IQ80321 PCI I/O Space"; | ||||
| 	res[0].flags = IORESOURCE_IO; | ||||
| 
 | ||||
| 	res[1].start = IOP321_PCI_LOWER_MEM_PA; | ||||
| 	res[1].end   = IOP321_PCI_UPPER_MEM_PA; | ||||
| 	res[1].name  = "IQ80321 PCI Memory Space"; | ||||
| 	res[1].flags = IORESOURCE_MEM; | ||||
| 
 | ||||
| 	request_resource(&ioport_resource, &res[0]); | ||||
| 	request_resource(&iomem_resource, &res[1]); | ||||
| 
 | ||||
| 	sys->mem_offset = IOP321_PCI_MEM_OFFSET; | ||||
| 	sys->io_offset  = IOP321_PCI_IO_OFFSET; | ||||
| 
 | ||||
| 	sys->resource[0] = &res[0]; | ||||
| 	sys->resource[1] = &res[1]; | ||||
| 	sys->resource[2] = NULL; | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static void iq80321_preinit(void) | ||||
| { | ||||
| 	iop321_init(); | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci iq80321_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iq80321_setup, | ||||
| 	.scan		= iop321_scan_bus, | ||||
| 	.preinit	= iq80321_preinit, | ||||
| 	.map_irq	= iq80321_map_irq | ||||
| }; | ||||
| 
 | ||||
| static int __init iq80321_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_iq80321()) | ||||
| 		pci_common_init(&iq80321_pci); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(iq80321_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,35 +0,0 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-iop3xx/mm.c | ||||
|  * | ||||
|  * Low level memory initialization for iq80331 platform | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * Copyright (C) 2003 Intel Corp. | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/page.h> | ||||
| 
 | ||||
| #include <asm/mach/map.h> | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80331 specific IO mappings | ||||
|  * | ||||
|  * We use RedBoot's setup for the onboard devices. | ||||
|  */ | ||||
| 
 | ||||
| void __init iq80331_map_io(void) | ||||
| { | ||||
| 	iop331_map_io(); | ||||
| } | ||||
|  | @ -1,119 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/iq80331-pci.c | ||||
|  * | ||||
|  * PCI support for the Intel IQ80331 reference board | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * Copyright (C) 2003, 2004 Intel Corp. | ||||
|  * | ||||
|  * 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 <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * The following macro is used to lookup irqs in a standard table | ||||
|  * format for those systems that do not already have PCI | ||||
|  * interrupts properly routed.  We assume 1 <= pin <= 4 | ||||
|  */ | ||||
| #define PCI_IRQ_TABLE_LOOKUP(minid,maxid)	\ | ||||
| ({ int _ctl_ = -1;				\ | ||||
|    unsigned int _idsel = idsel - minid;		\ | ||||
|    if (_idsel <= maxid)				\ | ||||
|       _ctl_ = pci_irq_table[_idsel][pin-1];	\ | ||||
|    _ctl_; }) | ||||
| 
 | ||||
| #define INTA	IRQ_IQ80331_INTA | ||||
| #define INTB	IRQ_IQ80331_INTB | ||||
| #define INTC	IRQ_IQ80331_INTC | ||||
| #define INTD	IRQ_IQ80331_INTD | ||||
| 
 | ||||
| //#define INTE	IRQ_IQ80331_I82544
 | ||||
| 
 | ||||
| static inline int __init | ||||
| iq80331_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) | ||||
| { | ||||
| 	static int pci_irq_table[][4] = { | ||||
| 		/*
 | ||||
| 		 * PCI IDSEL/INTPIN->INTLINE | ||||
| 		 * A       B       C       D | ||||
| 		 */ | ||||
| 		{INTB, INTC, INTD, INTA}, /* PCI-X Slot */ | ||||
| 		{INTC, INTC, INTC, INTC}, /* GigE  */ | ||||
| 	}; | ||||
| 
 | ||||
| 	BUG_ON(pin < 1 || pin > 4); | ||||
| 
 | ||||
| 	return PCI_IRQ_TABLE_LOOKUP(1, 7); | ||||
| } | ||||
| 
 | ||||
| static int iq80331_setup(int nr, struct pci_sys_data *sys) | ||||
| { | ||||
| 	struct resource *res; | ||||
| 
 | ||||
| 	if(nr != 0) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL); | ||||
| 	if (!res) | ||||
| 		panic("PCI: unable to alloc resources"); | ||||
| 
 | ||||
| 	res[0].start = IOP331_PCI_LOWER_IO_VA; | ||||
| 	res[0].end   = IOP331_PCI_UPPER_IO_VA; | ||||
| 	res[0].name  = "IQ80331 PCI I/O Space"; | ||||
| 	res[0].flags = IORESOURCE_IO; | ||||
| 
 | ||||
| 	res[1].start = IOP331_PCI_LOWER_MEM_PA; | ||||
| 	res[1].end   = IOP331_PCI_UPPER_MEM_PA; | ||||
| 	res[1].name  = "IQ80331 PCI Memory Space"; | ||||
| 	res[1].flags = IORESOURCE_MEM; | ||||
| 
 | ||||
| 	request_resource(&ioport_resource, &res[0]); | ||||
| 	request_resource(&iomem_resource, &res[1]); | ||||
| 
 | ||||
| 	sys->mem_offset = IOP331_PCI_MEM_OFFSET; | ||||
| 	sys->io_offset  = IOP331_PCI_IO_OFFSET; | ||||
| 
 | ||||
| 	sys->resource[0] = &res[0]; | ||||
| 	sys->resource[1] = &res[1]; | ||||
| 	sys->resource[2] = NULL; | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static void iq80331_preinit(void) | ||||
| { | ||||
| 	iop331_init(); | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci iq80331_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iq80331_setup, | ||||
| 	.scan		= iop331_scan_bus, | ||||
| 	.preinit	= iq80331_preinit, | ||||
| 	.map_irq	= iq80331_map_irq | ||||
| }; | ||||
| 
 | ||||
| static int __init iq80331_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_iq80331()) | ||||
| 		pci_common_init(&iq80331_pci); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(iq80331_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,35 +0,0 @@ | |||
| /*
 | ||||
|  * linux/arch/arm/mach-iop3xx/mm.c | ||||
|  * | ||||
|  * Low level memory initialization for iq80332 platform | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * Copyright (C) 2004 Intel Corp. | ||||
|  * | ||||
|  * 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/mm.h> | ||||
| #include <linux/init.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/page.h> | ||||
| 
 | ||||
| #include <asm/mach/map.h> | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * IQ80332 specific IO mappings | ||||
|  * | ||||
|  * We use RedBoot's setup for the onboard devices. | ||||
|  */ | ||||
| 
 | ||||
| void __init iq80332_map_io(void) | ||||
| { | ||||
| 	iop331_map_io(); | ||||
| } | ||||
|  | @ -1,125 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-iop3xx/iq80332-pci.c | ||||
|  * | ||||
|  * PCI support for the Intel IQ80332 reference board | ||||
|  * | ||||
|  * Author: Dave Jiang <dave.jiang@intel.com> | ||||
|  * Copyright (C) 2004 Intel Corp. | ||||
|  * | ||||
|  * 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 <linux/kernel.h> | ||||
| #include <linux/pci.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/slab.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/irq.h> | ||||
| #include <asm/mach/pci.h> | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * The following macro is used to lookup irqs in a standard table | ||||
|  * format for those systems that do not already have PCI | ||||
|  * interrupts properly routed.  We assume 1 <= pin <= 4 | ||||
|  */ | ||||
| #define PCI_IRQ_TABLE_LOOKUP(minid,maxid)	\ | ||||
| ({ int _ctl_ = -1;				\ | ||||
|    unsigned int _idsel = idsel - minid;		\ | ||||
|    if (_idsel <= maxid)				\ | ||||
|       _ctl_ = pci_irq_table[_idsel][pin-1];	\ | ||||
|    _ctl_; }) | ||||
| 
 | ||||
| #define INTA	IRQ_IQ80332_INTA | ||||
| #define INTB	IRQ_IQ80332_INTB | ||||
| #define INTC	IRQ_IQ80332_INTC | ||||
| #define INTD	IRQ_IQ80332_INTD | ||||
| 
 | ||||
| //#define INTE	IRQ_IQ80332_I82544
 | ||||
| 
 | ||||
| static inline int __init | ||||
| iq80332_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) | ||||
| { | ||||
| 	static int pci_irq_table[][8] = { | ||||
| 		/*
 | ||||
| 		 * PCI IDSEL/INTPIN->INTLINE | ||||
| 		 * A       B       C       D | ||||
| 		 */ | ||||
| 		{-1,   -1,   -1,   -1}, | ||||
| 		{-1,   -1,   -1,   -1}, | ||||
| 		{-1,   -1,   -1,   -1}, | ||||
| 		{INTA, INTB, INTC, INTD}, /* PCI-X Slot */ | ||||
| 		{-1,   -1,   -1,   -1}, | ||||
| 		{INTC, INTC, INTC, INTC}, /* GigE  */ | ||||
| 		{-1,   -1,   -1,   -1}, | ||||
| 		{-1,   -1,   -1,   -1}, | ||||
| 	}; | ||||
| 
 | ||||
| 	BUG_ON(pin < 1 || pin > 4); | ||||
| 
 | ||||
| 	return PCI_IRQ_TABLE_LOOKUP(1, 7); | ||||
| } | ||||
| 
 | ||||
| static int iq80332_setup(int nr, struct pci_sys_data *sys) | ||||
| { | ||||
| 	struct resource *res; | ||||
| 
 | ||||
| 	if(nr != 0) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL); | ||||
| 	if (!res) | ||||
| 		panic("PCI: unable to alloc resources"); | ||||
| 
 | ||||
| 	res[0].start = IOP331_PCI_LOWER_IO_VA; | ||||
| 	res[0].end   = IOP331_PCI_UPPER_IO_VA; | ||||
| 	res[0].name  = "IQ80332 PCI I/O Space"; | ||||
| 	res[0].flags = IORESOURCE_IO; | ||||
| 
 | ||||
| 	res[1].start = IOP331_PCI_LOWER_MEM_PA; | ||||
| 	res[1].end   = IOP331_PCI_UPPER_MEM_PA; | ||||
| 	res[1].name  = "IQ80332 PCI Memory Space"; | ||||
| 	res[1].flags = IORESOURCE_MEM; | ||||
| 
 | ||||
| 	request_resource(&ioport_resource, &res[0]); | ||||
| 	request_resource(&iomem_resource, &res[1]); | ||||
| 
 | ||||
| 	sys->mem_offset = IOP331_PCI_MEM_OFFSET; | ||||
| 	sys->io_offset  = IOP331_PCI_IO_OFFSET; | ||||
| 
 | ||||
| 	sys->resource[0] = &res[0]; | ||||
| 	sys->resource[1] = &res[1]; | ||||
| 	sys->resource[2] = NULL; | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static void iq80332_preinit(void) | ||||
| { | ||||
| 	iop331_init(); | ||||
| } | ||||
| 
 | ||||
| static struct hw_pci iq80332_pci __initdata = { | ||||
| 	.swizzle	= pci_std_swizzle, | ||||
| 	.nr_controllers = 1, | ||||
| 	.setup		= iq80332_setup, | ||||
| 	.scan		= iop331_scan_bus, | ||||
| 	.preinit	= iq80332_preinit, | ||||
| 	.map_irq	= iq80332_map_irq | ||||
| }; | ||||
| 
 | ||||
| static int __init iq80332_pci_init(void) | ||||
| { | ||||
| 	if (machine_is_iq80332()) | ||||
| 		pci_common_init(&iq80332_pci); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| subsys_initcall(iq80332_pci_init); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -26,6 +26,7 @@ | |||
| #include <linux/bitops.h> | ||||
| #include <linux/time.h> | ||||
| #include <linux/timex.h> | ||||
| #include <linux/clocksource.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/uaccess.h> | ||||
|  | @ -255,16 +256,6 @@ static unsigned volatile last_jiffy_time; | |||
| 
 | ||||
| #define CLOCK_TICKS_PER_USEC	((CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC) | ||||
| 
 | ||||
| /* IRQs are disabled before entering here from do_gettimeofday() */ | ||||
| static unsigned long ixp4xx_gettimeoffset(void) | ||||
| { | ||||
| 	u32 elapsed; | ||||
| 
 | ||||
| 	elapsed = *IXP4XX_OSTS - last_jiffy_time; | ||||
| 
 | ||||
| 	return elapsed / CLOCK_TICKS_PER_USEC; | ||||
| } | ||||
| 
 | ||||
| static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | ||||
| { | ||||
| 	write_seqlock(&xtime_lock); | ||||
|  | @ -309,7 +300,6 @@ static void __init ixp4xx_timer_init(void) | |||
| 
 | ||||
| struct sys_timer ixp4xx_timer = { | ||||
| 	.init		= ixp4xx_timer_init, | ||||
| 	.offset		= ixp4xx_gettimeoffset, | ||||
| }; | ||||
| 
 | ||||
| static struct resource ixp46x_i2c_resources[] = { | ||||
|  | @ -365,3 +355,29 @@ void __init ixp4xx_sys_init(void) | |||
| 			ixp4xx_exp_bus_size >> 20); | ||||
| } | ||||
| 
 | ||||
| cycle_t ixp4xx_get_cycles(void) | ||||
| { | ||||
| 	return *IXP4XX_OSTS; | ||||
| } | ||||
| 
 | ||||
| static struct clocksource clocksource_ixp4xx = { | ||||
| 	.name 		= "OSTS", | ||||
| 	.rating		= 200, | ||||
| 	.read		= ixp4xx_get_cycles, | ||||
| 	.mask		= CLOCKSOURCE_MASK(32), | ||||
| 	.shift 		= 20, | ||||
| 	.is_continuous 	= 1, | ||||
| }; | ||||
| 
 | ||||
| unsigned long ixp4xx_timer_freq = FREQ; | ||||
| static int __init ixp4xx_clocksource_init(void) | ||||
| { | ||||
| 	clocksource_ixp4xx.mult = | ||||
| 		clocksource_hz2mult(ixp4xx_timer_freq, | ||||
| 				    clocksource_ixp4xx.shift); | ||||
| 	clocksource_register(&clocksource_ixp4xx); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| device_initcall(ixp4xx_clocksource_init); | ||||
|  |  | |||
|  | @ -159,6 +159,8 @@ static void nslu2_power_off(void) | |||
| 
 | ||||
| static void __init nslu2_init(void) | ||||
| { | ||||
| 	ixp4xx_timer_freq = NSLU2_FREQ; | ||||
| 
 | ||||
| 	ixp4xx_sys_init(); | ||||
| 
 | ||||
| 	nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ | |||
| #include <linux/clk.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/mach-types.h> | ||||
| 
 | ||||
| #include <asm/arch/cpu.h> | ||||
| #include <asm/arch/usb.h> | ||||
|  | @ -586,77 +587,53 @@ static int omap1_clk_set_rate(struct clk *clk, unsigned long rate) | |||
|  *-------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| #ifdef CONFIG_OMAP_RESET_CLOCKS | ||||
| /*
 | ||||
|  * Resets some clocks that may be left on from bootloader, | ||||
|  * but leaves serial clocks on. See also omap_late_clk_reset(). | ||||
|  */ | ||||
| static inline void omap1_early_clk_reset(void) | ||||
| { | ||||
| 	//omap_writel(0x3 << 29, MOD_CONF_CTRL_0);
 | ||||
| } | ||||
| 
 | ||||
| static int __init omap1_late_clk_reset(void) | ||||
| static void __init omap1_clk_disable_unused(struct clk *clk) | ||||
| { | ||||
| 	/* Turn off all unused clocks */ | ||||
| 	struct clk *p; | ||||
| 	__u32 regval32; | ||||
| 
 | ||||
| 	/* USB_REQ_EN will be disabled later if necessary (usb_dc_ck) */ | ||||
| 	regval32 = omap_readw(SOFT_REQ_REG) & (1 << 4); | ||||
| 	omap_writew(regval32, SOFT_REQ_REG); | ||||
| 	omap_writew(0, SOFT_REQ_REG2); | ||||
| 
 | ||||
| 	list_for_each_entry(p, &clocks, node) { | ||||
| 		if (p->usecount > 0 || (p->flags & ALWAYS_ENABLED) || | ||||
| 			p->enable_reg == 0) | ||||
| 			continue; | ||||
| 
 | ||||
| 		/* Clocks in the DSP domain need api_ck. Just assume bootloader
 | ||||
| 		 * has not enabled any DSP clocks */ | ||||
| 		if ((u32)p->enable_reg == DSP_IDLECT2) { | ||||
| 			printk(KERN_INFO "Skipping reset check for DSP domain " | ||||
| 			       "clock \"%s\"\n", p->name); | ||||
| 			continue; | ||||
| 		} | ||||
| 
 | ||||
| 		/* Is the clock already disabled? */ | ||||
| 		if (p->flags & ENABLE_REG_32BIT) { | ||||
| 			if (p->flags & VIRTUAL_IO_ADDRESS) | ||||
| 				regval32 = __raw_readl(p->enable_reg); | ||||
| 			else | ||||
| 				regval32 = omap_readl(p->enable_reg); | ||||
| 		} else { | ||||
| 			if (p->flags & VIRTUAL_IO_ADDRESS) | ||||
| 				regval32 = __raw_readw(p->enable_reg); | ||||
| 			else | ||||
| 				regval32 = omap_readw(p->enable_reg); | ||||
| 		} | ||||
| 
 | ||||
| 		if ((regval32 & (1 << p->enable_bit)) == 0) | ||||
| 			continue; | ||||
| 
 | ||||
| 		/* FIXME: This clock seems to be necessary but no-one
 | ||||
| 		 * has asked for its activation. */ | ||||
| 		if (p == &tc2_ck         // FIX: pm.c (SRAM), CCP, Camera
 | ||||
| 		    || p == &ck_dpll1out.clk // FIX: SoSSI, SSR
 | ||||
| 		    || p == &arm_gpio_ck // FIX: GPIO code for 1510
 | ||||
| 		    ) { | ||||
| 			printk(KERN_INFO "FIXME: Clock \"%s\" seems unused\n", | ||||
| 			       p->name); | ||||
| 			continue; | ||||
| 		} | ||||
| 
 | ||||
| 		printk(KERN_INFO "Disabling unused clock \"%s\"... ", p->name); | ||||
| 		p->disable(p); | ||||
| 		printk(" done\n"); | ||||
| 	/* Clocks in the DSP domain need api_ck. Just assume bootloader
 | ||||
| 	 * has not enabled any DSP clocks */ | ||||
| 	if ((u32)clk->enable_reg == DSP_IDLECT2) { | ||||
| 		printk(KERN_INFO "Skipping reset check for DSP domain " | ||||
| 		       "clock \"%s\"\n", clk->name); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| 	/* Is the clock already disabled? */ | ||||
| 	if (clk->flags & ENABLE_REG_32BIT) { | ||||
| 		if (clk->flags & VIRTUAL_IO_ADDRESS) | ||||
| 			regval32 = __raw_readl(clk->enable_reg); | ||||
| 			else | ||||
| 				regval32 = omap_readl(clk->enable_reg); | ||||
| 	} else { | ||||
| 		if (clk->flags & VIRTUAL_IO_ADDRESS) | ||||
| 			regval32 = __raw_readw(clk->enable_reg); | ||||
| 		else | ||||
| 			regval32 = omap_readw(clk->enable_reg); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((regval32 & (1 << clk->enable_bit)) == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	/* FIXME: This clock seems to be necessary but no-one
 | ||||
| 	 * has asked for its activation. */ | ||||
| 	if (clk == &tc2_ck		// FIX: pm.c (SRAM), CCP, Camera
 | ||||
| 	    || clk == &ck_dpll1out.clk	// FIX: SoSSI, SSR
 | ||||
| 	    || clk == &arm_gpio_ck	// FIX: GPIO code for 1510
 | ||||
| 		) { | ||||
| 		printk(KERN_INFO "FIXME: Clock \"%s\" seems unused\n", | ||||
| 		       clk->name); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	printk(KERN_INFO "Disabling unused clock \"%s\"... ", clk->name); | ||||
| 	clk->disable(clk); | ||||
| 	printk(" done\n"); | ||||
| } | ||||
| late_initcall(omap1_late_clk_reset); | ||||
| 
 | ||||
| #else | ||||
| #define omap1_early_clk_reset()	{} | ||||
| #define omap1_clk_disable_unused	NULL | ||||
| #endif | ||||
| 
 | ||||
| static struct clk_functions omap1_clk_functions = { | ||||
|  | @ -664,6 +641,7 @@ static struct clk_functions omap1_clk_functions = { | |||
| 	.clk_disable		= omap1_clk_disable, | ||||
| 	.clk_round_rate		= omap1_clk_round_rate, | ||||
| 	.clk_set_rate		= omap1_clk_set_rate, | ||||
| 	.clk_disable_unused	= omap1_clk_disable_unused, | ||||
| }; | ||||
| 
 | ||||
| int __init omap1_clk_init(void) | ||||
|  | @ -671,8 +649,13 @@ int __init omap1_clk_init(void) | |||
| 	struct clk ** clkp; | ||||
| 	const struct omap_clock_config *info; | ||||
| 	int crystal_type = 0; /* Default 12 MHz */ | ||||
| 	u32 reg; | ||||
| 
 | ||||
| 	/* USB_REQ_EN will be disabled later if necessary (usb_dc_ck) */ | ||||
| 	reg = omap_readw(SOFT_REQ_REG) & (1 << 4); | ||||
| 	omap_writew(reg, SOFT_REQ_REG); | ||||
| 	omap_writew(0, SOFT_REQ_REG2); | ||||
| 
 | ||||
| 	omap1_early_clk_reset(); | ||||
| 	clk_init(&omap1_clk_functions); | ||||
| 
 | ||||
| 	/* By default all idlect1 clocks are allowed to idle */ | ||||
|  | @ -772,6 +755,12 @@ int __init omap1_clk_init(void) | |||
| 	omap_writew(omap_readw(OMAP730_PCC_UPLD_CTRL) & ~0x1, OMAP730_PCC_UPLD_CTRL); | ||||
| #endif | ||||
| 
 | ||||
| 	/* Amstrad Delta wants BCLK high when inactive */ | ||||
| 	if (machine_is_ams_delta()) | ||||
| 		omap_writel(omap_readl(ULPD_CLOCK_CTRL) | | ||||
| 				(1 << SDW_MCLK_INV_BIT), | ||||
| 				ULPD_CLOCK_CTRL); | ||||
| 
 | ||||
| 	/* Turn off DSP and ARM_TIMXO. Make sure ARM_INTHCK is not divided */ | ||||
| 	/* (on 730, bit 13 must not be cleared) */ | ||||
| 	if (cpu_is_omap730()) | ||||
|  |  | |||
|  | @ -89,6 +89,7 @@ struct arm_idlect1_clk { | |||
| #define EN_DSPTIMCK	5 | ||||
| 
 | ||||
| /* Various register defines for clock controls scattered around OMAP chip */ | ||||
| #define SDW_MCLK_INV_BIT	2	/* In ULPD_CLKC_CTRL */ | ||||
| #define USB_MCLK_EN_BIT		4	/* In ULPD_CLKC_CTRL */ | ||||
| #define USB_HOST_HHC_UHOST_EN	9	/* In MOD_CONF_CTRL_0 */ | ||||
| #define SWD_ULPD_PLL_CLK_REQ	1	/* In SWD_CLK_DIV_CTRL_SEL */ | ||||
|  | @ -741,6 +742,18 @@ static struct clk i2c_fck = { | |||
| 	.disable	= &omap1_clk_disable_generic, | ||||
| }; | ||||
| 
 | ||||
| static struct clk i2c_ick = { | ||||
| 	.name		= "i2c_ick", | ||||
| 	.id		= 1, | ||||
| 	.flags		= CLOCK_IN_OMAP16XX | | ||||
| 			  VIRTUAL_CLOCK | CLOCK_NO_IDLE_PARENT | | ||||
| 			  ALWAYS_ENABLED, | ||||
| 	.parent		= &armper_ck.clk, | ||||
| 	.recalc		= &followparent_recalc, | ||||
| 	.enable		= &omap1_clk_enable_generic, | ||||
| 	.disable	= &omap1_clk_disable_generic, | ||||
| }; | ||||
| 
 | ||||
| static struct clk * onchip_clks[] = { | ||||
| 	/* non-ULPD clocks */ | ||||
| 	&ck_ref, | ||||
|  | @ -790,6 +803,7 @@ static struct clk * onchip_clks[] = { | |||
| 	/* Virtual clocks */ | ||||
| 	&virtual_ck_mpu, | ||||
| 	&i2c_fck, | ||||
| 	&i2c_ick, | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -199,6 +199,17 @@ MUX_CFG("N14_1610_UWIRE_CS0",	 8,    9,    1,	  1,  21,   0,	  1,	 1,  1) | |||
| MUX_CFG("P15_1610_UWIRE_CS3",	 8,   12,    1,	  1,  22,   0,	  1,	 1,  1) | ||||
| MUX_CFG("N15_1610_UWIRE_CS1",	 7,   18,    2,	  1,  14,   0,	 NA,	 0,  1) | ||||
| 
 | ||||
| /* OMAP-1610 SPI */ | ||||
| MUX_CFG("U19_1610_SPIF_SCK",	 7,    21,   6,	  1,  15,   0,	  1,	 1,  1) | ||||
| MUX_CFG("U18_1610_SPIF_DIN",	 8,    0,    6,	  1,  18,   1,	  1,	 0,  1) | ||||
| MUX_CFG("P20_1610_SPIF_DIN",	 6,    27,   4,   1,   7,   1,    1,     0,  1) | ||||
| MUX_CFG("W21_1610_SPIF_DOUT",	 8,    3,    6,	  1,  19,   0,	  1,	 0,  1) | ||||
| MUX_CFG("R18_1610_SPIF_DOUT",	 7,    9,    3,	  1,  11,   0,	  1,	 0,  1) | ||||
| MUX_CFG("N14_1610_SPIF_CS0",	 8,    9,    6,	  1,  21,   0,	  1,	 1,  1) | ||||
| MUX_CFG("N15_1610_SPIF_CS1",	 7,    18,   6,	  1,  14,   0,	  1,	 1,  1) | ||||
| MUX_CFG("T19_1610_SPIF_CS2",	 7,    15,   4,	  1,  13,   0,	  1,	 1,  1) | ||||
| MUX_CFG("P15_1610_SPIF_CS3",	 8,    12,   3,	  1,  22,   0,	  1,	 1,  1) | ||||
| 
 | ||||
| /* OMAP-1610 Flash */ | ||||
| MUX_CFG("L3_1610_FLASH_CS2B_OE",10,    6,    1,	 NA,   0,   0,	 NA,	 0,  1) | ||||
| MUX_CFG("M8_1610_FLASH_CS2B_WE",10,    3,    1,	 NA,   0,   0,	 NA,	 0,  1) | ||||
|  |  | |||
|  | @ -166,8 +166,8 @@ static struct omap_uart_config apollon_uart_config __initdata = { | |||
| 
 | ||||
| static struct omap_mmc_config apollon_mmc_config __initdata = { | ||||
| 	.mmc [0] = { | ||||
| 		.enabled 	= 0, | ||||
| 		.wire4		= 0, | ||||
| 		.enabled 	= 1, | ||||
| 		.wire4		= 1, | ||||
| 		.wp_pin		= -1, | ||||
| 		.power_pin	= -1, | ||||
| 		.switch_pin	= -1, | ||||
|  | @ -257,6 +257,9 @@ static void __init omap_apollon_init(void) | |||
| 	/* REVISIT: where's the correct place */ | ||||
| 	omap_cfg_reg(W19_24XX_SYS_NIRQ); | ||||
| 
 | ||||
| 	/* Use Interal loop-back in MMC/SDIO Module Input Clock selection */ | ||||
| 	CONTROL_DEVCONF |= (1 << 24); | ||||
| 
 | ||||
| 	/*
 | ||||
|  	 * Make sure the serial ports are muxed on at this point. | ||||
| 	 * You have to mux them off in device drivers later on | ||||
|  |  | |||
|  | @ -32,10 +32,14 @@ | |||
| #include "memory.h" | ||||
| #include "clock.h" | ||||
| 
 | ||||
| #undef DEBUG | ||||
| 
 | ||||
| //#define DOWN_VARIABLE_DPLL 1			/* Experimental */
 | ||||
| 
 | ||||
| static struct prcm_config *curr_prcm_set; | ||||
| static u32 curr_perf_level = PRCM_FULL_SPEED; | ||||
| static struct clk *vclk; | ||||
| static struct clk *sclk; | ||||
| 
 | ||||
| /*-------------------------------------------------------------------------
 | ||||
|  * Omap2 specific clock functions | ||||
|  | @ -79,6 +83,14 @@ static void omap2_propagate_rate(struct clk * clk) | |||
| 	propagate_rate(clk); | ||||
| } | ||||
| 
 | ||||
| static void omap2_set_osc_ck(int enable) | ||||
| { | ||||
| 	if (enable) | ||||
| 		PRCM_CLKSRC_CTRL &= ~(0x3 << 3); | ||||
| 	else | ||||
| 		PRCM_CLKSRC_CTRL |= 0x3 << 3; | ||||
| } | ||||
| 
 | ||||
| /* Enable an APLL if off */ | ||||
| static void omap2_clk_fixed_enable(struct clk *clk) | ||||
| { | ||||
|  | @ -101,14 +113,56 @@ static void omap2_clk_fixed_enable(struct clk *clk) | |||
| 	else if (clk == &apll54_ck) | ||||
| 		cval = (1 << 6); | ||||
| 
 | ||||
| 	while (!CM_IDLEST_CKGEN & cval) {		/* Wait for lock */ | ||||
| 	while (!(CM_IDLEST_CKGEN & cval)) {		/* Wait for lock */ | ||||
| 		++i; | ||||
| 		udelay(1); | ||||
| 		if (i == 100000) | ||||
| 		if (i == 100000) { | ||||
| 			printk(KERN_ERR "Clock %s didn't lock\n", clk->name); | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void omap2_clk_wait_ready(struct clk *clk) | ||||
| { | ||||
| 	unsigned long reg, other_reg, st_reg; | ||||
| 	u32 bit; | ||||
| 	int i; | ||||
| 
 | ||||
| 	reg = (unsigned long) clk->enable_reg; | ||||
| 	if (reg == (unsigned long) &CM_FCLKEN1_CORE || | ||||
| 	    reg == (unsigned long) &CM_FCLKEN2_CORE) | ||||
| 		other_reg = (reg & ~0xf0) | 0x10; | ||||
| 	else if (reg == (unsigned long) &CM_ICLKEN1_CORE || | ||||
| 		 reg == (unsigned long) &CM_ICLKEN2_CORE) | ||||
| 		other_reg = (reg & ~0xf0) | 0x00; | ||||
| 	else | ||||
| 		return; | ||||
| 
 | ||||
| 	/* No check for DSS or cam clocks */ | ||||
| 	if ((reg & 0x0f) == 0) { | ||||
| 		if (clk->enable_bit <= 1 || clk->enable_bit == 31) | ||||
| 			return; | ||||
| 	} | ||||
| 
 | ||||
| 	/* Check if both functional and interface clocks
 | ||||
| 	 * are running. */ | ||||
| 	bit = 1 << clk->enable_bit; | ||||
| 	if (!(__raw_readl(other_reg) & bit)) | ||||
| 		return; | ||||
| 	st_reg = (other_reg & ~0xf0) | 0x20; | ||||
| 	i = 0; | ||||
| 	while (!(__raw_readl(st_reg) & bit)) { | ||||
| 		i++; | ||||
| 		if (i == 100000) { | ||||
| 			printk(KERN_ERR "Timeout enabling clock %s\n", clk->name); | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 	if (i) | ||||
| 		pr_debug("Clock %s stable after %d loops\n", clk->name, i); | ||||
| } | ||||
| 
 | ||||
| /* Enables clock without considering parent dependencies or use count
 | ||||
|  * REVISIT: Maybe change this to use clk->enable like on omap1? | ||||
|  */ | ||||
|  | @ -119,6 +173,11 @@ static int _omap2_clk_enable(struct clk * clk) | |||
| 	if (clk->flags & ALWAYS_ENABLED) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	if (unlikely(clk == &osc_ck)) { | ||||
| 		omap2_set_osc_ck(1); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	if (unlikely(clk->enable_reg == 0)) { | ||||
| 		printk(KERN_ERR "clock.c: Enable for %s without enable code\n", | ||||
| 		       clk->name); | ||||
|  | @ -133,6 +192,9 @@ static int _omap2_clk_enable(struct clk * clk) | |||
| 	regval32 = __raw_readl(clk->enable_reg); | ||||
| 	regval32 |= (1 << clk->enable_bit); | ||||
| 	__raw_writel(regval32, clk->enable_reg); | ||||
| 	wmb(); | ||||
| 
 | ||||
| 	omap2_clk_wait_ready(clk); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  | @ -155,6 +217,11 @@ static void _omap2_clk_disable(struct clk *clk) | |||
| { | ||||
| 	u32 regval32; | ||||
| 
 | ||||
| 	if (unlikely(clk == &osc_ck)) { | ||||
| 		omap2_set_osc_ck(0); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	if (clk->enable_reg == 0) | ||||
| 		return; | ||||
| 
 | ||||
|  | @ -166,6 +233,7 @@ static void _omap2_clk_disable(struct clk *clk) | |||
| 	regval32 = __raw_readl(clk->enable_reg); | ||||
| 	regval32 &= ~(1 << clk->enable_bit); | ||||
| 	__raw_writel(regval32, clk->enable_reg); | ||||
| 	wmb(); | ||||
| } | ||||
| 
 | ||||
| static int omap2_clk_enable(struct clk *clk) | ||||
|  | @ -695,12 +763,14 @@ static int omap2_clk_set_rate(struct clk *clk, unsigned long rate) | |||
| 		reg_val = __raw_readl(reg); | ||||
| 		reg_val &= ~(field_mask << div_off); | ||||
| 		reg_val |= (field_val << div_off); | ||||
| 
 | ||||
| 		__raw_writel(reg_val, reg); | ||||
| 		wmb(); | ||||
| 		clk->rate = clk->parent->rate / field_val; | ||||
| 
 | ||||
| 		if (clk->flags & DELAYED_APP) | ||||
| 		if (clk->flags & DELAYED_APP) { | ||||
| 			__raw_writel(0x1, (void __iomem *)&PRCM_CLKCFG_CTRL); | ||||
| 			wmb(); | ||||
| 		} | ||||
| 		ret = 0; | ||||
| 	} else if (clk->set_rate != 0) | ||||
| 		ret = clk->set_rate(clk, rate); | ||||
|  | @ -836,10 +906,12 @@ static int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent) | |||
| 		reg_val = __raw_readl(reg) & ~(field_mask << src_off); | ||||
| 		reg_val |= (field_val << src_off); | ||||
| 		__raw_writel(reg_val, reg); | ||||
| 		wmb(); | ||||
| 
 | ||||
| 		if (clk->flags & DELAYED_APP) | ||||
| 		if (clk->flags & DELAYED_APP) { | ||||
| 			__raw_writel(0x1, (void __iomem *)&PRCM_CLKCFG_CTRL); | ||||
| 
 | ||||
| 			wmb(); | ||||
| 		} | ||||
| 		if (clk->usecount > 0) | ||||
| 			_omap2_clk_enable(clk); | ||||
| 
 | ||||
|  | @ -953,12 +1025,29 @@ static int omap2_select_table_rate(struct clk * clk, unsigned long rate) | |||
|  * Omap2 clock reset and init functions | ||||
|  *-------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| #ifdef CONFIG_OMAP_RESET_CLOCKS | ||||
| static void __init omap2_clk_disable_unused(struct clk *clk) | ||||
| { | ||||
| 	u32 regval32; | ||||
| 
 | ||||
| 	regval32 = __raw_readl(clk->enable_reg); | ||||
| 	if ((regval32 & (1 << clk->enable_bit)) == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	printk(KERN_INFO "Disabling unused clock \"%s\"\n", clk->name); | ||||
| 	_omap2_clk_disable(clk); | ||||
| } | ||||
| #else | ||||
| #define omap2_clk_disable_unused	NULL | ||||
| #endif | ||||
| 
 | ||||
| static struct clk_functions omap2_clk_functions = { | ||||
| 	.clk_enable		= omap2_clk_enable, | ||||
| 	.clk_disable		= omap2_clk_disable, | ||||
| 	.clk_round_rate		= omap2_clk_round_rate, | ||||
| 	.clk_set_rate		= omap2_clk_set_rate, | ||||
| 	.clk_set_parent		= omap2_clk_set_parent, | ||||
| 	.clk_disable_unused	= omap2_clk_disable_unused, | ||||
| }; | ||||
| 
 | ||||
| static void __init omap2_get_crystal_rate(struct clk *osc, struct clk *sys) | ||||
|  | @ -984,27 +1073,19 @@ static void __init omap2_get_crystal_rate(struct clk *osc, struct clk *sys) | |||
| 	sys->rate = sclk; | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_OMAP_RESET_CLOCKS | ||||
| static void __init omap2_disable_unused_clocks(void) | ||||
| /*
 | ||||
|  * Set clocks for bypass mode for reboot to work. | ||||
|  */ | ||||
| void omap2_clk_prepare_for_reboot(void) | ||||
| { | ||||
| 	struct clk *ck; | ||||
| 	u32 regval32; | ||||
| 	u32 rate; | ||||
| 
 | ||||
| 	list_for_each_entry(ck, &clocks, node) { | ||||
| 		if (ck->usecount > 0 || (ck->flags & ALWAYS_ENABLED) || | ||||
| 			ck->enable_reg == 0) | ||||
| 			continue; | ||||
| 	if (vclk == NULL || sclk == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 		regval32 = __raw_readl(ck->enable_reg); | ||||
| 		if ((regval32 & (1 << ck->enable_bit)) == 0) | ||||
| 			continue; | ||||
| 
 | ||||
| 		printk(KERN_INFO "Disabling unused clock \"%s\"\n", ck->name); | ||||
| 		_omap2_clk_disable(ck); | ||||
| 	} | ||||
| 	rate = clk_get_rate(sclk); | ||||
| 	clk_set_rate(vclk, rate); | ||||
| } | ||||
| late_initcall(omap2_disable_unused_clocks); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Switch the MPU rate if specified on cmdline. | ||||
|  | @ -1077,8 +1158,27 @@ int __init omap2_clk_init(void) | |||
| 	 */ | ||||
| 	clk_enable(&sync_32k_ick); | ||||
| 	clk_enable(&omapctrl_ick); | ||||
| 
 | ||||
| 	/* Force the APLLs active during bootup to avoid disabling and
 | ||||
| 	 * enabling them unnecessarily. */ | ||||
| 	clk_enable(&apll96_ck); | ||||
| 	clk_enable(&apll54_ck); | ||||
| 
 | ||||
| 	if (cpu_is_omap2430()) | ||||
| 		clk_enable(&sdrc_ick); | ||||
| 
 | ||||
| 	/* Avoid sleeping sleeping during omap2_clk_prepare_for_reboot() */ | ||||
| 	vclk = clk_get(NULL, "virt_prcm_set"); | ||||
| 	sclk = clk_get(NULL, "sys_ck"); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int __init omap2_disable_aplls(void) | ||||
| { | ||||
| 	clk_disable(&apll96_ck); | ||||
| 	clk_disable(&apll54_ck); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| late_initcall(omap2_disable_aplls); | ||||
|  |  | |||
|  | @ -560,7 +560,7 @@ static struct clk osc_ck = {		/* (*12, *13, 19.2, *26, 38.4)MHz */ | |||
| 	.name		= "osc_ck", | ||||
| 	.rate		= 26000000,		/* fixed up in clock init */ | ||||
| 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | | ||||
| 				RATE_FIXED | ALWAYS_ENABLED | RATE_PROPAGATES, | ||||
| 				RATE_FIXED | RATE_PROPAGATES, | ||||
| }; | ||||
| 
 | ||||
| /* With out modem likely 12MHz, with modem likely 13MHz */ | ||||
|  | @ -1368,7 +1368,8 @@ static struct clk mcbsp5_fck = { | |||
| }; | ||||
| 
 | ||||
| static struct clk mcspi1_ick = { | ||||
| 	.name		= "mcspi1_ick", | ||||
| 	.name		= "mcspi_ick", | ||||
| 	.id		= 1, | ||||
| 	.parent		= &l4_ck, | ||||
| 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, | ||||
| 	.enable_reg	= (void __iomem *)&CM_ICLKEN1_CORE, | ||||
|  | @ -1377,7 +1378,8 @@ static struct clk mcspi1_ick = { | |||
| }; | ||||
| 
 | ||||
| static struct clk mcspi1_fck = { | ||||
| 	.name		= "mcspi1_fck", | ||||
| 	.name		= "mcspi_fck", | ||||
| 	.id		= 1, | ||||
| 	.parent		= &func_48m_ck, | ||||
| 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, | ||||
| 	.enable_reg	= (void __iomem *)&CM_FCLKEN1_CORE, | ||||
|  | @ -1386,7 +1388,8 @@ static struct clk mcspi1_fck = { | |||
| }; | ||||
| 
 | ||||
| static struct clk mcspi2_ick = { | ||||
| 	.name		= "mcspi2_ick", | ||||
| 	.name		= "mcspi_ick", | ||||
| 	.id		= 2, | ||||
| 	.parent		= &l4_ck, | ||||
| 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, | ||||
| 	.enable_reg	= (void __iomem *)&CM_ICLKEN1_CORE, | ||||
|  | @ -1395,7 +1398,8 @@ static struct clk mcspi2_ick = { | |||
| }; | ||||
| 
 | ||||
| static struct clk mcspi2_fck = { | ||||
| 	.name		= "mcspi2_fck", | ||||
| 	.name		= "mcspi_fck", | ||||
| 	.id		= 2, | ||||
| 	.parent		= &func_48m_ck, | ||||
| 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, | ||||
| 	.enable_reg	= (void __iomem *)&CM_FCLKEN1_CORE, | ||||
|  | @ -1404,7 +1408,8 @@ static struct clk mcspi2_fck = { | |||
| }; | ||||
| 
 | ||||
| static struct clk mcspi3_ick = { | ||||
| 	.name		= "mcspi3_ick", | ||||
| 	.name		= "mcspi_ick", | ||||
| 	.id		= 3, | ||||
| 	.parent		= &l4_ck, | ||||
| 	.flags		= CLOCK_IN_OMAP243X, | ||||
| 	.enable_reg	= (void __iomem *)&CM_ICLKEN2_CORE, | ||||
|  | @ -1413,7 +1418,8 @@ static struct clk mcspi3_ick = { | |||
| }; | ||||
| 
 | ||||
| static struct clk mcspi3_fck = { | ||||
| 	.name		= "mcspi3_fck", | ||||
| 	.name		= "mcspi_fck", | ||||
| 	.id		= 3, | ||||
| 	.parent		= &func_48m_ck, | ||||
| 	.flags		= CLOCK_IN_OMAP243X, | ||||
| 	.enable_reg	= (void __iomem *)&CM_FCLKEN2_CORE, | ||||
|  |  | |||
|  | @ -13,6 +13,8 @@ | |||
| #include <linux/init.h> | ||||
| #include <linux/err.h> | ||||
| #include <linux/clk.h> | ||||
| #include <linux/ioport.h> | ||||
| #include <linux/spinlock.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| #include <asm/arch/gpmc.h> | ||||
|  | @ -41,6 +43,19 @@ | |||
| #define GPMC_CS0		0x60 | ||||
| #define GPMC_CS_SIZE		0x30 | ||||
| 
 | ||||
| #define GPMC_CS_NUM		8 | ||||
| #define GPMC_MEM_START		0x00000000 | ||||
| #define GPMC_MEM_END		0x3FFFFFFF | ||||
| #define BOOT_ROM_SPACE		0x100000	/* 1MB */ | ||||
| 
 | ||||
| #define GPMC_CHUNK_SHIFT	24		/* 16 MB */ | ||||
| #define GPMC_SECTION_SHIFT	28		/* 128 MB */ | ||||
| 
 | ||||
| static struct resource	gpmc_mem_root; | ||||
| static struct resource	gpmc_cs_mem[GPMC_CS_NUM]; | ||||
| static spinlock_t	gpmc_mem_lock = SPIN_LOCK_UNLOCKED; | ||||
| static unsigned		gpmc_cs_map; | ||||
| 
 | ||||
| static void __iomem *gpmc_base = | ||||
| 	(void __iomem *) IO_ADDRESS(GPMC_BASE); | ||||
| static void __iomem *gpmc_cs_base = | ||||
|  | @ -187,9 +202,168 @@ int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| unsigned long gpmc_cs_get_base_addr(int cs) | ||||
| static void gpmc_cs_enable_mem(int cs, u32 base, u32 size) | ||||
| { | ||||
| 	return (gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7) & 0x1f) << 24; | ||||
| 	u32 l; | ||||
| 	u32 mask; | ||||
| 
 | ||||
| 	mask = (1 << GPMC_SECTION_SHIFT) - size; | ||||
| 	l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); | ||||
| 	l &= ~0x3f; | ||||
| 	l = (base >> GPMC_CHUNK_SHIFT) & 0x3f; | ||||
| 	l &= ~(0x0f << 8); | ||||
| 	l |= ((mask >> GPMC_CHUNK_SHIFT) & 0x0f) << 8; | ||||
| 	l |= 1 << 6;		/* CSVALID */ | ||||
| 	gpmc_cs_write_reg(cs, GPMC_CS_CONFIG7, l); | ||||
| } | ||||
| 
 | ||||
| static void gpmc_cs_disable_mem(int cs) | ||||
| { | ||||
| 	u32 l; | ||||
| 
 | ||||
| 	l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); | ||||
| 	l &= ~(1 << 6);		/* CSVALID */ | ||||
| 	gpmc_cs_write_reg(cs, GPMC_CS_CONFIG7, l); | ||||
| } | ||||
| 
 | ||||
| static void gpmc_cs_get_memconf(int cs, u32 *base, u32 *size) | ||||
| { | ||||
| 	u32 l; | ||||
| 	u32 mask; | ||||
| 
 | ||||
| 	l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); | ||||
| 	*base = (l & 0x3f) << GPMC_CHUNK_SHIFT; | ||||
| 	mask = (l >> 8) & 0x0f; | ||||
| 	*size = (1 << GPMC_SECTION_SHIFT) - (mask << GPMC_CHUNK_SHIFT); | ||||
| } | ||||
| 
 | ||||
| static int gpmc_cs_mem_enabled(int cs) | ||||
| { | ||||
| 	u32 l; | ||||
| 
 | ||||
| 	l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); | ||||
| 	return l & (1 << 6); | ||||
| } | ||||
| 
 | ||||
| static void gpmc_cs_set_reserved(int cs, int reserved) | ||||
| { | ||||
| 	gpmc_cs_map &= ~(1 << cs); | ||||
| 	gpmc_cs_map |= (reserved ? 1 : 0) << cs; | ||||
| } | ||||
| 
 | ||||
| static int gpmc_cs_reserved(int cs) | ||||
| { | ||||
| 	return gpmc_cs_map & (1 << cs); | ||||
| } | ||||
| 
 | ||||
| static unsigned long gpmc_mem_align(unsigned long size) | ||||
| { | ||||
| 	int order; | ||||
| 
 | ||||
| 	size = (size - 1) >> (GPMC_CHUNK_SHIFT - 1); | ||||
| 	order = GPMC_CHUNK_SHIFT - 1; | ||||
| 	do { | ||||
| 		size >>= 1; | ||||
| 		order++; | ||||
| 	} while (size); | ||||
| 	size = 1 << order; | ||||
| 	return size; | ||||
| } | ||||
| 
 | ||||
| static int gpmc_cs_insert_mem(int cs, unsigned long base, unsigned long size) | ||||
| { | ||||
| 	struct resource	*res = &gpmc_cs_mem[cs]; | ||||
| 	int r; | ||||
| 
 | ||||
| 	size = gpmc_mem_align(size); | ||||
| 	spin_lock(&gpmc_mem_lock); | ||||
| 	res->start = base; | ||||
| 	res->end = base + size - 1; | ||||
| 	r = request_resource(&gpmc_mem_root, res); | ||||
| 	spin_unlock(&gpmc_mem_lock); | ||||
| 
 | ||||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| int gpmc_cs_request(int cs, unsigned long size, unsigned long *base) | ||||
| { | ||||
| 	struct resource *res = &gpmc_cs_mem[cs]; | ||||
| 	int r = -1; | ||||
| 
 | ||||
| 	if (cs > GPMC_CS_NUM) | ||||
| 		return -ENODEV; | ||||
| 
 | ||||
| 	size = gpmc_mem_align(size); | ||||
| 	if (size > (1 << GPMC_SECTION_SHIFT)) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	spin_lock(&gpmc_mem_lock); | ||||
| 	if (gpmc_cs_reserved(cs)) { | ||||
| 		r = -EBUSY; | ||||
| 		goto out; | ||||
| 	} | ||||
| 	if (gpmc_cs_mem_enabled(cs)) | ||||
| 		r = adjust_resource(res, res->start & ~(size - 1), size); | ||||
| 	if (r < 0) | ||||
| 		r = allocate_resource(&gpmc_mem_root, res, size, 0, ~0, | ||||
| 				      size, NULL, NULL); | ||||
| 	if (r < 0) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	gpmc_cs_enable_mem(cs, res->start, res->end - res->start + 1); | ||||
| 	*base = res->start; | ||||
| 	gpmc_cs_set_reserved(cs, 1); | ||||
| out: | ||||
| 	spin_unlock(&gpmc_mem_lock); | ||||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| void gpmc_cs_free(int cs) | ||||
| { | ||||
| 	spin_lock(&gpmc_mem_lock); | ||||
| 	if (cs >= GPMC_CS_NUM || !gpmc_cs_reserved(cs)) { | ||||
| 		printk(KERN_ERR "Trying to free non-reserved GPMC CS%d\n", cs); | ||||
| 		BUG(); | ||||
| 		spin_unlock(&gpmc_mem_lock); | ||||
| 		return; | ||||
| 	} | ||||
| 	gpmc_cs_disable_mem(cs); | ||||
| 	release_resource(&gpmc_cs_mem[cs]); | ||||
| 	gpmc_cs_set_reserved(cs, 0); | ||||
| 	spin_unlock(&gpmc_mem_lock); | ||||
| } | ||||
| 
 | ||||
| void __init gpmc_mem_init(void) | ||||
| { | ||||
| 	int cs; | ||||
| 	unsigned long boot_rom_space = 0; | ||||
| 
 | ||||
| 	if (cpu_is_omap242x()) { | ||||
| 		u32 l; | ||||
| 		l = omap_readl(OMAP242X_CONTROL_STATUS); | ||||
| 		/* In case of internal boot the 1st MB is redirected to the
 | ||||
| 		 * boot ROM memory space. | ||||
| 		 */ | ||||
| 		if (l & (1 << 3)) | ||||
| 			boot_rom_space = BOOT_ROM_SPACE; | ||||
| 	} else | ||||
| 		/* We assume internal boot if the mode can't be
 | ||||
| 		 * determined. | ||||
| 		 */ | ||||
| 		boot_rom_space = BOOT_ROM_SPACE; | ||||
| 	gpmc_mem_root.start = GPMC_MEM_START + boot_rom_space; | ||||
| 	gpmc_mem_root.end = GPMC_MEM_END; | ||||
| 
 | ||||
| 	/* Reserve all regions that has been set up by bootloader */ | ||||
| 	for (cs = 0; cs < GPMC_CS_NUM; cs++) { | ||||
| 		u32 base, size; | ||||
| 
 | ||||
| 		if (!gpmc_cs_mem_enabled(cs)) | ||||
| 			continue; | ||||
| 		gpmc_cs_get_memconf(cs, &base, &size); | ||||
| 		if (gpmc_cs_insert_mem(cs, base, size) < 0) | ||||
| 			BUG(); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void __init gpmc_init(void) | ||||
|  | @ -206,4 +380,6 @@ void __init gpmc_init(void) | |||
| 	l &= 0x03 << 3; | ||||
| 	l |= (0x02 << 3) | (1 << 0); | ||||
| 	gpmc_write_reg(GPMC_SYSCONFIG, l); | ||||
| 
 | ||||
| 	gpmc_mem_init(); | ||||
| } | ||||
|  |  | |||
|  | @ -41,18 +41,6 @@ static struct omap_irq_bank { | |||
| 		.nr_irqs	= 96, | ||||
| 	}, { | ||||
| 		/* XXX: DSP INTC */ | ||||
| 
 | ||||
| #if 0 | ||||
| 	/*
 | ||||
| 	 * Commented out for now until we fix the IVA clocking | ||||
| 	 */ | ||||
| #ifdef CONFIG_ARCH_OMAP2420 | ||||
| 	}, { | ||||
| 		/* IVA INTC (2420 only) */ | ||||
| 		.base_reg	= OMAP24XX_IVA_INTC_BASE, | ||||
| 		.nr_irqs	= 16,	/* Actually 32, but only 16 are used */ | ||||
| #endif | ||||
| #endif | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -104,6 +104,20 @@ MUX_CFG_24XX("P20_24XX_TSC_IRQ",	0x108,	0,	0,	0,	1) | |||
| MUX_CFG_24XX("K15_24XX_UART3_TX",	0x118,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("K14_24XX_UART3_RX",	0x119,	0,	0,	0,	1) | ||||
| 
 | ||||
| /* MMC/SDIO */ | ||||
| MUX_CFG_24XX("G19_24XX_MMC_CLKO",	0x0f3,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("H18_24XX_MMC_CMD",	0x0f4,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("F20_24XX_MMC_DAT0",	0x0f5,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("H14_24XX_MMC_DAT1",	0x0f6,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("E19_24XX_MMC_DAT2",	0x0f7,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("D19_24XX_MMC_DAT3",	0x0f8,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("F19_24XX_MMC_DAT_DIR0",	0x0f9,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("E20_24XX_MMC_DAT_DIR1",	0x0fa,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("F18_24XX_MMC_DAT_DIR2",	0x0fb,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("E18_24XX_MMC_DAT_DIR3",	0x0fc,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("G18_24XX_MMC_CMD_DIR",	0x0fd,	0,	0,	0,	1) | ||||
| MUX_CFG_24XX("H15_24XX_MMC_CLKI",	0x0fe,	0,	0,	0,	1) | ||||
| 
 | ||||
| /* Keypad GPIO*/ | ||||
| MUX_CFG_24XX("T19_24XX_KBR0",		0x106,	3,	1,	1,	1) | ||||
| MUX_CFG_24XX("R19_24XX_KBR1",		0x107,	3,	1,	1,	1) | ||||
|  |  | |||
|  | @ -19,6 +19,8 @@ | |||
| 
 | ||||
| #include "prcm-regs.h" | ||||
| 
 | ||||
| extern void omap2_clk_prepare_for_reboot(void); | ||||
| 
 | ||||
| u32 omap_prcm_get_reset_sources(void) | ||||
| { | ||||
| 	return RM_RSTST_WKUP & 0x7f; | ||||
|  | @ -28,12 +30,6 @@ EXPORT_SYMBOL(omap_prcm_get_reset_sources); | |||
| /* Resets clock rates and reboots the system. Only called from system.h */ | ||||
| void omap_prcm_arch_reset(char mode) | ||||
| { | ||||
| 	u32 rate; | ||||
| 	struct clk *vclk, *sclk; | ||||
| 
 | ||||
| 	vclk = clk_get(NULL, "virt_prcm_set"); | ||||
| 	sclk = clk_get(NULL, "sys_ck"); | ||||
| 	rate = clk_get_rate(sclk); | ||||
| 	clk_set_rate(vclk, rate);	/* go to bypass for OMAP limitation */ | ||||
| 	omap2_clk_prepare_for_reboot(); | ||||
| 	RM_RSTCTRL_WKUP |= 2; | ||||
| } | ||||
|  |  | |||
|  | @ -2,6 +2,13 @@ if ARCH_S3C2410 | |||
| 
 | ||||
| menu "S3C24XX Implementations" | ||||
| 
 | ||||
| config MACH_AML_M5900 | ||||
| 	bool "AML M5900 Series" | ||||
| 	select CPU_S3C2410 | ||||
| 	help | ||||
| 	   Say Y here if you are using the American Microsystems M5900 Series | ||||
|            <http://www.amltd.com> | ||||
| 
 | ||||
| config MACH_ANUBIS | ||||
| 	bool "Simtec Electronics ANUBIS" | ||||
| 	select CPU_S3C2440 | ||||
|  | @ -126,6 +133,12 @@ config MACH_NEXCODER_2440 | |||
| 	help | ||||
|  	  Say Y here if you are using the Nex Vision NEXCODER 2440 Light Board | ||||
| 
 | ||||
| config MACH_VSTMS | ||||
| 	bool "VMSTMS" | ||||
| 	select CPU_S3C2412 | ||||
| 	help | ||||
| 	  Say Y here if you are using an VSTMS board | ||||
| 
 | ||||
| endmenu | ||||
| 
 | ||||
| config S3C2410_CLOCK | ||||
|  | @ -133,10 +146,24 @@ config S3C2410_CLOCK | |||
| 	help | ||||
| 	  Clock code for the S3C2410, and similar processors | ||||
| 
 | ||||
| config S3C2410_PM | ||||
| 	bool | ||||
| 	depends on CONFIG_PM | ||||
| 	help | ||||
| 	  Power Management code common to S3C2410 and better | ||||
| 
 | ||||
| config CPU_S3C2410_DMA | ||||
| 	bool | ||||
| 	depends on S3C2410_DMA && (CPU_S3C2410 || CPU_S3C2442) | ||||
| 	default y if CPU_S3C2410 || CPU_S3C2442 | ||||
| 	help | ||||
| 	  DMA device selection for S3C2410 and compatible CPUs | ||||
| 
 | ||||
| config CPU_S3C2410 | ||||
| 	bool | ||||
| 	depends on ARCH_S3C2410 | ||||
| 	select S3C2410_CLOCK | ||||
| 	select S3C2410_PM | ||||
| 	help | ||||
| 	  Support for S3C2410 and S3C2410A family from the S3C24XX line | ||||
| 	  of Samsung Mobile CPUs. | ||||
|  | @ -149,6 +176,13 @@ config CPU_S3C2412_ONLY | |||
| 		   !CPU_S3C2440 && !CPU_S3C2442 && CPU_S3C2412 | ||||
| 	default y if CPU_S3C2412 | ||||
| 
 | ||||
| config S3C2412_PM | ||||
| 	bool | ||||
| 	default y if PM | ||||
| 	depends on CPU_S3C2412 | ||||
| 	help | ||||
| 	  Internal config node to apply S3C2412 power management | ||||
| 
 | ||||
| config CPU_S3C2412 | ||||
| 	bool | ||||
| 	depends on ARCH_S3C2410 | ||||
|  | @ -165,6 +199,7 @@ config CPU_S3C2440 | |||
| 	bool | ||||
| 	depends on ARCH_S3C2410 | ||||
| 	select S3C2410_CLOCK | ||||
| 	select S3C2410_PM | ||||
| 	select CPU_S3C244X | ||||
| 	help | ||||
| 	  Support for S3C2440 Samsung Mobile CPU based systems. | ||||
|  | @ -173,6 +208,7 @@ config CPU_S3C2442 | |||
| 	bool | ||||
| 	depends on ARCH_S3C2420 | ||||
| 	select S3C2410_CLOCK | ||||
| 	select S3C2410_PM | ||||
| 	select CPU_S3C244X | ||||
| 	help | ||||
| 	  Support for S3C2442 Samsung Mobile CPU based systems. | ||||
|  | @ -256,7 +292,7 @@ config S3C2410_PM_CHECK_CHUNKSIZE | |||
| 
 | ||||
| config PM_SIMTEC | ||||
| 	bool | ||||
| 	depends on PM && (ARCH_BAST || MACH_VR1000) | ||||
| 	depends on PM && (ARCH_BAST || MACH_VR1000 || MACH_AML_M5900) | ||||
| 	default y | ||||
| 
 | ||||
| config S3C2410_LOWLEVEL_UART_PORT | ||||
|  |  | |||
|  | @ -9,6 +9,8 @@ obj-y			:= cpu.o irq.o time.o gpio.o clock.o devs.o | |||
| obj-m			:= | ||||
| obj-n			:= | ||||
| obj-			:= | ||||
| obj-dma-y		:= | ||||
| obj-dma-n		:= | ||||
| 
 | ||||
| # DMA
 | ||||
| obj-$(CONFIG_S3C2410_DMA)	+= dma.o | ||||
|  | @ -20,6 +22,10 @@ obj-$(CONFIG_CPU_S3C2400)	+= s3c2400-gpio.o | |||
| 
 | ||||
| obj-$(CONFIG_CPU_S3C2410)	+= s3c2410.o | ||||
| obj-$(CONFIG_CPU_S3C2410)	+= s3c2410-gpio.o | ||||
| obj-$(CONFIG_CPU_S3C2410)	+= s3c2410-irq.o | ||||
| 
 | ||||
| obj-$(CONFIG_S3C2410_PM)	+= s3c2410-pm.o s3c2410-sleep.o | ||||
| obj-$(CONFIG_CPU_S3C2410_DMA)	+= s3c2410-dma.o | ||||
| 
 | ||||
| # Power Management support
 | ||||
| 
 | ||||
|  | @ -30,6 +36,9 @@ obj-$(CONFIG_PM_SIMTEC)		+= pm-simtec.o | |||
| obj-$(CONFIG_CPU_S3C2412)	+= s3c2412.o | ||||
| obj-$(CONFIG_CPU_S3C2412)	+= s3c2412-irq.o | ||||
| obj-$(CONFIG_CPU_S3C2412)	+= s3c2412-clock.o | ||||
| obj-dma-$(CONFIG_CPU_S3C2412)	+= s3c2412-dma.o | ||||
| 
 | ||||
| obj-$(CONFIG_S3C2412_PM)	+= s3c2412-pm.o | ||||
| 
 | ||||
| #
 | ||||
| # S3C244X support
 | ||||
|  | @ -47,6 +56,7 @@ obj-$(CONFIG_CPU_S3C2440)	+= s3c2440.o s3c2440-dsc.o | |||
| obj-$(CONFIG_CPU_S3C2440)	+= s3c2440-irq.o | ||||
| obj-$(CONFIG_CPU_S3C2440)	+= s3c2440-clock.o | ||||
| obj-$(CONFIG_CPU_S3C2440)	+= s3c2410-gpio.o | ||||
| obj-dma-$(CONFIG_CPU_S3C2440)	+= s3c2440-dma.o | ||||
| 
 | ||||
| # S3C2442 support
 | ||||
| 
 | ||||
|  | @ -57,8 +67,13 @@ obj-$(CONFIG_CPU_S3C2442)	+= s3c2442-clock.o | |||
| 
 | ||||
| obj-$(CONFIG_BAST_PC104_IRQ)	+= bast-irq.o | ||||
| 
 | ||||
| # merge in dma objects
 | ||||
| 
 | ||||
| obj-y				+= $(obj-dma-y) | ||||
| 
 | ||||
| # machine specific support
 | ||||
| 
 | ||||
| obj-$(CONFIG_MACH_AML_M5900)	+= mach-amlm5900.o | ||||
| obj-$(CONFIG_MACH_ANUBIS)	+= mach-anubis.o | ||||
| obj-$(CONFIG_MACH_OSIRIS)	+= mach-osiris.o | ||||
| obj-$(CONFIG_ARCH_BAST)		+= mach-bast.o usb-simtec.o | ||||
|  | @ -71,5 +86,6 @@ obj-$(CONFIG_MACH_VR1000)	+= mach-vr1000.o usb-simtec.o | |||
| obj-$(CONFIG_MACH_RX3715)	+= mach-rx3715.o | ||||
| obj-$(CONFIG_MACH_OTOM)		+= mach-otom.o | ||||
| obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o | ||||
| obj-$(CONFIG_MACH_VSTMS)	+= mach-vstms.o | ||||
| 
 | ||||
| obj-$(CONFIG_MACH_SMDK)		+= common-smdk.o | ||||
|  | @ -18,10 +18,6 @@ | |||
|  * 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 | ||||
|  * | ||||
|  * Modifications: | ||||
|  *     08-Jan-2003 BJD  Moved from central IRQ code | ||||
|  *     21-Aug-2005 BJD  Fixed missing code and compile errors | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -124,6 +124,15 @@ static struct cpu_table cpu_ids[] __initdata = { | |||
| 		.init		= s3c2412_init, | ||||
| 		.name		= name_s3c2412, | ||||
| 	}, | ||||
| 	{			/* a newer version of the s3c2412 */ | ||||
| 		.idcode		= 0x32412003, | ||||
| 		.idmask		= 0xffffffff, | ||||
| 		.map_io		= s3c2412_map_io, | ||||
| 		.init_clocks	= s3c2412_init_clocks, | ||||
| 		.init_uarts	= s3c2412_init_uarts, | ||||
| 		.init		= s3c2412_init, | ||||
| 		.name		= name_s3c2412, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.idcode		= 0x0,   /* S3C2400 doesn't have an idcode */ | ||||
| 		.idmask		= 0xffffffff, | ||||
|  |  | |||
|  | @ -8,11 +8,6 @@ | |||
|  * 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. | ||||
|  * | ||||
|  * Modifications: | ||||
|  *      18-Aug-2004 BJD  Created initial version | ||||
|  *	27-Aug-2004 BJD  Added timers 0 through 3 | ||||
|  *	10-Feb-2005 BJD	 Added camera from guillaume.gourat@nexvision.tv | ||||
| */ | ||||
| #include <linux/platform_device.h> | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,35 +1,16 @@ | |||
| /* linux/arch/arm/mach-bast/dma.c
 | ||||
| /* linux/arch/arm/mach-s3c2410/dma.c
 | ||||
|  * | ||||
|  * (c) 2003-2005 Simtec Electronics | ||||
|  * (c) 2003-2005,2006 Simtec Electronics | ||||
|  *	Ben Dooks <ben@simtec.co.uk> | ||||
|  * | ||||
|  * S3C2410 DMA core | ||||
|  * | ||||
|  * http://www.simtec.co.uk/products/EB2410ITX/
 | ||||
|  * http://armlinux.simtec.co.uk/
 | ||||
|  * | ||||
|  * 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. | ||||
|  * | ||||
|  * Changelog: | ||||
|  *  27-Feb-2005 BJD  Added kmem cache for dma descriptors | ||||
|  *  18-Nov-2004 BJD  Removed error for loading onto stopped channel | ||||
|  *  10-Nov-2004 BJD  Ensure all external symbols exported for modules | ||||
|  *  10-Nov-2004 BJD  Use sys_device and sysdev_class for power management | ||||
|  *  08-Aug-2004 BJD  Apply rmk's suggestions | ||||
|  *  21-Jul-2004 BJD  Ported to linux 2.6 | ||||
|  *  12-Jul-2004 BJD  Finished re-write and change of API | ||||
|  *  06-Jul-2004 BJD  Rewrote dma code to try and cope with various problems | ||||
|  *  23-May-2003 BJD  Created file | ||||
|  *  19-Aug-2003 BJD  Cleanup, header fix, added URL | ||||
|  * | ||||
|  * This file is based on the Sangwook Lee/Samsung patches, re-written due | ||||
|  * to various ommisions from the code (such as flexible dma configuration) | ||||
|  * for use with the BAST system board. | ||||
|  * | ||||
|  * The re-write is pretty much complete, and should be good enough for any | ||||
|  * possible DMA function | ||||
|  */ | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| #ifdef CONFIG_S3C2410_DMA_DEBUG | ||||
|  | @ -55,10 +36,14 @@ | |||
| #include <asm/mach/dma.h> | ||||
| #include <asm/arch/map.h> | ||||
| 
 | ||||
| #include "dma.h" | ||||
| 
 | ||||
| /* io map for dma */ | ||||
| static void __iomem *dma_base; | ||||
| static kmem_cache_t *dma_kmem; | ||||
| 
 | ||||
| struct s3c24xx_dma_selection dma_sel; | ||||
| 
 | ||||
| /* dma channel state information */ | ||||
| struct s3c2410_dma_chan s3c2410_chans[S3C2410_DMA_CHANNELS]; | ||||
| 
 | ||||
|  | @ -79,7 +64,6 @@ dma_wrreg(struct s3c2410_dma_chan *chan, int reg, unsigned long val) | |||
| 	pr_debug("writing %08x to register %08x\n",(unsigned int)val,reg); | ||||
| 	writel(val, dma_regaddr(chan, reg)); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #define dma_rdreg(chan, reg) readl((chan)->regs + (reg)) | ||||
|  | @ -151,12 +135,20 @@ dmadbg_showregs(const char *fname, int line, struct s3c2410_dma_chan *chan) | |||
| #define dbg_showchan(chan) do { } while(0) | ||||
| #endif /* CONFIG_S3C2410_DMA_DEBUG */ | ||||
| 
 | ||||
| #define check_channel(chan) \ | ||||
|   do { if ((chan) >= S3C2410_DMA_CHANNELS) { \ | ||||
|     printk(KERN_ERR "%s: invalid channel %d\n", __FUNCTION__, (chan)); \ | ||||
|     return -EINVAL; \ | ||||
|   } } while(0) | ||||
| static struct s3c2410_dma_chan *dma_chan_map[DMACH_MAX]; | ||||
| 
 | ||||
| /* lookup_dma_channel
 | ||||
|  * | ||||
|  * change the dma channel number given into a real dma channel id | ||||
| */ | ||||
| 
 | ||||
| static struct s3c2410_dma_chan *lookup_dma_channel(unsigned int channel) | ||||
| { | ||||
| 	if (channel & DMACH_LOW_LEVEL) | ||||
| 		return &s3c2410_chans[channel & ~DMACH_LOW_LEVEL]; | ||||
| 	else | ||||
| 		return dma_chan_map[channel]; | ||||
| } | ||||
| 
 | ||||
| /* s3c2410_dma_stats_timeout
 | ||||
|  * | ||||
|  | @ -321,8 +313,10 @@ static inline void | |||
| s3c2410_dma_buffdone(struct s3c2410_dma_chan *chan, struct s3c2410_dma_buf *buf, | ||||
| 		     enum s3c2410_dma_buffresult result) | ||||
| { | ||||
| #if 0 | ||||
| 	pr_debug("callback_fn=%p, buf=%p, id=%p, size=%d, result=%d\n", | ||||
| 		 chan->callback_fn, buf, buf->id, buf->size, result); | ||||
| #endif | ||||
| 
 | ||||
| 	if (chan->callback_fn != NULL) { | ||||
| 		(chan->callback_fn)(chan, buf->id, buf->size, result); | ||||
|  | @ -439,7 +433,6 @@ s3c2410_dma_canload(struct s3c2410_dma_chan *chan) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* s3c2410_dma_enqueue
 | ||||
|  * | ||||
|  * queue an given buffer for dma transfer. | ||||
|  | @ -460,11 +453,12 @@ s3c2410_dma_canload(struct s3c2410_dma_chan *chan) | |||
| int s3c2410_dma_enqueue(unsigned int channel, void *id, | ||||
| 			dma_addr_t data, int size) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 	struct s3c2410_dma_buf *buf; | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	pr_debug("%s: id=%p, data=%08x, size=%d\n", | ||||
| 		 __FUNCTION__, id, (unsigned int)data, size); | ||||
|  | @ -562,8 +556,10 @@ s3c2410_dma_freebuf(struct s3c2410_dma_buf *buf) | |||
| static inline void | ||||
| s3c2410_dma_lastxfer(struct s3c2410_dma_chan *chan) | ||||
| { | ||||
| #if 0 | ||||
| 	pr_debug("dma%d: s3c2410_dma_lastxfer: load_state %d\n", | ||||
| 		 chan->number, chan->load_state); | ||||
| #endif | ||||
| 
 | ||||
| 	switch (chan->load_state) { | ||||
| 	case S3C2410_DMALOAD_NONE: | ||||
|  | @ -718,7 +714,8 @@ s3c2410_dma_irq(int irq, void *devpw, struct pt_regs *regs) | |||
| 		if (chan->load_state == S3C2410_DMALOAD_NONE) { | ||||
| 			pr_debug("dma%d: end of transfer, stopping channel (%ld)\n", | ||||
| 				 chan->number, jiffies); | ||||
| 			s3c2410_dma_ctrl(chan->number, S3C2410_DMAOP_STOP); | ||||
| 			s3c2410_dma_ctrl(chan->number | DMACH_LOW_LEVEL, | ||||
| 					 S3C2410_DMAOP_STOP); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | @ -726,37 +723,34 @@ s3c2410_dma_irq(int irq, void *devpw, struct pt_regs *regs) | |||
| 	return IRQ_HANDLED; | ||||
| } | ||||
| 
 | ||||
| static struct s3c2410_dma_chan *s3c2410_dma_map_channel(int channel); | ||||
| 
 | ||||
| /* s3c2410_request_dma
 | ||||
|  * | ||||
|  * get control of an dma channel | ||||
| */ | ||||
| 
 | ||||
| int s3c2410_dma_request(unsigned int channel, struct s3c2410_dma_client *client, | ||||
| int s3c2410_dma_request(unsigned int channel, | ||||
| 			struct s3c2410_dma_client *client, | ||||
| 			void *dev) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan; | ||||
| 	unsigned long flags; | ||||
| 	int err; | ||||
| 
 | ||||
| 	pr_debug("dma%d: s3c2410_request_dma: client=%s, dev=%p\n", | ||||
| 		 channel, client->name, dev); | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 
 | ||||
| 	local_irq_save(flags); | ||||
| 
 | ||||
| 	dbg_showchan(chan); | ||||
| 
 | ||||
| 	if (chan->in_use) { | ||||
| 		if (client != chan->client) { | ||||
| 			printk(KERN_ERR "dma%d: already in use\n", channel); | ||||
| 			local_irq_restore(flags); | ||||
| 			return -EBUSY; | ||||
| 		} else { | ||||
| 			printk(KERN_ERR "dma%d: client already has channel\n", channel); | ||||
| 		} | ||||
| 	chan = s3c2410_dma_map_channel(channel); | ||||
| 	if (chan == NULL) { | ||||
| 		local_irq_restore(flags); | ||||
| 		return -EBUSY; | ||||
| 	} | ||||
| 
 | ||||
| 	dbg_showchan(chan); | ||||
| 
 | ||||
| 	chan->client = client; | ||||
| 	chan->in_use = 1; | ||||
| 
 | ||||
|  | @ -809,14 +803,14 @@ EXPORT_SYMBOL(s3c2410_dma_request); | |||
| 
 | ||||
| int s3c2410_dma_free(dmach_t channel, struct s3c2410_dma_client *client) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	local_irq_save(flags); | ||||
| 
 | ||||
| 
 | ||||
| 	if (chan->client != client) { | ||||
| 		printk(KERN_WARNING "dma%d: possible free from different client (channel %p, passed %p)\n", | ||||
| 		       channel, chan->client, client); | ||||
|  | @ -837,8 +831,12 @@ int s3c2410_dma_free(dmach_t channel, struct s3c2410_dma_client *client) | |||
| 
 | ||||
| 	if (chan->irq_claimed) | ||||
| 		free_irq(chan->irq, (void *)chan); | ||||
| 
 | ||||
| 	chan->irq_claimed = 0; | ||||
| 
 | ||||
| 	if (!(channel & DMACH_LOW_LEVEL)) | ||||
| 		dma_chan_map[channel] = NULL; | ||||
| 
 | ||||
| 	local_irq_restore(flags); | ||||
| 
 | ||||
| 	return 0; | ||||
|  | @ -848,8 +846,8 @@ EXPORT_SYMBOL(s3c2410_dma_free); | |||
| 
 | ||||
| static int s3c2410_dma_dostop(struct s3c2410_dma_chan *chan) | ||||
| { | ||||
| 	unsigned long tmp; | ||||
| 	unsigned long flags; | ||||
| 	unsigned long tmp; | ||||
| 
 | ||||
| 	pr_debug("%s:\n", __FUNCTION__); | ||||
| 
 | ||||
|  | @ -997,9 +995,10 @@ s3c2410_dma_started(struct s3c2410_dma_chan *chan) | |||
| int | ||||
| s3c2410_dma_ctrl(dmach_t channel, enum s3c2410_chan_op op) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	switch (op) { | ||||
| 	case S3C2410_DMAOP_START: | ||||
|  | @ -1046,12 +1045,19 @@ int s3c2410_dma_config(dmach_t channel, | |||
| 		       int xferunit, | ||||
| 		       int dcon) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 
 | ||||
| 	pr_debug("%s: chan=%d, xfer_unit=%d, dcon=%08x\n", | ||||
| 		 __FUNCTION__, channel, xferunit, dcon); | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	printk("Initial dcon is %08x\n", dcon); | ||||
| 
 | ||||
| 	dcon |= chan->dcon & dma_sel.dcon_mask; | ||||
| 
 | ||||
| 	printk("New dcon is %08x\n", dcon); | ||||
| 
 | ||||
| 	switch (xferunit) { | ||||
| 	case 1: | ||||
|  | @ -1086,9 +1092,10 @@ EXPORT_SYMBOL(s3c2410_dma_config); | |||
| 
 | ||||
| int s3c2410_dma_setflags(dmach_t channel, unsigned int flags) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	pr_debug("%s: chan=%p, flags=%08x\n", __FUNCTION__, chan, flags); | ||||
| 
 | ||||
|  | @ -1106,9 +1113,10 @@ EXPORT_SYMBOL(s3c2410_dma_setflags); | |||
| 
 | ||||
| int s3c2410_dma_set_opfn(dmach_t channel, s3c2410_dma_opfn_t rtn) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	pr_debug("%s: chan=%p, op rtn=%p\n", __FUNCTION__, chan, rtn); | ||||
| 
 | ||||
|  | @ -1121,9 +1129,10 @@ EXPORT_SYMBOL(s3c2410_dma_set_opfn); | |||
| 
 | ||||
| int s3c2410_dma_set_buffdone_fn(dmach_t channel, s3c2410_dma_cbfn_t rtn) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	pr_debug("%s: chan=%p, callback rtn=%p\n", __FUNCTION__, chan, rtn); | ||||
| 
 | ||||
|  | @ -1153,9 +1162,10 @@ int s3c2410_dma_devconfig(int channel, | |||
| 			  int hwcfg, | ||||
| 			  unsigned long devaddr) | ||||
| { | ||||
| 	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
| 	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 
 | ||||
| 	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	pr_debug("%s: source=%d, hwcfg=%08x, devaddr=%08lx\n", | ||||
| 		 __FUNCTION__, (int)source, hwcfg, devaddr); | ||||
|  | @ -1200,9 +1210,10 @@ EXPORT_SYMBOL(s3c2410_dma_devconfig); | |||
| 
 | ||||
| int s3c2410_dma_getposition(dmach_t channel, dma_addr_t *src, dma_addr_t *dst) | ||||
| { | ||||
|  	struct s3c2410_dma_chan *chan = &s3c2410_chans[channel]; | ||||
|  	struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); | ||||
| 
 | ||||
|  	check_channel(channel); | ||||
| 	if (chan == NULL) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	if (src != NULL) | ||||
|  		*src = dma_rdreg(chan, S3C2410_DMA_DCSRC); | ||||
|  | @ -1252,7 +1263,7 @@ static int s3c2410_dma_resume(struct sys_device *dev) | |||
| #define s3c2410_dma_resume  NULL | ||||
| #endif /* CONFIG_PM */ | ||||
| 
 | ||||
| static struct sysdev_class dma_sysclass = { | ||||
| struct sysdev_class dma_sysclass = { | ||||
| 	set_kset_name("s3c24xx-dma"), | ||||
| 	.suspend	= s3c2410_dma_suspend, | ||||
| 	.resume		= s3c2410_dma_resume, | ||||
|  | @ -1265,7 +1276,6 @@ static void s3c2410_dma_cache_ctor(void *p, kmem_cache_t *c, unsigned long f) | |||
| 	memset(p, 0, sizeof(struct s3c2410_dma_buf)); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* initialisation code */ | ||||
| 
 | ||||
| static int __init s3c2410_init_dma(void) | ||||
|  | @ -1274,7 +1284,7 @@ static int __init s3c2410_init_dma(void) | |||
| 	int channel; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	printk("S3C2410 DMA Driver, (c) 2003-2004 Simtec Electronics\n"); | ||||
| 	printk("S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics\n"); | ||||
| 
 | ||||
| 	dma_base = ioremap(S3C24XX_PA_DMA, 0x200); | ||||
| 	if (dma_base == NULL) { | ||||
|  | @ -1282,6 +1292,8 @@ static int __init s3c2410_init_dma(void) | |||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 
 | ||||
| 	printk("Registering sysclass\n"); | ||||
| 
 | ||||
| 	ret = sysdev_class_register(&dma_sysclass); | ||||
| 	if (ret != 0) { | ||||
| 		printk(KERN_ERR "dma sysclass registration failed\n"); | ||||
|  | @ -1335,4 +1347,95 @@ static int __init s3c2410_init_dma(void) | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| __initcall(s3c2410_init_dma); | ||||
| core_initcall(s3c2410_init_dma); | ||||
| 
 | ||||
| static inline int is_channel_valid(unsigned int channel) | ||||
| { | ||||
| 	return (channel & DMA_CH_VALID); | ||||
| } | ||||
| 
 | ||||
| /* s3c2410_dma_map_channel()
 | ||||
|  * | ||||
|  * turn the virtual channel number into a real, and un-used hardware | ||||
|  * channel. | ||||
|  * | ||||
|  * currently this code uses first-free channel from the specified harware | ||||
|  * map, not taking into account anything that the board setup code may | ||||
|  * have to say about the likely peripheral set to be in use. | ||||
| */ | ||||
| 
 | ||||
| struct s3c2410_dma_chan *s3c2410_dma_map_channel(int channel) | ||||
| { | ||||
| 	struct s3c24xx_dma_map *ch_map; | ||||
| 	struct s3c2410_dma_chan *dmach; | ||||
| 	int ch; | ||||
| 
 | ||||
| 	if (dma_sel.map == NULL || channel > dma_sel.map_size) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	ch_map = dma_sel.map + channel; | ||||
| 
 | ||||
| 	for (ch = 0; ch < S3C2410_DMA_CHANNELS; ch++) { | ||||
| 		if (!is_channel_valid(ch_map->channels[ch])) | ||||
| 			continue; | ||||
| 
 | ||||
| 		if (s3c2410_chans[ch].in_use == 0) { | ||||
| 			printk("mapped channel %d to %d\n", channel, ch); | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if (ch >= S3C2410_DMA_CHANNELS) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	/* update our channel mapping */ | ||||
| 
 | ||||
| 	dmach = &s3c2410_chans[ch]; | ||||
| 	dma_chan_map[channel] = dmach; | ||||
| 
 | ||||
| 	/* select the channel */ | ||||
| 
 | ||||
| 	(dma_sel.select)(dmach, ch_map); | ||||
| 
 | ||||
| 	return dmach; | ||||
| } | ||||
| 
 | ||||
| static void s3c24xx_dma_show_ch(struct s3c24xx_dma_map *map, int ch) | ||||
| { | ||||
| 	/* show the channel configuration */ | ||||
| 
 | ||||
| 	printk("%2d: %20s, channels %c%c%c%c\n", ch, map->name, | ||||
| 	       (is_channel_valid(map->channels[0]) ? '0' : '-'), | ||||
| 	       (is_channel_valid(map->channels[1]) ? '1' : '-'), | ||||
| 	       (is_channel_valid(map->channels[2]) ? '2' : '-'), | ||||
| 	       (is_channel_valid(map->channels[3]) ? '3' : '-')); | ||||
| } | ||||
| 
 | ||||
| static int s3c24xx_dma_check_entry(struct s3c24xx_dma_map *map, int ch) | ||||
| { | ||||
| 	if (1) | ||||
| 		s3c24xx_dma_show_ch(map, ch); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int __init s3c24xx_dma_init_map(struct s3c24xx_dma_selection *sel) | ||||
| { | ||||
| 	struct s3c24xx_dma_map *nmap; | ||||
| 	size_t map_sz = sizeof(*nmap) * sel->map_size; | ||||
| 	int ptr; | ||||
| 
 | ||||
| 	nmap = kmalloc(map_sz, GFP_KERNEL); | ||||
| 	if (nmap == NULL) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	memcpy(nmap, sel->map, map_sz); | ||||
| 	memcpy(&dma_sel, sel, sizeof(*sel)); | ||||
| 
 | ||||
| 	dma_sel.map = nmap; | ||||
| 
 | ||||
| 	for (ptr = 0; ptr < sel->map_size; ptr++) | ||||
| 		s3c24xx_dma_check_entry(nmap+ptr, ptr); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										45
									
								
								arch/arm/mach-s3c2410/dma.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								arch/arm/mach-s3c2410/dma.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | |||
| /* arch/arm/mach-s3c2410/dma.h
 | ||||
|  * | ||||
|  * Copyright (C) 2006 Simtec Electronics | ||||
|  *	Ben Dooks <ben@simtec.co.uk> | ||||
|  * | ||||
|  * Samsung S3C24XX DMA support | ||||
|  * | ||||
|  * 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. | ||||
| */ | ||||
| 
 | ||||
| extern struct sysdev_class dma_sysclass; | ||||
| extern struct s3c2410_dma_chan s3c2410_chans[S3C2410_DMA_CHANNELS]; | ||||
| 
 | ||||
| #define DMA_CH_VALID		(1<<31) | ||||
| 
 | ||||
| struct s3c24xx_dma_addr { | ||||
| 	unsigned long		from; | ||||
| 	unsigned long		to; | ||||
| }; | ||||
| 
 | ||||
| /* struct s3c24xx_dma_map
 | ||||
|  * | ||||
|  * this holds the mapping information for the channel selected | ||||
|  * to be connected to the specified device | ||||
| */ | ||||
| 
 | ||||
| struct s3c24xx_dma_map { | ||||
| 	const char		*name; | ||||
| 	struct s3c24xx_dma_addr  hw_addr; | ||||
| 
 | ||||
| 	unsigned long		 channels[S3C2410_DMA_CHANNELS]; | ||||
| }; | ||||
| 
 | ||||
| struct s3c24xx_dma_selection { | ||||
| 	struct s3c24xx_dma_map	*map; | ||||
| 	unsigned long		 map_size; | ||||
| 	unsigned long		 dcon_mask; | ||||
| 
 | ||||
| 	void	(*select)(struct s3c2410_dma_chan *chan, | ||||
| 			  struct s3c24xx_dma_map *map); | ||||
| }; | ||||
| 
 | ||||
| extern int s3c24xx_dma_init_map(struct s3c24xx_dma_selection *sel); | ||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Linus Torvalds
						Linus Torvalds