diff options
| author | Olof Johansson <olof@lixom.net> | 2011-12-11 18:56:44 -0500 |
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2011-12-11 18:56:44 -0500 |
| commit | 05da34d832d404ac9094db57e9295000207c9d62 (patch) | |
| tree | d0c60e673e527085aaddd76fb512311aa6159e40 | |
| parent | 5611cc4572e889b62a7b4c72a413536bf6a9c416 (diff) | |
| parent | eb3e1d9ded81a0036bb42b7c771307fa97f03dc9 (diff) | |
Merge branch 'omap/omap4' into next/pm
362 files changed, 3763 insertions, 3169 deletions
diff --git a/Documentation/arm/memory.txt b/Documentation/arm/memory.txt index 771d48d3b335..208a2d465b92 100644 --- a/Documentation/arm/memory.txt +++ b/Documentation/arm/memory.txt | |||
| @@ -51,15 +51,14 @@ ffc00000 ffefffff DMA memory mapping region. Memory returned | |||
| 51 | ff000000 ffbfffff Reserved for future expansion of DMA | 51 | ff000000 ffbfffff Reserved for future expansion of DMA |
| 52 | mapping region. | 52 | mapping region. |
| 53 | 53 | ||
| 54 | VMALLOC_END feffffff Free for platform use, recommended. | ||
| 55 | VMALLOC_END must be aligned to a 2MB | ||
| 56 | boundary. | ||
| 57 | |||
| 58 | VMALLOC_START VMALLOC_END-1 vmalloc() / ioremap() space. | 54 | VMALLOC_START VMALLOC_END-1 vmalloc() / ioremap() space. |
| 59 | Memory returned by vmalloc/ioremap will | 55 | Memory returned by vmalloc/ioremap will |
| 60 | be dynamically placed in this region. | 56 | be dynamically placed in this region. |
| 61 | VMALLOC_START may be based upon the value | 57 | Machine specific static mappings are also |
| 62 | of the high_memory variable. | 58 | located here through iotable_init(). |
| 59 | VMALLOC_START is based upon the value | ||
| 60 | of the high_memory variable, and VMALLOC_END | ||
| 61 | is equal to 0xff000000. | ||
| 63 | 62 | ||
| 64 | PAGE_OFFSET high_memory-1 Kernel direct-mapped RAM region. | 63 | PAGE_OFFSET high_memory-1 Kernel direct-mapped RAM region. |
| 65 | This maps the platforms RAM, and typically | 64 | This maps the platforms RAM, and typically |
diff --git a/Documentation/devicetree/bindings/arm/gic.txt b/Documentation/devicetree/bindings/arm/gic.txt index 52916b4aa1fe..9b4b82a721b6 100644 --- a/Documentation/devicetree/bindings/arm/gic.txt +++ b/Documentation/devicetree/bindings/arm/gic.txt | |||
| @@ -42,6 +42,10 @@ Optional | |||
| 42 | - interrupts : Interrupt source of the parent interrupt controller. Only | 42 | - interrupts : Interrupt source of the parent interrupt controller. Only |
| 43 | present on secondary GICs. | 43 | present on secondary GICs. |
| 44 | 44 | ||
| 45 | - cpu-offset : per-cpu offset within the distributor and cpu interface | ||
| 46 | regions, used when the GIC doesn't have banked registers. The offset is | ||
| 47 | cpu-offset * cpu-nr. | ||
| 48 | |||
| 45 | Example: | 49 | Example: |
| 46 | 50 | ||
| 47 | intc: interrupt-controller@fff11000 { | 51 | intc: interrupt-controller@fff11000 { |
diff --git a/Documentation/devicetree/bindings/arm/vic.txt b/Documentation/devicetree/bindings/arm/vic.txt new file mode 100644 index 000000000000..266716b23437 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/vic.txt | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | * ARM Vectored Interrupt Controller | ||
| 2 | |||
| 3 | One or more Vectored Interrupt Controllers (VIC's) can be connected in an ARM | ||
| 4 | system for interrupt routing. For multiple controllers they can either be | ||
| 5 | nested or have the outputs wire-OR'd together. | ||
| 6 | |||
| 7 | Required properties: | ||
| 8 | |||
| 9 | - compatible : should be one of | ||
| 10 | "arm,pl190-vic" | ||
| 11 | "arm,pl192-vic" | ||
| 12 | - interrupt-controller : Identifies the node as an interrupt controller | ||
| 13 | - #interrupt-cells : The number of cells to define the interrupts. Must be 1 as | ||
| 14 | the VIC has no configuration options for interrupt sources. The cell is a u32 | ||
| 15 | and defines the interrupt number. | ||
| 16 | - reg : The register bank for the VIC. | ||
| 17 | |||
| 18 | Optional properties: | ||
| 19 | |||
| 20 | - interrupts : Interrupt source for parent controllers if the VIC is nested. | ||
| 21 | |||
| 22 | Example: | ||
| 23 | |||
| 24 | vic0: interrupt-controller@60000 { | ||
| 25 | compatible = "arm,pl192-vic"; | ||
| 26 | interrupt-controller; | ||
| 27 | #interrupt-cells = <1>; | ||
| 28 | reg = <0x60000 0x1000>; | ||
| 29 | }; | ||
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig index 74df9ca2be31..81a933eb0903 100644 --- a/arch/arm/common/Kconfig +++ b/arch/arm/common/Kconfig | |||
| @@ -1,8 +1,14 @@ | |||
| 1 | config ARM_GIC | 1 | config ARM_GIC |
| 2 | select IRQ_DOMAIN | 2 | select IRQ_DOMAIN |
| 3 | select MULTI_IRQ_HANDLER | ||
| 4 | bool | ||
| 5 | |||
| 6 | config GIC_NON_BANKED | ||
| 3 | bool | 7 | bool |
| 4 | 8 | ||
| 5 | config ARM_VIC | 9 | config ARM_VIC |
| 10 | select IRQ_DOMAIN | ||
| 11 | select MULTI_IRQ_HANDLER | ||
| 6 | bool | 12 | bool |
| 7 | 13 | ||
| 8 | config ARM_VIC_NR | 14 | config ARM_VIC_NR |
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c index 410a546060a2..b2dc2dd7f1df 100644 --- a/arch/arm/common/gic.c +++ b/arch/arm/common/gic.c | |||
| @@ -40,13 +40,36 @@ | |||
| 40 | #include <linux/slab.h> | 40 | #include <linux/slab.h> |
| 41 | 41 | ||
| 42 | #include <asm/irq.h> | 42 | #include <asm/irq.h> |
| 43 | #include <asm/exception.h> | ||
| 43 | #include <asm/mach/irq.h> | 44 | #include <asm/mach/irq.h> |
| 44 | #include <asm/hardware/gic.h> | 45 | #include <asm/hardware/gic.h> |
| 45 | 46 | ||
| 46 | static DEFINE_RAW_SPINLOCK(irq_controller_lock); | 47 | union gic_base { |
| 48 | void __iomem *common_base; | ||
| 49 | void __percpu __iomem **percpu_base; | ||
| 50 | }; | ||
| 47 | 51 | ||
| 48 | /* Address of GIC 0 CPU interface */ | 52 | struct gic_chip_data { |
| 49 | void __iomem *gic_cpu_base_addr __read_mostly; | 53 | unsigned int irq_offset; |
| 54 | union gic_base dist_base; | ||
| 55 | union gic_base cpu_base; | ||
| 56 | #ifdef CONFIG_CPU_PM | ||
| 57 | u32 saved_spi_enable[DIV_ROUND_UP(1020, 32)]; | ||
| 58 | u32 saved_spi_conf[DIV_ROUND_UP(1020, 16)]; | ||
| 59 | u32 saved_spi_target[DIV_ROUND_UP(1020, 4)]; | ||
| 60 | u32 __percpu *saved_ppi_enable; | ||
| 61 | u32 __percpu *saved_ppi_conf; | ||
| 62 | #endif | ||
| 63 | #ifdef CONFIG_IRQ_DOMAIN | ||
| 64 | struct irq_domain domain; | ||
| 65 | #endif | ||
| 66 | unsigned int gic_irqs; | ||
| 67 | #ifdef CONFIG_GIC_NON_BANKED | ||
| 68 | void __iomem *(*get_base)(union gic_base *); | ||
| 69 | #endif | ||
| 70 | }; | ||
| 71 | |||
| 72 | static DEFINE_RAW_SPINLOCK(irq_controller_lock); | ||
| 50 | 73 | ||
| 51 | /* | 74 | /* |
| 52 | * Supported arch specific GIC irq extension. | 75 | * Supported arch specific GIC irq extension. |
| @@ -67,16 +90,48 @@ struct irq_chip gic_arch_extn = { | |||
| 67 | 90 | ||
| 68 | static struct gic_chip_data gic_data[MAX_GIC_NR] __read_mostly; | 91 | static struct gic_chip_data gic_data[MAX_GIC_NR] __read_mostly; |
| 69 | 92 | ||
| 93 | #ifdef CONFIG_GIC_NON_BANKED | ||
| 94 | static void __iomem *gic_get_percpu_base(union gic_base *base) | ||
| 95 | { | ||
| 96 | return *__this_cpu_ptr(base->percpu_base); | ||
| 97 | } | ||
| 98 | |||
| 99 | static void __iomem *gic_get_common_base(union gic_base *base) | ||
| 100 | { | ||
| 101 | return base->common_base; | ||
| 102 | } | ||
| 103 | |||
| 104 | static inline void __iomem *gic_data_dist_base(struct gic_chip_data *data) | ||
| 105 | { | ||
| 106 | return data->get_base(&data->dist_base); | ||
| 107 | } | ||
| 108 | |||
| 109 | static inline void __iomem *gic_data_cpu_base(struct gic_chip_data *data) | ||
| 110 | { | ||
| 111 | return data->get_base(&data->cpu_base); | ||
| 112 | } | ||
| 113 | |||
| 114 | static inline void gic_set_base_accessor(struct gic_chip_data *data, | ||
| 115 | void __iomem *(*f)(union gic_base *)) | ||
| 116 | { | ||
| 117 | data->get_base = f; | ||
| 118 | } | ||
| 119 | #else | ||
| 120 | #define gic_data_dist_base(d) ((d)->dist_base.common_base) | ||
| 121 | #define gic_data_cpu_base(d) ((d)->cpu_base.common_base) | ||
| 122 | #define gic_set_base_accessor(d,f) | ||
| 123 | #endif | ||
| 124 | |||
| 70 | static inline void __iomem *gic_dist_base(struct irq_data *d) | 125 | static inline void __iomem *gic_dist_base(struct irq_data *d) |
| 71 | { | 126 | { |
| 72 | struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d); | 127 | struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d); |
| 73 | return gic_data->dist_base; | 128 | return gic_data_dist_base(gic_data); |
| 74 | } | 129 | } |
| 75 | 130 | ||
| 76 | static inline void __iomem *gic_cpu_base(struct irq_data *d) | 131 | static inline void __iomem *gic_cpu_base(struct irq_data *d) |
| 77 | { | 132 | { |
| 78 | struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d); | 133 | struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d); |
| 79 | return gic_data->cpu_base; | 134 | return gic_data_cpu_base(gic_data); |
| 80 | } | 135 | } |
| 81 | 136 | ||
| 82 | static inline unsigned int gic_irq(struct irq_data *d) | 137 | static inline unsigned int gic_irq(struct irq_data *d) |
| @@ -215,6 +270,32 @@ static int gic_set_wake(struct irq_data *d, unsigned int on) | |||
| 215 | #define gic_set_wake NULL | 270 | #define gic_set_wake NULL |
| 216 | #endif | 271 | #endif |
| 217 | 272 | ||
| 273 | asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) | ||
| 274 | { | ||
| 275 | u32 irqstat, irqnr; | ||
| 276 | struct gic_chip_data *gic = &gic_data[0]; | ||
| 277 | void __iomem *cpu_base = gic_data_cpu_base(gic); | ||
| 278 | |||
| 279 | do { | ||
| 280 | irqstat = readl_relaxed(cpu_base + GIC_CPU_INTACK); | ||
| 281 | irqnr = irqstat & ~0x1c00; | ||
| 282 | |||
| 283 | if (likely(irqnr > 15 && irqnr < 1021)) { | ||
| 284 | irqnr = irq_domain_to_irq(&gic->domain, irqnr); | ||
| 285 | handle_IRQ(irqnr, regs); | ||
| 286 | continue; | ||
| 287 | } | ||
| 288 | if (irqnr < 16) { | ||
| 289 | writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI); | ||
| 290 | #ifdef CONFIG_SMP | ||
| 291 | handle_IPI(irqnr, regs); | ||
| 292 | #endif | ||
| 293 | continue; | ||
| 294 | } | ||
| 295 | break; | ||
| 296 | } while (1); | ||
| 297 | } | ||
| 298 | |||
| 218 | static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) | 299 | static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) |
| 219 | { | 300 | { |
| 220 | struct gic_chip_data *chip_data = irq_get_handler_data(irq); | 301 | struct gic_chip_data *chip_data = irq_get_handler_data(irq); |
| @@ -225,7 +306,7 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) | |||
| 225 | chained_irq_enter(chip, desc); | 306 | chained_irq_enter(chip, desc); |
| 226 | 307 | ||
| 227 | raw_spin_lock(&irq_controller_lock); | 308 | raw_spin_lock(&irq_controller_lock); |
| 228 | status = readl_relaxed(chip_data->cpu_base + GIC_CPU_INTACK); | 309 | status = readl_relaxed(gic_data_cpu_base(chip_data) + GIC_CPU_INTACK); |
| 229 | raw_spin_unlock(&irq_controller_lock); | 310 | raw_spin_unlock(&irq_controller_lock); |
| 230 | 311 | ||
| 231 | gic_irq = (status & 0x3ff); | 312 | gic_irq = (status & 0x3ff); |
| @@ -270,7 +351,7 @@ static void __init gic_dist_init(struct gic_chip_data *gic) | |||
| 270 | u32 cpumask; | 351 | u32 cpumask; |
| 271 | unsigned int gic_irqs = gic->gic_irqs; | 352 | unsigned int gic_irqs = gic->gic_irqs; |
| 272 | struct irq_domain *domain = &gic->domain; | 353 | struct irq_domain *domain = &gic->domain; |
| 273 | void __iomem *base = gic->dist_base; | 354 | void __iomem *base = gic_data_dist_base(gic); |
| 274 | u32 cpu = 0; | 355 | u32 cpu = 0; |
| 275 | 356 | ||
| 276 | #ifdef CONFIG_SMP | 357 | #ifdef CONFIG_SMP |
| @@ -330,8 +411,8 @@ static void __init gic_dist_init(struct gic_chip_data *gic) | |||
| 330 | 411 | ||
| 331 | static void __cpuinit gic_cpu_init(struct gic_chip_data *gic) | 412 | static void __cpuinit gic_cpu_init(struct gic_chip_data *gic) |
| 332 | { | 413 | { |
| 333 | void __iomem *dist_base = gic->dist_base; | 414 | void __iomem *dist_base = gic_data_dist_base(gic); |
| 334 | void __iomem *base = gic->cpu_base; | 415 | void __iomem *base = gic_data_cpu_base(gic); |
| 335 | int i; | 416 | int i; |
| 336 | 417 | ||
| 337 | /* | 418 | /* |
| @@ -368,7 +449,7 @@ static void gic_dist_save(unsigned int gic_nr) | |||
| 368 | BUG(); | 449 | BUG(); |
| 369 | 450 | ||
| 370 | gic_irqs = gic_data[gic_nr].gic_irqs; | 451 | gic_irqs = gic_data[gic_nr].gic_irqs; |
| 371 | dist_base = gic_data[gic_nr].dist_base; | 452 | dist_base = gic_data_dist_base(&gic_data[gic_nr]); |
| 372 | 453 | ||
| 373 | if (!dist_base) | 454 | if (!dist_base) |
| 374 | return; | 455 | return; |
| @@ -403,7 +484,7 @@ static void gic_dist_restore(unsigned int gic_nr) | |||
| 403 | BUG(); | 484 | BUG(); |
| 404 | 485 | ||
| 405 | gic_irqs = gic_data[gic_nr].gic_irqs; | 486 | gic_irqs = gic_data[gic_nr].gic_irqs; |
| 406 | dist_base = gic_data[gic_nr].dist_base; | 487 | dist_base = gic_data_dist_base(&gic_data[gic_nr]); |
| 407 | 488 | ||
| 408 | if (!dist_base) | 489 | if (!dist_base) |
| 409 | return; | 490 | return; |
| @@ -439,8 +520,8 @@ static void gic_cpu_save(unsigned int gic_nr) | |||
| 439 | if (gic_nr >= MAX_GIC_NR) | 520 | if (gic_nr >= MAX_GIC_NR) |
| 440 | BUG(); | 521 | BUG(); |
| 441 | 522 | ||
| 442 | dist_base = gic_data[gic_nr].dist_base; | 523 | dist_base = gic_data_dist_base(&gic_data[gic_nr]); |
| 443 | cpu_base = gic_data[gic_nr].cpu_base; | 524 | cpu_base = gic_data_cpu_base(&gic_data[gic_nr]); |
| 444 | 525 | ||
| 445 | if (!dist_base || !cpu_base) | 526 | if (!dist_base || !cpu_base) |
| 446 | return; | 527 | return; |
| @@ -465,8 +546,8 @@ static void gic_cpu_restore(unsigned int gic_nr) | |||
| 465 | if (gic_nr >= MAX_GIC_NR) | 546 | if (gic_nr >= MAX_GIC_NR) |
| 466 | BUG(); | 547 | BUG(); |
| 467 | 548 | ||
| 468 | dist_base = gic_data[gic_nr].dist_base; | 549 | dist_base = gic_data_dist_base(&gic_data[gic_nr]); |
| 469 | cpu_base = gic_data[gic_nr].cpu_base; | 550 | cpu_base = gic_data_cpu_base(&gic_data[gic_nr]); |
| 470 | 551 | ||
| 471 | if (!dist_base || !cpu_base) | 552 | if (!dist_base || !cpu_base) |
| 472 | return; | 553 | return; |
| @@ -491,6 +572,11 @@ static int gic_notifier(struct notifier_block *self, unsigned long cmd, void *v) | |||
| 491 | int i; | 572 | int i; |
| 492 | 573 | ||
| 493 | for (i = 0; i < MAX_GIC_NR; i++) { | 574 | for (i = 0; i < MAX_GIC_NR; i++) { |
| 575 | #ifdef CONFIG_GIC_NON_BANKED | ||
| 576 | /* Skip over unused GICs */ | ||
| 577 | if (!gic_data[i].get_base) | ||
| 578 | continue; | ||
| 579 | #endif | ||
| 494 | switch (cmd) { | 580 | switch (cmd) { |
| 495 | case CPU_PM_ENTER: | 581 | case CPU_PM_ENTER: |
| 496 | gic_cpu_save(i); | 582 | gic_cpu_save(i); |
| @@ -564,8 +650,9 @@ const struct irq_domain_ops gic_irq_domain_ops = { | |||
| 564 | #endif | 650 | #endif |
| 565 | }; | 651 | }; |
| 566 | 652 | ||
| 567 | void __init gic_init(unsigned int gic_nr, int irq_start, | 653 | void __init gic_init_bases(unsigned int gic_nr, int irq_start, |
| 568 | void __iomem *dist_base, void __iomem *cpu_base) | 654 | void __iomem *dist_base, void __iomem *cpu_base, |
| 655 | u32 percpu_offset) | ||
| 569 | { | 656 | { |
| 570 | struct gic_chip_data *gic; | 657 | struct gic_chip_data *gic; |
| 571 | struct irq_domain *domain; | 658 | struct irq_domain *domain; |
| @@ -575,8 +662,36 @@ void __init gic_init(unsigned int gic_nr, int irq_start, | |||
| 575 | 662 | ||
| 576 | gic = &gic_data[gic_nr]; | 663 | gic = &gic_data[gic_nr]; |
| 577 | domain = &gic->domain; | 664 | domain = &gic->domain; |
| 578 | gic->dist_base = dist_base; | 665 | #ifdef CONFIG_GIC_NON_BANKED |
| 579 | gic->cpu_base = cpu_base; | 666 | if (percpu_offset) { /* Frankein-GIC without banked registers... */ |
| 667 | unsigned int cpu; | ||
| 668 | |||
| 669 | gic->dist_base.percpu_base = alloc_percpu(void __iomem *); | ||
| 670 | gic->cpu_base.percpu_base = alloc_percpu(void __iomem *); | ||
| 671 | if (WARN_ON(!gic->dist_base.percpu_base || | ||
| 672 | !gic->cpu_base.percpu_base)) { | ||
| 673 | free_percpu(gic->dist_base.percpu_base); | ||
| 674 | free_percpu(gic->cpu_base.percpu_base); | ||
| 675 | return; | ||
| 676 | } | ||
| 677 | |||
| 678 | for_each_possible_cpu(cpu) { | ||
| 679 | unsigned long offset = percpu_offset * cpu_logical_map(cpu); | ||
| 680 | *per_cpu_ptr(gic->dist_base.percpu_base, cpu) = dist_base + offset; | ||
| 681 | *per_cpu_ptr(gic->cpu_base.percpu_base, cpu) = cpu_base + offset; | ||
| 682 | } | ||
| 683 | |||
| 684 | gic_set_base_accessor(gic, gic_get_percpu_base); | ||
| 685 | } else | ||
| 686 | #endif | ||
| 687 | { /* Normal, sane GIC... */ | ||
| 688 | WARN(percpu_offset, | ||
| 689 | "GIC_NON_BANKED not enabled, ignoring %08x offset!", | ||
| 690 | percpu_offset); | ||
| 691 | gic->dist_base.common_base = dist_base; | ||
| 692 | gic->cpu_base.common_base = cpu_base; | ||
| 693 | gic_set_base_accessor(gic, gic_get_common_base); | ||
| 694 | } | ||
| 580 | 695 | ||
| 581 | /* | 696 | /* |
| 582 | * For primary GICs, skip over SGIs. | 697 | * For primary GICs, skip over SGIs. |
| @@ -584,8 +699,6 @@ void __init gic_init(unsigned int gic_nr, int irq_start, | |||
| 584 | */ | 699 | */ |
| 585 | domain->hwirq_base = 32; | 700 | domain->hwirq_base = 32; |
| 586 | if (gic_nr == 0) { | 701 | if (gic_nr == 0) { |
| 587 | gic_cpu_base_addr = cpu_base; | ||
| 588 | |||
| 589 | if ((irq_start & 31) > 0) { | 702 | if ((irq_start & 31) > 0) { |
| 590 | domain->hwirq_base = 16; | 703 | domain->hwirq_base = 16; |
| 591 | if (irq_start != -1) | 704 | if (irq_start != -1) |
| @@ -597,7 +710,7 @@ void __init gic_init(unsigned int gic_nr, int irq_start, | |||
| 597 | * Find out how many interrupts are supported. | 710 | * Find out how many interrupts are supported. |
| 598 | * The GIC only supports up to 1020 interrupt sources. | 711 | * The GIC only supports up to 1020 interrupt sources. |
| 599 | */ | 712 | */ |
| 600 | gic_irqs = readl_relaxed(dist_base + GIC_DIST_CTR) & 0x1f; | 713 | gic_irqs = readl_relaxed(gic_data_dist_base(gic) + GIC_DIST_CTR) & 0x1f; |
| 601 | gic_irqs = (gic_irqs + 1) * 32; | 714 | gic_irqs = (gic_irqs + 1) * 32; |
| 602 | if (gic_irqs > 1020) | 715 | if (gic_irqs > 1020) |
| 603 | gic_irqs = 1020; | 716 | gic_irqs = 1020; |
| @@ -645,7 +758,7 @@ void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) | |||
| 645 | dsb(); | 758 | dsb(); |
| 646 | 759 | ||
| 647 | /* this always happens on GIC0 */ | 760 | /* this always happens on GIC0 */ |
| 648 | writel_relaxed(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT); | 761 | writel_relaxed(map << 16 | irq, gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT); |
| 649 | } | 762 | } |
| 650 | #endif | 763 | #endif |
| 651 | 764 | ||
| @@ -656,6 +769,7 @@ int __init gic_of_init(struct device_node *node, struct device_node *parent) | |||
| 656 | { | 769 | { |
| 657 | void __iomem *cpu_base; | 770 | void __iomem *cpu_base; |
| 658 | void __iomem *dist_base; | 771 | void __iomem *dist_base; |
| 772 | u32 percpu_offset; | ||
| 659 | int irq; | 773 | int irq; |
| 660 | struct irq_domain *domain = &gic_data[gic_cnt].domain; | 774 | struct irq_domain *domain = &gic_data[gic_cnt].domain; |
| 661 | 775 | ||
| @@ -668,9 +782,12 @@ int __init gic_of_init(struct device_node *node, struct device_node *parent) | |||
| 668 | cpu_base = of_iomap(node, 1); | 782 | cpu_base = of_iomap(node, 1); |
| 669 | WARN(!cpu_base, "unable to map gic cpu registers\n"); | 783 | WARN(!cpu_base, "unable to map gic cpu registers\n"); |
| 670 | 784 | ||
| 785 | if (of_property_read_u32(node, "cpu-offset", &percpu_offset)) | ||
| 786 | percpu_offset = 0; | ||
| 787 | |||
| 671 | domain->of_node = of_node_get(node); | 788 | domain->of_node = of_node_get(node); |
| 672 | 789 | ||
| 673 | gic_init(gic_cnt, -1, dist_base, cpu_base); | 790 | gic_init_bases(gic_cnt, -1, dist_base, cpu_base, percpu_offset); |
| 674 | 791 | ||
| 675 | if (parent) { | 792 | if (parent) { |
| 676 | irq = irq_of_parse_and_map(node, 0); | 793 | irq = irq_of_parse_and_map(node, 0); |
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c index 01f18a421b17..6ed41ec2bbf5 100644 --- a/arch/arm/common/vic.c +++ b/arch/arm/common/vic.c | |||
| @@ -19,17 +19,22 @@ | |||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <linux/export.h> | ||
| 22 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 23 | #include <linux/list.h> | 24 | #include <linux/list.h> |
| 24 | #include <linux/io.h> | 25 | #include <linux/io.h> |
| 26 | #include <linux/irqdomain.h> | ||
| 27 | #include <linux/of.h> | ||
| 28 | #include <linux/of_address.h> | ||
| 29 | #include <linux/of_irq.h> | ||
| 25 | #include <linux/syscore_ops.h> | 30 | #include <linux/syscore_ops.h> |
| 26 | #include <linux/device.h> | 31 | #include <linux/device.h> |
| 27 | #include <linux/amba/bus.h> | 32 | #include <linux/amba/bus.h> |
| 28 | 33 | ||
| 34 | #include <asm/exception.h> | ||
| 29 | #include <asm/mach/irq.h> | 35 | #include <asm/mach/irq.h> |
| 30 | #include <asm/hardware/vic.h> | 36 | #include <asm/hardware/vic.h> |
| 31 | 37 | ||
| 32 | #ifdef CONFIG_PM | ||
| 33 | /** | 38 | /** |
| 34 | * struct vic_device - VIC PM device | 39 | * struct vic_device - VIC PM device |
| 35 | * @irq: The IRQ number for the base of the VIC. | 40 | * @irq: The IRQ number for the base of the VIC. |
| @@ -40,6 +45,7 @@ | |||
| 40 | * @int_enable: Save for VIC_INT_ENABLE. | 45 | * @int_enable: Save for VIC_INT_ENABLE. |
| 41 | * @soft_int: Save for VIC_INT_SOFT. | 46 | * @soft_int: Save for VIC_INT_SOFT. |
| 42 | * @protect: Save for VIC_PROTECT. | 47 | * @protect: Save for VIC_PROTECT. |
| 48 | * @domain: The IRQ domain for the VIC. | ||
| 43 | */ | 49 | */ |
| 44 | struct vic_device { | 50 | struct vic_device { |
| 45 | void __iomem *base; | 51 | void __iomem *base; |
| @@ -50,13 +56,13 @@ struct vic_device { | |||
| 50 | u32 int_enable; | 56 | u32 int_enable; |
| 51 | u32 soft_int; | 57 | u32 soft_int; |
| 52 | u32 protect; | 58 | u32 protect; |
| 59 | struct irq_domain domain; | ||
| 53 | }; | 60 | }; |
| 54 | 61 | ||
| 55 | /* we cannot allocate memory when VICs are initially registered */ | 62 | /* we cannot allocate memory when VICs are initially registered */ |
| 56 | static struct vic_device vic_devices[CONFIG_ARM_VIC_NR]; | 63 | static struct vic_device vic_devices[CONFIG_ARM_VIC_NR]; |
| 57 | 64 | ||
| 58 | static int vic_id; | 65 | static int vic_id; |
| 59 | #endif /* CONFIG_PM */ | ||
| 60 | 66 | ||
| 61 | /** | 67 | /** |
| 62 | * vic_init2 - common initialisation code | 68 | * vic_init2 - common initialisation code |
| @@ -156,39 +162,50 @@ static int __init vic_pm_init(void) | |||
| 156 | return 0; | 162 | return 0; |
| 157 | } | 163 | } |
| 158 | late_initcall(vic_pm_init); | 164 | late_initcall(vic_pm_init); |
| 165 | #endif /* CONFIG_PM */ | ||
| 159 | 166 | ||
| 160 | /** | 167 | /** |
| 161 | * vic_pm_register - Register a VIC for later power management control | 168 | * vic_register() - Register a VIC. |
| 162 | * @base: The base address of the VIC. | 169 | * @base: The base address of the VIC. |
| 163 | * @irq: The base IRQ for the VIC. | 170 | * @irq: The base IRQ for the VIC. |
| 164 | * @resume_sources: bitmask of interrupts allowed for resume sources. | 171 | * @resume_sources: bitmask of interrupts allowed for resume sources. |
| 172 | * @node: The device tree node associated with the VIC. | ||
| 165 | * | 173 | * |
| 166 | * Register the VIC with the system device tree so that it can be notified | 174 | * Register the VIC with the system device tree so that it can be notified |
| 167 | * of suspend and resume requests and ensure that the correct actions are | 175 | * of suspend and resume requests and ensure that the correct actions are |
| 168 | * taken to re-instate the settings on resume. | 176 | * taken to re-instate the settings on resume. |
| 177 | * | ||
| 178 | * This also configures the IRQ domain for the VIC. | ||
| 169 | */ | 179 | */ |
| 170 | static void __init vic_pm_register(void __iomem *base, unsigned int irq, u32 resume_sources) | 180 | static void __init vic_register(void __iomem *base, unsigned int irq, |
| 181 | u32 resume_sources, struct device_node *node) | ||
| 171 | { | 182 | { |
| 172 | struct vic_device *v; | 183 | struct vic_device *v; |
| 173 | 184 | ||
| 174 | if (vic_id >= ARRAY_SIZE(vic_devices)) | 185 | if (vic_id >= ARRAY_SIZE(vic_devices)) { |
| 175 | printk(KERN_ERR "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", __func__); | 186 | printk(KERN_ERR "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", __func__); |
| 176 | else { | 187 | return; |
| 177 | v = &vic_devices[vic_id]; | ||
| 178 | v->base = base; | ||
| 179 | v->resume_sources = resume_sources; | ||
| 180 | v->irq = irq; | ||
| 181 | vic_id++; | ||
| 182 | } | 188 | } |
| 189 | |||
| 190 | v = &vic_devices[vic_id]; | ||
| 191 | v->base = base; | ||
| 192 | v->resume_sources = resume_sources; | ||
| 193 | v->irq = irq; | ||
| 194 | vic_id++; | ||
| 195 | |||
| 196 | v->domain.irq_base = irq; | ||
| 197 | v->domain.nr_irq = 32; | ||
| 198 | #ifdef CONFIG_OF_IRQ | ||
| 199 | v->domain.of_node = of_node_get(node); | ||
| 200 | v->domain.ops = &irq_domain_simple_ops; | ||
| 201 | #endif /* CONFIG_OF */ | ||
| 202 | irq_domain_add(&v->domain); | ||
| 183 | } | 203 | } |
| 184 | #else | ||
| 185 | static inline void vic_pm_register(void __iomem *base, unsigned int irq, u32 arg1) { } | ||
| 186 | #endif /* CONFIG_PM */ | ||
| 187 | 204 | ||
| 188 | static void vic_ack_irq(struct irq_data *d) | 205 | static void vic_ack_irq(struct irq_data *d) |
| 189 | { | 206 | { |
| 190 | void __iomem *base = irq_data_get_irq_chip_data(d); | 207 | void __iomem *base = irq_data_get_irq_chip_data(d); |
| 191 | unsigned int irq = d->irq & 31; | 208 | unsigned int irq = d->hwirq; |
| 192 | writel(1 << irq, base + VIC_INT_ENABLE_CLEAR); | 209 | writel(1 << irq, base + VIC_INT_ENABLE_CLEAR); |
| 193 | /* moreover, clear the soft-triggered, in case it was the reason */ | 210 | /* moreover, clear the soft-triggered, in case it was the reason */ |
| 194 | writel(1 << irq, base + VIC_INT_SOFT_CLEAR); | 211 | writel(1 << irq, base + VIC_INT_SOFT_CLEAR); |
| @@ -197,14 +214,14 @@ static void vic_ack_irq(struct irq_data *d) | |||
| 197 | static void vic_mask_irq(struct irq_data *d) | 214 | static void vic_mask_irq(struct irq_data *d) |
| 198 | { | 215 | { |
| 199 | void __iomem *base = irq_data_get_irq_chip_data(d); | 216 | void __iomem *base = irq_data_get_irq_chip_data(d); |
| 200 | unsigned int irq = d->irq & 31; | 217 | unsigned int irq = d->hwirq; |
| 201 | writel(1 << irq, base + VIC_INT_ENABLE_CLEAR); | 218 | writel(1 << irq, base + VIC_INT_ENABLE_CLEAR); |
| 202 | } | 219 | } |
| 203 | 220 | ||
| 204 | static void vic_unmask_irq(struct irq_data *d) | 221 | static void vic_unmask_irq(struct irq_data *d) |
| 205 | { | 222 | { |
| 206 | void __iomem *base = irq_data_get_irq_chip_data(d); | 223 | void __iomem *base = irq_data_get_irq_chip_data(d); |
| 207 | unsigned int irq = d->irq & 31; | 224 | unsigned int irq = d->hwirq; |
| 208 | writel(1 << irq, base + VIC_INT_ENABLE); | 225 | writel(1 << irq, base + VIC_INT_ENABLE); |
| 209 | } | 226 | } |
| 210 | 227 | ||
| @@ -226,7 +243,7 @@ static struct vic_device *vic_from_irq(unsigned int irq) | |||
| 226 | static int vic_set_wake(struct irq_data *d, unsigned int on) | 243 | static int vic_set_wake(struct irq_data *d, unsigned int on) |
| 227 | { | 244 | { |
| 228 | struct vic_device *v = vic_from_irq(d->irq); | 245 | struct vic_device *v = vic_from_irq(d->irq); |
| 229 | unsigned int off = d->irq & 31; | 246 | unsigned int off = d->hwirq; |
| 230 | u32 bit = 1 << off; | 247 | u32 bit = 1 << off; |
| 231 | 248 | ||
| 232 | if (!v) | 249 | if (!v) |
| @@ -330,15 +347,9 @@ static void __init vic_init_st(void __iomem *base, unsigned int irq_start, | |||
| 330 | vic_set_irq_sources(base, irq_start, vic_sources); | 347 | vic_set_irq_sources(base, irq_start, vic_sources); |
| 331 | } | 348 | } |
| 332 | 349 | ||
| 333 | /** | 350 | static void __init __vic_init(void __iomem *base, unsigned int irq_start, |
| 334 | * vic_init - initialise a vectored interrupt controller | 351 | u32 vic_sources, u32 resume_sources, |
| 335 | * @base: iomem base address | 352 | struct device_node *node) |
| 336 | * @irq_start: starting interrupt number, must be muliple of 32 | ||
| 337 | * @vic_sources: bitmask of interrupt sources to allow | ||
| 338 | * @resume_sources: bitmask of interrupt sources to allow for resume | ||
| 339 | */ | ||
| 340 | void __init vic_init(void __iomem *base, unsigned int irq_start, | ||
| 341 | u32 vic_sources, u32 resume_sources) | ||
| 342 | { | 353 | { |
| 343 | unsigned int i; | 354 | unsigned int i; |
| 344 | u32 cellid = 0; | 355 | u32 cellid = 0; |
| @@ -375,5 +386,81 @@ void __init vic_init(void __iomem *base, unsigned int irq_start, | |||
| 375 | 386 | ||
| 376 | vic_set_irq_sources(base, irq_start, vic_sources); | 387 | vic_set_irq_sources(base, irq_start, vic_sources); |
| 377 | 388 | ||
| 378 | vic_pm_register(base, irq_start, resume_sources); | 389 | vic_register(base, irq_start, resume_sources, node); |
| 390 | } | ||
| 391 | |||
| 392 | /** | ||
| 393 | * vic_init() - initialise a vectored interrupt controller | ||
| 394 | * @base: iomem base address | ||
| 395 | * @irq_start: starting interrupt number, must be muliple of 32 | ||
| 396 | * @vic_sources: bitmask of interrupt sources to allow | ||
| 397 | * @resume_sources: bitmask of interrupt sources to allow for resume | ||
| 398 | */ | ||
| 399 | void __init vic_init(void __iomem *base, unsigned int irq_start, | ||
| 400 | u32 vic_sources, u32 resume_sources) | ||
| 401 | { | ||
| 402 | __vic_init(base, irq_start, vic_sources, resume_sources, NULL); | ||
| 403 | } | ||
| 404 | |||
| 405 | #ifdef CONFIG_OF | ||
| 406 | int __init vic_of_init(struct device_node *node, struct device_node *parent) | ||
| 407 | { | ||
| 408 | void __iomem *regs; | ||
| 409 | int irq_base; | ||
| 410 | |||
| 411 | if (WARN(parent, "non-root VICs are not supported")) | ||
| 412 | return -EINVAL; | ||
| 413 | |||
| 414 | regs = of_iomap(node, 0); | ||
| 415 | if (WARN_ON(!regs)) | ||
| 416 | return -EIO; | ||
| 417 | |||
| 418 | irq_base = irq_alloc_descs(-1, 0, 32, numa_node_id()); | ||
| 419 | if (WARN_ON(irq_base < 0)) | ||
| 420 | goto out_unmap; | ||
| 421 | |||
| 422 | __vic_init(regs, irq_base, ~0, ~0, node); | ||
| 423 | |||
| 424 | return 0; | ||
| 425 | |||
| 426 | out_unmap: | ||
| 427 | iounmap(regs); | ||
| 428 | |||
| 429 | return -EIO; | ||
| 430 | } | ||
| 431 | #endif /* CONFIG OF */ | ||
| 432 | |||
| 433 | /* | ||
| 434 | * Handle each interrupt in a single VIC. Returns non-zero if we've | ||
| 435 | * handled at least one interrupt. This does a single read of the | ||
| 436 | * status register and handles all interrupts in order from LSB first. | ||
| 437 | */ | ||
| 438 | static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs) | ||
| 439 | { | ||
| 440 | u32 stat, irq; | ||
| 441 | int handled = 0; | ||
| 442 | |||
| 443 | stat = readl_relaxed(vic->base + VIC_IRQ_STATUS); | ||
| 444 | while (stat) { | ||
| 445 | irq = ffs(stat) - 1; | ||
| 446 | handle_IRQ(irq_domain_to_irq(&vic->domain, irq), regs); | ||
| 447 | stat &= ~(1 << irq); | ||
| 448 | handled = 1; | ||
| 449 | } | ||
| 450 | |||
| 451 | return handled; | ||
| 452 | } | ||
| 453 | |||
| 454 | /* | ||
| 455 | * Keep iterating over all registered VIC's until there are no pending | ||
| 456 | * interrupts. | ||
| 457 | */ | ||
| 458 | asmlinkage void __exception_irq_entry vic_handle_irq(struct pt_regs *regs) | ||
| 459 | { | ||
| 460 | int i, handled; | ||
| 461 | |||
| 462 | do { | ||
| 463 | for (i = 0, handled = 0; i < vic_id; ++i) | ||
| 464 | handled |= handle_one_vic(&vic_devices[i], regs); | ||
| 465 | } while (handled); | ||
| 379 | } | 466 | } |
diff --git a/arch/arm/include/asm/cti.h b/arch/arm/include/asm/cti.h new file mode 100644 index 000000000000..a0ada3ea4358 --- /dev/null +++ b/arch/arm/include/asm/cti.h | |||
| @@ -0,0 +1,179 @@ | |||
| 1 | #ifndef __ASMARM_CTI_H | ||
| 2 | #define __ASMARM_CTI_H | ||
| 3 | |||
| 4 | #include <asm/io.h> | ||
| 5 | |||
| 6 | /* The registers' definition is from section 3.2 of | ||
| 7 | * Embedded Cross Trigger Revision: r0p0 | ||
| 8 | */ | ||
| 9 | #define CTICONTROL 0x000 | ||
| 10 | #define CTISTATUS 0x004 | ||
| 11 | #define CTILOCK 0x008 | ||
| 12 | #define CTIPROTECTION 0x00C | ||
| 13 | #define CTIINTACK 0x010 | ||
| 14 | #define CTIAPPSET 0x014 | ||
| 15 | #define CTIAPPCLEAR 0x018 | ||
| 16 | #define CTIAPPPULSE 0x01c | ||
| 17 | #define CTIINEN 0x020 | ||
| 18 | #define CTIOUTEN 0x0A0 | ||
| 19 | #define CTITRIGINSTATUS 0x130 | ||
| 20 | #define CTITRIGOUTSTATUS 0x134 | ||
| 21 | #define CTICHINSTATUS 0x138 | ||
| 22 | #define CTICHOUTSTATUS 0x13c | ||
| 23 | #define CTIPERIPHID0 0xFE0 | ||
| 24 | #define CTIPERIPHID1 0xFE4 | ||
| 25 | #define CTIPERIPHID2 0xFE8 | ||
| 26 | #define CTIPERIPHID3 0xFEC | ||
| 27 | #define CTIPCELLID0 0xFF0 | ||
| 28 | #define CTIPCELLID1 0xFF4 | ||
| 29 | #define CTIPCELLID2 0xFF8 | ||
| 30 | #define CTIPCELLID3 0xFFC | ||
| 31 | |||
| 32 | /* The below are from section 3.6.4 of | ||
| 33 | * CoreSight v1.0 Architecture Specification | ||
| 34 | */ | ||
| 35 | #define LOCKACCESS 0xFB0 | ||
| 36 | #define LOCKSTATUS 0xFB4 | ||
| 37 | |||
| 38 | /* write this value to LOCKACCESS will unlock the module, and | ||
| 39 | * other value will lock the module | ||
| 40 | */ | ||
| 41 | #define LOCKCODE 0xC5ACCE55 | ||
| 42 | |||
| 43 | /** | ||
| 44 | * struct cti - cross trigger interface struct | ||
| 45 | * @base: mapped virtual address for the cti base | ||
| 46 | * @irq: irq number for the cti | ||
| 47 | * @trig_out_for_irq: triger out number which will cause | ||
| 48 | * the @irq happen | ||
| 49 | * | ||
| 50 | * cti struct used to operate cti registers. | ||
| 51 | */ | ||
| 52 | struct cti { | ||
| 53 | void __iomem *base; | ||
| 54 | int irq; | ||
| 55 | int trig_out_for_irq; | ||
| 56 | }; | ||
| 57 | |||
| 58 | /** | ||
| 59 | * cti_init - initialize the cti instance | ||
| 60 | * @cti: cti instance | ||
| 61 | * @base: mapped virtual address for the cti base | ||
| 62 | * @irq: irq number for the cti | ||
| 63 | * @trig_out: triger out number which will cause | ||
| 64 | * the @irq happen | ||
| 65 | * | ||
| 66 | * called by machine code to pass the board dependent | ||
| 67 | * @base, @irq and @trig_out to cti. | ||
| 68 | */ | ||
| 69 | static inline void cti_init(struct cti *cti, | ||
| 70 | void __iomem *base, int irq, int trig_out) | ||
| 71 | { | ||
| 72 | cti->base = base; | ||
| 73 | cti->irq = irq; | ||
| 74 | cti->trig_out_for_irq = trig_out; | ||
| 75 | } | ||
| 76 | |||
| 77 | /** | ||
| 78 | * cti_map_trigger - use the @chan to map @trig_in to @trig_out | ||
| 79 | * @cti: cti instance | ||
| 80 | * @trig_in: trigger in number | ||
| 81 | * @trig_out: trigger out number | ||
| 82 | * @channel: channel number | ||
| 83 | * | ||
| 84 | * This function maps one trigger in of @trig_in to one trigger | ||
| 85 | * out of @trig_out using the channel @chan. | ||
| 86 | */ | ||
| 87 | static inline void cti_map_trigger(struct cti *cti, | ||
| 88 | int trig_in, int trig_out, int chan) | ||
| 89 | { | ||
| 90 | void __iomem *base = cti->base; | ||
| 91 | unsigned long val; | ||
| 92 | |||
| 93 | val = __raw_readl(base + CTIINEN + trig_in * 4); | ||
| 94 | val |= BIT(chan); | ||
| 95 | __raw_writel(val, base + CTIINEN + trig_in * 4); | ||
| 96 | |||
| 97 | val = __raw_readl(base + CTIOUTEN + trig_out * 4); | ||
| 98 | val |= BIT(chan); | ||
| 99 | __raw_writel(val, base + CTIOUTEN + trig_out * 4); | ||
| 100 | } | ||
| 101 | |||
| 102 | /** | ||
| 103 | * cti_enable - enable the cti module | ||
| 104 | * @cti: cti instance | ||
| 105 | * | ||
| 106 | * enable the cti module | ||
| 107 | */ | ||
| 108 | static inline void cti_enable(struct cti *cti) | ||
| 109 | { | ||
| 110 | __raw_writel(0x1, cti->base + CTICONTROL); | ||
| 111 | } | ||
| 112 | |||
| 113 | /** | ||
| 114 | * cti_disable - disable the cti module | ||
| 115 | * @cti: cti instance | ||
| 116 | * | ||
| 117 | * enable the cti module | ||
| 118 | */ | ||
| 119 | static inline void cti_disable(struct cti *cti) | ||
| 120 | { | ||
| 121 | __raw_writel(0, cti->base + CTICONTROL); | ||
| 122 | } | ||
| 123 | |||
| 124 | /** | ||
| 125 | * cti_irq_ack - clear the cti irq | ||
| 126 | * @cti: cti instance | ||
| 127 | * | ||
| 128 | * clear the cti irq | ||
| 129 | */ | ||
| 130 | static inline void cti_irq_ack(struct cti *cti) | ||
| 131 | { | ||
| 132 | void __iomem *base = cti->base; | ||
| 133 | unsigned long val; | ||
| 134 | |||
| 135 | val = __raw_readl(base + CTIINTACK); | ||
| 136 | val |= BIT(cti->trig_out_for_irq); | ||
| 137 | __raw_writel(val, base + CTIINTACK); | ||
| 138 | } | ||
| 139 | |||
| 140 | /** | ||
| 141 | * cti_unlock - unlock cti module | ||
| 142 | * @cti: cti instance | ||
| 143 | * | ||
| 144 | * unlock the cti module, or else any writes to the cti | ||
| 145 | * module is not allowed. | ||
| 146 | */ | ||
| 147 | static inline void cti_unlock(struct cti *cti) | ||
| 148 | { | ||
| 149 | void __iomem *base = cti->base; | ||
| 150 | unsigned long val; | ||
| 151 | |||
| 152 | val = __raw_readl(base + LOCKSTATUS); | ||
| 153 | |||
| 154 | if (val & 1) { | ||
| 155 | val = LOCKCODE; | ||
| 156 | __raw_writel(val, base + LOCKACCESS); | ||
| 157 | } | ||
| 158 | } | ||
| 159 | |||
| 160 | /** | ||
| 161 | * cti_lock - lock cti module | ||
| 162 | * @cti: cti instance | ||
| 163 | * | ||
| 164 | * lock the cti module, so any writes to the cti | ||
| 165 | * module will be not allowed. | ||
| 166 | */ | ||
| 167 | static inline void cti_lock(struct cti *cti) | ||
| 168 | { | ||
| 169 | void __iomem *base = cti->base; | ||
| 170 | unsigned long val; | ||
| 171 | |||
| 172 | val = __raw_readl(base + LOCKSTATUS); | ||
| 173 | |||
| 174 | if (!(val & 1)) { | ||
| 175 | val = ~LOCKCODE; | ||
| 176 | __raw_writel(val, base + LOCKACCESS); | ||
| 177 | } | ||
| 178 | } | ||
| 179 | #endif | ||
diff --git a/arch/arm/include/asm/entry-macro-vic2.S b/arch/arm/include/asm/entry-macro-vic2.S deleted file mode 100644 index 3ceb85e43850..000000000000 --- a/arch/arm/include/asm/entry-macro-vic2.S +++ /dev/null | |||
| @@ -1,57 +0,0 @@ | |||
| 1 | /* arch/arm/include/asm/entry-macro-vic2.S | ||
| 2 | * | ||
| 3 | * Originally arch/arm/mach-s3c6400/include/mach/entry-macro.S | ||
| 4 | * | ||
| 5 | * Copyright 2008 Openmoko, Inc. | ||
| 6 | * Copyright 2008 Simtec Electronics | ||
| 7 | * http://armlinux.simtec.co.uk/ | ||
| 8 | * Ben Dooks <ben@simtec.co.uk> | ||
| 9 | * | ||
| 10 | * Low-level IRQ helper macros for a device with two VICs | ||
| 11 | * | ||
| 12 | * This file is licensed under the terms of the GNU General Public | ||
| 13 | * License version 2. This program is licensed "as is" without any | ||
| 14 | * warranty of any kind, whether express or implied. | ||
| 15 | */ | ||
| 16 | |||
| 17 | /* This should be included from <mach/entry-macro.S> with the necessary | ||
| 18 | * defines for virtual addresses and IRQ bases for the two vics. | ||
| 19 | * | ||
| 20 | * The code needs the following defined: | ||
| 21 | * IRQ_VIC0_BASE IRQ number of VIC0's first IRQ | ||
| 22 | * IRQ_VIC1_BASE IRQ number of VIC1's first IRQ | ||
| 23 | * VA_VIC0 Virtual address of VIC0 | ||
| 24 | * VA_VIC1 Virtual address of VIC1 | ||
| 25 | * | ||
| 26 | * Note, code assumes VIC0's virtual address is an ARM immediate constant | ||
| 27 | * away from VIC1. | ||
| 28 | */ | ||
| 29 | |||
| 30 | #include <asm/hardware/vic.h> | ||
| 31 | |||
| 32 | .macro disable_fiq | ||
| 33 | .endm | ||
| 34 | |||
| 35 | .macro get_irqnr_preamble, base, tmp | ||
| 36 | ldr \base, =VA_VIC0 | ||
| 37 | .endm | ||
| 38 | |||
| 39 | .macro arch_ret_to_user, tmp1, tmp2 | ||
| 40 | .endm | ||
| 41 | |||
| 42 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 43 | |||
| 44 | @ check the vic0 | ||
| 45 | mov \irqnr, #IRQ_VIC0_BASE + 31 | ||
| 46 | ldr \irqstat, [ \base, # VIC_IRQ_STATUS ] | ||
| 47 | teq \irqstat, #0 | ||
| 48 | |||
| 49 | @ otherwise try vic1 | ||
| 50 | addeq \tmp, \base, #(VA_VIC1 - VA_VIC0) | ||
| 51 | addeq \irqnr, \irqnr, #(IRQ_VIC1_BASE - IRQ_VIC0_BASE) | ||
| 52 | ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ] | ||
| 53 | teqeq \irqstat, #0 | ||
| 54 | |||
| 55 | clzne \irqstat, \irqstat | ||
| 56 | subne \irqnr, \irqnr, \irqstat | ||
| 57 | .endm | ||
diff --git a/arch/arm/include/asm/hardware/entry-macro-gic.S b/arch/arm/include/asm/hardware/entry-macro-gic.S deleted file mode 100644 index 74ebc803904d..000000000000 --- a/arch/arm/include/asm/hardware/entry-macro-gic.S +++ /dev/null | |||
| @@ -1,60 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/hardware/entry-macro-gic.S | ||
| 3 | * | ||
| 4 | * Low-level IRQ helper macros for GIC | ||
| 5 | * | ||
| 6 | * This file is licensed under the terms of the GNU General Public | ||
| 7 | * License version 2. This program is licensed "as is" without any | ||
| 8 | * warranty of any kind, whether express or implied. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #include <asm/hardware/gic.h> | ||
| 12 | |||
| 13 | #ifndef HAVE_GET_IRQNR_PREAMBLE | ||
| 14 | .macro get_irqnr_preamble, base, tmp | ||
| 15 | ldr \base, =gic_cpu_base_addr | ||
| 16 | ldr \base, [\base] | ||
| 17 | .endm | ||
| 18 | #endif | ||
| 19 | |||
| 20 | /* | ||
| 21 | * The interrupt numbering scheme is defined in the | ||
| 22 | * interrupt controller spec. To wit: | ||
| 23 | * | ||
| 24 | * Interrupts 0-15 are IPI | ||
| 25 | * 16-31 are local. We allow 30 to be used for the watchdog. | ||
| 26 | * 32-1020 are global | ||
| 27 | * 1021-1022 are reserved | ||
| 28 | * 1023 is "spurious" (no interrupt) | ||
| 29 | * | ||
| 30 | * A simple read from the controller will tell us the number of the highest | ||
| 31 | * priority enabled interrupt. We then just need to check whether it is in the | ||
| 32 | * valid range for an IRQ (30-1020 inclusive). | ||
| 33 | */ | ||
| 34 | |||
| 35 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 36 | |||
| 37 | ldr \irqstat, [\base, #GIC_CPU_INTACK] | ||
| 38 | /* bits 12-10 = src CPU, 9-0 = int # */ | ||
| 39 | |||
| 40 | ldr \tmp, =1021 | ||
| 41 | bic \irqnr, \irqstat, #0x1c00 | ||
| 42 | cmp \irqnr, #15 | ||
| 43 | cmpcc \irqnr, \irqnr | ||
| 44 | cmpne \irqnr, \tmp | ||
| 45 | cmpcs \irqnr, \irqnr | ||
| 46 | .endm | ||
| 47 | |||
| 48 | /* We assume that irqstat (the raw value of the IRQ acknowledge | ||
| 49 | * register) is preserved from the macro above. | ||
| 50 | * If there is an IPI, we immediately signal end of interrupt on the | ||
| 51 | * controller, since this requires the original irqstat value which | ||
| 52 | * we won't easily be able to recreate later. | ||
| 53 | */ | ||
| 54 | |||
| 55 | .macro test_for_ipi, irqnr, irqstat, base, tmp | ||
| 56 | bic \irqnr, \irqstat, #0x1c00 | ||
| 57 | cmp \irqnr, #16 | ||
| 58 | strcc \irqstat, [\base, #GIC_CPU_EOI] | ||
| 59 | cmpcs \irqnr, \irqnr | ||
| 60 | .endm | ||
diff --git a/arch/arm/include/asm/hardware/gic.h b/arch/arm/include/asm/hardware/gic.h index 3e91f22046f5..4bdfe0018696 100644 --- a/arch/arm/include/asm/hardware/gic.h +++ b/arch/arm/include/asm/hardware/gic.h | |||
| @@ -36,30 +36,22 @@ | |||
| 36 | #include <linux/irqdomain.h> | 36 | #include <linux/irqdomain.h> |
| 37 | struct device_node; | 37 | struct device_node; |
| 38 | 38 | ||
| 39 | extern void __iomem *gic_cpu_base_addr; | ||
| 40 | extern struct irq_chip gic_arch_extn; | 39 | extern struct irq_chip gic_arch_extn; |
| 41 | 40 | ||
| 42 | void gic_init(unsigned int, int, void __iomem *, void __iomem *); | 41 | void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, |
| 42 | u32 offset); | ||
| 43 | int gic_of_init(struct device_node *node, struct device_node *parent); | 43 | int gic_of_init(struct device_node *node, struct device_node *parent); |
| 44 | void gic_secondary_init(unsigned int); | 44 | void gic_secondary_init(unsigned int); |
| 45 | void gic_handle_irq(struct pt_regs *regs); | ||
| 45 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); | 46 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); |
| 46 | void gic_raise_softirq(const struct cpumask *mask, unsigned int irq); | 47 | void gic_raise_softirq(const struct cpumask *mask, unsigned int irq); |
| 47 | 48 | ||
| 48 | struct gic_chip_data { | 49 | static inline void gic_init(unsigned int nr, int start, |
| 49 | void __iomem *dist_base; | 50 | void __iomem *dist , void __iomem *cpu) |
| 50 | void __iomem *cpu_base; | 51 | { |
| 51 | #ifdef CONFIG_CPU_PM | 52 | gic_init_bases(nr, start, dist, cpu, 0); |
| 52 | u32 saved_spi_enable[DIV_ROUND_UP(1020, 32)]; | 53 | } |
| 53 | u32 saved_spi_conf[DIV_ROUND_UP(1020, 16)]; | 54 | |
| 54 | u32 saved_spi_target[DIV_ROUND_UP(1020, 4)]; | ||
| 55 | u32 __percpu *saved_ppi_enable; | ||
| 56 | u32 __percpu *saved_ppi_conf; | ||
| 57 | #endif | ||
| 58 | #ifdef CONFIG_IRQ_DOMAIN | ||
| 59 | struct irq_domain domain; | ||
| 60 | #endif | ||
| 61 | unsigned int gic_irqs; | ||
| 62 | }; | ||
| 63 | #endif | 55 | #endif |
| 64 | 56 | ||
| 65 | #endif | 57 | #endif |
diff --git a/arch/arm/include/asm/hardware/vic.h b/arch/arm/include/asm/hardware/vic.h index 5d72550a8097..f42ebd619590 100644 --- a/arch/arm/include/asm/hardware/vic.h +++ b/arch/arm/include/asm/hardware/vic.h | |||
| @@ -41,7 +41,15 @@ | |||
| 41 | #define VIC_PL192_VECT_ADDR 0xF00 | 41 | #define VIC_PL192_VECT_ADDR 0xF00 |
| 42 | 42 | ||
| 43 | #ifndef __ASSEMBLY__ | 43 | #ifndef __ASSEMBLY__ |
| 44 | #include <linux/compiler.h> | ||
| 45 | #include <linux/types.h> | ||
| 46 | |||
| 47 | struct device_node; | ||
| 48 | struct pt_regs; | ||
| 49 | |||
| 44 | void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources); | 50 | void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources); |
| 45 | #endif | 51 | int vic_of_init(struct device_node *node, struct device_node *parent); |
| 52 | void vic_handle_irq(struct pt_regs *regs); | ||
| 46 | 53 | ||
| 54 | #endif /* __ASSEMBLY__ */ | ||
| 47 | #endif | 55 | #endif |
diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h index 2b0efc3104ac..bcb0c883e21e 100644 --- a/arch/arm/include/asm/mach/arch.h +++ b/arch/arm/include/asm/mach/arch.h | |||
| @@ -31,10 +31,10 @@ struct machine_desc { | |||
| 31 | unsigned int video_start; /* start of video RAM */ | 31 | unsigned int video_start; /* start of video RAM */ |
| 32 | unsigned int video_end; /* end of video RAM */ | 32 | unsigned int video_end; /* end of video RAM */ |
| 33 | 33 | ||
| 34 | unsigned int reserve_lp0 :1; /* never has lp0 */ | 34 | unsigned char reserve_lp0 :1; /* never has lp0 */ |
| 35 | unsigned int reserve_lp1 :1; /* never has lp1 */ | 35 | unsigned char reserve_lp1 :1; /* never has lp1 */ |
| 36 | unsigned int reserve_lp2 :1; /* never has lp2 */ | 36 | unsigned char reserve_lp2 :1; /* never has lp2 */ |
| 37 | unsigned int soft_reboot :1; /* soft reboot */ | 37 | char restart_mode; /* default restart mode */ |
| 38 | void (*fixup)(struct tag *, char **, | 38 | void (*fixup)(struct tag *, char **, |
| 39 | struct meminfo *); | 39 | struct meminfo *); |
| 40 | void (*reserve)(void);/* reserve mem blocks */ | 40 | void (*reserve)(void);/* reserve mem blocks */ |
| @@ -46,6 +46,7 @@ struct machine_desc { | |||
| 46 | #ifdef CONFIG_MULTI_IRQ_HANDLER | 46 | #ifdef CONFIG_MULTI_IRQ_HANDLER |
| 47 | void (*handle_irq)(struct pt_regs *); | 47 | void (*handle_irq)(struct pt_regs *); |
| 48 | #endif | 48 | #endif |
| 49 | void (*restart)(char, const char *); | ||
| 49 | }; | 50 | }; |
| 50 | 51 | ||
| 51 | /* | 52 | /* |
diff --git a/arch/arm/include/asm/perf_event.h b/arch/arm/include/asm/perf_event.h index 0f8e3827a89b..99cfe3607989 100644 --- a/arch/arm/include/asm/perf_event.h +++ b/arch/arm/include/asm/perf_event.h | |||
| @@ -32,7 +32,4 @@ enum arm_perf_pmu_ids { | |||
| 32 | extern enum arm_perf_pmu_ids | 32 | extern enum arm_perf_pmu_ids |
| 33 | armpmu_get_pmu_id(void); | 33 | armpmu_get_pmu_id(void); |
| 34 | 34 | ||
| 35 | extern int | ||
| 36 | armpmu_get_max_events(void); | ||
| 37 | |||
| 38 | #endif /* __ARM_PERF_EVENT_H__ */ | 35 | #endif /* __ARM_PERF_EVENT_H__ */ |
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 9451dce3a553..bcae9b81a6d0 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h | |||
| @@ -21,7 +21,6 @@ | |||
| 21 | #else | 21 | #else |
| 22 | 22 | ||
| 23 | #include <asm/memory.h> | 23 | #include <asm/memory.h> |
| 24 | #include <mach/vmalloc.h> | ||
| 25 | #include <asm/pgtable-hwdef.h> | 24 | #include <asm/pgtable-hwdef.h> |
| 26 | 25 | ||
| 27 | #include <asm/pgtable-2level.h> | 26 | #include <asm/pgtable-2level.h> |
| @@ -33,14 +32,16 @@ | |||
| 33 | * any out-of-bounds memory accesses will hopefully be caught. | 32 | * any out-of-bounds memory accesses will hopefully be caught. |
| 34 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | 33 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced |
| 35 | * area for the same reason. ;) | 34 | * area for the same reason. ;) |
| 36 | * | ||
| 37 | * Note that platforms may override VMALLOC_START, but they must provide | ||
| 38 | * VMALLOC_END. VMALLOC_END defines the (exclusive) limit of this space, | ||
| 39 | * which may not overlap IO space. | ||
| 40 | */ | 35 | */ |
| 41 | #ifndef VMALLOC_START | ||
| 42 | #define VMALLOC_OFFSET (8*1024*1024) | 36 | #define VMALLOC_OFFSET (8*1024*1024) |
| 43 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | 37 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) |
| 38 | #define VMALLOC_END 0xff000000UL | ||
| 39 | |||
| 40 | /* This is a temporary hack until shmobile's DMA area size is sorted out */ | ||
| 41 | #ifdef CONFIG_ARCH_SHMOBILE | ||
| 42 | #warning "SH-Mobile's consistent DMA size conflicts with VMALLOC_END by 144MB" | ||
| 43 | #undef VMALLOC_END | ||
| 44 | #define VMALLOC_END 0xF6000000UL | ||
| 44 | #endif | 45 | #endif |
| 45 | 46 | ||
| 46 | #define LIBRARY_TEXT_START 0x0c000000 | 47 | #define LIBRARY_TEXT_START 0x0c000000 |
diff --git a/arch/arm/include/asm/pmu.h b/arch/arm/include/asm/pmu.h index 0bda22c094a6..b5a5be2536c1 100644 --- a/arch/arm/include/asm/pmu.h +++ b/arch/arm/include/asm/pmu.h | |||
| @@ -27,13 +27,22 @@ enum arm_pmu_type { | |||
| 27 | /* | 27 | /* |
| 28 | * struct arm_pmu_platdata - ARM PMU platform data | 28 | * struct arm_pmu_platdata - ARM PMU platform data |
| 29 | * | 29 | * |
| 30 | * @handle_irq: an optional handler which will be called from the interrupt and | 30 | * @handle_irq: an optional handler which will be called from the |
| 31 | * passed the address of the low level handler, and can be used to implement | 31 | * interrupt and passed the address of the low level handler, |
| 32 | * any platform specific handling before or after calling it. | 32 | * and can be used to implement any platform specific handling |
| 33 | * before or after calling it. | ||
| 34 | * @enable_irq: an optional handler which will be called after | ||
| 35 | * request_irq and be used to handle some platform specific | ||
| 36 | * irq enablement | ||
| 37 | * @disable_irq: an optional handler which will be called before | ||
| 38 | * free_irq and be used to handle some platform specific | ||
| 39 | * irq disablement | ||
| 33 | */ | 40 | */ |
| 34 | struct arm_pmu_platdata { | 41 | struct arm_pmu_platdata { |
| 35 | irqreturn_t (*handle_irq)(int irq, void *dev, | 42 | irqreturn_t (*handle_irq)(int irq, void *dev, |
| 36 | irq_handler_t pmu_handler); | 43 | irq_handler_t pmu_handler); |
| 44 | void (*enable_irq)(int irq); | ||
| 45 | void (*disable_irq)(int irq); | ||
| 37 | }; | 46 | }; |
| 38 | 47 | ||
| 39 | #ifdef CONFIG_CPU_HAS_PMU | 48 | #ifdef CONFIG_CPU_HAS_PMU |
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 984014b92647..fe7de7571bac 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h | |||
| @@ -101,6 +101,7 @@ extern int __pure cpu_architecture(void); | |||
| 101 | extern void cpu_init(void); | 101 | extern void cpu_init(void); |
| 102 | 102 | ||
| 103 | void arm_machine_restart(char mode, const char *cmd); | 103 | void arm_machine_restart(char mode, const char *cmd); |
| 104 | void soft_restart(unsigned long); | ||
| 104 | extern void (*arm_pm_restart)(char str, const char *cmd); | 105 | extern void (*arm_pm_restart)(char str, const char *cmd); |
| 105 | 106 | ||
| 106 | #define UDBG_UNDEFINED (1 << 0) | 107 | #define UDBG_UNDEFINED (1 << 0) |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index b145f16c91bc..3a456c6c7005 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
| @@ -36,12 +36,11 @@ | |||
| 36 | #ifdef CONFIG_MULTI_IRQ_HANDLER | 36 | #ifdef CONFIG_MULTI_IRQ_HANDLER |
| 37 | ldr r1, =handle_arch_irq | 37 | ldr r1, =handle_arch_irq |
| 38 | mov r0, sp | 38 | mov r0, sp |
| 39 | ldr r1, [r1] | ||
| 40 | adr lr, BSYM(9997f) | 39 | adr lr, BSYM(9997f) |
| 41 | teq r1, #0 | 40 | ldr pc, [r1] |
| 42 | movne pc, r1 | 41 | #else |
| 43 | #endif | ||
| 44 | arch_irq_handler_default | 42 | arch_irq_handler_default |
| 43 | #endif | ||
| 45 | 9997: | 44 | 9997: |
| 46 | .endm | 45 | .endm |
| 47 | 46 | ||
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index e59bbd496c39..29620b632ed9 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | extern const unsigned char relocate_new_kernel[]; | 16 | extern const unsigned char relocate_new_kernel[]; |
| 17 | extern const unsigned int relocate_new_kernel_size; | 17 | extern const unsigned int relocate_new_kernel_size; |
| 18 | 18 | ||
| 19 | extern void setup_mm_for_reboot(char mode); | 19 | extern void setup_mm_for_reboot(void); |
| 20 | 20 | ||
| 21 | extern unsigned long kexec_start_address; | 21 | extern unsigned long kexec_start_address; |
| 22 | extern unsigned long kexec_indirection_page; | 22 | extern unsigned long kexec_indirection_page; |
| @@ -113,7 +113,7 @@ void machine_kexec(struct kimage *image) | |||
| 113 | kexec_reinit(); | 113 | kexec_reinit(); |
| 114 | local_irq_disable(); | 114 | local_irq_disable(); |
| 115 | local_fiq_disable(); | 115 | local_fiq_disable(); |
| 116 | setup_mm_for_reboot(0); /* mode is not used, so just pass 0*/ | 116 | setup_mm_for_reboot(); |
| 117 | flush_cache_all(); | 117 | flush_cache_all(); |
| 118 | outer_flush_all(); | 118 | outer_flush_all(); |
| 119 | outer_disable(); | 119 | outer_disable(); |
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index c475379199b1..172101ac97de 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c | |||
| @@ -59,8 +59,7 @@ armpmu_get_pmu_id(void) | |||
| 59 | } | 59 | } |
| 60 | EXPORT_SYMBOL_GPL(armpmu_get_pmu_id); | 60 | EXPORT_SYMBOL_GPL(armpmu_get_pmu_id); |
| 61 | 61 | ||
| 62 | int | 62 | int perf_num_counters(void) |
| 63 | armpmu_get_max_events(void) | ||
| 64 | { | 63 | { |
| 65 | int max_events = 0; | 64 | int max_events = 0; |
| 66 | 65 | ||
| @@ -69,12 +68,6 @@ armpmu_get_max_events(void) | |||
| 69 | 68 | ||
| 70 | return max_events; | 69 | return max_events; |
| 71 | } | 70 | } |
| 72 | EXPORT_SYMBOL_GPL(armpmu_get_max_events); | ||
| 73 | |||
| 74 | int perf_num_counters(void) | ||
| 75 | { | ||
| 76 | return armpmu_get_max_events(); | ||
| 77 | } | ||
| 78 | EXPORT_SYMBOL_GPL(perf_num_counters); | 71 | EXPORT_SYMBOL_GPL(perf_num_counters); |
| 79 | 72 | ||
| 80 | #define HW_OP_UNSUPPORTED 0xFFFF | 73 | #define HW_OP_UNSUPPORTED 0xFFFF |
| @@ -380,6 +373,8 @@ armpmu_release_hardware(struct arm_pmu *armpmu) | |||
| 380 | { | 373 | { |
| 381 | int i, irq, irqs; | 374 | int i, irq, irqs; |
| 382 | struct platform_device *pmu_device = armpmu->plat_device; | 375 | struct platform_device *pmu_device = armpmu->plat_device; |
| 376 | struct arm_pmu_platdata *plat = | ||
| 377 | dev_get_platdata(&pmu_device->dev); | ||
| 383 | 378 | ||
| 384 | irqs = min(pmu_device->num_resources, num_possible_cpus()); | 379 | irqs = min(pmu_device->num_resources, num_possible_cpus()); |
| 385 | 380 | ||
| @@ -387,8 +382,11 @@ armpmu_release_hardware(struct arm_pmu *armpmu) | |||
| 387 | if (!cpumask_test_and_clear_cpu(i, &armpmu->active_irqs)) | 382 | if (!cpumask_test_and_clear_cpu(i, &armpmu->active_irqs)) |
| 388 | continue; | 383 | continue; |
| 389 | irq = platform_get_irq(pmu_device, i); | 384 | irq = platform_get_irq(pmu_device, i); |
| 390 | if (irq >= 0) | 385 | if (irq >= 0) { |
| 386 | if (plat && plat->disable_irq) | ||
| 387 | plat->disable_irq(irq); | ||
| 391 | free_irq(irq, armpmu); | 388 | free_irq(irq, armpmu); |
| 389 | } | ||
| 392 | } | 390 | } |
| 393 | 391 | ||
| 394 | release_pmu(armpmu->type); | 392 | release_pmu(armpmu->type); |
| @@ -448,7 +446,8 @@ armpmu_reserve_hardware(struct arm_pmu *armpmu) | |||
| 448 | irq); | 446 | irq); |
| 449 | armpmu_release_hardware(armpmu); | 447 | armpmu_release_hardware(armpmu); |
| 450 | return err; | 448 | return err; |
| 451 | } | 449 | } else if (plat && plat->enable_irq) |
| 450 | plat->enable_irq(irq); | ||
| 452 | 451 | ||
| 453 | cpumask_set_cpu(i, &armpmu->active_irqs); | 452 | cpumask_set_cpu(i, &armpmu->active_irqs); |
| 454 | } | 453 | } |
diff --git a/arch/arm/kernel/perf_event_v6.c b/arch/arm/kernel/perf_event_v6.c index e63d8115c01b..533be9930ec2 100644 --- a/arch/arm/kernel/perf_event_v6.c +++ b/arch/arm/kernel/perf_event_v6.c | |||
| @@ -65,13 +65,15 @@ enum armv6_counters { | |||
| 65 | * accesses/misses in hardware. | 65 | * accesses/misses in hardware. |
| 66 | */ | 66 | */ |
| 67 | static const unsigned armv6_perf_map[PERF_COUNT_HW_MAX] = { | 67 | static const unsigned armv6_perf_map[PERF_COUNT_HW_MAX] = { |
| 68 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV6_PERFCTR_CPU_CYCLES, | 68 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV6_PERFCTR_CPU_CYCLES, |
| 69 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV6_PERFCTR_INSTR_EXEC, | 69 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV6_PERFCTR_INSTR_EXEC, |
| 70 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, | 70 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, |
| 71 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, | 71 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, |
| 72 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV6_PERFCTR_BR_EXEC, | 72 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV6_PERFCTR_BR_EXEC, |
| 73 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV6_PERFCTR_BR_MISPREDICT, | 73 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV6_PERFCTR_BR_MISPREDICT, |
| 74 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, | 74 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, |
| 75 | [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = ARMV6_PERFCTR_IBUF_STALL, | ||
| 76 | [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = ARMV6_PERFCTR_LSU_FULL_STALL, | ||
| 75 | }; | 77 | }; |
| 76 | 78 | ||
| 77 | static const unsigned armv6_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | 79 | static const unsigned armv6_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] |
| @@ -218,13 +220,15 @@ enum armv6mpcore_perf_types { | |||
| 218 | * accesses/misses in hardware. | 220 | * accesses/misses in hardware. |
| 219 | */ | 221 | */ |
| 220 | static const unsigned armv6mpcore_perf_map[PERF_COUNT_HW_MAX] = { | 222 | static const unsigned armv6mpcore_perf_map[PERF_COUNT_HW_MAX] = { |
| 221 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV6MPCORE_PERFCTR_CPU_CYCLES, | 223 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV6MPCORE_PERFCTR_CPU_CYCLES, |
| 222 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV6MPCORE_PERFCTR_INSTR_EXEC, | 224 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV6MPCORE_PERFCTR_INSTR_EXEC, |
| 223 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, | 225 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, |
| 224 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, | 226 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, |
| 225 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV6MPCORE_PERFCTR_BR_EXEC, | 227 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV6MPCORE_PERFCTR_BR_EXEC, |
| 226 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV6MPCORE_PERFCTR_BR_MISPREDICT, | 228 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV6MPCORE_PERFCTR_BR_MISPREDICT, |
| 227 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, | 229 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, |
| 230 | [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = ARMV6MPCORE_PERFCTR_IBUF_STALL, | ||
| 231 | [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = ARMV6MPCORE_PERFCTR_LSU_FULL_STALL, | ||
| 228 | }; | 232 | }; |
| 229 | 233 | ||
| 230 | static const unsigned armv6mpcore_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | 234 | static const unsigned armv6mpcore_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] |
diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c index 1ef6d0034b85..460bbbb6b885 100644 --- a/arch/arm/kernel/perf_event_v7.c +++ b/arch/arm/kernel/perf_event_v7.c | |||
| @@ -28,165 +28,87 @@ static struct arm_pmu armv7pmu; | |||
| 28 | * they are not available. | 28 | * they are not available. |
| 29 | */ | 29 | */ |
| 30 | enum armv7_perf_types { | 30 | enum armv7_perf_types { |
| 31 | ARMV7_PERFCTR_PMNC_SW_INCR = 0x00, | 31 | ARMV7_PERFCTR_PMNC_SW_INCR = 0x00, |
| 32 | ARMV7_PERFCTR_IFETCH_MISS = 0x01, | 32 | ARMV7_PERFCTR_L1_ICACHE_REFILL = 0x01, |
| 33 | ARMV7_PERFCTR_ITLB_MISS = 0x02, | 33 | ARMV7_PERFCTR_ITLB_REFILL = 0x02, |
| 34 | ARMV7_PERFCTR_DCACHE_REFILL = 0x03, /* L1 */ | 34 | ARMV7_PERFCTR_L1_DCACHE_REFILL = 0x03, |
| 35 | ARMV7_PERFCTR_DCACHE_ACCESS = 0x04, /* L1 */ | 35 | ARMV7_PERFCTR_L1_DCACHE_ACCESS = 0x04, |
| 36 | ARMV7_PERFCTR_DTLB_REFILL = 0x05, | 36 | ARMV7_PERFCTR_DTLB_REFILL = 0x05, |
| 37 | ARMV7_PERFCTR_DREAD = 0x06, | 37 | ARMV7_PERFCTR_MEM_READ = 0x06, |
| 38 | ARMV7_PERFCTR_DWRITE = 0x07, | 38 | ARMV7_PERFCTR_MEM_WRITE = 0x07, |
| 39 | ARMV7_PERFCTR_INSTR_EXECUTED = 0x08, | 39 | ARMV7_PERFCTR_INSTR_EXECUTED = 0x08, |
| 40 | ARMV7_PERFCTR_EXC_TAKEN = 0x09, | 40 | ARMV7_PERFCTR_EXC_TAKEN = 0x09, |
| 41 | ARMV7_PERFCTR_EXC_EXECUTED = 0x0A, | 41 | ARMV7_PERFCTR_EXC_EXECUTED = 0x0A, |
| 42 | ARMV7_PERFCTR_CID_WRITE = 0x0B, | 42 | ARMV7_PERFCTR_CID_WRITE = 0x0B, |
| 43 | /* ARMV7_PERFCTR_PC_WRITE is equivalent to HW_BRANCH_INSTRUCTIONS. | 43 | |
| 44 | /* | ||
| 45 | * ARMV7_PERFCTR_PC_WRITE is equivalent to HW_BRANCH_INSTRUCTIONS. | ||
| 44 | * It counts: | 46 | * It counts: |
| 45 | * - all branch instructions, | 47 | * - all (taken) branch instructions, |
| 46 | * - instructions that explicitly write the PC, | 48 | * - instructions that explicitly write the PC, |
| 47 | * - exception generating instructions. | 49 | * - exception generating instructions. |
| 48 | */ | 50 | */ |
| 49 | ARMV7_PERFCTR_PC_WRITE = 0x0C, | 51 | ARMV7_PERFCTR_PC_WRITE = 0x0C, |
| 50 | ARMV7_PERFCTR_PC_IMM_BRANCH = 0x0D, | 52 | ARMV7_PERFCTR_PC_IMM_BRANCH = 0x0D, |
| 51 | ARMV7_PERFCTR_PC_PROC_RETURN = 0x0E, | 53 | ARMV7_PERFCTR_PC_PROC_RETURN = 0x0E, |
| 52 | ARMV7_PERFCTR_UNALIGNED_ACCESS = 0x0F, | 54 | ARMV7_PERFCTR_MEM_UNALIGNED_ACCESS = 0x0F, |
| 55 | ARMV7_PERFCTR_PC_BRANCH_MIS_PRED = 0x10, | ||
| 56 | ARMV7_PERFCTR_CLOCK_CYCLES = 0x11, | ||
| 57 | ARMV7_PERFCTR_PC_BRANCH_PRED = 0x12, | ||
| 53 | 58 | ||
| 54 | /* These events are defined by the PMUv2 supplement (ARM DDI 0457A). */ | 59 | /* These events are defined by the PMUv2 supplement (ARM DDI 0457A). */ |
| 55 | ARMV7_PERFCTR_PC_BRANCH_MIS_PRED = 0x10, | 60 | ARMV7_PERFCTR_MEM_ACCESS = 0x13, |
| 56 | ARMV7_PERFCTR_CLOCK_CYCLES = 0x11, | 61 | ARMV7_PERFCTR_L1_ICACHE_ACCESS = 0x14, |
| 57 | ARMV7_PERFCTR_PC_BRANCH_PRED = 0x12, | 62 | ARMV7_PERFCTR_L1_DCACHE_WB = 0x15, |
| 58 | ARMV7_PERFCTR_MEM_ACCESS = 0x13, | 63 | ARMV7_PERFCTR_L2_CACHE_ACCESS = 0x16, |
| 59 | ARMV7_PERFCTR_L1_ICACHE_ACCESS = 0x14, | 64 | ARMV7_PERFCTR_L2_CACHE_REFILL = 0x17, |
| 60 | ARMV7_PERFCTR_L1_DCACHE_WB = 0x15, | 65 | ARMV7_PERFCTR_L2_CACHE_WB = 0x18, |
| 61 | ARMV7_PERFCTR_L2_DCACHE_ACCESS = 0x16, | 66 | ARMV7_PERFCTR_BUS_ACCESS = 0x19, |
| 62 | ARMV7_PERFCTR_L2_DCACHE_REFILL = 0x17, | 67 | ARMV7_PERFCTR_MEM_ERROR = 0x1A, |
| 63 | ARMV7_PERFCTR_L2_DCACHE_WB = 0x18, | 68 | ARMV7_PERFCTR_INSTR_SPEC = 0x1B, |
| 64 | ARMV7_PERFCTR_BUS_ACCESS = 0x19, | 69 | ARMV7_PERFCTR_TTBR_WRITE = 0x1C, |
| 65 | ARMV7_PERFCTR_MEMORY_ERROR = 0x1A, | 70 | ARMV7_PERFCTR_BUS_CYCLES = 0x1D, |
| 66 | ARMV7_PERFCTR_INSTR_SPEC = 0x1B, | 71 | |
| 67 | ARMV7_PERFCTR_TTBR_WRITE = 0x1C, | 72 | ARMV7_PERFCTR_CPU_CYCLES = 0xFF |
| 68 | ARMV7_PERFCTR_BUS_CYCLES = 0x1D, | ||
| 69 | |||
| 70 | ARMV7_PERFCTR_CPU_CYCLES = 0xFF | ||
| 71 | }; | 73 | }; |
| 72 | 74 | ||
| 73 | /* ARMv7 Cortex-A8 specific event types */ | 75 | /* ARMv7 Cortex-A8 specific event types */ |
| 74 | enum armv7_a8_perf_types { | 76 | enum armv7_a8_perf_types { |
| 75 | ARMV7_PERFCTR_WRITE_BUFFER_FULL = 0x40, | 77 | ARMV7_A8_PERFCTR_L2_CACHE_ACCESS = 0x43, |
| 76 | ARMV7_PERFCTR_L2_STORE_MERGED = 0x41, | 78 | ARMV7_A8_PERFCTR_L2_CACHE_REFILL = 0x44, |
| 77 | ARMV7_PERFCTR_L2_STORE_BUFF = 0x42, | 79 | ARMV7_A8_PERFCTR_L1_ICACHE_ACCESS = 0x50, |
| 78 | ARMV7_PERFCTR_L2_ACCESS = 0x43, | 80 | ARMV7_A8_PERFCTR_STALL_ISIDE = 0x56, |
| 79 | ARMV7_PERFCTR_L2_CACH_MISS = 0x44, | ||
| 80 | ARMV7_PERFCTR_AXI_READ_CYCLES = 0x45, | ||
| 81 | ARMV7_PERFCTR_AXI_WRITE_CYCLES = 0x46, | ||
| 82 | ARMV7_PERFCTR_MEMORY_REPLAY = 0x47, | ||
| 83 | ARMV7_PERFCTR_UNALIGNED_ACCESS_REPLAY = 0x48, | ||
| 84 | ARMV7_PERFCTR_L1_DATA_MISS = 0x49, | ||
| 85 | ARMV7_PERFCTR_L1_INST_MISS = 0x4A, | ||
| 86 | ARMV7_PERFCTR_L1_DATA_COLORING = 0x4B, | ||
| 87 | ARMV7_PERFCTR_L1_NEON_DATA = 0x4C, | ||
| 88 | ARMV7_PERFCTR_L1_NEON_CACH_DATA = 0x4D, | ||
| 89 | ARMV7_PERFCTR_L2_NEON = 0x4E, | ||
| 90 | ARMV7_PERFCTR_L2_NEON_HIT = 0x4F, | ||
| 91 | ARMV7_PERFCTR_L1_INST = 0x50, | ||
| 92 | ARMV7_PERFCTR_PC_RETURN_MIS_PRED = 0x51, | ||
| 93 | ARMV7_PERFCTR_PC_BRANCH_FAILED = 0x52, | ||
| 94 | ARMV7_PERFCTR_PC_BRANCH_TAKEN = 0x53, | ||
| 95 | ARMV7_PERFCTR_PC_BRANCH_EXECUTED = 0x54, | ||
| 96 | ARMV7_PERFCTR_OP_EXECUTED = 0x55, | ||
| 97 | ARMV7_PERFCTR_CYCLES_INST_STALL = 0x56, | ||
| 98 | ARMV7_PERFCTR_CYCLES_INST = 0x57, | ||
| 99 | ARMV7_PERFCTR_CYCLES_NEON_DATA_STALL = 0x58, | ||
| 100 | ARMV7_PERFCTR_CYCLES_NEON_INST_STALL = 0x59, | ||
| 101 | ARMV7_PERFCTR_NEON_CYCLES = 0x5A, | ||
| 102 | |||
| 103 | ARMV7_PERFCTR_PMU0_EVENTS = 0x70, | ||
| 104 | ARMV7_PERFCTR_PMU1_EVENTS = 0x71, | ||
| 105 | ARMV7_PERFCTR_PMU_EVENTS = 0x72, | ||
| 106 | }; | 81 | }; |
| 107 | 82 | ||
| 108 | /* ARMv7 Cortex-A9 specific event types */ | 83 | /* ARMv7 Cortex-A9 specific event types */ |
| 109 | enum armv7_a9_perf_types { | 84 | enum armv7_a9_perf_types { |
| 110 | ARMV7_PERFCTR_JAVA_HW_BYTECODE_EXEC = 0x40, | 85 | ARMV7_A9_PERFCTR_INSTR_CORE_RENAME = 0x68, |
| 111 | ARMV7_PERFCTR_JAVA_SW_BYTECODE_EXEC = 0x41, | 86 | ARMV7_A9_PERFCTR_STALL_ICACHE = 0x60, |
| 112 | ARMV7_PERFCTR_JAZELLE_BRANCH_EXEC = 0x42, | 87 | ARMV7_A9_PERFCTR_STALL_DISPATCH = 0x66, |
| 113 | |||
| 114 | ARMV7_PERFCTR_COHERENT_LINE_MISS = 0x50, | ||
| 115 | ARMV7_PERFCTR_COHERENT_LINE_HIT = 0x51, | ||
| 116 | |||
| 117 | ARMV7_PERFCTR_ICACHE_DEP_STALL_CYCLES = 0x60, | ||
| 118 | ARMV7_PERFCTR_DCACHE_DEP_STALL_CYCLES = 0x61, | ||
| 119 | ARMV7_PERFCTR_TLB_MISS_DEP_STALL_CYCLES = 0x62, | ||
| 120 | ARMV7_PERFCTR_STREX_EXECUTED_PASSED = 0x63, | ||
| 121 | ARMV7_PERFCTR_STREX_EXECUTED_FAILED = 0x64, | ||
| 122 | ARMV7_PERFCTR_DATA_EVICTION = 0x65, | ||
| 123 | ARMV7_PERFCTR_ISSUE_STAGE_NO_INST = 0x66, | ||
| 124 | ARMV7_PERFCTR_ISSUE_STAGE_EMPTY = 0x67, | ||
| 125 | ARMV7_PERFCTR_INST_OUT_OF_RENAME_STAGE = 0x68, | ||
| 126 | |||
| 127 | ARMV7_PERFCTR_PREDICTABLE_FUNCT_RETURNS = 0x6E, | ||
| 128 | |||
| 129 | ARMV7_PERFCTR_MAIN_UNIT_EXECUTED_INST = 0x70, | ||
| 130 | ARMV7_PERFCTR_SECOND_UNIT_EXECUTED_INST = 0x71, | ||
| 131 | ARMV7_PERFCTR_LD_ST_UNIT_EXECUTED_INST = 0x72, | ||
| 132 | ARMV7_PERFCTR_FP_EXECUTED_INST = 0x73, | ||
| 133 | ARMV7_PERFCTR_NEON_EXECUTED_INST = 0x74, | ||
| 134 | |||
| 135 | ARMV7_PERFCTR_PLD_FULL_DEP_STALL_CYCLES = 0x80, | ||
| 136 | ARMV7_PERFCTR_DATA_WR_DEP_STALL_CYCLES = 0x81, | ||
| 137 | ARMV7_PERFCTR_ITLB_MISS_DEP_STALL_CYCLES = 0x82, | ||
| 138 | ARMV7_PERFCTR_DTLB_MISS_DEP_STALL_CYCLES = 0x83, | ||
| 139 | ARMV7_PERFCTR_MICRO_ITLB_MISS_DEP_STALL_CYCLES = 0x84, | ||
| 140 | ARMV7_PERFCTR_MICRO_DTLB_MISS_DEP_STALL_CYCLES = 0x85, | ||
| 141 | ARMV7_PERFCTR_DMB_DEP_STALL_CYCLES = 0x86, | ||
| 142 | |||
| 143 | ARMV7_PERFCTR_INTGR_CLK_ENABLED_CYCLES = 0x8A, | ||
| 144 | ARMV7_PERFCTR_DATA_ENGINE_CLK_EN_CYCLES = 0x8B, | ||
| 145 | |||
| 146 | ARMV7_PERFCTR_ISB_INST = 0x90, | ||
| 147 | ARMV7_PERFCTR_DSB_INST = 0x91, | ||
| 148 | ARMV7_PERFCTR_DMB_INST = 0x92, | ||
| 149 | ARMV7_PERFCTR_EXT_INTERRUPTS = 0x93, | ||
| 150 | |||
| 151 | ARMV7_PERFCTR_PLE_CACHE_LINE_RQST_COMPLETED = 0xA0, | ||
| 152 | ARMV7_PERFCTR_PLE_CACHE_LINE_RQST_SKIPPED = 0xA1, | ||
| 153 | ARMV7_PERFCTR_PLE_FIFO_FLUSH = 0xA2, | ||
| 154 | ARMV7_PERFCTR_PLE_RQST_COMPLETED = 0xA3, | ||
| 155 | ARMV7_PERFCTR_PLE_FIFO_OVERFLOW = 0xA4, | ||
| 156 | ARMV7_PERFCTR_PLE_RQST_PROG = 0xA5 | ||
| 157 | }; | 88 | }; |
| 158 | 89 | ||
| 159 | /* ARMv7 Cortex-A5 specific event types */ | 90 | /* ARMv7 Cortex-A5 specific event types */ |
| 160 | enum armv7_a5_perf_types { | 91 | enum armv7_a5_perf_types { |
| 161 | ARMV7_PERFCTR_IRQ_TAKEN = 0x86, | 92 | ARMV7_A5_PERFCTR_PREFETCH_LINEFILL = 0xc2, |
| 162 | ARMV7_PERFCTR_FIQ_TAKEN = 0x87, | 93 | ARMV7_A5_PERFCTR_PREFETCH_LINEFILL_DROP = 0xc3, |
| 163 | |||
| 164 | ARMV7_PERFCTR_EXT_MEM_RQST = 0xc0, | ||
| 165 | ARMV7_PERFCTR_NC_EXT_MEM_RQST = 0xc1, | ||
| 166 | ARMV7_PERFCTR_PREFETCH_LINEFILL = 0xc2, | ||
| 167 | ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP = 0xc3, | ||
| 168 | ARMV7_PERFCTR_ENTER_READ_ALLOC = 0xc4, | ||
| 169 | ARMV7_PERFCTR_READ_ALLOC = 0xc5, | ||
| 170 | |||
| 171 | ARMV7_PERFCTR_STALL_SB_FULL = 0xc9, | ||
| 172 | }; | 94 | }; |
| 173 | 95 | ||
| 174 | /* ARMv7 Cortex-A15 specific event types */ | 96 | /* ARMv7 Cortex-A15 specific event types */ |
| 175 | enum armv7_a15_perf_types { | 97 | enum armv7_a15_perf_types { |
| 176 | ARMV7_PERFCTR_L1_DCACHE_READ_ACCESS = 0x40, | 98 | ARMV7_A15_PERFCTR_L1_DCACHE_ACCESS_READ = 0x40, |
| 177 | ARMV7_PERFCTR_L1_DCACHE_WRITE_ACCESS = 0x41, | 99 | ARMV7_A15_PERFCTR_L1_DCACHE_ACCESS_WRITE = 0x41, |
| 178 | ARMV7_PERFCTR_L1_DCACHE_READ_REFILL = 0x42, | 100 | ARMV7_A15_PERFCTR_L1_DCACHE_REFILL_READ = 0x42, |
| 179 | ARMV7_PERFCTR_L1_DCACHE_WRITE_REFILL = 0x43, | 101 | ARMV7_A15_PERFCTR_L1_DCACHE_REFILL_WRITE = 0x43, |
| 180 | 102 | ||
| 181 | ARMV7_PERFCTR_L1_DTLB_READ_REFILL = 0x4C, | 103 | ARMV7_A15_PERFCTR_DTLB_REFILL_L1_READ = 0x4C, |
| 182 | ARMV7_PERFCTR_L1_DTLB_WRITE_REFILL = 0x4D, | 104 | ARMV7_A15_PERFCTR_DTLB_REFILL_L1_WRITE = 0x4D, |
| 183 | 105 | ||
| 184 | ARMV7_PERFCTR_L2_DCACHE_READ_ACCESS = 0x50, | 106 | ARMV7_A15_PERFCTR_L2_CACHE_ACCESS_READ = 0x50, |
| 185 | ARMV7_PERFCTR_L2_DCACHE_WRITE_ACCESS = 0x51, | 107 | ARMV7_A15_PERFCTR_L2_CACHE_ACCESS_WRITE = 0x51, |
| 186 | ARMV7_PERFCTR_L2_DCACHE_READ_REFILL = 0x52, | 108 | ARMV7_A15_PERFCTR_L2_CACHE_REFILL_READ = 0x52, |
| 187 | ARMV7_PERFCTR_L2_DCACHE_WRITE_REFILL = 0x53, | 109 | ARMV7_A15_PERFCTR_L2_CACHE_REFILL_WRITE = 0x53, |
| 188 | 110 | ||
| 189 | ARMV7_PERFCTR_SPEC_PC_WRITE = 0x76, | 111 | ARMV7_A15_PERFCTR_PC_WRITE_SPEC = 0x76, |
| 190 | }; | 112 | }; |
| 191 | 113 | ||
| 192 | /* | 114 | /* |
| @@ -197,13 +119,15 @@ enum armv7_a15_perf_types { | |||
| 197 | * accesses/misses in hardware. | 119 | * accesses/misses in hardware. |
| 198 | */ | 120 | */ |
| 199 | static const unsigned armv7_a8_perf_map[PERF_COUNT_HW_MAX] = { | 121 | static const unsigned armv7_a8_perf_map[PERF_COUNT_HW_MAX] = { |
| 200 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES, | 122 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES, |
| 201 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_PERFCTR_INSTR_EXECUTED, | 123 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_PERFCTR_INSTR_EXECUTED, |
| 202 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, | 124 | [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 203 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, | 125 | [PERF_COUNT_HW_CACHE_MISSES] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 204 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE, | 126 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE, |
| 205 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | 127 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 206 | [PERF_COUNT_HW_BUS_CYCLES] = ARMV7_PERFCTR_CLOCK_CYCLES, | 128 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, |
| 129 | [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = ARMV7_A8_PERFCTR_STALL_ISIDE, | ||
| 130 | [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = HW_OP_UNSUPPORTED, | ||
| 207 | }; | 131 | }; |
| 208 | 132 | ||
| 209 | static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | 133 | static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] |
| @@ -217,12 +141,12 @@ static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 217 | * combined. | 141 | * combined. |
| 218 | */ | 142 | */ |
| 219 | [C(OP_READ)] = { | 143 | [C(OP_READ)] = { |
| 220 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_DCACHE_ACCESS, | 144 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 221 | [C(RESULT_MISS)] = ARMV7_PERFCTR_DCACHE_REFILL, | 145 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 222 | }, | 146 | }, |
| 223 | [C(OP_WRITE)] = { | 147 | [C(OP_WRITE)] = { |
| 224 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_DCACHE_ACCESS, | 148 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 225 | [C(RESULT_MISS)] = ARMV7_PERFCTR_DCACHE_REFILL, | 149 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 226 | }, | 150 | }, |
| 227 | [C(OP_PREFETCH)] = { | 151 | [C(OP_PREFETCH)] = { |
| 228 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 152 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -231,12 +155,12 @@ static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 231 | }, | 155 | }, |
| 232 | [C(L1I)] = { | 156 | [C(L1I)] = { |
| 233 | [C(OP_READ)] = { | 157 | [C(OP_READ)] = { |
| 234 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_INST, | 158 | [C(RESULT_ACCESS)] = ARMV7_A8_PERFCTR_L1_ICACHE_ACCESS, |
| 235 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_INST_MISS, | 159 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_ICACHE_REFILL, |
| 236 | }, | 160 | }, |
| 237 | [C(OP_WRITE)] = { | 161 | [C(OP_WRITE)] = { |
| 238 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_INST, | 162 | [C(RESULT_ACCESS)] = ARMV7_A8_PERFCTR_L1_ICACHE_ACCESS, |
| 239 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_INST_MISS, | 163 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_ICACHE_REFILL, |
| 240 | }, | 164 | }, |
| 241 | [C(OP_PREFETCH)] = { | 165 | [C(OP_PREFETCH)] = { |
| 242 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 166 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -245,12 +169,12 @@ static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 245 | }, | 169 | }, |
| 246 | [C(LL)] = { | 170 | [C(LL)] = { |
| 247 | [C(OP_READ)] = { | 171 | [C(OP_READ)] = { |
| 248 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L2_ACCESS, | 172 | [C(RESULT_ACCESS)] = ARMV7_A8_PERFCTR_L2_CACHE_ACCESS, |
| 249 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L2_CACH_MISS, | 173 | [C(RESULT_MISS)] = ARMV7_A8_PERFCTR_L2_CACHE_REFILL, |
| 250 | }, | 174 | }, |
| 251 | [C(OP_WRITE)] = { | 175 | [C(OP_WRITE)] = { |
| 252 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L2_ACCESS, | 176 | [C(RESULT_ACCESS)] = ARMV7_A8_PERFCTR_L2_CACHE_ACCESS, |
| 253 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L2_CACH_MISS, | 177 | [C(RESULT_MISS)] = ARMV7_A8_PERFCTR_L2_CACHE_REFILL, |
| 254 | }, | 178 | }, |
| 255 | [C(OP_PREFETCH)] = { | 179 | [C(OP_PREFETCH)] = { |
| 256 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 180 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -274,11 +198,11 @@ static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 274 | [C(ITLB)] = { | 198 | [C(ITLB)] = { |
| 275 | [C(OP_READ)] = { | 199 | [C(OP_READ)] = { |
| 276 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 200 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 277 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS, | 201 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_REFILL, |
| 278 | }, | 202 | }, |
| 279 | [C(OP_WRITE)] = { | 203 | [C(OP_WRITE)] = { |
| 280 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 204 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 281 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS, | 205 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_REFILL, |
| 282 | }, | 206 | }, |
| 283 | [C(OP_PREFETCH)] = { | 207 | [C(OP_PREFETCH)] = { |
| 284 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 208 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -287,14 +211,12 @@ static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 287 | }, | 211 | }, |
| 288 | [C(BPU)] = { | 212 | [C(BPU)] = { |
| 289 | [C(OP_READ)] = { | 213 | [C(OP_READ)] = { |
| 290 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_WRITE, | 214 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, |
| 291 | [C(RESULT_MISS)] | 215 | [C(RESULT_MISS)] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 292 | = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | ||
| 293 | }, | 216 | }, |
| 294 | [C(OP_WRITE)] = { | 217 | [C(OP_WRITE)] = { |
| 295 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_WRITE, | 218 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, |
| 296 | [C(RESULT_MISS)] | 219 | [C(RESULT_MISS)] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 297 | = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | ||
| 298 | }, | 220 | }, |
| 299 | [C(OP_PREFETCH)] = { | 221 | [C(OP_PREFETCH)] = { |
| 300 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 222 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -321,14 +243,15 @@ static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 321 | * Cortex-A9 HW events mapping | 243 | * Cortex-A9 HW events mapping |
| 322 | */ | 244 | */ |
| 323 | static const unsigned armv7_a9_perf_map[PERF_COUNT_HW_MAX] = { | 245 | static const unsigned armv7_a9_perf_map[PERF_COUNT_HW_MAX] = { |
| 324 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES, | 246 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES, |
| 325 | [PERF_COUNT_HW_INSTRUCTIONS] = | 247 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_A9_PERFCTR_INSTR_CORE_RENAME, |
| 326 | ARMV7_PERFCTR_INST_OUT_OF_RENAME_STAGE, | 248 | [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 327 | [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV7_PERFCTR_DCACHE_ACCESS, | 249 | [PERF_COUNT_HW_CACHE_MISSES] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 328 | [PERF_COUNT_HW_CACHE_MISSES] = ARMV7_PERFCTR_DCACHE_REFILL, | 250 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE, |
| 329 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE, | 251 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 330 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | 252 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, |
| 331 | [PERF_COUNT_HW_BUS_CYCLES] = ARMV7_PERFCTR_CLOCK_CYCLES, | 253 | [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = ARMV7_A9_PERFCTR_STALL_ICACHE, |
| 254 | [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = ARMV7_A9_PERFCTR_STALL_DISPATCH, | ||
| 332 | }; | 255 | }; |
| 333 | 256 | ||
| 334 | static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | 257 | static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] |
| @@ -342,12 +265,12 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 342 | * combined. | 265 | * combined. |
| 343 | */ | 266 | */ |
| 344 | [C(OP_READ)] = { | 267 | [C(OP_READ)] = { |
| 345 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_DCACHE_ACCESS, | 268 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 346 | [C(RESULT_MISS)] = ARMV7_PERFCTR_DCACHE_REFILL, | 269 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 347 | }, | 270 | }, |
| 348 | [C(OP_WRITE)] = { | 271 | [C(OP_WRITE)] = { |
| 349 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_DCACHE_ACCESS, | 272 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 350 | [C(RESULT_MISS)] = ARMV7_PERFCTR_DCACHE_REFILL, | 273 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 351 | }, | 274 | }, |
| 352 | [C(OP_PREFETCH)] = { | 275 | [C(OP_PREFETCH)] = { |
| 353 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 276 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -357,11 +280,11 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 357 | [C(L1I)] = { | 280 | [C(L1I)] = { |
| 358 | [C(OP_READ)] = { | 281 | [C(OP_READ)] = { |
| 359 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 282 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 360 | [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS, | 283 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_ICACHE_REFILL, |
| 361 | }, | 284 | }, |
| 362 | [C(OP_WRITE)] = { | 285 | [C(OP_WRITE)] = { |
| 363 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 286 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 364 | [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS, | 287 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_ICACHE_REFILL, |
| 365 | }, | 288 | }, |
| 366 | [C(OP_PREFETCH)] = { | 289 | [C(OP_PREFETCH)] = { |
| 367 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 290 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -399,11 +322,11 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 399 | [C(ITLB)] = { | 322 | [C(ITLB)] = { |
| 400 | [C(OP_READ)] = { | 323 | [C(OP_READ)] = { |
| 401 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 324 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 402 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS, | 325 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_REFILL, |
| 403 | }, | 326 | }, |
| 404 | [C(OP_WRITE)] = { | 327 | [C(OP_WRITE)] = { |
| 405 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 328 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 406 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS, | 329 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_REFILL, |
| 407 | }, | 330 | }, |
| 408 | [C(OP_PREFETCH)] = { | 331 | [C(OP_PREFETCH)] = { |
| 409 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 332 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -412,14 +335,12 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 412 | }, | 335 | }, |
| 413 | [C(BPU)] = { | 336 | [C(BPU)] = { |
| 414 | [C(OP_READ)] = { | 337 | [C(OP_READ)] = { |
| 415 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_WRITE, | 338 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, |
| 416 | [C(RESULT_MISS)] | 339 | [C(RESULT_MISS)] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 417 | = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | ||
| 418 | }, | 340 | }, |
| 419 | [C(OP_WRITE)] = { | 341 | [C(OP_WRITE)] = { |
| 420 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_WRITE, | 342 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, |
| 421 | [C(RESULT_MISS)] | 343 | [C(RESULT_MISS)] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 422 | = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | ||
| 423 | }, | 344 | }, |
| 424 | [C(OP_PREFETCH)] = { | 345 | [C(OP_PREFETCH)] = { |
| 425 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 346 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -446,13 +367,15 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 446 | * Cortex-A5 HW events mapping | 367 | * Cortex-A5 HW events mapping |
| 447 | */ | 368 | */ |
| 448 | static const unsigned armv7_a5_perf_map[PERF_COUNT_HW_MAX] = { | 369 | static const unsigned armv7_a5_perf_map[PERF_COUNT_HW_MAX] = { |
| 449 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES, | 370 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES, |
| 450 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_PERFCTR_INSTR_EXECUTED, | 371 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_PERFCTR_INSTR_EXECUTED, |
| 451 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, | 372 | [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 452 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, | 373 | [PERF_COUNT_HW_CACHE_MISSES] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 453 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE, | 374 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE, |
| 454 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | 375 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 455 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, | 376 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, |
| 377 | [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = HW_OP_UNSUPPORTED, | ||
| 378 | [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = HW_OP_UNSUPPORTED, | ||
| 456 | }; | 379 | }; |
| 457 | 380 | ||
| 458 | static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | 381 | static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] |
| @@ -460,42 +383,34 @@ static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 460 | [PERF_COUNT_HW_CACHE_RESULT_MAX] = { | 383 | [PERF_COUNT_HW_CACHE_RESULT_MAX] = { |
| 461 | [C(L1D)] = { | 384 | [C(L1D)] = { |
| 462 | [C(OP_READ)] = { | 385 | [C(OP_READ)] = { |
| 463 | [C(RESULT_ACCESS)] | 386 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 464 | = ARMV7_PERFCTR_DCACHE_ACCESS, | 387 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 465 | [C(RESULT_MISS)] | ||
| 466 | = ARMV7_PERFCTR_DCACHE_REFILL, | ||
| 467 | }, | 388 | }, |
| 468 | [C(OP_WRITE)] = { | 389 | [C(OP_WRITE)] = { |
| 469 | [C(RESULT_ACCESS)] | 390 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 470 | = ARMV7_PERFCTR_DCACHE_ACCESS, | 391 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 471 | [C(RESULT_MISS)] | ||
| 472 | = ARMV7_PERFCTR_DCACHE_REFILL, | ||
| 473 | }, | 392 | }, |
| 474 | [C(OP_PREFETCH)] = { | 393 | [C(OP_PREFETCH)] = { |
| 475 | [C(RESULT_ACCESS)] | 394 | [C(RESULT_ACCESS)] = ARMV7_A5_PERFCTR_PREFETCH_LINEFILL, |
| 476 | = ARMV7_PERFCTR_PREFETCH_LINEFILL, | 395 | [C(RESULT_MISS)] = ARMV7_A5_PERFCTR_PREFETCH_LINEFILL_DROP, |
| 477 | [C(RESULT_MISS)] | ||
| 478 | = ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP, | ||
| 479 | }, | 396 | }, |
| 480 | }, | 397 | }, |
| 481 | [C(L1I)] = { | 398 | [C(L1I)] = { |
| 482 | [C(OP_READ)] = { | 399 | [C(OP_READ)] = { |
| 483 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS, | 400 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS, |
| 484 | [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS, | 401 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_ICACHE_REFILL, |
| 485 | }, | 402 | }, |
| 486 | [C(OP_WRITE)] = { | 403 | [C(OP_WRITE)] = { |
| 487 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS, | 404 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS, |
| 488 | [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS, | 405 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_ICACHE_REFILL, |
| 489 | }, | 406 | }, |
| 490 | /* | 407 | /* |
| 491 | * The prefetch counters don't differentiate between the I | 408 | * The prefetch counters don't differentiate between the I |
| 492 | * side and the D side. | 409 | * side and the D side. |
| 493 | */ | 410 | */ |
| 494 | [C(OP_PREFETCH)] = { | 411 | [C(OP_PREFETCH)] = { |
| 495 | [C(RESULT_ACCESS)] | 412 | [C(RESULT_ACCESS)] = ARMV7_A5_PERFCTR_PREFETCH_LINEFILL, |
| 496 | = ARMV7_PERFCTR_PREFETCH_LINEFILL, | 413 | [C(RESULT_MISS)] = ARMV7_A5_PERFCTR_PREFETCH_LINEFILL_DROP, |
| 497 | [C(RESULT_MISS)] | ||
| 498 | = ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP, | ||
| 499 | }, | 414 | }, |
| 500 | }, | 415 | }, |
| 501 | [C(LL)] = { | 416 | [C(LL)] = { |
| @@ -529,11 +444,11 @@ static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 529 | [C(ITLB)] = { | 444 | [C(ITLB)] = { |
| 530 | [C(OP_READ)] = { | 445 | [C(OP_READ)] = { |
| 531 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 446 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 532 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS, | 447 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_REFILL, |
| 533 | }, | 448 | }, |
| 534 | [C(OP_WRITE)] = { | 449 | [C(OP_WRITE)] = { |
| 535 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 450 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 536 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS, | 451 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_REFILL, |
| 537 | }, | 452 | }, |
| 538 | [C(OP_PREFETCH)] = { | 453 | [C(OP_PREFETCH)] = { |
| 539 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 454 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -543,13 +458,11 @@ static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 543 | [C(BPU)] = { | 458 | [C(BPU)] = { |
| 544 | [C(OP_READ)] = { | 459 | [C(OP_READ)] = { |
| 545 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, | 460 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, |
| 546 | [C(RESULT_MISS)] | 461 | [C(RESULT_MISS)] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 547 | = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | ||
| 548 | }, | 462 | }, |
| 549 | [C(OP_WRITE)] = { | 463 | [C(OP_WRITE)] = { |
| 550 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, | 464 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, |
| 551 | [C(RESULT_MISS)] | 465 | [C(RESULT_MISS)] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 552 | = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | ||
| 553 | }, | 466 | }, |
| 554 | [C(OP_PREFETCH)] = { | 467 | [C(OP_PREFETCH)] = { |
| 555 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 468 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -562,13 +475,15 @@ static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 562 | * Cortex-A15 HW events mapping | 475 | * Cortex-A15 HW events mapping |
| 563 | */ | 476 | */ |
| 564 | static const unsigned armv7_a15_perf_map[PERF_COUNT_HW_MAX] = { | 477 | static const unsigned armv7_a15_perf_map[PERF_COUNT_HW_MAX] = { |
| 565 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES, | 478 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES, |
| 566 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_PERFCTR_INSTR_EXECUTED, | 479 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_PERFCTR_INSTR_EXECUTED, |
| 567 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, | 480 | [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV7_PERFCTR_L1_DCACHE_ACCESS, |
| 568 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, | 481 | [PERF_COUNT_HW_CACHE_MISSES] = ARMV7_PERFCTR_L1_DCACHE_REFILL, |
| 569 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_SPEC_PC_WRITE, | 482 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_A15_PERFCTR_PC_WRITE_SPEC, |
| 570 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | 483 | [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 571 | [PERF_COUNT_HW_BUS_CYCLES] = ARMV7_PERFCTR_BUS_CYCLES, | 484 | [PERF_COUNT_HW_BUS_CYCLES] = ARMV7_PERFCTR_BUS_CYCLES, |
| 485 | [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = HW_OP_UNSUPPORTED, | ||
| 486 | [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = HW_OP_UNSUPPORTED, | ||
| 572 | }; | 487 | }; |
| 573 | 488 | ||
| 574 | static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | 489 | static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] |
| @@ -576,16 +491,12 @@ static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 576 | [PERF_COUNT_HW_CACHE_RESULT_MAX] = { | 491 | [PERF_COUNT_HW_CACHE_RESULT_MAX] = { |
| 577 | [C(L1D)] = { | 492 | [C(L1D)] = { |
| 578 | [C(OP_READ)] = { | 493 | [C(OP_READ)] = { |
| 579 | [C(RESULT_ACCESS)] | 494 | [C(RESULT_ACCESS)] = ARMV7_A15_PERFCTR_L1_DCACHE_ACCESS_READ, |
| 580 | = ARMV7_PERFCTR_L1_DCACHE_READ_ACCESS, | 495 | [C(RESULT_MISS)] = ARMV7_A15_PERFCTR_L1_DCACHE_REFILL_READ, |
| 581 | [C(RESULT_MISS)] | ||
| 582 | = ARMV7_PERFCTR_L1_DCACHE_READ_REFILL, | ||
| 583 | }, | 496 | }, |
| 584 | [C(OP_WRITE)] = { | 497 | [C(OP_WRITE)] = { |
| 585 | [C(RESULT_ACCESS)] | 498 | [C(RESULT_ACCESS)] = ARMV7_A15_PERFCTR_L1_DCACHE_ACCESS_WRITE, |
| 586 | = ARMV7_PERFCTR_L1_DCACHE_WRITE_ACCESS, | 499 | [C(RESULT_MISS)] = ARMV7_A15_PERFCTR_L1_DCACHE_REFILL_WRITE, |
| 587 | [C(RESULT_MISS)] | ||
| 588 | = ARMV7_PERFCTR_L1_DCACHE_WRITE_REFILL, | ||
| 589 | }, | 500 | }, |
| 590 | [C(OP_PREFETCH)] = { | 501 | [C(OP_PREFETCH)] = { |
| 591 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 502 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -601,11 +512,11 @@ static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 601 | */ | 512 | */ |
| 602 | [C(OP_READ)] = { | 513 | [C(OP_READ)] = { |
| 603 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS, | 514 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS, |
| 604 | [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS, | 515 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_ICACHE_REFILL, |
| 605 | }, | 516 | }, |
| 606 | [C(OP_WRITE)] = { | 517 | [C(OP_WRITE)] = { |
| 607 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS, | 518 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS, |
| 608 | [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS, | 519 | [C(RESULT_MISS)] = ARMV7_PERFCTR_L1_ICACHE_REFILL, |
| 609 | }, | 520 | }, |
| 610 | [C(OP_PREFETCH)] = { | 521 | [C(OP_PREFETCH)] = { |
| 611 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 522 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -614,16 +525,12 @@ static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 614 | }, | 525 | }, |
| 615 | [C(LL)] = { | 526 | [C(LL)] = { |
| 616 | [C(OP_READ)] = { | 527 | [C(OP_READ)] = { |
| 617 | [C(RESULT_ACCESS)] | 528 | [C(RESULT_ACCESS)] = ARMV7_A15_PERFCTR_L2_CACHE_ACCESS_READ, |
| 618 | = ARMV7_PERFCTR_L2_DCACHE_READ_ACCESS, | 529 | [C(RESULT_MISS)] = ARMV7_A15_PERFCTR_L2_CACHE_REFILL_READ, |
| 619 | [C(RESULT_MISS)] | ||
| 620 | = ARMV7_PERFCTR_L2_DCACHE_READ_REFILL, | ||
| 621 | }, | 530 | }, |
| 622 | [C(OP_WRITE)] = { | 531 | [C(OP_WRITE)] = { |
| 623 | [C(RESULT_ACCESS)] | 532 | [C(RESULT_ACCESS)] = ARMV7_A15_PERFCTR_L2_CACHE_ACCESS_WRITE, |
| 624 | = ARMV7_PERFCTR_L2_DCACHE_WRITE_ACCESS, | 533 | [C(RESULT_MISS)] = ARMV7_A15_PERFCTR_L2_CACHE_REFILL_WRITE, |
| 625 | [C(RESULT_MISS)] | ||
| 626 | = ARMV7_PERFCTR_L2_DCACHE_WRITE_REFILL, | ||
| 627 | }, | 534 | }, |
| 628 | [C(OP_PREFETCH)] = { | 535 | [C(OP_PREFETCH)] = { |
| 629 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 536 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -633,13 +540,11 @@ static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 633 | [C(DTLB)] = { | 540 | [C(DTLB)] = { |
| 634 | [C(OP_READ)] = { | 541 | [C(OP_READ)] = { |
| 635 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 542 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 636 | [C(RESULT_MISS)] | 543 | [C(RESULT_MISS)] = ARMV7_A15_PERFCTR_DTLB_REFILL_L1_READ, |
| 637 | = ARMV7_PERFCTR_L1_DTLB_READ_REFILL, | ||
| 638 | }, | 544 | }, |
| 639 | [C(OP_WRITE)] = { | 545 | [C(OP_WRITE)] = { |
| 640 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 546 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 641 | [C(RESULT_MISS)] | 547 | [C(RESULT_MISS)] = ARMV7_A15_PERFCTR_DTLB_REFILL_L1_WRITE, |
| 642 | = ARMV7_PERFCTR_L1_DTLB_WRITE_REFILL, | ||
| 643 | }, | 548 | }, |
| 644 | [C(OP_PREFETCH)] = { | 549 | [C(OP_PREFETCH)] = { |
| 645 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 550 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -649,11 +554,11 @@ static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 649 | [C(ITLB)] = { | 554 | [C(ITLB)] = { |
| 650 | [C(OP_READ)] = { | 555 | [C(OP_READ)] = { |
| 651 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 556 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 652 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS, | 557 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_REFILL, |
| 653 | }, | 558 | }, |
| 654 | [C(OP_WRITE)] = { | 559 | [C(OP_WRITE)] = { |
| 655 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 560 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| 656 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS, | 561 | [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_REFILL, |
| 657 | }, | 562 | }, |
| 658 | [C(OP_PREFETCH)] = { | 563 | [C(OP_PREFETCH)] = { |
| 659 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 564 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
| @@ -663,13 +568,11 @@ static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | |||
| 663 | [C(BPU)] = { | 568 | [C(BPU)] = { |
| 664 | [C(OP_READ)] = { | 569 | [C(OP_READ)] = { |
| 665 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, | 570 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, |
| 666 | [C(RESULT_MISS)] | 571 | [C(RESULT_MISS)] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 667 | = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | ||
| 668 | }, | 572 | }, |
| 669 | [C(OP_WRITE)] = { | 573 | [C(OP_WRITE)] = { |
| 670 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, | 574 | [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED, |
| 671 | [C(RESULT_MISS)] | 575 | [C(RESULT_MISS)] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, |
| 672 | = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED, | ||
| 673 | }, | 576 | }, |
| 674 | [C(OP_PREFETCH)] = { | 577 | [C(OP_PREFETCH)] = { |
| 675 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, | 578 | [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED, |
diff --git a/arch/arm/kernel/perf_event_xscale.c b/arch/arm/kernel/perf_event_xscale.c index e0cca10a8411..3b99d8269829 100644 --- a/arch/arm/kernel/perf_event_xscale.c +++ b/arch/arm/kernel/perf_event_xscale.c | |||
| @@ -48,13 +48,15 @@ enum xscale_counters { | |||
| 48 | }; | 48 | }; |
| 49 | 49 | ||
| 50 | static const unsigned xscale_perf_map[PERF_COUNT_HW_MAX] = { | 50 | static const unsigned xscale_perf_map[PERF_COUNT_HW_MAX] = { |
| 51 | [PERF_COUNT_HW_CPU_CYCLES] = XSCALE_PERFCTR_CCNT, | 51 | [PERF_COUNT_HW_CPU_CYCLES] = XSCALE_PERFCTR_CCNT, |
| 52 | [PERF_COUNT_HW_INSTRUCTIONS] = XSCALE_PERFCTR_INSTRUCTION, | 52 | [PERF_COUNT_HW_INSTRUCTIONS] = XSCALE_PERFCTR_INSTRUCTION, |
| 53 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, | 53 | [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED, |
| 54 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, | 54 | [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED, |
| 55 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = XSCALE_PERFCTR_BRANCH, | 55 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = XSCALE_PERFCTR_BRANCH, |
| 56 | [PERF_COUNT_HW_BRANCH_MISSES] = XSCALE_PERFCTR_BRANCH_MISS, | 56 | [PERF_COUNT_HW_BRANCH_MISSES] = XSCALE_PERFCTR_BRANCH_MISS, |
| 57 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, | 57 | [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED, |
| 58 | [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = XSCALE_PERFCTR_ICACHE_NO_DELIVER, | ||
| 59 | [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = HW_OP_UNSUPPORTED, | ||
| 58 | }; | 60 | }; |
| 59 | 61 | ||
| 60 | static const unsigned xscale_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] | 62 | static const unsigned xscale_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 3d0c6fb74ae4..eeb3e16c6046 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
| @@ -57,7 +57,7 @@ static const char *isa_modes[] = { | |||
| 57 | "ARM" , "Thumb" , "Jazelle", "ThumbEE" | 57 | "ARM" , "Thumb" , "Jazelle", "ThumbEE" |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | extern void setup_mm_for_reboot(char mode); | 60 | extern void setup_mm_for_reboot(void); |
| 61 | 61 | ||
| 62 | static volatile int hlt_counter; | 62 | static volatile int hlt_counter; |
| 63 | 63 | ||
| @@ -92,7 +92,7 @@ static int __init hlt_setup(char *__unused) | |||
| 92 | __setup("nohlt", nohlt_setup); | 92 | __setup("nohlt", nohlt_setup); |
| 93 | __setup("hlt", hlt_setup); | 93 | __setup("hlt", hlt_setup); |
| 94 | 94 | ||
| 95 | void arm_machine_restart(char mode, const char *cmd) | 95 | void soft_restart(unsigned long addr) |
| 96 | { | 96 | { |
| 97 | /* Disable interrupts first */ | 97 | /* Disable interrupts first */ |
| 98 | local_irq_disable(); | 98 | local_irq_disable(); |
| @@ -103,7 +103,7 @@ void arm_machine_restart(char mode, const char *cmd) | |||
| 103 | * we may need it to insert some 1:1 mappings so that | 103 | * we may need it to insert some 1:1 mappings so that |
| 104 | * soft boot works. | 104 | * soft boot works. |
| 105 | */ | 105 | */ |
| 106 | setup_mm_for_reboot(mode); | 106 | setup_mm_for_reboot(); |
| 107 | 107 | ||
| 108 | /* Clean and invalidate caches */ | 108 | /* Clean and invalidate caches */ |
| 109 | flush_cache_all(); | 109 | flush_cache_all(); |
| @@ -114,18 +114,17 @@ void arm_machine_restart(char mode, const char *cmd) | |||
| 114 | /* Push out any further dirty data, and ensure cache is empty */ | 114 | /* Push out any further dirty data, and ensure cache is empty */ |
| 115 | flush_cache_all(); | 115 | flush_cache_all(); |
| 116 | 116 | ||
| 117 | /* | 117 | cpu_reset(addr); |
| 118 | * Now call the architecture specific reboot code. | 118 | } |
| 119 | */ | ||
| 120 | arch_reset(mode, cmd); | ||
| 121 | 119 | ||
| 122 | /* | 120 | void arm_machine_restart(char mode, const char *cmd) |
| 123 | * Whoops - the architecture was unable to reboot. | 121 | { |
| 124 | * Tell the user! | 122 | /* Disable interrupts first */ |
| 125 | */ | 123 | local_irq_disable(); |
| 126 | mdelay(1000); | 124 | local_fiq_disable(); |
| 127 | printk("Reboot failed -- System halted\n"); | 125 | |
| 128 | while (1); | 126 | /* Call the architecture specific reboot code. */ |
| 127 | arch_reset(mode, cmd); | ||
| 129 | } | 128 | } |
| 130 | 129 | ||
| 131 | /* | 130 | /* |
| @@ -253,7 +252,15 @@ void machine_power_off(void) | |||
| 253 | void machine_restart(char *cmd) | 252 | void machine_restart(char *cmd) |
| 254 | { | 253 | { |
| 255 | machine_shutdown(); | 254 | machine_shutdown(); |
| 255 | |||
| 256 | arm_pm_restart(reboot_mode, cmd); | 256 | arm_pm_restart(reboot_mode, cmd); |
| 257 | |||
| 258 | /* Give a grace period for failure to restart of 1s */ | ||
| 259 | mdelay(1000); | ||
| 260 | |||
| 261 | /* Whoops - the platform was unable to reboot. Tell the user! */ | ||
| 262 | printk("Reboot failed -- System halted\n"); | ||
| 263 | while (1); | ||
| 257 | } | 264 | } |
| 258 | 265 | ||
| 259 | void __show_regs(struct pt_regs *regs) | 266 | void __show_regs(struct pt_regs *regs) |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 3448a3f9cc8c..5c7094e8f6e9 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include <linux/memblock.h> | 31 | #include <linux/memblock.h> |
| 32 | #include <linux/bug.h> | 32 | #include <linux/bug.h> |
| 33 | #include <linux/compiler.h> | 33 | #include <linux/compiler.h> |
| 34 | #include <linux/sort.h> | ||
| 34 | 35 | ||
| 35 | #include <asm/unified.h> | 36 | #include <asm/unified.h> |
| 36 | #include <asm/cpu.h> | 37 | #include <asm/cpu.h> |
| @@ -890,6 +891,12 @@ static struct machine_desc * __init setup_machine_tags(unsigned int nr) | |||
| 890 | return mdesc; | 891 | return mdesc; |
| 891 | } | 892 | } |
| 892 | 893 | ||
| 894 | static int __init meminfo_cmp(const void *_a, const void *_b) | ||
| 895 | { | ||
| 896 | const struct membank *a = _a, *b = _b; | ||
| 897 | long cmp = bank_pfn_start(a) - bank_pfn_start(b); | ||
| 898 | return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; | ||
| 899 | } | ||
| 893 | 900 | ||
| 894 | void __init setup_arch(char **cmdline_p) | 901 | void __init setup_arch(char **cmdline_p) |
| 895 | { | 902 | { |
| @@ -904,8 +911,8 @@ void __init setup_arch(char **cmdline_p) | |||
| 904 | machine_desc = mdesc; | 911 | machine_desc = mdesc; |
| 905 | machine_name = mdesc->name; | 912 | machine_name = mdesc->name; |
| 906 | 913 | ||
| 907 | if (mdesc->soft_reboot) | 914 | if (mdesc->restart_mode) |
| 908 | reboot_setup("s"); | 915 | reboot_setup(&mdesc->restart_mode); |
| 909 | 916 | ||
| 910 | init_mm.start_code = (unsigned long) _text; | 917 | init_mm.start_code = (unsigned long) _text; |
| 911 | init_mm.end_code = (unsigned long) _etext; | 918 | init_mm.end_code = (unsigned long) _etext; |
| @@ -918,12 +925,16 @@ void __init setup_arch(char **cmdline_p) | |||
| 918 | 925 | ||
| 919 | parse_early_param(); | 926 | parse_early_param(); |
| 920 | 927 | ||
| 928 | sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL); | ||
| 921 | sanity_check_meminfo(); | 929 | sanity_check_meminfo(); |
| 922 | arm_memblock_init(&meminfo, mdesc); | 930 | arm_memblock_init(&meminfo, mdesc); |
| 923 | 931 | ||
| 924 | paging_init(mdesc); | 932 | paging_init(mdesc); |
| 925 | request_standard_resources(mdesc); | 933 | request_standard_resources(mdesc); |
| 926 | 934 | ||
| 935 | if (mdesc->restart) | ||
| 936 | arm_pm_restart = mdesc->restart; | ||
| 937 | |||
| 927 | unflatten_device_tree(); | 938 | unflatten_device_tree(); |
| 928 | 939 | ||
| 929 | #ifdef CONFIG_SMP | 940 | #ifdef CONFIG_SMP |
diff --git a/arch/arm/mach-at91/include/mach/io.h b/arch/arm/mach-at91/include/mach/io.h index 4298e7806c76..4ca09ef7ca29 100644 --- a/arch/arm/mach-at91/include/mach/io.h +++ b/arch/arm/mach-at91/include/mach/io.h | |||
| @@ -30,14 +30,6 @@ | |||
| 30 | 30 | ||
| 31 | #ifndef __ASSEMBLY__ | 31 | #ifndef __ASSEMBLY__ |
| 32 | 32 | ||
| 33 | #ifndef CONFIG_ARCH_AT91X40 | ||
| 34 | #define __arch_ioremap at91_ioremap | ||
| 35 | #define __arch_iounmap at91_iounmap | ||
| 36 | #endif | ||
| 37 | |||
| 38 | void __iomem *at91_ioremap(unsigned long phys, size_t size, unsigned int type); | ||
| 39 | void at91_iounmap(volatile void __iomem *addr); | ||
| 40 | |||
| 41 | static inline unsigned int at91_sys_read(unsigned int reg_offset) | 33 | static inline unsigned int at91_sys_read(unsigned int reg_offset) |
| 42 | { | 34 | { |
| 43 | void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS; | 35 | void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS; |
diff --git a/arch/arm/mach-at91/include/mach/vmalloc.h b/arch/arm/mach-at91/include/mach/vmalloc.h deleted file mode 100644 index 8e4a1bd0ab1d..000000000000 --- a/arch/arm/mach-at91/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-at91/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2003 SAN People | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 22 | #define __ASM_ARCH_VMALLOC_H | ||
| 23 | |||
| 24 | #include <mach/hardware.h> | ||
| 25 | |||
| 26 | #define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK) | ||
| 27 | |||
| 28 | #endif | ||
diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index aa64294c7db3..cf98a8f94dc5 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c | |||
| @@ -73,24 +73,6 @@ static struct map_desc at91_io_desc __initdata = { | |||
| 73 | .type = MT_DEVICE, | 73 | .type = MT_DEVICE, |
| 74 | }; | 74 | }; |
| 75 | 75 | ||
| 76 | void __iomem *at91_ioremap(unsigned long p, size_t size, unsigned int type) | ||
| 77 | { | ||
| 78 | if (p >= AT91_BASE_SYS && p <= (AT91_BASE_SYS + SZ_16K - 1)) | ||
| 79 | return (void __iomem *)AT91_IO_P2V(p); | ||
| 80 | |||
| 81 | return __arm_ioremap_caller(p, size, type, __builtin_return_address(0)); | ||
| 82 | } | ||
| 83 | EXPORT_SYMBOL(at91_ioremap); | ||
| 84 | |||
| 85 | void at91_iounmap(volatile void __iomem *addr) | ||
| 86 | { | ||
| 87 | unsigned long virt = (unsigned long)addr; | ||
| 88 | |||
| 89 | if (virt >= VMALLOC_START && virt < VMALLOC_END) | ||
| 90 | __iounmap(addr); | ||
| 91 | } | ||
| 92 | EXPORT_SYMBOL(at91_iounmap); | ||
| 93 | |||
| 94 | #define AT91_DBGU0 0xfffff200 | 76 | #define AT91_DBGU0 0xfffff200 |
| 95 | #define AT91_DBGU1 0xffffee00 | 77 | #define AT91_DBGU1 0xffffee00 |
| 96 | 78 | ||
diff --git a/arch/arm/mach-bcmring/dma.c b/arch/arm/mach-bcmring/dma.c index f4d4d6d174d0..1a1a27dd5654 100644 --- a/arch/arm/mach-bcmring/dma.c +++ b/arch/arm/mach-bcmring/dma.c | |||
| @@ -1615,7 +1615,7 @@ DMA_MemType_t dma_mem_type(void *addr) | |||
| 1615 | { | 1615 | { |
| 1616 | unsigned long addrVal = (unsigned long)addr; | 1616 | unsigned long addrVal = (unsigned long)addr; |
| 1617 | 1617 | ||
| 1618 | if (addrVal >= VMALLOC_END) { | 1618 | if (addrVal >= CONSISTENT_BASE) { |
| 1619 | /* NOTE: DMA virtual memory space starts at 0xFFxxxxxx */ | 1619 | /* NOTE: DMA virtual memory space starts at 0xFFxxxxxx */ |
| 1620 | 1620 | ||
| 1621 | /* dma_alloc_xxx pages are physically and virtually contiguous */ | 1621 | /* dma_alloc_xxx pages are physically and virtually contiguous */ |
diff --git a/arch/arm/mach-bcmring/include/mach/vmalloc.h b/arch/arm/mach-bcmring/include/mach/vmalloc.h deleted file mode 100644 index 7397bd7817d9..000000000000 --- a/arch/arm/mach-bcmring/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,25 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * Copyright (C) 2000 Russell King. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 18 | */ | ||
| 19 | |||
| 20 | /* | ||
| 21 | * Move VMALLOC_END to 0xf0000000 so that the vm space can range from | ||
| 22 | * 0xe0000000 to 0xefffffff. This gives us 256 MB of vm space and handles | ||
| 23 | * larger physical memory designs better. | ||
| 24 | */ | ||
| 25 | #define VMALLOC_END 0xf0000000UL | ||
diff --git a/arch/arm/mach-clps711x/Makefile b/arch/arm/mach-clps711x/Makefile index 4a197315f0cf..f2f0256232e3 100644 --- a/arch/arm/mach-clps711x/Makefile +++ b/arch/arm/mach-clps711x/Makefile | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | # Object file lists. | 5 | # Object file lists. |
| 6 | 6 | ||
| 7 | obj-y := irq.o mm.o time.o | 7 | obj-y := common.o |
| 8 | obj-m := | 8 | obj-m := |
| 9 | obj-n := | 9 | obj-n := |
| 10 | obj- := | 10 | obj- := |
diff --git a/arch/arm/mach-clps711x/irq.c b/arch/arm/mach-clps711x/common.c index c2eceee645e3..ced2a4e406f4 100644 --- a/arch/arm/mach-clps711x/irq.c +++ b/arch/arm/mach-clps711x/common.c | |||
| @@ -1,7 +1,9 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/arch/arm/mach-clps711x/irq.c | 2 | * linux/arch/arm/mach-clps711x/core.c |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | 4 | * Core support for the CLPS711x-based machines. |
| 5 | * | ||
| 6 | * Copyright (C) 2001,2011 Deep Blue Solutions Ltd | ||
| 5 | * | 7 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
| @@ -17,16 +19,42 @@ | |||
| 17 | * along with this program; if not, write to the Free Software | 19 | * along with this program; if not, write to the Free Software |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | */ | 21 | */ |
| 22 | #include <linux/kernel.h> | ||
| 23 | #include <linux/mm.h> | ||
| 20 | #include <linux/init.h> | 24 | #include <linux/init.h> |
| 21 | #include <linux/list.h> | 25 | #include <linux/interrupt.h> |
| 22 | #include <linux/io.h> | 26 | #include <linux/io.h> |
| 27 | #include <linux/irq.h> | ||
| 28 | #include <linux/sched.h> | ||
| 29 | #include <linux/timex.h> | ||
| 23 | 30 | ||
| 24 | #include <asm/mach/irq.h> | 31 | #include <asm/sizes.h> |
| 25 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> |
| 26 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| 27 | 34 | #include <asm/leds.h> | |
| 35 | #include <asm/pgtable.h> | ||
| 36 | #include <asm/page.h> | ||
| 37 | #include <asm/mach/map.h> | ||
| 38 | #include <asm/mach/time.h> | ||
| 28 | #include <asm/hardware/clps7111.h> | 39 | #include <asm/hardware/clps7111.h> |
| 29 | 40 | ||
| 41 | /* | ||
| 42 | * This maps the generic CLPS711x registers | ||
| 43 | */ | ||
| 44 | static struct map_desc clps711x_io_desc[] __initdata = { | ||
| 45 | { | ||
| 46 | .virtual = CLPS7111_VIRT_BASE, | ||
| 47 | .pfn = __phys_to_pfn(CLPS7111_PHYS_BASE), | ||
| 48 | .length = SZ_1M, | ||
| 49 | .type = MT_DEVICE | ||
| 50 | } | ||
| 51 | }; | ||
| 52 | |||
| 53 | void __init clps711x_map_io(void) | ||
| 54 | { | ||
| 55 | iotable_init(clps711x_io_desc, ARRAY_SIZE(clps711x_io_desc)); | ||
| 56 | } | ||
| 57 | |||
| 30 | static void int1_mask(struct irq_data *d) | 58 | static void int1_mask(struct irq_data *d) |
| 31 | { | 59 | { |
| 32 | u32 intmr1; | 60 | u32 intmr1; |
| @@ -112,15 +140,15 @@ void __init clps711x_init_irq(void) | |||
| 112 | 140 | ||
| 113 | for (i = 0; i < NR_IRQS; i++) { | 141 | for (i = 0; i < NR_IRQS; i++) { |
| 114 | if (INT1_IRQS & (1 << i)) { | 142 | if (INT1_IRQS & (1 << i)) { |
| 115 | irq_set_chip_and_handler(i, &int1_chip, | 143 | irq_set_chip_and_handler(i, &int1_chip, |
| 116 | handle_level_irq); | 144 | handle_level_irq); |
| 117 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | 145 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); |
| 118 | } | 146 | } |
| 119 | if (INT2_IRQS & (1 << i)) { | 147 | if (INT2_IRQS & (1 << i)) { |
| 120 | irq_set_chip_and_handler(i, &int2_chip, | 148 | irq_set_chip_and_handler(i, &int2_chip, |
| 121 | handle_level_irq); | 149 | handle_level_irq); |
| 122 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | 150 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); |
| 123 | } | 151 | } |
| 124 | } | 152 | } |
| 125 | 153 | ||
| 126 | /* | 154 | /* |
| @@ -141,3 +169,54 @@ void __init clps711x_init_irq(void) | |||
| 141 | clps_writel(0, SYNCIO); | 169 | clps_writel(0, SYNCIO); |
| 142 | clps_writel(0, KBDEOI); | 170 | clps_writel(0, KBDEOI); |
| 143 | } | 171 | } |
| 172 | |||
| 173 | /* | ||
| 174 | * gettimeoffset() returns time since last timer tick, in usecs. | ||
| 175 | * | ||
| 176 | * 'LATCH' is hwclock ticks (see CLOCK_TICK_RATE in timex.h) per jiffy. | ||
| 177 | * 'tick' is usecs per jiffy. | ||
| 178 | */ | ||
| 179 | static unsigned long clps711x_gettimeoffset(void) | ||
| 180 | { | ||
| 181 | unsigned long hwticks; | ||
| 182 | hwticks = LATCH - (clps_readl(TC2D) & 0xffff); /* since last underflow */ | ||
| 183 | return (hwticks * (tick_nsec / 1000)) / LATCH; | ||
| 184 | } | ||
| 185 | |||
| 186 | /* | ||
| 187 | * IRQ handler for the timer | ||
| 188 | */ | ||
| 189 | static irqreturn_t p720t_timer_interrupt(int irq, void *dev_id) | ||
| 190 | { | ||
| 191 | timer_tick(); | ||
| 192 | return IRQ_HANDLED; | ||
| 193 | } | ||
| 194 | |||
| 195 | static struct irqaction clps711x_timer_irq = { | ||
| 196 | .name = "CLPS711x Timer Tick", | ||
| 197 | .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | ||
| 198 | .handler = p720t_timer_interrupt, | ||
| 199 | }; | ||
| 200 | |||
| 201 | static void __init clps711x_timer_init(void) | ||
| 202 | { | ||
| 203 | struct timespec tv; | ||
| 204 | unsigned int syscon; | ||
| 205 | |||
| 206 | syscon = clps_readl(SYSCON1); | ||
| 207 | syscon |= SYSCON1_TC2S | SYSCON1_TC2M; | ||
| 208 | clps_writel(syscon, SYSCON1); | ||
| 209 | |||
| 210 | clps_writel(LATCH-1, TC2D); /* 512kHz / 100Hz - 1 */ | ||
| 211 | |||
| 212 | setup_irq(IRQ_TC2OI, &clps711x_timer_irq); | ||
| 213 | |||
| 214 | tv.tv_nsec = 0; | ||
| 215 | tv.tv_sec = clps_readl(RTCDR); | ||
| 216 | do_settimeofday(&tv); | ||
| 217 | } | ||
| 218 | |||
| 219 | struct sys_timer clps711x_timer = { | ||
| 220 | .init = clps711x_timer_init, | ||
| 221 | .offset = clps711x_gettimeoffset, | ||
| 222 | }; | ||
diff --git a/arch/arm/mach-clps711x/include/mach/system.h b/arch/arm/mach-clps711x/include/mach/system.h index f916cd7a477d..6c119937d398 100644 --- a/arch/arm/mach-clps711x/include/mach/system.h +++ b/arch/arm/mach-clps711x/include/mach/system.h | |||
| @@ -34,7 +34,7 @@ static inline void arch_idle(void) | |||
| 34 | 34 | ||
| 35 | static inline void arch_reset(char mode, const char *cmd) | 35 | static inline void arch_reset(char mode, const char *cmd) |
| 36 | { | 36 | { |
| 37 | cpu_reset(0); | 37 | soft_restart(0); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | #endif | 40 | #endif |
diff --git a/arch/arm/mach-clps711x/include/mach/vmalloc.h b/arch/arm/mach-clps711x/include/mach/vmalloc.h deleted file mode 100644 index 467b96137e47..000000000000 --- a/arch/arm/mach-clps711x/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-clps711x/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | #define VMALLOC_END 0xd0000000UL | ||
diff --git a/arch/arm/mach-clps711x/mm.c b/arch/arm/mach-clps711x/mm.c deleted file mode 100644 index 986592176767..000000000000 --- a/arch/arm/mach-clps711x/mm.c +++ /dev/null | |||
| @@ -1,48 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-clps711x/mm.c | ||
| 3 | * | ||
| 4 | * Generic MM setup for the CLPS711x-based machines. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2001 Deep Blue Solutions Ltd | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License, or | ||
| 11 | * (at your option) any later version. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License | ||
| 19 | * along with this program; if not, write to the Free Software | ||
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 21 | */ | ||
| 22 | #include <linux/kernel.h> | ||
| 23 | #include <linux/mm.h> | ||
| 24 | #include <linux/init.h> | ||
| 25 | |||
| 26 | #include <asm/sizes.h> | ||
| 27 | #include <mach/hardware.h> | ||
| 28 | #include <asm/pgtable.h> | ||
| 29 | #include <asm/page.h> | ||
| 30 | #include <asm/mach/map.h> | ||
| 31 | #include <asm/hardware/clps7111.h> | ||
| 32 | |||
| 33 | /* | ||
| 34 | * This maps the generic CLPS711x registers | ||
| 35 | */ | ||
| 36 | static struct map_desc clps711x_io_desc[] __initdata = { | ||
| 37 | { | ||
| 38 | .virtual = CLPS7111_VIRT_BASE, | ||
| 39 | .pfn = __phys_to_pfn(CLPS7111_PHYS_BASE), | ||
| 40 | .length = SZ_1M, | ||
| 41 | .type = MT_DEVICE | ||
| 42 | } | ||
| 43 | }; | ||
| 44 | |||
| 45 | void __init clps711x_map_io(void) | ||
| 46 | { | ||
| 47 | iotable_init(clps711x_io_desc, ARRAY_SIZE(clps711x_io_desc)); | ||
| 48 | } | ||
diff --git a/arch/arm/mach-clps711x/time.c b/arch/arm/mach-clps711x/time.c deleted file mode 100644 index d581ef0bcd24..000000000000 --- a/arch/arm/mach-clps711x/time.c +++ /dev/null | |||
| @@ -1,84 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-clps711x/time.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 2001 Deep Blue Solutions Ltd. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 18 | */ | ||
| 19 | #include <linux/timex.h> | ||
| 20 | #include <linux/init.h> | ||
| 21 | #include <linux/interrupt.h> | ||
| 22 | #include <linux/irq.h> | ||
| 23 | #include <linux/sched.h> | ||
| 24 | #include <linux/io.h> | ||
| 25 | |||
| 26 | #include <mach/hardware.h> | ||
| 27 | #include <asm/irq.h> | ||
| 28 | #include <asm/leds.h> | ||
| 29 | #include <asm/hardware/clps7111.h> | ||
| 30 | |||
| 31 | #include <asm/mach/time.h> | ||
| 32 | |||
| 33 | |||
| 34 | /* | ||
| 35 | * gettimeoffset() returns time since last timer tick, in usecs. | ||
| 36 | * | ||
| 37 | * 'LATCH' is hwclock ticks (see CLOCK_TICK_RATE in timex.h) per jiffy. | ||
| 38 | * 'tick' is usecs per jiffy. | ||
| 39 | */ | ||
| 40 | static unsigned long clps711x_gettimeoffset(void) | ||
| 41 | { | ||
| 42 | unsigned long hwticks; | ||
| 43 | hwticks = LATCH - (clps_readl(TC2D) & 0xffff); /* since last underflow */ | ||
| 44 | return (hwticks * (tick_nsec / 1000)) / LATCH; | ||
| 45 | } | ||
| 46 | |||
| 47 | /* | ||
| 48 | * IRQ handler for the timer | ||
| 49 | */ | ||
| 50 | static irqreturn_t | ||
| 51 | p720t_timer_interrupt(int irq, void *dev_id) | ||
| 52 | { | ||
| 53 | timer_tick(); | ||
| 54 | return IRQ_HANDLED; | ||
| 55 | } | ||
| 56 | |||
| 57 | static struct irqaction clps711x_timer_irq = { | ||
| 58 | .name = "CLPS711x Timer Tick", | ||
| 59 | .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | ||
| 60 | .handler = p720t_timer_interrupt, | ||
| 61 | }; | ||
| 62 | |||
| 63 | static void __init clps711x_timer_init(void) | ||
| 64 | { | ||
| 65 | struct timespec tv; | ||
| 66 | unsigned int syscon; | ||
| 67 | |||
| 68 | syscon = clps_readl(SYSCON1); | ||
| 69 | syscon |= SYSCON1_TC2S | SYSCON1_TC2M; | ||
| 70 | clps_writel(syscon, SYSCON1); | ||
| 71 | |||
| 72 | clps_writel(LATCH-1, TC2D); /* 512kHz / 100Hz - 1 */ | ||
| 73 | |||
| 74 | setup_irq(IRQ_TC2OI, &clps711x_timer_irq); | ||
| 75 | |||
| 76 | tv.tv_nsec = 0; | ||
| 77 | tv.tv_sec = clps_readl(RTCDR); | ||
| 78 | do_settimeofday(&tv); | ||
| 79 | } | ||
| 80 | |||
| 81 | struct sys_timer clps711x_timer = { | ||
| 82 | .init = clps711x_timer_init, | ||
| 83 | .offset = clps711x_gettimeoffset, | ||
| 84 | }; | ||
diff --git a/arch/arm/mach-cns3xxx/cns3420vb.c b/arch/arm/mach-cns3xxx/cns3420vb.c index 55f7b4b08ab9..594852fe24cc 100644 --- a/arch/arm/mach-cns3xxx/cns3420vb.c +++ b/arch/arm/mach-cns3xxx/cns3420vb.c | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <linux/mtd/partitions.h> | 26 | #include <linux/mtd/partitions.h> |
| 27 | #include <asm/setup.h> | 27 | #include <asm/setup.h> |
| 28 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 29 | #include <asm/hardware/gic.h> | ||
| 29 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 30 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
| 31 | #include <asm/mach/time.h> | 32 | #include <asm/mach/time.h> |
| @@ -201,5 +202,6 @@ MACHINE_START(CNS3420VB, "Cavium Networks CNS3420 Validation Board") | |||
| 201 | .map_io = cns3420_map_io, | 202 | .map_io = cns3420_map_io, |
| 202 | .init_irq = cns3xxx_init_irq, | 203 | .init_irq = cns3xxx_init_irq, |
| 203 | .timer = &cns3xxx_timer, | 204 | .timer = &cns3xxx_timer, |
| 205 | .handle_irq = gic_handle_irq, | ||
| 204 | .init_machine = cns3420_init, | 206 | .init_machine = cns3420_init, |
| 205 | MACHINE_END | 207 | MACHINE_END |
diff --git a/arch/arm/mach-cns3xxx/include/mach/entry-macro.S b/arch/arm/mach-cns3xxx/include/mach/entry-macro.S index d87bfc397d39..01c57df5f716 100644 --- a/arch/arm/mach-cns3xxx/include/mach/entry-macro.S +++ b/arch/arm/mach-cns3xxx/include/mach/entry-macro.S | |||
| @@ -8,8 +8,6 @@ | |||
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #include <asm/hardware/entry-macro-gic.S> | ||
| 12 | |||
| 13 | .macro disable_fiq | 11 | .macro disable_fiq |
| 14 | .endm | 12 | .endm |
| 15 | 13 | ||
diff --git a/arch/arm/mach-cns3xxx/include/mach/vmalloc.h b/arch/arm/mach-cns3xxx/include/mach/vmalloc.h deleted file mode 100644 index 1dd231d2f772..000000000000 --- a/arch/arm/mach-cns3xxx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,11 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2000 Russell King. | ||
| 3 | * Copyright 2003 ARM Limited | ||
| 4 | * Copyright 2008 Cavium Networks | ||
| 5 | * | ||
| 6 | * This file is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License, Version 2, as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #define VMALLOC_END 0xd8000000UL | ||
diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile index 495e31306fc0..2db78bd5c835 100644 --- a/arch/arm/mach-davinci/Makefile +++ b/arch/arm/mach-davinci/Makefile | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | # | 4 | # |
| 5 | 5 | ||
| 6 | # Common objects | 6 | # Common objects |
| 7 | obj-y := time.o clock.o serial.o io.o psc.o \ | 7 | obj-y := time.o clock.o serial.o psc.o \ |
| 8 | dma.o usb.o common.o sram.o aemif.o | 8 | dma.o usb.o common.o sram.o aemif.o |
| 9 | 9 | ||
| 10 | obj-$(CONFIG_DAVINCI_MUX) += mux.o | 10 | obj-$(CONFIG_DAVINCI_MUX) += mux.o |
diff --git a/arch/arm/mach-davinci/include/mach/io.h b/arch/arm/mach-davinci/include/mach/io.h index d1b954955c12..b2267d1e1a71 100644 --- a/arch/arm/mach-davinci/include/mach/io.h +++ b/arch/arm/mach-davinci/include/mach/io.h | |||
| @@ -21,12 +21,4 @@ | |||
| 21 | #define __mem_pci(a) (a) | 21 | #define __mem_pci(a) (a) |
| 22 | #define __mem_isa(a) (a) | 22 | #define __mem_isa(a) (a) |
| 23 | 23 | ||
| 24 | #ifndef __ASSEMBLER__ | ||
| 25 | #define __arch_ioremap davinci_ioremap | ||
| 26 | #define __arch_iounmap davinci_iounmap | ||
| 27 | |||
| 28 | void __iomem *davinci_ioremap(unsigned long phys, size_t size, | ||
| 29 | unsigned int type); | ||
| 30 | void davinci_iounmap(volatile void __iomem *addr); | ||
| 31 | #endif | ||
| 32 | #endif /* __ASM_ARCH_IO_H */ | 24 | #endif /* __ASM_ARCH_IO_H */ |
diff --git a/arch/arm/mach-davinci/include/mach/vmalloc.h b/arch/arm/mach-davinci/include/mach/vmalloc.h deleted file mode 100644 index d49646a8e206..000000000000 --- a/arch/arm/mach-davinci/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * DaVinci vmalloc definitions | ||
| 3 | * | ||
| 4 | * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com> | ||
| 5 | * | ||
| 6 | * 2007 (c) MontaVista Software, Inc. This file is licensed under | ||
| 7 | * the terms of the GNU General Public License version 2. This program | ||
| 8 | * is licensed "as is" without any warranty of any kind, whether express | ||
| 9 | * or implied. | ||
| 10 | */ | ||
| 11 | #include <mach/hardware.h> | ||
| 12 | |||
| 13 | /* Allow vmalloc range until the IO virtual range minus a 2M "hole" */ | ||
| 14 | #define VMALLOC_END (IO_VIRT - (2<<20)) | ||
diff --git a/arch/arm/mach-davinci/io.c b/arch/arm/mach-davinci/io.c deleted file mode 100644 index 8ea60a8b2495..000000000000 --- a/arch/arm/mach-davinci/io.c +++ /dev/null | |||
| @@ -1,48 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * DaVinci I/O mapping code | ||
| 3 | * | ||
| 4 | * Copyright (C) 2005-2006 Texas Instruments | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #include <linux/module.h> | ||
| 12 | #include <linux/io.h> | ||
| 13 | |||
| 14 | #include <asm/tlb.h> | ||
| 15 | #include <asm/mach/map.h> | ||
| 16 | |||
| 17 | #include <mach/common.h> | ||
| 18 | |||
| 19 | /* | ||
| 20 | * Intercept ioremap() requests for addresses in our fixed mapping regions. | ||
| 21 | */ | ||
| 22 | void __iomem *davinci_ioremap(unsigned long p, size_t size, unsigned int type) | ||
| 23 | { | ||
| 24 | struct map_desc *desc = davinci_soc_info.io_desc; | ||
| 25 | int desc_num = davinci_soc_info.io_desc_num; | ||
| 26 | int i; | ||
| 27 | |||
| 28 | for (i = 0; i < desc_num; i++, desc++) { | ||
| 29 | unsigned long iophys = __pfn_to_phys(desc->pfn); | ||
| 30 | unsigned long iosize = desc->length; | ||
| 31 | |||
| 32 | if (p >= iophys && (p + size) <= (iophys + iosize)) | ||
| 33 | return __io(desc->virtual + p - iophys); | ||
| 34 | } | ||
| 35 | |||
| 36 | return __arm_ioremap_caller(p, size, type, | ||
| 37 | __builtin_return_address(0)); | ||
| 38 | } | ||
| 39 | EXPORT_SYMBOL(davinci_ioremap); | ||
| 40 | |||
| 41 | void davinci_iounmap(volatile void __iomem *addr) | ||
| 42 | { | ||
| 43 | unsigned long virt = (unsigned long)addr; | ||
| 44 | |||
| 45 | if (virt >= VMALLOC_START && virt < VMALLOC_END) | ||
| 46 | __iounmap(addr); | ||
| 47 | } | ||
| 48 | EXPORT_SYMBOL(davinci_iounmap); | ||
diff --git a/arch/arm/mach-dove/include/mach/dove.h b/arch/arm/mach-dove/include/mach/dove.h index b20ec9af7882..ad1165d488c1 100644 --- a/arch/arm/mach-dove/include/mach/dove.h +++ b/arch/arm/mach-dove/include/mach/dove.h | |||
| @@ -11,8 +11,6 @@ | |||
| 11 | #ifndef __ASM_ARCH_DOVE_H | 11 | #ifndef __ASM_ARCH_DOVE_H |
| 12 | #define __ASM_ARCH_DOVE_H | 12 | #define __ASM_ARCH_DOVE_H |
| 13 | 13 | ||
| 14 | #include <mach/vmalloc.h> | ||
| 15 | |||
| 16 | /* | 14 | /* |
| 17 | * Marvell Dove address maps. | 15 | * Marvell Dove address maps. |
| 18 | * | 16 | * |
diff --git a/arch/arm/mach-dove/include/mach/vmalloc.h b/arch/arm/mach-dove/include/mach/vmalloc.h deleted file mode 100644 index a28792cf761e..000000000000 --- a/arch/arm/mach-dove/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-dove/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #define VMALLOC_END 0xfd800000UL | ||
diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c index d0ce8abdd4b6..ce3ed244c4b0 100644 --- a/arch/arm/mach-ebsa110/core.c +++ b/arch/arm/mach-ebsa110/core.c | |||
| @@ -283,7 +283,7 @@ MACHINE_START(EBSA110, "EBSA110") | |||
| 283 | .atag_offset = 0x400, | 283 | .atag_offset = 0x400, |
| 284 | .reserve_lp0 = 1, | 284 | .reserve_lp0 = 1, |
| 285 | .reserve_lp2 = 1, | 285 | .reserve_lp2 = 1, |
| 286 | .soft_reboot = 1, | 286 | .restart_mode = 's', |
| 287 | .map_io = ebsa110_map_io, | 287 | .map_io = ebsa110_map_io, |
| 288 | .init_irq = ebsa110_init_irq, | 288 | .init_irq = ebsa110_init_irq, |
| 289 | .timer = &ebsa110_timer, | 289 | .timer = &ebsa110_timer, |
diff --git a/arch/arm/mach-ebsa110/include/mach/system.h b/arch/arm/mach-ebsa110/include/mach/system.h index 9a26245bf1fc..0d5df72a03f6 100644 --- a/arch/arm/mach-ebsa110/include/mach/system.h +++ b/arch/arm/mach-ebsa110/include/mach/system.h | |||
| @@ -34,6 +34,6 @@ static inline void arch_idle(void) | |||
| 34 | asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc"); | 34 | asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc"); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | #define arch_reset(mode, cmd) cpu_reset(0x80000000) | 37 | #define arch_reset(mode, cmd) soft_restart(0x80000000) |
| 38 | 38 | ||
| 39 | #endif | 39 | #endif |
diff --git a/arch/arm/mach-ebsa110/include/mach/vmalloc.h b/arch/arm/mach-ebsa110/include/mach/vmalloc.h deleted file mode 100644 index ea141b7a3e03..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ebsa110/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 1998 Russell King | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | #define VMALLOC_END 0xdf000000UL | ||
diff --git a/arch/arm/mach-ep93xx/adssphere.c b/arch/arm/mach-ep93xx/adssphere.c index 0713448206a5..d9b0ea2ba4d8 100644 --- a/arch/arm/mach-ep93xx/adssphere.c +++ b/arch/arm/mach-ep93xx/adssphere.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | 16 | ||
| 17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
| 18 | 18 | ||
| 19 | #include <asm/hardware/vic.h> | ||
| 19 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
| 20 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 21 | 22 | ||
| @@ -36,6 +37,7 @@ MACHINE_START(ADSSPHERE, "ADS Sphere board") | |||
| 36 | .atag_offset = 0x100, | 37 | .atag_offset = 0x100, |
| 37 | .map_io = ep93xx_map_io, | 38 | .map_io = ep93xx_map_io, |
| 38 | .init_irq = ep93xx_init_irq, | 39 | .init_irq = ep93xx_init_irq, |
| 40 | .handle_irq = vic_handle_irq, | ||
| 39 | .timer = &ep93xx_timer, | 41 | .timer = &ep93xx_timer, |
| 40 | .init_machine = adssphere_init_machine, | 42 | .init_machine = adssphere_init_machine, |
| 41 | MACHINE_END | 43 | MACHINE_END |
diff --git a/arch/arm/mach-ep93xx/edb93xx.c b/arch/arm/mach-ep93xx/edb93xx.c index 70ef8c527d27..9bbae0835f27 100644 --- a/arch/arm/mach-ep93xx/edb93xx.c +++ b/arch/arm/mach-ep93xx/edb93xx.c | |||
| @@ -39,6 +39,7 @@ | |||
| 39 | #include <mach/ep93xx_spi.h> | 39 | #include <mach/ep93xx_spi.h> |
| 40 | #include <mach/gpio-ep93xx.h> | 40 | #include <mach/gpio-ep93xx.h> |
| 41 | 41 | ||
| 42 | #include <asm/hardware/vic.h> | ||
| 42 | #include <asm/mach-types.h> | 43 | #include <asm/mach-types.h> |
| 43 | #include <asm/mach/arch.h> | 44 | #include <asm/mach/arch.h> |
| 44 | 45 | ||
| @@ -250,6 +251,7 @@ MACHINE_START(EDB9301, "Cirrus Logic EDB9301 Evaluation Board") | |||
| 250 | .atag_offset = 0x100, | 251 | .atag_offset = 0x100, |
| 251 | .map_io = ep93xx_map_io, | 252 | .map_io = ep93xx_map_io, |
| 252 | .init_irq = ep93xx_init_irq, | 253 | .init_irq = ep93xx_init_irq, |
| 254 | .handle_irq = vic_handle_irq, | ||
| 253 | .timer = &ep93xx_timer, | 255 | .timer = &ep93xx_timer, |
| 254 | .init_machine = edb93xx_init_machine, | 256 | .init_machine = edb93xx_init_machine, |
| 255 | MACHINE_END | 257 | MACHINE_END |
| @@ -261,6 +263,7 @@ MACHINE_START(EDB9302, "Cirrus Logic EDB9302 Evaluation Board") | |||
| 261 | .atag_offset = 0x100, | 263 | .atag_offset = 0x100, |
| 262 | .map_io = ep93xx_map_io, | 264 | .map_io = ep93xx_map_io, |
| 263 | .init_irq = ep93xx_init_irq, | 265 | .init_irq = ep93xx_init_irq, |
| 266 | .handle_irq = vic_handle_irq, | ||
| 264 | .timer = &ep93xx_timer, | 267 | .timer = &ep93xx_timer, |
| 265 | .init_machine = edb93xx_init_machine, | 268 | .init_machine = edb93xx_init_machine, |
| 266 | MACHINE_END | 269 | MACHINE_END |
| @@ -272,6 +275,7 @@ MACHINE_START(EDB9302A, "Cirrus Logic EDB9302A Evaluation Board") | |||
| 272 | .atag_offset = 0x100, | 275 | .atag_offset = 0x100, |
| 273 | .map_io = ep93xx_map_io, | 276 | .map_io = ep93xx_map_io, |
| 274 | .init_irq = ep93xx_init_irq, | 277 | .init_irq = ep93xx_init_irq, |
| 278 | .handle_irq = vic_handle_irq, | ||
| 275 | .timer = &ep93xx_timer, | 279 | .timer = &ep93xx_timer, |
| 276 | .init_machine = edb93xx_init_machine, | 280 | .init_machine = edb93xx_init_machine, |
| 277 | MACHINE_END | 281 | MACHINE_END |
| @@ -283,6 +287,7 @@ MACHINE_START(EDB9307, "Cirrus Logic EDB9307 Evaluation Board") | |||
| 283 | .atag_offset = 0x100, | 287 | .atag_offset = 0x100, |
| 284 | .map_io = ep93xx_map_io, | 288 | .map_io = ep93xx_map_io, |
| 285 | .init_irq = ep93xx_init_irq, | 289 | .init_irq = ep93xx_init_irq, |
| 290 | .handle_irq = vic_handle_irq, | ||
| 286 | .timer = &ep93xx_timer, | 291 | .timer = &ep93xx_timer, |
| 287 | .init_machine = edb93xx_init_machine, | 292 | .init_machine = edb93xx_init_machine, |
| 288 | MACHINE_END | 293 | MACHINE_END |
| @@ -294,6 +299,7 @@ MACHINE_START(EDB9307A, "Cirrus Logic EDB9307A Evaluation Board") | |||
| 294 | .atag_offset = 0x100, | 299 | .atag_offset = 0x100, |
| 295 | .map_io = ep93xx_map_io, | 300 | .map_io = ep93xx_map_io, |
| 296 | .init_irq = ep93xx_init_irq, | 301 | .init_irq = ep93xx_init_irq, |
| 302 | .handle_irq = vic_handle_irq, | ||
| 297 | .timer = &ep93xx_timer, | 303 | .timer = &ep93xx_timer, |
| 298 | .init_machine = edb93xx_init_machine, | 304 | .init_machine = edb93xx_init_machine, |
| 299 | MACHINE_END | 305 | MACHINE_END |
| @@ -305,6 +311,7 @@ MACHINE_START(EDB9312, "Cirrus Logic EDB9312 Evaluation Board") | |||
| 305 | .atag_offset = 0x100, | 311 | .atag_offset = 0x100, |
| 306 | .map_io = ep93xx_map_io, | 312 | .map_io = ep93xx_map_io, |
| 307 | .init_irq = ep93xx_init_irq, | 313 | .init_irq = ep93xx_init_irq, |
| 314 | .handle_irq = vic_handle_irq, | ||
| 308 | .timer = &ep93xx_timer, | 315 | .timer = &ep93xx_timer, |
| 309 | .init_machine = edb93xx_init_machine, | 316 | .init_machine = edb93xx_init_machine, |
| 310 | MACHINE_END | 317 | MACHINE_END |
| @@ -316,6 +323,7 @@ MACHINE_START(EDB9315, "Cirrus Logic EDB9315 Evaluation Board") | |||
| 316 | .atag_offset = 0x100, | 323 | .atag_offset = 0x100, |
| 317 | .map_io = ep93xx_map_io, | 324 | .map_io = ep93xx_map_io, |
| 318 | .init_irq = ep93xx_init_irq, | 325 | .init_irq = ep93xx_init_irq, |
| 326 | .handle_irq = vic_handle_irq, | ||
| 319 | .timer = &ep93xx_timer, | 327 | .timer = &ep93xx_timer, |
| 320 | .init_machine = edb93xx_init_machine, | 328 | .init_machine = edb93xx_init_machine, |
| 321 | MACHINE_END | 329 | MACHINE_END |
| @@ -327,6 +335,7 @@ MACHINE_START(EDB9315A, "Cirrus Logic EDB9315A Evaluation Board") | |||
| 327 | .atag_offset = 0x100, | 335 | .atag_offset = 0x100, |
| 328 | .map_io = ep93xx_map_io, | 336 | .map_io = ep93xx_map_io, |
| 329 | .init_irq = ep93xx_init_irq, | 337 | .init_irq = ep93xx_init_irq, |
| 338 | .handle_irq = vic_handle_irq, | ||
| 330 | .timer = &ep93xx_timer, | 339 | .timer = &ep93xx_timer, |
| 331 | .init_machine = edb93xx_init_machine, | 340 | .init_machine = edb93xx_init_machine, |
| 332 | MACHINE_END | 341 | MACHINE_END |
diff --git a/arch/arm/mach-ep93xx/gesbc9312.c b/arch/arm/mach-ep93xx/gesbc9312.c index 45ee205856f8..1dd32a7c5f15 100644 --- a/arch/arm/mach-ep93xx/gesbc9312.c +++ b/arch/arm/mach-ep93xx/gesbc9312.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | 16 | ||
| 17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
| 18 | 18 | ||
| 19 | #include <asm/hardware/vic.h> | ||
| 19 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
| 20 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 21 | 22 | ||
| @@ -36,6 +37,7 @@ MACHINE_START(GESBC9312, "Glomation GESBC-9312-sx") | |||
| 36 | .atag_offset = 0x100, | 37 | .atag_offset = 0x100, |
| 37 | .map_io = ep93xx_map_io, | 38 | .map_io = ep93xx_map_io, |
| 38 | .init_irq = ep93xx_init_irq, | 39 | .init_irq = ep93xx_init_irq, |
| 40 | .handle_irq = vic_handle_irq, | ||
| 39 | .timer = &ep93xx_timer, | 41 | .timer = &ep93xx_timer, |
| 40 | .init_machine = gesbc9312_init_machine, | 42 | .init_machine = gesbc9312_init_machine, |
| 41 | MACHINE_END | 43 | MACHINE_END |
diff --git a/arch/arm/mach-ep93xx/include/mach/entry-macro.S b/arch/arm/mach-ep93xx/include/mach/entry-macro.S index 96b85e2c2c0b..9be6edcf9045 100644 --- a/arch/arm/mach-ep93xx/include/mach/entry-macro.S +++ b/arch/arm/mach-ep93xx/include/mach/entry-macro.S | |||
| @@ -9,51 +9,9 @@ | |||
| 9 | * the Free Software Foundation; either version 2 of the License, or (at | 9 | * the Free Software Foundation; either version 2 of the License, or (at |
| 10 | * your option) any later version. | 10 | * your option) any later version. |
| 11 | */ | 11 | */ |
| 12 | #include <mach/ep93xx-regs.h> | ||
| 13 | 12 | ||
| 14 | .macro disable_fiq | 13 | .macro disable_fiq |
| 15 | .endm | 14 | .endm |
| 16 | 15 | ||
| 17 | .macro get_irqnr_preamble, base, tmp | ||
| 18 | .endm | ||
| 19 | |||
| 20 | .macro arch_ret_to_user, tmp1, tmp2 | 16 | .macro arch_ret_to_user, tmp1, tmp2 |
| 21 | .endm | 17 | .endm |
| 22 | |||
| 23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 24 | ldr \base, =(EP93XX_AHB_VIRT_BASE) | ||
| 25 | orr \base, \base, #0x000b0000 | ||
| 26 | mov \irqnr, #0 | ||
| 27 | ldr \irqstat, [\base] @ lower 32 interrupts | ||
| 28 | cmp \irqstat, #0 | ||
| 29 | bne 1001f | ||
| 30 | |||
| 31 | eor \base, \base, #0x00070000 | ||
| 32 | ldr \irqstat, [\base] @ upper 32 interrupts | ||
| 33 | cmp \irqstat, #0 | ||
| 34 | beq 1002f | ||
| 35 | mov \irqnr, #0x20 | ||
| 36 | |||
| 37 | 1001: | ||
| 38 | movs \tmp, \irqstat, lsl #16 | ||
| 39 | movne \irqstat, \tmp | ||
| 40 | addeq \irqnr, \irqnr, #16 | ||
| 41 | |||
| 42 | movs \tmp, \irqstat, lsl #8 | ||
| 43 | movne \irqstat, \tmp | ||
| 44 | addeq \irqnr, \irqnr, #8 | ||
| 45 | |||
| 46 | movs \tmp, \irqstat, lsl #4 | ||
| 47 | movne \irqstat, \tmp | ||
| 48 | addeq \irqnr, \irqnr, #4 | ||
| 49 | |||
| 50 | movs \tmp, \irqstat, lsl #2 | ||
| 51 | movne \irqstat, \tmp | ||
| 52 | addeq \irqnr, \irqnr, #2 | ||
| 53 | |||
| 54 | movs \tmp, \irqstat, lsl #1 | ||
| 55 | addeq \irqnr, \irqnr, #1 | ||
| 56 | orrs \base, \base, #1 | ||
| 57 | |||
| 58 | 1002: | ||
| 59 | .endm | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/system.h b/arch/arm/mach-ep93xx/include/mach/system.h index 6d661fe9d66c..bdf6c4f1feef 100644 --- a/arch/arm/mach-ep93xx/include/mach/system.h +++ b/arch/arm/mach-ep93xx/include/mach/system.h | |||
| @@ -11,8 +11,6 @@ static inline void arch_idle(void) | |||
| 11 | 11 | ||
| 12 | static inline void arch_reset(char mode, const char *cmd) | 12 | static inline void arch_reset(char mode, const char *cmd) |
| 13 | { | 13 | { |
| 14 | local_irq_disable(); | ||
| 15 | |||
| 16 | /* | 14 | /* |
| 17 | * Set then clear the SWRST bit to initiate a software reset | 15 | * Set then clear the SWRST bit to initiate a software reset |
| 18 | */ | 16 | */ |
diff --git a/arch/arm/mach-ep93xx/include/mach/vmalloc.h b/arch/arm/mach-ep93xx/include/mach/vmalloc.h deleted file mode 100644 index 1b3f25d03d39..000000000000 --- a/arch/arm/mach-ep93xx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ep93xx/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #define VMALLOC_END 0xfe800000UL | ||
diff --git a/arch/arm/mach-ep93xx/micro9.c b/arch/arm/mach-ep93xx/micro9.c index e72f7368876e..a6dae6c2e3c1 100644 --- a/arch/arm/mach-ep93xx/micro9.c +++ b/arch/arm/mach-ep93xx/micro9.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | #include <mach/hardware.h> | 19 | #include <mach/hardware.h> |
| 20 | 20 | ||
| 21 | #include <asm/hardware/vic.h> | ||
| 21 | #include <asm/mach-types.h> | 22 | #include <asm/mach-types.h> |
| 22 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
| 23 | 24 | ||
| @@ -80,6 +81,7 @@ MACHINE_START(MICRO9, "Contec Micro9-High") | |||
| 80 | .atag_offset = 0x100, | 81 | .atag_offset = 0x100, |
| 81 | .map_io = ep93xx_map_io, | 82 | .map_io = ep93xx_map_io, |
| 82 | .init_irq = ep93xx_init_irq, | 83 | .init_irq = ep93xx_init_irq, |
| 84 | .handle_irq = vic_handle_irq, | ||
| 83 | .timer = &ep93xx_timer, | 85 | .timer = &ep93xx_timer, |
| 84 | .init_machine = micro9_init_machine, | 86 | .init_machine = micro9_init_machine, |
| 85 | MACHINE_END | 87 | MACHINE_END |
| @@ -91,6 +93,7 @@ MACHINE_START(MICRO9M, "Contec Micro9-Mid") | |||
| 91 | .atag_offset = 0x100, | 93 | .atag_offset = 0x100, |
| 92 | .map_io = ep93xx_map_io, | 94 | .map_io = ep93xx_map_io, |
| 93 | .init_irq = ep93xx_init_irq, | 95 | .init_irq = ep93xx_init_irq, |
| 96 | .handle_irq = vic_handle_irq, | ||
| 94 | .timer = &ep93xx_timer, | 97 | .timer = &ep93xx_timer, |
| 95 | .init_machine = micro9_init_machine, | 98 | .init_machine = micro9_init_machine, |
| 96 | MACHINE_END | 99 | MACHINE_END |
| @@ -102,6 +105,7 @@ MACHINE_START(MICRO9L, "Contec Micro9-Lite") | |||
| 102 | .atag_offset = 0x100, | 105 | .atag_offset = 0x100, |
| 103 | .map_io = ep93xx_map_io, | 106 | .map_io = ep93xx_map_io, |
| 104 | .init_irq = ep93xx_init_irq, | 107 | .init_irq = ep93xx_init_irq, |
| 108 | .handle_irq = vic_handle_irq, | ||
| 105 | .timer = &ep93xx_timer, | 109 | .timer = &ep93xx_timer, |
| 106 | .init_machine = micro9_init_machine, | 110 | .init_machine = micro9_init_machine, |
| 107 | MACHINE_END | 111 | MACHINE_END |
| @@ -113,6 +117,7 @@ MACHINE_START(MICRO9S, "Contec Micro9-Slim") | |||
| 113 | .atag_offset = 0x100, | 117 | .atag_offset = 0x100, |
| 114 | .map_io = ep93xx_map_io, | 118 | .map_io = ep93xx_map_io, |
| 115 | .init_irq = ep93xx_init_irq, | 119 | .init_irq = ep93xx_init_irq, |
| 120 | .handle_irq = vic_handle_irq, | ||
| 116 | .timer = &ep93xx_timer, | 121 | .timer = &ep93xx_timer, |
| 117 | .init_machine = micro9_init_machine, | 122 | .init_machine = micro9_init_machine, |
| 118 | MACHINE_END | 123 | MACHINE_END |
diff --git a/arch/arm/mach-ep93xx/simone.c b/arch/arm/mach-ep93xx/simone.c index 52e090dc9d27..40121ba8e711 100644 --- a/arch/arm/mach-ep93xx/simone.c +++ b/arch/arm/mach-ep93xx/simone.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <mach/fb.h> | 25 | #include <mach/fb.h> |
| 26 | #include <mach/gpio-ep93xx.h> | 26 | #include <mach/gpio-ep93xx.h> |
| 27 | 27 | ||
| 28 | #include <asm/hardware/vic.h> | ||
| 28 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 29 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 30 | 31 | ||
| @@ -80,6 +81,7 @@ MACHINE_START(SIM_ONE, "Simplemachines Sim.One Board") | |||
| 80 | .atag_offset = 0x100, | 81 | .atag_offset = 0x100, |
| 81 | .map_io = ep93xx_map_io, | 82 | .map_io = ep93xx_map_io, |
| 82 | .init_irq = ep93xx_init_irq, | 83 | .init_irq = ep93xx_init_irq, |
| 84 | .handle_irq = vic_handle_irq, | ||
| 83 | .timer = &ep93xx_timer, | 85 | .timer = &ep93xx_timer, |
| 84 | .init_machine = simone_init_machine, | 86 | .init_machine = simone_init_machine, |
| 85 | MACHINE_END | 87 | MACHINE_END |
diff --git a/arch/arm/mach-ep93xx/snappercl15.c b/arch/arm/mach-ep93xx/snappercl15.c index 8121e3aedc0a..ec7c63ff01e2 100644 --- a/arch/arm/mach-ep93xx/snappercl15.c +++ b/arch/arm/mach-ep93xx/snappercl15.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include <mach/fb.h> | 31 | #include <mach/fb.h> |
| 32 | #include <mach/gpio-ep93xx.h> | 32 | #include <mach/gpio-ep93xx.h> |
| 33 | 33 | ||
| 34 | #include <asm/hardware/vic.h> | ||
| 34 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
| 35 | #include <asm/mach/arch.h> | 36 | #include <asm/mach/arch.h> |
| 36 | 37 | ||
| @@ -177,6 +178,7 @@ MACHINE_START(SNAPPER_CL15, "Bluewater Systems Snapper CL15") | |||
| 177 | .atag_offset = 0x100, | 178 | .atag_offset = 0x100, |
| 178 | .map_io = ep93xx_map_io, | 179 | .map_io = ep93xx_map_io, |
| 179 | .init_irq = ep93xx_init_irq, | 180 | .init_irq = ep93xx_init_irq, |
| 181 | .handle_irq = vic_handle_irq, | ||
| 180 | .timer = &ep93xx_timer, | 182 | .timer = &ep93xx_timer, |
| 181 | .init_machine = snappercl15_init_machine, | 183 | .init_machine = snappercl15_init_machine, |
| 182 | MACHINE_END | 184 | MACHINE_END |
diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index 8b2f1435bcac..760384e6407d 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
| 24 | #include <mach/ts72xx.h> | 24 | #include <mach/ts72xx.h> |
| 25 | 25 | ||
| 26 | #include <asm/hardware/vic.h> | ||
| 26 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
| 27 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
| 28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| @@ -247,6 +248,7 @@ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC") | |||
| 247 | .atag_offset = 0x100, | 248 | .atag_offset = 0x100, |
| 248 | .map_io = ts72xx_map_io, | 249 | .map_io = ts72xx_map_io, |
| 249 | .init_irq = ep93xx_init_irq, | 250 | .init_irq = ep93xx_init_irq, |
| 251 | .handle_irq = vic_handle_irq, | ||
| 250 | .timer = &ep93xx_timer, | 252 | .timer = &ep93xx_timer, |
| 251 | .init_machine = ts72xx_init_machine, | 253 | .init_machine = ts72xx_init_machine, |
| 252 | MACHINE_END | 254 | MACHINE_END |
diff --git a/arch/arm/mach-exynos/cpu.c b/arch/arm/mach-exynos/cpu.c index 90ec247f3b37..22316cb31a8c 100644 --- a/arch/arm/mach-exynos/cpu.c +++ b/arch/arm/mach-exynos/cpu.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <asm/mach/irq.h> | 15 | #include <asm/mach/irq.h> |
| 16 | 16 | ||
| 17 | #include <asm/proc-fns.h> | 17 | #include <asm/proc-fns.h> |
| 18 | #include <asm/exception.h> | ||
| 18 | #include <asm/hardware/cache-l2x0.h> | 19 | #include <asm/hardware/cache-l2x0.h> |
| 19 | #include <asm/hardware/gic.h> | 20 | #include <asm/hardware/gic.h> |
| 20 | 21 | ||
| @@ -33,8 +34,6 @@ | |||
| 33 | #include <mach/regs-irq.h> | 34 | #include <mach/regs-irq.h> |
| 34 | #include <mach/regs-pmu.h> | 35 | #include <mach/regs-pmu.h> |
| 35 | 36 | ||
| 36 | unsigned int gic_bank_offset __read_mostly; | ||
| 37 | |||
| 38 | extern int combiner_init(unsigned int combiner_nr, void __iomem *base, | 37 | extern int combiner_init(unsigned int combiner_nr, void __iomem *base, |
| 39 | unsigned int irq_start); | 38 | unsigned int irq_start); |
| 40 | extern void combiner_cascade_irq(unsigned int combiner_nr, unsigned int irq); | 39 | extern void combiner_cascade_irq(unsigned int combiner_nr, unsigned int irq); |
| @@ -207,27 +206,14 @@ void __init exynos4_init_clocks(int xtal) | |||
| 207 | exynos4_setup_clocks(); | 206 | exynos4_setup_clocks(); |
| 208 | } | 207 | } |
| 209 | 208 | ||
| 210 | static void exynos4_gic_irq_fix_base(struct irq_data *d) | ||
| 211 | { | ||
| 212 | struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d); | ||
| 213 | |||
| 214 | gic_data->cpu_base = S5P_VA_GIC_CPU + | ||
| 215 | (gic_bank_offset * smp_processor_id()); | ||
| 216 | |||
| 217 | gic_data->dist_base = S5P_VA_GIC_DIST + | ||
| 218 | (gic_bank_offset * smp_processor_id()); | ||
| 219 | } | ||
| 220 | |||
| 221 | void __init exynos4_init_irq(void) | 209 | void __init exynos4_init_irq(void) |
| 222 | { | 210 | { |
| 223 | int irq; | 211 | int irq; |
| 212 | unsigned int gic_bank_offset; | ||
| 224 | 213 | ||
| 225 | gic_bank_offset = soc_is_exynos4412() ? 0x4000 : 0x8000; | 214 | gic_bank_offset = soc_is_exynos4412() ? 0x4000 : 0x8000; |
| 226 | 215 | ||
| 227 | gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU); | 216 | gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset); |
| 228 | gic_arch_extn.irq_eoi = exynos4_gic_irq_fix_base; | ||
| 229 | gic_arch_extn.irq_unmask = exynos4_gic_irq_fix_base; | ||
| 230 | gic_arch_extn.irq_mask = exynos4_gic_irq_fix_base; | ||
| 231 | 217 | ||
| 232 | for (irq = 0; irq < MAX_COMBINER_NR; irq++) { | 218 | for (irq = 0; irq < MAX_COMBINER_NR; irq++) { |
| 233 | 219 | ||
diff --git a/arch/arm/mach-exynos/include/mach/entry-macro.S b/arch/arm/mach-exynos/include/mach/entry-macro.S index f5e9fd8e37b4..3ba4f547534b 100644 --- a/arch/arm/mach-exynos/include/mach/entry-macro.S +++ b/arch/arm/mach-exynos/include/mach/entry-macro.S | |||
| @@ -9,83 +9,8 @@ | |||
| 9 | * warranty of any kind, whether express or implied. | 9 | * warranty of any kind, whether express or implied. |
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | #include <mach/hardware.h> | ||
| 13 | #include <mach/map.h> | ||
| 14 | #include <asm/hardware/gic.h> | ||
| 15 | |||
| 16 | .macro disable_fiq | 12 | .macro disable_fiq |
| 17 | .endm | 13 | .endm |
| 18 | 14 | ||
| 19 | .macro get_irqnr_preamble, base, tmp | ||
| 20 | mov \tmp, #0 | ||
| 21 | |||
| 22 | mrc p15, 0, \base, c0, c0, 5 | ||
| 23 | and \base, \base, #3 | ||
| 24 | cmp \base, #0 | ||
| 25 | beq 1f | ||
| 26 | |||
| 27 | ldr \tmp, =gic_bank_offset | ||
| 28 | ldr \tmp, [\tmp] | ||
| 29 | cmp \base, #1 | ||
| 30 | beq 1f | ||
| 31 | |||
| 32 | cmp \base, #2 | ||
| 33 | addeq \tmp, \tmp, \tmp | ||
| 34 | addne \tmp, \tmp, \tmp, LSL #1 | ||
| 35 | |||
| 36 | 1: ldr \base, =gic_cpu_base_addr | ||
| 37 | ldr \base, [\base] | ||
| 38 | add \base, \base, \tmp | ||
| 39 | .endm | ||
| 40 | |||
| 41 | .macro arch_ret_to_user, tmp1, tmp2 | 15 | .macro arch_ret_to_user, tmp1, tmp2 |
| 42 | .endm | 16 | .endm |
| 43 | |||
| 44 | /* | ||
| 45 | * The interrupt numbering scheme is defined in the | ||
| 46 | * interrupt controller spec. To wit: | ||
| 47 | * | ||
| 48 | * Interrupts 0-15 are IPI | ||
| 49 | * 16-28 are reserved | ||
| 50 | * 29-31 are local. We allow 30 to be used for the watchdog. | ||
| 51 | * 32-1020 are global | ||
| 52 | * 1021-1022 are reserved | ||
| 53 | * 1023 is "spurious" (no interrupt) | ||
| 54 | * | ||
| 55 | * For now, we ignore all local interrupts so only return an interrupt if it's | ||
| 56 | * between 30 and 1020. The test_for_ipi routine below will pick up on IPIs. | ||
| 57 | * | ||
| 58 | * A simple read from the controller will tell us the number of the highest | ||
| 59 | * priority enabled interrupt. We then just need to check whether it is in the | ||
| 60 | * valid range for an IRQ (30-1020 inclusive). | ||
| 61 | */ | ||
| 62 | |||
| 63 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 64 | |||
| 65 | ldr \irqstat, [\base, #GIC_CPU_INTACK] /* bits 12-10 = src CPU, 9-0 = int # */ | ||
| 66 | |||
| 67 | ldr \tmp, =1021 | ||
| 68 | |||
| 69 | bic \irqnr, \irqstat, #0x1c00 | ||
| 70 | |||
| 71 | cmp \irqnr, #15 | ||
| 72 | cmpcc \irqnr, \irqnr | ||
| 73 | cmpne \irqnr, \tmp | ||
| 74 | cmpcs \irqnr, \irqnr | ||
| 75 | addne \irqnr, \irqnr, #32 | ||
| 76 | |||
| 77 | .endm | ||
| 78 | |||
| 79 | /* We assume that irqstat (the raw value of the IRQ acknowledge | ||
| 80 | * register) is preserved from the macro above. | ||
| 81 | * If there is an IPI, we immediately signal end of interrupt on the | ||
| 82 | * controller, since this requires the original irqstat value which | ||
| 83 | * we won't easily be able to recreate later. | ||
| 84 | */ | ||
| 85 | |||
| 86 | .macro test_for_ipi, irqnr, irqstat, base, tmp | ||
| 87 | bic \irqnr, \irqstat, #0x1c00 | ||
| 88 | cmp \irqnr, #16 | ||
| 89 | strcc \irqstat, [\base, #GIC_CPU_EOI] | ||
| 90 | cmpcs \irqnr, \irqnr | ||
| 91 | .endm | ||
diff --git a/arch/arm/mach-exynos/include/mach/vmalloc.h b/arch/arm/mach-exynos/include/mach/vmalloc.h deleted file mode 100644 index 284330e571d2..000000000000 --- a/arch/arm/mach-exynos/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,22 +0,0 @@ | |||
| 1 | /* linux/arch/arm/mach-exynos4/include/mach/vmalloc.h | ||
| 2 | * | ||
| 3 | * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. | ||
| 4 | * http://www.samsung.com | ||
| 5 | * | ||
| 6 | * Copyright 2010 Ben Dooks <ben-linux@fluff.org> | ||
| 7 | * | ||
| 8 | * Based on arch/arm/mach-s5p6440/include/mach/vmalloc.h | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 as | ||
| 12 | * published by the Free Software Foundation. | ||
| 13 | * | ||
| 14 | * EXYNOS4 vmalloc definition | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 18 | #define __ASM_ARCH_VMALLOC_H __FILE__ | ||
| 19 | |||
| 20 | #define VMALLOC_END 0xF6000000UL | ||
| 21 | |||
| 22 | #endif /* __ASM_ARCH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-exynos/mach-armlex4210.c b/arch/arm/mach-exynos/mach-armlex4210.c index f0ca6c157d29..49da3089249a 100644 --- a/arch/arm/mach-exynos/mach-armlex4210.c +++ b/arch/arm/mach-exynos/mach-armlex4210.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/smsc911x.h> | 16 | #include <linux/smsc911x.h> |
| 17 | 17 | ||
| 18 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
| 19 | #include <asm/hardware/gic.h> | ||
| 19 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
| 20 | 21 | ||
| 21 | #include <plat/cpu.h> | 22 | #include <plat/cpu.h> |
| @@ -210,6 +211,7 @@ MACHINE_START(ARMLEX4210, "ARMLEX4210") | |||
| 210 | .atag_offset = 0x100, | 211 | .atag_offset = 0x100, |
| 211 | .init_irq = exynos4_init_irq, | 212 | .init_irq = exynos4_init_irq, |
| 212 | .map_io = armlex4210_map_io, | 213 | .map_io = armlex4210_map_io, |
| 214 | .handle_irq = gic_handle_irq, | ||
| 213 | .init_machine = armlex4210_machine_init, | 215 | .init_machine = armlex4210_machine_init, |
| 214 | .timer = &exynos4_timer, | 216 | .timer = &exynos4_timer, |
| 215 | MACHINE_END | 217 | MACHINE_END |
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c index 236bbe187163..5acec11821a4 100644 --- a/arch/arm/mach-exynos/mach-nuri.c +++ b/arch/arm/mach-exynos/mach-nuri.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <media/v4l2-mediabus.h> | 32 | #include <media/v4l2-mediabus.h> |
| 33 | 33 | ||
| 34 | #include <asm/mach/arch.h> | 34 | #include <asm/mach/arch.h> |
| 35 | #include <asm/hardware/gic.h> | ||
| 35 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
| 36 | 37 | ||
| 37 | #include <plat/adc.h> | 38 | #include <plat/adc.h> |
| @@ -1333,6 +1334,7 @@ MACHINE_START(NURI, "NURI") | |||
| 1333 | .atag_offset = 0x100, | 1334 | .atag_offset = 0x100, |
| 1334 | .init_irq = exynos4_init_irq, | 1335 | .init_irq = exynos4_init_irq, |
| 1335 | .map_io = nuri_map_io, | 1336 | .map_io = nuri_map_io, |
| 1337 | .handle_irq = gic_handle_irq, | ||
| 1336 | .init_machine = nuri_machine_init, | 1338 | .init_machine = nuri_machine_init, |
| 1337 | .timer = &exynos4_timer, | 1339 | .timer = &exynos4_timer, |
| 1338 | .reserve = &nuri_reserve, | 1340 | .reserve = &nuri_reserve, |
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c index f80b563f2be7..5561b06c38ec 100644 --- a/arch/arm/mach-exynos/mach-origen.c +++ b/arch/arm/mach-exynos/mach-origen.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/lcd.h> | 22 | #include <linux/lcd.h> |
| 23 | 23 | ||
| 24 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
| 25 | #include <asm/hardware/gic.h> | ||
| 25 | #include <asm/mach-types.h> | 26 | #include <asm/mach-types.h> |
| 26 | 27 | ||
| 27 | #include <video/platform_lcd.h> | 28 | #include <video/platform_lcd.h> |
| @@ -694,6 +695,7 @@ MACHINE_START(ORIGEN, "ORIGEN") | |||
| 694 | .atag_offset = 0x100, | 695 | .atag_offset = 0x100, |
| 695 | .init_irq = exynos4_init_irq, | 696 | .init_irq = exynos4_init_irq, |
| 696 | .map_io = origen_map_io, | 697 | .map_io = origen_map_io, |
| 698 | .handle_irq = gic_handle_irq, | ||
| 697 | .init_machine = origen_machine_init, | 699 | .init_machine = origen_machine_init, |
| 698 | .timer = &exynos4_timer, | 700 | .timer = &exynos4_timer, |
| 699 | .reserve = &origen_reserve, | 701 | .reserve = &origen_reserve, |
diff --git a/arch/arm/mach-exynos/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c index fcf2e0e23d53..722d82d7f217 100644 --- a/arch/arm/mach-exynos/mach-smdk4x12.c +++ b/arch/arm/mach-exynos/mach-smdk4x12.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/serial_core.h> | 21 | #include <linux/serial_core.h> |
| 22 | 22 | ||
| 23 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
| 24 | #include <asm/hardware/gic.h> | ||
| 24 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
| 25 | 26 | ||
| 26 | #include <plat/backlight.h> | 27 | #include <plat/backlight.h> |
| @@ -287,6 +288,7 @@ MACHINE_START(SMDK4212, "SMDK4212") | |||
| 287 | .atag_offset = 0x100, | 288 | .atag_offset = 0x100, |
| 288 | .init_irq = exynos4_init_irq, | 289 | .init_irq = exynos4_init_irq, |
| 289 | .map_io = smdk4x12_map_io, | 290 | .map_io = smdk4x12_map_io, |
| 291 | .handle_irq = gic_handle_irq, | ||
| 290 | .init_machine = smdk4x12_machine_init, | 292 | .init_machine = smdk4x12_machine_init, |
| 291 | .timer = &exynos4_timer, | 293 | .timer = &exynos4_timer, |
| 292 | MACHINE_END | 294 | MACHINE_END |
| @@ -297,6 +299,7 @@ MACHINE_START(SMDK4412, "SMDK4412") | |||
| 297 | .atag_offset = 0x100, | 299 | .atag_offset = 0x100, |
| 298 | .init_irq = exynos4_init_irq, | 300 | .init_irq = exynos4_init_irq, |
| 299 | .map_io = smdk4x12_map_io, | 301 | .map_io = smdk4x12_map_io, |
| 302 | .handle_irq = gic_handle_irq, | ||
| 300 | .init_machine = smdk4x12_machine_init, | 303 | .init_machine = smdk4x12_machine_init, |
| 301 | .timer = &exynos4_timer, | 304 | .timer = &exynos4_timer, |
| 302 | MACHINE_END | 305 | MACHINE_END |
diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c index cec2afabe7b4..edc60b6108ed 100644 --- a/arch/arm/mach-exynos/mach-smdkv310.c +++ b/arch/arm/mach-exynos/mach-smdkv310.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/pwm_backlight.h> | 21 | #include <linux/pwm_backlight.h> |
| 22 | 22 | ||
| 23 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
| 24 | #include <asm/hardware/gic.h> | ||
| 24 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
| 25 | 26 | ||
| 26 | #include <video/platform_lcd.h> | 27 | #include <video/platform_lcd.h> |
| @@ -375,6 +376,7 @@ MACHINE_START(SMDKV310, "SMDKV310") | |||
| 375 | .atag_offset = 0x100, | 376 | .atag_offset = 0x100, |
| 376 | .init_irq = exynos4_init_irq, | 377 | .init_irq = exynos4_init_irq, |
| 377 | .map_io = smdkv310_map_io, | 378 | .map_io = smdkv310_map_io, |
| 379 | .handle_irq = gic_handle_irq, | ||
| 378 | .init_machine = smdkv310_machine_init, | 380 | .init_machine = smdkv310_machine_init, |
| 379 | .timer = &exynos4_timer, | 381 | .timer = &exynos4_timer, |
| 380 | .reserve = &smdkv310_reserve, | 382 | .reserve = &smdkv310_reserve, |
| @@ -385,6 +387,7 @@ MACHINE_START(SMDKC210, "SMDKC210") | |||
| 385 | .atag_offset = 0x100, | 387 | .atag_offset = 0x100, |
| 386 | .init_irq = exynos4_init_irq, | 388 | .init_irq = exynos4_init_irq, |
| 387 | .map_io = smdkv310_map_io, | 389 | .map_io = smdkv310_map_io, |
| 390 | .handle_irq = gic_handle_irq, | ||
| 388 | .init_machine = smdkv310_machine_init, | 391 | .init_machine = smdkv310_machine_init, |
| 389 | .timer = &exynos4_timer, | 392 | .timer = &exynos4_timer, |
| 390 | MACHINE_END | 393 | MACHINE_END |
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index a2a177ff4b44..cfc7d5076f5a 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/i2c/atmel_mxt_ts.h> | 24 | #include <linux/i2c/atmel_mxt_ts.h> |
| 25 | 25 | ||
| 26 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
| 27 | #include <asm/hardware/gic.h> | ||
| 27 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 28 | 29 | ||
| 29 | #include <plat/regs-serial.h> | 30 | #include <plat/regs-serial.h> |
| @@ -1058,6 +1059,7 @@ MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210") | |||
| 1058 | .atag_offset = 0x100, | 1059 | .atag_offset = 0x100, |
| 1059 | .init_irq = exynos4_init_irq, | 1060 | .init_irq = exynos4_init_irq, |
| 1060 | .map_io = universal_map_io, | 1061 | .map_io = universal_map_io, |
| 1062 | .handle_irq = gic_handle_irq, | ||
| 1061 | .init_machine = universal_machine_init, | 1063 | .init_machine = universal_machine_init, |
| 1062 | .timer = &exynos4_timer, | 1064 | .timer = &exynos4_timer, |
| 1063 | .reserve = &universal_reserve, | 1065 | .reserve = &universal_reserve, |
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c index 69ffb2fb3875..60bc45e3e709 100644 --- a/arch/arm/mach-exynos/platsmp.c +++ b/arch/arm/mach-exynos/platsmp.c | |||
| @@ -32,7 +32,6 @@ | |||
| 32 | 32 | ||
| 33 | #include <plat/cpu.h> | 33 | #include <plat/cpu.h> |
| 34 | 34 | ||
| 35 | extern unsigned int gic_bank_offset; | ||
| 36 | extern void exynos4_secondary_startup(void); | 35 | extern void exynos4_secondary_startup(void); |
| 37 | 36 | ||
| 38 | #define CPU1_BOOT_REG (samsung_rev() == EXYNOS4210_REV_1_1 ? \ | 37 | #define CPU1_BOOT_REG (samsung_rev() == EXYNOS4210_REV_1_1 ? \ |
| @@ -65,31 +64,6 @@ static void __iomem *scu_base_addr(void) | |||
| 65 | 64 | ||
| 66 | static DEFINE_SPINLOCK(boot_lock); | 65 | static DEFINE_SPINLOCK(boot_lock); |
| 67 | 66 | ||
| 68 | static void __cpuinit exynos4_gic_secondary_init(void) | ||
| 69 | { | ||
| 70 | void __iomem *dist_base = S5P_VA_GIC_DIST + | ||
| 71 | (gic_bank_offset * smp_processor_id()); | ||
| 72 | void __iomem *cpu_base = S5P_VA_GIC_CPU + | ||
| 73 | (gic_bank_offset * smp_processor_id()); | ||
| 74 | int i; | ||
| 75 | |||
| 76 | /* | ||
| 77 | * Deal with the banked PPI and SGI interrupts - disable all | ||
| 78 | * PPI interrupts, ensure all SGI interrupts are enabled. | ||
| 79 | */ | ||
| 80 | __raw_writel(0xffff0000, dist_base + GIC_DIST_ENABLE_CLEAR); | ||
| 81 | __raw_writel(0x0000ffff, dist_base + GIC_DIST_ENABLE_SET); | ||
| 82 | |||
| 83 | /* | ||
| 84 | * Set priority on PPI and SGI interrupts | ||
| 85 | */ | ||
| 86 | for (i = 0; i < 32; i += 4) | ||
| 87 | __raw_writel(0xa0a0a0a0, dist_base + GIC_DIST_PRI + i * 4 / 4); | ||
| 88 | |||
| 89 | __raw_writel(0xf0, cpu_base + GIC_CPU_PRIMASK); | ||
| 90 | __raw_writel(1, cpu_base + GIC_CPU_CTRL); | ||
| 91 | } | ||
| 92 | |||
| 93 | void __cpuinit platform_secondary_init(unsigned int cpu) | 67 | void __cpuinit platform_secondary_init(unsigned int cpu) |
| 94 | { | 68 | { |
| 95 | /* | 69 | /* |
| @@ -97,7 +71,7 @@ void __cpuinit platform_secondary_init(unsigned int cpu) | |||
| 97 | * core (e.g. timer irq), then they will not have been enabled | 71 | * core (e.g. timer irq), then they will not have been enabled |
| 98 | * for us: do so | 72 | * for us: do so |
| 99 | */ | 73 | */ |
| 100 | exynos4_gic_secondary_init(); | 74 | gic_secondary_init(0); |
| 101 | 75 | ||
| 102 | /* | 76 | /* |
| 103 | * let the primary processor know we're out of the | 77 | * let the primary processor know we're out of the |
diff --git a/arch/arm/mach-footbridge/cats-hw.c b/arch/arm/mach-footbridge/cats-hw.c index d5f178540928..60b6774e1eaa 100644 --- a/arch/arm/mach-footbridge/cats-hw.c +++ b/arch/arm/mach-footbridge/cats-hw.c | |||
| @@ -86,7 +86,7 @@ fixup_cats(struct tag *tags, char **cmdline, struct meminfo *mi) | |||
| 86 | MACHINE_START(CATS, "Chalice-CATS") | 86 | MACHINE_START(CATS, "Chalice-CATS") |
| 87 | /* Maintainer: Philip Blundell */ | 87 | /* Maintainer: Philip Blundell */ |
| 88 | .atag_offset = 0x100, | 88 | .atag_offset = 0x100, |
| 89 | .soft_reboot = 1, | 89 | .restart_mode = 's', |
| 90 | .fixup = fixup_cats, | 90 | .fixup = fixup_cats, |
| 91 | .map_io = footbridge_map_io, | 91 | .map_io = footbridge_map_io, |
| 92 | .init_irq = footbridge_init_irq, | 92 | .init_irq = footbridge_init_irq, |
diff --git a/arch/arm/mach-footbridge/include/mach/system.h b/arch/arm/mach-footbridge/include/mach/system.h index 0b2931566209..249f895910fb 100644 --- a/arch/arm/mach-footbridge/include/mach/system.h +++ b/arch/arm/mach-footbridge/include/mach/system.h | |||
| @@ -24,7 +24,7 @@ static inline void arch_reset(char mode, const char *cmd) | |||
| 24 | /* | 24 | /* |
| 25 | * Jump into the ROM | 25 | * Jump into the ROM |
| 26 | */ | 26 | */ |
| 27 | cpu_reset(0x41000000); | 27 | soft_restart(0x41000000); |
| 28 | } else { | 28 | } else { |
| 29 | if (machine_is_netwinder()) { | 29 | if (machine_is_netwinder()) { |
| 30 | /* open up the SuperIO chip | 30 | /* open up the SuperIO chip |
diff --git a/arch/arm/mach-footbridge/include/mach/vmalloc.h b/arch/arm/mach-footbridge/include/mach/vmalloc.h deleted file mode 100644 index 40ba78e5782b..000000000000 --- a/arch/arm/mach-footbridge/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-footbridge/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | |||
| 9 | |||
| 10 | #define VMALLOC_END 0xf0000000UL | ||
diff --git a/arch/arm/mach-gemini/include/mach/vmalloc.h b/arch/arm/mach-gemini/include/mach/vmalloc.h deleted file mode 100644 index 45371eb86fcb..000000000000 --- a/arch/arm/mach-gemini/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008-2009 Paulius Zaleckas <paulius.zaleckas@teltonika.lt> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #define VMALLOC_END 0xf0000000UL | ||
diff --git a/arch/arm/mach-h720x/include/mach/vmalloc.h b/arch/arm/mach-h720x/include/mach/vmalloc.h deleted file mode 100644 index 8520b4a4d4e6..000000000000 --- a/arch/arm/mach-h720x/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-h720x/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef __ARCH_ARM_VMALLOC_H | ||
| 6 | #define __ARCH_ARM_VMALLOC_H | ||
| 7 | |||
| 8 | #define VMALLOC_END 0xd0000000UL | ||
| 9 | |||
| 10 | #endif | ||
diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c index 88660d500f5b..7266dd510f1a 100644 --- a/arch/arm/mach-highbank/highbank.c +++ b/arch/arm/mach-highbank/highbank.c | |||
| @@ -144,6 +144,7 @@ DT_MACHINE_START(HIGHBANK, "Highbank") | |||
| 144 | .map_io = highbank_map_io, | 144 | .map_io = highbank_map_io, |
| 145 | .init_irq = highbank_init_irq, | 145 | .init_irq = highbank_init_irq, |
| 146 | .timer = &highbank_timer, | 146 | .timer = &highbank_timer, |
| 147 | .handle_irq = gic_handle_irq, | ||
| 147 | .init_machine = highbank_init, | 148 | .init_machine = highbank_init, |
| 148 | .dt_compat = highbank_match, | 149 | .dt_compat = highbank_match, |
| 149 | MACHINE_END | 150 | MACHINE_END |
diff --git a/arch/arm/mach-highbank/include/mach/entry-macro.S b/arch/arm/mach-highbank/include/mach/entry-macro.S index 73c11297509e..a14f9e62ca92 100644 --- a/arch/arm/mach-highbank/include/mach/entry-macro.S +++ b/arch/arm/mach-highbank/include/mach/entry-macro.S | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | #include <asm/hardware/entry-macro-gic.S> | ||
| 2 | |||
| 3 | .macro disable_fiq | 1 | .macro disable_fiq |
| 4 | .endm | 2 | .endm |
| 5 | 3 | ||
diff --git a/arch/arm/mach-highbank/include/mach/vmalloc.h b/arch/arm/mach-highbank/include/mach/vmalloc.h deleted file mode 100644 index 1969e954277a..000000000000 --- a/arch/arm/mach-highbank/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1 +0,0 @@ | |||
| 1 | #define VMALLOC_END 0xFEE00000UL | ||
diff --git a/arch/arm/mach-integrator/include/mach/vmalloc.h b/arch/arm/mach-integrator/include/mach/vmalloc.h deleted file mode 100644 index 2f5a2bafb11f..000000000000 --- a/arch/arm/mach-integrator/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-integrator/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2000 Russell King. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | #define VMALLOC_END 0xd0000000UL | ||
diff --git a/arch/arm/mach-iop13xx/include/mach/vmalloc.h b/arch/arm/mach-iop13xx/include/mach/vmalloc.h deleted file mode 100644 index c53456740345..000000000000 --- a/arch/arm/mach-iop13xx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,4 +0,0 @@ | |||
| 1 | #ifndef _VMALLOC_H_ | ||
| 2 | #define _VMALLOC_H_ | ||
| 3 | #define VMALLOC_END 0xfa000000UL | ||
| 4 | #endif | ||
diff --git a/arch/arm/mach-iop32x/include/mach/io.h b/arch/arm/mach-iop32x/include/mach/io.h index 059c783ce0b2..2d88264b9863 100644 --- a/arch/arm/mach-iop32x/include/mach/io.h +++ b/arch/arm/mach-iop32x/include/mach/io.h | |||
| @@ -13,15 +13,8 @@ | |||
| 13 | 13 | ||
| 14 | #include <asm/hardware/iop3xx.h> | 14 | #include <asm/hardware/iop3xx.h> |
| 15 | 15 | ||
| 16 | extern void __iomem *__iop3xx_ioremap(unsigned long cookie, size_t size, | ||
| 17 | unsigned int mtype); | ||
| 18 | extern void __iop3xx_iounmap(void __iomem *addr); | ||
| 19 | |||
| 20 | #define IO_SPACE_LIMIT 0xffffffff | 16 | #define IO_SPACE_LIMIT 0xffffffff |
| 21 | #define __io(p) ((void __iomem *)IOP3XX_PCI_IO_PHYS_TO_VIRT(p)) | 17 | #define __io(p) ((void __iomem *)IOP3XX_PCI_IO_PHYS_TO_VIRT(p)) |
| 22 | #define __mem_pci(a) (a) | 18 | #define __mem_pci(a) (a) |
| 23 | 19 | ||
| 24 | #define __arch_ioremap __iop3xx_ioremap | ||
| 25 | #define __arch_iounmap __iop3xx_iounmap | ||
| 26 | |||
| 27 | #endif | 20 | #endif |
diff --git a/arch/arm/mach-iop32x/include/mach/system.h b/arch/arm/mach-iop32x/include/mach/system.h index a4b808fe0d81..b4f83e5973b2 100644 --- a/arch/arm/mach-iop32x/include/mach/system.h +++ b/arch/arm/mach-iop32x/include/mach/system.h | |||
| @@ -18,8 +18,6 @@ static inline void arch_idle(void) | |||
| 18 | 18 | ||
| 19 | static inline void arch_reset(char mode, const char *cmd) | 19 | static inline void arch_reset(char mode, const char *cmd) |
| 20 | { | 20 | { |
| 21 | local_irq_disable(); | ||
| 22 | |||
| 23 | if (machine_is_n2100()) { | 21 | if (machine_is_n2100()) { |
| 24 | gpio_line_set(N2100_HARDWARE_RESET, GPIO_LOW); | 22 | gpio_line_set(N2100_HARDWARE_RESET, GPIO_LOW); |
| 25 | gpio_line_config(N2100_HARDWARE_RESET, GPIO_OUT); | 23 | gpio_line_config(N2100_HARDWARE_RESET, GPIO_OUT); |
| @@ -30,5 +28,5 @@ static inline void arch_reset(char mode, const char *cmd) | |||
| 30 | *IOP3XX_PCSR = 0x30; | 28 | *IOP3XX_PCSR = 0x30; |
| 31 | 29 | ||
| 32 | /* Jump into ROM at address 0 */ | 30 | /* Jump into ROM at address 0 */ |
| 33 | cpu_reset(0); | 31 | soft_restart(0); |
| 34 | } | 32 | } |
diff --git a/arch/arm/mach-iop32x/include/mach/vmalloc.h b/arch/arm/mach-iop32x/include/mach/vmalloc.h deleted file mode 100644 index c4862d48e583..000000000000 --- a/arch/arm/mach-iop32x/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-iop32x/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #define VMALLOC_END 0xfe000000UL | ||
diff --git a/arch/arm/mach-iop33x/include/mach/io.h b/arch/arm/mach-iop33x/include/mach/io.h index 39e893e97c21..a8a66fc8fbdb 100644 --- a/arch/arm/mach-iop33x/include/mach/io.h +++ b/arch/arm/mach-iop33x/include/mach/io.h | |||
| @@ -13,15 +13,8 @@ | |||
| 13 | 13 | ||
| 14 | #include <asm/hardware/iop3xx.h> | 14 | #include <asm/hardware/iop3xx.h> |
| 15 | 15 | ||
| 16 | extern void __iomem *__iop3xx_ioremap(unsigned long cookie, size_t size, | ||
| 17 | unsigned int mtype); | ||
| 18 | extern void __iop3xx_iounmap(void __iomem *addr); | ||
| 19 | |||
| 20 | #define IO_SPACE_LIMIT 0xffffffff | 16 | #define IO_SPACE_LIMIT 0xffffffff |
| 21 | #define __io(p) ((void __iomem *)IOP3XX_PCI_IO_PHYS_TO_VIRT(p)) | 17 | #define __io(p) ((void __iomem *)IOP3XX_PCI_IO_PHYS_TO_VIRT(p)) |
| 22 | #define __mem_pci(a) (a) | 18 | #define __mem_pci(a) (a) |
| 23 | 19 | ||
| 24 | #define __arch_ioremap __iop3xx_ioremap | ||
| 25 | #define __arch_iounmap __iop3xx_iounmap | ||
| 26 | |||
| 27 | #endif | 20 | #endif |
diff --git a/arch/arm/mach-iop33x/include/mach/system.h b/arch/arm/mach-iop33x/include/mach/system.h index f192a34be073..86d1b20dd692 100644 --- a/arch/arm/mach-iop33x/include/mach/system.h +++ b/arch/arm/mach-iop33x/include/mach/system.h | |||
| @@ -19,5 +19,5 @@ static inline void arch_reset(char mode, const char *cmd) | |||
| 19 | *IOP3XX_PCSR = 0x30; | 19 | *IOP3XX_PCSR = 0x30; |
| 20 | 20 | ||
| 21 | /* Jump into ROM at address 0 */ | 21 | /* Jump into ROM at address 0 */ |
| 22 | cpu_reset(0); | 22 | soft_restart(0); |
| 23 | } | 23 | } |
diff --git a/arch/arm/mach-iop33x/include/mach/vmalloc.h b/arch/arm/mach-iop33x/include/mach/vmalloc.h deleted file mode 100644 index 48331dc23704..000000000000 --- a/arch/arm/mach-iop33x/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-iop33x/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #define VMALLOC_END 0xfe000000UL | ||
diff --git a/arch/arm/mach-ixp2000/include/mach/system.h b/arch/arm/mach-ixp2000/include/mach/system.h index de370992c848..810df7b93982 100644 --- a/arch/arm/mach-ixp2000/include/mach/system.h +++ b/arch/arm/mach-ixp2000/include/mach/system.h | |||
| @@ -19,8 +19,6 @@ static inline void arch_idle(void) | |||
| 19 | 19 | ||
| 20 | static inline void arch_reset(char mode, const char *cmd) | 20 | static inline void arch_reset(char mode, const char *cmd) |
| 21 | { | 21 | { |
| 22 | local_irq_disable(); | ||
| 23 | |||
| 24 | /* | 22 | /* |
| 25 | * Reset flash banking register so that we are pointing at | 23 | * Reset flash banking register so that we are pointing at |
| 26 | * RedBoot bank. | 24 | * RedBoot bank. |
diff --git a/arch/arm/mach-ixp2000/include/mach/vmalloc.h b/arch/arm/mach-ixp2000/include/mach/vmalloc.h deleted file mode 100644 index 61c8dae24f95..000000000000 --- a/arch/arm/mach-ixp2000/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp2000/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Author: Naeem Afzal <naeem.m.afzal@intel.com> | ||
| 5 | * | ||
| 6 | * Copyright 2002 Intel Corp. | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
| 14 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
| 15 | * physical memory until the kernel virtual memory starts. That means that | ||
| 16 | * any out-of-bounds memory accesses will hopefully be caught. | ||
| 17 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
| 18 | * area for the same reason. ;) | ||
| 19 | */ | ||
| 20 | #define VMALLOC_END 0xfb000000UL | ||
diff --git a/arch/arm/mach-ixp23xx/include/mach/io.h b/arch/arm/mach-ixp23xx/include/mach/io.h index a1749d0fd896..4ce4353b9f72 100644 --- a/arch/arm/mach-ixp23xx/include/mach/io.h +++ b/arch/arm/mach-ixp23xx/include/mach/io.h | |||
| @@ -20,33 +20,4 @@ | |||
| 20 | #define __io(p) ((void __iomem*)((p) + IXP23XX_PCI_IO_VIRT)) | 20 | #define __io(p) ((void __iomem*)((p) + IXP23XX_PCI_IO_VIRT)) |
| 21 | #define __mem_pci(a) (a) | 21 | #define __mem_pci(a) (a) |
| 22 | 22 | ||
| 23 | static inline void __iomem * | ||
| 24 | ixp23xx_ioremap(unsigned long addr, unsigned long size, unsigned int mtype) | ||
| 25 | { | ||
| 26 | if (addr >= IXP23XX_PCI_MEM_START && | ||
| 27 | addr <= IXP23XX_PCI_MEM_START + IXP23XX_PCI_MEM_SIZE) { | ||
| 28 | if (addr + size > IXP23XX_PCI_MEM_START + IXP23XX_PCI_MEM_SIZE) | ||
| 29 | return NULL; | ||
| 30 | |||
| 31 | return (void __iomem *) | ||
| 32 | ((addr - IXP23XX_PCI_MEM_START) + IXP23XX_PCI_MEM_VIRT); | ||
| 33 | } | ||
| 34 | |||
| 35 | return __arm_ioremap(addr, size, mtype); | ||
| 36 | } | ||
| 37 | |||
| 38 | static inline void | ||
| 39 | ixp23xx_iounmap(void __iomem *addr) | ||
| 40 | { | ||
| 41 | if ((((u32)addr) >= IXP23XX_PCI_MEM_VIRT) && | ||
| 42 | (((u32)addr) < IXP23XX_PCI_MEM_VIRT + IXP23XX_PCI_MEM_SIZE)) | ||
| 43 | return; | ||
| 44 | |||
| 45 | __iounmap(addr); | ||
| 46 | } | ||
| 47 | |||
| 48 | #define __arch_ioremap ixp23xx_ioremap | ||
| 49 | #define __arch_iounmap ixp23xx_iounmap | ||
| 50 | |||
| 51 | |||
| 52 | #endif | 23 | #endif |
diff --git a/arch/arm/mach-ixp23xx/include/mach/vmalloc.h b/arch/arm/mach-ixp23xx/include/mach/vmalloc.h deleted file mode 100644 index 896c56a1c00e..000000000000 --- a/arch/arm/mach-ixp23xx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp23xx/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (c) 2005 MontaVista Software, Inc. | ||
| 5 | * | ||
| 6 | * NPU mappings end at 0xf0000000 and we allocate 64MB for board | ||
| 7 | * specific static I/O. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #define VMALLOC_END (0xec000000UL) | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/system.h b/arch/arm/mach-ixp4xx/include/mach/system.h index 54c0af7fa2d4..24337d9d275b 100644 --- a/arch/arm/mach-ixp4xx/include/mach/system.h +++ b/arch/arm/mach-ixp4xx/include/mach/system.h | |||
| @@ -26,7 +26,7 @@ static inline void arch_reset(char mode, const char *cmd) | |||
| 26 | { | 26 | { |
| 27 | if ( 1 && mode == 's') { | 27 | if ( 1 && mode == 's') { |
| 28 | /* Jump into ROM at address 0 */ | 28 | /* Jump into ROM at address 0 */ |
| 29 | cpu_reset(0); | 29 | soft_restart(0); |
| 30 | } else { | 30 | } else { |
| 31 | /* Use on-chip reset capability */ | 31 | /* Use on-chip reset capability */ |
| 32 | 32 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/vmalloc.h b/arch/arm/mach-ixp4xx/include/mach/vmalloc.h deleted file mode 100644 index 9bcd64d59854..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | #define VMALLOC_END (0xff000000UL) | ||
| 5 | |||
diff --git a/arch/arm/mach-kirkwood/include/mach/io.h b/arch/arm/mach-kirkwood/include/mach/io.h index 1aaddc364f2e..49dd0cb5e166 100644 --- a/arch/arm/mach-kirkwood/include/mach/io.h +++ b/arch/arm/mach-kirkwood/include/mach/io.h | |||
| @@ -19,31 +19,6 @@ static inline void __iomem *__io(unsigned long addr) | |||
| 19 | + KIRKWOOD_PCIE_IO_VIRT_BASE); | 19 | + KIRKWOOD_PCIE_IO_VIRT_BASE); |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | static inline void __iomem * | ||
| 23 | __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) | ||
| 24 | { | ||
| 25 | void __iomem *retval; | ||
| 26 | unsigned long offs = paddr - KIRKWOOD_REGS_PHYS_BASE; | ||
| 27 | if (mtype == MT_DEVICE && size && offs < KIRKWOOD_REGS_SIZE && | ||
| 28 | size <= KIRKWOOD_REGS_SIZE && offs + size <= KIRKWOOD_REGS_SIZE) { | ||
| 29 | retval = (void __iomem *)KIRKWOOD_REGS_VIRT_BASE + offs; | ||
| 30 | } else { | ||
| 31 | retval = __arm_ioremap(paddr, size, mtype); | ||
| 32 | } | ||
| 33 | |||
| 34 | return retval; | ||
| 35 | } | ||
| 36 | |||
| 37 | static inline void | ||
| 38 | __arch_iounmap(void __iomem *addr) | ||
| 39 | { | ||
| 40 | if (addr < (void __iomem *)KIRKWOOD_REGS_VIRT_BASE || | ||
| 41 | addr >= (void __iomem *)(KIRKWOOD_REGS_VIRT_BASE + KIRKWOOD_REGS_SIZE)) | ||
| 42 | __iounmap(addr); | ||
| 43 | } | ||
| 44 | |||
| 45 | #define __arch_ioremap __arch_ioremap | ||
| 46 | #define __arch_iounmap __arch_iounmap | ||
| 47 | #define __io(a) __io(a) | 22 | #define __io(a) __io(a) |
| 48 | #define __mem_pci(a) (a) | 23 | #define __mem_pci(a) (a) |
| 49 | 24 | ||
diff --git a/arch/arm/mach-kirkwood/include/mach/vmalloc.h b/arch/arm/mach-kirkwood/include/mach/vmalloc.h deleted file mode 100644 index bf162ca3d2c1..000000000000 --- a/arch/arm/mach-kirkwood/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-kirkwood/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #define VMALLOC_END 0xfe800000UL | ||
diff --git a/arch/arm/mach-ks8695/include/mach/system.h b/arch/arm/mach-ks8695/include/mach/system.h index fb1dda9be2d0..ceb19c90aa52 100644 --- a/arch/arm/mach-ks8695/include/mach/system.h +++ b/arch/arm/mach-ks8695/include/mach/system.h | |||
| @@ -32,7 +32,7 @@ static void arch_reset(char mode, const char *cmd) | |||
| 32 | unsigned int reg; | 32 | unsigned int reg; |
| 33 | 33 | ||
| 34 | if (mode == 's') | 34 | if (mode == 's') |
| 35 | cpu_reset(0); | 35 | soft_restart(0); |
| 36 | 36 | ||
| 37 | /* disable timer0 */ | 37 | /* disable timer0 */ |
| 38 | reg = __raw_readl(KS8695_TMR_VA + KS8695_TMCON); | 38 | reg = __raw_readl(KS8695_TMR_VA + KS8695_TMCON); |
diff --git a/arch/arm/mach-ks8695/include/mach/vmalloc.h b/arch/arm/mach-ks8695/include/mach/vmalloc.h deleted file mode 100644 index 744ac66be3a2..000000000000 --- a/arch/arm/mach-ks8695/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,19 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ks8695/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2006 Ben Dooks | ||
| 5 | * Copyright (C) 2006 Simtec Electronics <linux@simtec.co.uk> | ||
| 6 | * | ||
| 7 | * KS8695 vmalloc definition | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 15 | #define __ASM_ARCH_VMALLOC_H | ||
| 16 | |||
| 17 | #define VMALLOC_END (KS8695_IO_VA & PGDIR_MASK) | ||
| 18 | |||
| 19 | #endif | ||
diff --git a/arch/arm/mach-lpc32xx/include/mach/system.h b/arch/arm/mach-lpc32xx/include/mach/system.h index df3b0dea4d7b..d47f3b1c24b8 100644 --- a/arch/arm/mach-lpc32xx/include/mach/system.h +++ b/arch/arm/mach-lpc32xx/include/mach/system.h | |||
| @@ -33,9 +33,6 @@ static inline void arch_reset(char mode, const char *cmd) | |||
| 33 | case 'h': | 33 | case 'h': |
| 34 | printk(KERN_CRIT "RESET: Rebooting system\n"); | 34 | printk(KERN_CRIT "RESET: Rebooting system\n"); |
| 35 | 35 | ||
| 36 | /* Disable interrupts */ | ||
| 37 | local_irq_disable(); | ||
| 38 | |||
| 39 | lpc32xx_watchdog_reset(); | 36 | lpc32xx_watchdog_reset(); |
| 40 | break; | 37 | break; |
| 41 | 38 | ||
diff --git a/arch/arm/mach-lpc32xx/include/mach/vmalloc.h b/arch/arm/mach-lpc32xx/include/mach/vmalloc.h deleted file mode 100644 index 720fa43a60bf..000000000000 --- a/arch/arm/mach-lpc32xx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,24 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-lpc32xx/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Author: Kevin Wells <kevin.wells@nxp.com> | ||
| 5 | * | ||
| 6 | * Copyright (C) 2010 NXP Semiconductors | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License, or | ||
| 11 | * (at your option) any later version. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 20 | #define __ASM_ARCH_VMALLOC_H | ||
| 21 | |||
| 22 | #define VMALLOC_END 0xF0000000UL | ||
| 23 | |||
| 24 | #endif | ||
diff --git a/arch/arm/mach-mmp/include/mach/system.h b/arch/arm/mach-mmp/include/mach/system.h index 1a8a25edb1b4..cb0637933a85 100644 --- a/arch/arm/mach-mmp/include/mach/system.h +++ b/arch/arm/mach-mmp/include/mach/system.h | |||
| @@ -19,8 +19,8 @@ static inline void arch_idle(void) | |||
| 19 | static inline void arch_reset(char mode, const char *cmd) | 19 | static inline void arch_reset(char mode, const char *cmd) |
| 20 | { | 20 | { |
| 21 | if (cpu_is_pxa168()) | 21 | if (cpu_is_pxa168()) |
| 22 | cpu_reset(0xffff0000); | 22 | soft_restart(0xffff0000); |
| 23 | else | 23 | else |
| 24 | cpu_reset(0); | 24 | soft_restart(0); |
| 25 | } | 25 | } |
| 26 | #endif /* __ASM_MACH_SYSTEM_H */ | 26 | #endif /* __ASM_MACH_SYSTEM_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/vmalloc.h b/arch/arm/mach-mmp/include/mach/vmalloc.h deleted file mode 100644 index 1d0bac003ad0..000000000000 --- a/arch/arm/mach-mmp/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-mmp/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #define VMALLOC_END 0xfe000000UL | ||
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c index 6dc1cbd2a595..ed3598128530 100644 --- a/arch/arm/mach-msm/board-msm8960.c +++ b/arch/arm/mach-msm/board-msm8960.c | |||
| @@ -99,6 +99,7 @@ MACHINE_START(MSM8960_SIM, "QCT MSM8960 SIMULATOR") | |||
| 99 | .map_io = msm8960_map_io, | 99 | .map_io = msm8960_map_io, |
| 100 | .init_irq = msm8960_init_irq, | 100 | .init_irq = msm8960_init_irq, |
| 101 | .timer = &msm_timer, | 101 | .timer = &msm_timer, |
| 102 | .handle_irq = gic_handle_irq, | ||
| 102 | .init_machine = msm8960_sim_init, | 103 | .init_machine = msm8960_sim_init, |
| 103 | MACHINE_END | 104 | MACHINE_END |
| 104 | 105 | ||
| @@ -108,6 +109,7 @@ MACHINE_START(MSM8960_RUMI3, "QCT MSM8960 RUMI3") | |||
| 108 | .map_io = msm8960_map_io, | 109 | .map_io = msm8960_map_io, |
| 109 | .init_irq = msm8960_init_irq, | 110 | .init_irq = msm8960_init_irq, |
| 110 | .timer = &msm_timer, | 111 | .timer = &msm_timer, |
| 112 | .handle_irq = gic_handle_irq, | ||
| 111 | .init_machine = msm8960_rumi3_init, | 113 | .init_machine = msm8960_rumi3_init, |
| 112 | MACHINE_END | 114 | MACHINE_END |
| 113 | 115 | ||
diff --git a/arch/arm/mach-msm/board-msm8x60.c b/arch/arm/mach-msm/board-msm8x60.c index 44bf71688373..0a113424632c 100644 --- a/arch/arm/mach-msm/board-msm8x60.c +++ b/arch/arm/mach-msm/board-msm8x60.c | |||
| @@ -108,6 +108,7 @@ MACHINE_START(MSM8X60_RUMI3, "QCT MSM8X60 RUMI3") | |||
| 108 | .reserve = msm8x60_reserve, | 108 | .reserve = msm8x60_reserve, |
| 109 | .map_io = msm8x60_map_io, | 109 | .map_io = msm8x60_map_io, |
| 110 | .init_irq = msm8x60_init_irq, | 110 | .init_irq = msm8x60_init_irq, |
| 111 | .handle_irq = gic_handle_irq, | ||
| 111 | .init_machine = msm8x60_init, | 112 | .init_machine = msm8x60_init, |
| 112 | .timer = &msm_timer, | 113 | .timer = &msm_timer, |
| 113 | MACHINE_END | 114 | MACHINE_END |
| @@ -117,6 +118,7 @@ MACHINE_START(MSM8X60_SURF, "QCT MSM8X60 SURF") | |||
| 117 | .reserve = msm8x60_reserve, | 118 | .reserve = msm8x60_reserve, |
| 118 | .map_io = msm8x60_map_io, | 119 | .map_io = msm8x60_map_io, |
| 119 | .init_irq = msm8x60_init_irq, | 120 | .init_irq = msm8x60_init_irq, |
| 121 | .handle_irq = gic_handle_irq, | ||
| 120 | .init_machine = msm8x60_init, | 122 | .init_machine = msm8x60_init, |
| 121 | .timer = &msm_timer, | 123 | .timer = &msm_timer, |
| 122 | MACHINE_END | 124 | MACHINE_END |
| @@ -126,6 +128,7 @@ MACHINE_START(MSM8X60_SIM, "QCT MSM8X60 SIMULATOR") | |||
| 126 | .reserve = msm8x60_reserve, | 128 | .reserve = msm8x60_reserve, |
| 127 | .map_io = msm8x60_map_io, | 129 | .map_io = msm8x60_map_io, |
| 128 | .init_irq = msm8x60_init_irq, | 130 | .init_irq = msm8x60_init_irq, |
| 131 | .handle_irq = gic_handle_irq, | ||
| 129 | .init_machine = msm8x60_init, | 132 | .init_machine = msm8x60_init, |
| 130 | .timer = &msm_timer, | 133 | .timer = &msm_timer, |
| 131 | MACHINE_END | 134 | MACHINE_END |
| @@ -135,6 +138,7 @@ MACHINE_START(MSM8X60_FFA, "QCT MSM8X60 FFA") | |||
| 135 | .reserve = msm8x60_reserve, | 138 | .reserve = msm8x60_reserve, |
| 136 | .map_io = msm8x60_map_io, | 139 | .map_io = msm8x60_map_io, |
| 137 | .init_irq = msm8x60_init_irq, | 140 | .init_irq = msm8x60_init_irq, |
| 141 | .handle_irq = gic_handle_irq, | ||
| 138 | .init_machine = msm8x60_init, | 142 | .init_machine = msm8x60_init, |
| 139 | .timer = &msm_timer, | 143 | .timer = &msm_timer, |
| 140 | MACHINE_END | 144 | MACHINE_END |
diff --git a/arch/arm/mach-msm/include/mach/entry-macro-qgic.S b/arch/arm/mach-msm/include/mach/entry-macro-qgic.S deleted file mode 100644 index 717076f3ca73..000000000000 --- a/arch/arm/mach-msm/include/mach/entry-macro-qgic.S +++ /dev/null | |||
| @@ -1,17 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Low-level IRQ helper macros | ||
| 3 | * | ||
| 4 | * Copyright (c) 2010, Code Aurora Forum. All rights reserved. | ||
| 5 | * | ||
| 6 | * This file is licensed under the terms of the GNU General Public | ||
| 7 | * License version 2. This program is licensed "as is" without any | ||
| 8 | * warranty of any kind, whether express or implied. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #include <asm/hardware/entry-macro-gic.S> | ||
| 12 | |||
| 13 | .macro disable_fiq | ||
| 14 | .endm | ||
| 15 | |||
| 16 | .macro arch_ret_to_user, tmp1, tmp2 | ||
| 17 | .endm | ||
diff --git a/arch/arm/mach-msm/include/mach/entry-macro-vic.S b/arch/arm/mach-msm/include/mach/entry-macro-vic.S deleted file mode 100644 index 70563ed11b36..000000000000 --- a/arch/arm/mach-msm/include/mach/entry-macro-vic.S +++ /dev/null | |||
| @@ -1,37 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007 Google, Inc. | ||
| 3 | * Author: Brian Swetland <swetland@google.com> | ||
| 4 | * | ||
| 5 | * This software is licensed under the terms of the GNU General Public | ||
| 6 | * License version 2, as published by the Free Software Foundation, and | ||
| 7 | * may be copied, distributed, and modified under those terms. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <mach/msm_iomap.h> | ||
| 17 | |||
| 18 | .macro disable_fiq | ||
| 19 | .endm | ||
| 20 | |||
| 21 | .macro get_irqnr_preamble, base, tmp | ||
| 22 | @ enable imprecise aborts | ||
| 23 | cpsie a | ||
| 24 | mov \base, #MSM_VIC_BASE | ||
| 25 | .endm | ||
| 26 | |||
| 27 | .macro arch_ret_to_user, tmp1, tmp2 | ||
| 28 | .endm | ||
| 29 | |||
| 30 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 31 | @ 0xD0 has irq# or old irq# if the irq has been handled | ||
| 32 | @ 0xD4 has irq# or -1 if none pending *but* if you just | ||
| 33 | @ read 0xD4 you never get the first irq for some reason | ||
| 34 | ldr \irqnr, [\base, #0xD0] | ||
| 35 | ldr \irqnr, [\base, #0xD4] | ||
| 36 | cmp \irqnr, #0xffffffff | ||
| 37 | .endm | ||
diff --git a/arch/arm/mach-msm/include/mach/entry-macro.S b/arch/arm/mach-msm/include/mach/entry-macro.S index b16f082eeb6f..41f7003ef34f 100644 --- a/arch/arm/mach-msm/include/mach/entry-macro.S +++ b/arch/arm/mach-msm/include/mach/entry-macro.S | |||
| @@ -16,8 +16,27 @@ | |||
| 16 | * | 16 | * |
| 17 | */ | 17 | */ |
| 18 | 18 | ||
| 19 | #if defined(CONFIG_ARM_GIC) | 19 | .macro disable_fiq |
| 20 | #include <mach/entry-macro-qgic.S> | 20 | .endm |
| 21 | #else | 21 | |
| 22 | #include <mach/entry-macro-vic.S> | 22 | .macro arch_ret_to_user, tmp1, tmp2 |
| 23 | .endm | ||
| 24 | |||
| 25 | #if !defined(CONFIG_ARM_GIC) | ||
| 26 | #include <mach/msm_iomap.h> | ||
| 27 | |||
| 28 | .macro get_irqnr_preamble, base, tmp | ||
| 29 | @ enable imprecise aborts | ||
| 30 | cpsie a | ||
| 31 | mov \base, #MSM_VIC_BASE | ||
| 32 | .endm | ||
| 33 | |||
| 34 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 35 | @ 0xD0 has irq# or old irq# if the irq has been handled | ||
| 36 | @ 0xD4 has irq# or -1 if none pending *but* if you just | ||
| 37 | @ read 0xD4 you never get the first irq for some reason | ||
| 38 | ldr \irqnr, [\base, #0xD0] | ||
| 39 | ldr \irqnr, [\base, #0xD4] | ||
| 40 | cmp \irqnr, #0xffffffff | ||
| 41 | .endm | ||
| 23 | #endif | 42 | #endif |
diff --git a/arch/arm/mach-msm/include/mach/vmalloc.h b/arch/arm/mach-msm/include/mach/vmalloc.h deleted file mode 100644 index d138448eff16..000000000000 --- a/arch/arm/mach-msm/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,22 +0,0 @@ | |||
| 1 | /* arch/arm/mach-msm/include/mach/vmalloc.h | ||
| 2 | * | ||
| 3 | * Copyright (C) 2007 Google, Inc. | ||
| 4 | * | ||
| 5 | * This software is licensed under the terms of the GNU General Public | ||
| 6 | * License version 2, as published by the Free Software Foundation, and | ||
| 7 | * may be copied, distributed, and modified under those terms. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __ASM_ARCH_MSM_VMALLOC_H | ||
| 17 | #define __ASM_ARCH_MSM_VMALLOC_H | ||
| 18 | |||
| 19 | #define VMALLOC_END 0xd0000000UL | ||
| 20 | |||
| 21 | #endif | ||
| 22 | |||
diff --git a/arch/arm/mach-mv78xx0/include/mach/vmalloc.h b/arch/arm/mach-mv78xx0/include/mach/vmalloc.h deleted file mode 100644 index ba26fe98e640..000000000000 --- a/arch/arm/mach-mv78xx0/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-mv78xx0/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #define VMALLOC_END 0xfe000000UL | ||
diff --git a/arch/arm/mach-mxs/include/mach/vmalloc.h b/arch/arm/mach-mxs/include/mach/vmalloc.h deleted file mode 100644 index 103b0165ed0b..000000000000 --- a/arch/arm/mach-mxs/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,22 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2000 Russell King. | ||
| 3 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __MACH_MXS_VMALLOC_H__ | ||
| 17 | #define __MACH_MXS_VMALLOC_H__ | ||
| 18 | |||
| 19 | /* vmalloc ending address */ | ||
| 20 | #define VMALLOC_END 0xf4000000UL | ||
| 21 | |||
| 22 | #endif /* __MACH_MXS_VMALLOC_H__ */ | ||
diff --git a/arch/arm/mach-mxs/system.c b/arch/arm/mach-mxs/system.c index 20ec3bddf7cd..cab88364e7c1 100644 --- a/arch/arm/mach-mxs/system.c +++ b/arch/arm/mach-mxs/system.c | |||
| @@ -53,7 +53,7 @@ void arch_reset(char mode, const char *cmd) | |||
| 53 | mdelay(50); | 53 | mdelay(50); |
| 54 | 54 | ||
| 55 | /* We'll take a jump through zero as a poor second */ | 55 | /* We'll take a jump through zero as a poor second */ |
| 56 | cpu_reset(0); | 56 | soft_restart(0); |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | static int __init mxs_arch_reset_init(void) | 59 | static int __init mxs_arch_reset_init(void) |
diff --git a/arch/arm/mach-netx/include/mach/entry-macro.S b/arch/arm/mach-netx/include/mach/entry-macro.S index 844f1f9acbdf..6e9f1cbe1634 100644 --- a/arch/arm/mach-netx/include/mach/entry-macro.S +++ b/arch/arm/mach-netx/include/mach/entry-macro.S | |||
| @@ -18,22 +18,9 @@ | |||
| 18 | * along with this program; if not, write to the Free Software | 18 | * along with this program; if not, write to the Free Software |
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 20 | */ | 20 | */ |
| 21 | #include <mach/hardware.h> | ||
| 22 | 21 | ||
| 23 | .macro disable_fiq | 22 | .macro disable_fiq |
| 24 | .endm | 23 | .endm |
| 25 | 24 | ||
| 26 | .macro get_irqnr_preamble, base, tmp | ||
| 27 | ldr \base, =io_p2v(0x001ff000) | ||
| 28 | .endm | ||
| 29 | |||
| 30 | .macro arch_ret_to_user, tmp1, tmp2 | 25 | .macro arch_ret_to_user, tmp1, tmp2 |
| 31 | .endm | 26 | .endm |
| 32 | |||
| 33 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 34 | ldr \irqstat, [\base, #0] | ||
| 35 | clz \irqnr, \irqstat | ||
| 36 | rsb \irqnr, \irqnr, #31 | ||
| 37 | cmp \irqstat, #0 | ||
| 38 | .endm | ||
| 39 | |||
diff --git a/arch/arm/mach-netx/nxdb500.c b/arch/arm/mach-netx/nxdb500.c index 90903dd44cbc..ef8cf3574a02 100644 --- a/arch/arm/mach-netx/nxdb500.c +++ b/arch/arm/mach-netx/nxdb500.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 31 | #include <asm/hardware/vic.h> | ||
| 31 | #include <mach/netx-regs.h> | 32 | #include <mach/netx-regs.h> |
| 32 | #include <mach/eth.h> | 33 | #include <mach/eth.h> |
| 33 | 34 | ||
| @@ -203,6 +204,7 @@ MACHINE_START(NXDB500, "Hilscher nxdb500") | |||
| 203 | .atag_offset = 0x100, | 204 | .atag_offset = 0x100, |
| 204 | .map_io = netx_map_io, | 205 | .map_io = netx_map_io, |
| 205 | .init_irq = netx_init_irq, | 206 | .init_irq = netx_init_irq, |
| 207 | .handle_irq = vic_handle_irq, | ||
| 206 | .timer = &netx_timer, | 208 | .timer = &netx_timer, |
| 207 | .init_machine = nxdb500_init, | 209 | .init_machine = nxdb500_init, |
| 208 | MACHINE_END | 210 | MACHINE_END |
diff --git a/arch/arm/mach-netx/nxdkn.c b/arch/arm/mach-netx/nxdkn.c index c63384aba500..588558bdd800 100644 --- a/arch/arm/mach-netx/nxdkn.c +++ b/arch/arm/mach-netx/nxdkn.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 31 | #include <asm/hardware/vic.h> | ||
| 31 | #include <mach/netx-regs.h> | 32 | #include <mach/netx-regs.h> |
| 32 | #include <mach/eth.h> | 33 | #include <mach/eth.h> |
| 33 | 34 | ||
| @@ -96,6 +97,7 @@ MACHINE_START(NXDKN, "Hilscher nxdkn") | |||
| 96 | .atag_offset = 0x100, | 97 | .atag_offset = 0x100, |
| 97 | .map_io = netx_map_io, | 98 | .map_io = netx_map_io, |
| 98 | .init_irq = netx_init_irq, | 99 | .init_irq = netx_init_irq, |
| 100 | .handle_irq = vic_handle_irq, | ||
| 99 | .timer = &netx_timer, | 101 | .timer = &netx_timer, |
| 100 | .init_machine = nxdkn_init, | 102 | .init_machine = nxdkn_init, |
| 101 | MACHINE_END | 103 | MACHINE_END |
diff --git a/arch/arm/mach-netx/nxeb500hmi.c b/arch/arm/mach-netx/nxeb500hmi.c index 8f548ec83ad2..cfcbb5038648 100644 --- a/arch/arm/mach-netx/nxeb500hmi.c +++ b/arch/arm/mach-netx/nxeb500hmi.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 31 | #include <asm/hardware/vic.h> | ||
| 31 | #include <mach/netx-regs.h> | 32 | #include <mach/netx-regs.h> |
| 32 | #include <mach/eth.h> | 33 | #include <mach/eth.h> |
| 33 | 34 | ||
| @@ -180,6 +181,7 @@ MACHINE_START(NXEB500HMI, "Hilscher nxeb500hmi") | |||
| 180 | .atag_offset = 0x100, | 181 | .atag_offset = 0x100, |
| 181 | .map_io = netx_map_io, | 182 | .map_io = netx_map_io, |
| 182 | .init_irq = netx_init_irq, | 183 | .init_irq = netx_init_irq, |
| 184 | .handle_irq = vic_handle_irq, | ||
| 183 | .timer = &netx_timer, | 185 | .timer = &netx_timer, |
| 184 | .init_machine = nxeb500hmi_init, | 186 | .init_machine = nxeb500hmi_init, |
| 185 | MACHINE_END | 187 | MACHINE_END |
diff --git a/arch/arm/mach-nomadik/board-nhk8815.c b/arch/arm/mach-nomadik/board-nhk8815.c index 0cbb74c96ef7..f98259c050ee 100644 --- a/arch/arm/mach-nomadik/board-nhk8815.c +++ b/arch/arm/mach-nomadik/board-nhk8815.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/mtd/onenand.h> | 21 | #include <linux/mtd/onenand.h> |
| 22 | #include <linux/mtd/partitions.h> | 22 | #include <linux/mtd/partitions.h> |
| 23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
| 24 | #include <asm/hardware/vic.h> | ||
| 24 | #include <asm/sizes.h> | 25 | #include <asm/sizes.h> |
| 25 | #include <asm/mach-types.h> | 26 | #include <asm/mach-types.h> |
| 26 | #include <asm/mach/arch.h> | 27 | #include <asm/mach/arch.h> |
| @@ -280,6 +281,7 @@ MACHINE_START(NOMADIK, "NHK8815") | |||
| 280 | .atag_offset = 0x100, | 281 | .atag_offset = 0x100, |
| 281 | .map_io = cpu8815_map_io, | 282 | .map_io = cpu8815_map_io, |
| 282 | .init_irq = cpu8815_init_irq, | 283 | .init_irq = cpu8815_init_irq, |
| 284 | .handle_irq = vic_handle_irq, | ||
| 283 | .timer = &nomadik_timer, | 285 | .timer = &nomadik_timer, |
| 284 | .init_machine = nhk8815_platform_init, | 286 | .init_machine = nhk8815_platform_init, |
| 285 | MACHINE_END | 287 | MACHINE_END |
diff --git a/arch/arm/mach-nomadik/include/mach/entry-macro.S b/arch/arm/mach-nomadik/include/mach/entry-macro.S index 49f1aa3bb420..98ea1c1fbbab 100644 --- a/arch/arm/mach-nomadik/include/mach/entry-macro.S +++ b/arch/arm/mach-nomadik/include/mach/entry-macro.S | |||
| @@ -6,38 +6,8 @@ | |||
| 6 | * warranty of any kind, whether express or implied. | 6 | * warranty of any kind, whether express or implied. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | #include <mach/hardware.h> | ||
| 10 | #include <mach/irqs.h> | ||
| 11 | |||
| 12 | .macro disable_fiq | 9 | .macro disable_fiq |
| 13 | .endm | 10 | .endm |
| 14 | 11 | ||
| 15 | .macro get_irqnr_preamble, base, tmp | ||
| 16 | ldr \base, =IO_ADDRESS(NOMADIK_IC_BASE) | ||
| 17 | .endm | ||
| 18 | |||
| 19 | .macro arch_ret_to_user, tmp1, tmp2 | 12 | .macro arch_ret_to_user, tmp1, tmp2 |
| 20 | .endm | 13 | .endm |
| 21 | |||
| 22 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 23 | |||
| 24 | /* This stanza gets the irq mask from one of two status registers */ | ||
| 25 | mov \irqnr, #0 | ||
| 26 | ldr \irqstat, [\base, #VIC_REG_IRQSR0] @ get masked status | ||
| 27 | cmp \irqstat, #0 | ||
| 28 | bne 1001f | ||
| 29 | add \irqnr, \irqnr, #32 | ||
| 30 | ldr \irqstat, [\base, #VIC_REG_IRQSR1] @ get masked status | ||
| 31 | |||
| 32 | 1001: tst \irqstat, #15 | ||
| 33 | bne 1002f | ||
| 34 | add \irqnr, \irqnr, #4 | ||
| 35 | movs \irqstat, \irqstat, lsr #4 | ||
| 36 | bne 1001b | ||
| 37 | 1002: tst \irqstat, #1 | ||
| 38 | bne 1003f | ||
| 39 | add \irqnr, \irqnr, #1 | ||
| 40 | movs \irqstat, \irqstat, lsr #1 | ||
| 41 | bne 1002b | ||
| 42 | 1003: /* EQ will be set if no irqs pending */ | ||
| 43 | .endm | ||
diff --git a/arch/arm/mach-nomadik/include/mach/vmalloc.h b/arch/arm/mach-nomadik/include/mach/vmalloc.h deleted file mode 100644 index f83d574d9445..000000000000 --- a/arch/arm/mach-nomadik/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,2 +0,0 @@ | |||
| 1 | |||
| 2 | #define VMALLOC_END 0xe8000000UL | ||
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index b0f15d234a12..af7911963c0d 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #include <plat/mux.h> | 35 | #include <plat/mux.h> |
| 36 | #include <plat/usb.h> | 36 | #include <plat/usb.h> |
| 37 | #include <plat/board.h> | 37 | #include <plat/board.h> |
| 38 | #include <plat/common.h> | 38 | #include "common.h" |
| 39 | #include <mach/camera.h> | 39 | #include <mach/camera.h> |
| 40 | 40 | ||
| 41 | #include <mach/ams-delta-fiq.h> | 41 | #include <mach/ams-delta-fiq.h> |
diff --git a/arch/arm/mach-omap1/board-fsample.c b/arch/arm/mach-omap1/board-fsample.c index 23178275f96b..b9c4c0f933ee 100644 --- a/arch/arm/mach-omap1/board-fsample.c +++ b/arch/arm/mach-omap1/board-fsample.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #include <plat/flash.h> | 32 | #include <plat/flash.h> |
| 33 | #include <plat/fpga.h> | 33 | #include <plat/fpga.h> |
| 34 | #include <plat/keypad.h> | 34 | #include <plat/keypad.h> |
| 35 | #include <plat/common.h> | 35 | #include "common.h" |
| 36 | #include <plat/board.h> | 36 | #include <plat/board.h> |
| 37 | 37 | ||
| 38 | /* fsample is pretty close to p2-sample */ | 38 | /* fsample is pretty close to p2-sample */ |
diff --git a/arch/arm/mach-omap1/board-generic.c b/arch/arm/mach-omap1/board-generic.c index dc5b75de531c..7f41d7a504a5 100644 --- a/arch/arm/mach-omap1/board-generic.c +++ b/arch/arm/mach-omap1/board-generic.c | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | #include <plat/mux.h> | 25 | #include <plat/mux.h> |
| 26 | #include <plat/usb.h> | 26 | #include <plat/usb.h> |
| 27 | #include <plat/board.h> | 27 | #include <plat/board.h> |
| 28 | #include <plat/common.h> | 28 | #include "common.h" |
| 29 | 29 | ||
| 30 | /* assume no Mini-AB port */ | 30 | /* assume no Mini-AB port */ |
| 31 | 31 | ||
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c index b334b1481678..7933b97698f8 100644 --- a/arch/arm/mach-omap1/board-h2.c +++ b/arch/arm/mach-omap1/board-h2.c | |||
| @@ -43,7 +43,7 @@ | |||
| 43 | #include <plat/irda.h> | 43 | #include <plat/irda.h> |
| 44 | #include <plat/usb.h> | 44 | #include <plat/usb.h> |
| 45 | #include <plat/keypad.h> | 45 | #include <plat/keypad.h> |
| 46 | #include <plat/common.h> | 46 | #include "common.h" |
| 47 | #include <plat/flash.h> | 47 | #include <plat/flash.h> |
| 48 | 48 | ||
| 49 | #include "board-h2.h" | 49 | #include "board-h2.h" |
diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c index 74ebe72c9848..04be2f83ca09 100644 --- a/arch/arm/mach-omap1/board-h3.c +++ b/arch/arm/mach-omap1/board-h3.c | |||
| @@ -45,7 +45,7 @@ | |||
| 45 | #include <plat/usb.h> | 45 | #include <plat/usb.h> |
| 46 | #include <plat/keypad.h> | 46 | #include <plat/keypad.h> |
| 47 | #include <plat/dma.h> | 47 | #include <plat/dma.h> |
| 48 | #include <plat/common.h> | 48 | #include "common.h" |
| 49 | #include <plat/flash.h> | 49 | #include <plat/flash.h> |
| 50 | 50 | ||
| 51 | #include "board-h3.h" | 51 | #include "board-h3.h" |
diff --git a/arch/arm/mach-omap1/board-htcherald.c b/arch/arm/mach-omap1/board-htcherald.c index 3e91baab1a89..46fcfeb1f11e 100644 --- a/arch/arm/mach-omap1/board-htcherald.c +++ b/arch/arm/mach-omap1/board-htcherald.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #include <asm/mach/arch.h> | 41 | #include <asm/mach/arch.h> |
| 42 | 42 | ||
| 43 | #include <plat/omap7xx.h> | 43 | #include <plat/omap7xx.h> |
| 44 | #include <plat/common.h> | 44 | #include "common.h" |
| 45 | #include <plat/board.h> | 45 | #include <plat/board.h> |
| 46 | #include <plat/keypad.h> | 46 | #include <plat/keypad.h> |
| 47 | #include <plat/usb.h> | 47 | #include <plat/usb.h> |
diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index 273153dba15b..f99d11de1531 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | #include <plat/tc.h> | 37 | #include <plat/tc.h> |
| 38 | #include <plat/usb.h> | 38 | #include <plat/usb.h> |
| 39 | #include <plat/keypad.h> | 39 | #include <plat/keypad.h> |
| 40 | #include <plat/common.h> | 40 | #include "common.h" |
| 41 | #include <plat/mmc.h> | 41 | #include <plat/mmc.h> |
| 42 | 42 | ||
| 43 | /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ | 43 | /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ |
diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c index 6798b8488315..c64342388ec3 100644 --- a/arch/arm/mach-omap1/board-nokia770.c +++ b/arch/arm/mach-omap1/board-nokia770.c | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | #include <plat/usb.h> | 30 | #include <plat/usb.h> |
| 31 | #include <plat/board.h> | 31 | #include <plat/board.h> |
| 32 | #include <plat/keypad.h> | 32 | #include <plat/keypad.h> |
| 33 | #include <plat/common.h> | 33 | #include "common.h" |
| 34 | #include <plat/hwa742.h> | 34 | #include <plat/hwa742.h> |
| 35 | #include <plat/lcd_mipid.h> | 35 | #include <plat/lcd_mipid.h> |
| 36 | #include <plat/mmc.h> | 36 | #include <plat/mmc.h> |
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index c3859278d257..a409dfcc5b18 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c | |||
| @@ -51,7 +51,7 @@ | |||
| 51 | #include <plat/usb.h> | 51 | #include <plat/usb.h> |
| 52 | #include <plat/mux.h> | 52 | #include <plat/mux.h> |
| 53 | #include <plat/tc.h> | 53 | #include <plat/tc.h> |
| 54 | #include <plat/common.h> | 54 | #include "common.h" |
| 55 | 55 | ||
| 56 | /* At OMAP5912 OSK the Ethernet is directly connected to CS1 */ | 56 | /* At OMAP5912 OSK the Ethernet is directly connected to CS1 */ |
| 57 | #define OMAP_OSK_ETHR_START 0x04800300 | 57 | #define OMAP_OSK_ETHR_START 0x04800300 |
diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c index f9c44cb15b47..105292d39484 100644 --- a/arch/arm/mach-omap1/board-palmte.c +++ b/arch/arm/mach-omap1/board-palmte.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #include <plat/board.h> | 41 | #include <plat/board.h> |
| 42 | #include <plat/irda.h> | 42 | #include <plat/irda.h> |
| 43 | #include <plat/keypad.h> | 43 | #include <plat/keypad.h> |
| 44 | #include <plat/common.h> | 44 | #include "common.h" |
| 45 | 45 | ||
| 46 | #define PALMTE_USBDETECT_GPIO 0 | 46 | #define PALMTE_USBDETECT_GPIO 0 |
| 47 | #define PALMTE_USB_OR_DC_GPIO 1 | 47 | #define PALMTE_USB_OR_DC_GPIO 1 |
diff --git a/arch/arm/mach-omap1/board-palmtt.c b/arch/arm/mach-omap1/board-palmtt.c index 11a98539f7bb..387a9006358d 100644 --- a/arch/arm/mach-omap1/board-palmtt.c +++ b/arch/arm/mach-omap1/board-palmtt.c | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | #include <plat/board.h> | 39 | #include <plat/board.h> |
| 40 | #include <plat/irda.h> | 40 | #include <plat/irda.h> |
| 41 | #include <plat/keypad.h> | 41 | #include <plat/keypad.h> |
| 42 | #include <plat/common.h> | 42 | #include "common.h" |
| 43 | 43 | ||
| 44 | #include <linux/spi/spi.h> | 44 | #include <linux/spi/spi.h> |
| 45 | #include <linux/spi/ads7846.h> | 45 | #include <linux/spi/ads7846.h> |
diff --git a/arch/arm/mach-omap1/board-palmz71.c b/arch/arm/mach-omap1/board-palmz71.c index 42061573e380..df6d15e68aad 100644 --- a/arch/arm/mach-omap1/board-palmz71.c +++ b/arch/arm/mach-omap1/board-palmz71.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #include <plat/board.h> | 41 | #include <plat/board.h> |
| 42 | #include <plat/irda.h> | 42 | #include <plat/irda.h> |
| 43 | #include <plat/keypad.h> | 43 | #include <plat/keypad.h> |
| 44 | #include <plat/common.h> | 44 | #include "common.h" |
| 45 | 45 | ||
| 46 | #include <linux/spi/spi.h> | 46 | #include <linux/spi/spi.h> |
| 47 | #include <linux/spi/ads7846.h> | 47 | #include <linux/spi/ads7846.h> |
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c index 203ae07550db..57ecd7e09831 100644 --- a/arch/arm/mach-omap1/board-perseus2.c +++ b/arch/arm/mach-omap1/board-perseus2.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #include <plat/fpga.h> | 32 | #include <plat/fpga.h> |
| 33 | #include <plat/flash.h> | 33 | #include <plat/flash.h> |
| 34 | #include <plat/keypad.h> | 34 | #include <plat/keypad.h> |
| 35 | #include <plat/common.h> | 35 | #include "common.h" |
| 36 | #include <plat/board.h> | 36 | #include <plat/board.h> |
| 37 | 37 | ||
| 38 | static const unsigned int p2_keymap[] = { | 38 | static const unsigned int p2_keymap[] = { |
diff --git a/arch/arm/mach-omap1/board-sx1.c b/arch/arm/mach-omap1/board-sx1.c index 092a4c046407..774ae39fd636 100644 --- a/arch/arm/mach-omap1/board-sx1.c +++ b/arch/arm/mach-omap1/board-sx1.c | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | #include <plat/usb.h> | 40 | #include <plat/usb.h> |
| 41 | #include <plat/tc.h> | 41 | #include <plat/tc.h> |
| 42 | #include <plat/board.h> | 42 | #include <plat/board.h> |
| 43 | #include <plat/common.h> | 43 | #include "common.h" |
| 44 | #include <plat/keypad.h> | 44 | #include <plat/keypad.h> |
| 45 | #include <plat/board-sx1.h> | 45 | #include <plat/board-sx1.h> |
| 46 | 46 | ||
diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c index 61ed6cdab2bd..7721c146d8d6 100644 --- a/arch/arm/mach-omap1/board-voiceblue.c +++ b/arch/arm/mach-omap1/board-voiceblue.c | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | #include <asm/mach/map.h> | 34 | #include <asm/mach/map.h> |
| 35 | 35 | ||
| 36 | #include <plat/board-voiceblue.h> | 36 | #include <plat/board-voiceblue.h> |
| 37 | #include <plat/common.h> | 37 | #include "common.h" |
| 38 | #include <plat/flash.h> | 38 | #include <plat/flash.h> |
| 39 | #include <plat/mux.h> | 39 | #include <plat/mux.h> |
| 40 | #include <plat/tc.h> | 40 | #include <plat/tc.h> |
diff --git a/arch/arm/mach-omap1/common.h b/arch/arm/mach-omap1/common.h new file mode 100644 index 000000000000..52c4eda97fa8 --- /dev/null +++ b/arch/arm/mach-omap1/common.h | |||
| @@ -0,0 +1,61 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * Header for code common to all OMAP1 machines. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | * | ||
| 10 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
| 11 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
| 13 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 14 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 15 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
| 16 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| 17 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 18 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
| 19 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 20 | * | ||
| 21 | * You should have received a copy of the GNU General Public License along | ||
| 22 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 23 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 24 | */ | ||
| 25 | |||
| 26 | #ifndef __ARCH_ARM_MACH_OMAP1_COMMON_H | ||
| 27 | #define __ARCH_ARM_MACH_OMAP1_COMMON_H | ||
| 28 | |||
| 29 | #include <plat/common.h> | ||
| 30 | |||
| 31 | #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) | ||
| 32 | void omap7xx_map_io(void); | ||
| 33 | #else | ||
| 34 | static inline void omap7xx_map_io(void) | ||
| 35 | { | ||
| 36 | } | ||
| 37 | #endif | ||
| 38 | |||
| 39 | #ifdef CONFIG_ARCH_OMAP15XX | ||
| 40 | void omap15xx_map_io(void); | ||
| 41 | #else | ||
| 42 | static inline void omap15xx_map_io(void) | ||
| 43 | { | ||
| 44 | } | ||
| 45 | #endif | ||
| 46 | |||
| 47 | #ifdef CONFIG_ARCH_OMAP16XX | ||
| 48 | void omap16xx_map_io(void); | ||
| 49 | #else | ||
| 50 | static inline void omap16xx_map_io(void) | ||
| 51 | { | ||
| 52 | } | ||
| 53 | #endif | ||
| 54 | |||
| 55 | void omap1_init_early(void); | ||
| 56 | void omap1_init_irq(void); | ||
| 57 | |||
| 58 | extern struct sys_timer omap1_timer; | ||
| 59 | extern bool omap_32k_timer_init(void); | ||
| 60 | |||
| 61 | #endif /* __ARCH_ARM_MACH_OMAP1_COMMON_H */ | ||
diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c index 475cb2f50d87..1d76a63c0983 100644 --- a/arch/arm/mach-omap1/devices.c +++ b/arch/arm/mach-omap1/devices.c | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
| 23 | #include <asm/mach/map.h> | 23 | #include <asm/mach/map.h> |
| 24 | 24 | ||
| 25 | #include <plat/common.h> | 25 | #include "common.h" |
| 26 | #include <plat/tc.h> | 26 | #include <plat/tc.h> |
| 27 | #include <plat/board.h> | 27 | #include <plat/board.h> |
| 28 | #include <plat/mux.h> | 28 | #include <plat/mux.h> |
diff --git a/arch/arm/mach-omap1/include/mach/vmalloc.h b/arch/arm/mach-omap1/include/mach/vmalloc.h deleted file mode 100644 index 22ec4a479577..000000000000 --- a/arch/arm/mach-omap1/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-omap1/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2000 Russell King. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | #define VMALLOC_END 0xd8000000UL | ||
diff --git a/arch/arm/mach-omap1/io.c b/arch/arm/mach-omap1/io.c index 7969cfda4454..8e55b6fb3478 100644 --- a/arch/arm/mach-omap1/io.c +++ b/arch/arm/mach-omap1/io.c | |||
| @@ -121,7 +121,6 @@ void __init omap16xx_map_io(void) | |||
| 121 | void omap1_init_early(void) | 121 | void omap1_init_early(void) |
| 122 | { | 122 | { |
| 123 | omap_check_revision(); | 123 | omap_check_revision(); |
| 124 | omap_ioremap_init(); | ||
| 125 | 124 | ||
| 126 | /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort | 125 | /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort |
| 127 | * on a Posted Write in the TIPB Bridge". | 126 | * on a Posted Write in the TIPB Bridge". |
diff --git a/arch/arm/mach-omap1/time.c b/arch/arm/mach-omap1/time.c index a1837771e031..485a21d31004 100644 --- a/arch/arm/mach-omap1/time.c +++ b/arch/arm/mach-omap1/time.c | |||
| @@ -54,7 +54,7 @@ | |||
| 54 | #include <asm/mach/irq.h> | 54 | #include <asm/mach/irq.h> |
| 55 | #include <asm/mach/time.h> | 55 | #include <asm/mach/time.h> |
| 56 | 56 | ||
| 57 | #include <plat/common.h> | 57 | #include "common.h" |
| 58 | 58 | ||
| 59 | #ifdef CONFIG_OMAP_MPU_TIMER | 59 | #ifdef CONFIG_OMAP_MPU_TIMER |
| 60 | 60 | ||
diff --git a/arch/arm/mach-omap1/timer32k.c b/arch/arm/mach-omap1/timer32k.c index 96604a50c4fe..9a54ef4dcf5e 100644 --- a/arch/arm/mach-omap1/timer32k.c +++ b/arch/arm/mach-omap1/timer32k.c | |||
| @@ -52,7 +52,7 @@ | |||
| 52 | #include <asm/irq.h> | 52 | #include <asm/irq.h> |
| 53 | #include <asm/mach/irq.h> | 53 | #include <asm/mach/irq.h> |
| 54 | #include <asm/mach/time.h> | 54 | #include <asm/mach/time.h> |
| 55 | #include <plat/common.h> | 55 | #include "common.h" |
| 56 | #include <plat/dmtimer.h> | 56 | #include <plat/dmtimer.h> |
| 57 | 57 | ||
| 58 | /* | 58 | /* |
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index e1293aa513d3..50f43942c1aa 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
| @@ -25,6 +25,7 @@ config ARCH_OMAP2 | |||
| 25 | depends on ARCH_OMAP2PLUS | 25 | depends on ARCH_OMAP2PLUS |
| 26 | default y | 26 | default y |
| 27 | select CPU_V6 | 27 | select CPU_V6 |
| 28 | select MULTI_IRQ_HANDLER | ||
| 28 | 29 | ||
| 29 | config ARCH_OMAP3 | 30 | config ARCH_OMAP3 |
| 30 | bool "TI OMAP3" | 31 | bool "TI OMAP3" |
| @@ -36,6 +37,7 @@ config ARCH_OMAP3 | |||
| 36 | select ARCH_HAS_OPP | 37 | select ARCH_HAS_OPP |
| 37 | select PM_OPP if PM | 38 | select PM_OPP if PM |
| 38 | select ARM_CPU_SUSPEND if PM | 39 | select ARM_CPU_SUSPEND if PM |
| 40 | select MULTI_IRQ_HANDLER | ||
| 39 | 41 | ||
| 40 | config ARCH_OMAP4 | 42 | config ARCH_OMAP4 |
| 41 | bool "TI OMAP4" | 43 | bool "TI OMAP4" |
| @@ -351,6 +353,27 @@ config OMAP3_SDRC_AC_TIMING | |||
| 351 | wish to say no. Selecting yes without understanding what is | 353 | wish to say no. Selecting yes without understanding what is |
| 352 | going on could result in system crashes; | 354 | going on could result in system crashes; |
| 353 | 355 | ||
| 356 | config OMAP4_ERRATA_I688 | ||
| 357 | bool "OMAP4 errata: Async Bridge Corruption" | ||
| 358 | depends on ARCH_OMAP4 | ||
| 359 | select ARCH_HAS_BARRIERS | ||
| 360 | help | ||
| 361 | If a data is stalled inside asynchronous bridge because of back | ||
| 362 | pressure, it may be accepted multiple times, creating pointer | ||
| 363 | misalignment that will corrupt next transfers on that data path | ||
| 364 | until next reset of the system (No recovery procedure once the | ||
| 365 | issue is hit, the path remains consistently broken). Async bridge | ||
| 366 | can be found on path between MPU to EMIF and MPU to L3 interconnect. | ||
| 367 | This situation can happen only when the idle is initiated by a | ||
| 368 | Master Request Disconnection (which is trigged by software when | ||
| 369 | executing WFI on CPU). | ||
| 370 | The work-around for this errata needs all the initiators connected | ||
| 371 | through async bridge must ensure that data path is properly drained | ||
| 372 | before issuing WFI. This condition will be met if one Strongly ordered | ||
| 373 | access is performed to the target right before executing the WFI. | ||
| 374 | In MPU case, L3 T2ASYNC FIFO and DDR T2ASYNC FIFO needs to be drained. | ||
| 375 | IO barrier ensure that there is no synchronisation loss on initiators | ||
| 376 | operating on both interconnect port simultaneously. | ||
| 354 | endmenu | 377 | endmenu |
| 355 | 378 | ||
| 356 | endif | 379 | endif |
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index b009f17dee56..9a6da52661ce 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
| @@ -11,10 +11,11 @@ hwmod-common = omap_hwmod.o \ | |||
| 11 | omap_hwmod_common_data.o | 11 | omap_hwmod_common_data.o |
| 12 | clock-common = clock.o clock_common_data.o \ | 12 | clock-common = clock.o clock_common_data.o \ |
| 13 | clkt_dpll.o clkt_clksel.o | 13 | clkt_dpll.o clkt_clksel.o |
| 14 | secure-common = omap-smc.o omap-secure.o | ||
| 14 | 15 | ||
| 15 | obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common) | 16 | obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common) $(secure-common) |
| 16 | obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) | 17 | obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common) |
| 17 | obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) | 18 | obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) $(secure-common) |
| 18 | 19 | ||
| 19 | obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o | 20 | obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o |
| 20 | 21 | ||
| @@ -24,11 +25,13 @@ obj-$(CONFIG_TWL4030_CORE) += omap_twl.o | |||
| 24 | obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o | 25 | obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o |
| 25 | obj-$(CONFIG_LOCAL_TIMERS) += timer-mpu.o | 26 | obj-$(CONFIG_LOCAL_TIMERS) += timer-mpu.o |
| 26 | obj-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o | 27 | obj-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o |
| 27 | obj-$(CONFIG_ARCH_OMAP4) += omap44xx-smc.o omap4-common.o | 28 | obj-$(CONFIG_ARCH_OMAP4) += omap4-common.o omap-wakeupgen.o \ |
| 29 | sleep44xx.o | ||
| 28 | 30 | ||
| 29 | plus_sec := $(call as-instr,.arch_extension sec,+sec) | 31 | plus_sec := $(call as-instr,.arch_extension sec,+sec) |
| 30 | AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec) | 32 | AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec) |
| 31 | AFLAGS_omap44xx-smc.o :=-Wa,-march=armv7-a$(plus_sec) | 33 | AFLAGS_omap-smc.o :=-Wa,-march=armv7-a$(plus_sec) |
| 34 | AFLAGS_sleep44xx.o :=-Wa,-march=armv7-a$(plus_sec) | ||
| 32 | 35 | ||
| 33 | # Functions loaded to SRAM | 36 | # Functions loaded to SRAM |
| 34 | obj-$(CONFIG_SOC_OMAP2420) += sram242x.o | 37 | obj-$(CONFIG_SOC_OMAP2420) += sram242x.o |
| @@ -62,7 +65,8 @@ obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o | |||
| 62 | obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o | 65 | obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o |
| 63 | obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o \ | 66 | obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o \ |
| 64 | cpuidle34xx.o | 67 | cpuidle34xx.o |
| 65 | obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o | 68 | obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o omap-mpuss-lowpower.o \ |
| 69 | cpuidle44xx.o | ||
| 66 | obj-$(CONFIG_PM_DEBUG) += pm-debug.o | 70 | obj-$(CONFIG_PM_DEBUG) += pm-debug.o |
| 67 | obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o | 71 | obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o |
| 68 | obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o | 72 | obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o |
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index d704f0ac328d..d88143faca59 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | #include <asm/mach/map.h> | 34 | #include <asm/mach/map.h> |
| 35 | 35 | ||
| 36 | #include <plat/board.h> | 36 | #include <plat/board.h> |
| 37 | #include <plat/common.h> | 37 | #include "common.h" |
| 38 | #include <plat/gpmc.h> | 38 | #include <plat/gpmc.h> |
| 39 | #include <plat/usb.h> | 39 | #include <plat/usb.h> |
| 40 | #include <plat/gpmc-smc91x.h> | 40 | #include <plat/gpmc-smc91x.h> |
| @@ -301,6 +301,7 @@ MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board") | |||
| 301 | .map_io = omap243x_map_io, | 301 | .map_io = omap243x_map_io, |
| 302 | .init_early = omap2430_init_early, | 302 | .init_early = omap2430_init_early, |
| 303 | .init_irq = omap2_init_irq, | 303 | .init_irq = omap2_init_irq, |
| 304 | .handle_irq = omap2_intc_handle_irq, | ||
| 304 | .init_machine = omap_2430sdp_init, | 305 | .init_machine = omap_2430sdp_init, |
| 305 | .timer = &omap2_timer, | 306 | .timer = &omap2_timer, |
| 306 | MACHINE_END | 307 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index 77142c13fa13..83126368ed99 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | #include <plat/mcspi.h> | 33 | #include <plat/mcspi.h> |
| 34 | #include <plat/board.h> | 34 | #include <plat/board.h> |
| 35 | #include <plat/usb.h> | 35 | #include <plat/usb.h> |
| 36 | #include <plat/common.h> | 36 | #include "common.h" |
| 37 | #include <plat/dma.h> | 37 | #include <plat/dma.h> |
| 38 | #include <plat/gpmc.h> | 38 | #include <plat/gpmc.h> |
| 39 | #include <video/omapdss.h> | 39 | #include <video/omapdss.h> |
| @@ -728,6 +728,7 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board") | |||
| 728 | .map_io = omap3_map_io, | 728 | .map_io = omap3_map_io, |
| 729 | .init_early = omap3430_init_early, | 729 | .init_early = omap3430_init_early, |
| 730 | .init_irq = omap3_init_irq, | 730 | .init_irq = omap3_init_irq, |
| 731 | .handle_irq = omap3_intc_handle_irq, | ||
| 731 | .init_machine = omap_3430sdp_init, | 732 | .init_machine = omap_3430sdp_init, |
| 732 | .timer = &omap3_timer, | 733 | .timer = &omap3_timer, |
| 733 | MACHINE_END | 734 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c index f552305162fc..7969dd904bd3 100644 --- a/arch/arm/mach-omap2/board-3630sdp.c +++ b/arch/arm/mach-omap2/board-3630sdp.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
| 17 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
| 18 | 18 | ||
| 19 | #include <plat/common.h> | 19 | #include "common.h" |
| 20 | #include <plat/board.h> | 20 | #include <plat/board.h> |
| 21 | #include <plat/gpmc-smc91x.h> | 21 | #include <plat/gpmc-smc91x.h> |
| 22 | #include <plat/usb.h> | 22 | #include <plat/usb.h> |
| @@ -215,6 +215,7 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board") | |||
| 215 | .map_io = omap3_map_io, | 215 | .map_io = omap3_map_io, |
| 216 | .init_early = omap3630_init_early, | 216 | .init_early = omap3630_init_early, |
| 217 | .init_irq = omap3_init_irq, | 217 | .init_irq = omap3_init_irq, |
| 218 | .handle_irq = omap3_intc_handle_irq, | ||
| 218 | .init_machine = omap_sdp_init, | 219 | .init_machine = omap_sdp_init, |
| 219 | .timer = &omap3_timer, | 220 | .timer = &omap3_timer, |
| 220 | MACHINE_END | 221 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 515646886b59..ef2bbc09428a 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c | |||
| @@ -27,13 +27,13 @@ | |||
| 27 | #include <linux/leds_pwm.h> | 27 | #include <linux/leds_pwm.h> |
| 28 | 28 | ||
| 29 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
| 30 | #include <mach/omap4-common.h> | 30 | #include <asm/hardware/gic.h> |
| 31 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 32 | #include <asm/mach/arch.h> | 32 | #include <asm/mach/arch.h> |
| 33 | #include <asm/mach/map.h> | 33 | #include <asm/mach/map.h> |
| 34 | 34 | ||
| 35 | #include <plat/board.h> | 35 | #include <plat/board.h> |
| 36 | #include <plat/common.h> | 36 | #include "common.h" |
| 37 | #include <plat/usb.h> | 37 | #include <plat/usb.h> |
| 38 | #include <plat/mmc.h> | 38 | #include <plat/mmc.h> |
| 39 | #include <plat/omap4-keypad.h> | 39 | #include <plat/omap4-keypad.h> |
| @@ -984,6 +984,7 @@ MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board") | |||
| 984 | .map_io = omap4_map_io, | 984 | .map_io = omap4_map_io, |
| 985 | .init_early = omap4430_init_early, | 985 | .init_early = omap4430_init_early, |
| 986 | .init_irq = gic_init_irq, | 986 | .init_irq = gic_init_irq, |
| 987 | .handle_irq = gic_handle_irq, | ||
| 987 | .init_machine = omap_4430sdp_init, | 988 | .init_machine = omap_4430sdp_init, |
| 988 | .timer = &omap4_timer, | 989 | .timer = &omap4_timer, |
| 989 | MACHINE_END | 990 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c index 7834536ab416..7e90f93263db 100644 --- a/arch/arm/mach-omap2/board-am3517crane.c +++ b/arch/arm/mach-omap2/board-am3517crane.c | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
| 28 | 28 | ||
| 29 | #include <plat/board.h> | 29 | #include <plat/board.h> |
| 30 | #include <plat/common.h> | 30 | #include "common.h" |
| 31 | #include <plat/usb.h> | 31 | #include <plat/usb.h> |
| 32 | 32 | ||
| 33 | #include "mux.h" | 33 | #include "mux.h" |
| @@ -98,6 +98,7 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD") | |||
| 98 | .map_io = omap3_map_io, | 98 | .map_io = omap3_map_io, |
| 99 | .init_early = am35xx_init_early, | 99 | .init_early = am35xx_init_early, |
| 100 | .init_irq = omap3_init_irq, | 100 | .init_irq = omap3_init_irq, |
| 101 | .handle_irq = omap3_intc_handle_irq, | ||
| 101 | .init_machine = am3517_crane_init, | 102 | .init_machine = am3517_crane_init, |
| 102 | .timer = &omap3_timer, | 103 | .timer = &omap3_timer, |
| 103 | MACHINE_END | 104 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index d314f033c9df..551cae8d9b8a 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #include <asm/mach/map.h> | 32 | #include <asm/mach/map.h> |
| 33 | 33 | ||
| 34 | #include <plat/board.h> | 34 | #include <plat/board.h> |
| 35 | #include <plat/common.h> | 35 | #include "common.h" |
| 36 | #include <plat/usb.h> | 36 | #include <plat/usb.h> |
| 37 | #include <video/omapdss.h> | 37 | #include <video/omapdss.h> |
| 38 | #include <video/omap-panel-generic-dpi.h> | 38 | #include <video/omap-panel-generic-dpi.h> |
| @@ -491,6 +491,7 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") | |||
| 491 | .map_io = omap3_map_io, | 491 | .map_io = omap3_map_io, |
| 492 | .init_early = am35xx_init_early, | 492 | .init_early = am35xx_init_early, |
| 493 | .init_irq = omap3_init_irq, | 493 | .init_irq = omap3_init_irq, |
| 494 | .handle_irq = omap3_intc_handle_irq, | ||
| 494 | .init_machine = am3517_evm_init, | 495 | .init_machine = am3517_evm_init, |
| 495 | .timer = &omap3_timer, | 496 | .timer = &omap3_timer, |
| 496 | MACHINE_END | 497 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c index de8134b7f580..5a66480feed0 100644 --- a/arch/arm/mach-omap2/board-apollon.c +++ b/arch/arm/mach-omap2/board-apollon.c | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | #include <plat/led.h> | 37 | #include <plat/led.h> |
| 38 | #include <plat/usb.h> | 38 | #include <plat/usb.h> |
| 39 | #include <plat/board.h> | 39 | #include <plat/board.h> |
| 40 | #include <plat/common.h> | 40 | #include "common.h" |
| 41 | #include <plat/gpmc.h> | 41 | #include <plat/gpmc.h> |
| 42 | 42 | ||
| 43 | #include <video/omapdss.h> | 43 | #include <video/omapdss.h> |
| @@ -354,6 +354,7 @@ MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon") | |||
| 354 | .map_io = omap242x_map_io, | 354 | .map_io = omap242x_map_io, |
| 355 | .init_early = omap2420_init_early, | 355 | .init_early = omap2420_init_early, |
| 356 | .init_irq = omap2_init_irq, | 356 | .init_irq = omap2_init_irq, |
| 357 | .handle_irq = omap2_intc_handle_irq, | ||
| 357 | .init_machine = omap_apollon_init, | 358 | .init_machine = omap_apollon_init, |
| 358 | .timer = &omap2_timer, | 359 | .timer = &omap2_timer, |
| 359 | MACHINE_END | 360 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index bd1bcacb40f9..510b6a2ff0fa 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | #include <asm/mach/map.h> | 37 | #include <asm/mach/map.h> |
| 38 | 38 | ||
| 39 | #include <plat/board.h> | 39 | #include <plat/board.h> |
| 40 | #include <plat/common.h> | 40 | #include "common.h" |
| 41 | #include <plat/nand.h> | 41 | #include <plat/nand.h> |
| 42 | #include <plat/gpmc.h> | 42 | #include <plat/gpmc.h> |
| 43 | #include <plat/usb.h> | 43 | #include <plat/usb.h> |
| @@ -634,6 +634,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35") | |||
| 634 | .map_io = omap3_map_io, | 634 | .map_io = omap3_map_io, |
| 635 | .init_early = omap35xx_init_early, | 635 | .init_early = omap35xx_init_early, |
| 636 | .init_irq = omap3_init_irq, | 636 | .init_irq = omap3_init_irq, |
| 637 | .handle_irq = omap3_intc_handle_irq, | ||
| 637 | .init_machine = cm_t35_init, | 638 | .init_machine = cm_t35_init, |
| 638 | .timer = &omap3_timer, | 639 | .timer = &omap3_timer, |
| 639 | MACHINE_END | 640 | MACHINE_END |
| @@ -644,6 +645,7 @@ MACHINE_START(CM_T3730, "Compulab CM-T3730") | |||
| 644 | .map_io = omap3_map_io, | 645 | .map_io = omap3_map_io, |
| 645 | .init_early = omap3630_init_early, | 646 | .init_early = omap3630_init_early, |
| 646 | .init_irq = omap3_init_irq, | 647 | .init_irq = omap3_init_irq, |
| 648 | .handle_irq = omap3_intc_handle_irq, | ||
| 647 | .init_machine = cm_t3730_init, | 649 | .init_machine = cm_t3730_init, |
| 648 | .timer = &omap3_timer, | 650 | .timer = &omap3_timer, |
| 649 | MACHINE_END | 651 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c index 3f4dc6626845..efc5cedb1fbb 100644 --- a/arch/arm/mach-omap2/board-cm-t3517.c +++ b/arch/arm/mach-omap2/board-cm-t3517.c | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | #include <asm/mach/map.h> | 39 | #include <asm/mach/map.h> |
| 40 | 40 | ||
| 41 | #include <plat/board.h> | 41 | #include <plat/board.h> |
| 42 | #include <plat/common.h> | 42 | #include "common.h" |
| 43 | #include <plat/usb.h> | 43 | #include <plat/usb.h> |
| 44 | #include <plat/nand.h> | 44 | #include <plat/nand.h> |
| 45 | #include <plat/gpmc.h> | 45 | #include <plat/gpmc.h> |
| @@ -299,6 +299,7 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517") | |||
| 299 | .map_io = omap3_map_io, | 299 | .map_io = omap3_map_io, |
| 300 | .init_early = am35xx_init_early, | 300 | .init_early = am35xx_init_early, |
| 301 | .init_irq = omap3_init_irq, | 301 | .init_irq = omap3_init_irq, |
| 302 | .handle_irq = omap3_intc_handle_irq, | ||
| 302 | .init_machine = cm_t3517_init, | 303 | .init_machine = cm_t3517_init, |
| 303 | .timer = &omap3_timer, | 304 | .timer = &omap3_timer, |
| 304 | MACHINE_END | 305 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 90154e411da0..d81ea7fa75ef 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #include <asm/mach/flash.h> | 41 | #include <asm/mach/flash.h> |
| 42 | 42 | ||
| 43 | #include <plat/board.h> | 43 | #include <plat/board.h> |
| 44 | #include <plat/common.h> | 44 | #include "common.h" |
| 45 | #include <plat/gpmc.h> | 45 | #include <plat/gpmc.h> |
| 46 | #include <plat/nand.h> | 46 | #include <plat/nand.h> |
| 47 | #include <plat/usb.h> | 47 | #include <plat/usb.h> |
| @@ -660,6 +660,7 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000") | |||
| 660 | .map_io = omap3_map_io, | 660 | .map_io = omap3_map_io, |
| 661 | .init_early = omap35xx_init_early, | 661 | .init_early = omap35xx_init_early, |
| 662 | .init_irq = omap3_init_irq, | 662 | .init_irq = omap3_init_irq, |
| 663 | .handle_irq = omap3_intc_handle_irq, | ||
| 663 | .init_machine = devkit8000_init, | 664 | .init_machine = devkit8000_init, |
| 664 | .timer = &omap3_secure_timer, | 665 | .timer = &omap3_secure_timer, |
| 665 | MACHINE_END | 666 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index fb55fa3dad5a..63b54163b993 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
| @@ -20,8 +20,7 @@ | |||
| 20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
| 21 | 21 | ||
| 22 | #include <plat/board.h> | 22 | #include <plat/board.h> |
| 23 | #include <plat/common.h> | 23 | #include "common.h" |
| 24 | #include <mach/omap4-common.h> | ||
| 25 | #include "common-board-devices.h" | 24 | #include "common-board-devices.h" |
| 26 | 25 | ||
| 27 | /* | 26 | /* |
| @@ -122,6 +121,7 @@ DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") | |||
| 122 | .map_io = omap243x_map_io, | 121 | .map_io = omap243x_map_io, |
| 123 | .init_early = omap2430_init_early, | 122 | .init_early = omap2430_init_early, |
| 124 | .init_irq = omap2_init_irq, | 123 | .init_irq = omap2_init_irq, |
| 124 | .handle_irq = omap2_intc_handle_irq, | ||
| 125 | .init_machine = omap_generic_init, | 125 | .init_machine = omap_generic_init, |
| 126 | .timer = &omap2_timer, | 126 | .timer = &omap2_timer, |
| 127 | .dt_compat = omap243x_boards_compat, | 127 | .dt_compat = omap243x_boards_compat, |
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index 8b351d92a1cc..ec4018362e8e 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | #include <plat/usb.h> | 35 | #include <plat/usb.h> |
| 36 | #include <plat/board.h> | 36 | #include <plat/board.h> |
| 37 | #include <plat/common.h> | 37 | #include "common.h" |
| 38 | #include <plat/menelaus.h> | 38 | #include <plat/menelaus.h> |
| 39 | #include <plat/dma.h> | 39 | #include <plat/dma.h> |
| 40 | #include <plat/gpmc.h> | 40 | #include <plat/gpmc.h> |
| @@ -396,6 +396,7 @@ MACHINE_START(OMAP_H4, "OMAP2420 H4 board") | |||
| 396 | .map_io = omap242x_map_io, | 396 | .map_io = omap242x_map_io, |
| 397 | .init_early = omap2420_init_early, | 397 | .init_early = omap2420_init_early, |
| 398 | .init_irq = omap2_init_irq, | 398 | .init_irq = omap2_init_irq, |
| 399 | .handle_irq = omap2_intc_handle_irq, | ||
| 399 | .init_machine = omap_h4_init, | 400 | .init_machine = omap_h4_init, |
| 400 | .timer = &omap2_timer, | 401 | .timer = &omap2_timer, |
| 401 | MACHINE_END | 402 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index d0a3f78a9b69..5949f6ae3edf 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c | |||
| @@ -28,7 +28,7 @@ | |||
| 28 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
| 29 | 29 | ||
| 30 | #include <plat/board.h> | 30 | #include <plat/board.h> |
| 31 | #include <plat/common.h> | 31 | #include "common.h" |
| 32 | #include <plat/gpmc.h> | 32 | #include <plat/gpmc.h> |
| 33 | #include <plat/usb.h> | 33 | #include <plat/usb.h> |
| 34 | #include <video/omapdss.h> | 34 | #include <video/omapdss.h> |
| @@ -672,6 +672,7 @@ MACHINE_START(IGEP0020, "IGEP v2 board") | |||
| 672 | .map_io = omap3_map_io, | 672 | .map_io = omap3_map_io, |
| 673 | .init_early = omap35xx_init_early, | 673 | .init_early = omap35xx_init_early, |
| 674 | .init_irq = omap3_init_irq, | 674 | .init_irq = omap3_init_irq, |
| 675 | .handle_irq = omap3_intc_handle_irq, | ||
| 675 | .init_machine = igep_init, | 676 | .init_machine = igep_init, |
| 676 | .timer = &omap3_timer, | 677 | .timer = &omap3_timer, |
| 677 | MACHINE_END | 678 | MACHINE_END |
| @@ -682,6 +683,7 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module") | |||
| 682 | .map_io = omap3_map_io, | 683 | .map_io = omap3_map_io, |
| 683 | .init_early = omap35xx_init_early, | 684 | .init_early = omap35xx_init_early, |
| 684 | .init_irq = omap3_init_irq, | 685 | .init_irq = omap3_init_irq, |
| 686 | .handle_irq = omap3_intc_handle_irq, | ||
| 685 | .init_machine = igep_init, | 687 | .init_machine = igep_init, |
| 686 | .timer = &omap3_timer, | 688 | .timer = &omap3_timer, |
| 687 | MACHINE_END | 689 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index e179da0c4da5..13bde0e66934 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
| @@ -36,7 +36,7 @@ | |||
| 36 | 36 | ||
| 37 | #include <plat/mcspi.h> | 37 | #include <plat/mcspi.h> |
| 38 | #include <plat/board.h> | 38 | #include <plat/board.h> |
| 39 | #include <plat/common.h> | 39 | #include "common.h" |
| 40 | #include <plat/gpmc.h> | 40 | #include <plat/gpmc.h> |
| 41 | #include <mach/board-zoom.h> | 41 | #include <mach/board-zoom.h> |
| 42 | 42 | ||
| @@ -434,6 +434,7 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board") | |||
| 434 | .map_io = omap3_map_io, | 434 | .map_io = omap3_map_io, |
| 435 | .init_early = omap3430_init_early, | 435 | .init_early = omap3430_init_early, |
| 436 | .init_irq = omap3_init_irq, | 436 | .init_irq = omap3_init_irq, |
| 437 | .handle_irq = omap3_intc_handle_irq, | ||
| 437 | .init_machine = omap_ldp_init, | 438 | .init_machine = omap_ldp_init, |
| 438 | .timer = &omap3_timer, | 439 | .timer = &omap3_timer, |
| 439 | MACHINE_END | 440 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index e9d5f4a3d064..bebd3d84365e 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include <asm/mach-types.h> | 26 | #include <asm/mach-types.h> |
| 27 | 27 | ||
| 28 | #include <plat/board.h> | 28 | #include <plat/board.h> |
| 29 | #include <plat/common.h> | 29 | #include "common.h" |
| 30 | #include <plat/menelaus.h> | 30 | #include <plat/menelaus.h> |
| 31 | #include <mach/irqs.h> | 31 | #include <mach/irqs.h> |
| 32 | #include <plat/mcspi.h> | 32 | #include <plat/mcspi.h> |
| @@ -689,6 +689,7 @@ MACHINE_START(NOKIA_N800, "Nokia N800") | |||
| 689 | .map_io = omap242x_map_io, | 689 | .map_io = omap242x_map_io, |
| 690 | .init_early = omap2420_init_early, | 690 | .init_early = omap2420_init_early, |
| 691 | .init_irq = omap2_init_irq, | 691 | .init_irq = omap2_init_irq, |
| 692 | .handle_irq = omap2_intc_handle_irq, | ||
| 692 | .init_machine = n8x0_init_machine, | 693 | .init_machine = n8x0_init_machine, |
| 693 | .timer = &omap2_timer, | 694 | .timer = &omap2_timer, |
| 694 | MACHINE_END | 695 | MACHINE_END |
| @@ -699,6 +700,7 @@ MACHINE_START(NOKIA_N810, "Nokia N810") | |||
| 699 | .map_io = omap242x_map_io, | 700 | .map_io = omap242x_map_io, |
| 700 | .init_early = omap2420_init_early, | 701 | .init_early = omap2420_init_early, |
| 701 | .init_irq = omap2_init_irq, | 702 | .init_irq = omap2_init_irq, |
| 703 | .handle_irq = omap2_intc_handle_irq, | ||
| 702 | .init_machine = n8x0_init_machine, | 704 | .init_machine = n8x0_init_machine, |
| 703 | .timer = &omap2_timer, | 705 | .timer = &omap2_timer, |
| 704 | MACHINE_END | 706 | MACHINE_END |
| @@ -709,6 +711,7 @@ MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX") | |||
| 709 | .map_io = omap242x_map_io, | 711 | .map_io = omap242x_map_io, |
| 710 | .init_early = omap2420_init_early, | 712 | .init_early = omap2420_init_early, |
| 711 | .init_irq = omap2_init_irq, | 713 | .init_irq = omap2_init_irq, |
| 714 | .handle_irq = omap2_intc_handle_irq, | ||
| 712 | .init_machine = n8x0_init_machine, | 715 | .init_machine = n8x0_init_machine, |
| 713 | .timer = &omap2_timer, | 716 | .timer = &omap2_timer, |
| 714 | MACHINE_END | 717 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 4a71cb7e42d4..c34f56588284 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | #include <asm/mach/flash.h> | 40 | #include <asm/mach/flash.h> |
| 41 | 41 | ||
| 42 | #include <plat/board.h> | 42 | #include <plat/board.h> |
| 43 | #include <plat/common.h> | 43 | #include "common.h" |
| 44 | #include <video/omapdss.h> | 44 | #include <video/omapdss.h> |
| 45 | #include <video/omap-panel-dvi.h> | 45 | #include <video/omap-panel-dvi.h> |
| 46 | #include <plat/gpmc.h> | 46 | #include <plat/gpmc.h> |
| @@ -559,6 +559,7 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") | |||
| 559 | .map_io = omap3_map_io, | 559 | .map_io = omap3_map_io, |
| 560 | .init_early = omap3_init_early, | 560 | .init_early = omap3_init_early, |
| 561 | .init_irq = omap3_init_irq, | 561 | .init_irq = omap3_init_irq, |
| 562 | .handle_irq = omap3_intc_handle_irq, | ||
| 562 | .init_machine = omap3_beagle_init, | 563 | .init_machine = omap3_beagle_init, |
| 563 | .timer = &omap3_secure_timer, | 564 | .timer = &omap3_secure_timer, |
| 564 | MACHINE_END | 565 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index ec00b2ec7022..f11bc444e7be 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
| @@ -43,7 +43,7 @@ | |||
| 43 | 43 | ||
| 44 | #include <plat/board.h> | 44 | #include <plat/board.h> |
| 45 | #include <plat/usb.h> | 45 | #include <plat/usb.h> |
| 46 | #include <plat/common.h> | 46 | #include "common.h" |
| 47 | #include <plat/mcspi.h> | 47 | #include <plat/mcspi.h> |
| 48 | #include <video/omapdss.h> | 48 | #include <video/omapdss.h> |
| 49 | #include <video/omap-panel-dvi.h> | 49 | #include <video/omap-panel-dvi.h> |
| @@ -681,6 +681,7 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM") | |||
| 681 | .map_io = omap3_map_io, | 681 | .map_io = omap3_map_io, |
| 682 | .init_early = omap35xx_init_early, | 682 | .init_early = omap35xx_init_early, |
| 683 | .init_irq = omap3_init_irq, | 683 | .init_irq = omap3_init_irq, |
| 684 | .handle_irq = omap3_intc_handle_irq, | ||
| 684 | .init_machine = omap3_evm_init, | 685 | .init_machine = omap3_evm_init, |
| 685 | .timer = &omap3_timer, | 686 | .timer = &omap3_timer, |
| 686 | MACHINE_END | 687 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c index 7c0f193f246d..5fa6bad9574e 100644 --- a/arch/arm/mach-omap2/board-omap3logic.c +++ b/arch/arm/mach-omap2/board-omap3logic.c | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | 40 | ||
| 41 | #include <plat/mux.h> | 41 | #include <plat/mux.h> |
| 42 | #include <plat/board.h> | 42 | #include <plat/board.h> |
| 43 | #include <plat/common.h> | 43 | #include "common.h" |
| 44 | #include <plat/gpmc-smsc911x.h> | 44 | #include <plat/gpmc-smsc911x.h> |
| 45 | #include <plat/gpmc.h> | 45 | #include <plat/gpmc.h> |
| 46 | #include <plat/sdrc.h> | 46 | #include <plat/sdrc.h> |
| @@ -208,6 +208,7 @@ MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board") | |||
| 208 | .map_io = omap3_map_io, | 208 | .map_io = omap3_map_io, |
| 209 | .init_early = omap35xx_init_early, | 209 | .init_early = omap35xx_init_early, |
| 210 | .init_irq = omap3_init_irq, | 210 | .init_irq = omap3_init_irq, |
| 211 | .handle_irq = omap3_intc_handle_irq, | ||
| 211 | .init_machine = omap3logic_init, | 212 | .init_machine = omap3logic_init, |
| 212 | .timer = &omap3_timer, | 213 | .timer = &omap3_timer, |
| 213 | MACHINE_END | 214 | MACHINE_END |
| @@ -217,6 +218,7 @@ MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board") | |||
| 217 | .map_io = omap3_map_io, | 218 | .map_io = omap3_map_io, |
| 218 | .init_early = omap35xx_init_early, | 219 | .init_early = omap35xx_init_early, |
| 219 | .init_irq = omap3_init_irq, | 220 | .init_irq = omap3_init_irq, |
| 221 | .handle_irq = omap3_intc_handle_irq, | ||
| 220 | .init_machine = omap3logic_init, | 222 | .init_machine = omap3logic_init, |
| 221 | .timer = &omap3_timer, | 223 | .timer = &omap3_timer, |
| 222 | MACHINE_END | 224 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index f7811f4cfc3d..ef315c585b75 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #include <asm/mach/map.h> | 41 | #include <asm/mach/map.h> |
| 42 | 42 | ||
| 43 | #include <plat/board.h> | 43 | #include <plat/board.h> |
| 44 | #include <plat/common.h> | 44 | #include "common.h" |
| 45 | #include <mach/hardware.h> | 45 | #include <mach/hardware.h> |
| 46 | #include <plat/mcspi.h> | 46 | #include <plat/mcspi.h> |
| 47 | #include <plat/usb.h> | 47 | #include <plat/usb.h> |
| @@ -606,6 +606,7 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console") | |||
| 606 | .map_io = omap3_map_io, | 606 | .map_io = omap3_map_io, |
| 607 | .init_early = omap35xx_init_early, | 607 | .init_early = omap35xx_init_early, |
| 608 | .init_irq = omap3_init_irq, | 608 | .init_irq = omap3_init_irq, |
| 609 | .handle_irq = omap3_intc_handle_irq, | ||
| 609 | .init_machine = omap3pandora_init, | 610 | .init_machine = omap3pandora_init, |
| 610 | .timer = &omap3_timer, | 611 | .timer = &omap3_timer, |
| 611 | MACHINE_END | 612 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index ddb7d6663c6d..b21d70a2e4a7 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #include <asm/mach/flash.h> | 35 | #include <asm/mach/flash.h> |
| 36 | 36 | ||
| 37 | #include <plat/board.h> | 37 | #include <plat/board.h> |
| 38 | #include <plat/common.h> | 38 | #include "common.h" |
| 39 | #include <plat/gpmc.h> | 39 | #include <plat/gpmc.h> |
| 40 | #include <plat/nand.h> | 40 | #include <plat/nand.h> |
| 41 | #include <plat/usb.h> | 41 | #include <plat/usb.h> |
| @@ -454,6 +454,7 @@ MACHINE_START(SBC3530, "OMAP3 STALKER") | |||
| 454 | .map_io = omap3_map_io, | 454 | .map_io = omap3_map_io, |
| 455 | .init_early = omap35xx_init_early, | 455 | .init_early = omap35xx_init_early, |
| 456 | .init_irq = omap3_init_irq, | 456 | .init_irq = omap3_init_irq, |
| 457 | .handle_irq = omap3_intc_handle_irq, | ||
| 457 | .init_machine = omap3_stalker_init, | 458 | .init_machine = omap3_stalker_init, |
| 458 | .timer = &omap3_secure_timer, | 459 | .timer = &omap3_secure_timer, |
| 459 | MACHINE_END | 460 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c index a2d0d1971e27..18cd340f9b7b 100644 --- a/arch/arm/mach-omap2/board-omap3touchbook.c +++ b/arch/arm/mach-omap2/board-omap3touchbook.c | |||
| @@ -44,7 +44,7 @@ | |||
| 44 | #include <asm/mach/flash.h> | 44 | #include <asm/mach/flash.h> |
| 45 | 45 | ||
| 46 | #include <plat/board.h> | 46 | #include <plat/board.h> |
| 47 | #include <plat/common.h> | 47 | #include "common.h" |
| 48 | #include <plat/gpmc.h> | 48 | #include <plat/gpmc.h> |
| 49 | #include <plat/nand.h> | 49 | #include <plat/nand.h> |
| 50 | #include <plat/usb.h> | 50 | #include <plat/usb.h> |
| @@ -381,6 +381,7 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board") | |||
| 381 | .map_io = omap3_map_io, | 381 | .map_io = omap3_map_io, |
| 382 | .init_early = omap3430_init_early, | 382 | .init_early = omap3430_init_early, |
| 383 | .init_irq = omap3_init_irq, | 383 | .init_irq = omap3_init_irq, |
| 384 | .handle_irq = omap3_intc_handle_irq, | ||
| 384 | .init_machine = omap3_touchbook_init, | 385 | .init_machine = omap3_touchbook_init, |
| 385 | .timer = &omap3_secure_timer, | 386 | .timer = &omap3_secure_timer, |
| 386 | MACHINE_END | 387 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index a8c2c4263e38..b6f114436dbc 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c | |||
| @@ -30,14 +30,14 @@ | |||
| 30 | #include <linux/wl12xx.h> | 30 | #include <linux/wl12xx.h> |
| 31 | 31 | ||
| 32 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> |
| 33 | #include <mach/omap4-common.h> | 33 | #include <asm/hardware/gic.h> |
| 34 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 35 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
| 36 | #include <asm/mach/map.h> | 36 | #include <asm/mach/map.h> |
| 37 | #include <video/omapdss.h> | 37 | #include <video/omapdss.h> |
| 38 | 38 | ||
| 39 | #include <plat/board.h> | 39 | #include <plat/board.h> |
| 40 | #include <plat/common.h> | 40 | #include "common.h" |
| 41 | #include <plat/usb.h> | 41 | #include <plat/usb.h> |
| 42 | #include <plat/mmc.h> | 42 | #include <plat/mmc.h> |
| 43 | #include <video/omap-panel-dvi.h> | 43 | #include <video/omap-panel-dvi.h> |
| @@ -577,6 +577,7 @@ MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board") | |||
| 577 | .map_io = omap4_map_io, | 577 | .map_io = omap4_map_io, |
| 578 | .init_early = omap4430_init_early, | 578 | .init_early = omap4430_init_early, |
| 579 | .init_irq = gic_init_irq, | 579 | .init_irq = gic_init_irq, |
| 580 | .handle_irq = gic_handle_irq, | ||
| 580 | .init_machine = omap4_panda_init, | 581 | .init_machine = omap4_panda_init, |
| 581 | .timer = &omap4_timer, | 582 | .timer = &omap4_timer, |
| 582 | MACHINE_END | 583 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index 4cf7aeabab86..60a61ea759bf 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c | |||
| @@ -43,7 +43,7 @@ | |||
| 43 | #include <asm/mach/map.h> | 43 | #include <asm/mach/map.h> |
| 44 | 44 | ||
| 45 | #include <plat/board.h> | 45 | #include <plat/board.h> |
| 46 | #include <plat/common.h> | 46 | #include "common.h" |
| 47 | #include <video/omapdss.h> | 47 | #include <video/omapdss.h> |
| 48 | #include <video/omap-panel-generic-dpi.h> | 48 | #include <video/omap-panel-generic-dpi.h> |
| 49 | #include <video/omap-panel-dvi.h> | 49 | #include <video/omap-panel-dvi.h> |
| @@ -562,6 +562,7 @@ MACHINE_START(OVERO, "Gumstix Overo") | |||
| 562 | .map_io = omap3_map_io, | 562 | .map_io = omap3_map_io, |
| 563 | .init_early = omap35xx_init_early, | 563 | .init_early = omap35xx_init_early, |
| 564 | .init_irq = omap3_init_irq, | 564 | .init_irq = omap3_init_irq, |
| 565 | .handle_irq = omap3_intc_handle_irq, | ||
| 565 | .init_machine = overo_init, | 566 | .init_machine = overo_init, |
| 566 | .timer = &omap3_timer, | 567 | .timer = &omap3_timer, |
| 567 | MACHINE_END | 568 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-rm680.c b/arch/arm/mach-omap2/board-rm680.c index 616fb39763b0..a79d49e3fe09 100644 --- a/arch/arm/mach-omap2/board-rm680.c +++ b/arch/arm/mach-omap2/board-rm680.c | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | #include <plat/mmc.h> | 25 | #include <plat/mmc.h> |
| 26 | #include <plat/usb.h> | 26 | #include <plat/usb.h> |
| 27 | #include <plat/gpmc.h> | 27 | #include <plat/gpmc.h> |
| 28 | #include <plat/common.h> | 28 | #include "common.h" |
| 29 | #include <plat/onenand.h> | 29 | #include <plat/onenand.h> |
| 30 | 30 | ||
| 31 | #include "mux.h" | 31 | #include "mux.h" |
| @@ -149,6 +149,7 @@ MACHINE_START(NOKIA_RM680, "Nokia RM-680 board") | |||
| 149 | .map_io = omap3_map_io, | 149 | .map_io = omap3_map_io, |
| 150 | .init_early = omap3630_init_early, | 150 | .init_early = omap3630_init_early, |
| 151 | .init_irq = omap3_init_irq, | 151 | .init_irq = omap3_init_irq, |
| 152 | .handle_irq = omap3_intc_handle_irq, | ||
| 152 | .init_machine = rm680_init, | 153 | .init_machine = rm680_init, |
| 153 | .timer = &omap3_timer, | 154 | .timer = &omap3_timer, |
| 154 | MACHINE_END | 155 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index ba1aa07bdb29..bd18d691c6ad 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #include <plat/mcspi.h> | 28 | #include <plat/mcspi.h> |
| 29 | #include <plat/board.h> | 29 | #include <plat/board.h> |
| 30 | #include <plat/common.h> | 30 | #include "common.h" |
| 31 | #include <plat/dma.h> | 31 | #include <plat/dma.h> |
| 32 | #include <plat/gpmc.h> | 32 | #include <plat/gpmc.h> |
| 33 | #include <plat/onenand.h> | 33 | #include <plat/onenand.h> |
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c index 4af7c4b2881a..4e3c0965edf3 100644 --- a/arch/arm/mach-omap2/board-rx51.c +++ b/arch/arm/mach-omap2/board-rx51.c | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | 25 | ||
| 26 | #include <plat/mcspi.h> | 26 | #include <plat/mcspi.h> |
| 27 | #include <plat/board.h> | 27 | #include <plat/board.h> |
| 28 | #include <plat/common.h> | 28 | #include "common.h" |
| 29 | #include <plat/dma.h> | 29 | #include <plat/dma.h> |
| 30 | #include <plat/gpmc.h> | 30 | #include <plat/gpmc.h> |
| 31 | #include <plat/usb.h> | 31 | #include <plat/usb.h> |
| @@ -127,6 +127,7 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board") | |||
| 127 | .map_io = omap3_map_io, | 127 | .map_io = omap3_map_io, |
| 128 | .init_early = omap3430_init_early, | 128 | .init_early = omap3430_init_early, |
| 129 | .init_irq = omap3_init_irq, | 129 | .init_irq = omap3_init_irq, |
| 130 | .handle_irq = omap3_intc_handle_irq, | ||
| 130 | .init_machine = rx51_init, | 131 | .init_machine = rx51_init, |
| 131 | .timer = &omap3_timer, | 132 | .timer = &omap3_timer, |
| 132 | MACHINE_END | 133 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/board-ti8168evm.c b/arch/arm/mach-omap2/board-ti8168evm.c index e6ee8842285c..8402b39b2840 100644 --- a/arch/arm/mach-omap2/board-ti8168evm.c +++ b/arch/arm/mach-omap2/board-ti8168evm.c | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | #include <plat/irqs.h> | 23 | #include <plat/irqs.h> |
| 24 | #include <plat/board.h> | 24 | #include <plat/board.h> |
| 25 | #include <plat/common.h> | 25 | #include "common.h" |
| 26 | 26 | ||
| 27 | static struct omap_board_config_kernel ti8168_evm_config[] __initdata = { | 27 | static struct omap_board_config_kernel ti8168_evm_config[] __initdata = { |
| 28 | }; | 28 | }; |
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index 6d0aa4fcb7c3..8d7ce11cfeaf 100644 --- a/arch/arm/mach-omap2/board-zoom-peripherals.c +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
| 25 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
| 26 | 26 | ||
| 27 | #include <plat/common.h> | 27 | #include "common.h" |
| 28 | #include <plat/usb.h> | 28 | #include <plat/usb.h> |
| 29 | 29 | ||
| 30 | #include <mach/board-zoom.h> | 30 | #include <mach/board-zoom.h> |
diff --git a/arch/arm/mach-omap2/board-zoom.c b/arch/arm/mach-omap2/board-zoom.c index be6684dc4f55..70e5b54a2115 100644 --- a/arch/arm/mach-omap2/board-zoom.c +++ b/arch/arm/mach-omap2/board-zoom.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
| 22 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
| 23 | 23 | ||
| 24 | #include <plat/common.h> | 24 | #include "common.h" |
| 25 | #include <plat/board.h> | 25 | #include <plat/board.h> |
| 26 | #include <plat/usb.h> | 26 | #include <plat/usb.h> |
| 27 | 27 | ||
| @@ -135,6 +135,7 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board") | |||
| 135 | .map_io = omap3_map_io, | 135 | .map_io = omap3_map_io, |
| 136 | .init_early = omap3430_init_early, | 136 | .init_early = omap3430_init_early, |
| 137 | .init_irq = omap3_init_irq, | 137 | .init_irq = omap3_init_irq, |
| 138 | .handle_irq = omap3_intc_handle_irq, | ||
| 138 | .init_machine = omap_zoom_init, | 139 | .init_machine = omap_zoom_init, |
| 139 | .timer = &omap3_timer, | 140 | .timer = &omap3_timer, |
| 140 | MACHINE_END | 141 | MACHINE_END |
| @@ -145,6 +146,7 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board") | |||
| 145 | .map_io = omap3_map_io, | 146 | .map_io = omap3_map_io, |
| 146 | .init_early = omap3630_init_early, | 147 | .init_early = omap3630_init_early, |
| 147 | .init_irq = omap3_init_irq, | 148 | .init_irq = omap3_init_irq, |
| 149 | .handle_irq = omap3_intc_handle_irq, | ||
| 148 | .init_machine = omap_zoom_init, | 150 | .init_machine = omap_zoom_init, |
| 149 | .timer = &omap3_timer, | 151 | .timer = &omap3_timer, |
| 150 | MACHINE_END | 152 | MACHINE_END |
diff --git a/arch/arm/mach-omap2/cm2xxx_3xxx.c b/arch/arm/mach-omap2/cm2xxx_3xxx.c index 38830d8d4783..04d39cdd2112 100644 --- a/arch/arm/mach-omap2/cm2xxx_3xxx.c +++ b/arch/arm/mach-omap2/cm2xxx_3xxx.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/err.h> | 18 | #include <linux/err.h> |
| 19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
| 20 | 20 | ||
| 21 | #include <plat/common.h> | 21 | #include "common.h" |
| 22 | 22 | ||
| 23 | #include "cm.h" | 23 | #include "cm.h" |
| 24 | #include "cm2xxx_3xxx.h" | 24 | #include "cm2xxx_3xxx.h" |
diff --git a/arch/arm/mach-omap2/cm44xx.c b/arch/arm/mach-omap2/cm44xx.c index e96f53ea01a1..6a836303252c 100644 --- a/arch/arm/mach-omap2/cm44xx.c +++ b/arch/arm/mach-omap2/cm44xx.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/err.h> | 18 | #include <linux/err.h> |
| 19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
| 20 | 20 | ||
| 21 | #include <plat/common.h> | 21 | #include "common.h" |
| 22 | 22 | ||
| 23 | #include "cm.h" | 23 | #include "cm.h" |
| 24 | #include "cm1_44xx.h" | 24 | #include "cm1_44xx.h" |
diff --git a/arch/arm/mach-omap2/cminst44xx.c b/arch/arm/mach-omap2/cminst44xx.c index eb2a472bbf46..6204deaf85b1 100644 --- a/arch/arm/mach-omap2/cminst44xx.c +++ b/arch/arm/mach-omap2/cminst44xx.c | |||
| @@ -20,7 +20,7 @@ | |||
| 20 | #include <linux/err.h> | 20 | #include <linux/err.h> |
| 21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
| 22 | 22 | ||
| 23 | #include <plat/common.h> | 23 | #include "common.h" |
| 24 | 24 | ||
| 25 | #include "cm.h" | 25 | #include "cm.h" |
| 26 | #include "cm1_44xx.h" | 26 | #include "cm1_44xx.h" |
diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c index 110e5b9db145..684b8a7cd401 100644 --- a/arch/arm/mach-omap2/common.c +++ b/arch/arm/mach-omap2/common.c | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
| 18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 19 | 19 | ||
| 20 | #include <plat/common.h> | 20 | #include "common.h" |
| 21 | #include <plat/board.h> | 21 | #include <plat/board.h> |
| 22 | #include <plat/mux.h> | 22 | #include <plat/mux.h> |
| 23 | 23 | ||
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h new file mode 100644 index 000000000000..0911e843f079 --- /dev/null +++ b/arch/arm/mach-omap2/common.h | |||
| @@ -0,0 +1,227 @@ | |||
| 1 | /* | ||
| 2 | * Header for code common to all OMAP2+ machines. | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms of the GNU General Public License as published by the | ||
| 6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 7 | * option) any later version. | ||
| 8 | * | ||
| 9 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
| 10 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 11 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
| 12 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 13 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 14 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
| 15 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| 16 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 17 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
| 18 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 19 | * | ||
| 20 | * You should have received a copy of the GNU General Public License along | ||
| 21 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 22 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 23 | */ | ||
| 24 | |||
| 25 | #ifndef __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H | ||
| 26 | #define __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H | ||
| 27 | #ifndef __ASSEMBLER__ | ||
| 28 | |||
| 29 | #include <linux/delay.h> | ||
| 30 | #include <plat/common.h> | ||
| 31 | #include <asm/proc-fns.h> | ||
| 32 | |||
| 33 | #ifdef CONFIG_SOC_OMAP2420 | ||
| 34 | extern void omap242x_map_common_io(void); | ||
| 35 | #else | ||
| 36 | static inline void omap242x_map_common_io(void) | ||
| 37 | { | ||
| 38 | } | ||
| 39 | #endif | ||
| 40 | |||
| 41 | #ifdef CONFIG_SOC_OMAP2430 | ||
| 42 | extern void omap243x_map_common_io(void); | ||
| 43 | #else | ||
| 44 | static inline void omap243x_map_common_io(void) | ||
| 45 | { | ||
| 46 | } | ||
| 47 | #endif | ||
| 48 | |||
| 49 | #ifdef CONFIG_ARCH_OMAP3 | ||
| 50 | extern void omap34xx_map_common_io(void); | ||
| 51 | #else | ||
| 52 | static inline void omap34xx_map_common_io(void) | ||
| 53 | { | ||
| 54 | } | ||
| 55 | #endif | ||
| 56 | |||
| 57 | #ifdef CONFIG_SOC_OMAPTI816X | ||
| 58 | extern void omapti816x_map_common_io(void); | ||
| 59 | #else | ||
| 60 | static inline void omapti816x_map_common_io(void) | ||
| 61 | { | ||
| 62 | } | ||
| 63 | #endif | ||
| 64 | |||
| 65 | #ifdef CONFIG_ARCH_OMAP4 | ||
| 66 | extern void omap44xx_map_common_io(void); | ||
| 67 | #else | ||
| 68 | static inline void omap44xx_map_common_io(void) | ||
| 69 | { | ||
| 70 | } | ||
| 71 | #endif | ||
| 72 | |||
| 73 | extern void omap2_init_common_infrastructure(void); | ||
| 74 | |||
| 75 | extern struct sys_timer omap2_timer; | ||
| 76 | extern struct sys_timer omap3_timer; | ||
| 77 | extern struct sys_timer omap3_secure_timer; | ||
| 78 | extern struct sys_timer omap4_timer; | ||
| 79 | |||
| 80 | void omap2420_init_early(void); | ||
| 81 | void omap2430_init_early(void); | ||
| 82 | void omap3430_init_early(void); | ||
| 83 | void omap35xx_init_early(void); | ||
| 84 | void omap3630_init_early(void); | ||
| 85 | void omap3_init_early(void); /* Do not use this one */ | ||
| 86 | void am35xx_init_early(void); | ||
| 87 | void ti816x_init_early(void); | ||
| 88 | void omap4430_init_early(void); | ||
| 89 | |||
| 90 | /* | ||
| 91 | * IO bases for various OMAP processors | ||
| 92 | * Except the tap base, rest all the io bases | ||
| 93 | * listed are physical addresses. | ||
| 94 | */ | ||
| 95 | struct omap_globals { | ||
| 96 | u32 class; /* OMAP class to detect */ | ||
| 97 | void __iomem *tap; /* Control module ID code */ | ||
| 98 | void __iomem *sdrc; /* SDRAM Controller */ | ||
| 99 | void __iomem *sms; /* SDRAM Memory Scheduler */ | ||
| 100 | void __iomem *ctrl; /* System Control Module */ | ||
| 101 | void __iomem *ctrl_pad; /* PAD Control Module */ | ||
| 102 | void __iomem *prm; /* Power and Reset Management */ | ||
| 103 | void __iomem *cm; /* Clock Management */ | ||
| 104 | void __iomem *cm2; | ||
| 105 | }; | ||
| 106 | |||
| 107 | void omap2_set_globals_242x(void); | ||
| 108 | void omap2_set_globals_243x(void); | ||
| 109 | void omap2_set_globals_3xxx(void); | ||
| 110 | void omap2_set_globals_443x(void); | ||
| 111 | void omap2_set_globals_ti816x(void); | ||
| 112 | |||
| 113 | /* These get called from omap2_set_globals_xxxx(), do not call these */ | ||
| 114 | void omap2_set_globals_tap(struct omap_globals *); | ||
| 115 | void omap2_set_globals_sdrc(struct omap_globals *); | ||
| 116 | void omap2_set_globals_control(struct omap_globals *); | ||
| 117 | void omap2_set_globals_prcm(struct omap_globals *); | ||
| 118 | |||
| 119 | void omap242x_map_io(void); | ||
| 120 | void omap243x_map_io(void); | ||
| 121 | void omap3_map_io(void); | ||
| 122 | void omap4_map_io(void); | ||
| 123 | |||
| 124 | /** | ||
| 125 | * omap_test_timeout - busy-loop, testing a condition | ||
| 126 | * @cond: condition to test until it evaluates to true | ||
| 127 | * @timeout: maximum number of microseconds in the timeout | ||
| 128 | * @index: loop index (integer) | ||
| 129 | * | ||
| 130 | * Loop waiting for @cond to become true or until at least @timeout | ||
| 131 | * microseconds have passed. To use, define some integer @index in the | ||
| 132 | * calling code. After running, if @index == @timeout, then the loop has | ||
| 133 | * timed out. | ||
| 134 | */ | ||
| 135 | #define omap_test_timeout(cond, timeout, index) \ | ||
| 136 | ({ \ | ||
| 137 | for (index = 0; index < timeout; index++) { \ | ||
| 138 | if (cond) \ | ||
| 139 | break; \ | ||
| 140 | udelay(1); \ | ||
| 141 | } \ | ||
| 142 | }) | ||
| 143 | |||
| 144 | extern struct device *omap2_get_mpuss_device(void); | ||
| 145 | extern struct device *omap2_get_iva_device(void); | ||
| 146 | extern struct device *omap2_get_l3_device(void); | ||
| 147 | extern struct device *omap4_get_dsp_device(void); | ||
| 148 | |||
| 149 | void omap2_init_irq(void); | ||
| 150 | void omap3_init_irq(void); | ||
| 151 | void ti816x_init_irq(void); | ||
| 152 | extern int omap_irq_pending(void); | ||
| 153 | void omap_intc_save_context(void); | ||
| 154 | void omap_intc_restore_context(void); | ||
| 155 | void omap3_intc_suspend(void); | ||
| 156 | void omap3_intc_prepare_idle(void); | ||
| 157 | void omap3_intc_resume_idle(void); | ||
| 158 | void omap2_intc_handle_irq(struct pt_regs *regs); | ||
| 159 | void omap3_intc_handle_irq(struct pt_regs *regs); | ||
| 160 | |||
| 161 | #ifdef CONFIG_CACHE_L2X0 | ||
| 162 | extern void __iomem *omap4_get_l2cache_base(void); | ||
| 163 | #endif | ||
| 164 | |||
| 165 | #ifdef CONFIG_SMP | ||
| 166 | extern void __iomem *omap4_get_scu_base(void); | ||
| 167 | #else | ||
| 168 | static inline void __iomem *omap4_get_scu_base(void) | ||
| 169 | { | ||
| 170 | return NULL; | ||
| 171 | } | ||
| 172 | #endif | ||
| 173 | |||
| 174 | extern void __init gic_init_irq(void); | ||
| 175 | extern void omap_smc1(u32 fn, u32 arg); | ||
| 176 | extern void __iomem *omap4_get_sar_ram_base(void); | ||
| 177 | extern void omap_do_wfi(void); | ||
| 178 | |||
| 179 | #ifdef CONFIG_SMP | ||
| 180 | /* Needed for secondary core boot */ | ||
| 181 | extern void omap_secondary_startup(void); | ||
| 182 | extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask); | ||
| 183 | extern void omap_auxcoreboot_addr(u32 cpu_addr); | ||
| 184 | extern u32 omap_read_auxcoreboot0(void); | ||
| 185 | #endif | ||
| 186 | |||
| 187 | #if defined(CONFIG_SMP) && defined(CONFIG_PM) | ||
| 188 | extern int omap4_mpuss_init(void); | ||
| 189 | extern int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state); | ||
| 190 | extern int omap4_finish_suspend(unsigned long cpu_state); | ||
| 191 | extern void omap4_cpu_resume(void); | ||
| 192 | extern int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state); | ||
| 193 | extern u32 omap4_mpuss_read_prev_context_state(void); | ||
| 194 | #else | ||
| 195 | static inline int omap4_enter_lowpower(unsigned int cpu, | ||
| 196 | unsigned int power_state) | ||
| 197 | { | ||
| 198 | cpu_do_idle(); | ||
| 199 | return 0; | ||
| 200 | } | ||
| 201 | |||
| 202 | static inline int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) | ||
| 203 | { | ||
| 204 | cpu_do_idle(); | ||
| 205 | return 0; | ||
| 206 | } | ||
| 207 | |||
| 208 | static inline int omap4_mpuss_init(void) | ||
| 209 | { | ||
| 210 | return 0; | ||
| 211 | } | ||
| 212 | |||
| 213 | static inline int omap4_finish_suspend(unsigned long cpu_state) | ||
| 214 | { | ||
| 215 | return 0; | ||
| 216 | } | ||
| 217 | |||
| 218 | static inline void omap4_cpu_resume(void) | ||
| 219 | {} | ||
| 220 | |||
| 221 | static inline u32 omap4_mpuss_read_prev_context_state(void) | ||
| 222 | { | ||
| 223 | return 0; | ||
| 224 | } | ||
| 225 | #endif | ||
| 226 | #endif /* __ASSEMBLER__ */ | ||
| 227 | #endif /* __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H */ | ||
diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c index e34d27f8c49c..114c037e433c 100644 --- a/arch/arm/mach-omap2/control.c +++ b/arch/arm/mach-omap2/control.c | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | 17 | ||
| 18 | #include <plat/common.h> | 18 | #include "common.h" |
| 19 | #include <plat/sdrc.h> | 19 | #include <plat/sdrc.h> |
| 20 | 20 | ||
| 21 | #include "cm-regbits-34xx.h" | 21 | #include "cm-regbits-34xx.h" |
diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index 942bb4f19f9f..1f71ebb6c12c 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/sched.h> | 25 | #include <linux/sched.h> |
| 26 | #include <linux/cpuidle.h> | 26 | #include <linux/cpuidle.h> |
| 27 | #include <linux/export.h> | 27 | #include <linux/export.h> |
| 28 | #include <linux/cpu_pm.h> | ||
| 28 | 29 | ||
| 29 | #include <plat/prcm.h> | 30 | #include <plat/prcm.h> |
| 30 | #include <plat/irqs.h> | 31 | #include <plat/irqs.h> |
| @@ -34,6 +35,7 @@ | |||
| 34 | 35 | ||
| 35 | #include "pm.h" | 36 | #include "pm.h" |
| 36 | #include "control.h" | 37 | #include "control.h" |
| 38 | #include "common.h" | ||
| 37 | 39 | ||
| 38 | #ifdef CONFIG_CPU_IDLE | 40 | #ifdef CONFIG_CPU_IDLE |
| 39 | 41 | ||
| @@ -123,9 +125,23 @@ static int omap3_enter_idle(struct cpuidle_device *dev, | |||
| 123 | pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle); | 125 | pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle); |
| 124 | } | 126 | } |
| 125 | 127 | ||
| 128 | /* | ||
| 129 | * Call idle CPU PM enter notifier chain so that | ||
| 130 | * VFP context is saved. | ||
| 131 | */ | ||
| 132 | if (mpu_state == PWRDM_POWER_OFF) | ||
| 133 | cpu_pm_enter(); | ||
| 134 | |||
| 126 | /* Execute ARM wfi */ | 135 | /* Execute ARM wfi */ |
| 127 | omap_sram_idle(); | 136 | omap_sram_idle(); |
| 128 | 137 | ||
| 138 | /* | ||
| 139 | * Call idle CPU PM enter notifier chain to restore | ||
| 140 | * VFP context. | ||
| 141 | */ | ||
| 142 | if (pwrdm_read_prev_pwrst(mpu_pd) == PWRDM_POWER_OFF) | ||
| 143 | cpu_pm_exit(); | ||
| 144 | |||
| 129 | /* Re-allow idle for C1 */ | 145 | /* Re-allow idle for C1 */ |
| 130 | if (index == 0) { | 146 | if (index == 0) { |
| 131 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle); | 147 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle); |
diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c new file mode 100644 index 000000000000..cfdbb86bc84e --- /dev/null +++ b/arch/arm/mach-omap2/cpuidle44xx.c | |||
| @@ -0,0 +1,245 @@ | |||
| 1 | /* | ||
| 2 | * OMAP4 CPU idle Routines | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
| 5 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * Rajendra Nayak <rnayak@ti.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/sched.h> | ||
| 14 | #include <linux/cpuidle.h> | ||
| 15 | #include <linux/cpu_pm.h> | ||
| 16 | #include <linux/export.h> | ||
| 17 | #include <linux/clockchips.h> | ||
| 18 | |||
| 19 | #include <asm/proc-fns.h> | ||
| 20 | |||
| 21 | #include "common.h" | ||
| 22 | #include "pm.h" | ||
| 23 | #include "prm.h" | ||
| 24 | |||
| 25 | #ifdef CONFIG_CPU_IDLE | ||
| 26 | |||
| 27 | /* Machine specific information to be recorded in the C-state driver_data */ | ||
| 28 | struct omap4_idle_statedata { | ||
| 29 | u32 cpu_state; | ||
| 30 | u32 mpu_logic_state; | ||
| 31 | u32 mpu_state; | ||
| 32 | u8 valid; | ||
| 33 | }; | ||
| 34 | |||
| 35 | static struct cpuidle_params cpuidle_params_table[] = { | ||
| 36 | /* C1 - CPU0 ON + CPU1 ON + MPU ON */ | ||
| 37 | {.exit_latency = 2 + 2 , .target_residency = 5, .valid = 1}, | ||
| 38 | /* C2- CPU0 OFF + CPU1 OFF + MPU CSWR */ | ||
| 39 | {.exit_latency = 328 + 440 , .target_residency = 960, .valid = 1}, | ||
| 40 | /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */ | ||
| 41 | {.exit_latency = 460 + 518 , .target_residency = 1100, .valid = 1}, | ||
| 42 | }; | ||
| 43 | |||
| 44 | #define OMAP4_NUM_STATES ARRAY_SIZE(cpuidle_params_table) | ||
| 45 | |||
| 46 | struct omap4_idle_statedata omap4_idle_data[OMAP4_NUM_STATES]; | ||
| 47 | static struct powerdomain *mpu_pd, *cpu0_pd, *cpu1_pd; | ||
| 48 | |||
| 49 | /** | ||
| 50 | * omap4_enter_idle - Programs OMAP4 to enter the specified state | ||
| 51 | * @dev: cpuidle device | ||
| 52 | * @drv: cpuidle driver | ||
| 53 | * @index: the index of state to be entered | ||
| 54 | * | ||
| 55 | * Called from the CPUidle framework to program the device to the | ||
| 56 | * specified low power state selected by the governor. | ||
| 57 | * Returns the amount of time spent in the low power state. | ||
| 58 | */ | ||
| 59 | static int omap4_enter_idle(struct cpuidle_device *dev, | ||
| 60 | struct cpuidle_driver *drv, | ||
| 61 | int index) | ||
| 62 | { | ||
| 63 | struct omap4_idle_statedata *cx = | ||
| 64 | cpuidle_get_statedata(&dev->states_usage[index]); | ||
| 65 | struct timespec ts_preidle, ts_postidle, ts_idle; | ||
| 66 | u32 cpu1_state; | ||
| 67 | int idle_time; | ||
| 68 | int new_state_idx; | ||
| 69 | int cpu_id = smp_processor_id(); | ||
| 70 | |||
| 71 | /* Used to keep track of the total time in idle */ | ||
| 72 | getnstimeofday(&ts_preidle); | ||
| 73 | |||
| 74 | local_irq_disable(); | ||
| 75 | local_fiq_disable(); | ||
| 76 | |||
| 77 | /* | ||
| 78 | * CPU0 has to stay ON (i.e in C1) until CPU1 is OFF state. | ||
| 79 | * This is necessary to honour hardware recommondation | ||
| 80 | * of triggeing all the possible low power modes once CPU1 is | ||
| 81 | * out of coherency and in OFF mode. | ||
| 82 | * Update dev->last_state so that governor stats reflects right | ||
| 83 | * data. | ||
| 84 | */ | ||
| 85 | cpu1_state = pwrdm_read_pwrst(cpu1_pd); | ||
| 86 | if (cpu1_state != PWRDM_POWER_OFF) { | ||
| 87 | new_state_idx = drv->safe_state_index; | ||
| 88 | cx = cpuidle_get_statedata(&dev->states_usage[new_state_idx]); | ||
| 89 | } | ||
| 90 | |||
| 91 | if (index > 0) | ||
| 92 | clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu_id); | ||
| 93 | |||
| 94 | /* | ||
| 95 | * Call idle CPU PM enter notifier chain so that | ||
| 96 | * VFP and per CPU interrupt context is saved. | ||
| 97 | */ | ||
| 98 | if (cx->cpu_state == PWRDM_POWER_OFF) | ||
| 99 | cpu_pm_enter(); | ||
| 100 | |||
| 101 | pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state); | ||
| 102 | omap_set_pwrdm_state(mpu_pd, cx->mpu_state); | ||
| 103 | |||
| 104 | /* | ||
| 105 | * Call idle CPU cluster PM enter notifier chain | ||
| 106 | * to save GIC and wakeupgen context. | ||
| 107 | */ | ||
| 108 | if ((cx->mpu_state == PWRDM_POWER_RET) && | ||
| 109 | (cx->mpu_logic_state == PWRDM_POWER_OFF)) | ||
| 110 | cpu_cluster_pm_enter(); | ||
| 111 | |||
| 112 | omap4_enter_lowpower(dev->cpu, cx->cpu_state); | ||
| 113 | |||
| 114 | /* | ||
| 115 | * Call idle CPU PM exit notifier chain to restore | ||
| 116 | * VFP and per CPU IRQ context. Only CPU0 state is | ||
| 117 | * considered since CPU1 is managed by CPU hotplug. | ||
| 118 | */ | ||
| 119 | if (pwrdm_read_prev_pwrst(cpu0_pd) == PWRDM_POWER_OFF) | ||
| 120 | cpu_pm_exit(); | ||
| 121 | |||
| 122 | /* | ||
| 123 | * Call idle CPU cluster PM exit notifier chain | ||
| 124 | * to restore GIC and wakeupgen context. | ||
| 125 | */ | ||
| 126 | if (omap4_mpuss_read_prev_context_state()) | ||
| 127 | cpu_cluster_pm_exit(); | ||
| 128 | |||
| 129 | if (index > 0) | ||
| 130 | clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu_id); | ||
| 131 | |||
| 132 | getnstimeofday(&ts_postidle); | ||
| 133 | ts_idle = timespec_sub(ts_postidle, ts_preidle); | ||
| 134 | |||
| 135 | local_irq_enable(); | ||
| 136 | local_fiq_enable(); | ||
| 137 | |||
| 138 | idle_time = ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * \ | ||
| 139 | USEC_PER_SEC; | ||
| 140 | |||
| 141 | /* Update cpuidle counters */ | ||
| 142 | dev->last_residency = idle_time; | ||
| 143 | |||
| 144 | return index; | ||
| 145 | } | ||
| 146 | |||
| 147 | DEFINE_PER_CPU(struct cpuidle_device, omap4_idle_dev); | ||
| 148 | |||
| 149 | struct cpuidle_driver omap4_idle_driver = { | ||
| 150 | .name = "omap4_idle", | ||
| 151 | .owner = THIS_MODULE, | ||
| 152 | }; | ||
| 153 | |||
| 154 | static inline void _fill_cstate(struct cpuidle_driver *drv, | ||
| 155 | int idx, const char *descr) | ||
| 156 | { | ||
| 157 | struct cpuidle_state *state = &drv->states[idx]; | ||
| 158 | |||
| 159 | state->exit_latency = cpuidle_params_table[idx].exit_latency; | ||
| 160 | state->target_residency = cpuidle_params_table[idx].target_residency; | ||
| 161 | state->flags = CPUIDLE_FLAG_TIME_VALID; | ||
| 162 | state->enter = omap4_enter_idle; | ||
| 163 | sprintf(state->name, "C%d", idx + 1); | ||
| 164 | strncpy(state->desc, descr, CPUIDLE_DESC_LEN); | ||
| 165 | } | ||
| 166 | |||
| 167 | static inline struct omap4_idle_statedata *_fill_cstate_usage( | ||
| 168 | struct cpuidle_device *dev, | ||
| 169 | int idx) | ||
| 170 | { | ||
| 171 | struct omap4_idle_statedata *cx = &omap4_idle_data[idx]; | ||
| 172 | struct cpuidle_state_usage *state_usage = &dev->states_usage[idx]; | ||
| 173 | |||
| 174 | cx->valid = cpuidle_params_table[idx].valid; | ||
| 175 | cpuidle_set_statedata(state_usage, cx); | ||
| 176 | |||
| 177 | return cx; | ||
| 178 | } | ||
| 179 | |||
| 180 | |||
| 181 | |||
| 182 | /** | ||
| 183 | * omap4_idle_init - Init routine for OMAP4 idle | ||
| 184 | * | ||
| 185 | * Registers the OMAP4 specific cpuidle driver to the cpuidle | ||
| 186 | * framework with the valid set of states. | ||
| 187 | */ | ||
| 188 | int __init omap4_idle_init(void) | ||
| 189 | { | ||
| 190 | struct omap4_idle_statedata *cx; | ||
| 191 | struct cpuidle_device *dev; | ||
| 192 | struct cpuidle_driver *drv = &omap4_idle_driver; | ||
| 193 | unsigned int cpu_id = 0; | ||
| 194 | |||
| 195 | mpu_pd = pwrdm_lookup("mpu_pwrdm"); | ||
| 196 | cpu0_pd = pwrdm_lookup("cpu0_pwrdm"); | ||
| 197 | cpu1_pd = pwrdm_lookup("cpu1_pwrdm"); | ||
| 198 | if ((!mpu_pd) || (!cpu0_pd) || (!cpu1_pd)) | ||
| 199 | return -ENODEV; | ||
| 200 | |||
| 201 | |||
| 202 | drv->safe_state_index = -1; | ||
| 203 | dev = &per_cpu(omap4_idle_dev, cpu_id); | ||
| 204 | dev->cpu = cpu_id; | ||
| 205 | |||
| 206 | /* C1 - CPU0 ON + CPU1 ON + MPU ON */ | ||
| 207 | _fill_cstate(drv, 0, "MPUSS ON"); | ||
| 208 | drv->safe_state_index = 0; | ||
| 209 | cx = _fill_cstate_usage(dev, 0); | ||
| 210 | cx->valid = 1; /* C1 is always valid */ | ||
| 211 | cx->cpu_state = PWRDM_POWER_ON; | ||
| 212 | cx->mpu_state = PWRDM_POWER_ON; | ||
| 213 | cx->mpu_logic_state = PWRDM_POWER_RET; | ||
| 214 | |||
| 215 | /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */ | ||
| 216 | _fill_cstate(drv, 1, "MPUSS CSWR"); | ||
| 217 | cx = _fill_cstate_usage(dev, 1); | ||
| 218 | cx->cpu_state = PWRDM_POWER_OFF; | ||
| 219 | cx->mpu_state = PWRDM_POWER_RET; | ||
| 220 | cx->mpu_logic_state = PWRDM_POWER_RET; | ||
| 221 | |||
| 222 | /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */ | ||
| 223 | _fill_cstate(drv, 2, "MPUSS OSWR"); | ||
| 224 | cx = _fill_cstate_usage(dev, 2); | ||
| 225 | cx->cpu_state = PWRDM_POWER_OFF; | ||
| 226 | cx->mpu_state = PWRDM_POWER_RET; | ||
| 227 | cx->mpu_logic_state = PWRDM_POWER_OFF; | ||
| 228 | |||
| 229 | drv->state_count = OMAP4_NUM_STATES; | ||
| 230 | cpuidle_register_driver(&omap4_idle_driver); | ||
| 231 | |||
| 232 | dev->state_count = OMAP4_NUM_STATES; | ||
| 233 | if (cpuidle_register_device(dev)) { | ||
| 234 | pr_err("%s: CPUidle register device failed\n", __func__); | ||
| 235 | return -EIO; | ||
| 236 | } | ||
| 237 | |||
| 238 | return 0; | ||
| 239 | } | ||
| 240 | #else | ||
| 241 | int __init omap4_idle_init(void) | ||
| 242 | { | ||
| 243 | return 0; | ||
| 244 | } | ||
| 245 | #endif /* CONFIG_CPU_IDLE */ | ||
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index dce9905d64bb..bc6cf863a563 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c | |||
| @@ -22,12 +22,13 @@ | |||
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | #include <linux/clk.h> | 23 | #include <linux/clk.h> |
| 24 | #include <linux/err.h> | 24 | #include <linux/err.h> |
| 25 | #include <linux/delay.h> | ||
| 25 | 26 | ||
| 26 | #include <video/omapdss.h> | 27 | #include <video/omapdss.h> |
| 27 | #include <plat/omap_hwmod.h> | 28 | #include <plat/omap_hwmod.h> |
| 28 | #include <plat/omap_device.h> | 29 | #include <plat/omap_device.h> |
| 29 | #include <plat/omap-pm.h> | 30 | #include <plat/omap-pm.h> |
| 30 | #include <plat/common.h> | 31 | #include "common.h" |
| 31 | 32 | ||
| 32 | #include "control.h" | 33 | #include "control.h" |
| 33 | #include "display.h" | 34 | #include "display.h" |
diff --git a/arch/arm/mach-omap2/i2c.c b/arch/arm/mach-omap2/i2c.c index ace99944e96f..a12e224eb97d 100644 --- a/arch/arm/mach-omap2/i2c.c +++ b/arch/arm/mach-omap2/i2c.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | #include <plat/cpu.h> | 22 | #include <plat/cpu.h> |
| 23 | #include <plat/i2c.h> | 23 | #include <plat/i2c.h> |
| 24 | #include <plat/common.h> | 24 | #include "common.h" |
| 25 | #include <plat/omap_hwmod.h> | 25 | #include <plat/omap_hwmod.h> |
| 26 | 26 | ||
| 27 | #include "mux.h" | 27 | #include "mux.h" |
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index 7f47092a193f..27ad722df637 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | #include <asm/cputype.h> | 22 | #include <asm/cputype.h> |
| 23 | 23 | ||
| 24 | #include <plat/common.h> | 24 | #include "common.h" |
| 25 | #include <plat/cpu.h> | 25 | #include <plat/cpu.h> |
| 26 | 26 | ||
| 27 | #include <mach/id.h> | 27 | #include <mach/id.h> |
diff --git a/arch/arm/mach-netx/include/mach/vmalloc.h b/arch/arm/mach-omap2/include/mach/barriers.h index 871f1ef7bff5..4fa72c7cc7cd 100644 --- a/arch/arm/mach-netx/include/mach/vmalloc.h +++ b/arch/arm/mach-omap2/include/mach/barriers.h | |||
| @@ -1,11 +1,13 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * arch/arm/mach-netx/include/mach/vmalloc.h | 2 | * OMAP memory barrier header. |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2005 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix | 4 | * Copyright (C) 2011 Texas Instruments, Inc. |
| 5 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * Richard Woodruff <r-woodruff2@ti.com> | ||
| 5 | * | 7 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License version 2 | 9 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * as published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
| 9 | * | 11 | * |
| 10 | * This program is distributed in the hope that it will be useful, | 12 | * This program is distributed in the hope that it will be useful, |
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| @@ -14,6 +16,16 @@ | |||
| 14 | * | 16 | * |
| 15 | * You should have received a copy of the GNU General Public License | 17 | * You should have received a copy of the GNU General Public License |
| 16 | * along with this program; if not, write to the Free Software | 18 | * along with this program; if not, write to the Free Software |
| 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 18 | */ | 20 | */ |
| 19 | #define VMALLOC_END 0xd0000000UL | 21 | |
| 22 | #ifndef __MACH_BARRIERS_H | ||
| 23 | #define __MACH_BARRIERS_H | ||
| 24 | |||
| 25 | extern void omap_bus_sync(void); | ||
| 26 | |||
| 27 | #define rmb() dsb() | ||
| 28 | #define wmb() do { dsb(); outer_sync(); omap_bus_sync(); } while (0) | ||
| 29 | #define mb() wmb() | ||
| 30 | |||
| 31 | #endif /* __MACH_BARRIERS_H */ | ||
diff --git a/arch/arm/mach-omap2/include/mach/entry-macro.S b/arch/arm/mach-omap2/include/mach/entry-macro.S index feb90a10945a..56964a0c4c7e 100644 --- a/arch/arm/mach-omap2/include/mach/entry-macro.S +++ b/arch/arm/mach-omap2/include/mach/entry-macro.S | |||
| @@ -10,146 +10,9 @@ | |||
| 10 | * License version 2. This program is licensed "as is" without any | 10 | * License version 2. This program is licensed "as is" without any |
| 11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
| 12 | */ | 12 | */ |
| 13 | #include <mach/hardware.h> | ||
| 14 | #include <mach/io.h> | ||
| 15 | #include <mach/irqs.h> | ||
| 16 | #include <asm/hardware/gic.h> | ||
| 17 | |||
| 18 | #include <plat/omap24xx.h> | ||
| 19 | #include <plat/omap34xx.h> | ||
| 20 | #include <plat/omap44xx.h> | ||
| 21 | |||
| 22 | #include <plat/multi.h> | ||
| 23 | |||
| 24 | #define OMAP2_IRQ_BASE OMAP2_L4_IO_ADDRESS(OMAP24XX_IC_BASE) | ||
| 25 | #define OMAP3_IRQ_BASE OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE) | ||
| 26 | #define OMAP4_IRQ_BASE OMAP2_L4_IO_ADDRESS(OMAP44XX_GIC_CPU_BASE) | ||
| 27 | #define INTCPS_SIR_IRQ_OFFSET 0x0040 /* omap2/3 active interrupt offset */ | ||
| 28 | #define ACTIVEIRQ_MASK 0x7f /* omap2/3 active interrupt bits */ | ||
| 29 | 13 | ||
| 30 | .macro disable_fiq | 14 | .macro disable_fiq |
| 31 | .endm | 15 | .endm |
| 32 | 16 | ||
| 33 | .macro arch_ret_to_user, tmp1, tmp2 | 17 | .macro arch_ret_to_user, tmp1, tmp2 |
| 34 | .endm | 18 | .endm |
| 35 | |||
| 36 | /* | ||
| 37 | * Unoptimized irq functions for multi-omap2, 3 and 4 | ||
| 38 | */ | ||
| 39 | |||
| 40 | #ifdef MULTI_OMAP2 | ||
| 41 | /* | ||
| 42 | * Configure the interrupt base on the first interrupt. | ||
| 43 | * See also omap_irq_base_init for setting omap_irq_base. | ||
| 44 | */ | ||
| 45 | .macro get_irqnr_preamble, base, tmp | ||
| 46 | ldr \base, =omap_irq_base @ irq base address | ||
| 47 | ldr \base, [\base, #0] @ irq base value | ||
| 48 | .endm | ||
| 49 | |||
| 50 | /* Check the pending interrupts. Note that base already set */ | ||
| 51 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 52 | tst \base, #0x100 @ gic address? | ||
| 53 | bne 4401f @ found gic | ||
| 54 | |||
| 55 | /* Handle omap2 and omap3 */ | ||
| 56 | ldr \irqnr, [\base, #0x98] /* IRQ pending reg 1 */ | ||
| 57 | cmp \irqnr, #0x0 | ||
| 58 | bne 9998f | ||
| 59 | ldr \irqnr, [\base, #0xb8] /* IRQ pending reg 2 */ | ||
| 60 | cmp \irqnr, #0x0 | ||
| 61 | bne 9998f | ||
| 62 | ldr \irqnr, [\base, #0xd8] /* IRQ pending reg 3 */ | ||
| 63 | cmp \irqnr, #0x0 | ||
| 64 | bne 9998f | ||
| 65 | |||
| 66 | /* | ||
| 67 | * ti816x has additional IRQ pending register. Checking this | ||
| 68 | * register on omap2 & omap3 has no effect (read as 0). | ||
| 69 | */ | ||
| 70 | ldr \irqnr, [\base, #0xf8] /* IRQ pending reg 4 */ | ||
| 71 | cmp \irqnr, #0x0 | ||
| 72 | 9998: | ||
| 73 | ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET] | ||
| 74 | and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */ | ||
| 75 | b 9999f | ||
| 76 | |||
| 77 | /* Handle omap4 */ | ||
| 78 | 4401: ldr \irqstat, [\base, #GIC_CPU_INTACK] | ||
| 79 | ldr \tmp, =1021 | ||
| 80 | bic \irqnr, \irqstat, #0x1c00 | ||
| 81 | cmp \irqnr, #15 | ||
| 82 | cmpcc \irqnr, \irqnr | ||
| 83 | cmpne \irqnr, \tmp | ||
| 84 | cmpcs \irqnr, \irqnr | ||
| 85 | 9999: | ||
| 86 | .endm | ||
| 87 | |||
| 88 | #ifdef CONFIG_SMP | ||
| 89 | /* We assume that irqstat (the raw value of the IRQ acknowledge | ||
| 90 | * register) is preserved from the macro above. | ||
| 91 | * If there is an IPI, we immediately signal end of interrupt | ||
| 92 | * on the controller, since this requires the original irqstat | ||
| 93 | * value which we won't easily be able to recreate later. | ||
| 94 | */ | ||
| 95 | |||
| 96 | .macro test_for_ipi, irqnr, irqstat, base, tmp | ||
| 97 | bic \irqnr, \irqstat, #0x1c00 | ||
| 98 | cmp \irqnr, #16 | ||
| 99 | it cc | ||
| 100 | strcc \irqstat, [\base, #GIC_CPU_EOI] | ||
| 101 | it cs | ||
| 102 | cmpcs \irqnr, \irqnr | ||
| 103 | .endm | ||
| 104 | #endif /* CONFIG_SMP */ | ||
| 105 | |||
| 106 | #else /* MULTI_OMAP2 */ | ||
| 107 | |||
| 108 | |||
| 109 | /* | ||
| 110 | * Optimized irq functions for omap2, 3 and 4 | ||
| 111 | */ | ||
| 112 | |||
| 113 | #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) | ||
| 114 | .macro get_irqnr_preamble, base, tmp | ||
| 115 | #ifdef CONFIG_ARCH_OMAP2 | ||
| 116 | ldr \base, =OMAP2_IRQ_BASE | ||
| 117 | #else | ||
| 118 | ldr \base, =OMAP3_IRQ_BASE | ||
| 119 | #endif | ||
| 120 | .endm | ||
| 121 | |||
| 122 | /* Check the pending interrupts. Note that base already set */ | ||
| 123 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 124 | ldr \irqnr, [\base, #0x98] /* IRQ pending reg 1 */ | ||
| 125 | cmp \irqnr, #0x0 | ||
| 126 | bne 9999f | ||
| 127 | ldr \irqnr, [\base, #0xb8] /* IRQ pending reg 2 */ | ||
| 128 | cmp \irqnr, #0x0 | ||
| 129 | bne 9999f | ||
| 130 | ldr \irqnr, [\base, #0xd8] /* IRQ pending reg 3 */ | ||
| 131 | cmp \irqnr, #0x0 | ||
| 132 | #ifdef CONFIG_SOC_OMAPTI816X | ||
| 133 | bne 9999f | ||
| 134 | ldr \irqnr, [\base, #0xf8] /* IRQ pending reg 4 */ | ||
| 135 | cmp \irqnr, #0x0 | ||
| 136 | #endif | ||
| 137 | 9999: | ||
| 138 | ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET] | ||
| 139 | and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */ | ||
| 140 | |||
| 141 | .endm | ||
| 142 | #endif | ||
| 143 | |||
| 144 | |||
| 145 | #ifdef CONFIG_ARCH_OMAP4 | ||
| 146 | #define HAVE_GET_IRQNR_PREAMBLE | ||
| 147 | #include <asm/hardware/entry-macro-gic.S> | ||
| 148 | |||
| 149 | .macro get_irqnr_preamble, base, tmp | ||
| 150 | ldr \base, =OMAP4_IRQ_BASE | ||
| 151 | .endm | ||
| 152 | |||
| 153 | #endif | ||
| 154 | |||
| 155 | #endif /* MULTI_OMAP2 */ | ||
diff --git a/arch/arm/mach-omap2/include/mach/omap-secure.h b/arch/arm/mach-omap2/include/mach/omap-secure.h new file mode 100644 index 000000000000..c90a43589abe --- /dev/null +++ b/arch/arm/mach-omap2/include/mach/omap-secure.h | |||
| @@ -0,0 +1,57 @@ | |||
| 1 | /* | ||
| 2 | * omap-secure.h: OMAP Secure infrastructure header. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
| 5 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | #ifndef OMAP_ARCH_OMAP_SECURE_H | ||
| 12 | #define OMAP_ARCH_OMAP_SECURE_H | ||
| 13 | |||
| 14 | /* Monitor error code */ | ||
| 15 | #define API_HAL_RET_VALUE_NS2S_CONVERSION_ERROR 0xFFFFFFFE | ||
| 16 | #define API_HAL_RET_VALUE_SERVICE_UNKNWON 0xFFFFFFFF | ||
| 17 | |||
| 18 | /* HAL API error codes */ | ||
| 19 | #define API_HAL_RET_VALUE_OK 0x00 | ||
| 20 | #define API_HAL_RET_VALUE_FAIL 0x01 | ||
| 21 | |||
| 22 | /* Secure HAL API flags */ | ||
| 23 | #define FLAG_START_CRITICAL 0x4 | ||
| 24 | #define FLAG_IRQFIQ_MASK 0x3 | ||
| 25 | #define FLAG_IRQ_ENABLE 0x2 | ||
| 26 | #define FLAG_FIQ_ENABLE 0x1 | ||
| 27 | #define NO_FLAG 0x0 | ||
| 28 | |||
| 29 | /* Maximum Secure memory storage size */ | ||
| 30 | #define OMAP_SECURE_RAM_STORAGE (88 * SZ_1K) | ||
| 31 | |||
| 32 | /* Secure low power HAL API index */ | ||
| 33 | #define OMAP4_HAL_SAVESECURERAM_INDEX 0x1a | ||
| 34 | #define OMAP4_HAL_SAVEHW_INDEX 0x1b | ||
| 35 | #define OMAP4_HAL_SAVEALL_INDEX 0x1c | ||
| 36 | #define OMAP4_HAL_SAVEGIC_INDEX 0x1d | ||
| 37 | |||
| 38 | /* Secure Monitor mode APIs */ | ||
| 39 | #define OMAP4_MON_SCU_PWR_INDEX 0x108 | ||
| 40 | #define OMAP4_MON_L2X0_DBG_CTRL_INDEX 0x100 | ||
| 41 | #define OMAP4_MON_L2X0_CTRL_INDEX 0x102 | ||
| 42 | #define OMAP4_MON_L2X0_AUXCTRL_INDEX 0x109 | ||
| 43 | #define OMAP4_MON_L2X0_PREFETCH_INDEX 0x113 | ||
| 44 | |||
| 45 | /* Secure PPA(Primary Protected Application) APIs */ | ||
| 46 | #define OMAP4_PPA_L2_POR_INDEX 0x23 | ||
| 47 | #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX 0x25 | ||
| 48 | |||
| 49 | #ifndef __ASSEMBLER__ | ||
| 50 | |||
| 51 | extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs, | ||
| 52 | u32 arg1, u32 arg2, u32 arg3, u32 arg4); | ||
| 53 | extern u32 omap_smc2(u32 id, u32 falg, u32 pargs); | ||
| 54 | extern phys_addr_t omap_secure_ram_mempool_base(void); | ||
| 55 | |||
| 56 | #endif /* __ASSEMBLER__ */ | ||
| 57 | #endif /* OMAP_ARCH_OMAP_SECURE_H */ | ||
diff --git a/arch/arm/mach-omap2/include/mach/omap-wakeupgen.h b/arch/arm/mach-omap2/include/mach/omap-wakeupgen.h new file mode 100644 index 000000000000..d79321b0f2a2 --- /dev/null +++ b/arch/arm/mach-omap2/include/mach/omap-wakeupgen.h | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | /* | ||
| 2 | * OMAP WakeupGen header file | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
| 5 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | #ifndef OMAP_ARCH_WAKEUPGEN_H | ||
| 12 | #define OMAP_ARCH_WAKEUPGEN_H | ||
| 13 | |||
| 14 | #define OMAP_WKG_CONTROL_0 0x00 | ||
| 15 | #define OMAP_WKG_ENB_A_0 0x10 | ||
| 16 | #define OMAP_WKG_ENB_B_0 0x14 | ||
| 17 | #define OMAP_WKG_ENB_C_0 0x18 | ||
| 18 | #define OMAP_WKG_ENB_D_0 0x1c | ||
| 19 | #define OMAP_WKG_ENB_SECURE_A_0 0x20 | ||
| 20 | #define OMAP_WKG_ENB_SECURE_B_0 0x24 | ||
| 21 | #define OMAP_WKG_ENB_SECURE_C_0 0x28 | ||
| 22 | #define OMAP_WKG_ENB_SECURE_D_0 0x2c | ||
| 23 | #define OMAP_WKG_ENB_A_1 0x410 | ||
| 24 | #define OMAP_WKG_ENB_B_1 0x414 | ||
| 25 | #define OMAP_WKG_ENB_C_1 0x418 | ||
| 26 | #define OMAP_WKG_ENB_D_1 0x41c | ||
| 27 | #define OMAP_WKG_ENB_SECURE_A_1 0x420 | ||
| 28 | #define OMAP_WKG_ENB_SECURE_B_1 0x424 | ||
| 29 | #define OMAP_WKG_ENB_SECURE_C_1 0x428 | ||
| 30 | #define OMAP_WKG_ENB_SECURE_D_1 0x42c | ||
| 31 | #define OMAP_AUX_CORE_BOOT_0 0x800 | ||
| 32 | #define OMAP_AUX_CORE_BOOT_1 0x804 | ||
| 33 | #define OMAP_PTMSYNCREQ_MASK 0xc00 | ||
| 34 | #define OMAP_PTMSYNCREQ_EN 0xc04 | ||
| 35 | #define OMAP_TIMESTAMPCYCLELO 0xc08 | ||
| 36 | #define OMAP_TIMESTAMPCYCLEHI 0xc0c | ||
| 37 | |||
| 38 | extern int __init omap_wakeupgen_init(void); | ||
| 39 | #endif | ||
diff --git a/arch/arm/mach-omap2/include/mach/omap4-common.h b/arch/arm/mach-omap2/include/mach/omap4-common.h deleted file mode 100644 index e4bd87619734..000000000000 --- a/arch/arm/mach-omap2/include/mach/omap4-common.h +++ /dev/null | |||
| @@ -1,43 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * omap4-common.h: OMAP4 specific common header file | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Texas Instruments, Inc. | ||
| 5 | * | ||
| 6 | * Author: | ||
| 7 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | */ | ||
| 13 | #ifndef OMAP_ARCH_OMAP4_COMMON_H | ||
| 14 | #define OMAP_ARCH_OMAP4_COMMON_H | ||
| 15 | |||
| 16 | /* | ||
| 17 | * wfi used in low power code. Directly opcode is used instead | ||
| 18 | * of instruction to avoid mulit-omap build break | ||
| 19 | */ | ||
| 20 | #ifdef CONFIG_THUMB2_KERNEL | ||
| 21 | #define do_wfi() __asm__ __volatile__ ("wfi" : : : "memory") | ||
| 22 | #else | ||
| 23 | #define do_wfi() \ | ||
| 24 | __asm__ __volatile__ (".word 0xe320f003" : : : "memory") | ||
| 25 | #endif | ||
| 26 | |||
| 27 | #ifdef CONFIG_CACHE_L2X0 | ||
| 28 | extern void __iomem *l2cache_base; | ||
| 29 | #endif | ||
| 30 | |||
| 31 | extern void __iomem *gic_dist_base_addr; | ||
| 32 | |||
| 33 | extern void __init gic_init_irq(void); | ||
| 34 | extern void omap_smc1(u32 fn, u32 arg); | ||
| 35 | |||
| 36 | #ifdef CONFIG_SMP | ||
| 37 | /* Needed for secondary core boot */ | ||
| 38 | extern void omap_secondary_startup(void); | ||
| 39 | extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask); | ||
| 40 | extern void omap_auxcoreboot_addr(u32 cpu_addr); | ||
| 41 | extern u32 omap_read_auxcoreboot0(void); | ||
| 42 | #endif | ||
| 43 | #endif | ||
diff --git a/arch/arm/mach-omap2/include/mach/vmalloc.h b/arch/arm/mach-omap2/include/mach/vmalloc.h deleted file mode 100644 index 866319947760..000000000000 --- a/arch/arm/mach-omap2/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/plat-omap/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2000 Russell King. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | #define VMALLOC_END 0xf8000000UL | ||
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 25d20ced03e1..65843390e7f0 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #include "clock3xxx.h" | 35 | #include "clock3xxx.h" |
| 36 | #include "clock44xx.h" | 36 | #include "clock44xx.h" |
| 37 | 37 | ||
| 38 | #include <plat/common.h> | 38 | #include "common.h" |
| 39 | #include <plat/omap-pm.h> | 39 | #include <plat/omap-pm.h> |
| 40 | #include "voltage.h" | 40 | #include "voltage.h" |
| 41 | #include "powerdomain.h" | 41 | #include "powerdomain.h" |
| @@ -43,7 +43,7 @@ | |||
| 43 | #include "clockdomain.h" | 43 | #include "clockdomain.h" |
| 44 | #include <plat/omap_hwmod.h> | 44 | #include <plat/omap_hwmod.h> |
| 45 | #include <plat/multi.h> | 45 | #include <plat/multi.h> |
| 46 | #include <plat/common.h> | 46 | #include "common.h" |
| 47 | 47 | ||
| 48 | /* | 48 | /* |
| 49 | * The machine specific code may provide the extra mapping besides the | 49 | * The machine specific code may provide the extra mapping besides the |
| @@ -237,6 +237,15 @@ static struct map_desc omap44xx_io_desc[] __initdata = { | |||
| 237 | .length = L4_EMU_44XX_SIZE, | 237 | .length = L4_EMU_44XX_SIZE, |
| 238 | .type = MT_DEVICE, | 238 | .type = MT_DEVICE, |
| 239 | }, | 239 | }, |
| 240 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
| 241 | { | ||
| 242 | .virtual = OMAP4_SRAM_VA, | ||
| 243 | .pfn = __phys_to_pfn(OMAP4_SRAM_PA), | ||
| 244 | .length = PAGE_SIZE, | ||
| 245 | .type = MT_MEMORY_SO, | ||
| 246 | }, | ||
| 247 | #endif | ||
| 248 | |||
| 240 | }; | 249 | }; |
| 241 | #endif | 250 | #endif |
| 242 | 251 | ||
| @@ -316,13 +325,9 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data) | |||
| 316 | return omap_hwmod_set_postsetup_state(oh, *(u8 *)data); | 325 | return omap_hwmod_set_postsetup_state(oh, *(u8 *)data); |
| 317 | } | 326 | } |
| 318 | 327 | ||
| 319 | /* See irq.c, omap4-common.c and entry-macro.S */ | ||
| 320 | void __iomem *omap_irq_base; | ||
| 321 | |||
| 322 | static void __init omap_common_init_early(void) | 328 | static void __init omap_common_init_early(void) |
| 323 | { | 329 | { |
| 324 | omap2_check_revision(); | 330 | omap2_check_revision(); |
| 325 | omap_ioremap_init(); | ||
| 326 | omap_init_consistent_dma_size(); | 331 | omap_init_consistent_dma_size(); |
| 327 | } | 332 | } |
| 328 | 333 | ||
diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c index 65f1be6a182c..42b1d6591912 100644 --- a/arch/arm/mach-omap2/irq.c +++ b/arch/arm/mach-omap2/irq.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
| 18 | #include <asm/exception.h> | ||
| 18 | #include <asm/mach/irq.h> | 19 | #include <asm/mach/irq.h> |
| 19 | 20 | ||
| 20 | 21 | ||
| @@ -35,6 +36,11 @@ | |||
| 35 | /* Number of IRQ state bits in each MIR register */ | 36 | /* Number of IRQ state bits in each MIR register */ |
| 36 | #define IRQ_BITS_PER_REG 32 | 37 | #define IRQ_BITS_PER_REG 32 |
| 37 | 38 | ||
| 39 | #define OMAP2_IRQ_BASE OMAP2_L4_IO_ADDRESS(OMAP24XX_IC_BASE) | ||
| 40 | #define OMAP3_IRQ_BASE OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE) | ||
| 41 | #define INTCPS_SIR_IRQ_OFFSET 0x0040 /* omap2/3 active interrupt offset */ | ||
| 42 | #define ACTIVEIRQ_MASK 0x7f /* omap2/3 active interrupt bits */ | ||
| 43 | |||
| 38 | /* | 44 | /* |
| 39 | * OMAP2 has a number of different interrupt controllers, each interrupt | 45 | * OMAP2 has a number of different interrupt controllers, each interrupt |
| 40 | * controller is identified as its own "bank". Register definitions are | 46 | * controller is identified as its own "bank". Register definitions are |
| @@ -143,6 +149,7 @@ omap_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num) | |||
| 143 | 149 | ||
| 144 | static void __init omap_init_irq(u32 base, int nr_irqs) | 150 | static void __init omap_init_irq(u32 base, int nr_irqs) |
| 145 | { | 151 | { |
| 152 | void __iomem *omap_irq_base; | ||
| 146 | unsigned long nr_of_irqs = 0; | 153 | unsigned long nr_of_irqs = 0; |
| 147 | unsigned int nr_banks = 0; | 154 | unsigned int nr_banks = 0; |
| 148 | int i, j; | 155 | int i, j; |
| @@ -191,6 +198,44 @@ void __init ti816x_init_irq(void) | |||
| 191 | omap_init_irq(OMAP34XX_IC_BASE, 128); | 198 | omap_init_irq(OMAP34XX_IC_BASE, 128); |
| 192 | } | 199 | } |
| 193 | 200 | ||
| 201 | static inline void omap_intc_handle_irq(void __iomem *base_addr, struct pt_regs *regs) | ||
| 202 | { | ||
| 203 | u32 irqnr; | ||
| 204 | |||
| 205 | do { | ||
| 206 | irqnr = readl_relaxed(base_addr + 0x98); | ||
| 207 | if (irqnr) | ||
| 208 | goto out; | ||
| 209 | |||
| 210 | irqnr = readl_relaxed(base_addr + 0xb8); | ||
| 211 | if (irqnr) | ||
| 212 | goto out; | ||
| 213 | |||
| 214 | irqnr = readl_relaxed(base_addr + 0xd8); | ||
| 215 | #ifdef CONFIG_SOC_OMAPTI816X | ||
| 216 | if (irqnr) | ||
| 217 | goto out; | ||
| 218 | irqnr = readl_relaxed(base_addr + 0xf8); | ||
| 219 | #endif | ||
| 220 | |||
| 221 | out: | ||
| 222 | if (!irqnr) | ||
| 223 | break; | ||
| 224 | |||
| 225 | irqnr = readl_relaxed(base_addr + INTCPS_SIR_IRQ_OFFSET); | ||
| 226 | irqnr &= ACTIVEIRQ_MASK; | ||
| 227 | |||
| 228 | if (irqnr) | ||
| 229 | handle_IRQ(irqnr, regs); | ||
| 230 | } while (irqnr); | ||
| 231 | } | ||
| 232 | |||
| 233 | asmlinkage void __exception_irq_entry omap2_intc_handle_irq(struct pt_regs *regs) | ||
| 234 | { | ||
| 235 | void __iomem *base_addr = OMAP2_IRQ_BASE; | ||
| 236 | omap_intc_handle_irq(base_addr, regs); | ||
| 237 | } | ||
| 238 | |||
| 194 | #ifdef CONFIG_ARCH_OMAP3 | 239 | #ifdef CONFIG_ARCH_OMAP3 |
| 195 | static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)]; | 240 | static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)]; |
| 196 | 241 | ||
| @@ -263,4 +308,10 @@ void omap3_intc_resume_idle(void) | |||
| 263 | /* Re-enable autoidle */ | 308 | /* Re-enable autoidle */ |
| 264 | intc_bank_write_reg(1, &irq_banks[0], INTC_SYSCONFIG); | 309 | intc_bank_write_reg(1, &irq_banks[0], INTC_SYSCONFIG); |
| 265 | } | 310 | } |
| 311 | |||
| 312 | asmlinkage void __exception_irq_entry omap3_intc_handle_irq(struct pt_regs *regs) | ||
| 313 | { | ||
| 314 | void __iomem *base_addr = OMAP3_IRQ_BASE; | ||
| 315 | omap_intc_handle_irq(base_addr, regs); | ||
| 316 | } | ||
| 266 | #endif /* CONFIG_ARCH_OMAP3 */ | 317 | #endif /* CONFIG_ARCH_OMAP3 */ |
diff --git a/arch/arm/mach-omap2/omap-headsmp.S b/arch/arm/mach-omap2/omap-headsmp.S index 4ee6aeca885a..b13ef7ef5ef4 100644 --- a/arch/arm/mach-omap2/omap-headsmp.S +++ b/arch/arm/mach-omap2/omap-headsmp.S | |||
| @@ -18,11 +18,6 @@ | |||
| 18 | #include <linux/linkage.h> | 18 | #include <linux/linkage.h> |
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | 20 | ||
| 21 | /* Physical address needed since MMU not enabled yet on secondary core */ | ||
| 22 | #define OMAP4_AUX_CORE_BOOT1_PA 0x48281804 | ||
| 23 | |||
| 24 | __INIT | ||
| 25 | |||
| 26 | /* | 21 | /* |
| 27 | * OMAP4 specific entry point for secondary CPU to jump from ROM | 22 | * OMAP4 specific entry point for secondary CPU to jump from ROM |
| 28 | * code. This routine also provides a holding flag into which | 23 | * code. This routine also provides a holding flag into which |
diff --git a/arch/arm/mach-omap2/omap-hotplug.c b/arch/arm/mach-omap2/omap-hotplug.c index 4976b9393e49..adbe4d8c7caf 100644 --- a/arch/arm/mach-omap2/omap-hotplug.c +++ b/arch/arm/mach-omap2/omap-hotplug.c | |||
| @@ -19,7 +19,10 @@ | |||
| 19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
| 20 | 20 | ||
| 21 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
| 22 | #include <mach/omap4-common.h> | 22 | |
| 23 | #include "common.h" | ||
| 24 | |||
| 25 | #include "powerdomain.h" | ||
| 23 | 26 | ||
| 24 | int platform_cpu_kill(unsigned int cpu) | 27 | int platform_cpu_kill(unsigned int cpu) |
| 25 | { | 28 | { |
| @@ -32,6 +35,8 @@ int platform_cpu_kill(unsigned int cpu) | |||
| 32 | */ | 35 | */ |
| 33 | void platform_cpu_die(unsigned int cpu) | 36 | void platform_cpu_die(unsigned int cpu) |
| 34 | { | 37 | { |
| 38 | unsigned int this_cpu; | ||
| 39 | |||
| 35 | flush_cache_all(); | 40 | flush_cache_all(); |
| 36 | dsb(); | 41 | dsb(); |
| 37 | 42 | ||
| @@ -39,15 +44,15 @@ void platform_cpu_die(unsigned int cpu) | |||
| 39 | * we're ready for shutdown now, so do it | 44 | * we're ready for shutdown now, so do it |
| 40 | */ | 45 | */ |
| 41 | if (omap_modify_auxcoreboot0(0x0, 0x200) != 0x0) | 46 | if (omap_modify_auxcoreboot0(0x0, 0x200) != 0x0) |
| 42 | printk(KERN_CRIT "Secure clear status failed\n"); | 47 | pr_err("Secure clear status failed\n"); |
| 43 | 48 | ||
| 44 | for (;;) { | 49 | for (;;) { |
| 45 | /* | 50 | /* |
| 46 | * Execute WFI | 51 | * Enter into low power state |
| 47 | */ | 52 | */ |
| 48 | do_wfi(); | 53 | omap4_hotplug_cpu(cpu, PWRDM_POWER_OFF); |
| 49 | 54 | this_cpu = smp_processor_id(); | |
| 50 | if (omap_read_auxcoreboot0() == cpu) { | 55 | if (omap_read_auxcoreboot0() == this_cpu) { |
| 51 | /* | 56 | /* |
| 52 | * OK, proper wakeup, we're done | 57 | * OK, proper wakeup, we're done |
| 53 | */ | 58 | */ |
diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c new file mode 100644 index 000000000000..1d5d01056558 --- /dev/null +++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c | |||
| @@ -0,0 +1,398 @@ | |||
| 1 | /* | ||
| 2 | * OMAP MPUSS low power code | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
| 5 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * | ||
| 7 | * OMAP4430 MPUSS mainly consists of dual Cortex-A9 with per-CPU | ||
| 8 | * Local timer and Watchdog, GIC, SCU, PL310 L2 cache controller, | ||
| 9 | * CPU0 and CPU1 LPRM modules. | ||
| 10 | * CPU0, CPU1 and MPUSS each have there own power domain and | ||
| 11 | * hence multiple low power combinations of MPUSS are possible. | ||
| 12 | * | ||
| 13 | * The CPU0 and CPU1 can't support Closed switch Retention (CSWR) | ||
| 14 | * because the mode is not supported by hw constraints of dormant | ||
| 15 | * mode. While waking up from the dormant mode, a reset signal | ||
| 16 | * to the Cortex-A9 processor must be asserted by the external | ||
| 17 | * power controller. | ||
| 18 | * | ||
| 19 | * With architectural inputs and hardware recommendations, only | ||
| 20 | * below modes are supported from power gain vs latency point of view. | ||
| 21 | * | ||
| 22 | * CPU0 CPU1 MPUSS | ||
| 23 | * ---------------------------------------------- | ||
| 24 | * ON ON ON | ||
| 25 | * ON(Inactive) OFF ON(Inactive) | ||
| 26 | * OFF OFF CSWR | ||
| 27 | * OFF OFF OSWR | ||
| 28 | * OFF OFF OFF(Device OFF *TBD) | ||
| 29 | * ---------------------------------------------- | ||
| 30 | * | ||
| 31 | * Note: CPU0 is the master core and it is the last CPU to go down | ||
| 32 | * and first to wake-up when MPUSS low power states are excercised | ||
| 33 | * | ||
| 34 | * | ||
| 35 | * This program is free software; you can redistribute it and/or modify | ||
| 36 | * it under the terms of the GNU General Public License version 2 as | ||
| 37 | * published by the Free Software Foundation. | ||
| 38 | */ | ||
| 39 | |||
| 40 | #include <linux/kernel.h> | ||
| 41 | #include <linux/io.h> | ||
| 42 | #include <linux/errno.h> | ||
| 43 | #include <linux/linkage.h> | ||
| 44 | #include <linux/smp.h> | ||
| 45 | |||
| 46 | #include <asm/cacheflush.h> | ||
| 47 | #include <asm/tlbflush.h> | ||
| 48 | #include <asm/smp_scu.h> | ||
| 49 | #include <asm/system.h> | ||
| 50 | #include <asm/pgalloc.h> | ||
| 51 | #include <asm/suspend.h> | ||
| 52 | #include <asm/hardware/cache-l2x0.h> | ||
| 53 | |||
| 54 | #include <plat/omap44xx.h> | ||
| 55 | |||
| 56 | #include "common.h" | ||
| 57 | #include "omap4-sar-layout.h" | ||
| 58 | #include "pm.h" | ||
| 59 | #include "prcm_mpu44xx.h" | ||
| 60 | #include "prminst44xx.h" | ||
| 61 | #include "prcm44xx.h" | ||
| 62 | #include "prm44xx.h" | ||
| 63 | #include "prm-regbits-44xx.h" | ||
| 64 | |||
| 65 | #ifdef CONFIG_SMP | ||
| 66 | |||
| 67 | struct omap4_cpu_pm_info { | ||
| 68 | struct powerdomain *pwrdm; | ||
| 69 | void __iomem *scu_sar_addr; | ||
| 70 | void __iomem *wkup_sar_addr; | ||
| 71 | void __iomem *l2x0_sar_addr; | ||
| 72 | }; | ||
| 73 | |||
| 74 | static DEFINE_PER_CPU(struct omap4_cpu_pm_info, omap4_pm_info); | ||
| 75 | static struct powerdomain *mpuss_pd; | ||
| 76 | static void __iomem *sar_base; | ||
| 77 | |||
| 78 | /* | ||
| 79 | * Program the wakeup routine address for the CPU0 and CPU1 | ||
| 80 | * used for OFF or DORMANT wakeup. | ||
| 81 | */ | ||
| 82 | static inline void set_cpu_wakeup_addr(unsigned int cpu_id, u32 addr) | ||
| 83 | { | ||
| 84 | struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu_id); | ||
| 85 | |||
| 86 | __raw_writel(addr, pm_info->wkup_sar_addr); | ||
| 87 | } | ||
| 88 | |||
| 89 | /* | ||
| 90 | * Set the CPUx powerdomain's previous power state | ||
| 91 | */ | ||
| 92 | static inline void set_cpu_next_pwrst(unsigned int cpu_id, | ||
| 93 | unsigned int power_state) | ||
| 94 | { | ||
| 95 | struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu_id); | ||
| 96 | |||
| 97 | pwrdm_set_next_pwrst(pm_info->pwrdm, power_state); | ||
| 98 | } | ||
| 99 | |||
| 100 | /* | ||
| 101 | * Read CPU's previous power state | ||
| 102 | */ | ||
| 103 | static inline unsigned int read_cpu_prev_pwrst(unsigned int cpu_id) | ||
| 104 | { | ||
| 105 | struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu_id); | ||
| 106 | |||
| 107 | return pwrdm_read_prev_pwrst(pm_info->pwrdm); | ||
| 108 | } | ||
| 109 | |||
| 110 | /* | ||
| 111 | * Clear the CPUx powerdomain's previous power state | ||
| 112 | */ | ||
| 113 | static inline void clear_cpu_prev_pwrst(unsigned int cpu_id) | ||
| 114 | { | ||
| 115 | struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu_id); | ||
| 116 | |||
| 117 | pwrdm_clear_all_prev_pwrst(pm_info->pwrdm); | ||
| 118 | } | ||
| 119 | |||
| 120 | /* | ||
| 121 | * Store the SCU power status value to scratchpad memory | ||
| 122 | */ | ||
| 123 | static void scu_pwrst_prepare(unsigned int cpu_id, unsigned int cpu_state) | ||
| 124 | { | ||
| 125 | struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu_id); | ||
| 126 | u32 scu_pwr_st; | ||
| 127 | |||
| 128 | switch (cpu_state) { | ||
| 129 | case PWRDM_POWER_RET: | ||
| 130 | scu_pwr_st = SCU_PM_DORMANT; | ||
| 131 | break; | ||
| 132 | case PWRDM_POWER_OFF: | ||
| 133 | scu_pwr_st = SCU_PM_POWEROFF; | ||
| 134 | break; | ||
| 135 | case PWRDM_POWER_ON: | ||
| 136 | case PWRDM_POWER_INACTIVE: | ||
| 137 | default: | ||
| 138 | scu_pwr_st = SCU_PM_NORMAL; | ||
| 139 | break; | ||
| 140 | } | ||
| 141 | |||
| 142 | __raw_writel(scu_pwr_st, pm_info->scu_sar_addr); | ||
| 143 | } | ||
| 144 | |||
| 145 | /* Helper functions for MPUSS OSWR */ | ||
| 146 | static inline void mpuss_clear_prev_logic_pwrst(void) | ||
| 147 | { | ||
| 148 | u32 reg; | ||
| 149 | |||
| 150 | reg = omap4_prminst_read_inst_reg(OMAP4430_PRM_PARTITION, | ||
| 151 | OMAP4430_PRM_MPU_INST, OMAP4_RM_MPU_MPU_CONTEXT_OFFSET); | ||
| 152 | omap4_prminst_write_inst_reg(reg, OMAP4430_PRM_PARTITION, | ||
| 153 | OMAP4430_PRM_MPU_INST, OMAP4_RM_MPU_MPU_CONTEXT_OFFSET); | ||
| 154 | } | ||
| 155 | |||
| 156 | static inline void cpu_clear_prev_logic_pwrst(unsigned int cpu_id) | ||
| 157 | { | ||
| 158 | u32 reg; | ||
| 159 | |||
| 160 | if (cpu_id) { | ||
| 161 | reg = omap4_prcm_mpu_read_inst_reg(OMAP4430_PRCM_MPU_CPU1_INST, | ||
| 162 | OMAP4_RM_CPU1_CPU1_CONTEXT_OFFSET); | ||
| 163 | omap4_prcm_mpu_write_inst_reg(reg, OMAP4430_PRCM_MPU_CPU1_INST, | ||
| 164 | OMAP4_RM_CPU1_CPU1_CONTEXT_OFFSET); | ||
| 165 | } else { | ||
| 166 | reg = omap4_prcm_mpu_read_inst_reg(OMAP4430_PRCM_MPU_CPU0_INST, | ||
| 167 | OMAP4_RM_CPU0_CPU0_CONTEXT_OFFSET); | ||
| 168 | omap4_prcm_mpu_write_inst_reg(reg, OMAP4430_PRCM_MPU_CPU0_INST, | ||
| 169 | OMAP4_RM_CPU0_CPU0_CONTEXT_OFFSET); | ||
| 170 | } | ||
| 171 | } | ||
| 172 | |||
| 173 | /** | ||
| 174 | * omap4_mpuss_read_prev_context_state: | ||
| 175 | * Function returns the MPUSS previous context state | ||
| 176 | */ | ||
| 177 | u32 omap4_mpuss_read_prev_context_state(void) | ||
| 178 | { | ||
| 179 | u32 reg; | ||
| 180 | |||
| 181 | reg = omap4_prminst_read_inst_reg(OMAP4430_PRM_PARTITION, | ||
| 182 | OMAP4430_PRM_MPU_INST, OMAP4_RM_MPU_MPU_CONTEXT_OFFSET); | ||
| 183 | reg &= OMAP4430_LOSTCONTEXT_DFF_MASK; | ||
| 184 | return reg; | ||
| 185 | } | ||
| 186 | |||
| 187 | /* | ||
| 188 | * Store the CPU cluster state for L2X0 low power operations. | ||
| 189 | */ | ||
| 190 | static void l2x0_pwrst_prepare(unsigned int cpu_id, unsigned int save_state) | ||
| 191 | { | ||
| 192 | struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu_id); | ||
| 193 | |||
| 194 | __raw_writel(save_state, pm_info->l2x0_sar_addr); | ||
| 195 | } | ||
| 196 | |||
| 197 | /* | ||
| 198 | * Save the L2X0 AUXCTRL and POR value to SAR memory. Its used to | ||
| 199 | * in every restore MPUSS OFF path. | ||
| 200 | */ | ||
| 201 | #ifdef CONFIG_CACHE_L2X0 | ||
| 202 | static void save_l2x0_context(void) | ||
| 203 | { | ||
| 204 | u32 val; | ||
| 205 | void __iomem *l2x0_base = omap4_get_l2cache_base(); | ||
| 206 | |||
| 207 | val = __raw_readl(l2x0_base + L2X0_AUX_CTRL); | ||
| 208 | __raw_writel(val, sar_base + L2X0_AUXCTRL_OFFSET); | ||
| 209 | val = __raw_readl(l2x0_base + L2X0_PREFETCH_CTRL); | ||
| 210 | __raw_writel(val, sar_base + L2X0_PREFETCH_CTRL_OFFSET); | ||
| 211 | } | ||
| 212 | #else | ||
| 213 | static void save_l2x0_context(void) | ||
| 214 | {} | ||
| 215 | #endif | ||
| 216 | |||
| 217 | /** | ||
| 218 | * omap4_enter_lowpower: OMAP4 MPUSS Low Power Entry Function | ||
| 219 | * The purpose of this function is to manage low power programming | ||
| 220 | * of OMAP4 MPUSS subsystem | ||
| 221 | * @cpu : CPU ID | ||
| 222 | * @power_state: Low power state. | ||
| 223 | * | ||
| 224 | * MPUSS states for the context save: | ||
| 225 | * save_state = | ||
| 226 | * 0 - Nothing lost and no need to save: MPUSS INACTIVE | ||
| 227 | * 1 - CPUx L1 and logic lost: MPUSS CSWR | ||
| 228 | * 2 - CPUx L1 and logic lost + GIC lost: MPUSS OSWR | ||
| 229 | * 3 - CPUx L1 and logic lost + GIC + L2 lost: DEVICE OFF | ||
| 230 | */ | ||
| 231 | int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state) | ||
| 232 | { | ||
| 233 | unsigned int save_state = 0; | ||
| 234 | unsigned int wakeup_cpu; | ||
| 235 | |||
| 236 | if (omap_rev() == OMAP4430_REV_ES1_0) | ||
| 237 | return -ENXIO; | ||
| 238 | |||
| 239 | switch (power_state) { | ||
| 240 | case PWRDM_POWER_ON: | ||
| 241 | case PWRDM_POWER_INACTIVE: | ||
| 242 | save_state = 0; | ||
| 243 | break; | ||
| 244 | case PWRDM_POWER_OFF: | ||
| 245 | save_state = 1; | ||
| 246 | break; | ||
| 247 | case PWRDM_POWER_RET: | ||
| 248 | default: | ||
| 249 | /* | ||
| 250 | * CPUx CSWR is invalid hardware state. Also CPUx OSWR | ||
| 251 | * doesn't make much scense, since logic is lost and $L1 | ||
| 252 | * needs to be cleaned because of coherency. This makes | ||
| 253 | * CPUx OSWR equivalent to CPUX OFF and hence not supported | ||
| 254 | */ | ||
| 255 | WARN_ON(1); | ||
| 256 | return -ENXIO; | ||
| 257 | } | ||
| 258 | |||
| 259 | pwrdm_pre_transition(); | ||
| 260 | |||
| 261 | /* | ||
| 262 | * Check MPUSS next state and save interrupt controller if needed. | ||
| 263 | * In MPUSS OSWR or device OFF, interrupt controller contest is lost. | ||
| 264 | */ | ||
| 265 | mpuss_clear_prev_logic_pwrst(); | ||
| 266 | pwrdm_clear_all_prev_pwrst(mpuss_pd); | ||
| 267 | if ((pwrdm_read_next_pwrst(mpuss_pd) == PWRDM_POWER_RET) && | ||
| 268 | (pwrdm_read_logic_retst(mpuss_pd) == PWRDM_POWER_OFF)) | ||
| 269 | save_state = 2; | ||
| 270 | |||
| 271 | clear_cpu_prev_pwrst(cpu); | ||
| 272 | cpu_clear_prev_logic_pwrst(cpu); | ||
| 273 | set_cpu_next_pwrst(cpu, power_state); | ||
| 274 | set_cpu_wakeup_addr(cpu, virt_to_phys(omap4_cpu_resume)); | ||
| 275 | scu_pwrst_prepare(cpu, power_state); | ||
| 276 | l2x0_pwrst_prepare(cpu, save_state); | ||
| 277 | |||
| 278 | /* | ||
| 279 | * Call low level function with targeted low power state. | ||
| 280 | */ | ||
| 281 | cpu_suspend(save_state, omap4_finish_suspend); | ||
| 282 | |||
| 283 | /* | ||
| 284 | * Restore the CPUx power state to ON otherwise CPUx | ||
| 285 | * power domain can transitions to programmed low power | ||
| 286 | * state while doing WFI outside the low powe code. On | ||
| 287 | * secure devices, CPUx does WFI which can result in | ||
| 288 | * domain transition | ||
| 289 | */ | ||
| 290 | wakeup_cpu = smp_processor_id(); | ||
| 291 | set_cpu_next_pwrst(wakeup_cpu, PWRDM_POWER_ON); | ||
| 292 | |||
| 293 | pwrdm_post_transition(); | ||
| 294 | |||
| 295 | return 0; | ||
| 296 | } | ||
| 297 | |||
| 298 | /** | ||
| 299 | * omap4_hotplug_cpu: OMAP4 CPU hotplug entry | ||
| 300 | * @cpu : CPU ID | ||
| 301 | * @power_state: CPU low power state. | ||
| 302 | */ | ||
| 303 | int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) | ||
| 304 | { | ||
| 305 | unsigned int cpu_state = 0; | ||
| 306 | |||
| 307 | if (omap_rev() == OMAP4430_REV_ES1_0) | ||
| 308 | return -ENXIO; | ||
| 309 | |||
| 310 | if (power_state == PWRDM_POWER_OFF) | ||
| 311 | cpu_state = 1; | ||
| 312 | |||
| 313 | clear_cpu_prev_pwrst(cpu); | ||
| 314 | set_cpu_next_pwrst(cpu, power_state); | ||
| 315 | set_cpu_wakeup_addr(cpu, virt_to_phys(omap_secondary_startup)); | ||
| 316 | scu_pwrst_prepare(cpu, power_state); | ||
| 317 | |||
| 318 | /* | ||
| 319 | * CPU never retuns back if targetted power state is OFF mode. | ||
| 320 | * CPU ONLINE follows normal CPU ONLINE ptah via | ||
| 321 | * omap_secondary_startup(). | ||
| 322 | */ | ||
| 323 | omap4_finish_suspend(cpu_state); | ||
| 324 | |||
| 325 | set_cpu_next_pwrst(cpu, PWRDM_POWER_ON); | ||
| 326 | return 0; | ||
| 327 | } | ||
| 328 | |||
| 329 | |||
| 330 | /* | ||
| 331 | * Initialise OMAP4 MPUSS | ||
| 332 | */ | ||
| 333 | int __init omap4_mpuss_init(void) | ||
| 334 | { | ||
| 335 | struct omap4_cpu_pm_info *pm_info; | ||
| 336 | |||
| 337 | if (omap_rev() == OMAP4430_REV_ES1_0) { | ||
| 338 | WARN(1, "Power Management not supported on OMAP4430 ES1.0\n"); | ||
| 339 | return -ENODEV; | ||
| 340 | } | ||
| 341 | |||
| 342 | sar_base = omap4_get_sar_ram_base(); | ||
| 343 | |||
| 344 | /* Initilaise per CPU PM information */ | ||
| 345 | pm_info = &per_cpu(omap4_pm_info, 0x0); | ||
| 346 | pm_info->scu_sar_addr = sar_base + SCU_OFFSET0; | ||
| 347 | pm_info->wkup_sar_addr = sar_base + CPU0_WAKEUP_NS_PA_ADDR_OFFSET; | ||
| 348 | pm_info->l2x0_sar_addr = sar_base + L2X0_SAVE_OFFSET0; | ||
| 349 | pm_info->pwrdm = pwrdm_lookup("cpu0_pwrdm"); | ||
| 350 | if (!pm_info->pwrdm) { | ||
| 351 | pr_err("Lookup failed for CPU0 pwrdm\n"); | ||
| 352 | return -ENODEV; | ||
| 353 | } | ||
| 354 | |||
| 355 | /* Clear CPU previous power domain state */ | ||
| 356 | pwrdm_clear_all_prev_pwrst(pm_info->pwrdm); | ||
| 357 | cpu_clear_prev_logic_pwrst(0); | ||
| 358 | |||
| 359 | /* Initialise CPU0 power domain state to ON */ | ||
| 360 | pwrdm_set_next_pwrst(pm_info->pwrdm, PWRDM_POWER_ON); | ||
| 361 | |||
| 362 | pm_info = &per_cpu(omap4_pm_info, 0x1); | ||
| 363 | pm_info->scu_sar_addr = sar_base + SCU_OFFSET1; | ||
| 364 | pm_info->wkup_sar_addr = sar_base + CPU1_WAKEUP_NS_PA_ADDR_OFFSET; | ||
| 365 | pm_info->l2x0_sar_addr = sar_base + L2X0_SAVE_OFFSET1; | ||
| 366 | pm_info->pwrdm = pwrdm_lookup("cpu1_pwrdm"); | ||
| 367 | if (!pm_info->pwrdm) { | ||
| 368 | pr_err("Lookup failed for CPU1 pwrdm\n"); | ||
| 369 | return -ENODEV; | ||
| 370 | } | ||
| 371 | |||
| 372 | /* Clear CPU previous power domain state */ | ||
| 373 | pwrdm_clear_all_prev_pwrst(pm_info->pwrdm); | ||
| 374 | cpu_clear_prev_logic_pwrst(1); | ||
| 375 | |||
| 376 | /* Initialise CPU1 power domain state to ON */ | ||
| 377 | pwrdm_set_next_pwrst(pm_info->pwrdm, PWRDM_POWER_ON); | ||
| 378 | |||
| 379 | mpuss_pd = pwrdm_lookup("mpu_pwrdm"); | ||
| 380 | if (!mpuss_pd) { | ||
| 381 | pr_err("Failed to lookup MPUSS power domain\n"); | ||
| 382 | return -ENODEV; | ||
| 383 | } | ||
| 384 | pwrdm_clear_all_prev_pwrst(mpuss_pd); | ||
| 385 | mpuss_clear_prev_logic_pwrst(); | ||
| 386 | |||
| 387 | /* Save device type on scratchpad for low level code to use */ | ||
| 388 | if (omap_type() != OMAP2_DEVICE_TYPE_GP) | ||
| 389 | __raw_writel(1, sar_base + OMAP_TYPE_OFFSET); | ||
| 390 | else | ||
| 391 | __raw_writel(0, sar_base + OMAP_TYPE_OFFSET); | ||
| 392 | |||
| 393 | save_l2x0_context(); | ||
| 394 | |||
| 395 | return 0; | ||
| 396 | } | ||
| 397 | |||
| 398 | #endif | ||
diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c new file mode 100644 index 000000000000..69f3c72d959b --- /dev/null +++ b/arch/arm/mach-omap2/omap-secure.c | |||
| @@ -0,0 +1,81 @@ | |||
| 1 | /* | ||
| 2 | * OMAP Secure API infrastructure. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
| 5 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * | ||
| 7 | * | ||
| 8 | * This program is free software,you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/kernel.h> | ||
| 14 | #include <linux/init.h> | ||
| 15 | #include <linux/io.h> | ||
| 16 | #include <linux/memblock.h> | ||
| 17 | |||
| 18 | #include <asm/cacheflush.h> | ||
| 19 | |||
| 20 | #include <mach/omap-secure.h> | ||
| 21 | |||
| 22 | static phys_addr_t omap_secure_memblock_base; | ||
| 23 | |||
| 24 | /** | ||
| 25 | * omap_sec_dispatcher: Routine to dispatch low power secure | ||
| 26 | * service routines | ||
| 27 | * @idx: The HAL API index | ||
| 28 | * @flag: The flag indicating criticality of operation | ||
| 29 | * @nargs: Number of valid arguments out of four. | ||
| 30 | * @arg1, arg2, arg3 args4: Parameters passed to secure API | ||
| 31 | * | ||
| 32 | * Return the non-zero error value on failure. | ||
| 33 | */ | ||
| 34 | u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs, u32 arg1, u32 arg2, | ||
| 35 | u32 arg3, u32 arg4) | ||
| 36 | { | ||
| 37 | u32 ret; | ||
| 38 | u32 param[5]; | ||
| 39 | |||
| 40 | param[0] = nargs; | ||
| 41 | param[1] = arg1; | ||
| 42 | param[2] = arg2; | ||
| 43 | param[3] = arg3; | ||
| 44 | param[4] = arg4; | ||
| 45 | |||
| 46 | /* | ||
| 47 | * Secure API needs physical address | ||
| 48 | * pointer for the parameters | ||
| 49 | */ | ||
| 50 | flush_cache_all(); | ||
| 51 | outer_clean_range(__pa(param), __pa(param + 5)); | ||
| 52 | ret = omap_smc2(idx, flag, __pa(param)); | ||
| 53 | |||
| 54 | return ret; | ||
| 55 | } | ||
| 56 | |||
| 57 | /* Allocate the memory to save secure ram */ | ||
| 58 | int __init omap_secure_ram_reserve_memblock(void) | ||
| 59 | { | ||
| 60 | phys_addr_t paddr; | ||
| 61 | u32 size = OMAP_SECURE_RAM_STORAGE; | ||
| 62 | |||
| 63 | size = ALIGN(size, SZ_1M); | ||
| 64 | paddr = memblock_alloc(size, SZ_1M); | ||
| 65 | if (!paddr) { | ||
| 66 | pr_err("%s: failed to reserve %x bytes\n", | ||
| 67 | __func__, size); | ||
| 68 | return -ENOMEM; | ||
| 69 | } | ||
| 70 | memblock_free(paddr, size); | ||
| 71 | memblock_remove(paddr, size); | ||
| 72 | |||
| 73 | omap_secure_memblock_base = paddr; | ||
| 74 | |||
| 75 | return 0; | ||
| 76 | } | ||
| 77 | |||
| 78 | phys_addr_t omap_secure_ram_mempool_base(void) | ||
| 79 | { | ||
| 80 | return omap_secure_memblock_base; | ||
| 81 | } | ||
diff --git a/arch/arm/mach-omap2/omap44xx-smc.S b/arch/arm/mach-omap2/omap-smc.S index e69d37d95204..f6441c13cd8c 100644 --- a/arch/arm/mach-omap2/omap44xx-smc.S +++ b/arch/arm/mach-omap2/omap-smc.S | |||
| @@ -31,6 +31,29 @@ ENTRY(omap_smc1) | |||
| 31 | ldmfd sp!, {r2-r12, pc} | 31 | ldmfd sp!, {r2-r12, pc} |
| 32 | ENDPROC(omap_smc1) | 32 | ENDPROC(omap_smc1) |
| 33 | 33 | ||
| 34 | /** | ||
| 35 | * u32 omap_smc2(u32 id, u32 falg, u32 pargs) | ||
| 36 | * Low level common routine for secure HAL and PPA APIs. | ||
| 37 | * @id: Application ID of HAL APIs | ||
| 38 | * @flag: Flag to indicate the criticality of operation | ||
| 39 | * @pargs: Physical address of parameter list starting | ||
| 40 | * with number of parametrs | ||
| 41 | */ | ||
| 42 | ENTRY(omap_smc2) | ||
| 43 | stmfd sp!, {r4-r12, lr} | ||
| 44 | mov r3, r2 | ||
| 45 | mov r2, r1 | ||
| 46 | mov r1, #0x0 @ Process ID | ||
| 47 | mov r6, #0xff | ||
| 48 | mov r12, #0x00 @ Secure Service ID | ||
| 49 | mov r7, #0 | ||
| 50 | mcr p15, 0, r7, c7, c5, 6 | ||
| 51 | dsb | ||
| 52 | dmb | ||
| 53 | smc #0 | ||
| 54 | ldmfd sp!, {r4-r12, pc} | ||
| 55 | ENDPROC(omap_smc2) | ||
| 56 | |||
| 34 | ENTRY(omap_modify_auxcoreboot0) | 57 | ENTRY(omap_modify_auxcoreboot0) |
| 35 | stmfd sp!, {r1-r12, lr} | 58 | stmfd sp!, {r1-r12, lr} |
| 36 | ldr r12, =0x104 | 59 | ldr r12, =0x104 |
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index 4412ddb7b3f6..c1bf3ef0ba02 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c | |||
| @@ -24,16 +24,37 @@ | |||
| 24 | #include <asm/hardware/gic.h> | 24 | #include <asm/hardware/gic.h> |
| 25 | #include <asm/smp_scu.h> | 25 | #include <asm/smp_scu.h> |
| 26 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
| 27 | #include <mach/omap4-common.h> | 27 | #include <mach/omap-secure.h> |
| 28 | |||
| 29 | #include "common.h" | ||
| 30 | |||
| 31 | #include "clockdomain.h" | ||
| 28 | 32 | ||
| 29 | /* SCU base address */ | 33 | /* SCU base address */ |
| 30 | static void __iomem *scu_base; | 34 | static void __iomem *scu_base; |
| 31 | 35 | ||
| 32 | static DEFINE_SPINLOCK(boot_lock); | 36 | static DEFINE_SPINLOCK(boot_lock); |
| 33 | 37 | ||
| 38 | void __iomem *omap4_get_scu_base(void) | ||
| 39 | { | ||
| 40 | return scu_base; | ||
| 41 | } | ||
| 42 | |||
| 34 | void __cpuinit platform_secondary_init(unsigned int cpu) | 43 | void __cpuinit platform_secondary_init(unsigned int cpu) |
| 35 | { | 44 | { |
| 36 | /* | 45 | /* |
| 46 | * Configure ACTRL and enable NS SMP bit access on CPU1 on HS device. | ||
| 47 | * OMAP44XX EMU/HS devices - CPU0 SMP bit access is enabled in PPA | ||
| 48 | * init and for CPU1, a secure PPA API provided. CPU0 must be ON | ||
| 49 | * while executing NS_SMP API on CPU1 and PPA version must be 1.4.0+. | ||
| 50 | * OMAP443X GP devices- SMP bit isn't accessible. | ||
| 51 | * OMAP446X GP devices - SMP bit access is enabled on both CPUs. | ||
| 52 | */ | ||
| 53 | if (cpu_is_omap443x() && (omap_type() != OMAP2_DEVICE_TYPE_GP)) | ||
| 54 | omap_secure_dispatcher(OMAP4_PPA_CPU_ACTRL_SMP_INDEX, | ||
| 55 | 4, 0, 0, 0, 0, 0); | ||
| 56 | |||
| 57 | /* | ||
| 37 | * If any interrupts are already enabled for the primary | 58 | * If any interrupts are already enabled for the primary |
| 38 | * core (e.g. timer irq), then they will not have been enabled | 59 | * core (e.g. timer irq), then they will not have been enabled |
| 39 | * for us: do so | 60 | * for us: do so |
| @@ -49,6 +70,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu) | |||
| 49 | 70 | ||
| 50 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | 71 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) |
| 51 | { | 72 | { |
| 73 | static struct clockdomain *cpu1_clkdm; | ||
| 74 | static bool booted; | ||
| 52 | /* | 75 | /* |
| 53 | * Set synchronisation state between this boot processor | 76 | * Set synchronisation state between this boot processor |
| 54 | * and the secondary one | 77 | * and the secondary one |
| @@ -64,6 +87,29 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
| 64 | omap_modify_auxcoreboot0(0x200, 0xfffffdff); | 87 | omap_modify_auxcoreboot0(0x200, 0xfffffdff); |
| 65 | flush_cache_all(); | 88 | flush_cache_all(); |
| 66 | smp_wmb(); | 89 | smp_wmb(); |
| 90 | |||
| 91 | if (!cpu1_clkdm) | ||
| 92 | cpu1_clkdm = clkdm_lookup("mpu1_clkdm"); | ||
| 93 | |||
| 94 | /* | ||
| 95 | * The SGI(Software Generated Interrupts) are not wakeup capable | ||
| 96 | * from low power states. This is known limitation on OMAP4 and | ||
| 97 | * needs to be worked around by using software forced clockdomain | ||
| 98 | * wake-up. To wakeup CPU1, CPU0 forces the CPU1 clockdomain to | ||
| 99 | * software force wakeup. The clockdomain is then put back to | ||
| 100 | * hardware supervised mode. | ||
| 101 | * More details can be found in OMAP4430 TRM - Version J | ||
| 102 | * Section : | ||
| 103 | * 4.3.4.2 Power States of CPU0 and CPU1 | ||
| 104 | */ | ||
| 105 | if (booted) { | ||
| 106 | clkdm_wakeup(cpu1_clkdm); | ||
| 107 | clkdm_allow_idle(cpu1_clkdm); | ||
| 108 | } else { | ||
| 109 | dsb_sev(); | ||
| 110 | booted = true; | ||
| 111 | } | ||
| 112 | |||
| 67 | gic_raise_softirq(cpumask_of(cpu), 1); | 113 | gic_raise_softirq(cpumask_of(cpu), 1); |
| 68 | 114 | ||
| 69 | /* | 115 | /* |
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c new file mode 100644 index 000000000000..d3d8971d7f30 --- /dev/null +++ b/arch/arm/mach-omap2/omap-wakeupgen.c | |||
| @@ -0,0 +1,389 @@ | |||
| 1 | /* | ||
| 2 | * OMAP WakeupGen Source file | ||
| 3 | * | ||
| 4 | * OMAP WakeupGen is the interrupt controller extension used along | ||
| 5 | * with ARM GIC to wake the CPU out from low power states on | ||
| 6 | * external interrupts. It is responsible for generating wakeup | ||
| 7 | * event from the incoming interrupts and enable bits. It is | ||
| 8 | * implemented in MPU always ON power domain. During normal operation, | ||
| 9 | * WakeupGen delivers external interrupts directly to the GIC. | ||
| 10 | * | ||
| 11 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
| 12 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License version 2 as | ||
| 16 | * published by the Free Software Foundation. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <linux/kernel.h> | ||
| 20 | #include <linux/init.h> | ||
| 21 | #include <linux/io.h> | ||
| 22 | #include <linux/irq.h> | ||
| 23 | #include <linux/platform_device.h> | ||
| 24 | #include <linux/cpu.h> | ||
| 25 | #include <linux/notifier.h> | ||
| 26 | #include <linux/cpu_pm.h> | ||
| 27 | |||
| 28 | #include <asm/hardware/gic.h> | ||
| 29 | |||
| 30 | #include <mach/omap-wakeupgen.h> | ||
| 31 | #include <mach/omap-secure.h> | ||
| 32 | |||
| 33 | #include "omap4-sar-layout.h" | ||
| 34 | #include "common.h" | ||
| 35 | |||
| 36 | #define NR_REG_BANKS 4 | ||
| 37 | #define MAX_IRQS 128 | ||
| 38 | #define WKG_MASK_ALL 0x00000000 | ||
| 39 | #define WKG_UNMASK_ALL 0xffffffff | ||
| 40 | #define CPU_ENA_OFFSET 0x400 | ||
| 41 | #define CPU0_ID 0x0 | ||
| 42 | #define CPU1_ID 0x1 | ||
| 43 | |||
| 44 | static void __iomem *wakeupgen_base; | ||
| 45 | static void __iomem *sar_base; | ||
| 46 | static DEFINE_PER_CPU(u32 [NR_REG_BANKS], irqmasks); | ||
| 47 | static DEFINE_SPINLOCK(wakeupgen_lock); | ||
| 48 | static unsigned int irq_target_cpu[NR_IRQS]; | ||
| 49 | |||
| 50 | /* | ||
| 51 | * Static helper functions. | ||
| 52 | */ | ||
| 53 | static inline u32 wakeupgen_readl(u8 idx, u32 cpu) | ||
| 54 | { | ||
| 55 | return __raw_readl(wakeupgen_base + OMAP_WKG_ENB_A_0 + | ||
| 56 | (cpu * CPU_ENA_OFFSET) + (idx * 4)); | ||
| 57 | } | ||
| 58 | |||
| 59 | static inline void wakeupgen_writel(u32 val, u8 idx, u32 cpu) | ||
| 60 | { | ||
| 61 | __raw_writel(val, wakeupgen_base + OMAP_WKG_ENB_A_0 + | ||
| 62 | (cpu * CPU_ENA_OFFSET) + (idx * 4)); | ||
| 63 | } | ||
| 64 | |||
| 65 | static inline void sar_writel(u32 val, u32 offset, u8 idx) | ||
| 66 | { | ||
| 67 | __raw_writel(val, sar_base + offset + (idx * 4)); | ||
| 68 | } | ||
| 69 | |||
| 70 | static void _wakeupgen_set_all(unsigned int cpu, unsigned int reg) | ||
| 71 | { | ||
| 72 | u8 i; | ||
| 73 | |||
| 74 | for (i = 0; i < NR_REG_BANKS; i++) | ||
| 75 | wakeupgen_writel(reg, i, cpu); | ||
| 76 | } | ||
| 77 | |||
| 78 | static inline int _wakeupgen_get_irq_info(u32 irq, u32 *bit_posn, u8 *reg_index) | ||
| 79 | { | ||
| 80 | unsigned int spi_irq; | ||
| 81 | |||
| 82 | /* | ||
| 83 | * PPIs and SGIs are not supported. | ||
| 84 | */ | ||
| 85 | if (irq < OMAP44XX_IRQ_GIC_START) | ||
| 86 | return -EINVAL; | ||
| 87 | |||
| 88 | /* | ||
| 89 | * Subtract the GIC offset. | ||
| 90 | */ | ||
| 91 | spi_irq = irq - OMAP44XX_IRQ_GIC_START; | ||
| 92 | if (spi_irq > MAX_IRQS) { | ||
| 93 | pr_err("omap wakeupGen: Invalid IRQ%d\n", irq); | ||
| 94 | return -EINVAL; | ||
| 95 | } | ||
| 96 | |||
| 97 | /* | ||
| 98 | * Each WakeupGen register controls 32 interrupt. | ||
| 99 | * i.e. 1 bit per SPI IRQ | ||
| 100 | */ | ||
| 101 | *reg_index = spi_irq >> 5; | ||
| 102 | *bit_posn = spi_irq %= 32; | ||
| 103 | |||
| 104 | return 0; | ||
| 105 | } | ||
| 106 | |||
| 107 | static void _wakeupgen_clear(unsigned int irq, unsigned int cpu) | ||
| 108 | { | ||
| 109 | u32 val, bit_number; | ||
| 110 | u8 i; | ||
| 111 | |||
| 112 | if (_wakeupgen_get_irq_info(irq, &bit_number, &i)) | ||
| 113 | return; | ||
| 114 | |||
| 115 | val = wakeupgen_readl(i, cpu); | ||
| 116 | val &= ~BIT(bit_number); | ||
| 117 | wakeupgen_writel(val, i, cpu); | ||
| 118 | } | ||
| 119 | |||
| 120 | static void _wakeupgen_set(unsigned int irq, unsigned int cpu) | ||
| 121 | { | ||
| 122 | u32 val, bit_number; | ||
| 123 | u8 i; | ||
| 124 | |||
| 125 | if (_wakeupgen_get_irq_info(irq, &bit_number, &i)) | ||
| 126 | return; | ||
| 127 | |||
| 128 | val = wakeupgen_readl(i, cpu); | ||
| 129 | val |= BIT(bit_number); | ||
| 130 | wakeupgen_writel(val, i, cpu); | ||
| 131 | } | ||
| 132 | |||
| 133 | static void _wakeupgen_save_masks(unsigned int cpu) | ||
| 134 | { | ||
| 135 | u8 i; | ||
| 136 | |||
| 137 | for (i = 0; i < NR_REG_BANKS; i++) | ||
| 138 | per_cpu(irqmasks, cpu)[i] = wakeupgen_readl(i, cpu); | ||
| 139 | } | ||
| 140 | |||
| 141 | static void _wakeupgen_restore_masks(unsigned int cpu) | ||
| 142 | { | ||
| 143 | u8 i; | ||
| 144 | |||
| 145 | for (i = 0; i < NR_REG_BANKS; i++) | ||
| 146 | wakeupgen_writel(per_cpu(irqmasks, cpu)[i], i, cpu); | ||
| 147 | } | ||
| 148 | |||
| 149 | /* | ||
| 150 | * Architecture specific Mask extension | ||
| 151 | */ | ||
| 152 | static void wakeupgen_mask(struct irq_data *d) | ||
| 153 | { | ||
| 154 | unsigned long flags; | ||
| 155 | |||
| 156 | spin_lock_irqsave(&wakeupgen_lock, flags); | ||
| 157 | _wakeupgen_clear(d->irq, irq_target_cpu[d->irq]); | ||
| 158 | spin_unlock_irqrestore(&wakeupgen_lock, flags); | ||
| 159 | } | ||
| 160 | |||
| 161 | /* | ||
| 162 | * Architecture specific Unmask extension | ||
| 163 | */ | ||
| 164 | static void wakeupgen_unmask(struct irq_data *d) | ||
| 165 | { | ||
| 166 | unsigned long flags; | ||
| 167 | |||
| 168 | spin_lock_irqsave(&wakeupgen_lock, flags); | ||
| 169 | _wakeupgen_set(d->irq, irq_target_cpu[d->irq]); | ||
| 170 | spin_unlock_irqrestore(&wakeupgen_lock, flags); | ||
| 171 | } | ||
| 172 | |||
| 173 | /* | ||
| 174 | * Mask or unmask all interrupts on given CPU. | ||
| 175 | * 0 = Mask all interrupts on the 'cpu' | ||
| 176 | * 1 = Unmask all interrupts on the 'cpu' | ||
| 177 | * Ensure that the initial mask is maintained. This is faster than | ||
| 178 | * iterating through GIC registers to arrive at the correct masks. | ||
| 179 | */ | ||
| 180 | static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set) | ||
| 181 | { | ||
| 182 | unsigned long flags; | ||
| 183 | |||
| 184 | spin_lock_irqsave(&wakeupgen_lock, flags); | ||
| 185 | if (set) { | ||
| 186 | _wakeupgen_save_masks(cpu); | ||
| 187 | _wakeupgen_set_all(cpu, WKG_MASK_ALL); | ||
| 188 | } else { | ||
| 189 | _wakeupgen_set_all(cpu, WKG_UNMASK_ALL); | ||
| 190 | _wakeupgen_restore_masks(cpu); | ||
| 191 | } | ||
| 192 | spin_unlock_irqrestore(&wakeupgen_lock, flags); | ||
| 193 | } | ||
| 194 | |||
| 195 | #ifdef CONFIG_CPU_PM | ||
| 196 | /* | ||
| 197 | * Save WakeupGen interrupt context in SAR BANK3. Restore is done by | ||
| 198 | * ROM code. WakeupGen IP is integrated along with GIC to manage the | ||
| 199 | * interrupt wakeups from CPU low power states. It manages | ||
| 200 | * masking/unmasking of Shared peripheral interrupts(SPI). So the | ||
| 201 | * interrupt enable/disable control should be in sync and consistent | ||
| 202 | * at WakeupGen and GIC so that interrupts are not lost. | ||
| 203 | */ | ||
| 204 | static void irq_save_context(void) | ||
| 205 | { | ||
| 206 | u32 i, val; | ||
| 207 | |||
| 208 | if (omap_rev() == OMAP4430_REV_ES1_0) | ||
| 209 | return; | ||
| 210 | |||
| 211 | if (!sar_base) | ||
| 212 | sar_base = omap4_get_sar_ram_base(); | ||
| 213 | |||
| 214 | for (i = 0; i < NR_REG_BANKS; i++) { | ||
| 215 | /* Save the CPUx interrupt mask for IRQ 0 to 127 */ | ||
| 216 | val = wakeupgen_readl(i, 0); | ||
| 217 | sar_writel(val, WAKEUPGENENB_OFFSET_CPU0, i); | ||
| 218 | val = wakeupgen_readl(i, 1); | ||
| 219 | sar_writel(val, WAKEUPGENENB_OFFSET_CPU1, i); | ||
| 220 | |||
| 221 | /* | ||
| 222 | * Disable the secure interrupts for CPUx. The restore | ||
| 223 | * code blindly restores secure and non-secure interrupt | ||
| 224 | * masks from SAR RAM. Secure interrupts are not suppose | ||
| 225 | * to be enabled from HLOS. So overwrite the SAR location | ||
| 226 | * so that the secure interrupt remains disabled. | ||
| 227 | */ | ||
| 228 | sar_writel(0x0, WAKEUPGENENB_SECURE_OFFSET_CPU0, i); | ||
| 229 | sar_writel(0x0, WAKEUPGENENB_SECURE_OFFSET_CPU1, i); | ||
| 230 | } | ||
| 231 | |||
| 232 | /* Save AuxBoot* registers */ | ||
| 233 | val = __raw_readl(wakeupgen_base + OMAP_AUX_CORE_BOOT_0); | ||
| 234 | __raw_writel(val, sar_base + AUXCOREBOOT0_OFFSET); | ||
| 235 | val = __raw_readl(wakeupgen_base + OMAP_AUX_CORE_BOOT_0); | ||
| 236 | __raw_writel(val, sar_base + AUXCOREBOOT1_OFFSET); | ||
| 237 | |||
| 238 | /* Save SyncReq generation logic */ | ||
| 239 | val = __raw_readl(wakeupgen_base + OMAP_AUX_CORE_BOOT_0); | ||
| 240 | __raw_writel(val, sar_base + AUXCOREBOOT0_OFFSET); | ||
| 241 | val = __raw_readl(wakeupgen_base + OMAP_AUX_CORE_BOOT_0); | ||
| 242 | __raw_writel(val, sar_base + AUXCOREBOOT1_OFFSET); | ||
| 243 | |||
| 244 | /* Save SyncReq generation logic */ | ||
| 245 | val = __raw_readl(wakeupgen_base + OMAP_PTMSYNCREQ_MASK); | ||
| 246 | __raw_writel(val, sar_base + PTMSYNCREQ_MASK_OFFSET); | ||
| 247 | val = __raw_readl(wakeupgen_base + OMAP_PTMSYNCREQ_EN); | ||
| 248 | __raw_writel(val, sar_base + PTMSYNCREQ_EN_OFFSET); | ||
| 249 | |||
| 250 | /* Set the Backup Bit Mask status */ | ||
| 251 | val = __raw_readl(sar_base + SAR_BACKUP_STATUS_OFFSET); | ||
| 252 | val |= SAR_BACKUP_STATUS_WAKEUPGEN; | ||
| 253 | __raw_writel(val, sar_base + SAR_BACKUP_STATUS_OFFSET); | ||
| 254 | } | ||
| 255 | |||
| 256 | /* | ||
| 257 | * Clear WakeupGen SAR backup status. | ||
| 258 | */ | ||
| 259 | void irq_sar_clear(void) | ||
| 260 | { | ||
| 261 | u32 val; | ||
| 262 | val = __raw_readl(sar_base + SAR_BACKUP_STATUS_OFFSET); | ||
| 263 | val &= ~SAR_BACKUP_STATUS_WAKEUPGEN; | ||
| 264 | __raw_writel(val, sar_base + SAR_BACKUP_STATUS_OFFSET); | ||
| 265 | } | ||
| 266 | |||
| 267 | /* | ||
| 268 | * Save GIC and Wakeupgen interrupt context using secure API | ||
| 269 | * for HS/EMU devices. | ||
| 270 | */ | ||
| 271 | static void irq_save_secure_context(void) | ||
| 272 | { | ||
| 273 | u32 ret; | ||
| 274 | ret = omap_secure_dispatcher(OMAP4_HAL_SAVEGIC_INDEX, | ||
| 275 | FLAG_START_CRITICAL, | ||
| 276 | 0, 0, 0, 0, 0); | ||
| 277 | if (ret != API_HAL_RET_VALUE_OK) | ||
| 278 | pr_err("GIC and Wakeupgen context save failed\n"); | ||
| 279 | } | ||
| 280 | #endif | ||
| 281 | |||
| 282 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 283 | static int __cpuinit irq_cpu_hotplug_notify(struct notifier_block *self, | ||
| 284 | unsigned long action, void *hcpu) | ||
| 285 | { | ||
| 286 | unsigned int cpu = (unsigned int)hcpu; | ||
| 287 | |||
| 288 | switch (action) { | ||
| 289 | case CPU_ONLINE: | ||
| 290 | wakeupgen_irqmask_all(cpu, 0); | ||
| 291 | break; | ||
| 292 | case CPU_DEAD: | ||
| 293 | wakeupgen_irqmask_all(cpu, 1); | ||
| 294 | break; | ||
| 295 | } | ||
| 296 | return NOTIFY_OK; | ||
| 297 | } | ||
| 298 | |||
| 299 | static struct notifier_block __refdata irq_hotplug_notifier = { | ||
| 300 | .notifier_call = irq_cpu_hotplug_notify, | ||
| 301 | }; | ||
| 302 | |||
| 303 | static void __init irq_hotplug_init(void) | ||
| 304 | { | ||
| 305 | register_hotcpu_notifier(&irq_hotplug_notifier); | ||
| 306 | } | ||
| 307 | #else | ||
| 308 | static void __init irq_hotplug_init(void) | ||
| 309 | {} | ||
| 310 | #endif | ||
| 311 | |||
| 312 | #ifdef CONFIG_CPU_PM | ||
| 313 | static int irq_notifier(struct notifier_block *self, unsigned long cmd, void *v) | ||
| 314 | { | ||
| 315 | switch (cmd) { | ||
| 316 | case CPU_CLUSTER_PM_ENTER: | ||
| 317 | if (omap_type() == OMAP2_DEVICE_TYPE_GP) | ||
| 318 | irq_save_context(); | ||
| 319 | else | ||
| 320 | irq_save_secure_context(); | ||
| 321 | break; | ||
| 322 | case CPU_CLUSTER_PM_EXIT: | ||
| 323 | if (omap_type() == OMAP2_DEVICE_TYPE_GP) | ||
| 324 | irq_sar_clear(); | ||
| 325 | break; | ||
| 326 | } | ||
| 327 | return NOTIFY_OK; | ||
| 328 | } | ||
| 329 | |||
| 330 | static struct notifier_block irq_notifier_block = { | ||
| 331 | .notifier_call = irq_notifier, | ||
| 332 | }; | ||
| 333 | |||
| 334 | static void __init irq_pm_init(void) | ||
| 335 | { | ||
| 336 | cpu_pm_register_notifier(&irq_notifier_block); | ||
| 337 | } | ||
| 338 | #else | ||
| 339 | static void __init irq_pm_init(void) | ||
| 340 | {} | ||
| 341 | #endif | ||
| 342 | |||
| 343 | /* | ||
| 344 | * Initialise the wakeupgen module. | ||
| 345 | */ | ||
| 346 | int __init omap_wakeupgen_init(void) | ||
| 347 | { | ||
| 348 | int i; | ||
| 349 | unsigned int boot_cpu = smp_processor_id(); | ||
| 350 | |||
| 351 | /* Not supported on OMAP4 ES1.0 silicon */ | ||
| 352 | if (omap_rev() == OMAP4430_REV_ES1_0) { | ||
| 353 | WARN(1, "WakeupGen: Not supported on OMAP4430 ES1.0\n"); | ||
| 354 | return -EPERM; | ||
| 355 | } | ||
| 356 | |||
| 357 | /* Static mapping, never released */ | ||
| 358 | wakeupgen_base = ioremap(OMAP44XX_WKUPGEN_BASE, SZ_4K); | ||
| 359 | if (WARN_ON(!wakeupgen_base)) | ||
| 360 | return -ENOMEM; | ||
| 361 | |||
| 362 | /* Clear all IRQ bitmasks at wakeupGen level */ | ||
| 363 | for (i = 0; i < NR_REG_BANKS; i++) { | ||
| 364 | wakeupgen_writel(0, i, CPU0_ID); | ||
| 365 | wakeupgen_writel(0, i, CPU1_ID); | ||
| 366 | } | ||
| 367 | |||
| 368 | /* | ||
| 369 | * Override GIC architecture specific functions to add | ||
| 370 | * OMAP WakeupGen interrupt controller along with GIC | ||
| 371 | */ | ||
| 372 | gic_arch_extn.irq_mask = wakeupgen_mask; | ||
| 373 | gic_arch_extn.irq_unmask = wakeupgen_unmask; | ||
| 374 | gic_arch_extn.flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SKIP_SET_WAKE; | ||
| 375 | |||
| 376 | /* | ||
| 377 | * FIXME: Add support to set_smp_affinity() once the core | ||
| 378 | * GIC code has necessary hooks in place. | ||
| 379 | */ | ||
| 380 | |||
| 381 | /* Associate all the IRQs to boot CPU like GIC init does. */ | ||
| 382 | for (i = 0; i < NR_IRQS; i++) | ||
| 383 | irq_target_cpu[i] = boot_cpu; | ||
| 384 | |||
| 385 | irq_hotplug_init(); | ||
| 386 | irq_pm_init(); | ||
| 387 | |||
| 388 | return 0; | ||
| 389 | } | ||
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 35ac3e5f6e94..bc16c818c6b7 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c | |||
| @@ -15,24 +15,80 @@ | |||
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
| 18 | #include <linux/memblock.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/hardware/gic.h> | 20 | #include <asm/hardware/gic.h> |
| 20 | #include <asm/hardware/cache-l2x0.h> | 21 | #include <asm/hardware/cache-l2x0.h> |
| 22 | #include <asm/mach/map.h> | ||
| 21 | 23 | ||
| 22 | #include <plat/irqs.h> | 24 | #include <plat/irqs.h> |
| 25 | #include <plat/sram.h> | ||
| 23 | 26 | ||
| 24 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
| 25 | #include <mach/omap4-common.h> | 28 | #include <mach/omap-wakeupgen.h> |
| 29 | |||
| 30 | #include "common.h" | ||
| 31 | #include "omap4-sar-layout.h" | ||
| 26 | 32 | ||
| 27 | #ifdef CONFIG_CACHE_L2X0 | 33 | #ifdef CONFIG_CACHE_L2X0 |
| 28 | void __iomem *l2cache_base; | 34 | static void __iomem *l2cache_base; |
| 29 | #endif | 35 | #endif |
| 30 | 36 | ||
| 31 | void __iomem *gic_dist_base_addr; | 37 | static void __iomem *sar_ram_base; |
| 38 | |||
| 39 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
| 40 | /* Used to implement memory barrier on DRAM path */ | ||
| 41 | #define OMAP4_DRAM_BARRIER_VA 0xfe600000 | ||
| 42 | |||
| 43 | void __iomem *dram_sync, *sram_sync; | ||
| 44 | |||
| 45 | void omap_bus_sync(void) | ||
| 46 | { | ||
| 47 | if (dram_sync && sram_sync) { | ||
| 48 | writel_relaxed(readl_relaxed(dram_sync), dram_sync); | ||
| 49 | writel_relaxed(readl_relaxed(sram_sync), sram_sync); | ||
| 50 | isb(); | ||
| 51 | } | ||
| 52 | } | ||
| 53 | |||
| 54 | static int __init omap_barriers_init(void) | ||
| 55 | { | ||
| 56 | struct map_desc dram_io_desc[1]; | ||
| 57 | phys_addr_t paddr; | ||
| 58 | u32 size; | ||
| 59 | |||
| 60 | if (!cpu_is_omap44xx()) | ||
| 61 | return -ENODEV; | ||
| 32 | 62 | ||
| 63 | size = ALIGN(PAGE_SIZE, SZ_1M); | ||
| 64 | paddr = memblock_alloc(size, SZ_1M); | ||
| 65 | if (!paddr) { | ||
| 66 | pr_err("%s: failed to reserve 4 Kbytes\n", __func__); | ||
| 67 | return -ENOMEM; | ||
| 68 | } | ||
| 69 | memblock_free(paddr, size); | ||
| 70 | memblock_remove(paddr, size); | ||
| 71 | dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA; | ||
| 72 | dram_io_desc[0].pfn = __phys_to_pfn(paddr); | ||
| 73 | dram_io_desc[0].length = size; | ||
| 74 | dram_io_desc[0].type = MT_MEMORY_SO; | ||
| 75 | iotable_init(dram_io_desc, ARRAY_SIZE(dram_io_desc)); | ||
| 76 | dram_sync = (void __iomem *) dram_io_desc[0].virtual; | ||
| 77 | sram_sync = (void __iomem *) OMAP4_SRAM_VA; | ||
| 78 | |||
| 79 | pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n", | ||
| 80 | (long long) paddr, dram_io_desc[0].virtual); | ||
| 81 | |||
| 82 | return 0; | ||
| 83 | } | ||
| 84 | core_initcall(omap_barriers_init); | ||
| 85 | #endif | ||
| 33 | 86 | ||
| 34 | void __init gic_init_irq(void) | 87 | void __init gic_init_irq(void) |
| 35 | { | 88 | { |
| 89 | void __iomem *omap_irq_base; | ||
| 90 | void __iomem *gic_dist_base_addr; | ||
| 91 | |||
| 36 | /* Static mapping, never released */ | 92 | /* Static mapping, never released */ |
| 37 | gic_dist_base_addr = ioremap(OMAP44XX_GIC_DIST_BASE, SZ_4K); | 93 | gic_dist_base_addr = ioremap(OMAP44XX_GIC_DIST_BASE, SZ_4K); |
| 38 | BUG_ON(!gic_dist_base_addr); | 94 | BUG_ON(!gic_dist_base_addr); |
| @@ -41,11 +97,18 @@ void __init gic_init_irq(void) | |||
| 41 | omap_irq_base = ioremap(OMAP44XX_GIC_CPU_BASE, SZ_512); | 97 | omap_irq_base = ioremap(OMAP44XX_GIC_CPU_BASE, SZ_512); |
| 42 | BUG_ON(!omap_irq_base); | 98 | BUG_ON(!omap_irq_base); |
| 43 | 99 | ||
| 100 | omap_wakeupgen_init(); | ||
| 101 | |||
| 44 | gic_init(0, 29, gic_dist_base_addr, omap_irq_base); | 102 | gic_init(0, 29, gic_dist_base_addr, omap_irq_base); |
| 45 | } | 103 | } |
| 46 | 104 | ||
| 47 | #ifdef CONFIG_CACHE_L2X0 | 105 | #ifdef CONFIG_CACHE_L2X0 |
| 48 | 106 | ||
| 107 | void __iomem *omap4_get_l2cache_base(void) | ||
| 108 | { | ||
| 109 | return l2cache_base; | ||
| 110 | } | ||
| 111 | |||
| 49 | static void omap4_l2x0_disable(void) | 112 | static void omap4_l2x0_disable(void) |
| 50 | { | 113 | { |
| 51 | /* Disable PL310 L2 Cache controller */ | 114 | /* Disable PL310 L2 Cache controller */ |
| @@ -71,7 +134,8 @@ static int __init omap_l2_cache_init(void) | |||
| 71 | 134 | ||
| 72 | /* Static mapping, never released */ | 135 | /* Static mapping, never released */ |
| 73 | l2cache_base = ioremap(OMAP44XX_L2CACHE_BASE, SZ_4K); | 136 | l2cache_base = ioremap(OMAP44XX_L2CACHE_BASE, SZ_4K); |
| 74 | BUG_ON(!l2cache_base); | 137 | if (WARN_ON(!l2cache_base)) |
| 138 | return -ENOMEM; | ||
| 75 | 139 | ||
| 76 | /* | 140 | /* |
| 77 | * 16-way associativity, parity disabled | 141 | * 16-way associativity, parity disabled |
| @@ -111,3 +175,30 @@ static int __init omap_l2_cache_init(void) | |||
| 111 | } | 175 | } |
| 112 | early_initcall(omap_l2_cache_init); | 176 | early_initcall(omap_l2_cache_init); |
| 113 | #endif | 177 | #endif |
| 178 | |||
| 179 | void __iomem *omap4_get_sar_ram_base(void) | ||
| 180 | { | ||
| 181 | return sar_ram_base; | ||
| 182 | } | ||
| 183 | |||
| 184 | /* | ||
| 185 | * SAR RAM used to save and restore the HW | ||
| 186 | * context in low power modes | ||
| 187 | */ | ||
| 188 | static int __init omap4_sar_ram_init(void) | ||
| 189 | { | ||
| 190 | /* | ||
| 191 | * To avoid code running on other OMAPs in | ||
| 192 | * multi-omap builds | ||
| 193 | */ | ||
| 194 | if (!cpu_is_omap44xx()) | ||
| 195 | return -ENOMEM; | ||
| 196 | |||
| 197 | /* Static mapping, never released */ | ||
| 198 | sar_ram_base = ioremap(OMAP44XX_SAR_RAM_BASE, SZ_16K); | ||
| 199 | if (WARN_ON(!sar_ram_base)) | ||
| 200 | return -ENOMEM; | ||
| 201 | |||
| 202 | return 0; | ||
| 203 | } | ||
| 204 | early_initcall(omap4_sar_ram_init); | ||
diff --git a/arch/arm/mach-omap2/omap4-sar-layout.h b/arch/arm/mach-omap2/omap4-sar-layout.h new file mode 100644 index 000000000000..fe5b545ad443 --- /dev/null +++ b/arch/arm/mach-omap2/omap4-sar-layout.h | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | /* | ||
| 2 | * omap4-sar-layout.h: OMAP4 SAR RAM layout header file | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
| 5 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | #ifndef OMAP_ARCH_OMAP4_SAR_LAYOUT_H | ||
| 12 | #define OMAP_ARCH_OMAP4_SAR_LAYOUT_H | ||
| 13 | |||
| 14 | /* | ||
| 15 | * SAR BANK offsets from base address OMAP44XX_SAR_RAM_BASE | ||
| 16 | */ | ||
| 17 | #define SAR_BANK1_OFFSET 0x0000 | ||
| 18 | #define SAR_BANK2_OFFSET 0x1000 | ||
| 19 | #define SAR_BANK3_OFFSET 0x2000 | ||
| 20 | #define SAR_BANK4_OFFSET 0x3000 | ||
| 21 | |||
| 22 | /* Scratch pad memory offsets from SAR_BANK1 */ | ||
| 23 | #define SCU_OFFSET0 0xd00 | ||
| 24 | #define SCU_OFFSET1 0xd04 | ||
| 25 | #define OMAP_TYPE_OFFSET 0xd10 | ||
| 26 | #define L2X0_SAVE_OFFSET0 0xd14 | ||
| 27 | #define L2X0_SAVE_OFFSET1 0xd18 | ||
| 28 | #define L2X0_AUXCTRL_OFFSET 0xd1c | ||
| 29 | #define L2X0_PREFETCH_CTRL_OFFSET 0xd20 | ||
| 30 | |||
| 31 | /* CPUx Wakeup Non-Secure Physical Address offsets in SAR_BANK3 */ | ||
| 32 | #define CPU0_WAKEUP_NS_PA_ADDR_OFFSET 0xa04 | ||
| 33 | #define CPU1_WAKEUP_NS_PA_ADDR_OFFSET 0xa08 | ||
| 34 | |||
| 35 | #define SAR_BACKUP_STATUS_OFFSET (SAR_BANK3_OFFSET + 0x500) | ||
| 36 | #define SAR_SECURE_RAM_SIZE_OFFSET (SAR_BANK3_OFFSET + 0x504) | ||
| 37 | #define SAR_SECRAM_SAVED_AT_OFFSET (SAR_BANK3_OFFSET + 0x508) | ||
| 38 | |||
| 39 | /* WakeUpGen save restore offset from OMAP44XX_SAR_RAM_BASE */ | ||
| 40 | #define WAKEUPGENENB_OFFSET_CPU0 (SAR_BANK3_OFFSET + 0x684) | ||
| 41 | #define WAKEUPGENENB_SECURE_OFFSET_CPU0 (SAR_BANK3_OFFSET + 0x694) | ||
| 42 | #define WAKEUPGENENB_OFFSET_CPU1 (SAR_BANK3_OFFSET + 0x6a4) | ||
| 43 | #define WAKEUPGENENB_SECURE_OFFSET_CPU1 (SAR_BANK3_OFFSET + 0x6b4) | ||
| 44 | #define AUXCOREBOOT0_OFFSET (SAR_BANK3_OFFSET + 0x6c4) | ||
| 45 | #define AUXCOREBOOT1_OFFSET (SAR_BANK3_OFFSET + 0x6c8) | ||
| 46 | #define PTMSYNCREQ_MASK_OFFSET (SAR_BANK3_OFFSET + 0x6cc) | ||
| 47 | #define PTMSYNCREQ_EN_OFFSET (SAR_BANK3_OFFSET + 0x6d0) | ||
| 48 | #define SAR_BACKUP_STATUS_WAKEUPGEN 0x10 | ||
| 49 | |||
| 50 | #endif | ||
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 207a2ff9a8c4..529142aff766 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
| @@ -137,7 +137,7 @@ | |||
| 137 | #include <linux/mutex.h> | 137 | #include <linux/mutex.h> |
| 138 | #include <linux/spinlock.h> | 138 | #include <linux/spinlock.h> |
| 139 | 139 | ||
| 140 | #include <plat/common.h> | 140 | #include "common.h" |
| 141 | #include <plat/cpu.h> | 141 | #include <plat/cpu.h> |
| 142 | #include "clockdomain.h" | 142 | #include "clockdomain.h" |
| 143 | #include "powerdomain.h" | 143 | #include "powerdomain.h" |
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 00bff46ca48b..1881fe915149 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | #include <plat/omap-pm.h> | 19 | #include <plat/omap-pm.h> |
| 20 | #include <plat/omap_device.h> | 20 | #include <plat/omap_device.h> |
| 21 | #include <plat/common.h> | 21 | #include "common.h" |
| 22 | 22 | ||
| 23 | #include "voltage.h" | 23 | #include "voltage.h" |
| 24 | #include "powerdomain.h" | 24 | #include "powerdomain.h" |
diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 4e166add2f35..b737b11e4499 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h | |||
| @@ -21,6 +21,7 @@ extern void omap_sram_idle(void); | |||
| 21 | extern int omap3_can_sleep(void); | 21 | extern int omap3_can_sleep(void); |
| 22 | extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state); | 22 | extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state); |
| 23 | extern int omap3_idle_init(void); | 23 | extern int omap3_idle_init(void); |
| 24 | extern int omap4_idle_init(void); | ||
| 24 | 25 | ||
| 25 | #if defined(CONFIG_PM_OPP) | 26 | #if defined(CONFIG_PM_OPP) |
| 26 | extern int omap3_opp_init(void); | 27 | extern int omap3_opp_init(void); |
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index cf0c216132ab..ef8595c80296 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c | |||
| @@ -42,6 +42,7 @@ | |||
| 42 | #include <plat/dma.h> | 42 | #include <plat/dma.h> |
| 43 | #include <plat/board.h> | 43 | #include <plat/board.h> |
| 44 | 44 | ||
| 45 | #include "common.h" | ||
| 45 | #include "prm2xxx_3xxx.h" | 46 | #include "prm2xxx_3xxx.h" |
| 46 | #include "prm-regbits-24xx.h" | 47 | #include "prm-regbits-24xx.h" |
| 47 | #include "cm2xxx_3xxx.h" | 48 | #include "cm2xxx_3xxx.h" |
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index efa66494c1e3..fa637dfdda53 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
| @@ -42,6 +42,7 @@ | |||
| 42 | #include <plat/gpmc.h> | 42 | #include <plat/gpmc.h> |
| 43 | #include <plat/dma.h> | 43 | #include <plat/dma.h> |
| 44 | 44 | ||
| 45 | #include "common.h" | ||
| 45 | #include "cm2xxx_3xxx.h" | 46 | #include "cm2xxx_3xxx.h" |
| 46 | #include "cm-regbits-34xx.h" | 47 | #include "cm-regbits-34xx.h" |
| 47 | #include "prm-regbits-34xx.h" | 48 | #include "prm-regbits-34xx.h" |
diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c index 59a870be8390..c264ef7219c1 100644 --- a/arch/arm/mach-omap2/pm44xx.c +++ b/arch/arm/mach-omap2/pm44xx.c | |||
| @@ -1,8 +1,9 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * OMAP4 Power Management Routines | 2 | * OMAP4 Power Management Routines |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2010 Texas Instruments, Inc. | 4 | * Copyright (C) 2010-2011 Texas Instruments, Inc. |
| 5 | * Rajendra Nayak <rnayak@ti.com> | 5 | * Rajendra Nayak <rnayak@ti.com> |
| 6 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * | 7 | * |
| 7 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
| 8 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
| @@ -16,14 +17,17 @@ | |||
| 16 | #include <linux/err.h> | 17 | #include <linux/err.h> |
| 17 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
| 18 | 19 | ||
| 20 | #include "common.h" | ||
| 21 | #include "clockdomain.h" | ||
| 19 | #include "powerdomain.h" | 22 | #include "powerdomain.h" |
| 20 | #include <mach/omap4-common.h> | 23 | #include "pm.h" |
| 21 | 24 | ||
| 22 | struct power_state { | 25 | struct power_state { |
| 23 | struct powerdomain *pwrdm; | 26 | struct powerdomain *pwrdm; |
| 24 | u32 next_state; | 27 | u32 next_state; |
| 25 | #ifdef CONFIG_SUSPEND | 28 | #ifdef CONFIG_SUSPEND |
| 26 | u32 saved_state; | 29 | u32 saved_state; |
| 30 | u32 saved_logic_state; | ||
| 27 | #endif | 31 | #endif |
| 28 | struct list_head node; | 32 | struct list_head node; |
| 29 | }; | 33 | }; |
| @@ -33,7 +37,50 @@ static LIST_HEAD(pwrst_list); | |||
| 33 | #ifdef CONFIG_SUSPEND | 37 | #ifdef CONFIG_SUSPEND |
| 34 | static int omap4_pm_suspend(void) | 38 | static int omap4_pm_suspend(void) |
| 35 | { | 39 | { |
| 36 | do_wfi(); | 40 | struct power_state *pwrst; |
| 41 | int state, ret = 0; | ||
| 42 | u32 cpu_id = smp_processor_id(); | ||
| 43 | |||
| 44 | /* Save current powerdomain state */ | ||
| 45 | list_for_each_entry(pwrst, &pwrst_list, node) { | ||
| 46 | pwrst->saved_state = pwrdm_read_next_pwrst(pwrst->pwrdm); | ||
| 47 | pwrst->saved_logic_state = pwrdm_read_logic_retst(pwrst->pwrdm); | ||
| 48 | } | ||
| 49 | |||
| 50 | /* Set targeted power domain states by suspend */ | ||
| 51 | list_for_each_entry(pwrst, &pwrst_list, node) { | ||
| 52 | omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state); | ||
| 53 | pwrdm_set_logic_retst(pwrst->pwrdm, PWRDM_POWER_OFF); | ||
| 54 | } | ||
| 55 | |||
| 56 | /* | ||
| 57 | * For MPUSS to hit power domain retention(CSWR or OSWR), | ||
| 58 | * CPU0 and CPU1 power domains need to be in OFF or DORMANT state, | ||
| 59 | * since CPU power domain CSWR is not supported by hardware | ||
| 60 | * Only master CPU follows suspend path. All other CPUs follow | ||
| 61 | * CPU hotplug path in system wide suspend. On OMAP4, CPU power | ||
| 62 | * domain CSWR is not supported by hardware. | ||
| 63 | * More details can be found in OMAP4430 TRM section 4.3.4.2. | ||
| 64 | */ | ||
| 65 | omap4_enter_lowpower(cpu_id, PWRDM_POWER_OFF); | ||
| 66 | |||
| 67 | /* Restore next powerdomain state */ | ||
| 68 | list_for_each_entry(pwrst, &pwrst_list, node) { | ||
| 69 | state = pwrdm_read_prev_pwrst(pwrst->pwrdm); | ||
| 70 | if (state > pwrst->next_state) { | ||
| 71 | pr_info("Powerdomain (%s) didn't enter " | ||
| 72 | "target state %d\n", | ||
| 73 | pwrst->pwrdm->name, pwrst->next_state); | ||
| 74 | ret = -1; | ||
| 75 | } | ||
| 76 | omap_set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state); | ||
| 77 | pwrdm_set_logic_retst(pwrst->pwrdm, pwrst->saved_logic_state); | ||
| 78 | } | ||
| 79 | if (ret) | ||
| 80 | pr_crit("Could not enter target state in pm_suspend\n"); | ||
| 81 | else | ||
| 82 | pr_info("Successfully put all powerdomains to target state\n"); | ||
| 83 | |||
| 37 | return 0; | 84 | return 0; |
| 38 | } | 85 | } |
| 39 | 86 | ||
| @@ -73,6 +120,22 @@ static const struct platform_suspend_ops omap_pm_ops = { | |||
| 73 | }; | 120 | }; |
| 74 | #endif /* CONFIG_SUSPEND */ | 121 | #endif /* CONFIG_SUSPEND */ |
| 75 | 122 | ||
| 123 | /* | ||
| 124 | * Enable hardware supervised mode for all clockdomains if it's | ||
| 125 | * supported. Initiate sleep transition for other clockdomains, if | ||
| 126 | * they are not used | ||
| 127 | */ | ||
| 128 | static int __init clkdms_setup(struct clockdomain *clkdm, void *unused) | ||
| 129 | { | ||
| 130 | if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO) | ||
| 131 | clkdm_allow_idle(clkdm); | ||
| 132 | else if (clkdm->flags & CLKDM_CAN_FORCE_SLEEP && | ||
| 133 | atomic_read(&clkdm->usecount) == 0) | ||
| 134 | clkdm_sleep(clkdm); | ||
| 135 | return 0; | ||
| 136 | } | ||
| 137 | |||
| 138 | |||
| 76 | static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused) | 139 | static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused) |
| 77 | { | 140 | { |
| 78 | struct power_state *pwrst; | 141 | struct power_state *pwrst; |
| @@ -80,14 +143,48 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused) | |||
| 80 | if (!pwrdm->pwrsts) | 143 | if (!pwrdm->pwrsts) |
| 81 | return 0; | 144 | return 0; |
| 82 | 145 | ||
| 146 | /* | ||
| 147 | * Skip CPU0 and CPU1 power domains. CPU1 is programmed | ||
| 148 | * through hotplug path and CPU0 explicitly programmed | ||
| 149 | * further down in the code path | ||
| 150 | */ | ||
| 151 | if (!strncmp(pwrdm->name, "cpu", 3)) | ||
| 152 | return 0; | ||
| 153 | |||
| 154 | /* | ||
| 155 | * FIXME: Remove this check when core retention is supported | ||
| 156 | * Only MPUSS power domain is added in the list. | ||
| 157 | */ | ||
| 158 | if (strcmp(pwrdm->name, "mpu_pwrdm")) | ||
| 159 | return 0; | ||
| 160 | |||
| 83 | pwrst = kmalloc(sizeof(struct power_state), GFP_ATOMIC); | 161 | pwrst = kmalloc(sizeof(struct power_state), GFP_ATOMIC); |
| 84 | if (!pwrst) | 162 | if (!pwrst) |
| 85 | return -ENOMEM; | 163 | return -ENOMEM; |
| 164 | |||
| 86 | pwrst->pwrdm = pwrdm; | 165 | pwrst->pwrdm = pwrdm; |
| 87 | pwrst->next_state = PWRDM_POWER_ON; | 166 | pwrst->next_state = PWRDM_POWER_RET; |
| 88 | list_add(&pwrst->node, &pwrst_list); | 167 | list_add(&pwrst->node, &pwrst_list); |
| 89 | 168 | ||
| 90 | return pwrdm_set_next_pwrst(pwrst->pwrdm, pwrst->next_state); | 169 | return omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state); |
| 170 | } | ||
| 171 | |||
| 172 | /** | ||
| 173 | * omap_default_idle - OMAP4 default ilde routine.' | ||
| 174 | * | ||
| 175 | * Implements OMAP4 memory, IO ordering requirements which can't be addressed | ||
| 176 | * with default arch_idle() hook. Used by all CPUs with !CONFIG_CPUIDLE and | ||
| 177 | * by secondary CPU with CONFIG_CPUIDLE. | ||
| 178 | */ | ||
| 179 | static void omap_default_idle(void) | ||
| 180 | { | ||
| 181 | local_irq_disable(); | ||
| 182 | local_fiq_disable(); | ||
| 183 | |||
| 184 | omap_do_wfi(); | ||
| 185 | |||
| 186 | local_fiq_enable(); | ||
| 187 | local_irq_enable(); | ||
| 91 | } | 188 | } |
| 92 | 189 | ||
| 93 | /** | 190 | /** |
| @@ -99,10 +196,17 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused) | |||
| 99 | static int __init omap4_pm_init(void) | 196 | static int __init omap4_pm_init(void) |
| 100 | { | 197 | { |
| 101 | int ret; | 198 | int ret; |
| 199 | struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm; | ||
| 200 | struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm; | ||
| 102 | 201 | ||
| 103 | if (!cpu_is_omap44xx()) | 202 | if (!cpu_is_omap44xx()) |
| 104 | return -ENODEV; | 203 | return -ENODEV; |
| 105 | 204 | ||
| 205 | if (omap_rev() == OMAP4430_REV_ES1_0) { | ||
| 206 | WARN(1, "Power Management not supported on OMAP4430 ES1.0\n"); | ||
| 207 | return -ENODEV; | ||
| 208 | } | ||
| 209 | |||
| 106 | pr_err("Power Management for TI OMAP4.\n"); | 210 | pr_err("Power Management for TI OMAP4.\n"); |
| 107 | 211 | ||
| 108 | ret = pwrdm_for_each(pwrdms_setup, NULL); | 212 | ret = pwrdm_for_each(pwrdms_setup, NULL); |
| @@ -111,10 +215,51 @@ static int __init omap4_pm_init(void) | |||
| 111 | goto err2; | 215 | goto err2; |
| 112 | } | 216 | } |
| 113 | 217 | ||
| 218 | /* | ||
| 219 | * The dynamic dependency between MPUSS -> MEMIF and | ||
| 220 | * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as | ||
| 221 | * expected. The hardware recommendation is to enable static | ||
| 222 | * dependencies for these to avoid system lock ups or random crashes. | ||
| 223 | */ | ||
| 224 | mpuss_clkdm = clkdm_lookup("mpuss_clkdm"); | ||
| 225 | emif_clkdm = clkdm_lookup("l3_emif_clkdm"); | ||
| 226 | l3_1_clkdm = clkdm_lookup("l3_1_clkdm"); | ||
| 227 | l3_2_clkdm = clkdm_lookup("l3_2_clkdm"); | ||
| 228 | l4_per_clkdm = clkdm_lookup("l4_per_clkdm"); | ||
| 229 | ducati_clkdm = clkdm_lookup("ducati_clkdm"); | ||
| 230 | if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || | ||
| 231 | (!l3_2_clkdm) || (!ducati_clkdm) || (!l4_per_clkdm)) | ||
| 232 | goto err2; | ||
| 233 | |||
| 234 | ret = clkdm_add_wkdep(mpuss_clkdm, emif_clkdm); | ||
| 235 | ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm); | ||
| 236 | ret |= clkdm_add_wkdep(mpuss_clkdm, l3_2_clkdm); | ||
| 237 | ret |= clkdm_add_wkdep(mpuss_clkdm, l4_per_clkdm); | ||
| 238 | ret |= clkdm_add_wkdep(ducati_clkdm, l3_1_clkdm); | ||
| 239 | ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm); | ||
| 240 | if (ret) { | ||
| 241 | pr_err("Failed to add MPUSS -> L3/EMIF/L4PER, DUCATI -> L3 " | ||
| 242 | "wakeup dependency\n"); | ||
| 243 | goto err2; | ||
| 244 | } | ||
| 245 | |||
| 246 | ret = omap4_mpuss_init(); | ||
| 247 | if (ret) { | ||
| 248 | pr_err("Failed to initialise OMAP4 MPUSS\n"); | ||
| 249 | goto err2; | ||
| 250 | } | ||
| 251 | |||
| 252 | (void) clkdm_for_each(clkdms_setup, NULL); | ||
| 253 | |||
| 114 | #ifdef CONFIG_SUSPEND | 254 | #ifdef CONFIG_SUSPEND |
| 115 | suspend_set_ops(&omap_pm_ops); | 255 | suspend_set_ops(&omap_pm_ops); |
| 116 | #endif /* CONFIG_SUSPEND */ | 256 | #endif /* CONFIG_SUSPEND */ |
| 117 | 257 | ||
| 258 | /* Overwrite the default arch_idle() */ | ||
| 259 | pm_idle = omap_default_idle; | ||
| 260 | |||
| 261 | omap4_idle_init(); | ||
| 262 | |||
| 118 | err2: | 263 | err2: |
| 119 | return ret; | 264 | return ret; |
| 120 | } | 265 | } |
diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c index 597e2da831b3..c35e5cea9f8f 100644 --- a/arch/arm/mach-omap2/prcm.c +++ b/arch/arm/mach-omap2/prcm.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include <linux/export.h> | 26 | #include <linux/export.h> |
| 27 | 27 | ||
| 28 | #include <mach/system.h> | 28 | #include <mach/system.h> |
| 29 | #include <plat/common.h> | 29 | #include "common.h" |
| 30 | #include <plat/prcm.h> | 30 | #include <plat/prcm.h> |
| 31 | #include <plat/irqs.h> | 31 | #include <plat/irqs.h> |
| 32 | 32 | ||
diff --git a/arch/arm/mach-omap2/prcm_mpu44xx.c b/arch/arm/mach-omap2/prcm_mpu44xx.c index 171fe171a749..ca669b50f390 100644 --- a/arch/arm/mach-omap2/prcm_mpu44xx.c +++ b/arch/arm/mach-omap2/prcm_mpu44xx.c | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | 17 | ||
| 18 | #include <plat/common.h> | 18 | #include "common.h" |
| 19 | 19 | ||
| 20 | #include "prcm_mpu44xx.h" | 20 | #include "prcm_mpu44xx.h" |
| 21 | #include "cm-regbits-44xx.h" | 21 | #include "cm-regbits-44xx.h" |
diff --git a/arch/arm/mach-omap2/prm2xxx_3xxx.c b/arch/arm/mach-omap2/prm2xxx_3xxx.c index f02d87f68e54..9a08ba397327 100644 --- a/arch/arm/mach-omap2/prm2xxx_3xxx.c +++ b/arch/arm/mach-omap2/prm2xxx_3xxx.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include <linux/err.h> | 16 | #include <linux/err.h> |
| 17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
| 18 | 18 | ||
| 19 | #include <plat/common.h> | 19 | #include "common.h" |
| 20 | #include <plat/cpu.h> | 20 | #include <plat/cpu.h> |
| 21 | #include <plat/prcm.h> | 21 | #include <plat/prcm.h> |
| 22 | 22 | ||
diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c index 495a31a7e8a7..dd885eecf22a 100644 --- a/arch/arm/mach-omap2/prm44xx.c +++ b/arch/arm/mach-omap2/prm44xx.c | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #include <linux/err.h> | 17 | #include <linux/err.h> |
| 18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 19 | 19 | ||
| 20 | #include <plat/common.h> | 20 | #include "common.h" |
| 21 | #include <plat/cpu.h> | 21 | #include <plat/cpu.h> |
| 22 | #include <plat/prcm.h> | 22 | #include <plat/prcm.h> |
| 23 | 23 | ||
diff --git a/arch/arm/mach-omap2/prminst44xx.c b/arch/arm/mach-omap2/prminst44xx.c index 3a7bab16edd5..f6de5bc6b12a 100644 --- a/arch/arm/mach-omap2/prminst44xx.c +++ b/arch/arm/mach-omap2/prminst44xx.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include <linux/err.h> | 16 | #include <linux/err.h> |
| 17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
| 18 | 18 | ||
| 19 | #include <plat/common.h> | 19 | #include "common.h" |
| 20 | 20 | ||
| 21 | #include "prm44xx.h" | 21 | #include "prm44xx.h" |
| 22 | #include "prminst44xx.h" | 22 | #include "prminst44xx.h" |
diff --git a/arch/arm/mach-omap2/sdram-nokia.c b/arch/arm/mach-omap2/sdram-nokia.c index 14caa228bc0d..ee3a8ad304cb 100644 --- a/arch/arm/mach-omap2/sdram-nokia.c +++ b/arch/arm/mach-omap2/sdram-nokia.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 19 | 19 | ||
| 20 | #include <plat/io.h> | 20 | #include <plat/io.h> |
| 21 | #include <plat/common.h> | 21 | #include "common.h" |
| 22 | #include <plat/clock.h> | 22 | #include <plat/clock.h> |
| 23 | #include <plat/sdrc.h> | 23 | #include <plat/sdrc.h> |
| 24 | 24 | ||
diff --git a/arch/arm/mach-omap2/sdrc.c b/arch/arm/mach-omap2/sdrc.c index 8f2782874771..e3d345f46409 100644 --- a/arch/arm/mach-omap2/sdrc.c +++ b/arch/arm/mach-omap2/sdrc.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | #include <linux/clk.h> | 23 | #include <linux/clk.h> |
| 24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
| 25 | 25 | ||
| 26 | #include <plat/common.h> | 26 | #include "common.h" |
| 27 | #include <plat/clock.h> | 27 | #include <plat/clock.h> |
| 28 | #include <plat/sram.h> | 28 | #include <plat/sram.h> |
| 29 | 29 | ||
diff --git a/arch/arm/mach-omap2/sdrc2xxx.c b/arch/arm/mach-omap2/sdrc2xxx.c index ccdb010f169d..791a63cdceb2 100644 --- a/arch/arm/mach-omap2/sdrc2xxx.c +++ b/arch/arm/mach-omap2/sdrc2xxx.c | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | #include <linux/clk.h> | 24 | #include <linux/clk.h> |
| 25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
| 26 | 26 | ||
| 27 | #include <plat/common.h> | 27 | #include "common.h" |
| 28 | #include <plat/clock.h> | 28 | #include <plat/clock.h> |
| 29 | #include <plat/sram.h> | 29 | #include <plat/sram.h> |
| 30 | 30 | ||
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 9992dbfdfdb3..42c326732a29 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | #include <plat/omap-serial.h> | 33 | #include <plat/omap-serial.h> |
| 34 | #endif | 34 | #endif |
| 35 | 35 | ||
| 36 | #include <plat/common.h> | 36 | #include "common.h" |
| 37 | #include <plat/board.h> | 37 | #include <plat/board.h> |
| 38 | #include <plat/clock.h> | 38 | #include <plat/clock.h> |
| 39 | #include <plat/dma.h> | 39 | #include <plat/dma.h> |
diff --git a/arch/arm/mach-omap2/sleep44xx.S b/arch/arm/mach-omap2/sleep44xx.S new file mode 100644 index 000000000000..abd283400490 --- /dev/null +++ b/arch/arm/mach-omap2/sleep44xx.S | |||
| @@ -0,0 +1,379 @@ | |||
| 1 | /* | ||
| 2 | * OMAP44xx sleep code. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
| 5 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 6 | * | ||
| 7 | * This program is free software,you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/linkage.h> | ||
| 13 | #include <asm/system.h> | ||
| 14 | #include <asm/smp_scu.h> | ||
| 15 | #include <asm/memory.h> | ||
| 16 | #include <asm/hardware/cache-l2x0.h> | ||
| 17 | |||
| 18 | #include <plat/omap44xx.h> | ||
| 19 | #include <mach/omap-secure.h> | ||
| 20 | |||
| 21 | #include "common.h" | ||
| 22 | #include "omap4-sar-layout.h" | ||
| 23 | |||
| 24 | #if defined(CONFIG_SMP) && defined(CONFIG_PM) | ||
| 25 | |||
| 26 | .macro DO_SMC | ||
| 27 | dsb | ||
| 28 | smc #0 | ||
| 29 | dsb | ||
| 30 | .endm | ||
| 31 | |||
| 32 | ppa_zero_params: | ||
| 33 | .word 0x0 | ||
| 34 | |||
| 35 | ppa_por_params: | ||
| 36 | .word 1, 0 | ||
| 37 | |||
| 38 | /* | ||
| 39 | * ============================= | ||
| 40 | * == CPU suspend finisher == | ||
| 41 | * ============================= | ||
| 42 | * | ||
| 43 | * void omap4_finish_suspend(unsigned long cpu_state) | ||
| 44 | * | ||
| 45 | * This function code saves the CPU context and performs the CPU | ||
| 46 | * power down sequence. Calling WFI effectively changes the CPU | ||
| 47 | * power domains states to the desired target power state. | ||
| 48 | * | ||
| 49 | * @cpu_state : contains context save state (r0) | ||
| 50 | * 0 - No context lost | ||
| 51 | * 1 - CPUx L1 and logic lost: MPUSS CSWR | ||
| 52 | * 2 - CPUx L1 and logic lost + GIC lost: MPUSS OSWR | ||
| 53 | * 3 - CPUx L1 and logic lost + GIC + L2 lost: MPUSS OFF | ||
| 54 | * @return: This function never returns for CPU OFF and DORMANT power states. | ||
| 55 | * Post WFI, CPU transitions to DORMANT or OFF power state and on wake-up | ||
| 56 | * from this follows a full CPU reset path via ROM code to CPU restore code. | ||
| 57 | * The restore function pointer is stored at CPUx_WAKEUP_NS_PA_ADDR_OFFSET. | ||
| 58 | * It returns to the caller for CPU INACTIVE and ON power states or in case | ||
| 59 | * CPU failed to transition to targeted OFF/DORMANT state. | ||
| 60 | */ | ||
| 61 | ENTRY(omap4_finish_suspend) | ||
| 62 | stmfd sp!, {lr} | ||
| 63 | cmp r0, #0x0 | ||
| 64 | beq do_WFI @ No lowpower state, jump to WFI | ||
| 65 | |||
| 66 | /* | ||
| 67 | * Flush all data from the L1 data cache before disabling | ||
| 68 | * SCTLR.C bit. | ||
| 69 | */ | ||
| 70 | bl omap4_get_sar_ram_base | ||
| 71 | ldr r9, [r0, #OMAP_TYPE_OFFSET] | ||
| 72 | cmp r9, #0x1 @ Check for HS device | ||
| 73 | bne skip_secure_l1_clean | ||
| 74 | mov r0, #SCU_PM_NORMAL | ||
| 75 | mov r1, #0xFF @ clean seucre L1 | ||
| 76 | stmfd r13!, {r4-r12, r14} | ||
| 77 | ldr r12, =OMAP4_MON_SCU_PWR_INDEX | ||
| 78 | DO_SMC | ||
| 79 | ldmfd r13!, {r4-r12, r14} | ||
| 80 | skip_secure_l1_clean: | ||
| 81 | bl v7_flush_dcache_all | ||
| 82 | |||
| 83 | /* | ||
| 84 | * Clear the SCTLR.C bit to prevent further data cache | ||
| 85 | * allocation. Clearing SCTLR.C would make all the data accesses | ||
| 86 | * strongly ordered and would not hit the cache. | ||
| 87 | */ | ||
| 88 | mrc p15, 0, r0, c1, c0, 0 | ||
| 89 | bic r0, r0, #(1 << 2) @ Disable the C bit | ||
| 90 | mcr p15, 0, r0, c1, c0, 0 | ||
| 91 | isb | ||
| 92 | |||
| 93 | /* | ||
| 94 | * Invalidate L1 data cache. Even though only invalidate is | ||
| 95 | * necessary exported flush API is used here. Doing clean | ||
| 96 | * on already clean cache would be almost NOP. | ||
| 97 | */ | ||
| 98 | bl v7_flush_dcache_all | ||
| 99 | |||
| 100 | /* | ||
| 101 | * Switch the CPU from Symmetric Multiprocessing (SMP) mode | ||
| 102 | * to AsymmetricMultiprocessing (AMP) mode by programming | ||
| 103 | * the SCU power status to DORMANT or OFF mode. | ||
| 104 | * This enables the CPU to be taken out of coherency by | ||
| 105 | * preventing the CPU from receiving cache, TLB, or BTB | ||
| 106 | * maintenance operations broadcast by other CPUs in the cluster. | ||
| 107 | */ | ||
| 108 | bl omap4_get_sar_ram_base | ||
| 109 | mov r8, r0 | ||
| 110 | ldr r9, [r8, #OMAP_TYPE_OFFSET] | ||
| 111 | cmp r9, #0x1 @ Check for HS device | ||
| 112 | bne scu_gp_set | ||
| 113 | mrc p15, 0, r0, c0, c0, 5 @ Read MPIDR | ||
| 114 | ands r0, r0, #0x0f | ||
| 115 | ldreq r0, [r8, #SCU_OFFSET0] | ||
| 116 | ldrne r0, [r8, #SCU_OFFSET1] | ||
| 117 | mov r1, #0x00 | ||
| 118 | stmfd r13!, {r4-r12, r14} | ||
| 119 | ldr r12, =OMAP4_MON_SCU_PWR_INDEX | ||
| 120 | DO_SMC | ||
| 121 | ldmfd r13!, {r4-r12, r14} | ||
| 122 | b skip_scu_gp_set | ||
| 123 | scu_gp_set: | ||
| 124 | mrc p15, 0, r0, c0, c0, 5 @ Read MPIDR | ||
| 125 | ands r0, r0, #0x0f | ||
| 126 | ldreq r1, [r8, #SCU_OFFSET0] | ||
| 127 | ldrne r1, [r8, #SCU_OFFSET1] | ||
| 128 | bl omap4_get_scu_base | ||
| 129 | bl scu_power_mode | ||
| 130 | skip_scu_gp_set: | ||
| 131 | mrc p15, 0, r0, c1, c1, 2 @ Read NSACR data | ||
| 132 | tst r0, #(1 << 18) | ||
| 133 | mrcne p15, 0, r0, c1, c0, 1 | ||
| 134 | bicne r0, r0, #(1 << 6) @ Disable SMP bit | ||
| 135 | mcrne p15, 0, r0, c1, c0, 1 | ||
| 136 | isb | ||
| 137 | dsb | ||
| 138 | #ifdef CONFIG_CACHE_L2X0 | ||
| 139 | /* | ||
| 140 | * Clean and invalidate the L2 cache. | ||
| 141 | * Common cache-l2x0.c functions can't be used here since it | ||
| 142 | * uses spinlocks. We are out of coherency here with data cache | ||
| 143 | * disabled. The spinlock implementation uses exclusive load/store | ||
| 144 | * instruction which can fail without data cache being enabled. | ||
| 145 | * OMAP4 hardware doesn't support exclusive monitor which can | ||
| 146 | * overcome exclusive access issue. Because of this, CPU can | ||
| 147 | * lead to deadlock. | ||
| 148 | */ | ||
| 149 | bl omap4_get_sar_ram_base | ||
| 150 | mov r8, r0 | ||
| 151 | mrc p15, 0, r5, c0, c0, 5 @ Read MPIDR | ||
| 152 | ands r5, r5, #0x0f | ||
| 153 | ldreq r0, [r8, #L2X0_SAVE_OFFSET0] @ Retrieve L2 state from SAR | ||
| 154 | ldrne r0, [r8, #L2X0_SAVE_OFFSET1] @ memory. | ||
| 155 | cmp r0, #3 | ||
| 156 | bne do_WFI | ||
| 157 | #ifdef CONFIG_PL310_ERRATA_727915 | ||
| 158 | mov r0, #0x03 | ||
| 159 | mov r12, #OMAP4_MON_L2X0_DBG_CTRL_INDEX | ||
| 160 | DO_SMC | ||
| 161 | #endif | ||
| 162 | bl omap4_get_l2cache_base | ||
| 163 | mov r2, r0 | ||
| 164 | ldr r0, =0xffff | ||
| 165 | str r0, [r2, #L2X0_CLEAN_INV_WAY] | ||
| 166 | wait: | ||
| 167 | ldr r0, [r2, #L2X0_CLEAN_INV_WAY] | ||
| 168 | ldr r1, =0xffff | ||
| 169 | ands r0, r0, r1 | ||
| 170 | bne wait | ||
| 171 | #ifdef CONFIG_PL310_ERRATA_727915 | ||
| 172 | mov r0, #0x00 | ||
| 173 | mov r12, #OMAP4_MON_L2X0_DBG_CTRL_INDEX | ||
| 174 | DO_SMC | ||
| 175 | #endif | ||
| 176 | l2x_sync: | ||
| 177 | bl omap4_get_l2cache_base | ||
| 178 | mov r2, r0 | ||
| 179 | mov r0, #0x0 | ||
| 180 | str r0, [r2, #L2X0_CACHE_SYNC] | ||
| 181 | sync: | ||
| 182 | ldr r0, [r2, #L2X0_CACHE_SYNC] | ||
| 183 | ands r0, r0, #0x1 | ||
| 184 | bne sync | ||
| 185 | #endif | ||
| 186 | |||
| 187 | do_WFI: | ||
| 188 | bl omap_do_wfi | ||
| 189 | |||
| 190 | /* | ||
| 191 | * CPU is here when it failed to enter OFF/DORMANT or | ||
| 192 | * no low power state was attempted. | ||
| 193 | */ | ||
| 194 | mrc p15, 0, r0, c1, c0, 0 | ||
| 195 | tst r0, #(1 << 2) @ Check C bit enabled? | ||
| 196 | orreq r0, r0, #(1 << 2) @ Enable the C bit | ||
| 197 | mcreq p15, 0, r0, c1, c0, 0 | ||
| 198 | isb | ||
| 199 | |||
| 200 | /* | ||
| 201 | * Ensure the CPU power state is set to NORMAL in | ||
| 202 | * SCU power state so that CPU is back in coherency. | ||
| 203 | * In non-coherent mode CPU can lock-up and lead to | ||
| 204 | * system deadlock. | ||
| 205 | */ | ||
| 206 | mrc p15, 0, r0, c1, c0, 1 | ||
| 207 | tst r0, #(1 << 6) @ Check SMP bit enabled? | ||
| 208 | orreq r0, r0, #(1 << 6) | ||
| 209 | mcreq p15, 0, r0, c1, c0, 1 | ||
| 210 | isb | ||
| 211 | bl omap4_get_sar_ram_base | ||
| 212 | mov r8, r0 | ||
| 213 | ldr r9, [r8, #OMAP_TYPE_OFFSET] | ||
| 214 | cmp r9, #0x1 @ Check for HS device | ||
| 215 | bne scu_gp_clear | ||
| 216 | mov r0, #SCU_PM_NORMAL | ||
| 217 | mov r1, #0x00 | ||
| 218 | stmfd r13!, {r4-r12, r14} | ||
| 219 | ldr r12, =OMAP4_MON_SCU_PWR_INDEX | ||
| 220 | DO_SMC | ||
| 221 | ldmfd r13!, {r4-r12, r14} | ||
| 222 | b skip_scu_gp_clear | ||
| 223 | scu_gp_clear: | ||
| 224 | bl omap4_get_scu_base | ||
| 225 | mov r1, #SCU_PM_NORMAL | ||
| 226 | bl scu_power_mode | ||
| 227 | skip_scu_gp_clear: | ||
| 228 | isb | ||
| 229 | dsb | ||
| 230 | ldmfd sp!, {pc} | ||
| 231 | ENDPROC(omap4_finish_suspend) | ||
| 232 | |||
| 233 | /* | ||
| 234 | * ============================ | ||
| 235 | * == CPU resume entry point == | ||
| 236 | * ============================ | ||
| 237 | * | ||
| 238 | * void omap4_cpu_resume(void) | ||
| 239 | * | ||
| 240 | * ROM code jumps to this function while waking up from CPU | ||
| 241 | * OFF or DORMANT state. Physical address of the function is | ||
| 242 | * stored in the SAR RAM while entering to OFF or DORMANT mode. | ||
| 243 | * The restore function pointer is stored at CPUx_WAKEUP_NS_PA_ADDR_OFFSET. | ||
| 244 | */ | ||
| 245 | ENTRY(omap4_cpu_resume) | ||
| 246 | /* | ||
| 247 | * Configure ACTRL and enable NS SMP bit access on CPU1 on HS device. | ||
| 248 | * OMAP44XX EMU/HS devices - CPU0 SMP bit access is enabled in PPA | ||
| 249 | * init and for CPU1, a secure PPA API provided. CPU0 must be ON | ||
| 250 | * while executing NS_SMP API on CPU1 and PPA version must be 1.4.0+. | ||
| 251 | * OMAP443X GP devices- SMP bit isn't accessible. | ||
| 252 | * OMAP446X GP devices - SMP bit access is enabled on both CPUs. | ||
| 253 | */ | ||
| 254 | ldr r8, =OMAP44XX_SAR_RAM_BASE | ||
| 255 | ldr r9, [r8, #OMAP_TYPE_OFFSET] | ||
| 256 | cmp r9, #0x1 @ Skip if GP device | ||
| 257 | bne skip_ns_smp_enable | ||
| 258 | mrc p15, 0, r0, c0, c0, 5 | ||
| 259 | ands r0, r0, #0x0f | ||
| 260 | beq skip_ns_smp_enable | ||
| 261 | ppa_actrl_retry: | ||
| 262 | mov r0, #OMAP4_PPA_CPU_ACTRL_SMP_INDEX | ||
| 263 | adr r3, ppa_zero_params @ Pointer to parameters | ||
| 264 | mov r1, #0x0 @ Process ID | ||
| 265 | mov r2, #0x4 @ Flag | ||
| 266 | mov r6, #0xff | ||
| 267 | mov r12, #0x00 @ Secure Service ID | ||
| 268 | DO_SMC | ||
| 269 | cmp r0, #0x0 @ API returns 0 on success. | ||
| 270 | beq enable_smp_bit | ||
| 271 | b ppa_actrl_retry | ||
| 272 | enable_smp_bit: | ||
| 273 | mrc p15, 0, r0, c1, c0, 1 | ||
| 274 | tst r0, #(1 << 6) @ Check SMP bit enabled? | ||
| 275 | orreq r0, r0, #(1 << 6) | ||
| 276 | mcreq p15, 0, r0, c1, c0, 1 | ||
| 277 | isb | ||
| 278 | skip_ns_smp_enable: | ||
| 279 | #ifdef CONFIG_CACHE_L2X0 | ||
| 280 | /* | ||
| 281 | * Restore the L2 AUXCTRL and enable the L2 cache. | ||
| 282 | * OMAP4_MON_L2X0_AUXCTRL_INDEX = Program the L2X0 AUXCTRL | ||
| 283 | * OMAP4_MON_L2X0_CTRL_INDEX = Enable the L2 using L2X0 CTRL | ||
| 284 | * register r0 contains value to be programmed. | ||
| 285 | * L2 cache is already invalidate by ROM code as part | ||
| 286 | * of MPUSS OFF wakeup path. | ||
| 287 | */ | ||
| 288 | ldr r2, =OMAP44XX_L2CACHE_BASE | ||
| 289 | ldr r0, [r2, #L2X0_CTRL] | ||
| 290 | and r0, #0x0f | ||
| 291 | cmp r0, #1 | ||
| 292 | beq skip_l2en @ Skip if already enabled | ||
| 293 | ldr r3, =OMAP44XX_SAR_RAM_BASE | ||
| 294 | ldr r1, [r3, #OMAP_TYPE_OFFSET] | ||
| 295 | cmp r1, #0x1 @ Check for HS device | ||
| 296 | bne set_gp_por | ||
| 297 | ldr r0, =OMAP4_PPA_L2_POR_INDEX | ||
| 298 | ldr r1, =OMAP44XX_SAR_RAM_BASE | ||
| 299 | ldr r4, [r1, #L2X0_PREFETCH_CTRL_OFFSET] | ||
| 300 | adr r3, ppa_por_params | ||
| 301 | str r4, [r3, #0x04] | ||
| 302 | mov r1, #0x0 @ Process ID | ||
| 303 | mov r2, #0x4 @ Flag | ||
| 304 | mov r6, #0xff | ||
| 305 | mov r12, #0x00 @ Secure Service ID | ||
| 306 | DO_SMC | ||
| 307 | b set_aux_ctrl | ||
| 308 | set_gp_por: | ||
| 309 | ldr r1, =OMAP44XX_SAR_RAM_BASE | ||
| 310 | ldr r0, [r1, #L2X0_PREFETCH_CTRL_OFFSET] | ||
| 311 | ldr r12, =OMAP4_MON_L2X0_PREFETCH_INDEX @ Setup L2 PREFETCH | ||
| 312 | DO_SMC | ||
| 313 | set_aux_ctrl: | ||
| 314 | ldr r1, =OMAP44XX_SAR_RAM_BASE | ||
| 315 | ldr r0, [r1, #L2X0_AUXCTRL_OFFSET] | ||
| 316 | ldr r12, =OMAP4_MON_L2X0_AUXCTRL_INDEX @ Setup L2 AUXCTRL | ||
| 317 | DO_SMC | ||
| 318 | mov r0, #0x1 | ||
| 319 | ldr r12, =OMAP4_MON_L2X0_CTRL_INDEX @ Enable L2 cache | ||
| 320 | DO_SMC | ||
| 321 | skip_l2en: | ||
| 322 | #endif | ||
| 323 | |||
| 324 | b cpu_resume @ Jump to generic resume | ||
| 325 | ENDPROC(omap4_cpu_resume) | ||
| 326 | #endif | ||
| 327 | |||
| 328 | #ifndef CONFIG_OMAP4_ERRATA_I688 | ||
| 329 | ENTRY(omap_bus_sync) | ||
| 330 | mov pc, lr | ||
| 331 | ENDPROC(omap_bus_sync) | ||
| 332 | #endif | ||
| 333 | |||
| 334 | ENTRY(omap_do_wfi) | ||
| 335 | stmfd sp!, {lr} | ||
| 336 | /* Drain interconnect write buffers. */ | ||
| 337 | bl omap_bus_sync | ||
| 338 | |||
| 339 | /* | ||
| 340 | * Execute an ISB instruction to ensure that all of the | ||
| 341 | * CP15 register changes have been committed. | ||
| 342 | */ | ||
| 343 | isb | ||
| 344 | |||
| 345 | /* | ||
| 346 | * Execute a barrier instruction to ensure that all cache, | ||
| 347 | * TLB and branch predictor maintenance operations issued | ||
| 348 | * by any CPU in the cluster have completed. | ||
| 349 | */ | ||
| 350 | dsb | ||
| 351 | dmb | ||
| 352 | |||
| 353 | /* | ||
| 354 | * Execute a WFI instruction and wait until the | ||
| 355 | * STANDBYWFI output is asserted to indicate that the | ||
| 356 | * CPU is in idle and low power state. CPU can specualatively | ||
| 357 | * prefetch the instructions so add NOPs after WFI. Sixteen | ||
| 358 | * NOPs as per Cortex-A9 pipeline. | ||
| 359 | */ | ||
| 360 | wfi @ Wait For Interrupt | ||
| 361 | nop | ||
| 362 | nop | ||
| 363 | nop | ||
| 364 | nop | ||
| 365 | nop | ||
| 366 | nop | ||
| 367 | nop | ||
| 368 | nop | ||
| 369 | nop | ||
| 370 | nop | ||
| 371 | nop | ||
| 372 | nop | ||
| 373 | nop | ||
| 374 | nop | ||
| 375 | nop | ||
| 376 | nop | ||
| 377 | |||
| 378 | ldmfd sp!, {pc} | ||
| 379 | ENDPROC(omap_do_wfi) | ||
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index cf246b39bac7..9dd93453e563 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include <linux/slab.h> | 26 | #include <linux/slab.h> |
| 27 | #include <linux/pm_runtime.h> | 27 | #include <linux/pm_runtime.h> |
| 28 | 28 | ||
| 29 | #include <plat/common.h> | 29 | #include "common.h" |
| 30 | 30 | ||
| 31 | #include "pm.h" | 31 | #include "pm.h" |
| 32 | #include "smartreflex.h" | 32 | #include "smartreflex.h" |
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index 037b0d7d4e05..9edcd520510f 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #include <plat/dmtimer.h> | 41 | #include <plat/dmtimer.h> |
| 42 | #include <asm/localtimer.h> | 42 | #include <asm/localtimer.h> |
| 43 | #include <asm/sched_clock.h> | 43 | #include <asm/sched_clock.h> |
| 44 | #include <plat/common.h> | 44 | #include "common.h" |
| 45 | #include <plat/omap_hwmod.h> | 45 | #include <plat/omap_hwmod.h> |
| 46 | #include <plat/omap_device.h> | 46 | #include <plat/omap_device.h> |
| 47 | #include <plat/omap-pm.h> | 47 | #include <plat/omap-pm.h> |
diff --git a/arch/arm/mach-omap2/vc3xxx_data.c b/arch/arm/mach-omap2/vc3xxx_data.c index cfe348e1af0e..a5ec7f8f2ea8 100644 --- a/arch/arm/mach-omap2/vc3xxx_data.c +++ b/arch/arm/mach-omap2/vc3xxx_data.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/err.h> | 18 | #include <linux/err.h> |
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | 20 | ||
| 21 | #include <plat/common.h> | 21 | #include "common.h" |
| 22 | 22 | ||
| 23 | #include "prm-regbits-34xx.h" | 23 | #include "prm-regbits-34xx.h" |
| 24 | #include "voltage.h" | 24 | #include "voltage.h" |
diff --git a/arch/arm/mach-omap2/vc44xx_data.c b/arch/arm/mach-omap2/vc44xx_data.c index 2740a968145e..d70b930f2739 100644 --- a/arch/arm/mach-omap2/vc44xx_data.c +++ b/arch/arm/mach-omap2/vc44xx_data.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/err.h> | 18 | #include <linux/err.h> |
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | 20 | ||
| 21 | #include <plat/common.h> | 21 | #include "common.h" |
| 22 | 22 | ||
| 23 | #include "prm44xx.h" | 23 | #include "prm44xx.h" |
| 24 | #include "prm-regbits-44xx.h" | 24 | #include "prm-regbits-44xx.h" |
diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c index 1f8fdf736e63..8a36342e60d2 100644 --- a/arch/arm/mach-omap2/voltage.c +++ b/arch/arm/mach-omap2/voltage.c | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
| 28 | #include <linux/clk.h> | 28 | #include <linux/clk.h> |
| 29 | 29 | ||
| 30 | #include <plat/common.h> | 30 | #include "common.h" |
| 31 | 31 | ||
| 32 | #include "prm-regbits-34xx.h" | 32 | #include "prm-regbits-34xx.h" |
| 33 | #include "prm-regbits-44xx.h" | 33 | #include "prm-regbits-44xx.h" |
diff --git a/arch/arm/mach-omap2/voltagedomains3xxx_data.c b/arch/arm/mach-omap2/voltagedomains3xxx_data.c index 071101debbbc..474559d5b072 100644 --- a/arch/arm/mach-omap2/voltagedomains3xxx_data.c +++ b/arch/arm/mach-omap2/voltagedomains3xxx_data.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/err.h> | 18 | #include <linux/err.h> |
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | 20 | ||
| 21 | #include <plat/common.h> | 21 | #include "common.h" |
| 22 | #include <plat/cpu.h> | 22 | #include <plat/cpu.h> |
| 23 | 23 | ||
| 24 | #include "prm-regbits-34xx.h" | 24 | #include "prm-regbits-34xx.h" |
diff --git a/arch/arm/mach-omap2/voltagedomains44xx_data.c b/arch/arm/mach-omap2/voltagedomains44xx_data.c index c4584e9ac717..4e11d022595d 100644 --- a/arch/arm/mach-omap2/voltagedomains44xx_data.c +++ b/arch/arm/mach-omap2/voltagedomains44xx_data.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
| 22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
| 23 | 23 | ||
| 24 | #include <plat/common.h> | 24 | #include "common.h" |
| 25 | 25 | ||
| 26 | #include "prm-regbits-44xx.h" | 26 | #include "prm-regbits-44xx.h" |
| 27 | #include "prm44xx.h" | 27 | #include "prm44xx.h" |
diff --git a/arch/arm/mach-omap2/vp.c b/arch/arm/mach-omap2/vp.c index 66bd700a2b98..807391d84a9d 100644 --- a/arch/arm/mach-omap2/vp.c +++ b/arch/arm/mach-omap2/vp.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | #include <linux/kernel.h> | 1 | #include <linux/kernel.h> |
| 2 | #include <linux/init.h> | 2 | #include <linux/init.h> |
| 3 | 3 | ||
| 4 | #include <plat/common.h> | 4 | #include "common.h" |
| 5 | 5 | ||
| 6 | #include "voltage.h" | 6 | #include "voltage.h" |
| 7 | #include "vp.h" | 7 | #include "vp.h" |
diff --git a/arch/arm/mach-omap2/vp3xxx_data.c b/arch/arm/mach-omap2/vp3xxx_data.c index 260c554b1547..bd89f80089f5 100644 --- a/arch/arm/mach-omap2/vp3xxx_data.c +++ b/arch/arm/mach-omap2/vp3xxx_data.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #include <linux/err.h> | 19 | #include <linux/err.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | 21 | ||
| 22 | #include <plat/common.h> | 22 | #include "common.h" |
| 23 | 23 | ||
| 24 | #include "prm-regbits-34xx.h" | 24 | #include "prm-regbits-34xx.h" |
| 25 | #include "voltage.h" | 25 | #include "voltage.h" |
diff --git a/arch/arm/mach-omap2/vp44xx_data.c b/arch/arm/mach-omap2/vp44xx_data.c index b4e77044891e..8c031d16879e 100644 --- a/arch/arm/mach-omap2/vp44xx_data.c +++ b/arch/arm/mach-omap2/vp44xx_data.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #include <linux/err.h> | 19 | #include <linux/err.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | 21 | ||
| 22 | #include <plat/common.h> | 22 | #include "common.h" |
| 23 | 23 | ||
| 24 | #include "prm44xx.h" | 24 | #include "prm44xx.h" |
| 25 | #include "prm-regbits-44xx.h" | 25 | #include "prm-regbits-44xx.h" |
diff --git a/arch/arm/mach-orion5x/include/mach/io.h b/arch/arm/mach-orion5x/include/mach/io.h index c5196101a237..e9d9afdc2659 100644 --- a/arch/arm/mach-orion5x/include/mach/io.h +++ b/arch/arm/mach-orion5x/include/mach/io.h | |||
| @@ -15,31 +15,6 @@ | |||
| 15 | 15 | ||
| 16 | #define IO_SPACE_LIMIT 0xffffffff | 16 | #define IO_SPACE_LIMIT 0xffffffff |
| 17 | 17 | ||
| 18 | static inline void __iomem * | ||
| 19 | __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) | ||
| 20 | { | ||
| 21 | void __iomem *retval; | ||
| 22 | unsigned long offs = paddr - ORION5X_REGS_PHYS_BASE; | ||
| 23 | if (mtype == MT_DEVICE && size && offs < ORION5X_REGS_SIZE && | ||
| 24 | size <= ORION5X_REGS_SIZE && offs + size <= ORION5X_REGS_SIZE) { | ||
| 25 | retval = (void __iomem *)ORION5X_REGS_VIRT_BASE + offs; | ||
| 26 | } else { | ||
| 27 | retval = __arm_ioremap(paddr, size, mtype); | ||
| 28 | } | ||
| 29 | |||
| 30 | return retval; | ||
| 31 | } | ||
| 32 | |||
| 33 | static inline void | ||
| 34 | __arch_iounmap(void __iomem *addr) | ||
| 35 | { | ||
| 36 | if (addr < (void __iomem *)ORION5X_REGS_VIRT_BASE || | ||
| 37 | addr >= (void __iomem *)(ORION5X_REGS_VIRT_BASE + ORION5X_REGS_SIZE)) | ||
| 38 | __iounmap(addr); | ||
| 39 | } | ||
| 40 | |||
| 41 | #define __arch_ioremap __arch_ioremap | ||
| 42 | #define __arch_iounmap __arch_iounmap | ||
| 43 | #define __io(a) __typesafe_io(a) | 18 | #define __io(a) __typesafe_io(a) |
| 44 | #define __mem_pci(a) (a) | 19 | #define __mem_pci(a) (a) |
| 45 | 20 | ||
diff --git a/arch/arm/mach-orion5x/include/mach/vmalloc.h b/arch/arm/mach-orion5x/include/mach/vmalloc.h deleted file mode 100644 index 06b50aeff7b9..000000000000 --- a/arch/arm/mach-orion5x/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-orion5x/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | |||
| 5 | #define VMALLOC_END 0xfd800000UL | ||
diff --git a/arch/arm/mach-picoxcell/common.c b/arch/arm/mach-picoxcell/common.c index 34d08347be5f..ad871bd7b1ab 100644 --- a/arch/arm/mach-picoxcell/common.c +++ b/arch/arm/mach-picoxcell/common.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/irqdomain.h> | 11 | #include <linux/irqdomain.h> |
| 12 | #include <linux/of.h> | 12 | #include <linux/of.h> |
| 13 | #include <linux/of_address.h> | 13 | #include <linux/of_address.h> |
| 14 | #include <linux/of_irq.h> | ||
| 14 | #include <linux/of_platform.h> | 15 | #include <linux/of_platform.h> |
| 15 | 16 | ||
| 16 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
| @@ -33,22 +34,20 @@ static const char *picoxcell_dt_match[] = { | |||
| 33 | }; | 34 | }; |
| 34 | 35 | ||
| 35 | static const struct of_device_id vic_of_match[] __initconst = { | 36 | static const struct of_device_id vic_of_match[] __initconst = { |
| 36 | { .compatible = "arm,pl192-vic" }, | 37 | { .compatible = "arm,pl192-vic", .data = vic_of_init, }, |
| 37 | { /* Sentinel */ } | 38 | { /* Sentinel */ } |
| 38 | }; | 39 | }; |
| 39 | 40 | ||
| 40 | static void __init picoxcell_init_irq(void) | 41 | static void __init picoxcell_init_irq(void) |
| 41 | { | 42 | { |
| 42 | vic_init(IO_ADDRESS(PICOXCELL_VIC0_BASE), 0, ~0, 0); | 43 | of_irq_init(vic_of_match); |
| 43 | vic_init(IO_ADDRESS(PICOXCELL_VIC1_BASE), 32, ~0, 0); | ||
| 44 | irq_domain_generate_simple(vic_of_match, PICOXCELL_VIC0_BASE, 0); | ||
| 45 | irq_domain_generate_simple(vic_of_match, PICOXCELL_VIC1_BASE, 32); | ||
| 46 | } | 44 | } |
| 47 | 45 | ||
| 48 | DT_MACHINE_START(PICOXCELL, "Picochip picoXcell") | 46 | DT_MACHINE_START(PICOXCELL, "Picochip picoXcell") |
| 49 | .map_io = picoxcell_map_io, | 47 | .map_io = picoxcell_map_io, |
| 50 | .nr_irqs = ARCH_NR_IRQS, | 48 | .nr_irqs = ARCH_NR_IRQS, |
| 51 | .init_irq = picoxcell_init_irq, | 49 | .init_irq = picoxcell_init_irq, |
| 50 | .handle_irq = vic_handle_irq, | ||
| 52 | .timer = &picoxcell_timer, | 51 | .timer = &picoxcell_timer, |
| 53 | .init_machine = picoxcell_init_machine, | 52 | .init_machine = picoxcell_init_machine, |
| 54 | .dt_compat = picoxcell_dt_match, | 53 | .dt_compat = picoxcell_dt_match, |
diff --git a/arch/arm/mach-picoxcell/include/mach/entry-macro.S b/arch/arm/mach-picoxcell/include/mach/entry-macro.S index a6b09f75d9df..9b505ac00be9 100644 --- a/arch/arm/mach-picoxcell/include/mach/entry-macro.S +++ b/arch/arm/mach-picoxcell/include/mach/entry-macro.S | |||
| @@ -9,11 +9,8 @@ | |||
| 9 | * License version 2. This program is licensed "as is" without any | 9 | * License version 2. This program is licensed "as is" without any |
| 10 | * warranty of any kind, whether express or implied. | 10 | * warranty of any kind, whether express or implied. |
| 11 | */ | 11 | */ |
| 12 | #include <mach/hardware.h> | 12 | .macro disable_fiq |
| 13 | #include <mach/irqs.h> | 13 | .endm |
| 14 | #include <mach/map.h> | ||
| 15 | 14 | ||
| 16 | #define VA_VIC0 IO_ADDRESS(PICOXCELL_VIC0_BASE) | 15 | .macro arch_ret_to_user, tmp1, tmp2 |
| 17 | #define VA_VIC1 IO_ADDRESS(PICOXCELL_VIC1_BASE) | 16 | .endm |
| 18 | |||
| 19 | #include <asm/entry-macro-vic2.S> | ||
diff --git a/arch/arm/mach-picoxcell/include/mach/vmalloc.h b/arch/arm/mach-picoxcell/include/mach/vmalloc.h deleted file mode 100644 index 0216cc4b1f0b..000000000000 --- a/arch/arm/mach-picoxcell/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2011 Picochip Ltd., Jamie Iles | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | */ | ||
| 14 | #define VMALLOC_END 0xfe000000UL | ||
diff --git a/arch/arm/mach-pnx4008/include/mach/system.h b/arch/arm/mach-pnx4008/include/mach/system.h index 5dda2bb55f8d..5d6384a6128c 100644 --- a/arch/arm/mach-pnx4008/include/mach/system.h +++ b/arch/arm/mach-pnx4008/include/mach/system.h | |||
| @@ -32,7 +32,7 @@ static void arch_idle(void) | |||
| 32 | 32 | ||
| 33 | static inline void arch_reset(char mode, const char *cmd) | 33 | static inline void arch_reset(char mode, const char *cmd) |
| 34 | { | 34 | { |
| 35 | cpu_reset(0); | 35 | soft_restart(0); |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | #endif | 38 | #endif |
diff --git a/arch/arm/mach-pnx4008/include/mach/vmalloc.h b/arch/arm/mach-pnx4008/include/mach/vmalloc.h deleted file mode 100644 index 184913c71141..000000000000 --- a/arch/arm/mach-pnx4008/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-pnx4008/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Author: Vitaly Wool <source@mvista.com> | ||
| 5 | * | ||
| 6 | * 2006 (c) MontaVista Software, Inc. This file is licensed under | ||
| 7 | * the terms of the GNU General Public License version 2. This program | ||
| 8 | * is licensed "as is" without any warranty of any kind, whether express | ||
| 9 | * or implied. | ||
| 10 | */ | ||
| 11 | |||
| 12 | /* | ||
| 13 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
| 14 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
| 15 | * physical memory until the kernel virtual memory starts. That means that | ||
| 16 | * any out-of-bounds memory accesses will hopefully be caught. | ||
| 17 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
| 18 | * area for the same reason. ;) | ||
| 19 | */ | ||
| 20 | #define VMALLOC_END 0xd0000000UL | ||
diff --git a/arch/arm/mach-prima2/include/mach/map.h b/arch/arm/mach-prima2/include/mach/map.h index 66b1ae2e553f..6f243532570c 100644 --- a/arch/arm/mach-prima2/include/mach/map.h +++ b/arch/arm/mach-prima2/include/mach/map.h | |||
| @@ -9,8 +9,10 @@ | |||
| 9 | #ifndef __MACH_PRIMA2_MAP_H__ | 9 | #ifndef __MACH_PRIMA2_MAP_H__ |
| 10 | #define __MACH_PRIMA2_MAP_H__ | 10 | #define __MACH_PRIMA2_MAP_H__ |
| 11 | 11 | ||
| 12 | #include <mach/vmalloc.h> | 12 | #include <linux/const.h> |
| 13 | 13 | ||
| 14 | #define SIRFSOC_VA(x) (VMALLOC_END + ((x) & 0x00FFF000)) | 14 | #define SIRFSOC_VA_BASE _AC(0xFEC00000, UL) |
| 15 | |||
| 16 | #define SIRFSOC_VA(x) (SIRFSOC_VA_BASE + ((x) & 0x00FFF000)) | ||
| 15 | 17 | ||
| 16 | #endif | 18 | #endif |
diff --git a/arch/arm/mach-prima2/include/mach/vmalloc.h b/arch/arm/mach-prima2/include/mach/vmalloc.h deleted file mode 100644 index c9f90fec78e3..000000000000 --- a/arch/arm/mach-prima2/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,16 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/ach-prima2/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (c) 2010 – 2011 Cambridge Silicon Radio Limited, a CSR plc group company. | ||
| 5 | * | ||
| 6 | * Licensed under GPLv2 or later. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef __MACH_VMALLOC_H | ||
| 10 | #define __MACH_VMALLOC_H | ||
| 11 | |||
| 12 | #include <linux/const.h> | ||
| 13 | |||
| 14 | #define VMALLOC_END _AC(0xFEC00000, UL) | ||
| 15 | |||
| 16 | #endif | ||
diff --git a/arch/arm/mach-pxa/include/mach/entry-macro.S b/arch/arm/mach-pxa/include/mach/entry-macro.S index a73bc86a3c26..260c0c17692a 100644 --- a/arch/arm/mach-pxa/include/mach/entry-macro.S +++ b/arch/arm/mach-pxa/include/mach/entry-macro.S | |||
| @@ -7,45 +7,9 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <mach/hardware.h> | ||
| 11 | #include <mach/irqs.h> | ||
| 12 | 10 | ||
| 13 | .macro disable_fiq | 11 | .macro disable_fiq |
| 14 | .endm | 12 | .endm |
| 15 | 13 | ||
| 16 | .macro get_irqnr_preamble, base, tmp | ||
| 17 | .endm | ||
| 18 | |||
| 19 | .macro arch_ret_to_user, tmp1, tmp2 | 14 | .macro arch_ret_to_user, tmp1, tmp2 |
| 20 | .endm | 15 | .endm |
| 21 | |||
| 22 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 23 | mrc p15, 0, \tmp, c0, c0, 0 @ CPUID | ||
| 24 | mov \tmp, \tmp, lsr #13 | ||
| 25 | and \tmp, \tmp, #0x7 @ Core G | ||
| 26 | cmp \tmp, #1 | ||
| 27 | bhi 1002f | ||
| 28 | |||
| 29 | @ Core Generation 1 (PXA25x) | ||
| 30 | mov \base, #io_p2v(0x40000000) @ IIR Ctl = 0x40d00000 | ||
| 31 | add \base, \base, #0x00d00000 | ||
| 32 | ldr \irqstat, [\base, #0] @ ICIP | ||
| 33 | ldr \irqnr, [\base, #4] @ ICMR | ||
| 34 | |||
| 35 | ands \irqnr, \irqstat, \irqnr | ||
| 36 | beq 1001f | ||
| 37 | rsb \irqstat, \irqnr, #0 | ||
| 38 | and \irqstat, \irqstat, \irqnr | ||
| 39 | clz \irqnr, \irqstat | ||
| 40 | rsb \irqnr, \irqnr, #(31 + PXA_IRQ(0)) | ||
| 41 | b 1001f | ||
| 42 | 1002: | ||
| 43 | @ Core Generation 2 (PXA27x) or Core Generation 3 (PXA3xx) | ||
| 44 | mrc p6, 0, \irqstat, c5, c0, 0 @ ICHP | ||
| 45 | tst \irqstat, #0x80000000 | ||
| 46 | beq 1001f | ||
| 47 | bic \irqstat, \irqstat, #0x80000000 | ||
| 48 | mov \irqnr, \irqstat, lsr #16 | ||
| 49 | add \irqnr, \irqnr, #(PXA_IRQ(0)) | ||
| 50 | 1001: | ||
| 51 | .endm | ||
diff --git a/arch/arm/mach-pxa/include/mach/vmalloc.h b/arch/arm/mach-pxa/include/mach/vmalloc.h deleted file mode 100644 index bfecfbf5f460..000000000000 --- a/arch/arm/mach-pxa/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,11 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-pxa/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Author: Nicolas Pitre | ||
| 5 | * Copyright: (C) 2001 MontaVista Software Inc. | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | #define VMALLOC_END (0xe8000000UL) | ||
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c index b938fc2c316a..4f47a760398f 100644 --- a/arch/arm/mach-pxa/mioa701.c +++ b/arch/arm/mach-pxa/mioa701.c | |||
| @@ -752,6 +752,7 @@ static void mioa701_machine_exit(void) | |||
| 752 | 752 | ||
| 753 | MACHINE_START(MIOA701, "MIO A701") | 753 | MACHINE_START(MIOA701, "MIO A701") |
| 754 | .atag_offset = 0x100, | 754 | .atag_offset = 0x100, |
| 755 | .restart_mode = 's', | ||
| 755 | .map_io = &pxa27x_map_io, | 756 | .map_io = &pxa27x_map_io, |
| 756 | .init_irq = &pxa27x_init_irq, | 757 | .init_irq = &pxa27x_init_irq, |
| 757 | .handle_irq = &pxa27x_handle_irq, | 758 | .handle_irq = &pxa27x_handle_irq, |
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index 50c833177866..afcb48a5792c 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
| @@ -420,17 +420,11 @@ static void poodle_poweroff(void) | |||
| 420 | arm_machine_restart('h', NULL); | 420 | arm_machine_restart('h', NULL); |
| 421 | } | 421 | } |
| 422 | 422 | ||
| 423 | static void poodle_restart(char mode, const char *cmd) | ||
| 424 | { | ||
| 425 | arm_machine_restart('h', cmd); | ||
| 426 | } | ||
| 427 | |||
| 428 | static void __init poodle_init(void) | 423 | static void __init poodle_init(void) |
| 429 | { | 424 | { |
| 430 | int ret = 0; | 425 | int ret = 0; |
| 431 | 426 | ||
| 432 | pm_power_off = poodle_poweroff; | 427 | pm_power_off = poodle_poweroff; |
| 433 | arm_pm_restart = poodle_restart; | ||
| 434 | 428 | ||
| 435 | PCFR |= PCFR_OPDE; | 429 | PCFR |= PCFR_OPDE; |
| 436 | 430 | ||
diff --git a/arch/arm/mach-pxa/reset.c b/arch/arm/mach-pxa/reset.c index 01e9d643394a..b8bcda15da81 100644 --- a/arch/arm/mach-pxa/reset.c +++ b/arch/arm/mach-pxa/reset.c | |||
| @@ -88,7 +88,7 @@ void arch_reset(char mode, const char *cmd) | |||
| 88 | switch (mode) { | 88 | switch (mode) { |
| 89 | case 's': | 89 | case 's': |
| 90 | /* Jump into ROM at address 0 */ | 90 | /* Jump into ROM at address 0 */ |
| 91 | cpu_reset(0); | 91 | soft_restart(0); |
| 92 | break; | 92 | break; |
| 93 | case 'g': | 93 | case 'g': |
| 94 | do_gpio_reset(); | 94 | do_gpio_reset(); |
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index 953a9195f9e5..2f57d94de727 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
| @@ -982,6 +982,7 @@ static void __init spitz_fixup(struct tag *tags, char **cmdline, | |||
| 982 | 982 | ||
| 983 | #ifdef CONFIG_MACH_SPITZ | 983 | #ifdef CONFIG_MACH_SPITZ |
| 984 | MACHINE_START(SPITZ, "SHARP Spitz") | 984 | MACHINE_START(SPITZ, "SHARP Spitz") |
| 985 | .restart_mode = 'g', | ||
| 985 | .fixup = spitz_fixup, | 986 | .fixup = spitz_fixup, |
| 986 | .map_io = pxa27x_map_io, | 987 | .map_io = pxa27x_map_io, |
| 987 | .init_irq = pxa27x_init_irq, | 988 | .init_irq = pxa27x_init_irq, |
| @@ -993,6 +994,7 @@ MACHINE_END | |||
| 993 | 994 | ||
| 994 | #ifdef CONFIG_MACH_BORZOI | 995 | #ifdef CONFIG_MACH_BORZOI |
| 995 | MACHINE_START(BORZOI, "SHARP Borzoi") | 996 | MACHINE_START(BORZOI, "SHARP Borzoi") |
| 997 | .restart_mode = 'g', | ||
| 996 | .fixup = spitz_fixup, | 998 | .fixup = spitz_fixup, |
| 997 | .map_io = pxa27x_map_io, | 999 | .map_io = pxa27x_map_io, |
| 998 | .init_irq = pxa27x_init_irq, | 1000 | .init_irq = pxa27x_init_irq, |
| @@ -1004,6 +1006,7 @@ MACHINE_END | |||
| 1004 | 1006 | ||
| 1005 | #ifdef CONFIG_MACH_AKITA | 1007 | #ifdef CONFIG_MACH_AKITA |
| 1006 | MACHINE_START(AKITA, "SHARP Akita") | 1008 | MACHINE_START(AKITA, "SHARP Akita") |
| 1009 | .restart_mode = 'g', | ||
| 1007 | .fixup = spitz_fixup, | 1010 | .fixup = spitz_fixup, |
| 1008 | .map_io = pxa27x_map_io, | 1011 | .map_io = pxa27x_map_io, |
| 1009 | .init_irq = pxa27x_init_irq, | 1012 | .init_irq = pxa27x_init_irq, |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index 402b0c96613b..ef6453041cf1 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
| @@ -970,6 +970,7 @@ static void __init fixup_tosa(struct tag *tags, char **cmdline, | |||
| 970 | } | 970 | } |
| 971 | 971 | ||
| 972 | MACHINE_START(TOSA, "SHARP Tosa") | 972 | MACHINE_START(TOSA, "SHARP Tosa") |
| 973 | .restart_mode = 'g', | ||
| 973 | .fixup = fixup_tosa, | 974 | .fixup = fixup_tosa, |
| 974 | .map_io = pxa25x_map_io, | 975 | .map_io = pxa25x_map_io, |
| 975 | .nr_irqs = TOSA_NR_IRQS, | 976 | .nr_irqs = TOSA_NR_IRQS, |
diff --git a/arch/arm/mach-realview/include/mach/entry-macro.S b/arch/arm/mach-realview/include/mach/entry-macro.S index 4071164aebaa..e8a5179c2653 100644 --- a/arch/arm/mach-realview/include/mach/entry-macro.S +++ b/arch/arm/mach-realview/include/mach/entry-macro.S | |||
| @@ -7,8 +7,6 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <mach/hardware.h> | ||
| 11 | #include <asm/hardware/entry-macro-gic.S> | ||
| 12 | 10 | ||
| 13 | .macro disable_fiq | 11 | .macro disable_fiq |
| 14 | .endm | 12 | .endm |
diff --git a/arch/arm/mach-realview/include/mach/vmalloc.h b/arch/arm/mach-realview/include/mach/vmalloc.h deleted file mode 100644 index a2a4c6861407..000000000000 --- a/arch/arm/mach-realview/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,21 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-realview/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2003 ARM Limited | ||
| 5 | * Copyright (C) 2000 Russell King. | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 20 | */ | ||
| 21 | #define VMALLOC_END 0xf8000000UL | ||
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index 026c66ad7ec2..1ca944aea7f8 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c | |||
| @@ -91,8 +91,8 @@ static struct map_desc realview_eb_io_desc[] __initdata = { | |||
| 91 | 91 | ||
| 92 | static struct map_desc realview_eb11mp_io_desc[] __initdata = { | 92 | static struct map_desc realview_eb11mp_io_desc[] __initdata = { |
| 93 | { | 93 | { |
| 94 | .virtual = IO_ADDRESS(REALVIEW_EB11MP_GIC_CPU_BASE), | 94 | .virtual = IO_ADDRESS(REALVIEW_EB11MP_SCU_BASE), |
| 95 | .pfn = __phys_to_pfn(REALVIEW_EB11MP_GIC_CPU_BASE), | 95 | .pfn = __phys_to_pfn(REALVIEW_EB11MP_SCU_BASE), |
| 96 | .length = SZ_4K, | 96 | .length = SZ_4K, |
| 97 | .type = MT_DEVICE, | 97 | .type = MT_DEVICE, |
| 98 | }, { | 98 | }, { |
| @@ -469,6 +469,7 @@ MACHINE_START(REALVIEW_EB, "ARM-RealView EB") | |||
| 469 | .init_early = realview_init_early, | 469 | .init_early = realview_init_early, |
| 470 | .init_irq = gic_init_irq, | 470 | .init_irq = gic_init_irq, |
| 471 | .timer = &realview_eb_timer, | 471 | .timer = &realview_eb_timer, |
| 472 | .handle_irq = gic_handle_irq, | ||
| 472 | .init_machine = realview_eb_init, | 473 | .init_machine = realview_eb_init, |
| 473 | #ifdef CONFIG_ZONE_DMA | 474 | #ifdef CONFIG_ZONE_DMA |
| 474 | .dma_zone_size = SZ_256M, | 475 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-realview/realview_pb1176.c b/arch/arm/mach-realview/realview_pb1176.c index c057540ec776..bd8fec8b20d9 100644 --- a/arch/arm/mach-realview/realview_pb1176.c +++ b/arch/arm/mach-realview/realview_pb1176.c | |||
| @@ -392,6 +392,7 @@ MACHINE_START(REALVIEW_PB1176, "ARM-RealView PB1176") | |||
| 392 | .init_early = realview_init_early, | 392 | .init_early = realview_init_early, |
| 393 | .init_irq = gic_init_irq, | 393 | .init_irq = gic_init_irq, |
| 394 | .timer = &realview_pb1176_timer, | 394 | .timer = &realview_pb1176_timer, |
| 395 | .handle_irq = gic_handle_irq, | ||
| 395 | .init_machine = realview_pb1176_init, | 396 | .init_machine = realview_pb1176_init, |
| 396 | #ifdef CONFIG_ZONE_DMA | 397 | #ifdef CONFIG_ZONE_DMA |
| 397 | .dma_zone_size = SZ_256M, | 398 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-realview/realview_pb11mp.c b/arch/arm/mach-realview/realview_pb11mp.c index 671ad6d6ff00..fa73ba81a449 100644 --- a/arch/arm/mach-realview/realview_pb11mp.c +++ b/arch/arm/mach-realview/realview_pb11mp.c | |||
| @@ -366,6 +366,7 @@ MACHINE_START(REALVIEW_PB11MP, "ARM-RealView PB11MPCore") | |||
| 366 | .init_early = realview_init_early, | 366 | .init_early = realview_init_early, |
| 367 | .init_irq = gic_init_irq, | 367 | .init_irq = gic_init_irq, |
| 368 | .timer = &realview_pb11mp_timer, | 368 | .timer = &realview_pb11mp_timer, |
| 369 | .handle_irq = gic_handle_irq, | ||
| 369 | .init_machine = realview_pb11mp_init, | 370 | .init_machine = realview_pb11mp_init, |
| 370 | #ifdef CONFIG_ZONE_DMA | 371 | #ifdef CONFIG_ZONE_DMA |
| 371 | .dma_zone_size = SZ_256M, | 372 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-realview/realview_pba8.c b/arch/arm/mach-realview/realview_pba8.c index cbf22df4ad5b..6e5f2b9ddb7e 100644 --- a/arch/arm/mach-realview/realview_pba8.c +++ b/arch/arm/mach-realview/realview_pba8.c | |||
| @@ -316,6 +316,7 @@ MACHINE_START(REALVIEW_PBA8, "ARM-RealView PB-A8") | |||
| 316 | .init_early = realview_init_early, | 316 | .init_early = realview_init_early, |
| 317 | .init_irq = gic_init_irq, | 317 | .init_irq = gic_init_irq, |
| 318 | .timer = &realview_pba8_timer, | 318 | .timer = &realview_pba8_timer, |
| 319 | .handle_irq = gic_handle_irq, | ||
| 319 | .init_machine = realview_pba8_init, | 320 | .init_machine = realview_pba8_init, |
| 320 | #ifdef CONFIG_ZONE_DMA | 321 | #ifdef CONFIG_ZONE_DMA |
| 321 | .dma_zone_size = SZ_256M, | 322 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c index 63c4114afae9..7aabc21af01c 100644 --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c | |||
| @@ -98,8 +98,8 @@ static struct map_desc realview_pbx_io_desc[] __initdata = { | |||
| 98 | 98 | ||
| 99 | static struct map_desc realview_local_io_desc[] __initdata = { | 99 | static struct map_desc realview_local_io_desc[] __initdata = { |
| 100 | { | 100 | { |
| 101 | .virtual = IO_ADDRESS(REALVIEW_PBX_TILE_GIC_CPU_BASE), | 101 | .virtual = IO_ADDRESS(REALVIEW_PBX_TILE_SCU_BASE), |
| 102 | .pfn = __phys_to_pfn(REALVIEW_PBX_TILE_GIC_CPU_BASE), | 102 | .pfn = __phys_to_pfn(REALVIEW_PBX_TILE_SCU_BASE), |
| 103 | .length = SZ_4K, | 103 | .length = SZ_4K, |
| 104 | .type = MT_DEVICE, | 104 | .type = MT_DEVICE, |
| 105 | }, { | 105 | }, { |
| @@ -399,6 +399,7 @@ MACHINE_START(REALVIEW_PBX, "ARM-RealView PBX") | |||
| 399 | .init_early = realview_init_early, | 399 | .init_early = realview_init_early, |
| 400 | .init_irq = gic_init_irq, | 400 | .init_irq = gic_init_irq, |
| 401 | .timer = &realview_pbx_timer, | 401 | .timer = &realview_pbx_timer, |
| 402 | .handle_irq = gic_handle_irq, | ||
| 402 | .init_machine = realview_pbx_init, | 403 | .init_machine = realview_pbx_init, |
| 403 | #ifdef CONFIG_ZONE_DMA | 404 | #ifdef CONFIG_ZONE_DMA |
| 404 | .dma_zone_size = SZ_256M, | 405 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-rpc/include/mach/system.h b/arch/arm/mach-rpc/include/mach/system.h index 45c7b935dc45..a354f4d092c8 100644 --- a/arch/arm/mach-rpc/include/mach/system.h +++ b/arch/arm/mach-rpc/include/mach/system.h | |||
| @@ -23,5 +23,5 @@ static inline void arch_reset(char mode, const char *cmd) | |||
| 23 | /* | 23 | /* |
| 24 | * Jump into the ROM | 24 | * Jump into the ROM |
| 25 | */ | 25 | */ |
| 26 | cpu_reset(0); | 26 | soft_restart(0); |
| 27 | } | 27 | } |
diff --git a/arch/arm/mach-rpc/include/mach/vmalloc.h b/arch/arm/mach-rpc/include/mach/vmalloc.h deleted file mode 100644 index fb700228637a..000000000000 --- a/arch/arm/mach-rpc/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-rpc/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 1997 Russell King | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | #define VMALLOC_END 0xdc000000UL | ||
diff --git a/arch/arm/mach-s3c2410/include/mach/system-reset.h b/arch/arm/mach-s3c2410/include/mach/system-reset.h index 6faadcee7729..913893d44650 100644 --- a/arch/arm/mach-s3c2410/include/mach/system-reset.h +++ b/arch/arm/mach-s3c2410/include/mach/system-reset.h | |||
| @@ -19,7 +19,7 @@ static void | |||
| 19 | arch_reset(char mode, const char *cmd) | 19 | arch_reset(char mode, const char *cmd) |
| 20 | { | 20 | { |
| 21 | if (mode == 's') { | 21 | if (mode == 's') { |
| 22 | cpu_reset(0); | 22 | soft_restart(0); |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | if (s3c24xx_reset_hook) | 25 | if (s3c24xx_reset_hook) |
| @@ -28,5 +28,5 @@ arch_reset(char mode, const char *cmd) | |||
| 28 | arch_wdt_reset(); | 28 | arch_wdt_reset(); |
| 29 | 29 | ||
| 30 | /* we'll take a jump through zero as a poor second */ | 30 | /* we'll take a jump through zero as a poor second */ |
| 31 | cpu_reset(0); | 31 | soft_restart(0); |
| 32 | } | 32 | } |
diff --git a/arch/arm/mach-s3c2410/include/mach/vmalloc.h b/arch/arm/mach-s3c2410/include/mach/vmalloc.h deleted file mode 100644 index 7a311e8dddba..000000000000 --- a/arch/arm/mach-s3c2410/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* arch/arm/mach-s3c2410/include/mach/vmalloc.h | ||
| 2 | * | ||
| 3 | * from arch/arm/mach-iop3xx/include/mach/vmalloc.h | ||
| 4 | * | ||
| 5 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
| 6 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | * S3C2410 vmalloc definition | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 16 | #define __ASM_ARCH_VMALLOC_H | ||
| 17 | |||
| 18 | #define VMALLOC_END 0xF6000000UL | ||
| 19 | |||
| 20 | #endif /* __ASM_ARCH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-s3c64xx/include/mach/entry-macro.S b/arch/arm/mach-s3c64xx/include/mach/entry-macro.S index dd362604dcce..dc2bc15142ce 100644 --- a/arch/arm/mach-s3c64xx/include/mach/entry-macro.S +++ b/arch/arm/mach-s3c64xx/include/mach/entry-macro.S | |||
| @@ -12,7 +12,8 @@ | |||
| 12 | * warranty of any kind, whether express or implied. | 12 | * warranty of any kind, whether express or implied. |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #include <mach/map.h> | 15 | .macro disable_fiq |
| 16 | #include <mach/irqs.h> | 16 | .endm |
| 17 | 17 | ||
| 18 | #include <asm/entry-macro-vic2.S> | 18 | .macro arch_ret_to_user, tmp1, tmp2 |
| 19 | .endm | ||
diff --git a/arch/arm/mach-s3c64xx/include/mach/system.h b/arch/arm/mach-s3c64xx/include/mach/system.h index 2e58cb7a7147..d8ca5786ba25 100644 --- a/arch/arm/mach-s3c64xx/include/mach/system.h +++ b/arch/arm/mach-s3c64xx/include/mach/system.h | |||
| @@ -24,7 +24,7 @@ static void arch_reset(char mode, const char *cmd) | |||
| 24 | arch_wdt_reset(); | 24 | arch_wdt_reset(); |
| 25 | 25 | ||
| 26 | /* if all else fails, or mode was for soft, jump to 0 */ | 26 | /* if all else fails, or mode was for soft, jump to 0 */ |
| 27 | cpu_reset(0); | 27 | soft_restart(0); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | #endif /* __ASM_ARCH_IRQ_H */ | 30 | #endif /* __ASM_ARCH_IRQ_H */ |
diff --git a/arch/arm/mach-s3c64xx/include/mach/vmalloc.h b/arch/arm/mach-s3c64xx/include/mach/vmalloc.h deleted file mode 100644 index 23f75e556a30..000000000000 --- a/arch/arm/mach-s3c64xx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* arch/arm/mach-s3c64xx/include/mach/vmalloc.h | ||
| 2 | * | ||
| 3 | * from arch/arm/mach-iop3xx/include/mach/vmalloc.h | ||
| 4 | * | ||
| 5 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
| 6 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | * S3C6400 vmalloc definition | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 16 | #define __ASM_ARCH_VMALLOC_H | ||
| 17 | |||
| 18 | #define VMALLOC_END 0xF6000000UL | ||
| 19 | |||
| 20 | #endif /* __ASM_ARCH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-s3c64xx/mach-anw6410.c b/arch/arm/mach-s3c64xx/mach-anw6410.c index 8eba88e7209e..2bbc14d93428 100644 --- a/arch/arm/mach-s3c64xx/mach-anw6410.c +++ b/arch/arm/mach-s3c64xx/mach-anw6410.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | 30 | ||
| 31 | #include <video/platform_lcd.h> | 31 | #include <video/platform_lcd.h> |
| 32 | 32 | ||
| 33 | #include <asm/hardware/vic.h> | ||
| 33 | #include <asm/mach/arch.h> | 34 | #include <asm/mach/arch.h> |
| 34 | #include <asm/mach/map.h> | 35 | #include <asm/mach/map.h> |
| 35 | #include <asm/mach/irq.h> | 36 | #include <asm/mach/irq.h> |
| @@ -236,6 +237,7 @@ MACHINE_START(ANW6410, "A&W6410") | |||
| 236 | .atag_offset = 0x100, | 237 | .atag_offset = 0x100, |
| 237 | 238 | ||
| 238 | .init_irq = s3c6410_init_irq, | 239 | .init_irq = s3c6410_init_irq, |
| 240 | .handle_irq = vic_handle_irq, | ||
| 239 | .map_io = anw6410_map_io, | 241 | .map_io = anw6410_map_io, |
| 240 | .init_machine = anw6410_machine_init, | 242 | .init_machine = anw6410_machine_init, |
| 241 | .timer = &s3c24xx_timer, | 243 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c index d04b65448510..988ac2e48f08 100644 --- a/arch/arm/mach-s3c64xx/mach-crag6410.c +++ b/arch/arm/mach-s3c64xx/mach-crag6410.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #include <linux/mfd/wm831x/irq.h> | 37 | #include <linux/mfd/wm831x/irq.h> |
| 38 | #include <linux/mfd/wm831x/gpio.h> | 38 | #include <linux/mfd/wm831x/gpio.h> |
| 39 | 39 | ||
| 40 | #include <asm/hardware/vic.h> | ||
| 40 | #include <asm/mach/arch.h> | 41 | #include <asm/mach/arch.h> |
| 41 | #include <asm/mach-types.h> | 42 | #include <asm/mach-types.h> |
| 42 | 43 | ||
| @@ -711,6 +712,7 @@ MACHINE_START(WLF_CRAGG_6410, "Wolfson Cragganmore 6410") | |||
| 711 | /* Maintainer: Mark Brown <broonie@opensource.wolfsonmicro.com> */ | 712 | /* Maintainer: Mark Brown <broonie@opensource.wolfsonmicro.com> */ |
| 712 | .atag_offset = 0x100, | 713 | .atag_offset = 0x100, |
| 713 | .init_irq = s3c6410_init_irq, | 714 | .init_irq = s3c6410_init_irq, |
| 715 | .handle_irq = vic_handle_irq, | ||
| 714 | .map_io = crag6410_map_io, | 716 | .map_io = crag6410_map_io, |
| 715 | .init_machine = crag6410_machine_init, | 717 | .init_machine = crag6410_machine_init, |
| 716 | .timer = &s3c24xx_timer, | 718 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-hmt.c b/arch/arm/mach-s3c64xx/mach-hmt.c index 952f75ff5deb..c5955f301709 100644 --- a/arch/arm/mach-s3c64xx/mach-hmt.c +++ b/arch/arm/mach-s3c64xx/mach-hmt.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
| 30 | #include <mach/map.h> | 30 | #include <mach/map.h> |
| 31 | 31 | ||
| 32 | #include <asm/hardware/vic.h> | ||
| 32 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| 33 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 34 | 35 | ||
| @@ -267,6 +268,7 @@ MACHINE_START(HMT, "Airgoo-HMT") | |||
| 267 | /* Maintainer: Peter Korsgaard <jacmet@sunsite.dk> */ | 268 | /* Maintainer: Peter Korsgaard <jacmet@sunsite.dk> */ |
| 268 | .atag_offset = 0x100, | 269 | .atag_offset = 0x100, |
| 269 | .init_irq = s3c6410_init_irq, | 270 | .init_irq = s3c6410_init_irq, |
| 271 | .handle_irq = vic_handle_irq, | ||
| 270 | .map_io = hmt_map_io, | 272 | .map_io = hmt_map_io, |
| 271 | .init_machine = hmt_machine_init, | 273 | .init_machine = hmt_machine_init, |
| 272 | .timer = &s3c24xx_timer, | 274 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-mini6410.c b/arch/arm/mach-s3c64xx/mach-mini6410.c index 1bc85c359498..4415c85e3f6f 100644 --- a/arch/arm/mach-s3c64xx/mach-mini6410.c +++ b/arch/arm/mach-s3c64xx/mach-mini6410.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/serial_core.h> | 24 | #include <linux/serial_core.h> |
| 25 | #include <linux/types.h> | 25 | #include <linux/types.h> |
| 26 | 26 | ||
| 27 | #include <asm/hardware/vic.h> | ||
| 27 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 29 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
| @@ -345,6 +346,7 @@ MACHINE_START(MINI6410, "MINI6410") | |||
| 345 | /* Maintainer: Darius Augulis <augulis.darius@gmail.com> */ | 346 | /* Maintainer: Darius Augulis <augulis.darius@gmail.com> */ |
| 346 | .atag_offset = 0x100, | 347 | .atag_offset = 0x100, |
| 347 | .init_irq = s3c6410_init_irq, | 348 | .init_irq = s3c6410_init_irq, |
| 349 | .handle_irq = vic_handle_irq, | ||
| 348 | .map_io = mini6410_map_io, | 350 | .map_io = mini6410_map_io, |
| 349 | .init_machine = mini6410_machine_init, | 351 | .init_machine = mini6410_machine_init, |
| 350 | .timer = &s3c24xx_timer, | 352 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-ncp.c b/arch/arm/mach-s3c64xx/mach-ncp.c index cb13cba98b3d..9b2c610eac2a 100644 --- a/arch/arm/mach-s3c64xx/mach-ncp.c +++ b/arch/arm/mach-s3c64xx/mach-ncp.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | 25 | ||
| 26 | #include <video/platform_lcd.h> | 26 | #include <video/platform_lcd.h> |
| 27 | 27 | ||
| 28 | #include <asm/hardware/vic.h> | ||
| 28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 29 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
| 30 | #include <asm/mach/irq.h> | 31 | #include <asm/mach/irq.h> |
| @@ -99,6 +100,7 @@ MACHINE_START(NCP, "NCP") | |||
| 99 | /* Maintainer: Samsung Electronics */ | 100 | /* Maintainer: Samsung Electronics */ |
| 100 | .atag_offset = 0x100, | 101 | .atag_offset = 0x100, |
| 101 | .init_irq = s3c6410_init_irq, | 102 | .init_irq = s3c6410_init_irq, |
| 103 | .handle_irq = vic_handle_irq, | ||
| 102 | .map_io = ncp_map_io, | 104 | .map_io = ncp_map_io, |
| 103 | .init_machine = ncp_machine_init, | 105 | .init_machine = ncp_machine_init, |
| 104 | .timer = &s3c24xx_timer, | 106 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-real6410.c b/arch/arm/mach-s3c64xx/mach-real6410.c index 87281e4b8471..dbab49f2713e 100644 --- a/arch/arm/mach-s3c64xx/mach-real6410.c +++ b/arch/arm/mach-s3c64xx/mach-real6410.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/serial_core.h> | 25 | #include <linux/serial_core.h> |
| 26 | #include <linux/types.h> | 26 | #include <linux/types.h> |
| 27 | 27 | ||
| 28 | #include <asm/hardware/vic.h> | ||
| 28 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 29 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 30 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
| @@ -326,6 +327,7 @@ MACHINE_START(REAL6410, "REAL6410") | |||
| 326 | .atag_offset = 0x100, | 327 | .atag_offset = 0x100, |
| 327 | 328 | ||
| 328 | .init_irq = s3c6410_init_irq, | 329 | .init_irq = s3c6410_init_irq, |
| 330 | .handle_irq = vic_handle_irq, | ||
| 329 | .map_io = real6410_map_io, | 331 | .map_io = real6410_map_io, |
| 330 | .init_machine = real6410_machine_init, | 332 | .init_machine = real6410_machine_init, |
| 331 | .timer = &s3c24xx_timer, | 333 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-smartq5.c b/arch/arm/mach-s3c64xx/mach-smartq5.c index 94c831d88365..053945282652 100644 --- a/arch/arm/mach-s3c64xx/mach-smartq5.c +++ b/arch/arm/mach-s3c64xx/mach-smartq5.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
| 18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
| 19 | 19 | ||
| 20 | #include <asm/hardware/vic.h> | ||
| 20 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
| 21 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
| 22 | 23 | ||
| @@ -148,6 +149,7 @@ MACHINE_START(SMARTQ5, "SmartQ 5") | |||
| 148 | /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ | 149 | /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ |
| 149 | .atag_offset = 0x100, | 150 | .atag_offset = 0x100, |
| 150 | .init_irq = s3c6410_init_irq, | 151 | .init_irq = s3c6410_init_irq, |
| 152 | .handle_irq = vic_handle_irq, | ||
| 151 | .map_io = smartq_map_io, | 153 | .map_io = smartq_map_io, |
| 152 | .init_machine = smartq5_machine_init, | 154 | .init_machine = smartq5_machine_init, |
| 153 | .timer = &s3c24xx_timer, | 155 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-smartq7.c b/arch/arm/mach-s3c64xx/mach-smartq7.c index f112547ce80a..a58d1ba5cba2 100644 --- a/arch/arm/mach-s3c64xx/mach-smartq7.c +++ b/arch/arm/mach-s3c64xx/mach-smartq7.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
| 18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
| 19 | 19 | ||
| 20 | #include <asm/hardware/vic.h> | ||
| 20 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
| 21 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
| 22 | 23 | ||
| @@ -164,6 +165,7 @@ MACHINE_START(SMARTQ7, "SmartQ 7") | |||
| 164 | /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ | 165 | /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ |
| 165 | .atag_offset = 0x100, | 166 | .atag_offset = 0x100, |
| 166 | .init_irq = s3c6410_init_irq, | 167 | .init_irq = s3c6410_init_irq, |
| 168 | .handle_irq = vic_handle_irq, | ||
| 167 | .map_io = smartq_map_io, | 169 | .map_io = smartq_map_io, |
| 168 | .init_machine = smartq7_machine_init, | 170 | .init_machine = smartq7_machine_init, |
| 169 | .timer = &s3c24xx_timer, | 171 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6400.c b/arch/arm/mach-s3c64xx/mach-smdk6400.c index 73450c2b530a..be28a59e3f57 100644 --- a/arch/arm/mach-s3c64xx/mach-smdk6400.c +++ b/arch/arm/mach-s3c64xx/mach-smdk6400.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | #include <asm/mach-types.h> | 23 | #include <asm/mach-types.h> |
| 24 | 24 | ||
| 25 | #include <asm/hardware/vic.h> | ||
| 25 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
| 26 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
| 27 | #include <asm/mach/irq.h> | 28 | #include <asm/mach/irq.h> |
| @@ -88,6 +89,7 @@ MACHINE_START(SMDK6400, "SMDK6400") | |||
| 88 | .atag_offset = 0x100, | 89 | .atag_offset = 0x100, |
| 89 | 90 | ||
| 90 | .init_irq = s3c6400_init_irq, | 91 | .init_irq = s3c6400_init_irq, |
| 92 | .handle_irq = vic_handle_irq, | ||
| 91 | .map_io = smdk6400_map_io, | 93 | .map_io = smdk6400_map_io, |
| 92 | .init_machine = smdk6400_machine_init, | 94 | .init_machine = smdk6400_machine_init, |
| 93 | .timer = &s3c24xx_timer, | 95 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c index 8bc8edd85e5a..08309155d087 100644 --- a/arch/arm/mach-s3c64xx/mach-smdk6410.c +++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c | |||
| @@ -43,6 +43,7 @@ | |||
| 43 | 43 | ||
| 44 | #include <video/platform_lcd.h> | 44 | #include <video/platform_lcd.h> |
| 45 | 45 | ||
| 46 | #include <asm/hardware/vic.h> | ||
| 46 | #include <asm/mach/arch.h> | 47 | #include <asm/mach/arch.h> |
| 47 | #include <asm/mach/map.h> | 48 | #include <asm/mach/map.h> |
| 48 | #include <asm/mach/irq.h> | 49 | #include <asm/mach/irq.h> |
| @@ -700,6 +701,7 @@ MACHINE_START(SMDK6410, "SMDK6410") | |||
| 700 | .atag_offset = 0x100, | 701 | .atag_offset = 0x100, |
| 701 | 702 | ||
| 702 | .init_irq = s3c6410_init_irq, | 703 | .init_irq = s3c6410_init_irq, |
| 704 | .handle_irq = vic_handle_irq, | ||
| 703 | .map_io = smdk6410_map_io, | 705 | .map_io = smdk6410_map_io, |
| 704 | .init_machine = smdk6410_machine_init, | 706 | .init_machine = smdk6410_machine_init, |
| 705 | .timer = &s3c24xx_timer, | 707 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s5p64x0/include/mach/entry-macro.S b/arch/arm/mach-s5p64x0/include/mach/entry-macro.S index 10b62b4f8211..fbb246d0a3df 100644 --- a/arch/arm/mach-s5p64x0/include/mach/entry-macro.S +++ b/arch/arm/mach-s5p64x0/include/mach/entry-macro.S | |||
| @@ -10,7 +10,8 @@ | |||
| 10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #include <mach/map.h> | 13 | .macro disable_fiq |
| 14 | #include <plat/irqs.h> | 14 | .endm |
| 15 | 15 | ||
| 16 | #include <asm/entry-macro-vic2.S> | 16 | .macro arch_ret_to_user, tmp1, tmp2 |
| 17 | .endm | ||
diff --git a/arch/arm/mach-s5p64x0/include/mach/vmalloc.h b/arch/arm/mach-s5p64x0/include/mach/vmalloc.h deleted file mode 100644 index 38dcc71a03cc..000000000000 --- a/arch/arm/mach-s5p64x0/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* linux/arch/arm/mach-s5p64x0/include/mach/vmalloc.h | ||
| 2 | * | ||
| 3 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. | ||
| 4 | * http://www.samsung.com | ||
| 5 | * | ||
| 6 | * Copyright 2010 Ben Dooks <ben-linux@fluff.org> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | * S3C6400 vmalloc definition | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 16 | #define __ASM_ARCH_VMALLOC_H | ||
| 17 | |||
| 18 | #define VMALLOC_END 0xF6000000UL | ||
| 19 | |||
| 20 | #endif /* __ASM_ARCH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-s5p64x0/mach-smdk6440.c b/arch/arm/mach-s5p64x0/mach-smdk6440.c index 4a1250cd1356..c272c3f7d6de 100644 --- a/arch/arm/mach-s5p64x0/mach-smdk6440.c +++ b/arch/arm/mach-s5p64x0/mach-smdk6440.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #include <video/platform_lcd.h> | 28 | #include <video/platform_lcd.h> |
| 29 | 29 | ||
| 30 | #include <asm/hardware/vic.h> | ||
| 30 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| 31 | #include <asm/mach/map.h> | 32 | #include <asm/mach/map.h> |
| 32 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| @@ -242,6 +243,7 @@ MACHINE_START(SMDK6440, "SMDK6440") | |||
| 242 | .atag_offset = 0x100, | 243 | .atag_offset = 0x100, |
| 243 | 244 | ||
| 244 | .init_irq = s5p6440_init_irq, | 245 | .init_irq = s5p6440_init_irq, |
| 246 | .handle_irq = vic_handle_irq, | ||
| 245 | .map_io = smdk6440_map_io, | 247 | .map_io = smdk6440_map_io, |
| 246 | .init_machine = smdk6440_machine_init, | 248 | .init_machine = smdk6440_machine_init, |
| 247 | .timer = &s5p_timer, | 249 | .timer = &s5p_timer, |
diff --git a/arch/arm/mach-s5p64x0/mach-smdk6450.c b/arch/arm/mach-s5p64x0/mach-smdk6450.c index 0ab129ecf009..7a4700959616 100644 --- a/arch/arm/mach-s5p64x0/mach-smdk6450.c +++ b/arch/arm/mach-s5p64x0/mach-smdk6450.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #include <video/platform_lcd.h> | 28 | #include <video/platform_lcd.h> |
| 29 | 29 | ||
| 30 | #include <asm/hardware/vic.h> | ||
| 30 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| 31 | #include <asm/mach/map.h> | 32 | #include <asm/mach/map.h> |
| 32 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| @@ -262,6 +263,7 @@ MACHINE_START(SMDK6450, "SMDK6450") | |||
| 262 | .atag_offset = 0x100, | 263 | .atag_offset = 0x100, |
| 263 | 264 | ||
| 264 | .init_irq = s5p6450_init_irq, | 265 | .init_irq = s5p6450_init_irq, |
| 266 | .handle_irq = vic_handle_irq, | ||
| 265 | .map_io = smdk6450_map_io, | 267 | .map_io = smdk6450_map_io, |
| 266 | .init_machine = smdk6450_machine_init, | 268 | .init_machine = smdk6450_machine_init, |
| 267 | .timer = &s5p_timer, | 269 | .timer = &s5p_timer, |
diff --git a/arch/arm/mach-s5pc100/include/mach/entry-macro.S b/arch/arm/mach-s5pc100/include/mach/entry-macro.S index ba76af052c81..b8c242edfa22 100644 --- a/arch/arm/mach-s5pc100/include/mach/entry-macro.S +++ b/arch/arm/mach-s5pc100/include/mach/entry-macro.S | |||
| @@ -12,39 +12,14 @@ | |||
| 12 | * warranty of any kind, whether express or implied. | 12 | * warranty of any kind, whether express or implied. |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #include <asm/hardware/vic.h> | ||
| 16 | #include <mach/map.h> | ||
| 17 | #include <plat/irqs.h> | ||
| 18 | |||
| 19 | .macro disable_fiq | 15 | .macro disable_fiq |
| 20 | .endm | 16 | .endm |
| 21 | 17 | ||
| 22 | .macro get_irqnr_preamble, base, tmp | 18 | .macro get_irqnr_preamble, base, tmp |
| 23 | ldr \base, =VA_VIC0 | ||
| 24 | .endm | 19 | .endm |
| 25 | 20 | ||
| 26 | .macro arch_ret_to_user, tmp1, tmp2 | 21 | .macro arch_ret_to_user, tmp1, tmp2 |
| 27 | .endm | 22 | .endm |
| 28 | 23 | ||
| 29 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | 24 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp |
| 30 | |||
| 31 | @ check the vic0 | ||
| 32 | mov \irqnr, # S5P_IRQ_OFFSET + 31 | ||
| 33 | ldr \irqstat, [ \base, # VIC_IRQ_STATUS ] | ||
| 34 | teq \irqstat, #0 | ||
| 35 | |||
| 36 | @ otherwise try vic1 | ||
| 37 | addeq \tmp, \base, #(VA_VIC1 - VA_VIC0) | ||
| 38 | addeq \irqnr, \irqnr, #32 | ||
| 39 | ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ] | ||
| 40 | teqeq \irqstat, #0 | ||
| 41 | |||
| 42 | @ otherwise try vic2 | ||
| 43 | addeq \tmp, \base, #(VA_VIC2 - VA_VIC0) | ||
| 44 | addeq \irqnr, \irqnr, #32 | ||
| 45 | ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ] | ||
| 46 | teqeq \irqstat, #0 | ||
| 47 | |||
| 48 | clzne \irqstat, \irqstat | ||
| 49 | subne \irqnr, \irqnr, \irqstat | ||
| 50 | .endm | 25 | .endm |
diff --git a/arch/arm/mach-s5pc100/include/mach/vmalloc.h b/arch/arm/mach-s5pc100/include/mach/vmalloc.h deleted file mode 100644 index 44c8e5726d9d..000000000000 --- a/arch/arm/mach-s5pc100/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,17 +0,0 @@ | |||
| 1 | /* arch/arm/mach-s5pc100/include/mach/vmalloc.h | ||
| 2 | * | ||
| 3 | * Copyright 2010 Ben Dooks <ben-linux@fluff.org> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * S3C6400 vmalloc definition | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 13 | #define __ASM_ARCH_VMALLOC_H | ||
| 14 | |||
| 15 | #define VMALLOC_END 0xF6000000UL | ||
| 16 | |||
| 17 | #endif /* __ASM_ARCH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-s5pc100/mach-smdkc100.c b/arch/arm/mach-s5pc100/mach-smdkc100.c index 26f5c91c9427..93ebe3a92d10 100644 --- a/arch/arm/mach-s5pc100/mach-smdkc100.c +++ b/arch/arm/mach-s5pc100/mach-smdkc100.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/input.h> | 25 | #include <linux/input.h> |
| 26 | #include <linux/pwm_backlight.h> | 26 | #include <linux/pwm_backlight.h> |
| 27 | 27 | ||
| 28 | #include <asm/hardware/vic.h> | ||
| 28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 29 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
| 30 | 31 | ||
| @@ -250,6 +251,7 @@ MACHINE_START(SMDKC100, "SMDKC100") | |||
| 250 | /* Maintainer: Byungho Min <bhmin@samsung.com> */ | 251 | /* Maintainer: Byungho Min <bhmin@samsung.com> */ |
| 251 | .atag_offset = 0x100, | 252 | .atag_offset = 0x100, |
| 252 | .init_irq = s5pc100_init_irq, | 253 | .init_irq = s5pc100_init_irq, |
| 254 | .handle_irq = vic_handle_irq, | ||
| 253 | .map_io = smdkc100_map_io, | 255 | .map_io = smdkc100_map_io, |
| 254 | .init_machine = smdkc100_machine_init, | 256 | .init_machine = smdkc100_machine_init, |
| 255 | .timer = &s3c24xx_timer, | 257 | .timer = &s3c24xx_timer, |
diff --git a/arch/arm/mach-s5pv210/include/mach/entry-macro.S b/arch/arm/mach-s5pv210/include/mach/entry-macro.S index 3aa41ac59f07..bebca1b5d0b1 100644 --- a/arch/arm/mach-s5pv210/include/mach/entry-macro.S +++ b/arch/arm/mach-s5pv210/include/mach/entry-macro.S | |||
| @@ -10,45 +10,8 @@ | |||
| 10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #include <asm/hardware/vic.h> | ||
| 14 | #include <mach/map.h> | ||
| 15 | #include <plat/irqs.h> | ||
| 16 | |||
| 17 | .macro disable_fiq | 13 | .macro disable_fiq |
| 18 | .endm | 14 | .endm |
| 19 | 15 | ||
| 20 | .macro get_irqnr_preamble, base, tmp | ||
| 21 | ldr \base, =VA_VIC0 | ||
| 22 | .endm | ||
| 23 | |||
| 24 | .macro arch_ret_to_user, tmp1, tmp2 | 16 | .macro arch_ret_to_user, tmp1, tmp2 |
| 25 | .endm | 17 | .endm |
| 26 | |||
| 27 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 28 | |||
| 29 | @ check the vic0 | ||
| 30 | mov \irqnr, # S5P_IRQ_OFFSET + 31 | ||
| 31 | ldr \irqstat, [ \base, # VIC_IRQ_STATUS ] | ||
| 32 | teq \irqstat, #0 | ||
| 33 | |||
| 34 | @ otherwise try vic1 | ||
| 35 | addeq \tmp, \base, #(VA_VIC1 - VA_VIC0) | ||
| 36 | addeq \irqnr, \irqnr, #32 | ||
| 37 | ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ] | ||
| 38 | teqeq \irqstat, #0 | ||
| 39 | |||
| 40 | @ otherwise try vic2 | ||
| 41 | addeq \tmp, \base, #(VA_VIC2 - VA_VIC0) | ||
| 42 | addeq \irqnr, \irqnr, #32 | ||
| 43 | ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ] | ||
| 44 | teqeq \irqstat, #0 | ||
| 45 | |||
| 46 | @ otherwise try vic3 | ||
| 47 | addeq \tmp, \base, #(VA_VIC3 - VA_VIC0) | ||
| 48 | addeq \irqnr, \irqnr, #32 | ||
| 49 | ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ] | ||
| 50 | teqeq \irqstat, #0 | ||
| 51 | |||
| 52 | clzne \irqstat, \irqstat | ||
| 53 | subne \irqnr, \irqnr, \irqstat | ||
| 54 | .endm | ||
diff --git a/arch/arm/mach-s5pv210/include/mach/vmalloc.h b/arch/arm/mach-s5pv210/include/mach/vmalloc.h deleted file mode 100644 index a6c659d68a5d..000000000000 --- a/arch/arm/mach-s5pv210/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,22 +0,0 @@ | |||
| 1 | /* linux/arch/arm/mach-s5p6442/include/mach/vmalloc.h | ||
| 2 | * | ||
| 3 | * Copyright 2010 Ben Dooks <ben-linux@fluff.org> | ||
| 4 | * | ||
| 5 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. | ||
| 6 | * http://www.samsung.com/ | ||
| 7 | * | ||
| 8 | * Based on arch/arm/mach-s5p6442/include/mach/vmalloc.h | ||
| 9 | * | ||
| 10 | * S5PV210 vmalloc definition | ||
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify | ||
| 13 | * it under the terms of the GNU General Public License version 2 as | ||
| 14 | * published by the Free Software Foundation. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 18 | #define __ASM_ARCH_VMALLOC_H __FILE__ | ||
| 19 | |||
| 20 | #define VMALLOC_END 0xF6000000UL | ||
| 21 | |||
| 22 | #endif /* __ASM_ARCH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-s5pv210/mach-aquila.c b/arch/arm/mach-s5pv210/mach-aquila.c index 5811a96125f0..71ca95604d63 100644 --- a/arch/arm/mach-s5pv210/mach-aquila.c +++ b/arch/arm/mach-s5pv210/mach-aquila.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/input.h> | 22 | #include <linux/input.h> |
| 23 | #include <linux/gpio.h> | 23 | #include <linux/gpio.h> |
| 24 | 24 | ||
| 25 | #include <asm/hardware/vic.h> | ||
| 25 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
| 26 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
| 27 | #include <asm/setup.h> | 28 | #include <asm/setup.h> |
| @@ -680,6 +681,7 @@ MACHINE_START(AQUILA, "Aquila") | |||
| 680 | Kyungmin Park <kyungmin.park@samsung.com> */ | 681 | Kyungmin Park <kyungmin.park@samsung.com> */ |
| 681 | .atag_offset = 0x100, | 682 | .atag_offset = 0x100, |
| 682 | .init_irq = s5pv210_init_irq, | 683 | .init_irq = s5pv210_init_irq, |
| 684 | .handle_irq = vic_handle_irq, | ||
| 683 | .map_io = aquila_map_io, | 685 | .map_io = aquila_map_io, |
| 684 | .init_machine = aquila_machine_init, | 686 | .init_machine = aquila_machine_init, |
| 685 | .timer = &s5p_timer, | 687 | .timer = &s5p_timer, |
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c index 15edcae448b9..448fd9ea96f2 100644 --- a/arch/arm/mach-s5pv210/mach-goni.c +++ b/arch/arm/mach-s5pv210/mach-goni.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/gpio.h> | 27 | #include <linux/gpio.h> |
| 28 | #include <linux/interrupt.h> | 28 | #include <linux/interrupt.h> |
| 29 | 29 | ||
| 30 | #include <asm/hardware/vic.h> | ||
| 30 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| 31 | #include <asm/mach/map.h> | 32 | #include <asm/mach/map.h> |
| 32 | #include <asm/setup.h> | 33 | #include <asm/setup.h> |
| @@ -956,6 +957,7 @@ MACHINE_START(GONI, "GONI") | |||
| 956 | /* Maintainers: Kyungmin Park <kyungmin.park@samsung.com> */ | 957 | /* Maintainers: Kyungmin Park <kyungmin.park@samsung.com> */ |
| 957 | .atag_offset = 0x100, | 958 | .atag_offset = 0x100, |
| 958 | .init_irq = s5pv210_init_irq, | 959 | .init_irq = s5pv210_init_irq, |
| 960 | .handle_irq = vic_handle_irq, | ||
| 959 | .map_io = goni_map_io, | 961 | .map_io = goni_map_io, |
| 960 | .init_machine = goni_machine_init, | 962 | .init_machine = goni_machine_init, |
| 961 | .timer = &s5p_timer, | 963 | .timer = &s5p_timer, |
diff --git a/arch/arm/mach-s5pv210/mach-smdkc110.c b/arch/arm/mach-s5pv210/mach-smdkc110.c index f7266bb0cac8..c2531ffc720b 100644 --- a/arch/arm/mach-s5pv210/mach-smdkc110.c +++ b/arch/arm/mach-s5pv210/mach-smdkc110.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/i2c.h> | 15 | #include <linux/i2c.h> |
| 16 | #include <linux/sysdev.h> | 16 | #include <linux/sysdev.h> |
| 17 | 17 | ||
| 18 | #include <asm/hardware/vic.h> | ||
| 18 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
| 19 | #include <asm/mach/map.h> | 20 | #include <asm/mach/map.h> |
| 20 | #include <asm/setup.h> | 21 | #include <asm/setup.h> |
| @@ -138,6 +139,7 @@ MACHINE_START(SMDKC110, "SMDKC110") | |||
| 138 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 139 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
| 139 | .atag_offset = 0x100, | 140 | .atag_offset = 0x100, |
| 140 | .init_irq = s5pv210_init_irq, | 141 | .init_irq = s5pv210_init_irq, |
| 142 | .handle_irq = vic_handle_irq, | ||
| 141 | .map_io = smdkc110_map_io, | 143 | .map_io = smdkc110_map_io, |
| 142 | .init_machine = smdkc110_machine_init, | 144 | .init_machine = smdkc110_machine_init, |
| 143 | .timer = &s5p_timer, | 145 | .timer = &s5p_timer, |
diff --git a/arch/arm/mach-s5pv210/mach-smdkv210.c b/arch/arm/mach-s5pv210/mach-smdkv210.c index a9106c392398..4ca77c41d499 100644 --- a/arch/arm/mach-s5pv210/mach-smdkv210.c +++ b/arch/arm/mach-s5pv210/mach-smdkv210.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
| 21 | #include <linux/pwm_backlight.h> | 21 | #include <linux/pwm_backlight.h> |
| 22 | 22 | ||
| 23 | #include <asm/hardware/vic.h> | ||
| 23 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
| 24 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
| 25 | #include <asm/setup.h> | 26 | #include <asm/setup.h> |
| @@ -315,6 +316,7 @@ MACHINE_START(SMDKV210, "SMDKV210") | |||
| 315 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 316 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
| 316 | .atag_offset = 0x100, | 317 | .atag_offset = 0x100, |
| 317 | .init_irq = s5pv210_init_irq, | 318 | .init_irq = s5pv210_init_irq, |
| 319 | .handle_irq = vic_handle_irq, | ||
| 318 | .map_io = smdkv210_map_io, | 320 | .map_io = smdkv210_map_io, |
| 319 | .init_machine = smdkv210_machine_init, | 321 | .init_machine = smdkv210_machine_init, |
| 320 | .timer = &s5p_timer, | 322 | .timer = &s5p_timer, |
diff --git a/arch/arm/mach-s5pv210/mach-torbreck.c b/arch/arm/mach-s5pv210/mach-torbreck.c index 97cc066c5369..df70fcb34516 100644 --- a/arch/arm/mach-s5pv210/mach-torbreck.c +++ b/arch/arm/mach-s5pv210/mach-torbreck.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
| 15 | #include <linux/serial_core.h> | 15 | #include <linux/serial_core.h> |
| 16 | 16 | ||
| 17 | #include <asm/hardware/vic.h> | ||
| 17 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
| 18 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
| 19 | #include <asm/setup.h> | 20 | #include <asm/setup.h> |
| @@ -127,6 +128,7 @@ MACHINE_START(TORBRECK, "TORBRECK") | |||
| 127 | /* Maintainer: Hyunchul Ko <ghcstop@gmail.com> */ | 128 | /* Maintainer: Hyunchul Ko <ghcstop@gmail.com> */ |
| 128 | .atag_offset = 0x100, | 129 | .atag_offset = 0x100, |
| 129 | .init_irq = s5pv210_init_irq, | 130 | .init_irq = s5pv210_init_irq, |
| 131 | .handle_irq = vic_handle_irq, | ||
| 130 | .map_io = torbreck_map_io, | 132 | .map_io = torbreck_map_io, |
| 131 | .init_machine = torbreck_machine_init, | 133 | .init_machine = torbreck_machine_init, |
| 132 | .timer = &s5p_timer, | 134 | .timer = &s5p_timer, |
diff --git a/arch/arm/mach-sa1100/include/mach/system.h b/arch/arm/mach-sa1100/include/mach/system.h index ba9da9f7f183..345d35b7450c 100644 --- a/arch/arm/mach-sa1100/include/mach/system.h +++ b/arch/arm/mach-sa1100/include/mach/system.h | |||
| @@ -14,7 +14,7 @@ static inline void arch_reset(char mode, const char *cmd) | |||
| 14 | { | 14 | { |
| 15 | if (mode == 's') { | 15 | if (mode == 's') { |
| 16 | /* Jump into ROM at address 0 */ | 16 | /* Jump into ROM at address 0 */ |
| 17 | cpu_reset(0); | 17 | soft_restart(0); |
| 18 | } else { | 18 | } else { |
| 19 | /* Use on-chip reset capability */ | 19 | /* Use on-chip reset capability */ |
| 20 | RSRR = RSRR_SWR; | 20 | RSRR = RSRR_SWR; |
diff --git a/arch/arm/mach-sa1100/include/mach/vmalloc.h b/arch/arm/mach-sa1100/include/mach/vmalloc.h deleted file mode 100644 index b3d002398480..000000000000 --- a/arch/arm/mach-sa1100/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,4 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-sa1100/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | #define VMALLOC_END (0xe8000000UL) | ||
diff --git a/arch/arm/mach-shark/core.c b/arch/arm/mach-shark/core.c index feda3ca7fc95..f4b25d875f3d 100644 --- a/arch/arm/mach-shark/core.c +++ b/arch/arm/mach-shark/core.c | |||
| @@ -29,7 +29,6 @@ | |||
| 29 | void arch_reset(char mode, const char *cmd) | 29 | void arch_reset(char mode, const char *cmd) |
| 30 | { | 30 | { |
| 31 | short temp; | 31 | short temp; |
| 32 | local_irq_disable(); | ||
| 33 | /* Reset the Machine via pc[3] of the sequoia chipset */ | 32 | /* Reset the Machine via pc[3] of the sequoia chipset */ |
| 34 | outw(0x09,0x24); | 33 | outw(0x09,0x24); |
| 35 | temp=inw(0x26); | 34 | temp=inw(0x26); |
diff --git a/arch/arm/mach-shark/include/mach/vmalloc.h b/arch/arm/mach-shark/include/mach/vmalloc.h deleted file mode 100644 index b10df988526d..000000000000 --- a/arch/arm/mach-shark/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,4 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-shark/include/mach/vmalloc.h | ||
| 3 | */ | ||
| 4 | #define VMALLOC_END 0xd0000000UL | ||
diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile index 737bdc631b0d..5ca1f9d66995 100644 --- a/arch/arm/mach-shmobile/Makefile +++ b/arch/arm/mach-shmobile/Makefile | |||
| @@ -28,7 +28,6 @@ pfc-$(CONFIG_ARCH_SH73A0) += pfc-sh73a0.o | |||
| 28 | obj-$(CONFIG_ARCH_SH7367) += entry-intc.o | 28 | obj-$(CONFIG_ARCH_SH7367) += entry-intc.o |
| 29 | obj-$(CONFIG_ARCH_SH7377) += entry-intc.o | 29 | obj-$(CONFIG_ARCH_SH7377) += entry-intc.o |
| 30 | obj-$(CONFIG_ARCH_SH7372) += entry-intc.o | 30 | obj-$(CONFIG_ARCH_SH7372) += entry-intc.o |
| 31 | obj-$(CONFIG_ARCH_SH73A0) += entry-gic.o | ||
| 32 | 31 | ||
| 33 | # PM objects | 32 | # PM objects |
| 34 | obj-$(CONFIG_SUSPEND) += suspend.o | 33 | obj-$(CONFIG_SUSPEND) += suspend.o |
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index b862e9f81e3e..202c3c6ec9d8 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
| @@ -608,7 +608,7 @@ struct sys_timer ag5evm_timer = { | |||
| 608 | MACHINE_START(AG5EVM, "ag5evm") | 608 | MACHINE_START(AG5EVM, "ag5evm") |
| 609 | .map_io = ag5evm_map_io, | 609 | .map_io = ag5evm_map_io, |
| 610 | .init_irq = sh73a0_init_irq, | 610 | .init_irq = sh73a0_init_irq, |
| 611 | .handle_irq = shmobile_handle_irq_gic, | 611 | .handle_irq = gic_handle_irq, |
| 612 | .init_machine = ag5evm_init, | 612 | .init_machine = ag5evm_init, |
| 613 | .timer = &ag5evm_timer, | 613 | .timer = &ag5evm_timer, |
| 614 | MACHINE_END | 614 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-kota2.c b/arch/arm/mach-shmobile/board-kota2.c index bd9a78424d6b..1b4439d3f9d5 100644 --- a/arch/arm/mach-shmobile/board-kota2.c +++ b/arch/arm/mach-shmobile/board-kota2.c | |||
| @@ -448,7 +448,7 @@ struct sys_timer kota2_timer = { | |||
| 448 | MACHINE_START(KOTA2, "kota2") | 448 | MACHINE_START(KOTA2, "kota2") |
| 449 | .map_io = kota2_map_io, | 449 | .map_io = kota2_map_io, |
| 450 | .init_irq = kota2_init_irq, | 450 | .init_irq = kota2_init_irq, |
| 451 | .handle_irq = shmobile_handle_irq_gic, | 451 | .handle_irq = gic_handle_irq, |
| 452 | .init_machine = kota2_init, | 452 | .init_machine = kota2_init, |
| 453 | .timer = &kota2_timer, | 453 | .timer = &kota2_timer, |
| 454 | MACHINE_END | 454 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/entry-gic.S b/arch/arm/mach-shmobile/entry-gic.S deleted file mode 100644 index e20239b08c83..000000000000 --- a/arch/arm/mach-shmobile/entry-gic.S +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * ARM Interrupt demux handler using GIC | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Magnus Damm | ||
| 5 | * Copyright (C) 2011 Paul Mundt | ||
| 6 | * Copyright (C) 2010 - 2011 Renesas Solutions Corp. | ||
| 7 | * | ||
| 8 | * This file is licensed under the terms of the GNU General Public | ||
| 9 | * License version 2. This program is licensed "as is" without any | ||
| 10 | * warranty of any kind, whether express or implied. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <asm/assembler.h> | ||
| 14 | #include <asm/entry-macro-multi.S> | ||
| 15 | #include <asm/hardware/gic.h> | ||
| 16 | #include <asm/hardware/entry-macro-gic.S> | ||
| 17 | |||
| 18 | arch_irq_handler shmobile_handle_irq_gic | ||
diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index 834bd6cd508f..4bf82c156771 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h | |||
| @@ -7,7 +7,6 @@ extern void shmobile_secondary_vector(void); | |||
| 7 | struct clk; | 7 | struct clk; |
| 8 | extern int clk_init(void); | 8 | extern int clk_init(void); |
| 9 | extern void shmobile_handle_irq_intc(struct pt_regs *); | 9 | extern void shmobile_handle_irq_intc(struct pt_regs *); |
| 10 | extern void shmobile_handle_irq_gic(struct pt_regs *); | ||
| 11 | extern struct platform_suspend_ops shmobile_suspend_ops; | 10 | extern struct platform_suspend_ops shmobile_suspend_ops; |
| 12 | struct cpuidle_driver; | 11 | struct cpuidle_driver; |
| 13 | extern void (*shmobile_cpuidle_modes[])(void); | 12 | extern void (*shmobile_cpuidle_modes[])(void); |
diff --git a/arch/arm/mach-shmobile/include/mach/entry-macro.S b/arch/arm/mach-shmobile/include/mach/entry-macro.S index 8d4a416d4285..2a57b2964ee9 100644 --- a/arch/arm/mach-shmobile/include/mach/entry-macro.S +++ b/arch/arm/mach-shmobile/include/mach/entry-macro.S | |||
| @@ -18,14 +18,5 @@ | |||
| 18 | .macro disable_fiq | 18 | .macro disable_fiq |
| 19 | .endm | 19 | .endm |
| 20 | 20 | ||
| 21 | .macro get_irqnr_preamble, base, tmp | ||
| 22 | .endm | ||
| 23 | |||
| 24 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 25 | .endm | ||
| 26 | |||
| 27 | .macro test_for_ipi, irqnr, irqstat, base, tmp | ||
| 28 | .endm | ||
| 29 | |||
| 30 | .macro arch_ret_to_user, tmp1, tmp2 | 21 | .macro arch_ret_to_user, tmp1, tmp2 |
| 31 | .endm | 22 | .endm |
diff --git a/arch/arm/mach-shmobile/include/mach/system.h b/arch/arm/mach-shmobile/include/mach/system.h index 76a687eeaa22..956ac18ddbf9 100644 --- a/arch/arm/mach-shmobile/include/mach/system.h +++ b/arch/arm/mach-shmobile/include/mach/system.h | |||
| @@ -8,7 +8,7 @@ static inline void arch_idle(void) | |||
| 8 | 8 | ||
| 9 | static inline void arch_reset(char mode, const char *cmd) | 9 | static inline void arch_reset(char mode, const char *cmd) |
| 10 | { | 10 | { |
| 11 | cpu_reset(0); | 11 | soft_restart(0); |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | #endif | 14 | #endif |
diff --git a/arch/arm/mach-shmobile/include/mach/vmalloc.h b/arch/arm/mach-shmobile/include/mach/vmalloc.h deleted file mode 100644 index 2b8fd8b942fe..000000000000 --- a/arch/arm/mach-shmobile/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef __ASM_MACH_VMALLOC_H | ||
| 2 | #define __ASM_MACH_VMALLOC_H | ||
| 3 | |||
| 4 | /* Vmalloc at ... - 0xe5ffffff */ | ||
| 5 | #define VMALLOC_END 0xe6000000UL | ||
| 6 | |||
| 7 | #endif /* __ASM_MACH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/entry-macro.S b/arch/arm/mach-spear3xx/include/mach/entry-macro.S index 53da4224ba3d..de3bb41c8e9e 100644 --- a/arch/arm/mach-spear3xx/include/mach/entry-macro.S +++ b/arch/arm/mach-spear3xx/include/mach/entry-macro.S | |||
| @@ -11,35 +11,8 @@ | |||
| 11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/vic.h> | ||
| 15 | #include <mach/hardware.h> | ||
| 16 | |||
| 17 | .macro disable_fiq | 14 | .macro disable_fiq |
| 18 | .endm | 15 | .endm |
| 19 | 16 | ||
| 20 | .macro get_irqnr_preamble, base, tmp | ||
| 21 | .endm | ||
| 22 | |||
| 23 | .macro arch_ret_to_user, tmp1, tmp2 | 17 | .macro arch_ret_to_user, tmp1, tmp2 |
| 24 | .endm | 18 | .endm |
| 25 | |||
| 26 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 27 | ldr \base, =VA_SPEAR3XX_ML1_VIC_BASE | ||
| 28 | ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get status | ||
| 29 | teq \irqstat, #0 | ||
| 30 | beq 1001f @ this will set/reset | ||
| 31 | @ zero register | ||
| 32 | /* | ||
| 33 | * Following code will find bit position of least significang | ||
| 34 | * bit set in irqstat, using following equation | ||
| 35 | * least significant bit set in n = (n & ~(n-1)) | ||
| 36 | */ | ||
| 37 | sub \tmp, \irqstat, #1 @ tmp = irqstat - 1 | ||
| 38 | mvn \tmp, \tmp @ tmp = ~tmp | ||
| 39 | and \irqstat, \irqstat, \tmp @ irqstat &= tmp | ||
| 40 | /* Now, irqstat is = bit no. of 1st bit set in vic irq status */ | ||
| 41 | clz \tmp, \irqstat @ tmp = leading zeros | ||
| 42 | rsb \irqnr, \tmp, #0x1F @ irqnr = 32 - tmp - 1 | ||
| 43 | |||
| 44 | 1001: /* EQ will be set if no irqs pending */ | ||
| 45 | .endm | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/vmalloc.h b/arch/arm/mach-spear3xx/include/mach/vmalloc.h deleted file mode 100644 index df977b3c9a63..000000000000 --- a/arch/arm/mach-spear3xx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,19 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-spear3xx/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Defining Vmalloc area for SPEAr3xx machine family | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009 ST Microelectronics | ||
| 7 | * Viresh Kumar<viresh.kumar@st.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __MACH_VMALLOC_H | ||
| 15 | #define __MACH_VMALLOC_H | ||
| 16 | |||
| 17 | #include <plat/vmalloc.h> | ||
| 18 | |||
| 19 | #endif /* __MACH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-spear3xx/spear300_evb.c b/arch/arm/mach-spear3xx/spear300_evb.c index a5ff98eed1db..61068ba67923 100644 --- a/arch/arm/mach-spear3xx/spear300_evb.c +++ b/arch/arm/mach-spear3xx/spear300_evb.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/vic.h> | ||
| 14 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
| 15 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
| 16 | #include <mach/generic.h> | 17 | #include <mach/generic.h> |
| @@ -67,6 +68,7 @@ MACHINE_START(SPEAR300, "ST-SPEAR300-EVB") | |||
| 67 | .atag_offset = 0x100, | 68 | .atag_offset = 0x100, |
| 68 | .map_io = spear3xx_map_io, | 69 | .map_io = spear3xx_map_io, |
| 69 | .init_irq = spear3xx_init_irq, | 70 | .init_irq = spear3xx_init_irq, |
| 71 | .handle_irq = vic_handle_irq, | ||
| 70 | .timer = &spear3xx_timer, | 72 | .timer = &spear3xx_timer, |
| 71 | .init_machine = spear300_evb_init, | 73 | .init_machine = spear300_evb_init, |
| 72 | MACHINE_END | 74 | MACHINE_END |
diff --git a/arch/arm/mach-spear3xx/spear310_evb.c b/arch/arm/mach-spear3xx/spear310_evb.c index 45d180d59362..7903abe92bf6 100644 --- a/arch/arm/mach-spear3xx/spear310_evb.c +++ b/arch/arm/mach-spear3xx/spear310_evb.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/vic.h> | ||
| 14 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
| 15 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
| 16 | #include <mach/generic.h> | 17 | #include <mach/generic.h> |
| @@ -73,6 +74,7 @@ MACHINE_START(SPEAR310, "ST-SPEAR310-EVB") | |||
| 73 | .atag_offset = 0x100, | 74 | .atag_offset = 0x100, |
| 74 | .map_io = spear3xx_map_io, | 75 | .map_io = spear3xx_map_io, |
| 75 | .init_irq = spear3xx_init_irq, | 76 | .init_irq = spear3xx_init_irq, |
| 77 | .handle_irq = vic_handle_irq, | ||
| 76 | .timer = &spear3xx_timer, | 78 | .timer = &spear3xx_timer, |
| 77 | .init_machine = spear310_evb_init, | 79 | .init_machine = spear310_evb_init, |
| 78 | MACHINE_END | 80 | MACHINE_END |
diff --git a/arch/arm/mach-spear3xx/spear320_evb.c b/arch/arm/mach-spear3xx/spear320_evb.c index 22879848d73a..e9751f970933 100644 --- a/arch/arm/mach-spear3xx/spear320_evb.c +++ b/arch/arm/mach-spear3xx/spear320_evb.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/vic.h> | ||
| 14 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
| 15 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
| 16 | #include <mach/generic.h> | 17 | #include <mach/generic.h> |
| @@ -71,6 +72,7 @@ MACHINE_START(SPEAR320, "ST-SPEAR320-EVB") | |||
| 71 | .atag_offset = 0x100, | 72 | .atag_offset = 0x100, |
| 72 | .map_io = spear3xx_map_io, | 73 | .map_io = spear3xx_map_io, |
| 73 | .init_irq = spear3xx_init_irq, | 74 | .init_irq = spear3xx_init_irq, |
| 75 | .handle_irq = vic_handle_irq, | ||
| 74 | .timer = &spear3xx_timer, | 76 | .timer = &spear3xx_timer, |
| 75 | .init_machine = spear320_evb_init, | 77 | .init_machine = spear320_evb_init, |
| 76 | MACHINE_END | 78 | MACHINE_END |
diff --git a/arch/arm/mach-spear6xx/include/mach/entry-macro.S b/arch/arm/mach-spear6xx/include/mach/entry-macro.S index 8a0b0ed7b203..d490a910d925 100644 --- a/arch/arm/mach-spear6xx/include/mach/entry-macro.S +++ b/arch/arm/mach-spear6xx/include/mach/entry-macro.S | |||
| @@ -11,44 +11,8 @@ | |||
| 11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/vic.h> | ||
| 15 | #include <mach/hardware.h> | ||
| 16 | |||
| 17 | .macro disable_fiq | 14 | .macro disable_fiq |
| 18 | .endm | 15 | .endm |
| 19 | 16 | ||
| 20 | .macro get_irqnr_preamble, base, tmp | ||
| 21 | .endm | ||
| 22 | |||
| 23 | .macro arch_ret_to_user, tmp1, tmp2 | 17 | .macro arch_ret_to_user, tmp1, tmp2 |
| 24 | .endm | 18 | .endm |
| 25 | |||
| 26 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 27 | ldr \base, =VA_SPEAR6XX_CPU_VIC_PRI_BASE | ||
| 28 | ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get status | ||
| 29 | mov \irqnr, #0 | ||
| 30 | teq \irqstat, #0 | ||
| 31 | bne 1001f | ||
| 32 | ldr \base, =VA_SPEAR6XX_CPU_VIC_SEC_BASE | ||
| 33 | ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get status | ||
| 34 | teq \irqstat, #0 | ||
| 35 | beq 1002f @ this will set/reset | ||
| 36 | @ zero register | ||
| 37 | mov \irqnr, #32 | ||
| 38 | 1001: | ||
| 39 | /* | ||
| 40 | * Following code will find bit position of least significang | ||
| 41 | * bit set in irqstat, using following equation | ||
| 42 | * least significant bit set in n = (n & ~(n-1)) | ||
| 43 | */ | ||
| 44 | sub \tmp, \irqstat, #1 @ tmp = irqstat - 1 | ||
| 45 | mvn \tmp, \tmp @ tmp = ~tmp | ||
| 46 | and \irqstat, \irqstat, \tmp @ irqstat &= tmp | ||
| 47 | /* Now, irqstat is = bit no. of 1st bit set in vic irq status */ | ||
| 48 | clz \tmp, \irqstat @ tmp = leading zeros | ||
| 49 | |||
| 50 | rsb \tmp, \tmp, #0x1F @ tmp = 32 - tmp - 1 | ||
| 51 | add \irqnr, \irqnr, \tmp | ||
| 52 | |||
| 53 | 1002: /* EQ will be set if no irqs pending */ | ||
| 54 | .endm | ||
diff --git a/arch/arm/mach-spear6xx/include/mach/vmalloc.h b/arch/arm/mach-spear6xx/include/mach/vmalloc.h deleted file mode 100644 index 4a0b56cb2a91..000000000000 --- a/arch/arm/mach-spear6xx/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,19 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-spear6xx/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Defining Vmalloc area for SPEAr6xx machine family | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009 ST Microelectronics | ||
| 7 | * Rajeev Kumar<rajeev-dlh.kumar@st.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __MACH_VMALLOC_H | ||
| 15 | #define __MACH_VMALLOC_H | ||
| 16 | |||
| 17 | #include <plat/vmalloc.h> | ||
| 18 | |||
| 19 | #endif /* __MACH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-spear6xx/spear600_evb.c b/arch/arm/mach-spear6xx/spear600_evb.c index 8238fe38e713..ff139ed0a61e 100644 --- a/arch/arm/mach-spear6xx/spear600_evb.c +++ b/arch/arm/mach-spear6xx/spear600_evb.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/vic.h> | ||
| 14 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
| 15 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
| 16 | #include <mach/generic.h> | 17 | #include <mach/generic.h> |
| @@ -46,6 +47,7 @@ MACHINE_START(SPEAR600, "ST-SPEAR600-EVB") | |||
| 46 | .atag_offset = 0x100, | 47 | .atag_offset = 0x100, |
| 47 | .map_io = spear6xx_map_io, | 48 | .map_io = spear6xx_map_io, |
| 48 | .init_irq = spear6xx_init_irq, | 49 | .init_irq = spear6xx_init_irq, |
| 50 | .handle_irq = vic_handle_irq, | ||
| 49 | .timer = &spear6xx_timer, | 51 | .timer = &spear6xx_timer, |
| 50 | .init_machine = spear600_evb_init, | 52 | .init_machine = spear600_evb_init, |
| 51 | MACHINE_END | 53 | MACHINE_END |
diff --git a/arch/arm/mach-tegra/board-dt.c b/arch/arm/mach-tegra/board-dt.c index 74743ad3d2d3..f6f03ce340fc 100644 --- a/arch/arm/mach-tegra/board-dt.c +++ b/arch/arm/mach-tegra/board-dt.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <linux/i2c.h> | 32 | #include <linux/i2c.h> |
| 33 | #include <linux/i2c-tegra.h> | 33 | #include <linux/i2c-tegra.h> |
| 34 | 34 | ||
| 35 | #include <asm/hardware/gic.h> | ||
| 35 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
| 36 | #include <asm/mach/arch.h> | 37 | #include <asm/mach/arch.h> |
| 37 | #include <asm/mach/time.h> | 38 | #include <asm/mach/time.h> |
| @@ -130,6 +131,7 @@ DT_MACHINE_START(TEGRA_DT, "nVidia Tegra (Flattened Device Tree)") | |||
| 130 | .map_io = tegra_map_common_io, | 131 | .map_io = tegra_map_common_io, |
| 131 | .init_early = tegra_init_early, | 132 | .init_early = tegra_init_early, |
| 132 | .init_irq = tegra_init_irq, | 133 | .init_irq = tegra_init_irq, |
| 134 | .handle_irq = gic_handle_irq, | ||
| 133 | .timer = &tegra_timer, | 135 | .timer = &tegra_timer, |
| 134 | .init_machine = tegra_dt_init, | 136 | .init_machine = tegra_dt_init, |
| 135 | .dt_compat = tegra_dt_board_compat, | 137 | .dt_compat = tegra_dt_board_compat, |
diff --git a/arch/arm/mach-tegra/board-harmony.c b/arch/arm/mach-tegra/board-harmony.c index f0bdc5e3fe52..fd190a8dc665 100644 --- a/arch/arm/mach-tegra/board-harmony.c +++ b/arch/arm/mach-tegra/board-harmony.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 32 | #include <asm/mach/arch.h> | 32 | #include <asm/mach/arch.h> |
| 33 | #include <asm/mach/time.h> | 33 | #include <asm/mach/time.h> |
| 34 | #include <asm/hardware/gic.h> | ||
| 34 | #include <asm/setup.h> | 35 | #include <asm/setup.h> |
| 35 | 36 | ||
| 36 | #include <mach/tegra_wm8903_pdata.h> | 37 | #include <mach/tegra_wm8903_pdata.h> |
| @@ -187,6 +188,7 @@ MACHINE_START(HARMONY, "harmony") | |||
| 187 | .map_io = tegra_map_common_io, | 188 | .map_io = tegra_map_common_io, |
| 188 | .init_early = tegra_init_early, | 189 | .init_early = tegra_init_early, |
| 189 | .init_irq = tegra_init_irq, | 190 | .init_irq = tegra_init_irq, |
| 191 | .handle_irq = gic_handle_irq, | ||
| 190 | .timer = &tegra_timer, | 192 | .timer = &tegra_timer, |
| 191 | .init_machine = tegra_harmony_init, | 193 | .init_machine = tegra_harmony_init, |
| 192 | MACHINE_END | 194 | MACHINE_END |
diff --git a/arch/arm/mach-tegra/board-paz00.c b/arch/arm/mach-tegra/board-paz00.c index 55c55ba89f1e..0b7e1cfee70d 100644 --- a/arch/arm/mach-tegra/board-paz00.c +++ b/arch/arm/mach-tegra/board-paz00.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/gpio.h> | 29 | #include <linux/gpio.h> |
| 30 | #include <linux/rfkill-gpio.h> | 30 | #include <linux/rfkill-gpio.h> |
| 31 | 31 | ||
| 32 | #include <asm/hardware/gic.h> | ||
| 32 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
| 33 | #include <asm/mach/arch.h> | 34 | #include <asm/mach/arch.h> |
| 34 | #include <asm/mach/time.h> | 35 | #include <asm/mach/time.h> |
| @@ -190,6 +191,7 @@ MACHINE_START(PAZ00, "Toshiba AC100 / Dynabook AZ") | |||
| 190 | .map_io = tegra_map_common_io, | 191 | .map_io = tegra_map_common_io, |
| 191 | .init_early = tegra_init_early, | 192 | .init_early = tegra_init_early, |
| 192 | .init_irq = tegra_init_irq, | 193 | .init_irq = tegra_init_irq, |
| 194 | .handle_irq = gic_handle_irq, | ||
| 193 | .timer = &tegra_timer, | 195 | .timer = &tegra_timer, |
| 194 | .init_machine = tegra_paz00_init, | 196 | .init_machine = tegra_paz00_init, |
| 195 | MACHINE_END | 197 | MACHINE_END |
diff --git a/arch/arm/mach-tegra/board-seaboard.c b/arch/arm/mach-tegra/board-seaboard.c index bf13ea355efc..7328379b1356 100644 --- a/arch/arm/mach-tegra/board-seaboard.c +++ b/arch/arm/mach-tegra/board-seaboard.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
| 36 | #include <asm/mach/arch.h> | 36 | #include <asm/mach/arch.h> |
| 37 | #include <asm/hardware/gic.h> | ||
| 37 | 38 | ||
| 38 | #include "board.h" | 39 | #include "board.h" |
| 39 | #include "board-seaboard.h" | 40 | #include "board-seaboard.h" |
| @@ -284,6 +285,7 @@ MACHINE_START(SEABOARD, "seaboard") | |||
| 284 | .map_io = tegra_map_common_io, | 285 | .map_io = tegra_map_common_io, |
| 285 | .init_early = tegra_init_early, | 286 | .init_early = tegra_init_early, |
| 286 | .init_irq = tegra_init_irq, | 287 | .init_irq = tegra_init_irq, |
| 288 | .handle_irq = gic_handle_irq, | ||
| 287 | .timer = &tegra_timer, | 289 | .timer = &tegra_timer, |
| 288 | .init_machine = tegra_seaboard_init, | 290 | .init_machine = tegra_seaboard_init, |
| 289 | MACHINE_END | 291 | MACHINE_END |
| @@ -293,6 +295,7 @@ MACHINE_START(KAEN, "kaen") | |||
| 293 | .map_io = tegra_map_common_io, | 295 | .map_io = tegra_map_common_io, |
| 294 | .init_early = tegra_init_early, | 296 | .init_early = tegra_init_early, |
| 295 | .init_irq = tegra_init_irq, | 297 | .init_irq = tegra_init_irq, |
| 298 | .handle_irq = gic_handle_irq, | ||
| 296 | .timer = &tegra_timer, | 299 | .timer = &tegra_timer, |
| 297 | .init_machine = tegra_kaen_init, | 300 | .init_machine = tegra_kaen_init, |
| 298 | MACHINE_END | 301 | MACHINE_END |
| @@ -302,6 +305,7 @@ MACHINE_START(WARIO, "wario") | |||
| 302 | .map_io = tegra_map_common_io, | 305 | .map_io = tegra_map_common_io, |
| 303 | .init_early = tegra_init_early, | 306 | .init_early = tegra_init_early, |
| 304 | .init_irq = tegra_init_irq, | 307 | .init_irq = tegra_init_irq, |
| 308 | .handle_irq = gic_handle_irq, | ||
| 305 | .timer = &tegra_timer, | 309 | .timer = &tegra_timer, |
| 306 | .init_machine = tegra_wario_init, | 310 | .init_machine = tegra_wario_init, |
| 307 | MACHINE_END | 311 | MACHINE_END |
diff --git a/arch/arm/mach-tegra/board-trimslice.c b/arch/arm/mach-tegra/board-trimslice.c index 1a6617b7806f..60a36a2e0be1 100644 --- a/arch/arm/mach-tegra/board-trimslice.c +++ b/arch/arm/mach-tegra/board-trimslice.c | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <linux/i2c.h> | 26 | #include <linux/i2c.h> |
| 27 | #include <linux/gpio.h> | 27 | #include <linux/gpio.h> |
| 28 | 28 | ||
| 29 | #include <asm/hardware/gic.h> | ||
| 29 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| 31 | #include <asm/setup.h> | 32 | #include <asm/setup.h> |
| @@ -176,6 +177,7 @@ MACHINE_START(TRIMSLICE, "trimslice") | |||
| 176 | .map_io = tegra_map_common_io, | 177 | .map_io = tegra_map_common_io, |
| 177 | .init_early = tegra_init_early, | 178 | .init_early = tegra_init_early, |
| 178 | .init_irq = tegra_init_irq, | 179 | .init_irq = tegra_init_irq, |
| 180 | .handle_irq = gic_handle_irq, | ||
| 179 | .timer = &tegra_timer, | 181 | .timer = &tegra_timer, |
| 180 | .init_machine = tegra_trimslice_init, | 182 | .init_machine = tegra_trimslice_init, |
| 181 | MACHINE_END | 183 | MACHINE_END |
diff --git a/arch/arm/mach-tegra/include/mach/entry-macro.S b/arch/arm/mach-tegra/include/mach/entry-macro.S index dd165c53889d..ac11262149c7 100644 --- a/arch/arm/mach-tegra/include/mach/entry-macro.S +++ b/arch/arm/mach-tegra/include/mach/entry-macro.S | |||
| @@ -12,30 +12,15 @@ | |||
| 12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
| 13 | * | 13 | * |
| 14 | */ | 14 | */ |
| 15 | #include <mach/iomap.h> | ||
| 16 | #include <mach/io.h> | ||
| 17 | |||
| 18 | #if defined(CONFIG_ARM_GIC) | ||
| 19 | #define HAVE_GET_IRQNR_PREAMBLE | ||
| 20 | #include <asm/hardware/entry-macro-gic.S> | ||
| 21 | |||
| 22 | /* Uses the GIC interrupt controller built into the cpu */ | ||
| 23 | #define ICTRL_BASE (IO_CPU_VIRT + 0x100) | ||
| 24 | 15 | ||
| 25 | .macro disable_fiq | 16 | .macro disable_fiq |
| 26 | .endm | 17 | .endm |
| 27 | 18 | ||
| 28 | .macro get_irqnr_preamble, base, tmp | 19 | .macro arch_ret_to_user, tmp1, tmp2 |
| 29 | movw \base, #(ICTRL_BASE & 0x0000ffff) | ||
| 30 | movt \base, #((ICTRL_BASE & 0xffff0000) >> 16) | ||
| 31 | .endm | 20 | .endm |
| 32 | 21 | ||
| 33 | .macro arch_ret_to_user, tmp1, tmp2 | 22 | #if !defined(CONFIG_ARM_GIC) |
| 34 | .endm | ||
| 35 | #else | ||
| 36 | /* legacy interrupt controller for AP16 */ | 23 | /* legacy interrupt controller for AP16 */ |
| 37 | .macro disable_fiq | ||
| 38 | .endm | ||
| 39 | 24 | ||
| 40 | .macro get_irqnr_preamble, base, tmp | 25 | .macro get_irqnr_preamble, base, tmp |
| 41 | @ enable imprecise aborts | 26 | @ enable imprecise aborts |
| @@ -46,9 +31,6 @@ | |||
| 46 | orr \base, #0x0000f000 | 31 | orr \base, #0x0000f000 |
| 47 | .endm | 32 | .endm |
| 48 | 33 | ||
| 49 | .macro arch_ret_to_user, tmp1, tmp2 | ||
| 50 | .endm | ||
| 51 | |||
| 52 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | 34 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp |
| 53 | ldr \irqnr, [\base, #0x20] @ EVT_IRQ_STS | 35 | ldr \irqnr, [\base, #0x20] @ EVT_IRQ_STS |
| 54 | cmp \irqnr, #0x80 | 36 | cmp \irqnr, #0x80 |
diff --git a/arch/arm/mach-tegra/include/mach/io.h b/arch/arm/mach-tegra/include/mach/io.h index 35a011fbc42d..f15defffb5d2 100644 --- a/arch/arm/mach-tegra/include/mach/io.h +++ b/arch/arm/mach-tegra/include/mach/io.h | |||
| @@ -71,12 +71,6 @@ | |||
| 71 | 71 | ||
| 72 | #ifndef __ASSEMBLER__ | 72 | #ifndef __ASSEMBLER__ |
| 73 | 73 | ||
| 74 | #define __arch_ioremap tegra_ioremap | ||
| 75 | #define __arch_iounmap tegra_iounmap | ||
| 76 | |||
| 77 | void __iomem *tegra_ioremap(unsigned long phys, size_t size, unsigned int type); | ||
| 78 | void tegra_iounmap(volatile void __iomem *addr); | ||
| 79 | |||
| 80 | #define IO_ADDRESS(n) (IO_TO_VIRT(n)) | 74 | #define IO_ADDRESS(n) (IO_TO_VIRT(n)) |
| 81 | 75 | ||
| 82 | #ifdef CONFIG_TEGRA_PCI | 76 | #ifdef CONFIG_TEGRA_PCI |
diff --git a/arch/arm/mach-tegra/include/mach/vmalloc.h b/arch/arm/mach-tegra/include/mach/vmalloc.h deleted file mode 100644 index fd6aa65b2dc6..000000000000 --- a/arch/arm/mach-tegra/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-tegra/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Google, Inc. | ||
| 5 | * | ||
| 6 | * Author: | ||
| 7 | * Colin Cross <ccross@google.com> | ||
| 8 | * Erik Gilling <konkers@google.com> | ||
| 9 | * | ||
| 10 | * This software is licensed under the terms of the GNU General Public | ||
| 11 | * License version 2, as published by the Free Software Foundation, and | ||
| 12 | * may be copied, distributed, and modified under those terms. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __MACH_TEGRA_VMALLOC_H | ||
| 22 | #define __MACH_TEGRA_VMALLOC_H | ||
| 23 | |||
| 24 | #include <asm/sizes.h> | ||
| 25 | |||
| 26 | #define VMALLOC_END 0xFE000000UL | ||
| 27 | |||
| 28 | #endif | ||
diff --git a/arch/arm/mach-tegra/io.c b/arch/arm/mach-tegra/io.c index 5489f8b5d6ad..d23ee2db2827 100644 --- a/arch/arm/mach-tegra/io.c +++ b/arch/arm/mach-tegra/io.c | |||
| @@ -60,24 +60,3 @@ void __init tegra_map_common_io(void) | |||
| 60 | { | 60 | { |
| 61 | iotable_init(tegra_io_desc, ARRAY_SIZE(tegra_io_desc)); | 61 | iotable_init(tegra_io_desc, ARRAY_SIZE(tegra_io_desc)); |
| 62 | } | 62 | } |
| 63 | |||
| 64 | /* | ||
| 65 | * Intercept ioremap() requests for addresses in our fixed mapping regions. | ||
| 66 | */ | ||
| 67 | void __iomem *tegra_ioremap(unsigned long p, size_t size, unsigned int type) | ||
| 68 | { | ||
| 69 | void __iomem *v = IO_ADDRESS(p); | ||
| 70 | if (v == NULL) | ||
| 71 | v = __arm_ioremap(p, size, type); | ||
| 72 | return v; | ||
| 73 | } | ||
| 74 | EXPORT_SYMBOL(tegra_ioremap); | ||
| 75 | |||
| 76 | void tegra_iounmap(volatile void __iomem *addr) | ||
| 77 | { | ||
| 78 | unsigned long virt = (unsigned long)addr; | ||
| 79 | |||
| 80 | if (virt >= VMALLOC_START && virt < VMALLOC_END) | ||
| 81 | __iounmap(addr); | ||
| 82 | } | ||
| 83 | EXPORT_SYMBOL(tegra_iounmap); | ||
diff --git a/arch/arm/mach-u300/include/mach/entry-macro.S b/arch/arm/mach-u300/include/mach/entry-macro.S index 20731ae39d38..7181d6ac6651 100644 --- a/arch/arm/mach-u300/include/mach/entry-macro.S +++ b/arch/arm/mach-u300/include/mach/entry-macro.S | |||
| @@ -8,33 +8,9 @@ | |||
| 8 | * Low-level IRQ helper macros for ST-Ericsson U300 | 8 | * Low-level IRQ helper macros for ST-Ericsson U300 |
| 9 | * Author: Linus Walleij <linus.walleij@stericsson.com> | 9 | * Author: Linus Walleij <linus.walleij@stericsson.com> |
| 10 | */ | 10 | */ |
| 11 | #include <mach/hardware.h> | ||
| 12 | #include <asm/hardware/vic.h> | ||
| 13 | 11 | ||
| 14 | .macro disable_fiq | 12 | .macro disable_fiq |
| 15 | .endm | 13 | .endm |
| 16 | 14 | ||
| 17 | .macro get_irqnr_preamble, base, tmp | ||
| 18 | .endm | ||
| 19 | |||
| 20 | .macro arch_ret_to_user, tmp1, tmp2 | 15 | .macro arch_ret_to_user, tmp1, tmp2 |
| 21 | .endm | 16 | .endm |
| 22 | |||
| 23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 24 | ldr \base, = U300_AHB_PER_VIRT_BASE-U300_AHB_PER_PHYS_BASE+U300_INTCON0_BASE | ||
| 25 | ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get masked status | ||
| 26 | mov \irqnr, #0 | ||
| 27 | teq \irqstat, #0 | ||
| 28 | bne 1002f | ||
| 29 | 1001: ldr \base, = U300_AHB_PER_VIRT_BASE-U300_AHB_PER_PHYS_BASE+U300_INTCON1_BASE | ||
| 30 | ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get masked status | ||
| 31 | mov \irqnr, #32 | ||
| 32 | teq \irqstat, #0 | ||
| 33 | beq 1003f | ||
| 34 | 1002: tst \irqstat, #1 | ||
| 35 | bne 1003f | ||
| 36 | add \irqnr, \irqnr, #1 | ||
| 37 | movs \irqstat, \irqstat, lsr #1 | ||
| 38 | bne 1002b | ||
| 39 | 1003: /* EQ will be set if no irqs pending */ | ||
| 40 | .endm | ||
diff --git a/arch/arm/mach-u300/include/mach/system.h b/arch/arm/mach-u300/include/mach/system.h index 8daf13634ce0..6b6fef7a438c 100644 --- a/arch/arm/mach-u300/include/mach/system.h +++ b/arch/arm/mach-u300/include/mach/system.h | |||
| @@ -27,8 +27,6 @@ static void arch_reset(char mode, const char *cmd) | |||
| 27 | case 's': | 27 | case 's': |
| 28 | case 'h': | 28 | case 'h': |
| 29 | printk(KERN_CRIT "RESET: shutting down/rebooting system\n"); | 29 | printk(KERN_CRIT "RESET: shutting down/rebooting system\n"); |
| 30 | /* Disable interrupts */ | ||
| 31 | local_irq_disable(); | ||
| 32 | #ifdef CONFIG_COH901327_WATCHDOG | 30 | #ifdef CONFIG_COH901327_WATCHDOG |
| 33 | coh901327_watchdog_reset(); | 31 | coh901327_watchdog_reset(); |
| 34 | #endif | 32 | #endif |
diff --git a/arch/arm/mach-u300/include/mach/vmalloc.h b/arch/arm/mach-u300/include/mach/vmalloc.h deleted file mode 100644 index ec423b92b81d..000000000000 --- a/arch/arm/mach-u300/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,12 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * arch/arm/mach-u300/include/mach/vmalloc.h | ||
| 4 | * | ||
| 5 | * | ||
| 6 | * Copyright (C) 2006-2009 ST-Ericsson AB | ||
| 7 | * License terms: GNU General Public License (GPL) version 2 | ||
| 8 | * Virtual memory allocations | ||
| 9 | * End must be above the I/O registers and on an even 2MiB boundary. | ||
| 10 | * Author: Linus Walleij <linus.walleij@stericsson.com> | ||
| 11 | */ | ||
| 12 | #define VMALLOC_END 0xfe800000UL | ||
diff --git a/arch/arm/mach-u300/u300.c b/arch/arm/mach-u300/u300.c index 89422ee7f3a8..4a4fd334eb6e 100644 --- a/arch/arm/mach-u300/u300.c +++ b/arch/arm/mach-u300/u300.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
| 20 | #include <mach/hardware.h> | 20 | #include <mach/hardware.h> |
| 21 | #include <mach/platform.h> | 21 | #include <mach/platform.h> |
| 22 | #include <asm/hardware/vic.h> | ||
| 22 | #include <asm/mach-types.h> | 23 | #include <asm/mach-types.h> |
| 23 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
| 24 | #include <asm/memory.h> | 25 | #include <asm/memory.h> |
| @@ -49,6 +50,7 @@ MACHINE_START(U300, MACH_U300_STRING) | |||
| 49 | .atag_offset = BOOT_PARAMS_OFFSET, | 50 | .atag_offset = BOOT_PARAMS_OFFSET, |
| 50 | .map_io = u300_map_io, | 51 | .map_io = u300_map_io, |
| 51 | .init_irq = u300_init_irq, | 52 | .init_irq = u300_init_irq, |
| 53 | .handle_irq = vic_handle_irq, | ||
| 52 | .timer = &u300_timer, | 54 | .timer = &u300_timer, |
| 53 | .init_machine = u300_init_machine, | 55 | .init_machine = u300_init_machine, |
| 54 | MACHINE_END | 56 | MACHINE_END |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index bdd7b80dd7ad..de1f5f8f7330 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | #include <linux/leds.h> | 33 | #include <linux/leds.h> |
| 34 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 35 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
| 36 | #include <asm/hardware/gic.h> | ||
| 36 | 37 | ||
| 37 | #include <plat/i2c.h> | 38 | #include <plat/i2c.h> |
| 38 | #include <plat/ste_dma40.h> | 39 | #include <plat/ste_dma40.h> |
| @@ -695,6 +696,7 @@ MACHINE_START(U8500, "ST-Ericsson MOP500 platform") | |||
| 695 | .init_irq = ux500_init_irq, | 696 | .init_irq = ux500_init_irq, |
| 696 | /* we re-use nomadik timer here */ | 697 | /* we re-use nomadik timer here */ |
| 697 | .timer = &ux500_timer, | 698 | .timer = &ux500_timer, |
| 699 | .handle_irq = gic_handle_irq, | ||
| 698 | .init_machine = mop500_init_machine, | 700 | .init_machine = mop500_init_machine, |
| 699 | MACHINE_END | 701 | MACHINE_END |
| 700 | 702 | ||
| @@ -703,6 +705,7 @@ MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+") | |||
| 703 | .map_io = u8500_map_io, | 705 | .map_io = u8500_map_io, |
| 704 | .init_irq = ux500_init_irq, | 706 | .init_irq = ux500_init_irq, |
| 705 | .timer = &ux500_timer, | 707 | .timer = &ux500_timer, |
| 708 | .handle_irq = gic_handle_irq, | ||
| 706 | .init_machine = hrefv60_init_machine, | 709 | .init_machine = hrefv60_init_machine, |
| 707 | MACHINE_END | 710 | MACHINE_END |
| 708 | 711 | ||
| @@ -712,5 +715,6 @@ MACHINE_START(SNOWBALL, "Calao Systems Snowball platform") | |||
| 712 | .init_irq = ux500_init_irq, | 715 | .init_irq = ux500_init_irq, |
| 713 | /* we re-use nomadik timer here */ | 716 | /* we re-use nomadik timer here */ |
| 714 | .timer = &ux500_timer, | 717 | .timer = &ux500_timer, |
| 718 | .handle_irq = gic_handle_irq, | ||
| 715 | .init_machine = snowball_init_machine, | 719 | .init_machine = snowball_init_machine, |
| 716 | MACHINE_END | 720 | MACHINE_END |
diff --git a/arch/arm/mach-ux500/board-u5500.c b/arch/arm/mach-ux500/board-u5500.c index 82025ba70c03..fe1569b67c91 100644 --- a/arch/arm/mach-ux500/board-u5500.c +++ b/arch/arm/mach-ux500/board-u5500.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/i2c.h> | 12 | #include <linux/i2c.h> |
| 13 | #include <linux/mfd/ab5500/ab5500.h> | 13 | #include <linux/mfd/ab5500/ab5500.h> |
| 14 | 14 | ||
| 15 | #include <asm/hardware/gic.h> | ||
| 15 | #include <asm/mach/arch.h> | 16 | #include <asm/mach/arch.h> |
| 16 | #include <asm/mach-types.h> | 17 | #include <asm/mach-types.h> |
| 17 | 18 | ||
| @@ -149,5 +150,6 @@ MACHINE_START(U5500, "ST-Ericsson U5500 Platform") | |||
| 149 | .map_io = u5500_map_io, | 150 | .map_io = u5500_map_io, |
| 150 | .init_irq = ux500_init_irq, | 151 | .init_irq = ux500_init_irq, |
| 151 | .timer = &ux500_timer, | 152 | .timer = &ux500_timer, |
| 153 | .handle_irq = gic_handle_irq, | ||
| 152 | .init_machine = u5500_init_machine, | 154 | .init_machine = u5500_init_machine, |
| 153 | MACHINE_END | 155 | MACHINE_END |
diff --git a/arch/arm/mach-ux500/include/mach/entry-macro.S b/arch/arm/mach-ux500/include/mach/entry-macro.S index 071bba94f727..e16299e1020a 100644 --- a/arch/arm/mach-ux500/include/mach/entry-macro.S +++ b/arch/arm/mach-ux500/include/mach/entry-macro.S | |||
| @@ -10,8 +10,6 @@ | |||
| 10 | * License version 2. This program is licensed "as is" without any | 10 | * License version 2. This program is licensed "as is" without any |
| 11 | * warranty of any kind, whether express or implied. | 11 | * warranty of any kind, whether express or implied. |
| 12 | */ | 12 | */ |
| 13 | #include <mach/hardware.h> | ||
| 14 | #include <asm/hardware/entry-macro-gic.S> | ||
| 15 | 13 | ||
| 16 | .macro disable_fiq | 14 | .macro disable_fiq |
| 17 | .endm | 15 | .endm |
diff --git a/arch/arm/mach-ux500/include/mach/vmalloc.h b/arch/arm/mach-ux500/include/mach/vmalloc.h deleted file mode 100644 index a4945cb41172..000000000000 --- a/arch/arm/mach-ux500/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | #define VMALLOC_END 0xf0000000UL | ||
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index e340a54251df..4d8dfc15f3e6 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
| @@ -141,11 +141,6 @@ static struct map_desc versatile_io_desc[] __initdata = { | |||
| 141 | }, | 141 | }, |
| 142 | #ifdef CONFIG_MACH_VERSATILE_AB | 142 | #ifdef CONFIG_MACH_VERSATILE_AB |
| 143 | { | 143 | { |
| 144 | .virtual = IO_ADDRESS(VERSATILE_GPIO0_BASE), | ||
| 145 | .pfn = __phys_to_pfn(VERSATILE_GPIO0_BASE), | ||
| 146 | .length = SZ_4K, | ||
| 147 | .type = MT_DEVICE | ||
| 148 | }, { | ||
| 149 | .virtual = IO_ADDRESS(VERSATILE_IB2_BASE), | 144 | .virtual = IO_ADDRESS(VERSATILE_IB2_BASE), |
| 150 | .pfn = __phys_to_pfn(VERSATILE_IB2_BASE), | 145 | .pfn = __phys_to_pfn(VERSATILE_IB2_BASE), |
| 151 | .length = SZ_64M, | 146 | .length = SZ_64M, |
diff --git a/arch/arm/mach-versatile/include/mach/entry-macro.S b/arch/arm/mach-versatile/include/mach/entry-macro.S index e6f7c1663160..b6f0dbf122ee 100644 --- a/arch/arm/mach-versatile/include/mach/entry-macro.S +++ b/arch/arm/mach-versatile/include/mach/entry-macro.S | |||
| @@ -7,39 +7,9 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <mach/hardware.h> | ||
| 11 | #include <mach/platform.h> | ||
| 12 | #include <asm/hardware/vic.h> | ||
| 13 | 10 | ||
| 14 | .macro disable_fiq | 11 | .macro disable_fiq |
| 15 | .endm | 12 | .endm |
| 16 | 13 | ||
| 17 | .macro get_irqnr_preamble, base, tmp | ||
| 18 | ldr \base, =IO_ADDRESS(VERSATILE_VIC_BASE) | ||
| 19 | .endm | ||
| 20 | |||
| 21 | .macro arch_ret_to_user, tmp1, tmp2 | 14 | .macro arch_ret_to_user, tmp1, tmp2 |
| 22 | .endm | 15 | .endm |
| 23 | |||
| 24 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 25 | ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get masked status | ||
| 26 | mov \irqnr, #0 | ||
| 27 | teq \irqstat, #0 | ||
| 28 | beq 1003f | ||
| 29 | |||
| 30 | 1001: tst \irqstat, #15 | ||
| 31 | bne 1002f | ||
| 32 | add \irqnr, \irqnr, #4 | ||
| 33 | movs \irqstat, \irqstat, lsr #4 | ||
| 34 | bne 1001b | ||
| 35 | 1002: tst \irqstat, #1 | ||
| 36 | bne 1003f | ||
| 37 | add \irqnr, \irqnr, #1 | ||
| 38 | movs \irqstat, \irqstat, lsr #1 | ||
| 39 | bne 1002b | ||
| 40 | 1003: /* EQ will be set if no irqs pending */ | ||
| 41 | |||
| 42 | @ clz \irqnr, \irqstat | ||
| 43 | @1003: /* EQ will be set if we reach MAXIRQNUM */ | ||
| 44 | .endm | ||
| 45 | |||
diff --git a/arch/arm/mach-versatile/include/mach/vmalloc.h b/arch/arm/mach-versatile/include/mach/vmalloc.h deleted file mode 100644 index 7d8e069ad51b..000000000000 --- a/arch/arm/mach-versatile/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,21 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-versatile/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2003 ARM Limited | ||
| 5 | * Copyright (C) 2000 Russell King. | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 20 | */ | ||
| 21 | #define VMALLOC_END 0xd8000000UL | ||
diff --git a/arch/arm/mach-versatile/versatile_ab.c b/arch/arm/mach-versatile/versatile_ab.c index fda4866703cd..c83a1f379f7a 100644 --- a/arch/arm/mach-versatile/versatile_ab.c +++ b/arch/arm/mach-versatile/versatile_ab.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
| 30 | #include <asm/hardware/vic.h> | ||
| 30 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 31 | 32 | ||
| 32 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
| @@ -39,6 +40,7 @@ MACHINE_START(VERSATILE_AB, "ARM-Versatile AB") | |||
| 39 | .map_io = versatile_map_io, | 40 | .map_io = versatile_map_io, |
| 40 | .init_early = versatile_init_early, | 41 | .init_early = versatile_init_early, |
| 41 | .init_irq = versatile_init_irq, | 42 | .init_irq = versatile_init_irq, |
| 43 | .handle_irq = vic_handle_irq, | ||
| 42 | .timer = &versatile_timer, | 44 | .timer = &versatile_timer, |
| 43 | .init_machine = versatile_init, | 45 | .init_machine = versatile_init, |
| 44 | MACHINE_END | 46 | MACHINE_END |
diff --git a/arch/arm/mach-versatile/versatile_dt.c b/arch/arm/mach-versatile/versatile_dt.c index 54e037c090f5..f4d1e0f072c8 100644 --- a/arch/arm/mach-versatile/versatile_dt.c +++ b/arch/arm/mach-versatile/versatile_dt.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
| 25 | #include <linux/of_irq.h> | 25 | #include <linux/of_irq.h> |
| 26 | #include <linux/of_platform.h> | 26 | #include <linux/of_platform.h> |
| 27 | #include <asm/hardware/vic.h> | ||
| 27 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 29 | 30 | ||
| @@ -45,6 +46,7 @@ DT_MACHINE_START(VERSATILE_PB, "ARM-Versatile (Device Tree Support)") | |||
| 45 | .map_io = versatile_map_io, | 46 | .map_io = versatile_map_io, |
| 46 | .init_early = versatile_init_early, | 47 | .init_early = versatile_init_early, |
| 47 | .init_irq = versatile_init_irq, | 48 | .init_irq = versatile_init_irq, |
| 49 | .handle_irq = vic_handle_irq, | ||
| 48 | .timer = &versatile_timer, | 50 | .timer = &versatile_timer, |
| 49 | .init_machine = versatile_dt_init, | 51 | .init_machine = versatile_dt_init, |
| 50 | .dt_compat = versatile_dt_match, | 52 | .dt_compat = versatile_dt_match, |
diff --git a/arch/arm/mach-versatile/versatile_pb.c b/arch/arm/mach-versatile/versatile_pb.c index feaf9cbe60f6..4d31eeb6c101 100644 --- a/arch/arm/mach-versatile/versatile_pb.c +++ b/arch/arm/mach-versatile/versatile_pb.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
| 29 | 29 | ||
| 30 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
| 31 | #include <asm/hardware/vic.h> | ||
| 31 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
| 32 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
| 33 | 34 | ||
| @@ -107,6 +108,7 @@ MACHINE_START(VERSATILE_PB, "ARM-Versatile PB") | |||
| 107 | .map_io = versatile_map_io, | 108 | .map_io = versatile_map_io, |
| 108 | .init_early = versatile_init_early, | 109 | .init_early = versatile_init_early, |
| 109 | .init_irq = versatile_init_irq, | 110 | .init_irq = versatile_init_irq, |
| 111 | .handle_irq = vic_handle_irq, | ||
| 110 | .timer = &versatile_timer, | 112 | .timer = &versatile_timer, |
| 111 | .init_machine = versatile_pb_init, | 113 | .init_machine = versatile_pb_init, |
| 112 | MACHINE_END | 114 | MACHINE_END |
diff --git a/arch/arm/mach-vexpress/include/mach/entry-macro.S b/arch/arm/mach-vexpress/include/mach/entry-macro.S index 73c11297509e..a14f9e62ca92 100644 --- a/arch/arm/mach-vexpress/include/mach/entry-macro.S +++ b/arch/arm/mach-vexpress/include/mach/entry-macro.S | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | #include <asm/hardware/entry-macro-gic.S> | ||
| 2 | |||
| 3 | .macro disable_fiq | 1 | .macro disable_fiq |
| 4 | .endm | 2 | .endm |
| 5 | 3 | ||
diff --git a/arch/arm/mach-vexpress/include/mach/vmalloc.h b/arch/arm/mach-vexpress/include/mach/vmalloc.h deleted file mode 100644 index f43a36ef678b..000000000000 --- a/arch/arm/mach-vexpress/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,21 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-vexpress/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2003 ARM Limited | ||
| 5 | * Copyright (C) 2000 Russell King. | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 20 | */ | ||
| 21 | #define VMALLOC_END 0xf8000000UL | ||
diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index 1fafc3244607..7aa07a8ce232 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <asm/hardware/arm_timer.h> | 23 | #include <asm/hardware/arm_timer.h> |
| 24 | #include <asm/hardware/timer-sp.h> | 24 | #include <asm/hardware/timer-sp.h> |
| 25 | #include <asm/hardware/sp810.h> | 25 | #include <asm/hardware/sp810.h> |
| 26 | #include <asm/hardware/gic.h> | ||
| 26 | 27 | ||
| 27 | #include <mach/ct-ca9x4.h> | 28 | #include <mach/ct-ca9x4.h> |
| 28 | #include <mach/motherboard.h> | 29 | #include <mach/motherboard.h> |
| @@ -448,5 +449,6 @@ MACHINE_START(VEXPRESS, "ARM-Versatile Express") | |||
| 448 | .init_early = v2m_init_early, | 449 | .init_early = v2m_init_early, |
| 449 | .init_irq = v2m_init_irq, | 450 | .init_irq = v2m_init_irq, |
| 450 | .timer = &v2m_timer, | 451 | .timer = &v2m_timer, |
| 452 | .handle_irq = gic_handle_irq, | ||
| 451 | .init_machine = v2m_init, | 453 | .init_machine = v2m_init, |
| 452 | MACHINE_END | 454 | MACHINE_END |
diff --git a/arch/arm/mach-vt8500/include/mach/vmalloc.h b/arch/arm/mach-vt8500/include/mach/vmalloc.h deleted file mode 100644 index 4642290ce416..000000000000 --- a/arch/arm/mach-vt8500/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-vt8500/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2000 Russell King. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | #define VMALLOC_END 0xd0000000UL | ||
diff --git a/arch/arm/mach-w90x900/include/mach/system.h b/arch/arm/mach-w90x900/include/mach/system.h index ce228bdc66dd..68875a1c16be 100644 --- a/arch/arm/mach-w90x900/include/mach/system.h +++ b/arch/arm/mach-w90x900/include/mach/system.h | |||
| @@ -33,7 +33,7 @@ static void arch_reset(char mode, const char *cmd) | |||
| 33 | { | 33 | { |
| 34 | if (mode == 's') { | 34 | if (mode == 's') { |
| 35 | /* Jump into ROM at address 0 */ | 35 | /* Jump into ROM at address 0 */ |
| 36 | cpu_reset(0); | 36 | soft_restart(0); |
| 37 | } else { | 37 | } else { |
| 38 | __raw_writel(WTE | WTRE | WTCLK, WTCR); | 38 | __raw_writel(WTE | WTRE | WTCLK, WTCR); |
| 39 | } | 39 | } |
diff --git a/arch/arm/mach-w90x900/include/mach/vmalloc.h b/arch/arm/mach-w90x900/include/mach/vmalloc.h deleted file mode 100644 index b067e44500a4..000000000000 --- a/arch/arm/mach-w90x900/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-w90x900/include/mach/vmalloc.h | ||
| 3 | * | ||
| 4 | * Copyright (c) 2008 Nuvoton technology corporation | ||
| 5 | * All rights reserved. | ||
| 6 | * | ||
| 7 | * Wan ZongShun <mcuos.com@gmail.com> | ||
| 8 | * | ||
| 9 | * Based on arch/arm/mach-s3c2410/include/mach/vmalloc.h | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by | ||
| 13 | * the Free Software Foundation; either version 2 of the License, or | ||
| 14 | * (at your option) any later version. | ||
| 15 | * | ||
| 16 | */ | ||
| 17 | |||
| 18 | #ifndef __ASM_ARCH_VMALLOC_H | ||
| 19 | #define __ASM_ARCH_VMALLOC_H | ||
| 20 | |||
| 21 | #define VMALLOC_END (0xe0000000UL) | ||
| 22 | |||
| 23 | #endif /* __ASM_ARCH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-w90x900/irq.c b/arch/arm/mach-w90x900/irq.c index 7bf143c443f1..b466e2450ba3 100644 --- a/arch/arm/mach-w90x900/irq.c +++ b/arch/arm/mach-w90x900/irq.c | |||
| @@ -28,6 +28,8 @@ | |||
| 28 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 29 | #include <mach/regs-irq.h> | 29 | #include <mach/regs-irq.h> |
| 30 | 30 | ||
| 31 | #include "nuc9xx.h" | ||
| 32 | |||
| 31 | struct group_irq { | 33 | struct group_irq { |
| 32 | unsigned long gpen; | 34 | unsigned long gpen; |
| 33 | unsigned int enabled; | 35 | unsigned int enabled; |
diff --git a/arch/arm/mach-w90x900/nuc910.h b/arch/arm/mach-w90x900/nuc910.h index 83e9ba5fc26c..b14c71a9e683 100644 --- a/arch/arm/mach-w90x900/nuc910.h +++ b/arch/arm/mach-w90x900/nuc910.h | |||
| @@ -12,14 +12,7 @@ | |||
| 12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
| 13 | * | 13 | * |
| 14 | */ | 14 | */ |
| 15 | 15 | #include "nuc9xx.h" | |
| 16 | struct map_desc; | ||
| 17 | struct sys_timer; | ||
| 18 | |||
| 19 | /* core initialisation functions */ | ||
| 20 | |||
| 21 | extern void nuc900_init_irq(void); | ||
| 22 | extern struct sys_timer nuc900_timer; | ||
| 23 | 16 | ||
| 24 | /* extern file from nuc910.c */ | 17 | /* extern file from nuc910.c */ |
| 25 | 18 | ||
diff --git a/arch/arm/mach-w90x900/nuc950.h b/arch/arm/mach-w90x900/nuc950.h index 98a1148bc5ae..6e9de3051cd4 100644 --- a/arch/arm/mach-w90x900/nuc950.h +++ b/arch/arm/mach-w90x900/nuc950.h | |||
| @@ -12,14 +12,7 @@ | |||
| 12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
| 13 | * | 13 | * |
| 14 | */ | 14 | */ |
| 15 | 15 | #include "nuc9xx.h" | |
| 16 | struct map_desc; | ||
| 17 | struct sys_timer; | ||
| 18 | |||
| 19 | /* core initialisation functions */ | ||
| 20 | |||
| 21 | extern void nuc900_init_irq(void); | ||
| 22 | extern struct sys_timer nuc900_timer; | ||
| 23 | 16 | ||
| 24 | /* extern file from nuc950.c */ | 17 | /* extern file from nuc950.c */ |
| 25 | 18 | ||
diff --git a/arch/arm/mach-w90x900/nuc960.h b/arch/arm/mach-w90x900/nuc960.h index f0c07cbe3a82..9f6df9a00286 100644 --- a/arch/arm/mach-w90x900/nuc960.h +++ b/arch/arm/mach-w90x900/nuc960.h | |||
| @@ -12,14 +12,7 @@ | |||
| 12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
| 13 | * | 13 | * |
| 14 | */ | 14 | */ |
| 15 | 15 | #include "nuc9xx.h" | |
| 16 | struct map_desc; | ||
| 17 | struct sys_timer; | ||
| 18 | |||
| 19 | /* core initialisation functions */ | ||
| 20 | |||
| 21 | extern void nuc900_init_irq(void); | ||
| 22 | extern struct sys_timer nuc900_timer; | ||
| 23 | 16 | ||
| 24 | /* extern file from nuc960.c */ | 17 | /* extern file from nuc960.c */ |
| 25 | 18 | ||
diff --git a/arch/arm/mach-w90x900/nuc9xx.h b/arch/arm/mach-w90x900/nuc9xx.h new file mode 100644 index 000000000000..847c4f3e0440 --- /dev/null +++ b/arch/arm/mach-w90x900/nuc9xx.h | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-w90x900/nuc9xx.h | ||
| 3 | * | ||
| 4 | * Copied from nuc910.h, which had: | ||
| 5 | * | ||
| 6 | * Copyright (c) 2008 Nuvoton corporation | ||
| 7 | * | ||
| 8 | * Header file for NUC900 CPU support | ||
| 9 | * | ||
| 10 | * Wan ZongShun <mcuos.com@gmail.com> | ||
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify | ||
| 13 | * it under the terms of the GNU General Public License version 2 as | ||
| 14 | * published by the Free Software Foundation. | ||
| 15 | * | ||
| 16 | */ | ||
| 17 | struct map_desc; | ||
| 18 | struct sys_timer; | ||
| 19 | |||
| 20 | /* core initialisation functions */ | ||
| 21 | |||
| 22 | extern void nuc900_init_irq(void); | ||
| 23 | extern struct sys_timer nuc900_timer; | ||
diff --git a/arch/arm/mach-w90x900/time.c b/arch/arm/mach-w90x900/time.c index a2c4e2d0a0d4..fa27c498ac09 100644 --- a/arch/arm/mach-w90x900/time.c +++ b/arch/arm/mach-w90x900/time.c | |||
| @@ -33,6 +33,8 @@ | |||
| 33 | #include <mach/map.h> | 33 | #include <mach/map.h> |
| 34 | #include <mach/regs-timer.h> | 34 | #include <mach/regs-timer.h> |
| 35 | 35 | ||
| 36 | #include "nuc9xx.h" | ||
| 37 | |||
| 36 | #define RESETINT 0x1f | 38 | #define RESETINT 0x1f |
| 37 | #define PERIOD (0x01 << 27) | 39 | #define PERIOD (0x01 << 27) |
| 38 | #define ONESHOT (0x00 << 27) | 40 | #define ONESHOT (0x00 << 27) |
diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c index 73e93687b81a..ab5cfddc0d7b 100644 --- a/arch/arm/mach-zynq/common.c +++ b/arch/arm/mach-zynq/common.c | |||
| @@ -112,6 +112,7 @@ static const char *xilinx_dt_match[] = { | |||
| 112 | MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform") | 112 | MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform") |
| 113 | .map_io = xilinx_map_io, | 113 | .map_io = xilinx_map_io, |
| 114 | .init_irq = xilinx_irq_init, | 114 | .init_irq = xilinx_irq_init, |
| 115 | .handle_irq = gic_handle_irq, | ||
| 115 | .init_machine = xilinx_init_machine, | 116 | .init_machine = xilinx_init_machine, |
| 116 | .timer = &xttcpss_sys_timer, | 117 | .timer = &xttcpss_sys_timer, |
| 117 | .dt_compat = xilinx_dt_match, | 118 | .dt_compat = xilinx_dt_match, |
diff --git a/arch/arm/mach-zynq/include/mach/entry-macro.S b/arch/arm/mach-zynq/include/mach/entry-macro.S index 3cfc01b37461..d621fb732569 100644 --- a/arch/arm/mach-zynq/include/mach/entry-macro.S +++ b/arch/arm/mach-zynq/include/mach/entry-macro.S | |||
| @@ -20,9 +20,6 @@ | |||
| 20 | * GNU General Public License for more details. | 20 | * GNU General Public License for more details. |
| 21 | */ | 21 | */ |
| 22 | 22 | ||
| 23 | #include <mach/hardware.h> | ||
| 24 | #include <asm/hardware/entry-macro-gic.S> | ||
| 25 | |||
| 26 | .macro disable_fiq | 23 | .macro disable_fiq |
| 27 | .endm | 24 | .endm |
| 28 | 25 | ||
diff --git a/arch/arm/mach-zynq/include/mach/vmalloc.h b/arch/arm/mach-zynq/include/mach/vmalloc.h deleted file mode 100644 index 2398eff1e8b8..000000000000 --- a/arch/arm/mach-zynq/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | /* arch/arm/mach-zynq/include/mach/vmalloc.h | ||
| 2 | * | ||
| 3 | * Copyright (C) 2011 Xilinx | ||
| 4 | * | ||
| 5 | * This software is licensed under the terms of the GNU General Public | ||
| 6 | * License version 2, as published by the Free Software Foundation, and | ||
| 7 | * may be copied, distributed, and modified under those terms. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MACH_VMALLOC_H__ | ||
| 16 | #define __MACH_VMALLOC_H__ | ||
| 17 | |||
| 18 | #define VMALLOC_END 0xE0000000UL | ||
| 19 | |||
| 20 | #endif | ||
diff --git a/arch/arm/mm/idmap.c b/arch/arm/mm/idmap.c index 2be9139a4ef3..296ad2eaddb0 100644 --- a/arch/arm/mm/idmap.c +++ b/arch/arm/mm/idmap.c | |||
| @@ -78,7 +78,7 @@ void identity_mapping_del(pgd_t *pgd, unsigned long addr, unsigned long end) | |||
| 78 | * the user-mode pages. This will then ensure that we have predictable | 78 | * the user-mode pages. This will then ensure that we have predictable |
| 79 | * results when turning the mmu off | 79 | * results when turning the mmu off |
| 80 | */ | 80 | */ |
| 81 | void setup_mm_for_reboot(char mode) | 81 | void setup_mm_for_reboot(void) |
| 82 | { | 82 | { |
| 83 | /* | 83 | /* |
| 84 | * We need to access to user-mode page tables here. For kernel threads | 84 | * We need to access to user-mode page tables here. For kernel threads |
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index fbdd12ea3a58..786adddf1a86 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
| @@ -20,7 +20,6 @@ | |||
| 20 | #include <linux/highmem.h> | 20 | #include <linux/highmem.h> |
| 21 | #include <linux/gfp.h> | 21 | #include <linux/gfp.h> |
| 22 | #include <linux/memblock.h> | 22 | #include <linux/memblock.h> |
| 23 | #include <linux/sort.h> | ||
| 24 | 23 | ||
| 25 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
| 26 | #include <asm/prom.h> | 25 | #include <asm/prom.h> |
| @@ -134,30 +133,18 @@ void show_mem(unsigned int filter) | |||
| 134 | } | 133 | } |
| 135 | 134 | ||
| 136 | static void __init find_limits(unsigned long *min, unsigned long *max_low, | 135 | static void __init find_limits(unsigned long *min, unsigned long *max_low, |
| 137 | unsigned long *max_high) | 136 | unsigned long *max_high) |
| 138 | { | 137 | { |
| 139 | struct meminfo *mi = &meminfo; | 138 | struct meminfo *mi = &meminfo; |
| 140 | int i; | 139 | int i; |
| 141 | 140 | ||
| 142 | *min = -1UL; | 141 | /* This assumes the meminfo array is properly sorted */ |
| 143 | *max_low = *max_high = 0; | 142 | *min = bank_pfn_start(&mi->bank[0]); |
| 144 | 143 | for_each_bank (i, mi) | |
| 145 | for_each_bank (i, mi) { | 144 | if (mi->bank[i].highmem) |
| 146 | struct membank *bank = &mi->bank[i]; | 145 | break; |
| 147 | unsigned long start, end; | 146 | *max_low = bank_pfn_end(&mi->bank[i - 1]); |
| 148 | 147 | *max_high = bank_pfn_end(&mi->bank[mi->nr_banks - 1]); | |
| 149 | start = bank_pfn_start(bank); | ||
| 150 | end = bank_pfn_end(bank); | ||
| 151 | |||
| 152 | if (*min > start) | ||
| 153 | *min = start; | ||
| 154 | if (*max_high < end) | ||
| 155 | *max_high = end; | ||
| 156 | if (bank->highmem) | ||
| 157 | continue; | ||
| 158 | if (*max_low < end) | ||
| 159 | *max_low = end; | ||
| 160 | } | ||
| 161 | } | 148 | } |
| 162 | 149 | ||
| 163 | static void __init arm_bootmem_init(unsigned long start_pfn, | 150 | static void __init arm_bootmem_init(unsigned long start_pfn, |
| @@ -319,19 +306,10 @@ static void arm_memory_present(void) | |||
| 319 | } | 306 | } |
| 320 | #endif | 307 | #endif |
| 321 | 308 | ||
| 322 | static int __init meminfo_cmp(const void *_a, const void *_b) | ||
| 323 | { | ||
| 324 | const struct membank *a = _a, *b = _b; | ||
| 325 | long cmp = bank_pfn_start(a) - bank_pfn_start(b); | ||
| 326 | return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; | ||
| 327 | } | ||
| 328 | |||
| 329 | void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc) | 309 | void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc) |
| 330 | { | 310 | { |
| 331 | int i; | 311 | int i; |
| 332 | 312 | ||
| 333 | sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL); | ||
| 334 | |||
| 335 | memblock_init(); | 313 | memblock_init(); |
| 336 | for (i = 0; i < mi->nr_banks; i++) | 314 | for (i = 0; i < mi->nr_banks; i++) |
| 337 | memblock_add(mi->bank[i].start, mi->bank[i].size); | 315 | memblock_add(mi->bank[i].start, mi->bank[i].size); |
| @@ -403,8 +381,6 @@ void __init bootmem_init(void) | |||
| 403 | */ | 381 | */ |
| 404 | arm_bootmem_free(min, max_low, max_high); | 382 | arm_bootmem_free(min, max_low, max_high); |
| 405 | 383 | ||
| 406 | high_memory = __va(((phys_addr_t)max_low << PAGE_SHIFT) - 1) + 1; | ||
| 407 | |||
| 408 | /* | 384 | /* |
| 409 | * This doesn't seem to be used by the Linux memory manager any | 385 | * This doesn't seem to be used by the Linux memory manager any |
| 410 | * more, but is used by ll_rw_block. If we can get rid of it, we | 386 | * more, but is used by ll_rw_block. If we can get rid of it, we |
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index bdb248c4f55c..12c7ad215ce7 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c | |||
| @@ -36,12 +36,6 @@ | |||
| 36 | #include <asm/mach/map.h> | 36 | #include <asm/mach/map.h> |
| 37 | #include "mm.h" | 37 | #include "mm.h" |
| 38 | 38 | ||
| 39 | /* | ||
| 40 | * Used by ioremap() and iounmap() code to mark (super)section-mapped | ||
| 41 | * I/O regions in vm_struct->flags field. | ||
| 42 | */ | ||
| 43 | #define VM_ARM_SECTION_MAPPING 0x80000000 | ||
| 44 | |||
| 45 | int ioremap_page(unsigned long virt, unsigned long phys, | 39 | int ioremap_page(unsigned long virt, unsigned long phys, |
| 46 | const struct mem_type *mtype) | 40 | const struct mem_type *mtype) |
| 47 | { | 41 | { |
| @@ -201,12 +195,6 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn, | |||
| 201 | if (pfn >= 0x100000 && (__pfn_to_phys(pfn) & ~SUPERSECTION_MASK)) | 195 | if (pfn >= 0x100000 && (__pfn_to_phys(pfn) & ~SUPERSECTION_MASK)) |
| 202 | return NULL; | 196 | return NULL; |
| 203 | 197 | ||
| 204 | /* | ||
| 205 | * Don't allow RAM to be mapped - this causes problems with ARMv6+ | ||
| 206 | */ | ||
| 207 | if (WARN_ON(pfn_valid(pfn))) | ||
| 208 | return NULL; | ||
| 209 | |||
| 210 | type = get_mem_type(mtype); | 198 | type = get_mem_type(mtype); |
| 211 | if (!type) | 199 | if (!type) |
| 212 | return NULL; | 200 | return NULL; |
| @@ -216,6 +204,34 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn, | |||
| 216 | */ | 204 | */ |
| 217 | size = PAGE_ALIGN(offset + size); | 205 | size = PAGE_ALIGN(offset + size); |
| 218 | 206 | ||
| 207 | /* | ||
| 208 | * Try to reuse one of the static mapping whenever possible. | ||
| 209 | */ | ||
| 210 | read_lock(&vmlist_lock); | ||
| 211 | for (area = vmlist; area; area = area->next) { | ||
| 212 | if (!size || (sizeof(phys_addr_t) == 4 && pfn >= 0x100000)) | ||
| 213 | break; | ||
| 214 | if (!(area->flags & VM_ARM_STATIC_MAPPING)) | ||
| 215 | continue; | ||
| 216 | if ((area->flags & VM_ARM_MTYPE_MASK) != VM_ARM_MTYPE(mtype)) | ||
| 217 | continue; | ||
| 218 | if (__phys_to_pfn(area->phys_addr) > pfn || | ||
| 219 | __pfn_to_phys(pfn) + size-1 > area->phys_addr + area->size-1) | ||
| 220 | continue; | ||
| 221 | /* we can drop the lock here as we know *area is static */ | ||
| 222 | read_unlock(&vmlist_lock); | ||
| 223 | addr = (unsigned long)area->addr; | ||
| 224 | addr += __pfn_to_phys(pfn) - area->phys_addr; | ||
| 225 | return (void __iomem *) (offset + addr); | ||
| 226 | } | ||
| 227 | read_unlock(&vmlist_lock); | ||
| 228 | |||
| 229 | /* | ||
| 230 | * Don't allow RAM to be mapped - this causes problems with ARMv6+ | ||
| 231 | */ | ||
| 232 | if (WARN_ON(pfn_valid(pfn))) | ||
| 233 | return NULL; | ||
| 234 | |||
| 219 | area = get_vm_area_caller(size, VM_IOREMAP, caller); | 235 | area = get_vm_area_caller(size, VM_IOREMAP, caller); |
| 220 | if (!area) | 236 | if (!area) |
| 221 | return NULL; | 237 | return NULL; |
| @@ -313,28 +329,34 @@ __arm_ioremap_exec(unsigned long phys_addr, size_t size, bool cached) | |||
| 313 | void __iounmap(volatile void __iomem *io_addr) | 329 | void __iounmap(volatile void __iomem *io_addr) |
| 314 | { | 330 | { |
| 315 | void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr); | 331 | void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr); |
| 316 | #ifndef CONFIG_SMP | 332 | struct vm_struct *vm; |
| 317 | struct vm_struct **p, *tmp; | ||
| 318 | 333 | ||
| 319 | /* | 334 | read_lock(&vmlist_lock); |
| 320 | * If this is a section based mapping we need to handle it | 335 | for (vm = vmlist; vm; vm = vm->next) { |
| 321 | * specially as the VM subsystem does not know how to handle | 336 | if (vm->addr > addr) |
| 322 | * such a beast. We need the lock here b/c we need to clear | 337 | break; |
| 323 | * all the mappings before the area can be reclaimed | 338 | if (!(vm->flags & VM_IOREMAP)) |
| 324 | * by someone else. | 339 | continue; |
| 325 | */ | 340 | /* If this is a static mapping we must leave it alone */ |
| 326 | write_lock(&vmlist_lock); | 341 | if ((vm->flags & VM_ARM_STATIC_MAPPING) && |
| 327 | for (p = &vmlist ; (tmp = *p) ; p = &tmp->next) { | 342 | (vm->addr <= addr) && (vm->addr + vm->size > addr)) { |
| 328 | if ((tmp->flags & VM_IOREMAP) && (tmp->addr == addr)) { | 343 | read_unlock(&vmlist_lock); |
| 329 | if (tmp->flags & VM_ARM_SECTION_MAPPING) { | 344 | return; |
| 330 | unmap_area_sections((unsigned long)tmp->addr, | 345 | } |
| 331 | tmp->size); | 346 | #ifndef CONFIG_SMP |
| 332 | } | 347 | /* |
| 348 | * If this is a section based mapping we need to handle it | ||
| 349 | * specially as the VM subsystem does not know how to handle | ||
| 350 | * such a beast. | ||
| 351 | */ | ||
| 352 | if ((vm->addr == addr) && | ||
| 353 | (vm->flags & VM_ARM_SECTION_MAPPING)) { | ||
| 354 | unmap_area_sections((unsigned long)vm->addr, vm->size); | ||
| 333 | break; | 355 | break; |
| 334 | } | 356 | } |
| 335 | } | ||
| 336 | write_unlock(&vmlist_lock); | ||
| 337 | #endif | 357 | #endif |
| 358 | } | ||
| 359 | read_unlock(&vmlist_lock); | ||
| 338 | 360 | ||
| 339 | vunmap(addr); | 361 | vunmap(addr); |
| 340 | } | 362 | } |
diff --git a/arch/arm/mm/mm.h b/arch/arm/mm/mm.h index ad7cce3bc431..70f6d3ea4834 100644 --- a/arch/arm/mm/mm.h +++ b/arch/arm/mm/mm.h | |||
| @@ -21,6 +21,20 @@ const struct mem_type *get_mem_type(unsigned int type); | |||
| 21 | 21 | ||
| 22 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); | 22 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); |
| 23 | 23 | ||
| 24 | /* | ||
| 25 | * ARM specific vm_struct->flags bits. | ||
| 26 | */ | ||
| 27 | |||
| 28 | /* (super)section-mapped I/O regions used by ioremap()/iounmap() */ | ||
| 29 | #define VM_ARM_SECTION_MAPPING 0x80000000 | ||
| 30 | |||
| 31 | /* permanent static mappings from iotable_init() */ | ||
| 32 | #define VM_ARM_STATIC_MAPPING 0x40000000 | ||
| 33 | |||
| 34 | /* mapping type (attributes) for permanent static mappings */ | ||
| 35 | #define VM_ARM_MTYPE(mt) ((mt) << 20) | ||
| 36 | #define VM_ARM_MTYPE_MASK (0x1f << 20) | ||
| 37 | |||
| 24 | #endif | 38 | #endif |
| 25 | 39 | ||
| 26 | #ifdef CONFIG_ZONE_DMA | 40 | #ifdef CONFIG_ZONE_DMA |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index dc8c550e6cbd..27e366af67f9 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/nodemask.h> | 15 | #include <linux/nodemask.h> |
| 16 | #include <linux/memblock.h> | 16 | #include <linux/memblock.h> |
| 17 | #include <linux/fs.h> | 17 | #include <linux/fs.h> |
| 18 | #include <linux/vmalloc.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/cputype.h> | 20 | #include <asm/cputype.h> |
| 20 | #include <asm/sections.h> | 21 | #include <asm/sections.h> |
| @@ -529,13 +530,18 @@ EXPORT_SYMBOL(phys_mem_access_prot); | |||
| 529 | 530 | ||
| 530 | #define vectors_base() (vectors_high() ? 0xffff0000 : 0) | 531 | #define vectors_base() (vectors_high() ? 0xffff0000 : 0) |
| 531 | 532 | ||
| 532 | static void __init *early_alloc(unsigned long sz) | 533 | static void __init *early_alloc_aligned(unsigned long sz, unsigned long align) |
| 533 | { | 534 | { |
| 534 | void *ptr = __va(memblock_alloc(sz, sz)); | 535 | void *ptr = __va(memblock_alloc(sz, align)); |
| 535 | memset(ptr, 0, sz); | 536 | memset(ptr, 0, sz); |
| 536 | return ptr; | 537 | return ptr; |
| 537 | } | 538 | } |
| 538 | 539 | ||
| 540 | static void __init *early_alloc(unsigned long sz) | ||
| 541 | { | ||
| 542 | return early_alloc_aligned(sz, sz); | ||
| 543 | } | ||
| 544 | |||
| 539 | static pte_t * __init early_pte_alloc(pmd_t *pmd, unsigned long addr, unsigned long prot) | 545 | static pte_t * __init early_pte_alloc(pmd_t *pmd, unsigned long addr, unsigned long prot) |
| 540 | { | 546 | { |
| 541 | if (pmd_none(*pmd)) { | 547 | if (pmd_none(*pmd)) { |
| @@ -685,9 +691,10 @@ static void __init create_mapping(struct map_desc *md) | |||
| 685 | } | 691 | } |
| 686 | 692 | ||
| 687 | if ((md->type == MT_DEVICE || md->type == MT_ROM) && | 693 | if ((md->type == MT_DEVICE || md->type == MT_ROM) && |
| 688 | md->virtual >= PAGE_OFFSET && md->virtual < VMALLOC_END) { | 694 | md->virtual >= PAGE_OFFSET && |
| 695 | (md->virtual < VMALLOC_START || md->virtual >= VMALLOC_END)) { | ||
| 689 | printk(KERN_WARNING "BUG: mapping for 0x%08llx" | 696 | printk(KERN_WARNING "BUG: mapping for 0x%08llx" |
| 690 | " at 0x%08lx overlaps vmalloc space\n", | 697 | " at 0x%08lx out of vmalloc space\n", |
| 691 | (long long)__pfn_to_phys((u64)md->pfn), md->virtual); | 698 | (long long)__pfn_to_phys((u64)md->pfn), md->virtual); |
| 692 | } | 699 | } |
| 693 | 700 | ||
| @@ -729,18 +736,33 @@ static void __init create_mapping(struct map_desc *md) | |||
| 729 | */ | 736 | */ |
| 730 | void __init iotable_init(struct map_desc *io_desc, int nr) | 737 | void __init iotable_init(struct map_desc *io_desc, int nr) |
| 731 | { | 738 | { |
| 732 | int i; | 739 | struct map_desc *md; |
| 740 | struct vm_struct *vm; | ||
| 741 | |||
| 742 | if (!nr) | ||
| 743 | return; | ||
| 733 | 744 | ||
| 734 | for (i = 0; i < nr; i++) | 745 | vm = early_alloc_aligned(sizeof(*vm) * nr, __alignof__(*vm)); |
| 735 | create_mapping(io_desc + i); | 746 | |
| 747 | for (md = io_desc; nr; md++, nr--) { | ||
| 748 | create_mapping(md); | ||
| 749 | vm->addr = (void *)(md->virtual & PAGE_MASK); | ||
| 750 | vm->size = PAGE_ALIGN(md->length + (md->virtual & ~PAGE_MASK)); | ||
| 751 | vm->phys_addr = __pfn_to_phys(md->pfn); | ||
| 752 | vm->flags = VM_IOREMAP | VM_ARM_STATIC_MAPPING; | ||
| 753 | vm->flags |= VM_ARM_MTYPE(md->type); | ||
| 754 | vm->caller = iotable_init; | ||
| 755 | vm_area_add_early(vm++); | ||
| 756 | } | ||
| 736 | } | 757 | } |
| 737 | 758 | ||
| 738 | static void * __initdata vmalloc_min = (void *)(VMALLOC_END - SZ_128M); | 759 | static void * __initdata vmalloc_min = |
| 760 | (void *)(VMALLOC_END - (240 << 20) - VMALLOC_OFFSET); | ||
| 739 | 761 | ||
| 740 | /* | 762 | /* |
| 741 | * vmalloc=size forces the vmalloc area to be exactly 'size' | 763 | * vmalloc=size forces the vmalloc area to be exactly 'size' |
| 742 | * bytes. This can be used to increase (or decrease) the vmalloc | 764 | * bytes. This can be used to increase (or decrease) the vmalloc |
| 743 | * area - the default is 128m. | 765 | * area - the default is 240m. |
| 744 | */ | 766 | */ |
| 745 | static int __init early_vmalloc(char *arg) | 767 | static int __init early_vmalloc(char *arg) |
| 746 | { | 768 | { |
| @@ -860,6 +882,7 @@ void __init sanity_check_meminfo(void) | |||
| 860 | } | 882 | } |
| 861 | #endif | 883 | #endif |
| 862 | meminfo.nr_banks = j; | 884 | meminfo.nr_banks = j; |
| 885 | high_memory = __va(lowmem_limit - 1) + 1; | ||
| 863 | memblock_set_current_limit(lowmem_limit); | 886 | memblock_set_current_limit(lowmem_limit); |
| 864 | } | 887 | } |
| 865 | 888 | ||
| @@ -890,10 +913,10 @@ static inline void prepare_page_table(void) | |||
| 890 | 913 | ||
| 891 | /* | 914 | /* |
| 892 | * Clear out all the kernel space mappings, except for the first | 915 | * Clear out all the kernel space mappings, except for the first |
| 893 | * memory bank, up to the end of the vmalloc region. | 916 | * memory bank, up to the vmalloc region. |
| 894 | */ | 917 | */ |
| 895 | for (addr = __phys_to_virt(end); | 918 | for (addr = __phys_to_virt(end); |
| 896 | addr < VMALLOC_END; addr += PMD_SIZE) | 919 | addr < VMALLOC_START; addr += PMD_SIZE) |
| 897 | pmd_clear(pmd_off_k(addr)); | 920 | pmd_clear(pmd_off_k(addr)); |
| 898 | } | 921 | } |
| 899 | 922 | ||
| @@ -920,8 +943,8 @@ void __init arm_mm_memblock_reserve(void) | |||
| 920 | } | 943 | } |
| 921 | 944 | ||
| 922 | /* | 945 | /* |
| 923 | * Set up device the mappings. Since we clear out the page tables for all | 946 | * Set up the device mappings. Since we clear out the page tables for all |
| 924 | * mappings above VMALLOC_END, we will remove any debug device mappings. | 947 | * mappings above VMALLOC_START, we will remove any debug device mappings. |
| 925 | * This means you have to be careful how you debug this function, or any | 948 | * This means you have to be careful how you debug this function, or any |
| 926 | * called function. This means you can't use any function or debugging | 949 | * called function. This means you can't use any function or debugging |
| 927 | * method which may touch any device, otherwise the kernel _will_ crash. | 950 | * method which may touch any device, otherwise the kernel _will_ crash. |
| @@ -936,7 +959,7 @@ static void __init devicemaps_init(struct machine_desc *mdesc) | |||
| 936 | */ | 959 | */ |
| 937 | vectors_page = early_alloc(PAGE_SIZE); | 960 | vectors_page = early_alloc(PAGE_SIZE); |
| 938 | 961 | ||
| 939 | for (addr = VMALLOC_END; addr; addr += PMD_SIZE) | 962 | for (addr = VMALLOC_START; addr; addr += PMD_SIZE) |
| 940 | pmd_clear(pmd_off_k(addr)); | 963 | pmd_clear(pmd_off_k(addr)); |
| 941 | 964 | ||
| 942 | /* | 965 | /* |
diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c index 941a98c9e8aa..4fc6794cca4b 100644 --- a/arch/arm/mm/nommu.c +++ b/arch/arm/mm/nommu.c | |||
| @@ -29,6 +29,8 @@ void __init arm_mm_memblock_reserve(void) | |||
| 29 | 29 | ||
| 30 | void __init sanity_check_meminfo(void) | 30 | void __init sanity_check_meminfo(void) |
| 31 | { | 31 | { |
| 32 | phys_addr_t end = bank_phys_end(&meminfo.bank[meminfo.nr_banks - 1]); | ||
| 33 | high_memory = __va(end - 1) + 1; | ||
| 32 | } | 34 | } |
| 33 | 35 | ||
| 34 | /* | 36 | /* |
| @@ -43,7 +45,7 @@ void __init paging_init(struct machine_desc *mdesc) | |||
| 43 | /* | 45 | /* |
| 44 | * We don't need to do anything here for nommu machines. | 46 | * We don't need to do anything here for nommu machines. |
| 45 | */ | 47 | */ |
| 46 | void setup_mm_for_reboot(char mode) | 48 | void setup_mm_for_reboot(void) |
| 47 | { | 49 | { |
| 48 | } | 50 | } |
| 49 | 51 | ||
diff --git a/arch/arm/plat-iop/Makefile b/arch/arm/plat-iop/Makefile index 69b09c1cec8b..90f7153a8d78 100644 --- a/arch/arm/plat-iop/Makefile +++ b/arch/arm/plat-iop/Makefile | |||
| @@ -10,7 +10,6 @@ obj-$(CONFIG_ARCH_IOP32X) += i2c.o | |||
| 10 | obj-$(CONFIG_ARCH_IOP32X) += pci.o | 10 | obj-$(CONFIG_ARCH_IOP32X) += pci.o |
| 11 | obj-$(CONFIG_ARCH_IOP32X) += setup.o | 11 | obj-$(CONFIG_ARCH_IOP32X) += setup.o |
| 12 | obj-$(CONFIG_ARCH_IOP32X) += time.o | 12 | obj-$(CONFIG_ARCH_IOP32X) += time.o |
| 13 | obj-$(CONFIG_ARCH_IOP32X) += io.o | ||
| 14 | obj-$(CONFIG_ARCH_IOP32X) += cp6.o | 13 | obj-$(CONFIG_ARCH_IOP32X) += cp6.o |
| 15 | obj-$(CONFIG_ARCH_IOP32X) += adma.o | 14 | obj-$(CONFIG_ARCH_IOP32X) += adma.o |
| 16 | obj-$(CONFIG_ARCH_IOP32X) += pmu.o | 15 | obj-$(CONFIG_ARCH_IOP32X) += pmu.o |
| @@ -21,7 +20,6 @@ obj-$(CONFIG_ARCH_IOP33X) += i2c.o | |||
| 21 | obj-$(CONFIG_ARCH_IOP33X) += pci.o | 20 | obj-$(CONFIG_ARCH_IOP33X) += pci.o |
| 22 | obj-$(CONFIG_ARCH_IOP33X) += setup.o | 21 | obj-$(CONFIG_ARCH_IOP33X) += setup.o |
| 23 | obj-$(CONFIG_ARCH_IOP33X) += time.o | 22 | obj-$(CONFIG_ARCH_IOP33X) += time.o |
| 24 | obj-$(CONFIG_ARCH_IOP33X) += io.o | ||
| 25 | obj-$(CONFIG_ARCH_IOP33X) += cp6.o | 23 | obj-$(CONFIG_ARCH_IOP33X) += cp6.o |
| 26 | obj-$(CONFIG_ARCH_IOP33X) += adma.o | 24 | obj-$(CONFIG_ARCH_IOP33X) += adma.o |
| 27 | obj-$(CONFIG_ARCH_IOP33X) += pmu.o | 25 | obj-$(CONFIG_ARCH_IOP33X) += pmu.o |
diff --git a/arch/arm/plat-iop/io.c b/arch/arm/plat-iop/io.c deleted file mode 100644 index e15bc17db90b..000000000000 --- a/arch/arm/plat-iop/io.c +++ /dev/null | |||
| @@ -1,59 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * iop3xx custom ioremap implementation | ||
| 3 | * Copyright (c) 2006, Intel Corporation. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms and conditions of the GNU General Public License, | ||
| 7 | * version 2, as published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 12 | * more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License along with | ||
| 15 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
| 16 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
| 17 | * | ||
| 18 | */ | ||
| 19 | #include <linux/kernel.h> | ||
| 20 | #include <linux/module.h> | ||
| 21 | #include <linux/io.h> | ||
| 22 | #include <mach/hardware.h> | ||
| 23 | |||
| 24 | void * __iomem __iop3xx_ioremap(unsigned long cookie, size_t size, | ||
| 25 | unsigned int mtype) | ||
| 26 | { | ||
| 27 | void __iomem * retval; | ||
| 28 | |||
| 29 | switch (cookie) { | ||
| 30 | case IOP3XX_PCI_LOWER_IO_PA ... IOP3XX_PCI_UPPER_IO_PA: | ||
| 31 | retval = (void *) IOP3XX_PCI_IO_PHYS_TO_VIRT(cookie); | ||
| 32 | break; | ||
| 33 | case IOP3XX_PERIPHERAL_PHYS_BASE ... IOP3XX_PERIPHERAL_UPPER_PA: | ||
| 34 | retval = (void *) IOP3XX_PMMR_PHYS_TO_VIRT(cookie); | ||
| 35 | break; | ||
| 36 | default: | ||
| 37 | retval = __arm_ioremap_caller(cookie, size, mtype, | ||
| 38 | __builtin_return_address(0)); | ||
| 39 | } | ||
| 40 | |||
| 41 | return retval; | ||
| 42 | } | ||
| 43 | EXPORT_SYMBOL(__iop3xx_ioremap); | ||
| 44 | |||
| 45 | void __iop3xx_iounmap(void __iomem *addr) | ||
| 46 | { | ||
| 47 | extern void __iounmap(volatile void __iomem *addr); | ||
| 48 | |||
| 49 | switch ((u32) addr) { | ||
| 50 | case IOP3XX_PCI_LOWER_IO_VA ... IOP3XX_PCI_UPPER_IO_VA: | ||
| 51 | case IOP3XX_PERIPHERAL_VIRT_BASE ... IOP3XX_PERIPHERAL_UPPER_VA: | ||
| 52 | goto skip; | ||
| 53 | } | ||
| 54 | __iounmap(addr); | ||
| 55 | |||
| 56 | skip: | ||
| 57 | return; | ||
| 58 | } | ||
| 59 | EXPORT_SYMBOL(__iop3xx_iounmap); | ||
diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile index b9f0f5f499a4..076db84f3e31 100644 --- a/arch/arm/plat-mxc/Makefile +++ b/arch/arm/plat-mxc/Makefile | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | # Common support | 5 | # Common support |
| 6 | obj-y := clock.o time.o devices.o cpu.o system.o irq-common.o | 6 | obj-y := clock.o time.o devices.o cpu.o system.o irq-common.o |
| 7 | 7 | ||
| 8 | obj-$(CONFIG_ARM_GIC) += gic.o | ||
| 9 | obj-$(CONFIG_MXC_TZIC) += tzic.o | 8 | obj-$(CONFIG_MXC_TZIC) += tzic.o |
| 10 | obj-$(CONFIG_MXC_AVIC) += avic.o | 9 | obj-$(CONFIG_MXC_AVIC) += avic.o |
| 11 | 10 | ||
diff --git a/arch/arm/plat-mxc/gic.c b/arch/arm/plat-mxc/gic.c deleted file mode 100644 index 12f8f8109010..000000000000 --- a/arch/arm/plat-mxc/gic.c +++ /dev/null | |||
| @@ -1,41 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2011 Freescale Semiconductor, Inc. | ||
| 3 | * Copyright 2011 Linaro Ltd. | ||
| 4 | * | ||
| 5 | * The code contained herein is licensed under the GNU General Public | ||
| 6 | * License. You may obtain a copy of the GNU General Public License | ||
| 7 | * Version 2 or later at the following locations: | ||
| 8 | * | ||
| 9 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 10 | * http://www.gnu.org/copyleft/gpl.html | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/io.h> | ||
| 14 | #include <asm/exception.h> | ||
| 15 | #include <asm/localtimer.h> | ||
| 16 | #include <asm/hardware/gic.h> | ||
| 17 | #ifdef CONFIG_SMP | ||
| 18 | #include <asm/smp.h> | ||
| 19 | #endif | ||
| 20 | |||
| 21 | asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) | ||
| 22 | { | ||
| 23 | u32 irqstat, irqnr; | ||
| 24 | |||
| 25 | do { | ||
| 26 | irqstat = readl_relaxed(gic_cpu_base_addr + GIC_CPU_INTACK); | ||
| 27 | irqnr = irqstat & 0x3ff; | ||
| 28 | if (irqnr == 1023) | ||
| 29 | break; | ||
| 30 | |||
| 31 | if (irqnr > 15 && irqnr < 1021) | ||
| 32 | handle_IRQ(irqnr, regs); | ||
| 33 | #ifdef CONFIG_SMP | ||
| 34 | else { | ||
| 35 | writel_relaxed(irqstat, gic_cpu_base_addr + | ||
| 36 | GIC_CPU_EOI); | ||
| 37 | handle_IPI(irqnr, regs); | ||
| 38 | } | ||
| 39 | #endif | ||
| 40 | } while (1); | ||
| 41 | } | ||
diff --git a/arch/arm/plat-mxc/include/mach/common.h b/arch/arm/plat-mxc/include/mach/common.h index c75f254abd85..6698cae942f7 100644 --- a/arch/arm/plat-mxc/include/mach/common.h +++ b/arch/arm/plat-mxc/include/mach/common.h | |||
| @@ -89,7 +89,6 @@ extern void imx_print_silicon_rev(const char *cpu, int srev); | |||
| 89 | 89 | ||
| 90 | void avic_handle_irq(struct pt_regs *); | 90 | void avic_handle_irq(struct pt_regs *); |
| 91 | void tzic_handle_irq(struct pt_regs *); | 91 | void tzic_handle_irq(struct pt_regs *); |
| 92 | void gic_handle_irq(struct pt_regs *); | ||
| 93 | 92 | ||
| 94 | #define imx1_handle_irq avic_handle_irq | 93 | #define imx1_handle_irq avic_handle_irq |
| 95 | #define imx21_handle_irq avic_handle_irq | 94 | #define imx21_handle_irq avic_handle_irq |
diff --git a/arch/arm/plat-mxc/include/mach/entry-macro.S b/arch/arm/plat-mxc/include/mach/entry-macro.S index ca5cf26a04b1..def5d30cb67e 100644 --- a/arch/arm/plat-mxc/include/mach/entry-macro.S +++ b/arch/arm/plat-mxc/include/mach/entry-macro.S | |||
| @@ -9,19 +9,8 @@ | |||
| 9 | * published by the Free Software Foundation. | 9 | * published by the Free Software Foundation. |
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | /* Unused, we use CONFIG_MULTI_IRQ_HANDLER */ | ||
| 13 | |||
| 14 | .macro disable_fiq | 12 | .macro disable_fiq |
| 15 | .endm | 13 | .endm |
| 16 | 14 | ||
| 17 | .macro get_irqnr_preamble, base, tmp | ||
| 18 | .endm | ||
| 19 | |||
| 20 | .macro arch_ret_to_user, tmp1, tmp2 | 15 | .macro arch_ret_to_user, tmp1, tmp2 |
| 21 | .endm | 16 | .endm |
| 22 | |||
| 23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 24 | .endm | ||
| 25 | |||
| 26 | .macro test_for_ipi, irqnr, irqstat, base, tmp | ||
| 27 | .endm | ||
diff --git a/arch/arm/plat-mxc/include/mach/mx1.h b/arch/arm/plat-mxc/include/mach/mx1.h index 97b19e7800bc..2b7c08d13e89 100644 --- a/arch/arm/plat-mxc/include/mach/mx1.h +++ b/arch/arm/plat-mxc/include/mach/mx1.h | |||
| @@ -12,8 +12,6 @@ | |||
| 12 | #ifndef __MACH_MX1_H__ | 12 | #ifndef __MACH_MX1_H__ |
| 13 | #define __MACH_MX1_H__ | 13 | #define __MACH_MX1_H__ |
| 14 | 14 | ||
| 15 | #include <mach/vmalloc.h> | ||
| 16 | |||
| 17 | /* | 15 | /* |
| 18 | * Memory map | 16 | * Memory map |
| 19 | */ | 17 | */ |
diff --git a/arch/arm/plat-mxc/include/mach/vmalloc.h b/arch/arm/plat-mxc/include/mach/vmalloc.h deleted file mode 100644 index ef6379c474be..000000000000 --- a/arch/arm/plat-mxc/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,22 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2000 Russell King. | ||
| 3 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __ASM_ARCH_MXC_VMALLOC_H__ | ||
| 17 | #define __ASM_ARCH_MXC_VMALLOC_H__ | ||
| 18 | |||
| 19 | /* vmalloc ending address */ | ||
| 20 | #define VMALLOC_END 0xf4000000UL | ||
| 21 | |||
| 22 | #endif /* __ASM_ARCH_MXC_VMALLOC_H__ */ | ||
diff --git a/arch/arm/plat-mxc/system.c b/arch/arm/plat-mxc/system.c index d65fb31a55ca..7e5c76ea4466 100644 --- a/arch/arm/plat-mxc/system.c +++ b/arch/arm/plat-mxc/system.c | |||
| @@ -71,7 +71,7 @@ void arch_reset(char mode, const char *cmd) | |||
| 71 | mdelay(50); | 71 | mdelay(50); |
| 72 | 72 | ||
| 73 | /* we'll take a jump through zero as a poor second */ | 73 | /* we'll take a jump through zero as a poor second */ |
| 74 | cpu_reset(0); | 74 | soft_restart(0); |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | void mxc_arch_reset_init(void __iomem *base) | 77 | void mxc_arch_reset_init(void __iomem *base) |
diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile index 985262242f25..3df04d944e4d 100644 --- a/arch/arm/plat-omap/Makefile +++ b/arch/arm/plat-omap/Makefile | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | # Common support | 5 | # Common support |
| 6 | obj-y := common.o sram.o clock.o devices.o dma.o mux.o \ | 6 | obj-y := common.o sram.o clock.o devices.o dma.o mux.o \ |
| 7 | usb.o fb.o io.o counter_32k.o | 7 | usb.o fb.o counter_32k.o |
| 8 | obj-m := | 8 | obj-m := |
| 9 | obj-n := | 9 | obj-n := |
| 10 | obj- := | 10 | obj- := |
diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index d9f10a31e604..06383b51e655 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | #include <linux/dma-mapping.h> | ||
| 17 | #include <linux/omapfb.h> | 18 | #include <linux/omapfb.h> |
| 18 | 19 | ||
| 19 | #include <plat/common.h> | 20 | #include <plat/common.h> |
| @@ -21,6 +22,8 @@ | |||
| 21 | #include <plat/vram.h> | 22 | #include <plat/vram.h> |
| 22 | #include <plat/dsp.h> | 23 | #include <plat/dsp.h> |
| 23 | 24 | ||
| 25 | #include <plat/omap-secure.h> | ||
| 26 | |||
| 24 | 27 | ||
| 25 | #define NO_LENGTH_CHECK 0xffffffff | 28 | #define NO_LENGTH_CHECK 0xffffffff |
| 26 | 29 | ||
| @@ -65,4 +68,12 @@ void __init omap_reserve(void) | |||
| 65 | omapfb_reserve_sdram_memblock(); | 68 | omapfb_reserve_sdram_memblock(); |
| 66 | omap_vram_reserve_sdram_memblock(); | 69 | omap_vram_reserve_sdram_memblock(); |
| 67 | omap_dsp_reserve_sdram_memblock(); | 70 | omap_dsp_reserve_sdram_memblock(); |
| 71 | omap_secure_ram_reserve_memblock(); | ||
| 72 | } | ||
| 73 | |||
| 74 | void __init omap_init_consistent_dma_size(void) | ||
| 75 | { | ||
| 76 | #ifdef CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE | ||
| 77 | init_consistent_dma_size(CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE << 20); | ||
| 78 | #endif | ||
| 68 | } | 79 | } |
diff --git a/arch/arm/plat-omap/include/plat/common.h b/arch/arm/plat-omap/include/plat/common.h index 3ff3e36580f2..257f9770b2da 100644 --- a/arch/arm/plat-omap/include/plat/common.h +++ b/arch/arm/plat-omap/include/plat/common.h | |||
| @@ -27,97 +27,15 @@ | |||
| 27 | #ifndef __ARCH_ARM_MACH_OMAP_COMMON_H | 27 | #ifndef __ARCH_ARM_MACH_OMAP_COMMON_H |
| 28 | #define __ARCH_ARM_MACH_OMAP_COMMON_H | 28 | #define __ARCH_ARM_MACH_OMAP_COMMON_H |
| 29 | 29 | ||
| 30 | #include <linux/delay.h> | ||
| 31 | |||
| 32 | #include <plat/i2c.h> | 30 | #include <plat/i2c.h> |
| 33 | #include <plat/omap_hwmod.h> | 31 | #include <plat/omap_hwmod.h> |
| 34 | 32 | ||
| 35 | struct sys_timer; | ||
| 36 | |||
| 37 | extern void omap_map_common_io(void); | ||
| 38 | extern struct sys_timer omap1_timer; | ||
| 39 | extern struct sys_timer omap2_timer; | ||
| 40 | extern struct sys_timer omap3_timer; | ||
| 41 | extern struct sys_timer omap3_secure_timer; | ||
| 42 | extern struct sys_timer omap4_timer; | ||
| 43 | extern bool omap_32k_timer_init(void); | ||
| 44 | extern int __init omap_init_clocksource_32k(void); | 33 | extern int __init omap_init_clocksource_32k(void); |
| 45 | extern unsigned long long notrace omap_32k_sched_clock(void); | 34 | extern unsigned long long notrace omap_32k_sched_clock(void); |
| 46 | 35 | ||
| 47 | extern void omap_reserve(void); | 36 | extern void omap_reserve(void); |
| 48 | |||
| 49 | void omap2420_init_early(void); | ||
| 50 | void omap2430_init_early(void); | ||
| 51 | void omap3430_init_early(void); | ||
| 52 | void omap35xx_init_early(void); | ||
| 53 | void omap3630_init_early(void); | ||
| 54 | void omap3_init_early(void); /* Do not use this one */ | ||
| 55 | void am35xx_init_early(void); | ||
| 56 | void ti816x_init_early(void); | ||
| 57 | void omap4430_init_early(void); | ||
| 58 | |||
| 59 | extern int omap_dss_reset(struct omap_hwmod *); | 37 | extern int omap_dss_reset(struct omap_hwmod *); |
| 60 | 38 | ||
| 61 | void omap_sram_init(void); | 39 | void omap_sram_init(void); |
| 62 | 40 | ||
| 63 | /* | ||
| 64 | * IO bases for various OMAP processors | ||
| 65 | * Except the tap base, rest all the io bases | ||
| 66 | * listed are physical addresses. | ||
| 67 | */ | ||
| 68 | struct omap_globals { | ||
| 69 | u32 class; /* OMAP class to detect */ | ||
| 70 | void __iomem *tap; /* Control module ID code */ | ||
| 71 | void __iomem *sdrc; /* SDRAM Controller */ | ||
| 72 | void __iomem *sms; /* SDRAM Memory Scheduler */ | ||
| 73 | void __iomem *ctrl; /* System Control Module */ | ||
| 74 | void __iomem *ctrl_pad; /* PAD Control Module */ | ||
| 75 | void __iomem *prm; /* Power and Reset Management */ | ||
| 76 | void __iomem *cm; /* Clock Management */ | ||
| 77 | void __iomem *cm2; | ||
| 78 | }; | ||
| 79 | |||
| 80 | void omap2_set_globals_242x(void); | ||
| 81 | void omap2_set_globals_243x(void); | ||
| 82 | void omap2_set_globals_3xxx(void); | ||
| 83 | void omap2_set_globals_443x(void); | ||
| 84 | void omap2_set_globals_ti816x(void); | ||
| 85 | |||
| 86 | /* These get called from omap2_set_globals_xxxx(), do not call these */ | ||
| 87 | void omap2_set_globals_tap(struct omap_globals *); | ||
| 88 | void omap2_set_globals_sdrc(struct omap_globals *); | ||
| 89 | void omap2_set_globals_control(struct omap_globals *); | ||
| 90 | void omap2_set_globals_prcm(struct omap_globals *); | ||
| 91 | |||
| 92 | void omap242x_map_io(void); | ||
| 93 | void omap243x_map_io(void); | ||
| 94 | void omap3_map_io(void); | ||
| 95 | void omap4_map_io(void); | ||
| 96 | |||
| 97 | |||
| 98 | /** | ||
| 99 | * omap_test_timeout - busy-loop, testing a condition | ||
| 100 | * @cond: condition to test until it evaluates to true | ||
| 101 | * @timeout: maximum number of microseconds in the timeout | ||
| 102 | * @index: loop index (integer) | ||
| 103 | * | ||
| 104 | * Loop waiting for @cond to become true or until at least @timeout | ||
| 105 | * microseconds have passed. To use, define some integer @index in the | ||
| 106 | * calling code. After running, if @index == @timeout, then the loop has | ||
| 107 | * timed out. | ||
| 108 | */ | ||
| 109 | #define omap_test_timeout(cond, timeout, index) \ | ||
| 110 | ({ \ | ||
| 111 | for (index = 0; index < timeout; index++) { \ | ||
| 112 | if (cond) \ | ||
| 113 | break; \ | ||
| 114 | udelay(1); \ | ||
| 115 | } \ | ||
| 116 | }) | ||
| 117 | |||
| 118 | extern struct device *omap2_get_mpuss_device(void); | ||
| 119 | extern struct device *omap2_get_iva_device(void); | ||
| 120 | extern struct device *omap2_get_l3_device(void); | ||
| 121 | extern struct device *omap4_get_dsp_device(void); | ||
| 122 | |||
| 123 | #endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */ | 41 | #endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */ |
diff --git a/arch/arm/plat-omap/include/plat/io.h b/arch/arm/plat-omap/include/plat/io.h index 7f2969eadb85..1234944a4da0 100644 --- a/arch/arm/plat-omap/include/plat/io.h +++ b/arch/arm/plat-omap/include/plat/io.h | |||
| @@ -247,8 +247,6 @@ | |||
| 247 | * NOTE: Please use ioremap + __raw_read/write where possible instead of these | 247 | * NOTE: Please use ioremap + __raw_read/write where possible instead of these |
| 248 | */ | 248 | */ |
| 249 | 249 | ||
| 250 | void omap_ioremap_init(void); | ||
| 251 | |||
| 252 | extern u8 omap_readb(u32 pa); | 250 | extern u8 omap_readb(u32 pa); |
| 253 | extern u16 omap_readw(u32 pa); | 251 | extern u16 omap_readw(u32 pa); |
| 254 | extern u32 omap_readl(u32 pa); | 252 | extern u32 omap_readl(u32 pa); |
| @@ -257,83 +255,9 @@ extern void omap_writew(u16 v, u32 pa); | |||
| 257 | extern void omap_writel(u32 v, u32 pa); | 255 | extern void omap_writel(u32 v, u32 pa); |
| 258 | 256 | ||
| 259 | struct omap_sdrc_params; | 257 | struct omap_sdrc_params; |
| 260 | |||
| 261 | #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) | ||
| 262 | void omap7xx_map_io(void); | ||
| 263 | #else | ||
| 264 | static inline void omap_map_io(void) | ||
| 265 | { | ||
| 266 | } | ||
| 267 | #endif | ||
| 268 | |||
| 269 | #ifdef CONFIG_ARCH_OMAP15XX | ||
| 270 | void omap15xx_map_io(void); | ||
| 271 | #else | ||
| 272 | static inline void omap15xx_map_io(void) | ||
| 273 | { | ||
| 274 | } | ||
| 275 | #endif | ||
| 276 | |||
| 277 | #ifdef CONFIG_ARCH_OMAP16XX | ||
| 278 | void omap16xx_map_io(void); | ||
| 279 | #else | ||
| 280 | static inline void omap16xx_map_io(void) | ||
| 281 | { | ||
| 282 | } | ||
| 283 | #endif | ||
| 284 | |||
| 285 | void omap1_init_early(void); | ||
| 286 | |||
| 287 | #ifdef CONFIG_SOC_OMAP2420 | ||
| 288 | extern void omap242x_map_common_io(void); | ||
| 289 | #else | ||
| 290 | static inline void omap242x_map_common_io(void) | ||
| 291 | { | ||
| 292 | } | ||
| 293 | #endif | ||
| 294 | |||
| 295 | #ifdef CONFIG_SOC_OMAP2430 | ||
| 296 | extern void omap243x_map_common_io(void); | ||
| 297 | #else | ||
| 298 | static inline void omap243x_map_common_io(void) | ||
| 299 | { | ||
| 300 | } | ||
| 301 | #endif | ||
| 302 | |||
| 303 | #ifdef CONFIG_ARCH_OMAP3 | ||
| 304 | extern void omap34xx_map_common_io(void); | ||
| 305 | #else | ||
| 306 | static inline void omap34xx_map_common_io(void) | ||
| 307 | { | ||
| 308 | } | ||
| 309 | #endif | ||
| 310 | |||
| 311 | #ifdef CONFIG_SOC_OMAPTI816X | ||
| 312 | extern void omapti816x_map_common_io(void); | ||
| 313 | #else | ||
| 314 | static inline void omapti816x_map_common_io(void) | ||
| 315 | { | ||
| 316 | } | ||
| 317 | #endif | ||
| 318 | |||
| 319 | #ifdef CONFIG_ARCH_OMAP4 | ||
| 320 | extern void omap44xx_map_common_io(void); | ||
| 321 | #else | ||
| 322 | static inline void omap44xx_map_common_io(void) | ||
| 323 | { | ||
| 324 | } | ||
| 325 | #endif | ||
| 326 | |||
| 327 | extern void omap2_init_common_infrastructure(void); | ||
| 328 | extern void omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, | 258 | extern void omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, |
| 329 | struct omap_sdrc_params *sdrc_cs1); | 259 | struct omap_sdrc_params *sdrc_cs1); |
| 330 | 260 | ||
| 331 | #define __arch_ioremap omap_ioremap | ||
| 332 | #define __arch_iounmap omap_iounmap | ||
| 333 | |||
| 334 | void __iomem *omap_ioremap(unsigned long phys, size_t size, unsigned int type); | ||
| 335 | void omap_iounmap(volatile void __iomem *addr); | ||
| 336 | |||
| 337 | extern void __init omap_init_consistent_dma_size(void); | 261 | extern void __init omap_init_consistent_dma_size(void); |
| 338 | 262 | ||
| 339 | #endif | 263 | #endif |
diff --git a/arch/arm/plat-omap/include/plat/irqs.h b/arch/arm/plat-omap/include/plat/irqs.h index 30e10719b774..ebda7382c65b 100644 --- a/arch/arm/plat-omap/include/plat/irqs.h +++ b/arch/arm/plat-omap/include/plat/irqs.h | |||
| @@ -436,20 +436,6 @@ | |||
| 436 | #define INTCPS_NR_MIR_REGS 3 | 436 | #define INTCPS_NR_MIR_REGS 3 |
| 437 | #define INTCPS_NR_IRQS 96 | 437 | #define INTCPS_NR_IRQS 96 |
| 438 | 438 | ||
| 439 | #ifndef __ASSEMBLY__ | ||
| 440 | extern void __iomem *omap_irq_base; | ||
| 441 | void omap1_init_irq(void); | ||
| 442 | void omap2_init_irq(void); | ||
| 443 | void omap3_init_irq(void); | ||
| 444 | void ti816x_init_irq(void); | ||
| 445 | extern int omap_irq_pending(void); | ||
| 446 | void omap_intc_save_context(void); | ||
| 447 | void omap_intc_restore_context(void); | ||
| 448 | void omap3_intc_suspend(void); | ||
| 449 | void omap3_intc_prepare_idle(void); | ||
| 450 | void omap3_intc_resume_idle(void); | ||
| 451 | #endif | ||
| 452 | |||
| 453 | #include <mach/hardware.h> | 439 | #include <mach/hardware.h> |
| 454 | 440 | ||
| 455 | #ifdef CONFIG_FIQ | 441 | #ifdef CONFIG_FIQ |
diff --git a/arch/arm/plat-omap/include/plat/omap-secure.h b/arch/arm/plat-omap/include/plat/omap-secure.h new file mode 100644 index 000000000000..64f9d1c7f1bb --- /dev/null +++ b/arch/arm/plat-omap/include/plat/omap-secure.h | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | #ifndef __OMAP_SECURE_H__ | ||
| 2 | #define __OMAP_SECURE_H__ | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | #ifdef CONFIG_ARCH_OMAP2PLUS | ||
| 7 | extern int omap_secure_ram_reserve_memblock(void); | ||
| 8 | #else | ||
| 9 | static inline void omap_secure_ram_reserve_memblock(void) | ||
| 10 | { } | ||
| 11 | #endif | ||
| 12 | |||
| 13 | #endif /* __OMAP_SECURE_H__ */ | ||
diff --git a/arch/arm/plat-omap/include/plat/omap44xx.h b/arch/arm/plat-omap/include/plat/omap44xx.h index ea2b8a6306e7..c0d478e55c84 100644 --- a/arch/arm/plat-omap/include/plat/omap44xx.h +++ b/arch/arm/plat-omap/include/plat/omap44xx.h | |||
| @@ -45,6 +45,7 @@ | |||
| 45 | #define OMAP44XX_WKUPGEN_BASE 0x48281000 | 45 | #define OMAP44XX_WKUPGEN_BASE 0x48281000 |
| 46 | #define OMAP44XX_MCPDM_BASE 0x40132000 | 46 | #define OMAP44XX_MCPDM_BASE 0x40132000 |
| 47 | #define OMAP44XX_MCPDM_L3_BASE 0x49032000 | 47 | #define OMAP44XX_MCPDM_L3_BASE 0x49032000 |
| 48 | #define OMAP44XX_SAR_RAM_BASE 0x4a326000 | ||
| 48 | 49 | ||
| 49 | #define OMAP44XX_MAILBOX_BASE (L4_44XX_BASE + 0xF4000) | 50 | #define OMAP44XX_MAILBOX_BASE (L4_44XX_BASE + 0xF4000) |
| 50 | #define OMAP44XX_HSUSB_OTG_BASE (L4_44XX_BASE + 0xAB000) | 51 | #define OMAP44XX_HSUSB_OTG_BASE (L4_44XX_BASE + 0xAB000) |
diff --git a/arch/arm/plat-omap/include/plat/sram.h b/arch/arm/plat-omap/include/plat/sram.h index f500fc34d065..75aa1b2bef51 100644 --- a/arch/arm/plat-omap/include/plat/sram.h +++ b/arch/arm/plat-omap/include/plat/sram.h | |||
| @@ -95,6 +95,10 @@ static inline void omap_push_sram_idle(void) {} | |||
| 95 | */ | 95 | */ |
| 96 | #define OMAP2_SRAM_PA 0x40200000 | 96 | #define OMAP2_SRAM_PA 0x40200000 |
| 97 | #define OMAP3_SRAM_PA 0x40200000 | 97 | #define OMAP3_SRAM_PA 0x40200000 |
| 98 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
| 99 | #define OMAP4_SRAM_PA 0x40304000 | ||
| 100 | #define OMAP4_SRAM_VA 0xfe404000 | ||
| 101 | #else | ||
| 98 | #define OMAP4_SRAM_PA 0x40300000 | 102 | #define OMAP4_SRAM_PA 0x40300000 |
| 99 | 103 | #endif | |
| 100 | #endif | 104 | #endif |
diff --git a/arch/arm/plat-omap/io.c b/arch/arm/plat-omap/io.c deleted file mode 100644 index 333871f59995..000000000000 --- a/arch/arm/plat-omap/io.c +++ /dev/null | |||
| @@ -1,159 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Common io.c file | ||
| 3 | * This file is created by Russell King <rmk+kernel@arm.linux.org.uk> | ||
| 4 | * | ||
| 5 | * Copyright (C) 2009 Texas Instruments | ||
| 6 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 12 | #include <linux/module.h> | ||
| 13 | #include <linux/io.h> | ||
| 14 | #include <linux/mm.h> | ||
| 15 | #include <linux/dma-mapping.h> | ||
| 16 | |||
| 17 | #include <plat/omap7xx.h> | ||
| 18 | #include <plat/omap1510.h> | ||
| 19 | #include <plat/omap16xx.h> | ||
| 20 | #include <plat/omap24xx.h> | ||
| 21 | #include <plat/omap34xx.h> | ||
| 22 | #include <plat/omap44xx.h> | ||
| 23 | |||
| 24 | #define BETWEEN(p,st,sz) ((p) >= (st) && (p) < ((st) + (sz))) | ||
| 25 | #define XLATE(p,pst,vst) ((void __iomem *)((p) - (pst) + (vst))) | ||
| 26 | |||
| 27 | static int initialized; | ||
| 28 | |||
| 29 | /* | ||
| 30 | * Intercept ioremap() requests for addresses in our fixed mapping regions. | ||
| 31 | */ | ||
| 32 | void __iomem *omap_ioremap(unsigned long p, size_t size, unsigned int type) | ||
| 33 | { | ||
| 34 | |||
| 35 | WARN(!initialized, "Do not use ioremap before init_early\n"); | ||
| 36 | |||
| 37 | #ifdef CONFIG_ARCH_OMAP1 | ||
| 38 | if (cpu_class_is_omap1()) { | ||
| 39 | if (BETWEEN(p, OMAP1_IO_PHYS, OMAP1_IO_SIZE)) | ||
| 40 | return XLATE(p, OMAP1_IO_PHYS, OMAP1_IO_VIRT); | ||
| 41 | } | ||
| 42 | if (cpu_is_omap7xx()) { | ||
| 43 | if (BETWEEN(p, OMAP7XX_DSP_BASE, OMAP7XX_DSP_SIZE)) | ||
| 44 | return XLATE(p, OMAP7XX_DSP_BASE, OMAP7XX_DSP_START); | ||
| 45 | |||
| 46 | if (BETWEEN(p, OMAP7XX_DSPREG_BASE, OMAP7XX_DSPREG_SIZE)) | ||
| 47 | return XLATE(p, OMAP7XX_DSPREG_BASE, | ||
| 48 | OMAP7XX_DSPREG_START); | ||
| 49 | } | ||
| 50 | if (cpu_is_omap15xx()) { | ||
| 51 | if (BETWEEN(p, OMAP1510_DSP_BASE, OMAP1510_DSP_SIZE)) | ||
| 52 | return XLATE(p, OMAP1510_DSP_BASE, OMAP1510_DSP_START); | ||
| 53 | |||
| 54 | if (BETWEEN(p, OMAP1510_DSPREG_BASE, OMAP1510_DSPREG_SIZE)) | ||
| 55 | return XLATE(p, OMAP1510_DSPREG_BASE, | ||
| 56 | OMAP1510_DSPREG_START); | ||
| 57 | } | ||
| 58 | if (cpu_is_omap16xx()) { | ||
| 59 | if (BETWEEN(p, OMAP16XX_DSP_BASE, OMAP16XX_DSP_SIZE)) | ||
| 60 | return XLATE(p, OMAP16XX_DSP_BASE, OMAP16XX_DSP_START); | ||
| 61 | |||
| 62 | if (BETWEEN(p, OMAP16XX_DSPREG_BASE, OMAP16XX_DSPREG_SIZE)) | ||
| 63 | return XLATE(p, OMAP16XX_DSPREG_BASE, | ||
| 64 | OMAP16XX_DSPREG_START); | ||
| 65 | } | ||
| 66 | #endif | ||
| 67 | #ifdef CONFIG_ARCH_OMAP2 | ||
| 68 | if (cpu_is_omap24xx()) { | ||
| 69 | if (BETWEEN(p, L3_24XX_PHYS, L3_24XX_SIZE)) | ||
| 70 | return XLATE(p, L3_24XX_PHYS, L3_24XX_VIRT); | ||
| 71 | if (BETWEEN(p, L4_24XX_PHYS, L4_24XX_SIZE)) | ||
| 72 | return XLATE(p, L4_24XX_PHYS, L4_24XX_VIRT); | ||
| 73 | } | ||
| 74 | if (cpu_is_omap2420()) { | ||
| 75 | if (BETWEEN(p, DSP_MEM_2420_PHYS, DSP_MEM_2420_SIZE)) | ||
| 76 | return XLATE(p, DSP_MEM_2420_PHYS, DSP_MEM_2420_VIRT); | ||
| 77 | if (BETWEEN(p, DSP_IPI_2420_PHYS, DSP_IPI_2420_SIZE)) | ||
| 78 | return XLATE(p, DSP_IPI_2420_PHYS, DSP_IPI_2420_SIZE); | ||
| 79 | if (BETWEEN(p, DSP_MMU_2420_PHYS, DSP_MMU_2420_SIZE)) | ||
| 80 | return XLATE(p, DSP_MMU_2420_PHYS, DSP_MMU_2420_VIRT); | ||
| 81 | } | ||
| 82 | if (cpu_is_omap2430()) { | ||
| 83 | if (BETWEEN(p, L4_WK_243X_PHYS, L4_WK_243X_SIZE)) | ||
| 84 | return XLATE(p, L4_WK_243X_PHYS, L4_WK_243X_VIRT); | ||
| 85 | if (BETWEEN(p, OMAP243X_GPMC_PHYS, OMAP243X_GPMC_SIZE)) | ||
| 86 | return XLATE(p, OMAP243X_GPMC_PHYS, OMAP243X_GPMC_VIRT); | ||
| 87 | if (BETWEEN(p, OMAP243X_SDRC_PHYS, OMAP243X_SDRC_SIZE)) | ||
| 88 | return XLATE(p, OMAP243X_SDRC_PHYS, OMAP243X_SDRC_VIRT); | ||
| 89 | if (BETWEEN(p, OMAP243X_SMS_PHYS, OMAP243X_SMS_SIZE)) | ||
| 90 | return XLATE(p, OMAP243X_SMS_PHYS, OMAP243X_SMS_VIRT); | ||
| 91 | } | ||
| 92 | #endif | ||
| 93 | #ifdef CONFIG_ARCH_OMAP3 | ||
| 94 | if (cpu_is_ti816x()) { | ||
| 95 | if (BETWEEN(p, L4_34XX_PHYS, L4_34XX_SIZE)) | ||
| 96 | return XLATE(p, L4_34XX_PHYS, L4_34XX_VIRT); | ||
| 97 | } else if (cpu_is_omap34xx()) { | ||
| 98 | if (BETWEEN(p, L3_34XX_PHYS, L3_34XX_SIZE)) | ||
| 99 | return XLATE(p, L3_34XX_PHYS, L3_34XX_VIRT); | ||
| 100 | if (BETWEEN(p, L4_34XX_PHYS, L4_34XX_SIZE)) | ||
| 101 | return XLATE(p, L4_34XX_PHYS, L4_34XX_VIRT); | ||
| 102 | if (BETWEEN(p, OMAP34XX_GPMC_PHYS, OMAP34XX_GPMC_SIZE)) | ||
| 103 | return XLATE(p, OMAP34XX_GPMC_PHYS, OMAP34XX_GPMC_VIRT); | ||
| 104 | if (BETWEEN(p, OMAP343X_SMS_PHYS, OMAP343X_SMS_SIZE)) | ||
| 105 | return XLATE(p, OMAP343X_SMS_PHYS, OMAP343X_SMS_VIRT); | ||
| 106 | if (BETWEEN(p, OMAP343X_SDRC_PHYS, OMAP343X_SDRC_SIZE)) | ||
| 107 | return XLATE(p, OMAP343X_SDRC_PHYS, OMAP343X_SDRC_VIRT); | ||
| 108 | if (BETWEEN(p, L4_PER_34XX_PHYS, L4_PER_34XX_SIZE)) | ||
| 109 | return XLATE(p, L4_PER_34XX_PHYS, L4_PER_34XX_VIRT); | ||
| 110 | if (BETWEEN(p, L4_EMU_34XX_PHYS, L4_EMU_34XX_SIZE)) | ||
| 111 | return XLATE(p, L4_EMU_34XX_PHYS, L4_EMU_34XX_VIRT); | ||
| 112 | } | ||
| 113 | #endif | ||
| 114 | #ifdef CONFIG_ARCH_OMAP4 | ||
| 115 | if (cpu_is_omap44xx()) { | ||
| 116 | if (BETWEEN(p, L3_44XX_PHYS, L3_44XX_SIZE)) | ||
| 117 | return XLATE(p, L3_44XX_PHYS, L3_44XX_VIRT); | ||
| 118 | if (BETWEEN(p, L4_44XX_PHYS, L4_44XX_SIZE)) | ||
| 119 | return XLATE(p, L4_44XX_PHYS, L4_44XX_VIRT); | ||
| 120 | if (BETWEEN(p, OMAP44XX_GPMC_PHYS, OMAP44XX_GPMC_SIZE)) | ||
| 121 | return XLATE(p, OMAP44XX_GPMC_PHYS, OMAP44XX_GPMC_VIRT); | ||
| 122 | if (BETWEEN(p, OMAP44XX_EMIF1_PHYS, OMAP44XX_EMIF1_SIZE)) | ||
| 123 | return XLATE(p, OMAP44XX_EMIF1_PHYS, \ | ||
| 124 | OMAP44XX_EMIF1_VIRT); | ||
| 125 | if (BETWEEN(p, OMAP44XX_EMIF2_PHYS, OMAP44XX_EMIF2_SIZE)) | ||
| 126 | return XLATE(p, OMAP44XX_EMIF2_PHYS, \ | ||
| 127 | OMAP44XX_EMIF2_VIRT); | ||
| 128 | if (BETWEEN(p, OMAP44XX_DMM_PHYS, OMAP44XX_DMM_SIZE)) | ||
| 129 | return XLATE(p, OMAP44XX_DMM_PHYS, OMAP44XX_DMM_VIRT); | ||
| 130 | if (BETWEEN(p, L4_PER_44XX_PHYS, L4_PER_44XX_SIZE)) | ||
| 131 | return XLATE(p, L4_PER_44XX_PHYS, L4_PER_44XX_VIRT); | ||
| 132 | if (BETWEEN(p, L4_EMU_44XX_PHYS, L4_EMU_44XX_SIZE)) | ||
| 133 | return XLATE(p, L4_EMU_44XX_PHYS, L4_EMU_44XX_VIRT); | ||
| 134 | } | ||
| 135 | #endif | ||
| 136 | return __arm_ioremap_caller(p, size, type, __builtin_return_address(0)); | ||
| 137 | } | ||
| 138 | EXPORT_SYMBOL(omap_ioremap); | ||
| 139 | |||
| 140 | void omap_iounmap(volatile void __iomem *addr) | ||
| 141 | { | ||
| 142 | unsigned long virt = (unsigned long)addr; | ||
| 143 | |||
| 144 | if (virt >= VMALLOC_START && virt < VMALLOC_END) | ||
| 145 | __iounmap(addr); | ||
| 146 | } | ||
| 147 | EXPORT_SYMBOL(omap_iounmap); | ||
| 148 | |||
| 149 | void __init omap_init_consistent_dma_size(void) | ||
| 150 | { | ||
| 151 | #ifdef CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE | ||
| 152 | init_consistent_dma_size(CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE << 20); | ||
| 153 | #endif | ||
| 154 | } | ||
| 155 | |||
| 156 | void __init omap_ioremap_init(void) | ||
| 157 | { | ||
| 158 | initialized++; | ||
| 159 | } | ||
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c index 8b28664d1c62..ad6a71a00cef 100644 --- a/arch/arm/plat-omap/sram.c +++ b/arch/arm/plat-omap/sram.c | |||
| @@ -40,7 +40,11 @@ | |||
| 40 | #define OMAP1_SRAM_PA 0x20000000 | 40 | #define OMAP1_SRAM_PA 0x20000000 |
| 41 | #define OMAP2_SRAM_PUB_PA (OMAP2_SRAM_PA + 0xf800) | 41 | #define OMAP2_SRAM_PUB_PA (OMAP2_SRAM_PA + 0xf800) |
| 42 | #define OMAP3_SRAM_PUB_PA (OMAP3_SRAM_PA + 0x8000) | 42 | #define OMAP3_SRAM_PUB_PA (OMAP3_SRAM_PA + 0x8000) |
| 43 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
| 44 | #define OMAP4_SRAM_PUB_PA OMAP4_SRAM_PA | ||
| 45 | #else | ||
| 43 | #define OMAP4_SRAM_PUB_PA (OMAP4_SRAM_PA + 0x4000) | 46 | #define OMAP4_SRAM_PUB_PA (OMAP4_SRAM_PA + 0x4000) |
| 47 | #endif | ||
| 44 | 48 | ||
| 45 | #if defined(CONFIG_ARCH_OMAP2PLUS) | 49 | #if defined(CONFIG_ARCH_OMAP2PLUS) |
| 46 | #define SRAM_BOOTLOADER_SZ 0x00 | 50 | #define SRAM_BOOTLOADER_SZ 0x00 |
| @@ -163,6 +167,10 @@ static void __init omap_map_sram(void) | |||
| 163 | if (omap_sram_size == 0) | 167 | if (omap_sram_size == 0) |
| 164 | return; | 168 | return; |
| 165 | 169 | ||
| 170 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
| 171 | omap_sram_start += PAGE_SIZE; | ||
| 172 | omap_sram_size -= SZ_16K; | ||
| 173 | #endif | ||
| 166 | if (cpu_is_omap34xx()) { | 174 | if (cpu_is_omap34xx()) { |
| 167 | /* | 175 | /* |
| 168 | * SRAM must be marked as non-cached on OMAP3 since the | 176 | * SRAM must be marked as non-cached on OMAP3 since the |
diff --git a/arch/arm/plat-s5p/Kconfig b/arch/arm/plat-s5p/Kconfig index 9b9968fa8695..8167ce66188c 100644 --- a/arch/arm/plat-s5p/Kconfig +++ b/arch/arm/plat-s5p/Kconfig | |||
| @@ -11,6 +11,7 @@ config PLAT_S5P | |||
| 11 | default y | 11 | default y |
| 12 | select ARM_VIC if !ARCH_EXYNOS4 | 12 | select ARM_VIC if !ARCH_EXYNOS4 |
| 13 | select ARM_GIC if ARCH_EXYNOS4 | 13 | select ARM_GIC if ARCH_EXYNOS4 |
| 14 | select GIC_NON_BANKED if ARCH_EXYNOS4 | ||
| 14 | select NO_IOPORT | 15 | select NO_IOPORT |
| 15 | select ARCH_REQUIRE_GPIOLIB | 16 | select ARCH_REQUIRE_GPIOLIB |
| 16 | select S3C_GPIO_TRACK | 17 | select S3C_GPIO_TRACK |
diff --git a/arch/arm/plat-spear/include/plat/system.h b/arch/arm/plat-spear/include/plat/system.h index a235fa0ca777..1171f228d718 100644 --- a/arch/arm/plat-spear/include/plat/system.h +++ b/arch/arm/plat-spear/include/plat/system.h | |||
| @@ -31,7 +31,7 @@ static inline void arch_reset(char mode, const char *cmd) | |||
| 31 | { | 31 | { |
| 32 | if (mode == 's') { | 32 | if (mode == 's') { |
| 33 | /* software reset, Jump into ROM at address 0 */ | 33 | /* software reset, Jump into ROM at address 0 */ |
| 34 | cpu_reset(0); | 34 | soft_restart(0); |
| 35 | } else { | 35 | } else { |
| 36 | /* hardware reset, Use on-chip reset capability */ | 36 | /* hardware reset, Use on-chip reset capability */ |
| 37 | sysctl_soft_reset((void __iomem *)VA_SPEAR_SYS_CTRL_BASE); | 37 | sysctl_soft_reset((void __iomem *)VA_SPEAR_SYS_CTRL_BASE); |
diff --git a/arch/arm/plat-spear/include/plat/vmalloc.h b/arch/arm/plat-spear/include/plat/vmalloc.h deleted file mode 100644 index 8c8b24d07046..000000000000 --- a/arch/arm/plat-spear/include/plat/vmalloc.h +++ /dev/null | |||
| @@ -1,19 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/plat-spear/include/plat/vmalloc.h | ||
| 3 | * | ||
| 4 | * Defining Vmalloc area for SPEAr platform | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009 ST Microelectronics | ||
| 7 | * Viresh Kumar<viresh.kumar@st.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __PLAT_VMALLOC_H | ||
| 15 | #define __PLAT_VMALLOC_H | ||
| 16 | |||
| 17 | #define VMALLOC_END 0xF0000000UL | ||
| 18 | |||
| 19 | #endif /* __PLAT_VMALLOC_H */ | ||
diff --git a/arch/arm/plat-tcc/include/mach/vmalloc.h b/arch/arm/plat-tcc/include/mach/vmalloc.h deleted file mode 100644 index 99414d9c2b94..000000000000 --- a/arch/arm/plat-tcc/include/mach/vmalloc.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Author: <linux@telechips.com> | ||
| 3 | * Created: June 10, 2008 | ||
| 4 | * | ||
| 5 | * Copyright (C) 2000 Russell King. | ||
| 6 | * Copyright (C) 2008-2009 Telechips | ||
| 7 | * | ||
| 8 | * Licensed under the terms of the GPL v2. | ||
| 9 | */ | ||
| 10 | #define VMALLOC_END 0xf0000000UL | ||
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 4bde182fcf93..dcdfc2bda922 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
| @@ -131,6 +131,7 @@ extern long vwrite(char *buf, char *addr, unsigned long count); | |||
| 131 | */ | 131 | */ |
| 132 | extern rwlock_t vmlist_lock; | 132 | extern rwlock_t vmlist_lock; |
| 133 | extern struct vm_struct *vmlist; | 133 | extern struct vm_struct *vmlist; |
| 134 | extern __init void vm_area_add_early(struct vm_struct *vm); | ||
| 134 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); | 135 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); |
| 135 | 136 | ||
| 136 | #ifdef CONFIG_SMP | 137 | #ifdef CONFIG_SMP |
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 3231bf332878..e583f770dfee 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
| @@ -1118,6 +1118,32 @@ void *vm_map_ram(struct page **pages, unsigned int count, int node, pgprot_t pro | |||
| 1118 | EXPORT_SYMBOL(vm_map_ram); | 1118 | EXPORT_SYMBOL(vm_map_ram); |
| 1119 | 1119 | ||
| 1120 | /** | 1120 | /** |
| 1121 | * vm_area_add_early - add vmap area early during boot | ||
| 1122 | * @vm: vm_struct to add | ||
| 1123 | * | ||
| 1124 | * This function is used to add fixed kernel vm area to vmlist before | ||
| 1125 | * vmalloc_init() is called. @vm->addr, @vm->size, and @vm->flags | ||
| 1126 | * should contain proper values and the other fields should be zero. | ||
| 1127 | * | ||
| 1128 | * DO NOT USE THIS FUNCTION UNLESS YOU KNOW WHAT YOU'RE DOING. | ||
| 1129 | */ | ||
| 1130 | void __init vm_area_add_early(struct vm_struct *vm) | ||
| 1131 | { | ||
| 1132 | struct vm_struct *tmp, **p; | ||
| 1133 | |||
| 1134 | BUG_ON(vmap_initialized); | ||
| 1135 | for (p = &vmlist; (tmp = *p) != NULL; p = &tmp->next) { | ||
| 1136 | if (tmp->addr >= vm->addr) { | ||
| 1137 | BUG_ON(tmp->addr < vm->addr + vm->size); | ||
| 1138 | break; | ||
| 1139 | } else | ||
| 1140 | BUG_ON(tmp->addr + tmp->size > vm->addr); | ||
| 1141 | } | ||
| 1142 | vm->next = *p; | ||
| 1143 | *p = vm; | ||
| 1144 | } | ||
| 1145 | |||
| 1146 | /** | ||
| 1121 | * vm_area_register_early - register vmap area early during boot | 1147 | * vm_area_register_early - register vmap area early during boot |
| 1122 | * @vm: vm_struct to register | 1148 | * @vm: vm_struct to register |
| 1123 | * @align: requested alignment | 1149 | * @align: requested alignment |
| @@ -1139,8 +1165,7 @@ void __init vm_area_register_early(struct vm_struct *vm, size_t align) | |||
| 1139 | 1165 | ||
| 1140 | vm->addr = (void *)addr; | 1166 | vm->addr = (void *)addr; |
| 1141 | 1167 | ||
| 1142 | vm->next = vmlist; | 1168 | vm_area_add_early(vm); |
| 1143 | vmlist = vm; | ||
| 1144 | } | 1169 | } |
| 1145 | 1170 | ||
| 1146 | void __init vmalloc_init(void) | 1171 | void __init vmalloc_init(void) |
