Hi Mark, Sorry for the review lag and the lack of attention to the da830 stuff. I've been focusing on getting DaVinci core code reworked and submitted upstream for the next merge window.
"Mark A. Greer" <mgr...@mvista.com> writes: > From: Mark A. Greer <mgr...@mvista.com> > > The da830/omap l137 is a new SoC from TI that is similar > to the davinci line. Since its so similar to davinci, > put the support for the da830 in the same directory as > the davinci code. > > There are differences, however. Some of those differences > prevent support for davinci and da830 platforms to work > in the same kernel binary. Those differences are: > > 1) Different physical address for RAM. This is relevant > to Makefile.boot addresses and PHYS_OFFSET. The > Makefile.boot issue isn't truly a kernel issue but > it means u-boot won't work with a uImage including > both architectures. The PHYS_OFFSET issue is > addressed by the "Allow for runtime-determined > PHYS_OFFSET" patch by Lennert Buytenhek but it > hasn't been accepted yet. > > 2) Different uart addresses. This is only an issue > for the assembly 'addruart' macro when CONFIG_DEBUG_LL > is enabled. Since the code in that macro is called > so early (e.g., by _error_p in kernel/head.S when > the processor lookup fails), we can't determine what > platform the kernel is running on at runtime to use > the correct uart address. > > These areas have (or will have) compile errors > intentionally inserted if both CONFIG_ARCH_DAVINCI_DMx > and CONFIG_ARCH_DAVINCI_DA830 are enabled at the same > time. There is also a check in mach-davinci/Kconfig > to prevent enabling both architectures concurrently. This comment should be updated as the Kconfig requirement has been removed as I requested in favor of just compile-time errors. > A new config variable, CONFIG_ARCH_DAVINCI_DMx, is > added to simply distinction between a true davinci > architecture and the da830 architecture. > > The da830 currently has an issue with writeback data > cache so CONFIG_CPU_DCACHE_WRITETHROUGH is forced on > when CONFIG_ARCH_DAVINCI_DA830 is enabled. > > Signed-off-by: Steve Chen <sc...@mvista.com> > Signed-off-by: Mark A. Greer <mgr...@mvista.com> In general, I'm not sure I follow the rationale for a new devices-da830.c. Things that are common should be done in devices.c using soc_info base abstractions. Things that are SoC specific could be done in <soc>.c More detailed comments inline below... [...] > diff --git a/arch/arm/mach-davinci/da830.c b/arch/arm/mach-davinci/da830.c > new file mode 100644 [...] > +void __init da830_init(void) > +{ > + davinci_common_init(&davinci_soc_info_da830); > +} > + > +#define DA830_KICK0_MAGIC 0x83e70b13 > +#define DA830_KICK1_MAGIC 0x95a4f1e0 > +#define DA830_KICK0 IO_ADDRESS(DA830_BOOT_CFG_BASE + 0x38) > +#define DA830_KICK1 IO_ADDRESS(DA830_BOOT_CFG_BASE + 0x3c) > + > +void da830_unlock_cfg_regs(void) > +{ > + __raw_writel(DA830_KICK0_MAGIC, DA830_KICK0); > + __raw_writel(DA830_KICK1_MAGIC, DA830_KICK1); > +} IIRC, you mention earlier that this is no longer required? I don't see any users of it. If not, please drop from hear and the header. > diff --git a/arch/arm/mach-davinci/devices-da830.c > b/arch/arm/mach-davinci/devices-da830.c > new file mode 100644 > index 0000000..26c1d0d > --- /dev/null > +++ b/arch/arm/mach-davinci/devices-da830.c > @@ -0,0 +1,532 @@ > +/* > + * DA830/OMAP L137 platform device data > + * > + * Copyright (c) 2007-2009, MontaVista Software, Inc. <sou...@mvista.com> > + * Derived from code that was: > + * Copyright (C) 2006 Komal Shah <komal_shah802...@yahoo.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/module.h> > +#include <linux/kernel.h> > +#include <linux/init.h> > +#include <linux/platform_device.h> > +#include <linux/dma-mapping.h> > +#include <linux/serial_8250.h> > + > +#include <mach/cpu.h> > +#include <mach/time.h> > +#include <mach/da830.h> > + > +#include "clock.h" > + > +#define DA830_TPCC_BASE 0x01C00000 > +#define DA830_TPTC0_BASE 0x01C08000 > +#define DA830_TPTC1_BASE 0x01C08400 > +#define DA830_I2C0_BASE 0x01C22000 > +#define DA830_RTC_BASE 0x01C23000 > +#define DA830_MMC_SD0_BASE 0x01C40000 > +#define DA830_SPI0_BASE 0x01C41000 > +#define DA830_USB0_CFG_BASE 0x01E00000 > +#define DA830_SPI1_BASE 0x01E12000 > +#define DA830_LCD_CNTRL_BASE 0x01E13000 > +#define DA830_EMAC_CPPI_PORT_BASE 0x01E20000 > +#define DA830_EMAC_CPGMACSS_BASE 0x01E22000 > +#define DA830_EMAC_CPGMAC_BASE 0x01E23000 > +#define DA830_EMAC_MDIO_BASE 0x01E24000 > +#define DA830_USB1_BASE 0x01E25000 > +#define DA830_GPIO_BASE 0x01E26000 > +#define DA830_I2C1_BASE 0x01E28000 > +#define DA830_EQEP0_BASE 0x01F09000 > +#define DA830_EQEP1_BASE 0x01F0A000 > + > +#define DA830_EMAC_CTRL_REG_OFFSET 0x3000 > +#define DA830_EMAC_MOD_REG_OFFSET 0x2000 > +#define DA830_EMAC_RAM_OFFSET 0x0000 > +#define DA830_MDIO_REG_OFFSET 0x4000 > +#define DA830_EMAC_CTRL_RAM_SIZE SZ_8K > + > +static struct plat_serial8250_port da830_serial_pdata[] = { > + { > + .mapbase = DA830_UART0_BASE, > + .irq = IRQ_DA830_UARTINT0, > + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | > + UPF_IOREMAP, > + .iotype = UPIO_MEM, > + .regshift = 2, > + }, > + { > + .mapbase = DA830_UART1_BASE, > + .irq = IRQ_DA830_UARTINT1, > + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | > + UPF_IOREMAP, > + .iotype = UPIO_MEM, > + .regshift = 2, > + }, > + { > + .mapbase = DA830_UART2_BASE, > + .irq = IRQ_DA830_UARTINT2, > + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | > + UPF_IOREMAP, > + .iotype = UPIO_MEM, > + .regshift = 2, > + }, > + { > + .flags = 0, > + }, > +}; > + > +struct platform_device da830_serial_device = { > + .name = "serial8250", > + .id = PLAT8250_DEV_PLATFORM, > + .dev = { > + .platform_data = da830_serial_pdata, > + }, > +}; This UART stuff should be done in da830.c just like the other <soc>.c files. > +static const s8 da830_dma_chan_no_event[] = { > + 20, 21, > + -1 > +}; > + > +static struct edma_soc_info da830_edma_info = { > + .n_channel = 32, > + .n_region = 4, > + .n_slot = 128, > + .n_tc = 2, > + .noevent = da830_dma_chan_no_event, > +}; > + > +static struct resource da830_edma_resources[] = { > + { > + .name = "edma_cc", > + .start = DA830_TPCC_BASE, > + .end = DA830_TPCC_BASE + SZ_32K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .name = "edma_tc0", > + .start = DA830_TPTC0_BASE, > + .end = DA830_TPTC0_BASE + SZ_1K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .name = "edma_tc1", > + .start = DA830_TPTC1_BASE, > + .end = DA830_TPTC1_BASE + SZ_1K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_TCERRINT0, > + .flags = IORESOURCE_IRQ, > + }, > + { > + .start = IRQ_DA830_CCERRINT, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device da830_edma_device = { > + .name = "edma", > + .id = -1, > + .dev = { > + .platform_data = &da830_edma_info, > + }, > + .num_resources = ARRAY_SIZE(da830_edma_resources), > + .resource = da830_edma_resources, > +}; ditto for EDMA... > +int da830_register_edma(void) > +{ > + return platform_device_register(&da830_edma_device); > +} Then this could be dropped and the platform_device_register just added to da830.c:da830_init(). > +static struct resource da830_i2c_resources0[] = { > + { > + .start = DA830_I2C0_BASE, > + .end = DA830_I2C0_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_I2CINT0, > + .end = IRQ_DA830_I2CINT0, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device da830_i2c_device0 = { > + .name = "i2c_davinci", > + .id = 1, > + .num_resources = ARRAY_SIZE(da830_i2c_resources0), > + .resource = da830_i2c_resources0, > +}; > + > +static struct resource da830_i2c_resources1[] = { > + { > + .start = DA830_I2C1_BASE, > + .end = DA830_I2C1_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_I2CINT1, > + .end = IRQ_DA830_I2CINT1, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device da830_i2c_device1 = { > + .name = "i2c_davinci", > + .id = 2, > + .num_resources = ARRAY_SIZE(da830_i2c_resources1), > + .resource = da830_i2c_resources1, > +}; > > +int da830_register_i2c(int instance, struct davinci_i2c_platform_data *pdata) > +{ > + struct platform_device *pdev; > + > + if (instance == 0) > + pdev = &da830_i2c_device0; > + else if (instance == 1) > + pdev = &da830_i2c_device1; > + else > + return -EINVAL; > + > + pdev->dev.platform_data = pdata; > + return platform_device_register(pdev); > +} How about adding i2c_bases to soc_info, then re-using devices.c for i2c setup. And for handling multiple instances, you can use the 'id' field of platform_device instead of an extra argument. > + > +static struct resource da830_spi_resources0[] = { > + { > + .start = DA830_SPI0_BASE, > + .end = DA830_SPI0_BASE + 0x1000 - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_SPINT0, > + .end = IRQ_DA830_SPINT0, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device da830_spi_device0 = { > + .name = "spi_davinci", > + .id = 0, > + .num_resources = ARRAY_SIZE(da830_spi_resources0), > + .resource = da830_spi_resources0, > +}; > + > +static struct resource da830_spi_resources1[] = { > + { > + .start = DA830_SPI1_BASE, > + .end = DA830_SPI1_BASE + 0x1000 - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_SPINT1, > + .end = IRQ_DA830_SPINT1, > + .flags = IORESOURCE_IRQ, > + }, > + { > + .start = DA830_DMACH_SPI1_RX, > + .end = DA830_DMACH_SPI1_RX, > + .flags = IORESOURCE_DMA, > + }, > + { > + .start = DA830_DMACH_SPI1_TX, > + .end = DA830_DMACH_SPI1_TX, > + .flags = IORESOURCE_DMA, > + }, > + { > + .start = EVENTQ_1, > + .end = EVENTQ_1, > + .flags = IORESOURCE_DMA, > + }, > +}; > + > +static struct platform_device da830_spi_device1 = { > + .name = "spi_davinci", > + .id = 1, > + .num_resources = ARRAY_SIZE(da830_spi_resources1), > + .resource = da830_spi_resources1, > +}; > + > +int da830_register_spi(int instance, struct davinci_i2c_platform_data *pdata) > +{ > + struct platform_device *pdev; > + > + if (instance == 0) > + pdev = &da830_spi_device0; > + else if (instance == 1) > + pdev = &da830_spi_device1; > + else > + return -EINVAL; > + > + pdev->dev.platform_data = pdata; > + return platform_device_register(pdev); > +} All this SPI data and init func should be in da830.c. See dm355 for example. > +static struct resource da830_watchdog_resources[] = { > + { > + .start = DA830_WDOG_BASE, > + .end = DA830_WDOG_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > +}; > + > +static struct platform_device da830_watchdog_device = { > + .name = "watchdog", > + .id = -1, > + .num_resources = ARRAY_SIZE(da830_watchdog_resources), > + .resource = da830_watchdog_resources, > +}; > + > +int da830_register_watchdog(void) > +{ > + return platform_device_register(&da830_watchdog_device); > +} This is duplicating setup already available in soc_info + devices.c. > +static struct resource da830_usb20_resources[] = { > + { > + .start = DA830_USB0_CFG_BASE, > + .end = DA830_USB0_CFG_BASE + SZ_64K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_USB_INT, > + .end = IRQ_DA830_USB_INT, > + .flags = IORESOURCE_IRQ, > + } > +}; > + > +static u64 da830_usb20_dma_mask = DMA_32BIT_MASK; > + > +static struct platform_device da830_usb20_device = { > + .name = "musb_hdrc", > + .id = -1, > + .dev = { > + .dma_mask = &da830_usb20_dma_mask, > + .coherent_dma_mask = DMA_32BIT_MASK, > + }, > + .num_resources = ARRAY_SIZE(da830_usb20_resources), > + .resource = da830_usb20_resources, > +}; > + > +int da830_register_usb20(struct musb_hdrc_platform_data *pdata) > +{ > + da830_usb20_device.dev.platform_data = pdata; > + return platform_device_register(&da830_usb20_device); > +} Any reason usb.c cannot be re-used for MUSB on da830? At first glance, adding an usb_otg_base and usb_usb_irq to soc_info would be needed then usb.c could be re-used. > + > +static struct resource da830_usb11_resources[] = { > + { > + .start = DA830_USB1_BASE, > + .end = DA830_USB1_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_IRQN, > + .end = IRQ_DA830_IRQN, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static u64 da830_usb11_dma_mask = ~(u32)0; > + > +static struct platform_device da830_usb11_device = { > + .name = "ohci", > + .id = 0, > + .dev = { > + .dma_mask = &da830_usb11_dma_mask, > + .coherent_dma_mask = 0xffffffff, > + }, > + .num_resources = ARRAY_SIZE(da830_usb11_resources), > + .resource = da830_usb11_resources, > +}; This OHCI init data should move to da830.c, but since it is never registered it should either be removed or registered in da830.c to avoid complier warnings about 'defined but not used'. Just curious... Is this known to work with the existing upstream ohci driver? Does it use ohci-omap? > +static struct resource da830_emac_resources[] = { > + { > + .start = DA830_EMAC_CPPI_PORT_BASE, > + .end = DA830_EMAC_CPPI_PORT_BASE + 0x5000 - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_C0_RX_THRESH_PULSE, > + .end = IRQ_DA830_C0_RX_THRESH_PULSE, > + .flags = IORESOURCE_IRQ, > + }, > + { > + .start = IRQ_DA830_C0_RX_PULSE, > + .end = IRQ_DA830_C0_RX_PULSE, > + .flags = IORESOURCE_IRQ, > + }, > + { > + .start = IRQ_DA830_C0_TX_PULSE, > + .end = IRQ_DA830_C0_TX_PULSE, > + .flags = IORESOURCE_IRQ, > + }, > + { > + .start = IRQ_DA830_C0_MISC_PULSE, > + .end = IRQ_DA830_C0_MISC_PULSE, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +struct emac_platform_data da830_emac_pdata = { > + .ctrl_reg_offset = DA830_EMAC_CTRL_REG_OFFSET, > + .ctrl_mod_reg_offset = DA830_EMAC_MOD_REG_OFFSET, > + .ctrl_ram_offset = DA830_EMAC_RAM_OFFSET, > + .mdio_reg_offset = DA830_MDIO_REG_OFFSET, > + .ctrl_ram_size = DA830_EMAC_CTRL_RAM_SIZE, > + .version = EMAC_VERSION_2, > +}; > + > +static struct platform_device da830_emac_device = { > + .name = "davinci_emac", > + .id = 1, > + .dev = { > + .platform_data = &da830_emac_pdata, > + }, > + .num_resources = ARRAY_SIZE(da830_emac_resources), > + .resource = da830_emac_resources, > +}; This should be moved to da830.c and the pdata made static. > +int da830_register_emac(void) > +{ > + return platform_device_register(&da830_emac_device); > +} And this can be done the <soc>.c init function as the other <soc>.c files are doing it. > +static struct resource da830_mmc_resources[] = { > + { > + .start = DA830_MMC_SD0_BASE, > + .end = DA830_MMC_SD0_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM > + }, > + { > + .start = IRQ_DA830_MMCSDINT0, > + .end = IRQ_DA830_MMCSDINT0, > + .flags = IORESOURCE_IRQ > + }, > + { > + .start = DA830_DMACH_MMCSD_RX, > + .end = DA830_DMACH_MMCSD_RX, > + .flags = IORESOURCE_DMA > + }, > + { > + .start = DA830_DMACH_MMCSD_TX, > + .end = DA830_DMACH_MMCSD_TX, > + .flags = IORESOURCE_DMA > + } > +}; > + > +static u64 da830_mmc_dma_mask = DMA_32BIT_MASK; This is now DMA_BIT_MASK(32) upstream. I've been fixing this in the existing code as it goes upstream. > +static struct platform_device da830_mmc_device = { > + .name = "davinci_mmc", > + .id = 0, > + .dev = { > + .dma_mask = &da830_mmc_dma_mask, > + .coherent_dma_mask = DMA_32BIT_MASK, > + }, > + .num_resources = ARRAY_SIZE(da830_mmc_resources), > + .resource = da830_mmc_resources, > +}; > + > +int da830_register_mmc(struct davinci_mmc_config *pdata) > +{ > + da830_mmc_device.dev.platform_data = pdata; > + return platform_device_register(&da830_mmc_device); > +} Again for MMC, we're re-using the same driver with differences in bases and interrupts. Another good case for extending soc_info. > +static struct resource da830_rtc_resources[] = { > + { > + .start = DA830_RTC_BASE, > + .end = DA830_RTC_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_RTC, > + .end = IRQ_DA830_RTC, > + .flags = IORESOURCE_IRQ, > + }, > + { > + .start = IRQ_DA830_RTC, > + .end = IRQ_DA830_RTC, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device da830_rtc_device = { > + .name = "omap_rtc", > + .id = 0, > + .num_resources = ARRAY_SIZE(da830_rtc_resources), > + .resource = da830_rtc_resources, > +}; > + > +int da830_register_rtc(void) > +{ > + return platform_device_register(&da830_rtc_device); > +} This should go do da830.c. > +static struct resource da830_eqep_resources0[] = { > + { > + .start = DA830_EQEP0_BASE, > + .end = DA830_EQEP0_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_EQEP0, > + .end = IRQ_DA830_EQEP0, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device da830_eqep_device0 = { > + .name = "eqep", > + .id = 0, > + .num_resources = ARRAY_SIZE(da830_eqep_resources0), > + .resource = da830_eqep_resources0, > +}; > + > +static struct resource da830_eqep_resources1[] = { > + { > + .start = DA830_EQEP1_BASE, > + .end = DA830_EQEP1_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_EQEP1, > + .end = IRQ_DA830_EQEP1, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device da830_eqep_device1 = { > + .name = "eqep", > + .id = 1, > + .num_resources = ARRAY_SIZE(da830_eqep_resources1), > + .resource = da830_eqep_resources1, > +}; Since these are never getting registered and result in 'defined but not used' compiler warnings. They probabably be dropped for now and added back along with the driver itself. > +static struct resource da830_lcdc_resources[] = { > + { > + .start = DA830_LCD_CNTRL_BASE, > + .end = DA830_LCD_CNTRL_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_DA830_LCDINT, > + .end = IRQ_DA830_LCDINT, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device da830_lcdc_device = { > + .name = "da830_lcdc", > + .id = 0, > + .num_resources = ARRAY_SIZE(da830_lcdc_resources), > + .resource = da830_lcdc_resources, > +}; ditto. > diff --git a/arch/arm/mach-davinci/include/mach/cpu.h > b/arch/arm/mach-davinci/include/mach/cpu.h > index 92c8dec..92b037e 100644 > --- a/arch/arm/mach-davinci/include/mach/cpu.h > +++ b/arch/arm/mach-davinci/include/mach/cpu.h > @@ -30,6 +30,7 @@ struct davinci_id { > #define DAVINCI_CPU_ID_DM6446 0x64460000 > #define DAVINCI_CPU_ID_DM6467 0x64670000 > #define DAVINCI_CPU_ID_DM355 0x03550000 > +#define DAVINCI_CPU_ID_DA830 0x08300000 > > #define IS_DAVINCI_CPU(type, id) \ > static inline int is_davinci_ ##type(void) \ > @@ -41,6 +42,7 @@ static inline int is_davinci_ ##type(void) > \ > IS_DAVINCI_CPU(dm644x, DAVINCI_CPU_ID_DM6446) > IS_DAVINCI_CPU(dm646x, DAVINCI_CPU_ID_DM6467) > IS_DAVINCI_CPU(dm355, DAVINCI_CPU_ID_DM355) > +IS_DAVINCI_CPU(da830, DAVINCI_CPU_ID_DA830) > > #ifdef CONFIG_ARCH_DAVINCI_DM644x > #define cpu_is_davinci_dm644x() is_davinci_dm644x() > @@ -60,4 +62,10 @@ IS_DAVINCI_CPU(dm355, DAVINCI_CPU_ID_DM355) > #define cpu_is_davinci_dm355() 0 > #endif > > +#ifdef CONFIG_ARCH_DAVINCI_DA830 > +#define cpu_is_davinci_da830() is_davinci_da830() > +#else > +#define cpu_is_davinci_da830() 0 > +#endif > + > #endif > diff --git a/arch/arm/mach-davinci/include/mach/da830.h > b/arch/arm/mach-davinci/include/mach/da830.h > new file mode 100644 > index 0000000..ab582d1 > --- /dev/null > +++ b/arch/arm/mach-davinci/include/mach/da830.h > @@ -0,0 +1,51 @@ > +/* > + * Chip specific defines for DA830/OMAP L137 SoC > + * > + * Author: Mark A. Greer <mgr...@mvista.com> > + * > + * 2007, 2009 (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. > + */ > +#ifndef __ASM_ARCH_DAVINCI_DA830_H > +#define __ASM_ARCH_DAVINCI_DA830_H > + > +#include <linux/usb/musb.h> > + > +#include <mach/serial.h> > +#include <mach/edma.h> > +#include <mach/i2c.h> > +#include <mach/emac.h> > +#include <mach/mmc.h> > + > +/* > + * The cp_intc interrupt controller for the da830 isn't in the same > + * chunk of physical memory space as the other registers (like it is > + * on the davincis) so it needs to be mapped separately. It will be > + * mapped early on when the I/O space is mapped and we'll put it just > + * before the I/O space in the processor's virtual memory space. > + */ > +#define DA830_ARM_INTC_BASE 0xfffee000 Minor nit: should this be named ..CPINTC_BASE? > +#define DA830_CP_INTC_SIZE SZ_8K > +#define DA830_CP_INTC_VIRT (IO_VIRT - DA830_CP_INTC_SIZE - SZ_4K) > + > +#define DA830_BOOT_CFG_BASE (IO_PHYS + 0x14000) > + > +void __init da830_init(void); > +void da830_unlock_cfg_regs(void); > > +int da830_register_edma(void); > +int da830_register_i2c(int instance, struct davinci_i2c_platform_data > *pdata); > +int da830_register_spi(int instance, struct davinci_i2c_platform_data > *pdata); > +int da830_register_watchdog(void); > +int da830_register_usb20(struct musb_hdrc_platform_data *pdata); > +int da830_register_emac(void); > +int da830_register_mmc(struct davinci_mmc_config *pdata); > +int da830_register_rtc(void); Only the register/init functions used in board code need to be here. With many of these moving into da830.c, they could be dropped here too. > + > +extern struct platform_device da830_serial_device; > +extern struct emac_platform_data da830_emac_pdata; > + > +#endif /* __ASM_ARCH_DAVINCI_DA830_H */ > diff --git a/arch/arm/mach-davinci/include/mach/edma.h > b/arch/arm/mach-davinci/include/mach/edma.h > index b467358..a6ccd2c 100644 > --- a/arch/arm/mach-davinci/include/mach/edma.h > +++ b/arch/arm/mach-davinci/include/mach/edma.h > @@ -140,6 +140,54 @@ struct edmacc_param { > #define DAVINCI_DMA_PWM1 53 > #define DAVINCI_DMA_PWM2 54 > > +/* DA830 specific EDMA3 information */ > +#define EDMA_DA830_NUM_DMACH 32 > +#define EDMA_DA830_NUM_TCC 32 > +#define EDMA_DA830_NUM_PARAMENTRY 128 > +#define EDMA_DA830_NUM_EVQUE 2 > +#define EDMA_DA830_NUM_TC 2 > +#define EDMA_DA830_CHMAP_EXIST 0 > +#define EDMA_DA830_NUM_REGIONS 4 > +#define DA830_DMACH2EVENT_MAP0 0x000FC03Fu > +#define DA830_DMACH2EVENT_MAP1 0x00000000u > +#define DA830_EDMA_ARM_OWN 0x30FFCCFFu > + > +/* DA830 specific EDMA3 Events Information */ > +enum DA830_edma_ch { > + DA830_DMACH_MCASP0_RX, > + DA830_DMACH_MCASP0_TX, > + DA830_DMACH_MCASP1_RX, > + DA830_DMACH_MCASP1_TX, > + DA830_DMACH_MCASP2_RX, > + DA830_DMACH_MCASP2_TX, > + DA830_DMACH_GPIO_BNK0INT, > + DA830_DMACH_GPIO_BNK1INT, > + DA830_DMACH_UART0_RX, > + DA830_DMACH_UART0_TX, > + DA830_DMACH_TMR64P0_EVTOUT12, > + DA830_DMACH_TMR64P0_EVTOUT34, > + DA830_DMACH_UART1_RX, > + DA830_DMACH_UART1_TX, > + DA830_DMACH_SPI0_RX, > + DA830_DMACH_SPI0_TX, > + DA830_DMACH_MMCSD_RX, > + DA830_DMACH_MMCSD_TX, > + DA830_DMACH_SPI1_RX, > + DA830_DMACH_SPI1_TX, > + DA830_DMACH_DMAX_EVTOUT6, > + DA830_DMACH_DMAX_EVTOUT7, > + DA830_DMACH_GPIO_BNK2INT, > + DA830_DMACH_GPIO_BNK3INT, > + DA830_DMACH_I2C0_RX, > + DA830_DMACH_I2C0_TX, > + DA830_DMACH_I2C1_RX, > + DA830_DMACH_I2C1_TX, > + DA830_DMACH_GPIO_BNK4INT, > + DA830_DMACH_GPIO_BNK5INT, > + DA830_DMACH_UART2_RX, > + DA830_DMACH_UART2_TX > +}; > + > /*ch_status paramater of callback function possible values*/ > #define DMA_COMPLETE 1 > #define DMA_CC_ERROR 2 > diff --git a/arch/arm/mach-davinci/include/mach/irqs.h > b/arch/arm/mach-davinci/include/mach/irqs.h > index bc5d6aa..81f4be8 100644 > --- a/arch/arm/mach-davinci/include/mach/irqs.h > +++ b/arch/arm/mach-davinci/include/mach/irqs.h > @@ -99,9 +99,6 @@ > #define IRQ_EMUINT 63 > > #define DAVINCI_N_AINTC_IRQ 64 > -#define DAVINCI_N_GPIO 104 > - > -#define NR_IRQS (DAVINCI_N_AINTC_IRQ + DAVINCI_N_GPIO) > > #define ARCH_TIMER_IRQ IRQ_TINT1_TINT34 > > @@ -206,4 +203,108 @@ > #define IRQ_DM355_GPIOBNK5 59 > #define IRQ_DM355_GPIOBNK6 60 > > +/* DA830 interrupts */ > +#define IRQ_DA830_COMMTX 0 > +#define IRQ_DA830_COMMRX 1 > +#define IRQ_DA830_NINT 2 > +#define IRQ_DA830_EVTOUT0 3 > +#define IRQ_DA830_EVTOUT1 4 > +#define IRQ_DA830_EVTOUT2 5 > +#define IRQ_DA830_EVTOUT3 6 > +#define IRQ_DA830_EVTOUT4 7 > +#define IRQ_DA830_EVTOUT5 8 > +#define IRQ_DA830_EVTOUT6 9 > +#define IRQ_DA830_EVTOUT7 10 > +#define IRQ_DA830_CCINT0 11 > +#define IRQ_DA830_CCERRINT 12 > +#define IRQ_DA830_TCERRINT0 13 > +#define IRQ_DA830_AEMIFINT 14 > +#define IRQ_DA830_I2CINT0 15 > +#define IRQ_DA830_MMCSDINT0 16 > +#define IRQ_DA830_MMCSDINT1 17 > +#define IRQ_DA830_ALLINT0 18 > +#define IRQ_DA830_RTC 19 > +#define IRQ_DA830_SPINT0 20 > +#define IRQ_DA830_TINT12_0 21 > +#define IRQ_DA830_TINT34_0 22 > +#define IRQ_DA830_TINT12_1 23 > +#define IRQ_DA830_TINT34_1 24 > +#define IRQ_DA830_UARTINT0 25 > +#define IRQ_DA830_KEYMGRINT 26 > +#define IRQ_DA830_SECINT 26 > +#define IRQ_DA830_SECKEYERR 26 > +#define IRQ_DA830_MPUERR 27 > +#define IRQ_DA830_IOPUERR 27 > +#define IRQ_DA830_BOOTCFGERR 27 > +#define IRQ_DA830_CHIPINT0 28 > +#define IRQ_DA830_CHIPINT1 29 > +#define IRQ_DA830_CHIPINT2 30 > +#define IRQ_DA830_CHIPINT3 31 > +#define IRQ_DA830_TCERRINT1 32 > +#define IRQ_DA830_C0_RX_THRESH_PULSE 33 > +#define IRQ_DA830_C0_RX_PULSE 34 > +#define IRQ_DA830_C0_TX_PULSE 35 > +#define IRQ_DA830_C0_MISC_PULSE 36 > +#define IRQ_DA830_C1_RX_THRESH_PULSE 37 > +#define IRQ_DA830_C1_RX_PULSE 38 > +#define IRQ_DA830_C1_TX_PULSE 39 > +#define IRQ_DA830_C1_MISC_PULSE 40 > +#define IRQ_DA830_MEMERR 41 > +#define IRQ_DA830_GPIO0 42 > +#define IRQ_DA830_GPIO1 43 > +#define IRQ_DA830_GPIO2 44 > +#define IRQ_DA830_GPIO3 45 > +#define IRQ_DA830_GPIO4 46 > +#define IRQ_DA830_GPIO5 47 > +#define IRQ_DA830_GPIO6 48 > +#define IRQ_DA830_GPIO7 49 > +#define IRQ_DA830_GPIO8 50 > +#define IRQ_DA830_I2CINT1 51 > +#define IRQ_DA830_LCDINT 52 > +#define IRQ_DA830_UARTINT1 53 > +#define IRQ_DA830_MCASPINT 54 > +#define IRQ_DA830_ALLINT1 55 > +#define IRQ_DA830_SPINT1 56 > +#define IRQ_DA830_UHPI_INT1 57 > +#define IRQ_DA830_USB_INT 58 > +#define IRQ_DA830_IRQN 59 > +#define IRQ_DA830_RWAKEUP 60 > +#define IRQ_DA830_UARTINT2 61 > +#define IRQ_DA830_DFTSSINT 62 > +#define IRQ_DA830_EHRPWM0 63 > +#define IRQ_DA830_EHRPWM0TZ 64 > +#define IRQ_DA830_EHRPWM1 65 > +#define IRQ_DA830_EHRPWM1TZ 66 > +#define IRQ_DA830_EHRPWM2 67 > +#define IRQ_DA830_EHRPWM2TZ 68 > +#define IRQ_DA830_ECAP0 69 > +#define IRQ_DA830_ECAP1 70 > +#define IRQ_DA830_ECAP2 71 > +#define IRQ_DA830_EQEP0 72 > +#define IRQ_DA830_EQEP1 73 > +#define IRQ_DA830_T12CMPINT0_0 74 > +#define IRQ_DA830_T12CMPINT1_0 75 > +#define IRQ_DA830_T12CMPINT2_0 76 > +#define IRQ_DA830_T12CMPINT3_0 77 > +#define IRQ_DA830_T12CMPINT4_0 78 > +#define IRQ_DA830_T12CMPINT5_0 79 > +#define IRQ_DA830_T12CMPINT6_0 80 > +#define IRQ_DA830_T12CMPINT7_0 81 > +#define IRQ_DA830_T12CMPINT0_1 82 > +#define IRQ_DA830_T12CMPINT1_1 83 > +#define IRQ_DA830_T12CMPINT2_1 84 > +#define IRQ_DA830_T12CMPINT3_1 85 > +#define IRQ_DA830_T12CMPINT4_1 86 > +#define IRQ_DA830_T12CMPINT5_1 87 > +#define IRQ_DA830_T12CMPINT6_1 88 > +#define IRQ_DA830_T12CMPINT7_1 89 > +#define IRQ_DA830_ARMCLKSTOPREQ 90 > + > +#define DA830_N_CP_INTC_IRQ 96 > + > +/* da830 currently has the most gpio pins (128) */ > +#define DAVINCI_N_GPIO 128 > +/* da830 currently has the most irqs so use DA830_N_CP_INTC_IRQ */ > +#define NR_IRQS (DA830_N_CP_INTC_IRQ + > DAVINCI_N_GPIO) > + > #endif /* __ASM_ARCH_IRQS_H */ > diff --git a/arch/arm/mach-davinci/include/mach/memory.h > b/arch/arm/mach-davinci/include/mach/memory.h > index 86c25c7..9221632 100644 > --- a/arch/arm/mach-davinci/include/mach/memory.h > +++ b/arch/arm/mach-davinci/include/mach/memory.h > @@ -20,10 +20,17 @@ > /************************************************************************** > * Definitions > **************************************************************************/ > -#define DAVINCI_DDR_BASE 0x80000000 > -#define DAVINCI_IRAM_BASE 0x00008000 /* ARM Internal RAM */ > +#define DAVINCI_DDR_BASE 0x80000000 > +#define DA830_DDR_BASE 0xc0000000 > +#define DAVINCI_IRAM_BASE 0x00008000 /* ARM Internal RAM */ > > +#if defined(CONFIG_ARCH_DAVINCI_DA830) && defined(CONFIG_ARCH_DAVINCI_DMx) > +#error Cannot enable DaVinci and DA830 platforms concurrently > +#elif defined(CONFIG_ARCH_DAVINCI_DA830) > +#define PHYS_OFFSET DA830_DDR_BASE > +#else > #define PHYS_OFFSET DAVINCI_DDR_BASE > +#endif > > /* > * Increase size of DMA-consistent memory region > diff --git a/arch/arm/mach-davinci/include/mach/mux.h > b/arch/arm/mach-davinci/include/mach/mux.h > index 018701f..7b65473 100644 > --- a/arch/arm/mach-davinci/include/mach/mux.h > +++ b/arch/arm/mach-davinci/include/mach/mux.h > @@ -156,6 +156,410 @@ enum davinci_dm355_index { > DM355_EVT26_MMC0_RX, > }; > > +enum da830_index { > + DA830_GPIO7_14, > + DA830_RTCK, > + DA830_GPIO7_15, > + DA830_EMU_0, > + DA830_EMB_SDCKE, > + DA830_EMB_CLK_GLUE, > + DA830_EMB_CLK, > + DA830_NEMB_CS_0, > + DA830_NEMB_CAS, > + DA830_NEMB_RAS, > + DA830_NEMB_WE, > + DA830_EMB_BA_1, > + DA830_EMB_BA_0, > + DA830_EMB_A_0, > + DA830_EMB_A_1, > + DA830_EMB_A_2, > + DA830_EMB_A_3, > + DA830_EMB_A_4, > + DA830_EMB_A_5, > + DA830_GPIO7_0, > + DA830_GPIO7_1, > + DA830_GPIO7_2, > + DA830_GPIO7_3, > + DA830_GPIO7_4, > + DA830_GPIO7_5, > + DA830_GPIO7_6, > + DA830_GPIO7_7, > + DA830_EMB_A_6, > + DA830_EMB_A_7, > + DA830_EMB_A_8, > + DA830_EMB_A_9, > + DA830_EMB_A_10, > + DA830_EMB_A_11, > + DA830_EMB_A_12, > + DA830_EMB_D_31, > + DA830_GPIO7_8, > + DA830_GPIO7_9, > + DA830_GPIO7_10, > + DA830_GPIO7_11, > + DA830_GPIO7_12, > + DA830_GPIO7_13, > + DA830_GPIO3_13, > + DA830_EMB_D_30, > + DA830_EMB_D_29, > + DA830_EMB_D_28, > + DA830_EMB_D_27, > + DA830_EMB_D_26, > + DA830_EMB_D_25, > + DA830_EMB_D_24, > + DA830_EMB_D_23, > + DA830_EMB_D_22, > + DA830_EMB_D_21, > + DA830_EMB_D_20, > + DA830_EMB_D_19, > + DA830_EMB_D_18, > + DA830_EMB_D_17, > + DA830_EMB_D_16, > + DA830_NEMB_WE_DQM_3, > + DA830_NEMB_WE_DQM_2, > + DA830_EMB_D_0, > + DA830_EMB_D_1, > + DA830_EMB_D_2, > + DA830_EMB_D_3, > + DA830_EMB_D_4, > + DA830_EMB_D_5, > + DA830_EMB_D_6, > + DA830_GPIO6_0, > + DA830_GPIO6_1, > + DA830_GPIO6_2, > + DA830_GPIO6_3, > + DA830_GPIO6_4, > + DA830_GPIO6_5, > + DA830_GPIO6_6, > + DA830_EMB_D_7, > + DA830_EMB_D_8, > + DA830_EMB_D_9, > + DA830_EMB_D_10, > + DA830_EMB_D_11, > + DA830_EMB_D_12, > + DA830_EMB_D_13, > + DA830_EMB_D_14, > + DA830_GPIO6_7, > + DA830_GPIO6_8, > + DA830_GPIO6_9, > + DA830_GPIO6_10, > + DA830_GPIO6_11, > + DA830_GPIO6_12, > + DA830_GPIO6_13, > + DA830_GPIO6_14, > + DA830_EMB_D_15, > + DA830_NEMB_WE_DQM_1, > + DA830_NEMB_WE_DQM_0, > + DA830_SPI0_SOMI_0, > + DA830_SPI0_SIMO_0, > + DA830_SPI0_CLK, > + DA830_NSPI0_ENA, > + DA830_NSPI0_SCS_0, > + DA830_EQEP0I, > + DA830_EQEP0S, > + DA830_EQEP1I, > + DA830_NUART0_CTS, > + DA830_NUART0_RTS, > + DA830_EQEP0A, > + DA830_EQEP0B, > + DA830_GPIO6_15, > + DA830_GPIO5_14, > + DA830_GPIO5_15, > + DA830_GPIO5_0, > + DA830_GPIO5_1, > + DA830_GPIO5_2, > + DA830_GPIO5_3, > + DA830_GPIO5_4, > + DA830_SPI1_SOMI_0, > + DA830_SPI1_SIMO_0, > + DA830_SPI1_CLK, > + DA830_UART0_RXD, > + DA830_UART0_TXD, > + DA830_AXR1_10, > + DA830_AXR1_11, > + DA830_NSPI1_ENA, > + DA830_I2C1_SCL, > + DA830_I2C1_SDA, > + DA830_EQEP1S, > + DA830_I2C0_SDA, > + DA830_I2C0_SCL, > + DA830_UART2_RXD, > + DA830_TM64P0_IN12, > + DA830_TM64P0_OUT12, > + DA830_GPIO5_5, > + DA830_GPIO5_6, > + DA830_GPIO5_7, > + DA830_GPIO5_8, > + DA830_GPIO5_9, > + DA830_GPIO5_10, > + DA830_GPIO5_11, > + DA830_GPIO5_12, > + DA830_NSPI1_SCS_0, > + DA830_USB0_DRVVBUS, > + DA830_AHCLKX0, > + DA830_ACLKX0, > + DA830_AFSX0, > + DA830_AHCLKR0, > + DA830_ACLKR0, > + DA830_AFSR0, > + DA830_UART2_TXD, > + DA830_AHCLKX2, > + DA830_ECAP0_APWM0, > + DA830_RMII_MHZ_50_CLK, > + DA830_ECAP1_APWM1, > + DA830_USB_REFCLKIN, > + DA830_GPIO5_13, > + DA830_GPIO4_15, > + DA830_GPIO2_11, > + DA830_GPIO2_12, > + DA830_GPIO2_13, > + DA830_GPIO2_14, > + DA830_GPIO2_15, > + DA830_GPIO3_12, > + DA830_AMUTE0, > + DA830_AXR0_0, > + DA830_AXR0_1, > + DA830_AXR0_2, > + DA830_AXR0_3, > + DA830_AXR0_4, > + DA830_AXR0_5, > + DA830_AXR0_6, > + DA830_RMII_TXD_0, > + DA830_RMII_TXD_1, > + DA830_RMII_TXEN, > + DA830_RMII_CRS_DV, > + DA830_RMII_RXD_0, > + DA830_RMII_RXD_1, > + DA830_RMII_RXER, > + DA830_AFSR2, > + DA830_ACLKX2, > + DA830_AXR2_3, > + DA830_AXR2_2, > + DA830_AXR2_1, > + DA830_AFSX2, > + DA830_ACLKR2, > + DA830_NRESETOUT, > + DA830_GPIO3_0, > + DA830_GPIO3_1, > + DA830_GPIO3_2, > + DA830_GPIO3_3, > + DA830_GPIO3_4, > + DA830_GPIO3_5, > + DA830_GPIO3_6, > + DA830_AXR0_7, > + DA830_AXR0_8, > + DA830_UART1_RXD, > + DA830_UART1_TXD, > + DA830_AXR0_11, > + DA830_AHCLKX1, > + DA830_ACLKX1, > + DA830_AFSX1, > + DA830_MDIO_CLK, > + DA830_MDIO_D, > + DA830_AXR0_9, > + DA830_AXR0_10, > + DA830_EPWM0B, > + DA830_EPWM0A, > + DA830_EPWMSYNCI, > + DA830_AXR2_0, > + DA830_EPWMSYNC0, > + DA830_GPIO3_7, > + DA830_GPIO3_8, > + DA830_GPIO3_9, > + DA830_GPIO3_10, > + DA830_GPIO3_11, > + DA830_GPIO3_14, > + DA830_GPIO3_15, > + DA830_GPIO4_10, > + DA830_AHCLKR1, > + DA830_ACLKR1, > + DA830_AFSR1, > + DA830_AMUTE1, > + DA830_AXR1_0, > + DA830_AXR1_1, > + DA830_AXR1_2, > + DA830_AXR1_3, > + DA830_ECAP2_APWM2, > + DA830_EHRPWMGLUETZ, > + DA830_EQEP1A, > + DA830_GPIO4_11, > + DA830_GPIO4_12, > + DA830_GPIO4_13, > + DA830_GPIO4_14, > + DA830_GPIO4_0, > + DA830_GPIO4_1, > + DA830_GPIO4_2, > + DA830_GPIO4_3, > + DA830_AXR1_4, > + DA830_AXR1_5, > + DA830_AXR1_6, > + DA830_AXR1_7, > + DA830_AXR1_8, > + DA830_AXR1_9, > + DA830_EMA_D_0, > + DA830_EMA_D_1, > + DA830_EQEP1B, > + DA830_EPWM2B, > + DA830_EPWM2A, > + DA830_EPWM1B, > + DA830_EPWM1A, > + DA830_MMCSD_DAT_0, > + DA830_MMCSD_DAT_1, > + DA830_UHPI_HD_0, > + DA830_UHPI_HD_1, > + DA830_GPIO4_4, > + DA830_GPIO4_5, > + DA830_GPIO4_6, > + DA830_GPIO4_7, > + DA830_GPIO4_8, > + DA830_GPIO4_9, > + DA830_GPIO0_0, > + DA830_GPIO0_1, > + DA830_EMA_D_2, > + DA830_EMA_D_3, > + DA830_EMA_D_4, > + DA830_EMA_D_5, > + DA830_EMA_D_6, > + DA830_EMA_D_7, > + DA830_EMA_D_8, > + DA830_EMA_D_9, > + DA830_MMCSD_DAT_2, > + DA830_MMCSD_DAT_3, > + DA830_MMCSD_DAT_4, > + DA830_MMCSD_DAT_5, > + DA830_MMCSD_DAT_6, > + DA830_MMCSD_DAT_7, > + DA830_UHPI_HD_8, > + DA830_UHPI_HD_9, > + DA830_UHPI_HD_2, > + DA830_UHPI_HD_3, > + DA830_UHPI_HD_4, > + DA830_UHPI_HD_5, > + DA830_UHPI_HD_6, > + DA830_UHPI_HD_7, > + DA830_LCD_D_8, > + DA830_LCD_D_9, > + DA830_GPIO0_2, > + DA830_GPIO0_3, > + DA830_GPIO0_4, > + DA830_GPIO0_5, > + DA830_GPIO0_6, > + DA830_GPIO0_7, > + DA830_GPIO0_8, > + DA830_GPIO0_9, > + DA830_EMA_D_10, > + DA830_EMA_D_11, > + DA830_EMA_D_12, > + DA830_EMA_D_13, > + DA830_EMA_D_14, > + DA830_EMA_D_15, > + DA830_EMA_A_0, > + DA830_EMA_A_1, > + DA830_UHPI_HD_10, > + DA830_UHPI_HD_11, > + DA830_UHPI_HD_12, > + DA830_UHPI_HD_13, > + DA830_UHPI_HD_14, > + DA830_UHPI_HD_15, > + DA830_LCD_D_7, > + DA830_MMCSD_CLK, > + DA830_LCD_D_10, > + DA830_LCD_D_11, > + DA830_LCD_D_12, > + DA830_LCD_D_13, > + DA830_LCD_D_14, > + DA830_LCD_D_15, > + DA830_UHPI_HCNTL0, > + DA830_GPIO0_10, > + DA830_GPIO0_11, > + DA830_GPIO0_12, > + DA830_GPIO0_13, > + DA830_GPIO0_14, > + DA830_GPIO0_15, > + DA830_GPIO1_0, > + DA830_GPIO1_1, > + DA830_EMA_A_2, > + DA830_EMA_A_3, > + DA830_EMA_A_4, > + DA830_EMA_A_5, > + DA830_EMA_A_6, > + DA830_EMA_A_7, > + DA830_EMA_A_8, > + DA830_EMA_A_9, > + DA830_MMCSD_CMD, > + DA830_LCD_D_6, > + DA830_LCD_D_3, > + DA830_LCD_D_2, > + DA830_LCD_D_1, > + DA830_LCD_D_0, > + DA830_LCD_PCLK, > + DA830_LCD_HSYNC, > + DA830_UHPI_HCNTL1, > + DA830_GPIO1_2, > + DA830_GPIO1_3, > + DA830_GPIO1_4, > + DA830_GPIO1_5, > + DA830_GPIO1_6, > + DA830_GPIO1_7, > + DA830_GPIO1_8, > + DA830_GPIO1_9, > + DA830_EMA_A_10, > + DA830_EMA_A_11, > + DA830_EMA_A_12, > + DA830_EMA_BA_1, > + DA830_EMA_BA_0, > + DA830_EMA_CLK, > + DA830_EMA_SDCKE, > + DA830_NEMA_CAS, > + DA830_LCD_VSYNC, > + DA830_NLCD_AC_ENB_CS, > + DA830_LCD_MCLK, > + DA830_LCD_D_5, > + DA830_LCD_D_4, > + DA830_OBSCLK, > + DA830_NEMA_CS_4, > + DA830_UHPI_HHWIL, > + DA830_AHCLKR2, > + DA830_GPIO1_10, > + DA830_GPIO1_11, > + DA830_GPIO1_12, > + DA830_GPIO1_13, > + DA830_GPIO1_14, > + DA830_GPIO1_15, > + DA830_GPIO2_0, > + DA830_GPIO2_1, > + DA830_NEMA_RAS, > + DA830_NEMA_WE, > + DA830_NEMA_CS_0, > + DA830_NEMA_CS_2, > + DA830_NEMA_CS_3, > + DA830_NEMA_OE, > + DA830_NEMA_WE_DQM_1, > + DA830_NEMA_WE_DQM_0, > + DA830_NEMA_CS_5, > + DA830_UHPI_HRNW, > + DA830_NUHPI_HAS, > + DA830_NUHPI_HCS, > + DA830_NUHPI_HDS1, > + DA830_NUHPI_HDS2, > + DA830_NUHPI_HINT, > + DA830_AXR0_12, > + DA830_AMUTE2, > + DA830_AXR0_13, > + DA830_AXR0_14, > + DA830_AXR0_15, > + DA830_GPIO2_2, > + DA830_GPIO2_3, > + DA830_GPIO2_4, > + DA830_GPIO2_5, > + DA830_GPIO2_6, > + DA830_GPIO2_7, > + DA830_GPIO2_8, > + DA830_GPIO2_9, > + DA830_EMA_WAIT_0, > + DA830_NUHPI_HRDY, > + DA830_GPIO2_10, > +}; > + > #ifdef CONFIG_DAVINCI_MUX > /* setup pin muxing */ > extern int davinci_cfg_reg(unsigned long reg_cfg); > diff --git a/arch/arm/mach-davinci/include/mach/psc.h > b/arch/arm/mach-davinci/include/mach/psc.h > index ab8a258..18d0075 100644 > --- a/arch/arm/mach-davinci/include/mach/psc.h > +++ b/arch/arm/mach-davinci/include/mach/psc.h > @@ -118,6 +118,45 @@ > #define DM646X_LPSC_TIMER1 35 > #define DM646X_LPSC_ARM_INTC 45 > > +#define DA830_LPSC0_TPCC 0 > +#define DA830_LPSC0_TPTC0 1 > +#define DA830_LPSC0_TPTC1 2 > +#define DA830_LPSC0_EMIF25 3 > +#define DA830_LPSC0_SPI0 4 > +#define DA830_LPSC0_MMC_SD 5 > +#define DA830_LPSC0_AINTC 6 > +#define DA830_LPSC0_ARM_RAM_ROM 7 > +#define DA830_LPSC0_SECU_MGR 8 > +#define DA830_LPSC0_UART0 9 > +#define DA830_LPSC0_SCR0_SS 10 > +#define DA830_LPSC0_SCR1_SS 11 > +#define DA830_LPSC0_SCR2_SS 12 > +#define DA830_LPSC0_DMAX 13 > +#define DA830_LPSC0_ARM 14 > +#define DA830_LPSC0_GEM 15 > + > +#define DA830_LPSC1_USB20 1 > +#define DA830_LPSC1_USB11 2 > +#define DA830_LPSC1_GPIO 3 > +#define DA830_LPSC1_UHPI 4 > +#define DA830_LPSC1_CPGMAC 5 > +#define DA830_LPSC1_EMIF3C 6 > +#define DA830_LPSC1_McASP0 7 > +#define DA830_LPSC1_McASP1 8 > +#define DA830_LPSC1_McASP2 9 > +#define DA830_LPSC1_SPI1 10 > +#define DA830_LPSC1_I2C 11 > +#define DA830_LPSC1_UART1 12 > +#define DA830_LPSC1_UART2 13 > +#define DA830_LPSC1_LCDC 16 > +#define DA830_LPSC1_PWM 17 > +#define DA830_LPSC1_ECAP 20 > +#define DA830_LPSC1_EQEP 21 > +#define DA830_LPSC1_SCR_P0_SS 24 > +#define DA830_LPSC1_SCR_P1_SS 25 > +#define DA830_LPSC1_CR_P3_SS 26 > +#define DA830_LPSC1_L3_CBA_RAM 31 > + > extern int davinci_psc_is_clk_active(unsigned int ctlr, unsigned int id); > extern void davinci_psc_config(unsigned int domain, unsigned int ctlr, > unsigned int id, char enable); > diff --git a/arch/arm/mach-davinci/include/mach/serial.h > b/arch/arm/mach-davinci/include/mach/serial.h > index a59b7de..d5da19e 100644 > --- a/arch/arm/mach-davinci/include/mach/serial.h > +++ b/arch/arm/mach-davinci/include/mach/serial.h > @@ -20,6 +20,10 @@ > > #define DM355_UART2_BASE (IO_PHYS + 0x206000) > > +#define DA830_UART0_BASE (IO_PHYS + 0x42000) > +#define DA830_UART1_BASE (IO_PHYS + 0x10c000) > +#define DA830_UART2_BASE (IO_PHYS + 0x10d000) You can put these directly into da830.c. I will do the same for the dm355 one which should be in dm355.c since these base addreses really do not need to be globally visible. > /* DaVinci UART register offsets */ > #define UART_DAVINCI_PWREMU 0x0c > #define UART_DM646X_SCR 0x10 > diff --git a/arch/arm/mach-davinci/include/mach/time.h > b/arch/arm/mach-davinci/include/mach/time.h > index 1c971d8..e7f63f0 100644 > --- a/arch/arm/mach-davinci/include/mach/time.h > +++ b/arch/arm/mach-davinci/include/mach/time.h > @@ -15,6 +15,20 @@ > #define DAVINCI_TIMER1_BASE (IO_PHYS + 0x21800) > #define DAVINCI_WDOG_BASE (IO_PHYS + 0x21C00) > > +#define DA830_TIMER64P0_BASE (IO_PHYS + 0x20000) > +#define DA830_TIMER64P1_BASE (IO_PHYS + 0x21000) > +#define DA830_WDOG_BASE DA830_TIMER64P1_BASE > + > +/* Offsets of the 8 compare registers on the da830 */ > +#define DA830_CMP12_0 0x60 > +#define DA830_CMP12_1 0x64 > +#define DA830_CMP12_2 0x68 > +#define DA830_CMP12_3 0x6c > +#define DA830_CMP12_4 0x70 > +#define DA830_CMP12_5 0x74 > +#define DA830_CMP12_6 0x78 > +#define DA830_CMP12_7 0x7c These also can go directly into da830.c. [...] Kevin _______________________________________________ Davinci-linux-open-source mailing list Davinci-linux-open-source@linux.davincidsp.com http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source