The changes mainly target two areas: 1) Provide clock structure, setting up PCI
PINMUX and perform board specific fix-ups for PCI Host core to begin
configuration/enumeraion and 2) Provide PCI IO access through in/outx() and
ioread/iowritex().

The arm-kernel configuration is updated to support PCI Bus for DM646x builds.

In addition, I/O mapping macros are moved inside hardware.h to avoid the need
for inclusion of io.h in assembly files which results in assembler errors for
PCI I/O functions, as well as serial.h, which results in unresolved symbols for
PCI I/O functions (in uncompress code).

Signed-off-by: Hemant Pedanekar <hema...@ti.com>
---
 arch/arm/Kconfig                                 |    2 +-
 arch/arm/mach-davinci/Kconfig                    |    1 +
 arch/arm/mach-davinci/Makefile                   |    6 +
 arch/arm/mach-davinci/board-dm646x-evm.c         |   82 ++++++++
 arch/arm/mach-davinci/dm646x.c                   |   22 ++-
 arch/arm/mach-davinci/include/mach/dm646x.h      |   33 +++-
 arch/arm/mach-davinci/include/mach/entry-macro.S |    2 +-
 arch/arm/mach-davinci/include/mach/hardware.h    |   21 ++
 arch/arm/mach-davinci/include/mach/io.h          |  237 ++++++++++++++++++++--
 arch/arm/mach-davinci/include/mach/mux.h         |   10 +-
 arch/arm/mach-davinci/include/mach/serial.h      |    2 +-
 arch/arm/mach-davinci/include/mach/vmalloc.h     |    2 +-
 12 files changed, 390 insertions(+), 30 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index bf935b0..3324c02 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -776,7 +776,7 @@ config ISA_DMA_API
        bool
 
 config PCI
-       bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || 
ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE
+       bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || 
ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE || ARCH_DAVINCI_DM646x
        help
          Find out whether you have a PCI motherboard. PCI is the name of a
          bus system, i.e. the way the CPU talks to the other stuff inside
diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
index c460615..2ce0ffd 100644
--- a/arch/arm/mach-davinci/Kconfig
+++ b/arch/arm/mach-davinci/Kconfig
@@ -17,6 +17,7 @@ config ARCH_DAVINCI_DM644x
 config ARCH_DAVINCI_DM646x
         bool "DaVinci 646x based system"
        select AINTC
+       select DAVINCI_MUX if PCI
 
 config ARCH_DAVINCI_DM355
         bool "DaVinci 355 based system"
diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile
old mode 100644
new mode 100755
index 6da7b63..7323c83
--- a/arch/arm/mach-davinci/Makefile
+++ b/arch/arm/mach-davinci/Makefile
@@ -9,12 +9,18 @@ obj-y                         := time.o clock.o serial.o io.o 
psc.o \
                           sram.o
 
 obj-$(CONFIG_DAVINCI_MUX)              += mux.o
+obj-$(CONFIG_PCI)                      += pci-generic.o
 
 # Chip specific
 obj-$(CONFIG_ARCH_DAVINCI_DM644x)       += dm644x.o
 obj-$(CONFIG_ARCH_DAVINCI_DM646x)       += dm646x.o
 obj-$(CONFIG_ARCH_DAVINCI_DM355)        += dm355.o
 
+# PCI - Chip specific
+ifeq ($(CONFIG_PCI), y)
+obj-$(CONFIG_ARCH_DAVINCI_DM646x)      += pci-dm6467.o
+endif
+
 obj-$(CONFIG_AINTC)                    += irq.o
 obj-$(CONFIG_CP_INTC)                  += cp_intc.o
 
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c 
b/arch/arm/mach-davinci/board-dm646x-evm.c
old mode 100644
new mode 100755
index a55f45c..8423d15
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -37,11 +37,13 @@
 #include <asm/mach/flash.h>
 #include <mach/dm646x.h>
 #include <mach/common.h>
