|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH WIP v1 10/10] Tegra hacking.
Works without all this stuff.
---
xen/arch/arm/platforms/tegra.c | 68 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 67 insertions(+), 1 deletion(-)
diff --git a/xen/arch/arm/platforms/tegra.c b/xen/arch/arm/platforms/tegra.c
index 189ef44..5ec9dda 100644
--- a/xen/arch/arm/platforms/tegra.c
+++ b/xen/arch/arm/platforms/tegra.c
@@ -191,6 +191,45 @@ static struct mmio_handler_ops tegra_mmio_ictlr = {
.write_handler = ictlr_write,
};
+static inline void tegra_irq_write_mask(unsigned int irq, unsigned long reg)
+{
+ void __iomem *base;
+ u32 mask;
+
+ BUG_ON(irq < NR_LOCAL_IRQS ||
+ irq >= NR_LOCAL_IRQS + ARRAY_SIZE(ictlr_info) * 32);
+
+ irq -= NR_LOCAL_IRQS;
+ base = ictlr + 0x100 * (irq / 32);
+ mask = BIT(irq % 32);
+
+ writel(mask, base + reg);
+}
+
+static void tegra_irq_eoi(struct irq_desc *desc)
+{
+ int irq = desc->irq;
+ if ( irq < NR_LOCAL_IRQS )
+ return;
+ //tegra_irq_write_mask(irq, ICTLR_CPU_IEP_FIR_CLR);
+}
+
+static void tegra_irq_mask(struct irq_desc *desc)
+{
+ int irq = desc->irq;
+ if ( irq < NR_LOCAL_IRQS )
+ return;
+ tegra_irq_write_mask(irq, ICTLR_CPU_IER_CLR);
+}
+
+static void tegra_irq_unmask(struct irq_desc *desc)
+{
+ int irq = desc->irq;
+ if ( irq < NR_LOCAL_IRQS )
+ return;
+ tegra_irq_write_mask(irq, ICTLR_CPU_IER_SET);
+}
+
static void tegra_route_irq_to_guest(struct domain *d, struct irq_desc *desc)
{
int irq = desc->irq;
@@ -256,7 +295,7 @@ static int map_one_spi(struct domain *d, const char *what,
*/
static int tegra_specific_mapping(struct domain *d)
{
- int ret;
+ int ret/*, i*/;
ret = map_one_mmio(d, "IRAM", paddr_to_pfn(0x40000000),
paddr_to_pfn(0x40040000));
@@ -312,6 +351,29 @@ static int tegra_specific_mapping(struct domain *d)
if ( ret )
goto err;
+#if 0
+ ret = map_one_spi(d, "PCI INTx", 98, DT_IRQ_TYPE_LEVEL_HIGH);
+ if ( ret )
+ goto err;
+
+ ret = map_one_spi(d, "PCI MSI", 99, DT_IRQ_TYPE_LEVEL_HIGH);
+ if ( ret )
+ goto err;
+
+ for ( i = 104 ; i < 119 ; i++ )
+ {
+ ret = map_one_spi(d, "AHB DMA", i, DT_IRQ_TYPE_LEVEL_HIGH);
+ if ( ret )
+ goto err;
+ }
+ for ( i = 128 ; i < 143 ; i++ )
+ {
+ ret = map_one_spi(d, "AHB DMA", i, DT_IRQ_TYPE_LEVEL_HIGH);
+ if ( ret )
+ goto err;
+ }
+#endif
+
register_mmio_handler(d, &tegra_mmio_ictlr, ICTLR_BASE, ICTLR_SIZE);
ret = 0;
@@ -379,6 +441,10 @@ PLATFORM_START(tegra, "TEGRA124")
.reset = tegra_reset,
.specific_mapping = tegra_specific_mapping,
+ .irq_eoi = tegra_irq_eoi,
+ .irq_mask = tegra_irq_mask,
+ .irq_unmask = tegra_irq_unmask,
+
.route_irq_to_guest = tegra_route_irq_to_guest,
.dom0_gnttab_start = 0x68000000,
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |