Hello.

Sudhakar Rajashekhara wrote:

The DA850/OMAP-L138 is a new SoC from TI in the same family as
DA830/OMAP-L137.

Major changes include better support for power management,
support for SATA devices and McBSP (same IP as DM644x).

DA850/OMAP-L138 documents are available at
http://focus.ti.com/docs/prod/folders/print/omap-l138.html.

Signed-off-by: Sudhakar Rajashekhara <[email protected]>

[...]

diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile
index d183b11..5f8a661 100644
--- a/arch/arm/mach-davinci/Makefile
+++ b/arch/arm/mach-davinci/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_ARCH_DAVINCI_DM355)        += dm355.o devices.o
 obj-$(CONFIG_ARCH_DAVINCI_DM646x)       += dm646x.o devices.o
 obj-$(CONFIG_ARCH_DAVINCI_DM365)       += dm365.o devices.o
 obj-$(CONFIG_ARCH_DAVINCI_DA830)        += da830.o devices-da8xx.o
+obj-$(CONFIG_ARCH_DAVINCI_DA850)        += da850.o devices-da8xx.o
obj-$(CONFIG_AINTC) += irq.o
 obj-$(CONFIG_CP_INTC)                  += cp_intc.o
diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
new file mode 100644
index 0000000..79d034a
--- /dev/null
+++ b/arch/arm/mach-davinci/da850.c
@@ -0,0 +1,623 @@
+/*
+ * TI DA850/OMAP L138 chip specific setup
+ *
+ * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Derived from: arch/arm/mach-davinci/da830.c
+ * Original Copyrights follow:
+ *
+ * 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.
+ */
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/clk.h>
+#include <linux/platform_device.h>
+
+#include <asm/mach/map.h>
+
+#include <mach/clock.h>
+#include <mach/psc.h>
+#include <mach/mux.h>
+#include <mach/irqs.h>
+#include <mach/cputype.h>
+#include <mach/common.h>
+#include <mach/time.h>
+#include <mach/da8xx.h>
+
+#include "clock.h"
+#include "mux.h"
+

+#define PINMUX0                        0x00
+#define PINMUX1                        0x04
+#define PINMUX2                        0x08
+#define PINMUX3                        0x0c
+#define PINMUX4                        0x10
+#define PINMUX5                        0x14
+#define PINMUX6                        0x18
+#define PINMUX7                        0x1c
+#define PINMUX8                        0x20
+#define PINMUX9                        0x24
+#define PINMUX10               0x28
+#define PINMUX11               0x2c
+#define PINMUX12               0x30
+#define PINMUX13               0x34
+#define PINMUX14               0x38
+#define PINMUX15               0x3c
+#define PINMUX16               0x40
+#define PINMUX17               0x44
+#define PINMUX18               0x48
+#define PINMUX19               0x4c

These registers are the same as on DA830. Could we place their #define's into <mach/da8xx.h> as well?