+#include <mach/mux.h>
 #include <mach/psc.h>
 #include <mach/serial.h>
 #include <mach/i2c.h>
 #include <mach/mmc.h>
 #include <mach/common.h>
+#include <mach/emac.h>
 
 #include <linux/platform_device.h>
 #include <linux/i2c.h>
@@ -65,6 +67,54 @@ static struct gpio_led evm_leds[] = {
        { .name = "DS4", .active_low = 1, },
 };
 
+/* Setup DM6467 for PCI mode. In case of default EVM, the CPLD along with FET
+ * switches takes care of switching to PCI Boot mode when the EVM is put in
+ * the PCI slot and this funtion needs to do nothing. While in case when the
+ * CPLD code/ Hardware is reworked (not to do autoswitch), the code below
+ * handles mux configurations to switch to PCI (Host) mode  and takes care of
+ * driving RST# over PCI Bus.
+ */
+static void dm646xevm_pci_setup(void)
+{
+       void __iomem *base = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE);
+
+       /* Skip this if PCIEN is already set in  PINMUX0 */
+       if (!((__raw_readl(base + PINMUX0)) & (1<<2))) {
+               /* Power up the I/O cells for PCI interface */
+               __raw_writel(__raw_readl(base + DM64XX_VDD3P3V_PWDN)
+                               & ~(3<<16), base + DM64XX_VDD3P3V_PWDN);
+
+               davinci_cfg_reg(DM646X_HPI32EN);
+
+               /* Drive GPIO[13] High to avoid reset when PCI is
+                * enabled
+                */
+               if (gpio_request(13, "RST#") != 0) {
+                       pr_err("Request for GPIO13 failed.\n");
+                       return;
+               }
+
+               gpio_direction_output(13, 1);
+
+               /* Ensure AUDCK1 is disabled to control GPIO[2] */
+               davinci_cfg_reg(DM646X_AUDCK1_DISABLE);
+
+               davinci_cfg_reg(DM646X_PCIEN);
+
+               /* Drive GPIO[2] high to take the PCI bus out of reset
+                * (drive RST#) and select B2 of the FET mux on EVM to
+                * deselect NAND and switch to PCI Bus
+                */
+               if (gpio_request(2, "PCIRST#") != 0) {
+                       pr_err("Request for GPIO2 failed.\n");
+                       return;
+               }
+               gpio_direction_output(2, 1);
+       } else {
+               pr_info("PCI_EN is already asserted.\n");
+       }
+}
+
 static __initconst struct gpio_led_platform_data evm_led_data = {
        .num_leds = ARRAY_SIZE(evm_leds),
        .leds     = evm_leds,
@@ -233,10 +283,42 @@ static void __init davinci_map_io(void)
        dm646x_init();
 }
 
