diff options
| -rw-r--r-- | MAINTAINERS | 10 | ||||
| -rw-r--r-- | arch/arm/common/dmabounce.c | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/perf_event.c | 6 | ||||
| -rw-r--r-- | arch/arm/kernel/setup.c | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/smp_twd.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-ep93xx/core.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-vt8500/irq.c | 21 | ||||
| -rw-r--r-- | arch/arm/mm/cache-l2x0.c | 19 | ||||
| -rw-r--r-- | arch/arm/mm/mmu.c | 5 | ||||
| -rw-r--r-- | arch/arm/mm/nommu.c | 4 | ||||
| -rw-r--r-- | drivers/mmc/host/mmci.c | 2 | ||||
| -rw-r--r-- | drivers/mmc/host/mmci.h | 5 |
12 files changed, 58 insertions, 24 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 4af7ab03266..187282da921 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -594,6 +594,16 @@ S: Maintained | |||
| 594 | F: arch/arm/lib/floppydma.S | 594 | F: arch/arm/lib/floppydma.S |
| 595 | F: arch/arm/include/asm/floppy.h | 595 | F: arch/arm/include/asm/floppy.h |
| 596 | 596 | ||
| 597 | ARM PMU PROFILING AND DEBUGGING | ||
| 598 | M: Will Deacon <will.deacon@arm.com> | ||
| 599 | S: Maintained | ||
| 600 | F: arch/arm/kernel/perf_event* | ||
| 601 | F: arch/arm/oprofile/common.c | ||
| 602 | F: arch/arm/kernel/pmu.c | ||
| 603 | F: arch/arm/include/asm/pmu.h | ||
| 604 | F: arch/arm/kernel/hw_breakpoint.c | ||
| 605 | F: arch/arm/include/asm/hw_breakpoint.h | ||
| 606 | |||
| 597 | ARM PORT | 607 | ARM PORT |
| 598 | M: Russell King <linux@arm.linux.org.uk> | 608 | M: Russell King <linux@arm.linux.org.uk> |
| 599 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 609 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c index e5681636626..841df7d21c2 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c | |||
| @@ -255,7 +255,7 @@ static inline dma_addr_t map_single(struct device *dev, void *ptr, size_t size, | |||
| 255 | if (buf == 0) { | 255 | if (buf == 0) { |
| 256 | dev_err(dev, "%s: unable to map unsafe buffer %p!\n", | 256 | dev_err(dev, "%s: unable to map unsafe buffer %p!\n", |
| 257 | __func__, ptr); | 257 | __func__, ptr); |
| 258 | return 0; | 258 | return ~0; |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | dev_dbg(dev, | 261 | dev_dbg(dev, |
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index d53c0abc4dd..2b5b1421596 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c | |||
| @@ -583,7 +583,7 @@ static int armpmu_event_init(struct perf_event *event) | |||
| 583 | static void armpmu_enable(struct pmu *pmu) | 583 | static void armpmu_enable(struct pmu *pmu) |
| 584 | { | 584 | { |
| 585 | /* Enable all of the perf events on hardware. */ | 585 | /* Enable all of the perf events on hardware. */ |
| 586 | int idx; | 586 | int idx, enabled = 0; |
| 587 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 587 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
| 588 | 588 | ||
| 589 | if (!armpmu) | 589 | if (!armpmu) |
| @@ -596,9 +596,11 @@ static void armpmu_enable(struct pmu *pmu) | |||
| 596 | continue; | 596 | continue; |
| 597 | 597 | ||
| 598 | armpmu->enable(&event->hw, idx); | 598 | armpmu->enable(&event->hw, idx); |
| 599 | enabled = 1; | ||
| 599 | } | 600 | } |
| 600 | 601 | ||
| 601 | armpmu->start(); | 602 | if (enabled) |
| 603 | armpmu->start(); | ||
| 602 | } | 604 | } |
| 603 | 605 | ||
| 604 | static void armpmu_disable(struct pmu *pmu) | 606 | static void armpmu_disable(struct pmu *pmu) |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index ed11fb08b05..acbb447ac6b 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -73,6 +73,7 @@ __setup("fpe=", fpe_setup); | |||
| 73 | #endif | 73 | #endif |
| 74 | 74 | ||
| 75 | extern void paging_init(struct machine_desc *desc); | 75 | extern void paging_init(struct machine_desc *desc); |
| 76 | extern void sanity_check_meminfo(void); | ||
| 76 | extern void reboot_setup(char *str); | 77 | extern void reboot_setup(char *str); |
| 77 | 78 | ||
| 78 | unsigned int processor_id; | 79 | unsigned int processor_id; |
| @@ -900,6 +901,7 @@ void __init setup_arch(char **cmdline_p) | |||
| 900 | 901 | ||
| 901 | parse_early_param(); | 902 | parse_early_param(); |
| 902 | 903 | ||
| 904 | sanity_check_meminfo(); | ||
| 903 | arm_memblock_init(&meminfo, mdesc); | 905 | arm_memblock_init(&meminfo, mdesc); |
| 904 | 906 | ||
| 905 | paging_init(mdesc); | 907 | paging_init(mdesc); |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index 60636f499cb..2c277d40cee 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
| @@ -115,7 +115,7 @@ static void __cpuinit twd_calibrate_rate(void) | |||
| 115 | twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5); | 115 | twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5); |
| 116 | 116 | ||
| 117 | printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000, | 117 | printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000, |
| 118 | (twd_timer_rate / 1000000) % 100); | 118 | (twd_timer_rate / 10000) % 100); |
| 119 | } | 119 | } |
| 120 | } | 120 | } |
| 121 | 121 | ||
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index 1d4b65fd673..6659a0d137a 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
| @@ -251,9 +251,9 @@ static void ep93xx_uart_set_mctrl(struct amba_device *dev, | |||
| 251 | unsigned int mcr; | 251 | unsigned int mcr; |
| 252 | 252 | ||
| 253 | mcr = 0; | 253 | mcr = 0; |
| 254 | if (!(mctrl & TIOCM_RTS)) | 254 | if (mctrl & TIOCM_RTS) |
| 255 | mcr |= 2; | 255 | mcr |= 2; |
| 256 | if (!(mctrl & TIOCM_DTR)) | 256 | if (mctrl & TIOCM_DTR) |
| 257 | mcr |= 1; | 257 | mcr |= 1; |
| 258 | 258 | ||
| 259 | __raw_writel(mcr, base + EP93XX_UART_MCR_OFFSET); | 259 | __raw_writel(mcr, base + EP93XX_UART_MCR_OFFSET); |
diff --git a/arch/arm/mach-vt8500/irq.c b/arch/arm/mach-vt8500/irq.c index 245140c0df1..642de0408f2 100644 --- a/arch/arm/mach-vt8500/irq.c +++ b/arch/arm/mach-vt8500/irq.c | |||
| @@ -39,9 +39,10 @@ | |||
| 39 | static void __iomem *ic_regbase; | 39 | static void __iomem *ic_regbase; |
| 40 | static void __iomem *sic_regbase; | 40 | static void __iomem *sic_regbase; |
| 41 | 41 | ||
| 42 | static void vt8500_irq_mask(unsigned int irq) | 42 | static void vt8500_irq_mask(struct irq_data *d) |
| 43 | { | 43 | { |
| 44 | void __iomem *base = ic_regbase; | 44 | void __iomem *base = ic_regbase; |
| 45 | unsigned irq = d->irq; | ||
| 45 | u8 edge; | 46 | u8 edge; |
| 46 | 47 | ||
| 47 | if (irq >= 64) { | 48 | if (irq >= 64) { |
| @@ -64,9 +65,10 @@ static void vt8500_irq_mask(unsigned int irq) | |||
| 64 | } | 65 | } |
| 65 | } | 66 | } |
| 66 | 67 | ||
| 67 | static void vt8500_irq_unmask(unsigned int irq) | 68 | static void vt8500_irq_unmask(struct irq_data *d) |
| 68 | { | 69 | { |
| 69 | void __iomem *base = ic_regbase; | 70 | void __iomem *base = ic_regbase; |
| 71 | unsigned irq = d->irq; | ||
| 70 | u8 dctr; | 72 | u8 dctr; |
| 71 | 73 | ||
| 72 | if (irq >= 64) { | 74 | if (irq >= 64) { |
| @@ -78,10 +80,11 @@ static void vt8500_irq_unmask(unsigned int irq) | |||
| 78 | writeb(dctr, base + VT8500_IC_DCTR + irq); | 80 | writeb(dctr, base + VT8500_IC_DCTR + irq); |
| 79 | } | 81 | } |
| 80 | 82 | ||
| 81 | static int vt8500_irq_set_type(unsigned int irq, unsigned int flow_type) | 83 | static int vt8500_irq_set_type(struct irq_data *d, unsigned int flow_type) |
| 82 | { | 84 | { |
| 83 | void __iomem *base = ic_regbase; | 85 | void __iomem *base = ic_regbase; |
| 84 | unsigned int orig_irq = irq; | 86 | unsigned irq = d->irq; |
| 87 | unsigned orig_irq = irq; | ||
| 85 | u8 dctr; | 88 | u8 dctr; |
| 86 | 89 | ||
| 87 | if (irq >= 64) { | 90 | if (irq >= 64) { |
| @@ -114,11 +117,11 @@ static int vt8500_irq_set_type(unsigned int irq, unsigned int flow_type) | |||
| 114 | } | 117 | } |
| 115 | 118 | ||
| 116 | static struct irq_chip vt8500_irq_chip = { | 119 | static struct irq_chip vt8500_irq_chip = { |
| 117 | .name = "vt8500", | 120 | .name = "vt8500", |
| 118 | .ack = vt8500_irq_mask, | 121 | .irq_ack = vt8500_irq_mask, |
| 119 | .mask = vt8500_irq_mask, | 122 | .irq_mask = vt8500_irq_mask, |
| 120 | .unmask = vt8500_irq_unmask, | 123 | .irq_unmask = vt8500_irq_unmask, |
| 121 | .set_type = vt8500_irq_set_type, | 124 | .irq_set_type = vt8500_irq_set_type, |
| 122 | }; | 125 | }; |
| 123 | 126 | ||
| 124 | void __init vt8500_init_irq(void) | 127 | void __init vt8500_init_irq(void) |
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index ef59099a546..44c086710d2 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c | |||
| @@ -120,17 +120,22 @@ static void l2x0_cache_sync(void) | |||
| 120 | spin_unlock_irqrestore(&l2x0_lock, flags); | 120 | spin_unlock_irqrestore(&l2x0_lock, flags); |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | static void l2x0_flush_all(void) | 123 | static void __l2x0_flush_all(void) |
| 124 | { | 124 | { |
| 125 | unsigned long flags; | ||
| 126 | |||
| 127 | /* clean all ways */ | ||
| 128 | spin_lock_irqsave(&l2x0_lock, flags); | ||
| 129 | debug_writel(0x03); | 125 | debug_writel(0x03); |
| 130 | writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_CLEAN_INV_WAY); | 126 | writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_CLEAN_INV_WAY); |
| 131 | cache_wait_way(l2x0_base + L2X0_CLEAN_INV_WAY, l2x0_way_mask); | 127 | cache_wait_way(l2x0_base + L2X0_CLEAN_INV_WAY, l2x0_way_mask); |
| 132 | cache_sync(); | 128 | cache_sync(); |
| 133 | debug_writel(0x00); | 129 | debug_writel(0x00); |
| 130 | } | ||
| 131 | |||
| 132 | static void l2x0_flush_all(void) | ||
| 133 | { | ||
| 134 | unsigned long flags; | ||
| 135 | |||
| 136 | /* clean all ways */ | ||
| 137 | spin_lock_irqsave(&l2x0_lock, flags); | ||
| 138 | __l2x0_flush_all(); | ||
| 134 | spin_unlock_irqrestore(&l2x0_lock, flags); | 139 | spin_unlock_irqrestore(&l2x0_lock, flags); |
| 135 | } | 140 | } |
| 136 | 141 | ||
| @@ -266,7 +271,9 @@ static void l2x0_disable(void) | |||
| 266 | unsigned long flags; | 271 | unsigned long flags; |
| 267 | 272 | ||
| 268 | spin_lock_irqsave(&l2x0_lock, flags); | 273 | spin_lock_irqsave(&l2x0_lock, flags); |
| 269 | writel(0, l2x0_base + L2X0_CTRL); | 274 | __l2x0_flush_all(); |
| 275 | writel_relaxed(0, l2x0_base + L2X0_CTRL); | ||
| 276 | dsb(); | ||
| 270 | spin_unlock_irqrestore(&l2x0_lock, flags); | 277 | spin_unlock_irqrestore(&l2x0_lock, flags); |
| 271 | } | 278 | } |
| 272 | 279 | ||
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 9d9e736c2b4..594d677b92c 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
| @@ -759,7 +759,7 @@ early_param("vmalloc", early_vmalloc); | |||
| 759 | 759 | ||
| 760 | static phys_addr_t lowmem_limit __initdata = 0; | 760 | static phys_addr_t lowmem_limit __initdata = 0; |
| 761 | 761 | ||
| 762 | static void __init sanity_check_meminfo(void) | 762 | void __init sanity_check_meminfo(void) |
| 763 | { | 763 | { |
| 764 | int i, j, highmem = 0; | 764 | int i, j, highmem = 0; |
| 765 | 765 | ||
| @@ -1032,8 +1032,9 @@ void __init paging_init(struct machine_desc *mdesc) | |||
| 1032 | { | 1032 | { |
| 1033 | void *zero_page; | 1033 | void *zero_page; |
| 1034 | 1034 | ||
| 1035 | memblock_set_current_limit(lowmem_limit); | ||
| 1036 | |||
| 1035 | build_mem_type_table(); | 1037 | build_mem_type_table(); |
| 1036 | sanity_check_meminfo(); | ||
| 1037 | prepare_page_table(); | 1038 | prepare_page_table(); |
| 1038 | map_lowmem(); | 1039 | map_lowmem(); |
| 1039 | devicemaps_init(mdesc); | 1040 | devicemaps_init(mdesc); |
diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c index 687d02319a4..941a98c9e8a 100644 --- a/arch/arm/mm/nommu.c +++ b/arch/arm/mm/nommu.c | |||
| @@ -27,6 +27,10 @@ void __init arm_mm_memblock_reserve(void) | |||
| 27 | memblock_reserve(CONFIG_VECTORS_BASE, PAGE_SIZE); | 27 | memblock_reserve(CONFIG_VECTORS_BASE, PAGE_SIZE); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | void __init sanity_check_meminfo(void) | ||
| 31 | { | ||
| 32 | } | ||
| 33 | |||
| 30 | /* | 34 | /* |
| 31 | * paging_init() sets up the page tables, initialises the zone memory | 35 | * paging_init() sets up the page tables, initialises the zone memory |
| 32 | * maps, and sets up the zero page, bad page and bad page tables. | 36 | * maps, and sets up the zero page, bad page and bad page tables. |
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 7721de942c6..fe140724a02 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c | |||
| @@ -582,6 +582,8 @@ mmci_data_irq(struct mmci_host *host, struct mmc_data *data, | |||
| 582 | data->error = -EILSEQ; | 582 | data->error = -EILSEQ; |
| 583 | } else if (status & MCI_DATATIMEOUT) { | 583 | } else if (status & MCI_DATATIMEOUT) { |
| 584 | data->error = -ETIMEDOUT; | 584 | data->error = -ETIMEDOUT; |
| 585 | } else if (status & MCI_STARTBITERR) { | ||
| 586 | data->error = -ECOMM; | ||
| 585 | } else if (status & MCI_TXUNDERRUN) { | 587 | } else if (status & MCI_TXUNDERRUN) { |
| 586 | data->error = -EIO; | 588 | data->error = -EIO; |
| 587 | } else if (status & MCI_RXOVERRUN) { | 589 | } else if (status & MCI_RXOVERRUN) { |
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h index bb32e21c09d..2164e8c6476 100644 --- a/drivers/mmc/host/mmci.h +++ b/drivers/mmc/host/mmci.h | |||
| @@ -86,6 +86,7 @@ | |||
| 86 | #define MCI_CMDRESPEND (1 << 6) | 86 | #define MCI_CMDRESPEND (1 << 6) |
| 87 | #define MCI_CMDSENT (1 << 7) | 87 | #define MCI_CMDSENT (1 << 7) |
| 88 | #define MCI_DATAEND (1 << 8) | 88 | #define MCI_DATAEND (1 << 8) |
| 89 | #define MCI_STARTBITERR (1 << 9) | ||
| 89 | #define MCI_DATABLOCKEND (1 << 10) | 90 | #define MCI_DATABLOCKEND (1 << 10) |
| 90 | #define MCI_CMDACTIVE (1 << 11) | 91 | #define MCI_CMDACTIVE (1 << 11) |
| 91 | #define MCI_TXACTIVE (1 << 12) | 92 | #define MCI_TXACTIVE (1 << 12) |
| @@ -112,6 +113,7 @@ | |||
| 112 | #define MCI_CMDRESPENDCLR (1 << 6) | 113 | #define MCI_CMDRESPENDCLR (1 << 6) |
| 113 | #define MCI_CMDSENTCLR (1 << 7) | 114 | #define MCI_CMDSENTCLR (1 << 7) |
| 114 | #define MCI_DATAENDCLR (1 << 8) | 115 | #define MCI_DATAENDCLR (1 << 8) |
| 116 | #define MCI_STARTBITERRCLR (1 << 9) | ||
| 115 | #define MCI_DATABLOCKENDCLR (1 << 10) | 117 | #define MCI_DATABLOCKENDCLR (1 << 10) |
| 116 | /* Extended status bits for the ST Micro variants */ | 118 | /* Extended status bits for the ST Micro variants */ |
| 117 | #define MCI_ST_SDIOITC (1 << 22) | 119 | #define MCI_ST_SDIOITC (1 << 22) |
| @@ -127,6 +129,7 @@ | |||
| 127 | #define MCI_CMDRESPENDMASK (1 << 6) | 129 | #define MCI_CMDRESPENDMASK (1 << 6) |
| 128 | #define MCI_CMDSENTMASK (1 << 7) | 130 | #define MCI_CMDSENTMASK (1 << 7) |
| 129 | #define MCI_DATAENDMASK (1 << 8) | 131 | #define MCI_DATAENDMASK (1 << 8) |
| 132 | #define MCI_STARTBITERRMASK (1 << 9) | ||
| 130 | #define MCI_DATABLOCKENDMASK (1 << 10) | 133 | #define MCI_DATABLOCKENDMASK (1 << 10) |
| 131 | #define MCI_CMDACTIVEMASK (1 << 11) | 134 | #define MCI_CMDACTIVEMASK (1 << 11) |
| 132 | #define MCI_TXACTIVEMASK (1 << 12) | 135 | #define MCI_TXACTIVEMASK (1 << 12) |
| @@ -150,7 +153,7 @@ | |||
| 150 | #define MCI_IRQENABLE \ | 153 | #define MCI_IRQENABLE \ |
| 151 | (MCI_CMDCRCFAILMASK|MCI_DATACRCFAILMASK|MCI_CMDTIMEOUTMASK| \ | 154 | (MCI_CMDCRCFAILMASK|MCI_DATACRCFAILMASK|MCI_CMDTIMEOUTMASK| \ |
| 152 | MCI_DATATIMEOUTMASK|MCI_TXUNDERRUNMASK|MCI_RXOVERRUNMASK| \ | 155 | MCI_DATATIMEOUTMASK|MCI_TXUNDERRUNMASK|MCI_RXOVERRUNMASK| \ |
| 153 | MCI_CMDRESPENDMASK|MCI_CMDSENTMASK) | 156 | MCI_CMDRESPENDMASK|MCI_CMDSENTMASK|MCI_STARTBITERRMASK) |
| 154 | 157 | ||
| 155 | /* These interrupts are directed to IRQ1 when two IRQ lines are available */ | 158 | /* These interrupts are directed to IRQ1 when two IRQ lines are available */ |
| 156 | #define MCI_IRQ1MASK \ | 159 | #define MCI_IRQ1MASK \ |