+
+/*
+ * Device specific mux setup
+ *
+ *             soc     description     mux     mode    mode    mux     dbg
+ *                                     reg     offset  mask    mode
+ */
+static const struct mux_config da850_pins[] = {

Sigh, Mark should have renamed da830_pins[] to da830_pinmux[] since he also has *_pins[] arrays of different, *short* type: pin (signal) lists.

+#ifdef CONFIG_DAVINCI_MUX
+       /* UART0 function */
+       MUX_CFG(DA850, NUART0_CTS,      3,      24,     15,     2,      false)
+       MUX_CFG(DA850, NUART0_RTS,      3,      28,     15,     2,      false)
+       MUX_CFG(DA850, UART0_RXD,       3,      16,     15,     2,      false)
+       MUX_CFG(DA850, UART0_TXD,       3,      20,     15,     2,      false)
+       /* UART1 function */
+       MUX_CFG(DA850, UART1_RXD,       4,      24,     15,     2,      false)
+       MUX_CFG(DA850, UART1_TXD,       4,      28,     15,     2,      false)
+       /* UART2 function */
+       MUX_CFG(DA850, UART2_RXD,       4,      16,     15,     2,      false)
+       MUX_CFG(DA850, UART2_TXD,       4,      20,     15,     2,      false)
+       /* I2C1 function */
+       MUX_CFG(DA850, I2C1_SCL,        4,      16,     15,     4,      false)
+       MUX_CFG(DA850, I2C1_SDA,        4,      20,     15,     4,      false)
+       /* I2C0 function */
+       MUX_CFG(DA850, I2C0_SDA,        4,      12,     15,     2,      false)
+       MUX_CFG(DA850, I2C0_SCL,        4,      8,      15,     2,      false)
+#endif

   And that's all? :-O

+int da850_pinmux_setup(const short pins[])
+{
+       int i, error = -EINVAL;
+
+       if (pins)
+               for (i = 0; pins[i] >= 0; i++) {
+                       error = davinci_cfg_reg(pins[i]);
+                       if (error)
+                               break;
+               }
+
+       return error;
+}

This duplicates da830_pinmux_setup(). I'd consider moving this function into mux.c...

+static struct davinci_timer_instance da850_timer_instance[2] = {
+       {
+               .base           = IO_ADDRESS(DA8XX_TIMER64P0_BASE),
+               .bottom_irq     = IRQ_DA8XX_TINT12_0,
+               .top_irq        = IRQ_DA8XX_TINT34_0,
+       },
+       {
+               .base           = IO_ADDRESS(DA8XX_TIMER64P1_BASE),
+               .bottom_irq     = IRQ_DA8XX_TINT12_1,
+               .top_irq        = IRQ_DA8XX_TINT34_1,
+       },
+};

   Aren't there 4 timers on DA830?

+/*
+ * T0_BOT: Timer 0, bottom             : Used for clock_event & clocksource

This cannot be: you haven't supplied the 'cmp_off' and 'cmp_irq' field initializers for this to work right -- I guess the compare registers just don't exist on timer 0?

+ * T0_TOP: Timer 0, top                        : Used by DSP
+ * T1_BOT, T1_TOP: Timer 1, bottom & top: Used for watchdog timer
+ */
+static struct davinci_timer_info da850_timer_info = {
+       .timers         = da850_timer_instance,
+       .clockevent_id  = T0_BOT,
+       .clocksource_id = T0_TOP,
+};

   Certainly need to fix this...

[...]

diff --git a/arch/arm/mach-davinci/include/mach/mux.h 
b/arch/arm/mach-davinci/include/mach/mux.h
index cce7509..3349fa5 100644
--- a/arch/arm/mach-davinci/include/mach/mux.h
+++ b/arch/arm/mach-davinci/include/mach/mux.h
@@ -704,6 +704,34 @@ enum da830_index {
        DA830_GPIO2_10,
 };
+enum davinci_da850_index {
+       /* UART0 function */
+       DA850_NUART0_CTS,
+       DA850_NUART0_RTS,
+       DA850_UART0_RXD,
+       DA850_UART0_TXD,
+
+       /* UART1 function */
+       DA850_NUART1_CTS,
+       DA850_NUART1_RTS,
+       DA850_UART1_RXD,
+       DA850_UART1_TXD,
+
+       /* UART2 function */
+       DA850_NUART2_CTS,
+       DA850_NUART2_RTS,
+       DA850_UART2_RXD,
+       DA850_UART2_TXD,
+
+       /* I2C1 function */
+       DA850_I2C1_SCL,
+       DA850_I2C1_SDA,
+
+       /* I2C0 function */
+       DA850_I2C0_SDA,
+       DA850_I2C0_SCL,
+};

   And that's all?..

+
 #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 6b9621d..9528980 100644
--- a/arch/arm/mach-davinci/include/mach/psc.h
+++ b/arch/arm/mach-davinci/include/mach/psc.h
@@ -177,6 +177,10 @@
 #define DA8XX_LPSC1_CR_P3_SS           26
 #define DA8XX_LPSC1_L3_CBA_RAM         31
+#define DA850_LPSC1_TPCC1 0
+#define DA850_LPSC1_TPTC2              21
+#define DA850_LPSC1_SATA               8

   Please arrange #define's in the numeric order.

WBR, Sergei

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to