[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[XenARM] [PATCH 11/14] arm: add files that are required to support the Tegra2 harmony board.



arm: add files that are required to support the Tegra2 harmony board.

 xen/arch/arm/tegra/Makefile        |    3 +-
 xen/arch/arm/tegra/entry.S         |   33 ++++++++
 xen/arch/arm/tegra/tegra250.c      |  330 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 xen/arch/arm/tegra/timer.c         |  110 +++++++++++++++++++++++++++
 xen/arch/arm/xen/cpu.c             |    5 +
 xen/arch/arm/xen/fault.c           |    1 -
 xen/arch/arm/xen/irq.c             |   46 +++++++++++-
 xen/arch/arm/xen/mm.c              |   24 ++++++
 xen/arch/arm/xen/setup.c           |    6 +-
 xen/arch/arm/xen/time.c            |    1 -
 xen/drivers/char/console.c         |    4 +
 xen/include/asm-arm/gic.h          |  101 +++++++++++++++++++++++++
 xen/include/asm-arm/irq.h          |    3 +-
 xen/include/asm-arm/tegra/avp.h    |  144 ++++++++++++++++++++++++++++++++++++
 xen/include/asm-arm/tegra/config.h |    7 +-
 xen/include/asm-arm/tegra/irqs.h   |   60 +++++++++++++++
 xen/include/asm-arm/tegra/smp.h    |    7 +
 xen/include/asm-arm/tegra/tegra.h  |   75 ++++++++++++++++++
 xen/include/xen/irq.h              |    6 +
 19 files changed, 952 insertions(+), 14 deletions(-)

Signed-off-by: Jaemin Ryu <jm77.ryu@xxxxxxxxxxx>

diff -r 6af8a89c99cd xen/arch/arm/tegra/Makefile
--- a/xen/arch/arm/tegra/Makefile       Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/arch/arm/tegra/Makefile       Sun Feb 12 15:04:06 2012 +0900
@@ -1,1 +1,2 @@
-obj-y += dummy.o
+obj-y += timer.o entry.o tegra250.o
+
diff -r 6af8a89c99cd xen/arch/arm/tegra/entry.S
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/arm/tegra/entry.S        Sun Feb 12 15:04:06 2012 +0900
@@ -0,0 +1,33 @@
+/*
+ * entry.S
+ *
+ * Copyright (C) 2008 Samsung Electronics
+ *          JaeMin Ryu  <jm77.ryu@xxxxxxxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public version 2 of License as 
published by
+ * the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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
+ */
+
+#include <xen/config.h> 
+#inlcude <asm/arch/irqs.h>
+#include <asm/page.h>
+#include <asm/system.h>
+#include <asm/asm-macros.h>
+#include <asm/cpu-domain.h>
+#include <asm/asm-offsets.h>
+
+       .align  5
+
+ENTRY(arch_context_switch)
+       mov     pc, lr
+
diff -r 6af8a89c99cd xen/arch/arm/tegra/tegra250.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/arm/tegra/tegra250.c     Sun Feb 12 15:04:06 2012 +0900
@@ -0,0 +1,330 @@
+/*
+ * tegra250.c
+ *
+ * Copyright (C) 2008-2011 Samsung Electronics 
+ *         JaeMin Ryu  <jm77.ryu@xxxxxxxxxxx>
+ *
+ * Secure Xen on ARM architecture designed by Sang-bum Suh consists of 
+ * Xen on ARM and the associated access control.
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public version 2 of License as 
published by
+ * the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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
+ */
+
+#include <xen/config.h>
+#include <xen/spinlock.h>
+#include <xen/lib.h>
+#include <xen/serial.h>
+#include <xen/errno.h>
+#include <xen/smp.h>
+#include <xen/irq.h>
+#include <xen/mm.h>
+#include <asm/mmu.h>
+#include <asm/platform.h>
+#include <asm/gic.h>
+#include <asm/regs.h>
+#include <asm/io.h>
+#include <asm/flushtlb.h>
+#include <asm/arch/tegra.h>
+#include <asm/arch/irqs.h>
+
+#define TEGRA250_MEMORY_BASE     0x00000000UL
+#define TEGRA250_MEMORY_SIZE     0x40000000UL
+
+#define TEGRA250_DEV_BASE        0x50000000UL
+#define TEGRA250_DEV_SIZE        0x00300000UL
+
+DECLARE_MEMORY_MAP(tegra250) = {
+        MEMMAP_ENTRY(TEGRA250_MEMORY_BASE, TEGRA250_MEMORY_SIZE, 
MEMORY_TYPE_RAM, L1E_TYPE_HYPERVISOR),
+        MEMMAP_ENTRY(TEGRA250_DEV_BASE,    TEGRA250_DEV_SIZE,    
MEMORY_TYPE_DEV, L1E_TYPE_DEVICE)
+};
+
+// Register APBDMA_IRQ_MASK_CLR_0
+#define APBDMA_IRQ_STA_CPU_0   (0x14)
+#define APBDMA_IRQ_MASK_SET_0  (0x20)
+#define APBDMA_IRQ_MASK_CLR_0  (0x24)
+
+void *tegra_gic_cpu_base[MAX_PHYS_CPUS]  = {0, 0};
+void *tegra_gic_dist_base = 0;
+
+struct tegra_irq_ctrl {
+       unsigned int irq_start;
+       void  *reg;
+};
+
+static struct tegra_irq_ctrl tegra_irq_ctrl[(INT_SYS_NR + INT_SYS_SZ - 1) / 
INT_SYS_SZ];
+
+#define gic_irq(irq)   (irq)
+
+static void tegra_mask(struct irq_desc *desc)
+{
+       struct tegra_irq_ctrl *chip;
+       unsigned int irq = desc_to_irq(desc);
+       unsigned int mask = 1 << (irq % 32);
+
+       mmio_writel(mask, tegra_gic_dist_base + _ICDICER + (gic_irq(irq) / 32) 
* 4);
+
+       irq -= INT_PRI_BASE;
+       chip = &tegra_irq_ctrl[irq / INT_SYS_SZ];
+       mmio_writel(1 << (irq & 31), chip->reg + ICTLR_CPU_IER_CLR_0);
+}
+
+static void tegra_unmask(struct irq_desc *desc)
+{
+       struct tegra_irq_ctrl *chip;
+       unsigned int irq = desc_to_irq(desc);
+       unsigned int mask = 1 << (irq % 32);
+
+       mmio_writel(mask, tegra_gic_dist_base + _ICDISER + (gic_irq(irq) / 32) 
* 4);
+
+       irq -= INT_PRI_BASE;
+       chip = &tegra_irq_ctrl[irq / INT_SYS_SZ];
+       mmio_writel(1 << (irq & 31), chip->reg + ICTLR_CPU_IER_SET_0);
+}
+
+static void tegra_ack(struct irq_desc *desc)
+{
+       unsigned int irq = desc_to_irq(desc);
+       unsigned int mask = 1 << (irq % 32);
+       unsigned int cpu = smp_processor_id();
+
+       tegra_mask(desc);
+
+        mmio_writel(mask, tegra_gic_dist_base + _ICDICER + (gic_irq(irq) / 32) 
* 4);
+        mmio_writel(gic_irq(irq), tegra_gic_cpu_base[cpu] + _ICCEOIR);
+}
+
+static void tegra_end(struct irq_desc *desc)
+{
+       tegra_unmask(desc);
+}
+
+hw_irq_controller tegra_irq_controller = {
+       .typename = "level",
+       .startup  = tegra_unmask,
+       .shutdown = tegra_mask,
+       .enable   = tegra_unmask,
+       .disable  = tegra_mask,
+       .ack      = tegra_ack,
+       .end      = tegra_end,
+};
+
+static void tegra250_irq_init()
+{
+       unsigned int max_irq, i;
+       unsigned int cpu = smp_processor_id();
+       unsigned long cpumask = 1 << cpu;
+
+       for (i = 0; i < ARRAY_SIZE(tegra_irq_ctrl); i++) {
+               tegra_irq_ctrl[i].irq_start = INT_PRI_BASE + INT_SYS_SZ * i;
+               tegra_irq_ctrl[i].reg = IO_ADDRESS(INT_PPI_ADDRESS(i));
+               mmio_writel(0xFFFFFFFF, tegra_irq_ctrl[i].reg + 
ICTLR_CPU_IER_CLR_0);
+               mmio_writel(0x00000000, tegra_irq_ctrl[i].reg + 
ICTLR_CPU_IEP_CLASS_0);
+       }
+
+       for (i = INT_PRI_BASE; i < INT_GPIO_BASE; i++) {
+               irq_desc[i].handler = &tegra_irq_controller;
+       }
+
+       cpumask |= cpumask << 8;
+       cpumask |= cpumask << 16;
+
+       tegra_gic_dist_base = IO_ADDRESS(TEGRA_ARM_INT_DIST_BASE);
+       tegra_gic_cpu_base[cpu] = IO_ADDRESS(TEGRA_GIC_PROC_IF_BASE);
+
+       mmio_writel(0, tegra_gic_dist_base + _ICDDCR);
+       
+        /*
+         * Find out how many interrupts are supported.
+         */
+        max_irq = mmio_readl(tegra_gic_dist_base + _ICDICTR) & 0x1f;
+        max_irq = (max_irq + 1) * 32;
+
+        /*
+         * The GIC only supports up to 1020 interrupt sources.
+         * Limit this to either the architected maximum, or the
+         * platform maximum.
+         */
+        if (max_irq > max(1020, NR_IRQS))
+                max_irq = max(1020, NR_IRQS);
+
+        /*
+         * Set all global interrupts to be level triggered, active low.
+         */
+        for (i = 32; i < max_irq; i += 16)
+                mmio_writel(0, tegra_gic_dist_base + _ICDICFR + i * 4 / 16);
+
+        /*
+         * Set all global interrupts to this CPU only.
+         */
+        for (i = 32; i < max_irq; i += 4)
+                mmio_writel(cpumask, tegra_gic_dist_base + _ICDIPTR + i * 4 / 
4);
+        /*
+         * Set priority on all interrupts.
+         */
+        for (i = 0; i < max_irq; i += 4)
+                mmio_writel(0xa0a0a0a0, tegra_gic_dist_base + _ICDIPR + i * 4 
/ 4);
+
+        /*
+         * Disable all interrupts.
+         */
+        for (i = 0; i < max_irq; i += 32)
+                mmio_writel(0xffffffff, tegra_gic_dist_base + _ICDICER + i * 4 
/ 32);
+
+        mmio_writel(1, tegra_gic_dist_base + _ICDDCR);
+
+        mmio_writel(0xf0, tegra_gic_cpu_base[cpu] + _ICCPMR);
+        mmio_writel(1, tegra_gic_cpu_base[cpu] + _ICCICR);
+
+
+}
+
+#define CLK_RST_CONTROLLER_RST_CPU_CMPLX_CLR_0  (0x344)
+#define CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0      (0x4c)
+#define CPU_CLK_STOP(cpu)                       (0x1<<(8+cpu))
+#define CPU_RESET(cpu)                          (0x1011ul<<(cpu))
+
+#define EVP_CPU_RESET_VECTOR_0                 (0x100)
+#define FLOW_CTRL_HALT_CPUx_EVENTS(cpu)        ((cpu) ? ((cpu - 1) * 0x8 + 
0x14) : 0x0)
+
+
+volatile int tegra250_core_map = 1;
+
+asm(
+".type tegra250_slave_cpu_start, #function     \n"
+".global tegra250_slave_cpu_start              \n"
+"tegra250_slave_cpu_start:                     \n"
+"      msr     cpsr_c, #0xD3                   \n"
+"      mov     r0, #0                          \n"
+"      mcr     p15, 2, r0, c0, c0, 0           \n"
+"      mrc     p15, 1, r0, c0, c0, 0           \n"
+"      ldr     r1, =0x7FFF                     \n"
+"      and     r2, r1, r0, lsr #13             \n"
+"      ldr     r1, =0x3FF                      \n"
+"      and     r3, r1, r0, lsr #3              \n"
+"      add     r2, r2, #1                      \n"
+"      and     r0, r0, #0x07                   \n"
+"      add     r0, r0, #4                      \n"
+"      clz     r1, r3                          \n"
+"      add     r4, r3, #1                      \n"
+"1:    sub     r2, r2, #1                      \n"
+"      mov     r3, r4                          \n"
+"2:    subs    r3, r3, #1                      \n"
+"      mov     r5, r3, lsl r1                  \n"
+"      mov     r6, r2, lsl r0                  \n"
+"      orr     r5, r5, r6                      \n"
+"      mcr     p15, 0, r5, c7, c6, 2           \n"
+"      bgt     2b                              \n"
+"      cmp     r2, #0                          \n"
+"      bgt     1b                              \n"
+"      dsb                                     \n"
+"      isb                                     \n"
+"      mrc     p15, 0, r0, c0, c0, 5           \n"
+"      and     r0, r0, #15                     \n"
+"      adr     r4, 1f                          \n"
+"      ldmia   r4, {r5, r6}                    \n"
+"      sub     r4, r4, r5                      \n"
+"      add     r6, r6, r4                      \n"
+"      mov     r1, #1                          \n"
+"      lsl     r1, r1, r0                      \n"
+"spin: ldr     r7, [r6]                        \n"
+"      tst     r7, r1                          \n"
+"      beq     spin                            \n"
+"      b       slave_cpu_start                 \n"
+"1:    .long   .                               \n"
+"      .long   tegra250_core_map               \n"
+);
+
+int wakeup_cpu(unsigned int cpu)
+{
+       tegra250_core_map |= 1 <<  cpu;
+
+       cpu_flush_cache_all();
+
+       return 0;
+}
+
+extern void tegra250_slave_cpu_start(void);
+
+static void tegra250_evp_init(void)
+{
+       unsigned long r, org, loop, ctrl;
+
+       /* Initialize Snoop Control Unit */
+       ctrl = mmio_readl(IO_ADDRESS(TEGRA_SCU_BASE) + 0x0);
+       ctrl |= 1;
+       mmio_writel(ctrl, IO_ADDRESS(TEGRA_SCU_BASE) + 0x0);
+
+       org = mmio_readl(IO_ADDRESS(TEGRA_EXCEPTION_VECTORS_BASE) + 
EVP_CPU_RESET_VECTOR_0);
+
+       /* Set boot entry */
+       mmio_writel(__pa(tegra250_slave_cpu_start), 
IO_ADDRESS(TEGRA_EXCEPTION_VECTORS_BASE) + EVP_CPU_RESET_VECTOR_0);
+
+       dsb();
+       isb();
+
+       /* Halt CPU */
+       mmio_writel(0, IO_ADDRESS(TEGRA_FLOW_CTRL_BASE) + 
FLOW_CTRL_HALT_CPUx_EVENTS(1));
+
+       dsb();
+       isb();
+
+       /* CPU Clock Stop */
+       r = mmio_readl(IO_ADDRESS(TEGRA_CLK_RESET_BASE) + 
CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0);
+       r &= ~CPU_CLK_STOP(1);
+       mmio_writel(r, IO_ADDRESS(TEGRA_CLK_RESET_BASE) + 
CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0);
+
+       dsb();
+       isb();
+
+       /* Restart Slave CPU */
+       mmio_writel(CPU_RESET(1), IO_ADDRESS(TEGRA_CLK_RESET_BASE) + 
CLK_RST_CONTROLLER_RST_CPU_CMPLX_CLR_0);
+
+       dsb();
+       isb();
+
+        /* Wait util the power unit is in stable */
+        loop = 10000;
+        while((--loop) > 0 );
+}
+
+void tegra250_ioremap(void)
+{
+       map_pages_to_xen(IO_ADDRESS(TEGRA_ARM_CPU_BASE),
+               TEGRA_ARM_CPU_BASE >> PAGE_SHIFT, 0x100000 >> PAGE_SHIFT,
+               L1E_TYPE_DEVICE);
+
+       map_pages_to_xen(IO_ADDRESS(TEGRA_PPSB_DEVICE_BASE),
+               TEGRA_PPSB_DEVICE_BASE >> PAGE_SHIFT, 0x100000 >> PAGE_SHIFT, 
+               L1E_TYPE_DEVICE);
+
+       map_pages_to_xen(IO_ADDRESS(TEGRA_APB_DEVICE_BASE),
+               TEGRA_APB_DEVICE_BASE >> PAGE_SHIFT, 0x100000 >> PAGE_SHIFT,
+               L1E_TYPE_DEVICE);
+}
+
+int machine_setup(void)
+{
+       cpu_topology_init(2);
+
+       tegra250_ioremap();
+
+       tegra250_evp_init();
+
+       tegra250_irq_init();
+
+       tegra250_timer_init();
+
+       return 0;
+}
+
diff -r 6af8a89c99cd xen/arch/arm/tegra/timer.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/arm/tegra/timer.c        Sun Feb 12 15:04:06 2012 +0900
@@ -0,0 +1,110 @@
+/*
+ * arch/arm/mach-tegra/timer.c
+ *
+ * Timer and clock event support for NVIDIA Tegra SoCs
+ *
+ * Copyright (c) 2008-2009, NVIDIA Corporation.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include <xen/sched.h>
+#include <xen/irq.h>
+#include <xen/init.h>
+#include <xen/softirq.h>
+#include <xen/spinlock.h>
+#include <asm/time.h>
+#include <asm/arch/irqs.h>
+#include <asm/arch/tegra.h>
+
+
+#define CLK_RST_CONTROLLER_OSC_CTRL_0  0x50
+
+#define TIMER1_OFFS                    0x00  /* reserved for AVP */
+#define TIMER2_OFFS                    0x08  /* reserved for AVP */
+#define TIMER3_OFFS                    0x50  /* used as OS CPU event timer */
+#define TIMER4_OFFS                    0x58  /* reserved as LP2 wakeup trigger 
*/
+
+#define TIMER_TMR_PTV_0                        0x0
+#define TIMER_TMR_PCR_0                        0x4
+
+#define TIMERUS_OFFS                   0x10
+#define TIMERUS_CNTR_1US_0             0x0
+#define TIMERUS_USEC_CFG_0             0x4
+
+#define NSEC_PER_SEC                   1000000000L
+
+void tegra_clockevent_interrupt(int irq, void *dev_id, struct cpu_user_regs 
*regs)
+{
+        mmio_writel(1 << 30, IO_ADDRESS(TEGRA_TMR1_BASE + TIMER3_OFFS) + 
TIMER_TMR_PCR_0);
+}
+
+static struct irqaction tegra_clockevent_irq = {
+        .name           = "Timer_event",
+        .handler        = tegra_clockevent_interrupt,
+};
+
+void tegra_lp2wake_interrupt(int irq, void *dev_id, struct cpu_user_regs *regs)
+{
+        mmio_writel(1<<30, IO_ADDRESS(TEGRA_TMR1_BASE + TIMER4_OFFS) + 
TIMER_TMR_PCR_0);
+}
+
+static struct irqaction tegra_lp2wake_irq = {
+        .name           = "timer_lp2wake",
+        .handler        = tegra_lp2wake_interrupt,
+};
+
+static unsigned long measure_input_freq(unsigned int *m, unsigned int *n)
+{
+       void *clk_rst = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
+       unsigned long osc = mmio_readl(clk_rst + CLK_RST_CONTROLLER_OSC_CTRL_0);
+       osc >>= 30;
+
+       switch (osc) {
+               case 0: if (m && n) { *m=1; *n=13; } return 13000;
+               case 1: if (m && n) { *m=5; *n=96; } return 19200;
+               case 2: if (m && n) { *m=1; *n=12; } return 12000;
+               case 3: if (m && n) { *m=1; *n=26; } return 26000;
+       }
+
+       return 0;
+}
+
+void tegra250_timer_init(void)
+{
+        void *tmr;
+        unsigned int m, n;
+        unsigned long val;
+        u32 reg;
+
+        tmr = IO_ADDRESS(TEGRA_TMR1_BASE + TIMERUS_OFFS);
+        val = measure_input_freq(&m, &n);
+
+        val = ((m-1)<<8) | (n-1);
+
+        mmio_writel(val, tmr + TIMERUS_USEC_CFG_0);
+        mmio_writel(0, IO_ADDRESS(TEGRA_TMR1_BASE + TIMER3_OFFS)  + 
TIMER_TMR_PTV_0);
+
+        reg = 0xc000270f;
+        mmio_writel(reg, IO_ADDRESS(TEGRA_TMR1_BASE + TIMER3_OFFS) + 
TIMER_TMR_PTV_0);
+
+        if (setup_irq(INT_TMR3, &tegra_clockevent_irq)) {
+                BUG();
+        }
+        if (setup_irq(INT_TMR4, &tegra_lp2wake_irq)) {
+                BUG();
+        }
+}
+
diff -r 6af8a89c99cd xen/arch/arm/xen/cpu.c
--- a/xen/arch/arm/xen/cpu.c    Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/arch/arm/xen/cpu.c    Sun Feb 12 15:04:06 2012 +0900
@@ -53,6 +53,11 @@ int __cpu_up(unsigned int cpu)
 {
        int ret = 0;
 
+       ret = wakeup_cpu(cpu);
+       if (!ret) {
+               return -EINVAL;
+       }
+
        while(!cpu_online(cpu)) {
                cpu_relax();
                process_pending_softirqs();
diff -r 6af8a89c99cd xen/arch/arm/xen/fault.c
--- a/xen/arch/arm/xen/fault.c  Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/arch/arm/xen/fault.c  Sun Feb 12 15:04:06 2012 +0900
@@ -33,7 +33,6 @@
 #include <asm/processor.h>
 #include <asm/guest_access.h>
 #include <asm/system.h>
-#include <asm/memory.h>
 
 asmlinkage void __div0(void)
 {
diff -r 6af8a89c99cd xen/arch/arm/xen/irq.c
--- a/xen/arch/arm/xen/irq.c    Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/arch/arm/xen/irq.c    Sun Feb 12 15:04:06 2012 +0900
@@ -38,9 +38,27 @@ hw_irq_controller no_irq_type = {
        .shutdown = irq_shutdown_none,
        .enable   = irq_enable_none,
        .disable  = irq_disable_none,
+       .end      = irq_end_none,
+       .ack      = irq_ack_none,
 };
 
-struct irq_desc *irq_desc;
+//struct irq_desc *irq_desc;
+
+irq_desc_t irq_desc[NR_IRQS] = {
+        [0 ... NR_IRQS - 1] = {
+                .status = IRQ_DISABLED,
+                .handler = &no_irq_type,
+                .action = NULL,
+                .lock = SPIN_LOCK_UNLOCKED
+        }
+};
+
+struct irq_cfg irq_cfg[NR_IRQS] = {
+        [0 ... NR_IRQS - 1] ={
+                .irq = 0
+        }
+};
+
 
 int pirq_guest_unmask(struct domain *d)
 {
@@ -75,6 +93,32 @@ struct pirq *alloc_pirq_struct(struct do
        return NULL;
 }
 
+int setup_irq(unsigned int irq, struct irqaction *new)
+{
+       unsigned long flags;
+       struct irq_desc *desc;
+
+       if(irq >= NR_IRQS) {
+               printk("BAD IRQ = %d\n", irq);
+       }
+
+       desc = irq_to_desc(irq);
+
+       spin_lock_irqsave(&desc->lock, flags);
+       desc->action = new;
+       if (desc->handler) {
+               if (desc->handler->startup) {
+                       desc->handler->startup(desc);
+               } else if(desc->handler->enable) {
+                       desc->handler->enable(desc);
+               }
+       }
+
+       spin_unlock_irqrestore(&desc->lock, flags);
+
+       return 0;
+}
+
 int arch_init_one_irq_desc(struct irq_desc *desc)
 {
        NOT_YET();
diff -r 6af8a89c99cd xen/arch/arm/xen/mm.c
--- a/xen/arch/arm/xen/mm.c     Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/arch/arm/xen/mm.c     Sun Feb 12 15:04:06 2012 +0900
@@ -255,3 +255,27 @@ int alloc_page_map(unsigned long virt, u
        return 0;
 }
 
+int map_pages_to_xen(unsigned long virt, unsigned long mfn, int nr, unsigned 
long flags)
+{
+        unsigned long vaddr = round_down(virt, PAGE_SIZE);
+        unsigned long maddr = mfn << PAGE_SHIFT;
+        unsigned int end = virt + (nr << PAGE_SHIFT);
+
+        l1e_t *l1e = l1_linear_offset_xen(vaddr);
+
+        do {
+                unsigned long limit = (vaddr + SECTION_SIZE) & (SECTION_MASK);
+                limit = (limit < end) ? limit : end;
+
+                if (((vaddr | maddr | limit) & ~SECTION_MASK) == 0) {
+                        *l1e = MK_L1E(maddr, flags);
+                        pte_sync(l1e);
+
+                        vaddr += SECTION_SIZE;
+                        maddr += SECTION_SIZE;
+                }
+        } while(l1e++, vaddr < end);
+
+        return 0;
+}
+
diff -r 6af8a89c99cd xen/arch/arm/xen/setup.c
--- a/xen/arch/arm/xen/setup.c  Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/arch/arm/xen/setup.c  Sun Feb 12 15:04:06 2012 +0900
@@ -64,11 +64,11 @@ static unsigned int dom0_size = 256 * 10
 integer_param("dom0_size", dom0_size);
 
 //static unsigned long dom0_image_start = 0x40B00000UL;
-static unsigned long dom0_image_start = 0x00B00000UL;
+static unsigned long dom0_image_start = 0xA00000UL;
 integer_param("image_start", dom0_image_start);
 
 //static unsigned long dom0_image_size = 0xA00000UL;
-static unsigned long dom0_image_size = 0xA00000UL;
+static unsigned long dom0_image_size = 0x1400000UL;
 integer_param("image_length", dom0_image_size);
 
 void arch_get_xen_caps(xen_capabilities_info_t *info)
@@ -211,6 +211,8 @@ asmlinkage void start_xen(void)
 
        tasklet_subsys_init();
 
+       machine_setup();
+
        timer_init();
 
        idle_domain_init();
diff -r 6af8a89c99cd xen/arch/arm/xen/time.c
--- a/xen/arch/arm/xen/time.c   Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/arch/arm/xen/time.c   Sun Feb 12 15:04:06 2012 +0900
@@ -79,5 +79,4 @@ void domain_set_time_offset(struct domai
 
 void timekeeping_init(void)
 {
-       NOT_YET();
 }
diff -r 6af8a89c99cd xen/drivers/char/console.c
--- a/xen/drivers/char/console.c        Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/drivers/char/console.c        Sun Feb 12 15:04:06 2012 +0900
@@ -412,7 +412,11 @@ long do_console_io(int cmd, int count, X
  * *****************************************************
  */
 
+#if defined(__arm__)
+static bool_t console_locks_busted = 1;
+#else
 static bool_t console_locks_busted;
+#endif
 
 static void __putstr(const char *str)
 {
diff -r 6af8a89c99cd xen/include/asm-arm/gic.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-arm/gic.h Sun Feb 12 15:04:06 2012 +0900
@@ -0,0 +1,101 @@
+/*
+ * gic.h
+ *
+ * Copyright (C) 2011 Samsung Electronics
+ *          Jaemin Ryu  <jm77.ryu@xxxxxxxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public version 2 of License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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
+ */
+
+#ifndef __ARM_GIC_H__
+#define __ARM_GIC_H__
+
+
+/* Distributor Register Map */
+#define _ICDDCR                0x000  /* Distributor Control Register */
+#define _ICDICTR       0x004  /* Interrupt Controller Type Register */
+#define _ICDIIDR       0x008  /* Distributor Implementer Id Register */
+#define _ICDISR0       0x080  /* Interrupt Security Register */
+#define _ICDISR1       0x084  /* Interrupt Security Register */
+#define _ICDISR2       0x088  /* Interrupt Security Register */
+#define _ICDISR3       0x08c  /* Interrupt Security Register */
+#define _ICDISR4       0x090  /* Interrupt Security Register */
+#define _ICDISER       0x100  /* Interrupt Set-Enable Register */
+#define _ICDICER       0x180  /* Interrupt Clear-Enable Register */
+#define _ICDISPR       0x200  /* Interrupt Set-Pending Register */
+#define _ICDICPR       0x280  /* Interrupt Clear-Pending Register */
+#define _ICDABR                0x300  /* Active Bit Registers */
+#define _ICDIPR                0x400  /* Interrupt Priority Register */
+#define _ICDIPTR       0x800  /* Interrupt Processor Targets Registers */
+#define _ICDICFR       0xC00  /* Interrupt Configuration Registers */
+#define _ICDSGIR       0xF00  /* Software Generated Interrupt Register */
+
+#define ICDDCR()       (_ICDDCR)
+#define ICDICTR()      (_ICDICTR)
+#define ICDISR(x)      (_ICDISR0 + (x / BITS_PER_LONG) * BYTES_PER_LONG)
+#define ICDISER(x)     (_ICDISER + (x / BITS_PER_LONG) * BYTES_PER_LONG)
+#define ICDICER(x)     (_ICDICER + (x / BITS_PER_LONG) * BYTES_PER_LONG)
+#define ICDISPR(x)     (_ICDISPR + (x / BITS_PER_LONG) * BYTES_PER_LONG)
+#define ICDICPR(x)     (_ICDICPR + (x / BITS_PER_LONG) * BYTES_PER_LONG)
+#define ICDABR(x)      (_ICDABR  + (x / BITS_PER_LONG) * BYTES_PER_LONG)
+#define ICDIPR(x)      (_ICDIPR  + (x /  4) * BYTES_PER_LONG)
+#define ICDIPTR(x)     (_ICDIPTR + (x /  4) * BYTES_PER_LONG)
+#define ICDSGIR()      (_ICDSGIR)
+
+/* CPU Interface Register Map */
+#define _ICCICR                0x000  /* CPU Interface Control Register */
+#define _ICCPMR                0x004  /* Interrupt Priority Mask Register */
+#define _ICCBPR                0x008  /* Binrary Point Register */
+#define _ICCIAR                0x00C  /* Interrupt Acknowledge Register */
+#define _ICCEOIR       0x010  /* End of Interrupt Register */
+#define _ICCRPR                0x014  /* Running Priority Register */
+#define _ICCHPIR       0x018  /* Highest Pending Interrupt Register */
+#define _ICCABPR       0x01C  /* Aliased Binary Point Register */
+#define _ICCIIDR       0x0FC  /* CPU Interface Id Register */
+
+#define ICCICR()       (_ICCICR)
+#define ICCPMR()       (_ICCPMR)
+#define ICCBPR()       (_ICCBPR)
+#define ICCIAR()       (_ICCIAR)
+#define ICCEOIR()      (_ICCEOIR)
+#define ICCRPR()       (_ICCRPR)
+#define ICCHPIR()      (_ICCHPIR)
+#define ICCIIDR()      (_ICCIIDR)
+
+#define SECURE_INTERRUPT       0
+#define NONSECURE_INTERRUPT    1
+
+#define SGI(x)                 (x)
+#define PPI(x)                 (x + 16)
+#define SPI(x)                 (x + 32)
+
+#ifndef __ASSEMBLY__
+
+#include <xen/types.h>
+
+#define GIC_DISTRIBUTOR(x)      (_gic_distributor_base + x)
+#define GIC_CPU_INTERFACE(x)    (_gic_cpu_base + x)
+
+void gic_set_cpu(unsigned int irq, unsigned int mask);
+void gic_set_irq_priority(unsigned int irq, unsigned int priority);
+void gic_ack_irq(unsigned int irq);
+void gic_mask_irq(unsigned int irq);
+void gic_unmask_irq(unsigned int irq);
+void gic_end_irq(unsigned int irq);
+void gic_change_irq_state(unsigned int irq, unsigned int state);
+
+extern void *_gic_cpu_base[NR_CPUS];
+extern void *_gic_distributor_base;
+#endif
+#endif
diff -r 6af8a89c99cd xen/include/asm-arm/irq.h
--- a/xen/include/asm-arm/irq.h Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/include/asm-arm/irq.h Sun Feb 12 15:04:06 2012 +0900
@@ -15,6 +15,7 @@
 
 #define irq_cfg(irq)           (&irq_cfg[irq])
 #define irq_to_desc(irq)       (&irq_desc[irq])        
+#define desc_to_irq(desc)      ((desc - &irq_desc[0]) / sizeof(struct 
irq_desc));
 
 #define IRQ_MAX_GUESTS         7
 typedef struct {
@@ -40,8 +41,6 @@ typedef struct {
     DECLARE_BITMAP(_bits,NR_IRQS);
 } vmask_t;
 
-extern struct irq_desc *irq_desc;
-
 static inline int irq_desc_initialized(struct irq_desc *desc)
 {
        return 0;
diff -r 6af8a89c99cd xen/include/asm-arm/tegra/avp.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-arm/tegra/avp.h   Sun Feb 12 15:04:06 2012 +0900
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2010 NVIDIA Corporation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NVIDIA Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef INCLUDED_AVP_H
+#define INCLUDED_AVP_H
+
+#include "ap15/arictlr.h"
+#include "ap15/artimer.h"
+// FIXME: get the ararmev header
+
+// 3 controllers in contiguous memory starting at INTERRUPT_BASE, each
+// controller's aperture is INTERRUPT_SIZE large
+#define INTERRUPT_BASE 0x60004000
+#define INTERRUPT_SIZE 0x100
+#define INTERRUPT_NUM_CONTROLLERS 3
+
+#define INTERRUPT_PENDING( ctlr ) \
+    (INTERRUPT_BASE + ((ctlr) * INTERRUPT_SIZE) + ICTLR_VIRQ_COP_0)
+
+#define INTERRUPT_SET( ctlr ) \
+    (INTERRUPT_BASE + ((ctlr) * INTERRUPT_SIZE) + ICTLR_COP_IER_SET_0)
+
+#define INTERRUPT_CLR( ctlr ) \
+    (INTERRUPT_BASE + ((ctlr) * INTERRUPT_SIZE) + ICTLR_COP_IER_CLR_0)
+
+#define OSC_CTRL        ( 0x60006000 + 0x50 )
+#define OSC_FREQ_DET    ( 0x60006000 + 0x58 )
+#define OSC_DET_STATUS  ( 0x60006000 + 0x5C )
+
+#define TIMER_USEC      ( 0x60005010 )
+#define TIMER_CFG       ( 0x60005014 )
+#define TIMER_0_BASE    ( 0x60005000 )
+#define TIMER_0         ( TIMER_0_BASE + TIMER_TMR_PTV_0 )
+#define TIMER_0_CLEAR   ( TIMER_0_BASE + TIMER_TMR_PCR_0 )
+#define TIMER_1_BASE    ( 0x60005008 )
+#define TIMER_1         ( TIMER_1_BASE + TIMER_TMR_PTV_0 )
+#define TIMER_1_CLEAR   ( TIMER_1_BASE + TIMER_TMR_PCR_0 )
+
+#define CLOCK_RST_LO    (0x60006004)
+#define CLOCK_CTLR_HI   (0x60006014)
+#define CLOCK_CTLR_LO   (0x60006010)
+
+#define CACHE_CTLR      (0x6000C000)
+#define CACHE_CONTROL_0         (0x0)
+
+#define PPI_INTR_ID_TIMER_0     (0)
+#define PPI_INTR_ID_TIMER_1     (1)
+#define PPI_INTR_ID_TIMER_2     (9)
+#define PPI_INTR_ID_TIMER_3     (10)
+
+/* flow controller */
+#define FLOW_CONTROLLER     (0x60007004)
+
+/* exception vectors */
+#define VECTOR_BASE             ( 0x6000F200 )
+#define VECTOR_RESET            ( VECTOR_BASE + 0 )
+#define VECTOR_UNDEF            ( VECTOR_BASE + 4 )
+#define VECTOR_SWI              ( VECTOR_BASE + 8 )
+#define VECTOR_PREFETCH_ABORT   ( VECTOR_BASE + 12 )
+#define VECTOR_DATA_ABORT       ( VECTOR_BASE + 16 )
+#define VECTOR_IRQ              ( VECTOR_BASE + 24 )
+#define VECTOR_FIQ              ( VECTOR_BASE + 28 )
+
+#define MODE_DISABLE_INTR 0xc0
+#define MODE_USR 0x10
+#define MODE_FIQ 0x11
+#define MODE_IRQ 0x12
+#define MODE_SVC 0x13
+#define MODE_ABT 0x17
+#define MODE_UND 0x1B
+#define MODE_SYS 0x1F
+
+#define AP15_CACHE_LINE_SIZE            32
+
+#define AP15_APB_L2_CACHE_BASE 0x7000e800 
+#define AP15_APB_CLK_RST_BASE  0x60006000
+#define AP15_APB_MISC_BASE     0x70000000
+
+#define AP10_APB_CLK_RST_BASE  0x60006000
+#define AP10_APB_MISC_BASE     0x70000000
+
+#define MMU_TLB_BASE              0xf000f000
+#define MMU_TLB_CACHE_WINDOW_0    0x40
+#define MMU_TLB_CACHE_OPTIONS_0   0x44
+
+#define AP15_PINMUX_CFG_CTL_0   0x70000024
+#define AP15_AVP_JTAG_ENABLE    0xC0
+
+#define PMC_SCRATCH22_REG_LP0   0x7000e4a8
+
+#define AVP_WDT_RESET   0x2F00BAD0
+
+/* Cached to uncached offset for AVP
+ *
+ * Hardware has uncached remap aperture for AVP as AVP doesn't have MMU
+ * but still has cache (named COP cache).
+ *
+ * This aperture moved between AP15 and AP20.
+ */
+#define AP15_CACHED_TO_UNCACHED_OFFSET 0x90000000
+#define AP20_CACHED_TO_UNCACHED_OFFSET 0x80000000
+
+#define APXX_EXT_MEM_START      0x00000000
+#define APXX_EXT_MEM_END        0x40000000
+
+#define APXX_MMIO_START         0x40000000
+#define APXX_MMIO_END           0xFFF00000
+
+#define TXX_EXT_MEM_START       0x80000000
+#define TXX_EXT_MEM_END         0xc0000000
+
+#define TXX_MMIO_START          0x40000000
+#define TXX_MMIO_END            0x80000000
+
+#endif
diff -r 6af8a89c99cd xen/include/asm-arm/tegra/config.h
--- a/xen/include/asm-arm/tegra/config.h        Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/include/asm-arm/tegra/config.h        Sun Feb 12 15:04:06 2012 +0900
@@ -1,11 +1,6 @@
 #ifndef __TEGRA_CONFIG_H__
 #define __TEGRA_CONFIG_H__
 
-#define HZ     100
-#define CLOCK_TICK_RATE                1000000
+#define MAX_PHYS_CPUS  2
 
-#define MAX_PHYS_CPUS          2
-
-#define BUILTIN_COMMAND_LINE_SIZE 256
-#define BUILTIN_COMMAND_LINE   ""
 #endif
diff -r 6af8a89c99cd xen/include/asm-arm/tegra/irqs.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-arm/tegra/irqs.h  Sun Feb 12 15:04:06 2012 +0900
@@ -0,0 +1,60 @@
+/*
+ * arch/arm/mach-tegra/include/mach/irqs.h
+ *
+ * Copyright (c) 2009, NVIDIA Corporation.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef __TEGRA_IRQS_H
+#define __TEGRA_IRQS_H
+
+#define NR_IRQS                        512
+
+#define INT_PRI_BASE           32
+#define INT_RTC                        (INT_PRI_BASE + 2)
+#define INT_USB                        (INT_PRI_BASE + 20)
+#define INT_USB2               (INT_PRI_BASE + 21)
+#define INT_APB_DMA            (INT_PRI_BASE + 26)
+
+#define INT_SEC_BASE           (INT_PRI_BASE + 32)
+#define INT_GPIO1              (INT_SEC_BASE + 0)
+#define INT_GPIO2              (INT_SEC_BASE + 1)
+#define INT_GPIO3              (INT_SEC_BASE + 2)
+#define INT_GPIO4              (INT_SEC_BASE + 3)
+#define INT_TMR3               (INT_SEC_BASE + 9)
+#define INT_TMR4               (INT_SEC_BASE + 10)
+#define INT_SYS_STATS_MON      (INT_SEC_BASE + 22)
+#define INT_GPIO5              (INT_SEC_BASE + 23)
+
+#define INT_TRI_BASE           (INT_SEC_BASE + 32)
+#define INT_KBC                        (INT_TRI_BASE + 21)
+#define INT_EXTERNAL_PMU       (INT_TRI_BASE + 22)
+#define INT_GPIO6              (INT_TRI_BASE + 23)
+#define INT_GPIO7              (INT_TRI_BASE + 25)
+
+#define INT_QUAD_BASE          (INT_TRI_BASE + 32)
+#define INT_USB3               (INT_QUAD_BASE + 1)
+
+#define INT_GPIO_BASE          (INT_QUAD_BASE + 32)
+#define INT_GPIO_NR            (28*8)
+
+#define INT_APBDMA_BASE                (INT_GPIO_BASE + INT_GPIO_NR)
+#define INT_APBDMA_NR          (16)
+
+#define INT_SYS_NR     (INT_GPIO_BASE - INT_PRI_BASE)
+#define INT_SYS_SZ     (INT_SEC_BASE - INT_PRI_BASE)
+
+#endif
diff -r 6af8a89c99cd xen/include/asm-arm/tegra/smp.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-arm/tegra/smp.h   Sun Feb 12 15:04:06 2012 +0900
@@ -0,0 +1,7 @@
+#ifndef ASMARM_ARCH_SMP_H
+#define ASMARM_ARCH_SMP_H
+
+
+#include <asm/gic.h>
+
+#endif
diff -r 6af8a89c99cd xen/include/asm-arm/tegra/tegra.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-arm/tegra/tegra.h Sun Feb 12 15:04:06 2012 +0900
@@ -0,0 +1,75 @@
+#ifndef __TEGRA250_H__
+#define __TEGRA250_H__
+
+#define TEGRA_ARM_CPU_BASE             0x50000000
+#define TEGRA_PPSB_DEVICE_BASE         0x60000000
+#define TEGRA_APB_DEVICE_BASE          0x70000000
+
+#define TEGRA_ARM_PERIF_BASE           0x50040000
+#define TEGRA_ARM_PERIF_SIZE           SZ_8K
+
+#define TEGRA_SCU_BASE                 0x50040000
+#define TEGRA_SCU_SIZE                 SZ_256
+
+#define TEGRA_GIC_PROC_IF_BASE         0x50040100
+#define TEGRA_GIC_PROC_IF_SIZE         SZ_256
+
+#define TEGRA_ARM_INT_DIST_BASE                0x50041000
+#define TEGRA_ARM_INT_DIST_SIZE                SZ_4K
+
+#define TEGRA_PRIMARY_ICTLR_BASE       0x60004000
+#define TEGRA_PRIMARY_ICTLR_SIZE       SZ_64
+
+#define TEGRA_SECONDARY_ICTLR_BASE     0x60004100
+#define TEGRA_SECONDARY_ICTLR_SIZE     SZ_64
+
+#define TEGRA_TERTIARY_ICTLR_BASE      0x60004200
+#define TEGRA_TERTIARY_ICTLR_SIZE      SZ_64
+
+#define TEGRA_QUATERNARY_ICTLR_BASE    0x60004300
+#define TEGRA_QUATERNARY_ICTLR_SIZE    SZ_64
+
+#define TEGRA_TMR1_BASE                        0x60005000
+#define TEGRA_TMR1_SIZE                        SZ_8
+
+#define TEGRA_TMR2_BASE                        0x60005008
+#define TEGRA_TMR2_SIZE                        SZ_8
+
+#define TEGRA_TMRUS_BASE               0x60005010
+#define TEGRA_TMRUS_SIZE               SZ_64
+
+#define TEGRA_TMR3_BASE                        0x60005050
+#define TEGRA_TMR3_SIZE                        SZ_8
+
+#define TEGRA_TMR4_BASE                        0x60005058
+#define TEGRA_TMR4_SIZE                        SZ_8
+
+#define TEGRA_CLK_RESET_BASE           0x60006000
+#define TEGRA_CLK_RESET_SIZE           SZ_4K
+
+#define TEGRA_FLOW_CTRL_BASE           0x60007000
+#define TEGRA_FLOW_CTRL_SIZE           20
+
+#define TEGRA_GPIO_BASE                        0x6000D000
+#define TEGRA_GPIO_SIZE                        SZ_4K
+
+#define TEGRA_EXCEPTION_VECTORS_BASE    0x6000F000
+#define TEGRA_EXCEPTION_VECTORS_SIZE    SZ_4K
+
+#define ICTLR_CPU_IER_0                        (0x20)
+#define ICTLR_CPU_IER_SET_0            (0x24)
+#define ICTLR_CPU_IER_CLR_0            (0x28)
+#define ICTLR_CPU_IEP_CLASS_0          (0x2C)
+#define ICTLR_COP_IER_0                        (0x30)
+#define ICTLR_COP_IER_SET_0            (0x34)
+#define ICTLR_COP_IER_CLR_0            (0x38)
+#define ICTLR_COP_IEP_CLASS_0          (0x3C)
+
+#define ARM_PERIF_BASE                 (0x50040000)
+
+//#define IO_ADDRESS(x)                        (((((x) & 0x70000000) >> 8) + 
(((x) & 0x0F000000) >> 4)) |((x) & 0xFFFFF) | 0xFB000000 )
+#define IO_ADDRESS(x)                  ((((x) & 0xF0000000) >> 8) | ((x) & 
0xFFFFF) | (0xFB000000 ))
+#define INT_PPI_ADDRESS(_inst)         (0x60004000 + (0x100 * (_inst)))
+#define INT_APBDMA_ADDRESS             (0x6000a000)
+
+#endif
diff -r 6af8a89c99cd xen/include/xen/irq.h
--- a/xen/include/xen/irq.h     Sun Feb 12 12:24:21 2012 +0900
+++ b/xen/include/xen/irq.h     Sun Feb 12 15:04:06 2012 +0900
@@ -95,6 +95,10 @@ int arch_init_one_irq_desc(struct irq_de
 
 #define irq_desc_initialized(desc) ((desc)->handler != NULL)
 
+#if defined(__arm__)
+extern irq_desc_t irq_desc[NR_IRQS];
+#endif
+
 #if defined(__ia64__)
 extern irq_desc_t irq_desc[NR_VECTORS];
 
@@ -121,6 +125,8 @@ extern void irq_actor_none(struct irq_de
 #define irq_shutdown_none irq_actor_none
 #define irq_disable_none irq_actor_none
 #define irq_enable_none irq_actor_none
+#define irq_ack_none   irq_actor_none
+#define irq_end_none   irq_actor_none
 
 struct domain;
 struct vcpu;

Attachment: patch11.diff
Description: Binary data

_______________________________________________
Xen-arm mailing list
Xen-arm@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-arm

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.