+#if defined(CONFIG_PCI)
+#define HAS_PCI 1
+#else
+#define HAS_PCI 0
+#endif
+
+#if defined(CONFIG_IDE) || \
+    defined(CONFIG_IDE_MODULE)
+#define HAS_ATA 1
+#else
+#define HAS_ATA 0
+#endif
+
+#if defined(CONFIG_MTD_NAND_DAVINCI) || \
+    defined(CONFIG_MTD_NAND_DAVINCI_MODULE)
+#define HAS_NAND 1
+#else
+#define HAS_NAND 0
+#endif
+
 static __init void evm_init(void)
 {
        struct davinci_soc_info *soc_info = davinci_get_soc_info();
 
+       if (HAS_PCI) {
+               if (HAS_ATA)
+                       pr_warning("WARNING: both PCI and IDE are "
+                               "enabled, but they share some pins.\n"
+                               "\tDisable PCI for IDE support.\n");
+               else if (HAS_NAND)
+                       pr_warning("WARNING: both PCI and Flash are "
+                               "enabled, but they share AEMIF pins.\n"
+                               "\tDisable PCI for NAND/NOR support.\n");
+               dm646xevm_pci_setup();
+       }
+
        evm_init_i2c();
        davinci_serial_init(&uart_config);
 
diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
old mode 100644
new mode 100755
index 3cd09c1..d53a2d2
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -26,6 +26,7 @@
 #include <mach/time.h>
 #include <mach/gpio.h>
 #include <mach/serial.h>
+#include <mach/emac.h>
 #include <mach/common.h>
 
 #include "clock.h"
@@ -251,6 +252,13 @@ static struct clk vpif1_clk = {
        .flags = ALWAYS_ENABLED,
 };
 
+static struct clk pci_clk = {
+       .name = "pci",
+       .parent = &pll1_sysclk2,
+       .lpsc = DM646X_LPSC_PCI,
+       .flags = CLK_PSC,
+};
+
 struct davinci_clk dm646x_clks[] = {
        CLK(NULL, "ref", &ref_clk),
        CLK(NULL, "aux", &aux_clkin),
@@ -280,6 +288,7 @@ struct davinci_clk dm646x_clks[] = {
        CLK(NULL, "pwm1", &pwm1_clk),
        CLK(NULL, "timer0", &timer0_clk),
        CLK(NULL, "timer1", &timer1_clk),
+       CLK(NULL, "pci", &pci_clk),
        CLK("watchdog", NULL, &timer2_clk),
        CLK(NULL, "vpif0", &vpif0_clk),
        CLK(NULL, "vpif1", &vpif1_clk),
@@ -333,9 +342,6 @@ static struct platform_device dm646x_emac_device = {
        .resource       = dm646x_emac_resources,
 };
 
-#define PINMUX0                0x00
-#define PINMUX1                0x04
-
 /*
  * Device specific mux setup
  *
@@ -344,11 +350,15 @@ static struct platform_device dm646x_emac_device = {
  */
 static const struct mux_config dm646x_pins[] = {
 #ifdef CONFIG_DAVINCI_MUX
-MUX_CFG(DM646X, ATAEN,         0,   0,     1,    1,     true)
+MUX_CFG(DM646X, ATAEN,         0,   0,     7,    1,     true)
+
+MUX_CFG(DM646X, PCIEN,         0,   0,     7,    4,     true)
+
+MUX_CFG(DM646X, HPI32EN,       0,   0,     7,    2,     true)
 
-MUX_CFG(DM646X, AUDCK1,                0,   29,    1,    0,     false)
+MUX_CFG(DM646X, AUDCK1_DISABLE,        0,   29,    1,    0,     false)
 
-MUX_CFG(DM646X, AUDCK0,                0,   28,    1,    0,     false)
+MUX_CFG(DM646X, AUDCK0_DISABLE,        0,   28,    1,    0,     false)
 
 MUX_CFG(DM646X, CRGMUX,                        0,   24,    7,    5,     true)
 
diff --git a/arch/arm/mach-davinci/include/mach/dm646x.h 
b/arch/arm/mach-davinci/include/mach/dm646x.h
old mode 100644
new mode 100755
index 7afc613..2503ad3
--- a/arch/arm/mach-davinci/include/mach/dm646x.h
+++ b/arch/arm/mach-davinci/include/mach/dm646x.h
@@ -11,10 +11,6 @@
 #ifndef __ASM_ARCH_DM646X_H
 #define __ASM_ARCH_DM646X_H
 
-#include <linux/platform_device.h>
-#include <mach/hardware.h>
-#include <mach/emac.h>
-
 #define DM646X_EMAC_BASE               (0x01C80000)
 #define DM646X_EMAC_CNTRL_OFFSET       (0x0000)
 #define DM646X_EMAC_CNTRL_MOD_OFFSET   (0x1000)
@@ -22,6 +18,35 @@
 #define DM646X_EMAC_MDIO_OFFSET                (0x4000)
 #define DM646X_EMAC_CNTRL_RAM_SIZE     (0x2000)
 
+/* Checked during PCI Enumeration of Bridges */
+#define pcibios_assign_all_busses()     1
+
+/*
+ * PCI Resource allocation
+ */
+
+/* PCI IO window.
+ * This could be set anywhere in the 4G space by adjusting PCIBIOS_MIN_IO and
+ * PCIBIOS_MAX_IO, which, in turn are used by in/out macros to distinguish
+ * between PCU IO and normal MMIO.
+ * Currently using 32M reserved window from DM6467 memory map.
+ */
+#define PCIBIOS_MIN_IO                 0x4A000000
+#define PCIBIOS_MAX_IO                 0x4BFFFFFF
+
+/* PCI Memory window base */
+#define PCIBIOS_MIN_MEM                0x30000000
+
+#define DAVINCI_DM646X_PCI_CTL_BASE    (0x01C1A000)
+
+/* System module registers */
+#define PINMUX0                                0x00
+#define PINMUX1                                0x04
+#define BOOTCFG                                0x14
+
+#ifndef __ASSEMBLY__
+#include <linux/init.h>
 void __init dm646x_init(void);
+#endif
 
 #endif /* __ASM_ARCH_DM646X_H */
diff --git a/arch/arm/mach-davinci/include/mach/entry-macro.S 
b/arch/arm/mach-davinci/include/mach/entry-macro.S
old mode 100644
new mode 100755
index fbdebc7..cf098a8
--- a/arch/arm/mach-davinci/include/mach/entry-macro.S
+++ b/arch/arm/mach-davinci/include/mach/entry-macro.S
@@ -8,7 +8,7 @@
  * is licensed "as is" without any warranty of any kind, whether express
  * or implied.
  */
-#include <mach/io.h>
+#include <mach/hardware.h>
 #include <mach/irqs.h>
 
                .macro  disable_fiq
diff --git a/arch/arm/mach-davinci/include/mach/hardware.h 
b/arch/arm/mach-davinci/include/mach/hardware.h
old mode 100644
new mode 100755
index 48c7793..fb78064
--- a/arch/arm/mach-davinci/include/mach/hardware.h
+++ b/arch/arm/mach-davinci/include/mach/hardware.h
@@ -11,6 +11,10 @@
 #ifndef __ASM_ARCH_HARDWARE_H
 #define __ASM_ARCH_HARDWARE_H
 
+#if defined(CONFIG_ARCH_DAVINCI_DM646x)
+#include <mach/dm646x.h>
+#endif
+
 /*
  * Before you add anything to ths file:
  *
@@ -24,4 +28,21 @@
 /* System control register offsets */
 #define DM64XX_VDD3P3V_PWDN    0x48
 
+/*
+ * I/O mapping
+ */
+#define IO_PHYS                                0x01c00000
+#define IO_OFFSET                      0xfd000000 /* Virtual IO = 0xfec00000 */
+#define IO_SIZE                                0x00400000
+#define IO_VIRT                                (IO_PHYS + IO_OFFSET)
+#define io_v2p(va)                     ((va) - IO_OFFSET)
+#define __IO_ADDRESS(x)                        ((x) + IO_OFFSET)
+#define IO_ADDRESS(pa)                 IOMEM(__IO_ADDRESS(pa))
+
+#ifdef __ASSEMBLER__
+#define IOMEM(x)                       x
+#else
+#define IOMEM(x)                       ((void __force __iomem *)(x))
+#endif
+
 #endif /* __ASM_ARCH_HARDWARE_H */
diff --git a/arch/arm/mach-davinci/include/mach/io.h 
b/arch/arm/mach-davinci/include/mach/io.h
old mode 100644
new mode 100755
index 2479785..19a74c9
--- a/arch/arm/mach-davinci/include/mach/io.h
+++ b/arch/arm/mach-davinci/include/mach/io.h
@@ -11,29 +11,238 @@
 #ifndef __ASM_ARCH_IO_H
 #define __ASM_ARCH_IO_H
 
-#define IO_SPACE_LIMIT 0xffffffff
+#include <mach/hardware.h>
 
-/*
- * ----------------------------------------------------------------------------
- * I/O mapping
- * ----------------------------------------------------------------------------
- */
-#define IO_PHYS                0x01c00000
-#define IO_OFFSET      0xfd000000 /* Virtual IO = 0xfec00000 */
-#define IO_SIZE                0x00400000
-#define IO_VIRT                (IO_PHYS + IO_OFFSET)
-#define io_v2p(va)     ((va) - IO_OFFSET)
-#define __IO_ADDRESS(x)        ((x) + IO_OFFSET)
+#define IO_SPACE_LIMIT 0xffffffff
 
 /*
  * We don't actually have real ISA nor PCI buses, but there is so many
  * drivers out there that might just work if we fake them...
  */
-#define __io(a)                        __typesafe_io(a)
 #define __mem_pci(a)           (a)
 #define __mem_isa(a)           (a)
 
-#define IO_ADDRESS(pa)          IOMEM(__IO_ADDRESS(pa))
+#if defined(CONFIG_PCI)
+/*
+ * Here we provide DMSoC to PCI I/O space access as PCI I/O is performed
+ * indirectly by accessing PCI IO Register.
+ *
+ * We will still use the default I/O (memory mapped for ARM)  for any access
+ * which is outside the allotted PCI I/O window. Note: In this case we 
replicate
+ * the default inx/outx behavior as found in include/asm-arm/io.h (except of
+ * course, addition of sequence point, which is not needed in our case).
+ */
+#define CFG_PCIM_IO_START               (PCIBIOS_MIN_IO)
+#define CFG_PCIM_IO_END                 0x4BFFFFFF
+
+#define        outb(v, p)                      _davinci_outb(v, p)
+#define        outw(v, p)                      _davinci_outw(v, p)
+#define        outl(v, p)                      _davinci_outl(v, p)
+
+/* REVISIT: Using incremental access currently, need to check h/w support */
+#define        outsb(p, d, l)                  _davinci_outsb(p, d, l)
+#define        outsw(p, d, l)                  _davinci_outsw(p, d, l)
+#define        outsl(p, d, l)                  _davinci_outsl(p, d, l)
+
+#define        inb(p)                          _davinci_inb(p)
+#define        inw(p)                          _davinci_inw(p)
+#define        inl(p)                          _davinci_inl(p)
+
+/* REVISIT: Using incremental access currently, need to check h/w support */
+#define        insb(p, d, l)                   _davinci_insb(p, d, l)
+#define        insw(p, d, l)                   _davinci_insw(p, d, l)
+#define        insl(p, d, l)                   _davinci_insl(p, d, l)
+
+/* Check if the supplied (physical) address falls withing the PCI IO window */
+#define IS_PCI_IO(p)                   (((p) >= PCIBIOS_MIN_IO) \
+                                               && ((p) <= PCIBIOS_MAX_IO))
+
+/*
+ * I/O Functions
+ */
+#define PCI_ACCESS_TYPE_CFG             0
+#define PCI_ACCESS_TYPE_IO              1
+extern int ti_pci_io_write(u32 addr, int size, u32 value);
+extern int ti_pci_io_read(u32 addr, int size, u32 *value);
+
+static inline void _davinci_outb(u8 value, u32 addr)
+{
+       if (IS_PCI_IO(addr))
+               ti_pci_io_write(addr, 1, (u32)value);
+       else
+               __raw_writeb(value, __typesafe_io(addr));
+}
+
+static inline void _davinci_outsb(u32 addr, const void *data, u32 blen)
+{
+       while (blen--)
+               _davinci_outb(*(const u8 *)data++, (u32)((u8 *)addr++));
+}
+
+static inline void _davinci_outw(u16 value, u32 addr)
+{
+       if (IS_PCI_IO(addr))
+               ti_pci_io_write(addr, 2, (u32)value);
+       else
+               __raw_writew(cpu_to_le16(value), __typesafe_io(addr));
+}
+
+static inline void _davinci_outsw(u32 addr, const void *data, u32 wlen)
+{
+       while (wlen--)
+               _davinci_outw(*(const u16 *)data++, (u32)((u16 *)addr++));
+}
+
+static inline void _davinci_outl(u32 value, u32 addr)
+{
+       if (IS_PCI_IO(addr))
+               ti_pci_io_write(addr, 4, (u32)value);
+       else
+               __raw_writel(cpu_to_le32(value), __typesafe_io(addr));
+}
+
+static inline void _davinci_outsl(u32 addr, const void *data, u32 llen)
+{
+       while (llen--)
+               _davinci_outl(*(const u32 *)data++, (u32)((u32 *)addr++));
+}
+
+static inline u8 _davinci_inb(u32 addr)
+{
+       if (IS_PCI_IO(addr)) {
+               u32 value;
+               ti_pci_io_read(addr, 1, &value);
+               return (u8)value;
+       } else
+               return __raw_readb(__typesafe_io(addr));
+}
+
+static inline void _davinci_insb(u32 addr, void *data, u32 blen)
+{
+       while (blen--)
+               *(u8 *)data++ = _davinci_inb((u32)((u8 *)addr++));
+}
+
+static inline u16 _davinci_inw(u32 addr)
+{
+       if (IS_PCI_IO(addr)) {
+               u32 value;
+               ti_pci_io_read(addr, 2, &value);
+               return (u16)value;
+       } else
+               return le16_to_cpu(__raw_readw(__typesafe_io(addr)));
+}
+
+static inline void _davinci_insw(u32 addr, void *data, u32 wlen)
+{
+       while (wlen--)
+               *(u16 *)data++ = _davinci_inw((u32)((u16 *)addr++));
+}
+
+static inline u32 _davinci_inl(u32 addr)
+{
+       if (IS_PCI_IO(addr)) {
+               u32 value;
+               ti_pci_io_read(addr, 4, &value);
+               return value;
+       } else
+               return le32_to_cpu(__raw_readl(__typesafe_io(addr)));
+}
+
+static inline void _davinci_insl(u32 addr, void *data, u32 llen)
+{
+       while (llen--)
+               *(u32 *)data++ = _davinci_inl((u32)((u32 *)addr++));
+}
+
+static inline unsigned int _davinci_ioread8(void __iomem *port)
+{
+       return (unsigned int)_davinci_inb((unsigned long __force)port);
+}
+
+static inline void _davinci_ioread8_rep(void __iomem *port, void *dst,
+                                               unsigned long count)
+{
+       _davinci_insb((unsigned long __force)port, dst, count);
+}
+
+static inline unsigned int _davinci_ioread16(void __iomem *port)
+{
+       return (unsigned int)_davinci_inw((unsigned long __force)port);
+}
+
+static inline void _davinci_ioread16_rep(void __iomem *port, void *dst,
+                                               unsigned long count)
+{
+       _davinci_insw((unsigned long __force)port, dst, count);
+}
+
+static inline unsigned int _davinci_ioread32(void __iomem *port)
+{
+       return (unsigned int)_davinci_inl((unsigned long __force)port);
+}
+
+static inline void _davinci_ioread32_rep(void __iomem *port, void *dst,
+                                               unsigned long count)
+{
+       _davinci_insl((unsigned long __force)port, dst, count);
+}
+
+static inline void _davinci_iowrite8(u8 value, void __iomem *port)
+{
+       _davinci_outb(value, (unsigned long __force)port);
+}
+
+static inline void _davinci_iowrite8_rep(void __iomem *port, const void *src,
+                                       unsigned long count)
+{
+       _davinci_outsb((unsigned long __force)port, src, count);
+}
+
+static inline void _davinci_iowrite16(u16 value, void __iomem *port)
+{
+       _davinci_outw(value, (unsigned long __force)port);
+}
+
+static inline void _davinci_iowrite16_rep(void __iomem *port, const void *src,
+                                       unsigned long count)
+{
+       _davinci_outsw((unsigned long __force)port, src, count);
+}
+
+static inline void _davinci_iowrite32(u32 value, void __iomem *port)
+{
+       _davinci_outl(value, (unsigned long __force)port);
+}
+
+static inline void _davinci_iowrite32_rep(void __iomem *port, const void *src,
+                                       unsigned long count)
+{
+       _davinci_outsl((unsigned long __force)port, src, count);
+}
+
+#define ioread8(p)                     _davinci_ioread8(p)
+#define ioread16(p)                    _davinci_ioread16(p)
+#define ioread32(p)                    _davinci_ioread32(p)
+
+#define iowrite8(v, p)                 _davinci_iowrite8(v, p)
+#define iowrite16(v, p)                        _davinci_iowrite16(v, p)
+#define iowrite32(v, p)                        _davinci_iowrite32(v, p)
+
+#define ioread8_rep(p, d, c)           _davinci_ioread8_rep(p, d, c)
+#define ioread16_rep(p, d, c)          _davinci_ioread8_rep(p, d, c)
+#define ioread32_rep(p, d, c)          _davinci_ioread8_rep(p, d, c)
+
+#define iowrite8_rep(p, s, c)          _davinci_iowrite8_rep(p, s, c)
+#define iowrite16_rep(p, s, c)         _davinci_iowrite16_rep(p, s, c)
+#define iowrite32_rep(p, s, c)         _davinci_iowrite32_rep(p, s, c)
+
+#define        ioport_map(port, nr)            ((void __iomem *)port)
+#define        ioport_unmap(addr)
+
+#else /* !CONFIG_PCI */
+#define __io(a)                                __typesafe_io(a)
+#endif /* !CONFIG_PCI */
 
 #ifdef __ASSEMBLER__
 #define IOMEM(x)                x
diff --git a/arch/arm/mach-davinci/include/mach/mux.h 
b/arch/arm/mach-davinci/include/mach/mux.h
old mode 100644
new mode 100755
index 018701f..7c21022
--- a/arch/arm/mach-davinci/include/mach/mux.h
+++ b/arch/arm/mach-davinci/include/mach/mux.h
@@ -94,9 +94,15 @@ enum davinci_dm646x_index {
        /* ATA function */
        DM646X_ATAEN,
 
+       /* PCI function */
+       DM646X_PCIEN,
+
+       /* HPI 32-bit */
+       DM646X_HPI32EN,
+
        /* AUDIO Clock */
-       DM646X_AUDCK1,
-       DM646X_AUDCK0,
+       DM646X_AUDCK1_DISABLE,
+       DM646X_AUDCK0_DISABLE,
 
        /* CRGEN Control */
        DM646X_CRGMUX,
diff --git a/arch/arm/mach-davinci/include/mach/serial.h 
b/arch/arm/mach-davinci/include/mach/serial.h
old mode 100644
new mode 100755
index 794fa5c..36c63f3
--- a/arch/arm/mach-davinci/include/mach/serial.h
+++ b/arch/arm/mach-davinci/include/mach/serial.h
@@ -11,7 +11,7 @@
 #ifndef __ASM_ARCH_SERIAL_H
 #define __ASM_ARCH_SERIAL_H
 
-#include <mach/io.h>
+#include <mach/hardware.h>
 
 #define DAVINCI_MAX_NR_UARTS   3
 #define DAVINCI_UART0_BASE     (IO_PHYS + 0x20000)
diff --git a/arch/arm/mach-davinci/include/mach/vmalloc.h 
b/arch/arm/mach-davinci/include/mach/vmalloc.h
old mode 100644
new mode 100755
index ad51625..d49646a
--- a/arch/arm/mach-davinci/include/mach/vmalloc.h
+++ b/arch/arm/mach-davinci/include/mach/vmalloc.h
@@ -8,7 +8,7 @@
  * is licensed "as is" without any warranty of any kind, whether express
  * or implied.
  */
-#include <mach/io.h>
+#include <mach/hardware.h>
 
 /* Allow vmalloc range until the IO virtual range minus a 2M "hole" */
 #define VMALLOC_END      (IO_VIRT - (2<<20))
-- 
1.6.2.4

_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to