Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm: (26 commits)
[ARM] pxa: fix 1c104e0e4f6ab396960c058e95e18bdedcac945b
[ARM] serial: s3c2410: platform_get_irq() may return signed unnoticed
[ARM] am79c961a: platform_get_irq() may return signed unnoticed
[ARM] Feroceon: Feroceon-specific WA-cache compatible {copy,clear}_user_page()
[ARM] Feroceon: fix function alignment in proc-feroceon.S
[ARM] Orion: catch a couple more alternative spellings of PCIe
[ARM] Orion: fix orion-ehci platform resource end addresses
[ARM] Orion: fix ->map_irq() PCIe bus number check
[ARM] Orion: fix ioremap() optimization
[ARM] feroceon: remove CONFIG_CPU_CACHE_ROUND_ROBIN check
[ARM] feroceon: remove CONFIG_CPU_DCACHE_WRITETHROUGH check
kprobes/arm: fix decoding of arithmetic immediate instructions
kprobes/arm: fix cache flush address for instruction stub
[ARM] 5022/1: Race in ARM MMCI PL18x driver, V2
[ARM] 5021/1: at91: buildfix for sam9263 + PM
[ARM] 5018/1: RealView: Fix the ARM11MPCore Oprofile compilation
[ARM] 5016/1: AT91: typo in mci configuration for at91cap at91sam9263
[ARM] 5017/1: pxa3xx: Report unsupported wakeup sources in pxa3xx_set_wake()
[ARM] 5020/1: magician: remove __devinit marker from pasic3_leds_info
[ARM] 5014/1: Cleanup reset state before entering suspend or resetting.
...

+325 -212
+11 -11
arch/arm/configs/am200epdkit_defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.25-rc3 4 - # Sun Mar 9 06:33:33 2008 3 + # Linux kernel version: 2.6.25 4 + # Sun Apr 20 00:29:49 2008 5 5 # 6 6 CONFIG_ARM=y 7 7 CONFIG_SYS_SUPPORTS_APM_EMULATION=y ··· 51 51 # CONFIG_RT_GROUP_SCHED is not set 52 52 CONFIG_USER_SCHED=y 53 53 # CONFIG_CGROUP_SCHED is not set 54 - # CONFIG_SYSFS_DEPRECATED is not set 54 + CONFIG_SYSFS_DEPRECATED=y 55 + CONFIG_SYSFS_DEPRECATED_V2=y 55 56 # CONFIG_RELAY is not set 56 57 # CONFIG_NAMESPACES is not set 57 58 # CONFIG_BLK_DEV_INITRD is not set ··· 86 85 CONFIG_HAVE_OPROFILE=y 87 86 # CONFIG_KPROBES is not set 88 87 CONFIG_HAVE_KPROBES=y 88 + CONFIG_HAVE_KRETPROBES=y 89 89 CONFIG_PROC_PAGE_MONITOR=y 90 90 CONFIG_SLABINFO=y 91 91 CONFIG_RT_MUTEXES=y ··· 117 115 CONFIG_DEFAULT_NOOP=y 118 116 CONFIG_DEFAULT_IOSCHED="noop" 119 117 CONFIG_CLASSIC_RCU=y 120 - # CONFIG_PREEMPT_RCU is not set 121 118 122 119 # 123 120 # System Type ··· 321 320 CONFIG_DEFAULT_TCP_CONG="cubic" 322 321 # CONFIG_TCP_MD5SIG is not set 323 322 # CONFIG_IPV6 is not set 324 - # CONFIG_INET6_XFRM_TUNNEL is not set 325 - # CONFIG_INET6_TUNNEL is not set 326 323 # CONFIG_NETWORK_SECMARK is not set 327 324 # CONFIG_NETFILTER is not set 328 325 # CONFIG_IP_DCCP is not set ··· 382 383 CONFIG_IEEE80211_CRYPT_WEP=m 383 384 # CONFIG_IEEE80211_CRYPT_CCMP is not set 384 385 # CONFIG_IEEE80211_CRYPT_TKIP is not set 385 - # CONFIG_IEEE80211_SOFTMAC is not set 386 386 # CONFIG_RFKILL is not set 387 387 # CONFIG_NET_9P is not set 388 388 ··· 501 503 CONFIG_BLK_DEV_IDE=m 502 504 503 505 # 504 - # Please see Documentation/ide.txt for help/info on IDE drives 506 + # Please see Documentation/ide/ide.txt for help/info on IDE drives 505 507 # 506 508 # CONFIG_BLK_DEV_IDE_SATA is not set 507 509 CONFIG_BLK_DEV_IDEDISK=m ··· 516 518 # 517 519 # IDE chipset support/bugfixes 518 520 # 519 - CONFIG_IDE_GENERIC=m 520 521 # CONFIG_BLK_DEV_PLATFORM is not set 521 522 # CONFIG_BLK_DEV_IDEDMA is not set 522 - CONFIG_IDE_ARCH_OBSOLETE_INIT=y 523 + # CONFIG_BLK_DEV_HD_ONLY is not set 523 524 # CONFIG_BLK_DEV_HD is not set 524 525 525 526 # ··· 559 562 # 560 563 # CONFIG_WLAN_PRE80211 is not set 561 564 # CONFIG_WLAN_80211 is not set 565 + # CONFIG_IWLWIFI_LEDS is not set 562 566 # CONFIG_NET_PCMCIA is not set 563 567 # CONFIG_WAN is not set 564 568 # CONFIG_PPP is not set ··· 705 707 # 706 708 # CONFIG_MFD_SM501 is not set 707 709 # CONFIG_MFD_ASIC3 is not set 710 + # CONFIG_HTC_EGPIO is not set 711 + # CONFIG_HTC_PASIC3 is not set 708 712 709 713 # 710 714 # Multimedia devices ··· 745 745 CONFIG_FB_PXA=y 746 746 CONFIG_FB_PXA_PARAMETERS=y 747 747 CONFIG_FB_MBX=m 748 + # CONFIG_FB_METRONOME is not set 748 749 CONFIG_FB_VIRTUAL=m 749 750 # CONFIG_BACKLIGHT_LCD_SUPPORT is not set 750 751 ··· 892 891 # CONFIG_JFS_FS is not set 893 892 # CONFIG_FS_POSIX_ACL is not set 894 893 # CONFIG_XFS_FS is not set 895 - # CONFIG_GFS2_FS is not set 896 894 # CONFIG_OCFS2_FS is not set 897 895 # CONFIG_DNOTIFY is not set 898 896 CONFIG_INOTIFY=y
+1 -1
arch/arm/kernel/kprobes-decode.c
··· 1176 1176 * *S (bit 20) updates condition codes 1177 1177 * ADC/SBC/RSC reads the C flag 1178 1178 */ 1179 - insn &= 0xfff00ff0; /* Rn = r0, Rd = r0 */ 1179 + insn &= 0xfff00fff; /* Rn = r0, Rd = r0 */ 1180 1180 asi->insn[0] = insn; 1181 1181 asi->insn_handler = (insn & (1 << 20)) ? /* S-bit */ 1182 1182 emulate_alu_imm_rwflags : emulate_alu_imm_rflags;
+1 -1
arch/arm/kernel/kprobes.c
··· 66 66 return -ENOMEM; 67 67 for (is = 0; is < MAX_INSN_SIZE; ++is) 68 68 p->ainsn.insn[is] = tmp_insn[is]; 69 - flush_insns(&p->ainsn.insn, MAX_INSN_SIZE); 69 + flush_insns(p->ainsn.insn, MAX_INSN_SIZE); 70 70 break; 71 71 72 72 case INSN_GOOD_NO_SLOT: /* instruction doesn't need insn slot */
+1 -1
arch/arm/mach-at91/at91cap9_devices.c
··· 246 246 } 247 247 248 248 mmc0_data = *data; 249 - at91_clock_associate("mci0_clk", &at91cap9_mmc1_device.dev, "mci_clk"); 249 + at91_clock_associate("mci0_clk", &at91cap9_mmc0_device.dev, "mci_clk"); 250 250 platform_device_register(&at91cap9_mmc0_device); 251 251 } else { /* MCI1 */ 252 252 /* CLK */
+1 -1
arch/arm/mach-at91/at91sam9263_devices.c
··· 308 308 } 309 309 310 310 mmc0_data = *data; 311 - at91_clock_associate("mci0_clk", &at91sam9263_mmc1_device.dev, "mci_clk"); 311 + at91_clock_associate("mci0_clk", &at91sam9263_mmc0_device.dev, "mci_clk"); 312 312 platform_device_register(&at91sam9263_mmc0_device); 313 313 } else { /* MCI1 */ 314 314 /* CLK */
+9 -5
arch/arm/mach-at91/pm.c
··· 61 61 #else 62 62 #include <asm/arch/at91sam9_sdramc.h> 63 63 64 + #ifdef CONFIG_ARCH_AT91SAM9263 65 + /* 66 + * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use; 67 + * handle those cases both here and in the Suspend-To-RAM support. 68 + */ 69 + #define AT91_SDRAMC AT91_SDRAMC0 70 + #warning Assuming EB1 SDRAM controller is *NOT* used 71 + #endif 72 + 64 73 static u32 saved_lpr; 65 74 66 75 static inline void sdram_selfrefresh_enable(void) ··· 83 74 } 84 75 85 76 #define sdram_selfrefresh_disable() at91_sys_write(AT91_SDRAMC_LPR, saved_lpr) 86 - 87 - /* 88 - * FIXME: The AT91SAM9263 has a second EBI controller which may have 89 - * additional SDRAM. pm_slowclock.S will require a similar fix. 90 - */ 91 77 92 78 #endif 93 79
+2 -2
arch/arm/mach-orion5x/addr-map.c
··· 19 19 20 20 /* 21 21 * The Orion has fully programable address map. There's a separate address 22 - * map for each of the device _master_ interfaces, e.g. CPU, PCI, PCIE, USB, 22 + * map for each of the device _master_ interfaces, e.g. CPU, PCI, PCIe, USB, 23 23 * Gigabit Ethernet, DMA/XOR engines, etc. Each interface has its own 24 24 * address decode windows that allow it to access any of the Orion resources. 25 25 * 26 26 * CPU address decoding -- 27 27 * Linux assumes that it is the boot loader that already setup the access to 28 28 * DDR and internal registers. 29 - * Setup access to PCI and PCI-E IO/MEM space is issued by this file. 29 + * Setup access to PCI and PCIe IO/MEM space is issued by this file. 30 30 * Setup access to various devices located on the device bus interface (e.g. 31 31 * flashes, RTC, etc) should be issued by machine-setup.c according to 32 32 * specific board population (by using orion5x_setup_*_win()).
+3 -3
arch/arm/mach-orion5x/common.c
··· 132 132 static struct resource orion5x_ehci0_resources[] = { 133 133 { 134 134 .start = ORION5X_USB0_PHYS_BASE, 135 - .end = ORION5X_USB0_PHYS_BASE + SZ_4K, 135 + .end = ORION5X_USB0_PHYS_BASE + SZ_4K - 1, 136 136 .flags = IORESOURCE_MEM, 137 137 }, 138 138 { ··· 145 145 static struct resource orion5x_ehci1_resources[] = { 146 146 { 147 147 .start = ORION5X_USB1_PHYS_BASE, 148 - .end = ORION5X_USB1_PHYS_BASE + SZ_4K, 148 + .end = ORION5X_USB1_PHYS_BASE + SZ_4K - 1, 149 149 .flags = IORESOURCE_MEM, 150 150 }, 151 151 { ··· 317 317 ****************************************************************************/ 318 318 319 319 /* 320 - * Identify device ID and rev from PCIE configuration header space '0'. 320 + * Identify device ID and rev from PCIe configuration header space '0'. 321 321 */ 322 322 static void __init orion5x_id(u32 *dev, u32 *rev, char **dev_name) 323 323 {
+1 -2
arch/arm/mach-orion5x/common.h
··· 33 33 struct pci_bus; 34 34 35 35 void orion5x_pcie_id(u32 *dev, u32 *rev); 36 - int orion5x_pcie_local_bus_nr(void); 37 - int orion5x_pci_local_bus_nr(void); 38 36 int orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys); 39 37 struct pci_bus *orion5x_pci_sys_scan_bus(int nr, struct pci_sys_data *sys); 38 + int orion5x_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin); 40 39 41 40 /* 42 41 * Valid GPIO pins according to MPP setup, used by machine-setup.
+9 -6
arch/arm/mach-orion5x/db88f5281-setup.c
··· 241 241 242 242 static int __init db88f5281_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 243 243 { 244 - /* 245 - * PCIE IRQ is connected internally (not GPIO) 246 - */ 247 - if (dev->bus->number == orion5x_pcie_local_bus_nr()) 248 - return IRQ_ORION5X_PCIE0_INT; 244 + int irq; 249 245 250 246 /* 251 - * PCI IRQs are connected via GPIOs 247 + * Check for devices with hard-wired IRQs. 248 + */ 249 + irq = orion5x_pci_map_irq(dev, slot, pin); 250 + if (irq != -1) 251 + return irq; 252 + 253 + /* 254 + * PCI IRQs are connected via GPIOs. 252 255 */ 253 256 switch (slot - DB88F5281_PCI_SLOT0_OFFS) { 254 257 case 0:
+11 -6
arch/arm/mach-orion5x/dns323-setup.c
··· 43 43 44 44 static int __init dns323_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 45 45 { 46 - /* PCI-E */ 47 - if (dev->bus->number == orion5x_pcie_local_bus_nr()) 48 - return IRQ_ORION5X_PCIE0_INT; 46 + int irq; 49 47 50 - pr_err("%s: requested mapping for unknown bus\n", __func__); 48 + /* 49 + * Check for devices with hard-wired IRQs. 50 + */ 51 + irq = orion5x_pci_map_irq(dev, slot, pin); 52 + if (irq != -1) 53 + return irq; 54 + 55 + pr_err("%s: requested mapping for unknown device\n", __func__); 51 56 52 57 return -1; 53 58 } ··· 255 250 */ 256 251 orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE); 257 252 258 - /* DNS-323 has a Marvell 88X7042 SATA controller attached via PCIE 253 + /* DNS-323 has a Marvell 88X7042 SATA controller attached via PCIe 259 254 * 260 - * Open a special address decode windows for the PCIE WA. 255 + * Open a special address decode windows for the PCIe WA. 261 256 */ 262 257 orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, 263 258 ORION5X_PCIE_WA_SIZE);
+11 -5
arch/arm/mach-orion5x/kurobox_pro-setup.c
··· 120 120 121 121 static int __init kurobox_pro_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 122 122 { 123 + int irq; 124 + 125 + /* 126 + * Check for devices with hard-wired IRQs. 127 + */ 128 + irq = orion5x_pci_map_irq(dev, slot, pin); 129 + if (irq != -1) 130 + return irq; 131 + 123 132 /* 124 133 * PCI isn't used on the Kuro 125 134 */ 126 - if (dev->bus->number == orion5x_pcie_local_bus_nr()) 127 - return IRQ_ORION5X_PCIE0_INT; 128 - else 129 - printk(KERN_ERR "kurobox_pro_pci_map_irq failed, unknown bus\n"); 135 + printk(KERN_ERR "kurobox_pro_pci_map_irq failed, unknown bus\n"); 130 136 131 137 return -1; 132 138 } ··· 197 191 orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, KUROBOX_PRO_NAND_SIZE); 198 192 199 193 /* 200 - * Open a special address decode windows for the PCIE WA. 194 + * Open a special address decode windows for the PCIe WA. 201 195 */ 202 196 orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, 203 197 ORION5X_PCIE_WA_SIZE);
+14 -6
arch/arm/mach-orion5x/pci.c
··· 41 41 *rev = orion_pcie_rev(PCIE_BASE); 42 42 } 43 43 44 - int __init orion5x_pcie_local_bus_nr(void) 45 - { 46 - return orion_pcie_get_local_bus_nr(PCIE_BASE); 47 - } 48 - 49 44 static int pcie_valid_config(int bus, int dev) 50 45 { 51 46 /* ··· 264 269 */ 265 270 static DEFINE_SPINLOCK(orion5x_pci_lock); 266 271 267 - int orion5x_pci_local_bus_nr(void) 272 + static int orion5x_pci_local_bus_nr(void) 268 273 { 269 274 u32 conf = orion5x_read(PCI_P2P_CONF); 270 275 return((conf & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS); ··· 551 556 } 552 557 553 558 return bus; 559 + } 560 + 561 + int __init orion5x_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 562 + { 563 + int bus = dev->bus->number; 564 + 565 + /* 566 + * PCIe endpoint? 567 + */ 568 + if (bus < orion5x_pci_local_bus_nr()) 569 + return IRQ_ORION5X_PCIE0_INT; 570 + 571 + return -1; 554 572 }
+7 -4
arch/arm/mach-orion5x/rd88f5182-setup.c
··· 172 172 173 173 static int __init rd88f5182_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 174 174 { 175 + int irq; 176 + 175 177 /* 176 - * PCI-E isn't used on the RD2 178 + * Check for devices with hard-wired IRQs. 177 179 */ 178 - if (dev->bus->number == orion5x_pcie_local_bus_nr()) 179 - return IRQ_ORION5X_PCIE0_INT; 180 + irq = orion5x_pci_map_irq(dev, slot, pin); 181 + if (irq != -1) 182 + return irq; 180 183 181 184 /* 182 185 * PCI IRQs are connected via GPIOs ··· 260 257 orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); 261 258 262 259 /* 263 - * Open a special address decode windows for the PCIE WA. 260 + * Open a special address decode windows for the PCIe WA. 264 261 */ 265 262 orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, 266 263 ORION5X_PCIE_WA_SIZE);
+10 -7
arch/arm/mach-orion5x/ts209-setup.c
··· 141 141 142 142 static int __init qnap_ts209_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 143 143 { 144 - /* 145 - * PCIE IRQ is connected internally (not GPIO) 146 - */ 147 - if (dev->bus->number == orion5x_pcie_local_bus_nr()) 148 - return IRQ_ORION5X_PCIE0_INT; 144 + int irq; 149 145 150 146 /* 151 - * PCI IRQs are connected via GPIOs 147 + * Check for devices with hard-wired IRQs. 148 + */ 149 + irq = orion5x_pci_map_irq(dev, slot, pin); 150 + if (irq != -1) 151 + return irq; 152 + 153 + /* 154 + * PCI IRQs are connected via GPIOs. 152 155 */ 153 156 switch (slot - QNAP_TS209_PCI_SLOT0_OFFS) { 154 157 case 0: ··· 375 372 QNAP_TS209_NOR_BOOT_SIZE); 376 373 377 374 /* 378 - * Open a special address decode windows for the PCIE WA. 375 + * Open a special address decode windows for the PCIe WA. 379 376 */ 380 377 orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, 381 378 ORION5X_PCIE_WA_SIZE);
+3 -3
arch/arm/mach-pxa/Makefile
··· 5 5 # Common support (must be linked before board specific support) 6 6 obj-y += clock.o devices.o generic.o irq.o dma.o \ 7 7 time.o gpio.o 8 - obj-$(CONFIG_PXA25x) += pxa25x.o mfp-pxa2xx.o 9 - obj-$(CONFIG_PXA27x) += pxa27x.o mfp-pxa2xx.o 10 - obj-$(CONFIG_PXA3xx) += pxa3xx.o mfp-pxa3xx.o smemc.o 8 + obj-$(CONFIG_PXA25x) += mfp-pxa2xx.o pxa25x.o 9 + obj-$(CONFIG_PXA27x) += mfp-pxa2xx.o pxa27x.o 10 + obj-$(CONFIG_PXA3xx) += mfp-pxa3xx.o pxa3xx.o smemc.o 11 11 obj-$(CONFIG_CPU_PXA300) += pxa300.o 12 12 obj-$(CONFIG_CPU_PXA320) += pxa320.o 13 13
+1
arch/arm/mach-pxa/gumstix.c
··· 40 40 41 41 #include <asm/arch/pxa-regs.h> 42 42 #include <asm/arch/pxa2xx-regs.h> 43 + #include <asm/arch/pxa2xx-gpio.h> 43 44 44 45 #include "generic.h" 45 46
+52 -9
arch/arm/mach-pxa/magician.c
··· 114 114 GPIO82_CIF_DD_5, 115 115 GPIO84_CIF_FV, 116 116 GPIO85_CIF_LV, 117 + 118 + /* Magician specific input GPIOs */ 119 + GPIO9_GPIO, /* unknown */ 120 + GPIO10_GPIO, /* GSM_IRQ */ 121 + GPIO13_GPIO, /* CPLD_IRQ */ 122 + GPIO107_GPIO, /* DS1WM_IRQ */ 123 + GPIO108_GPIO, /* GSM_READY */ 124 + GPIO115_GPIO, /* nPEN_IRQ */ 117 125 }; 118 126 119 127 /* ··· 446 438 447 439 static struct platform_device pasic3; 448 440 449 - static struct pasic3_leds_machinfo __devinit pasic3_leds_info = { 441 + static struct pasic3_leds_machinfo pasic3_leds_info = { 450 442 .num_leds = ARRAY_SIZE(pasic3_leds), 451 443 .power_gpio = EGPIO_MAGICIAN_LED_POWER, 452 444 .leds = pasic3_leds, ··· 551 543 static int magician_mci_init(struct device *dev, 552 544 irq_handler_t detect_irq, void *data) 553 545 { 554 - return request_irq(IRQ_MAGICIAN_SD, detect_irq, 546 + int err; 547 + 548 + err = request_irq(IRQ_MAGICIAN_SD, detect_irq, 555 549 IRQF_DISABLED | IRQF_SAMPLE_RANDOM, 556 550 "MMC card detect", data); 551 + if (err) 552 + goto err_request_irq; 553 + err = gpio_request(EGPIO_MAGICIAN_SD_POWER, "SD_POWER"); 554 + if (err) 555 + goto err_request_power; 556 + err = gpio_request(EGPIO_MAGICIAN_nSD_READONLY, "nSD_READONLY"); 557 + if (err) 558 + goto err_request_readonly; 559 + 560 + return 0; 561 + 562 + err_request_readonly: 563 + gpio_free(EGPIO_MAGICIAN_SD_POWER); 564 + err_request_power: 565 + free_irq(IRQ_MAGICIAN_SD, data); 566 + err_request_irq: 567 + return err; 557 568 } 558 569 559 570 static void magician_mci_setpower(struct device *dev, unsigned int vdd) ··· 589 562 590 563 static void magician_mci_exit(struct device *dev, void *data) 591 564 { 565 + gpio_free(EGPIO_MAGICIAN_nSD_READONLY); 566 + gpio_free(EGPIO_MAGICIAN_SD_POWER); 592 567 free_irq(IRQ_MAGICIAN_SD, data); 593 568 } 594 569 ··· 672 643 { 673 644 void __iomem *cpld; 674 645 int lcd_select; 646 + int err; 647 + 648 + gpio_request(GPIO13_MAGICIAN_CPLD_IRQ, "CPLD_IRQ"); 649 + gpio_request(GPIO107_MAGICIAN_DS1WM_IRQ, "DS1WM_IRQ"); 675 650 676 651 pxa2xx_mfp_config(ARRAY_AND_SIZE(magician_pin_config)); 677 652 678 653 platform_add_devices(devices, ARRAY_SIZE(devices)); 654 + 655 + err = gpio_request(GPIO83_MAGICIAN_nIR_EN, "nIR_EN"); 656 + if (!err) { 657 + gpio_direction_output(GPIO83_MAGICIAN_nIR_EN, 1); 658 + pxa_set_ficp_info(&magician_ficp_info); 659 + } 679 660 pxa_set_i2c_info(NULL); 680 661 pxa_set_mci_info(&magician_mci_info); 681 662 pxa_set_ohci_info(&magician_ohci_info); 682 - pxa_set_ficp_info(&magician_ficp_info); 683 663 684 664 /* Check LCD type we have */ 685 665 cpld = ioremap_nocache(PXA_CS3_PHYS, 0x1000); 686 666 if (cpld) { 687 667 u8 board_id = __raw_readb(cpld+0x14); 668 + iounmap(cpld); 688 669 system_rev = board_id & 0x7; 689 670 lcd_select = board_id & 0x8; 690 - iounmap(cpld); 691 671 pr_info("LCD type: %s\n", lcd_select ? "Samsung" : "Toppoly"); 692 - if (lcd_select && (system_rev < 3)) 693 - pxa_gpio_mode(GPIO75_MAGICIAN_SAMSUNG_POWER_MD); 694 - pxa_gpio_mode(GPIO104_MAGICIAN_LCD_POWER_1_MD); 695 - pxa_gpio_mode(GPIO105_MAGICIAN_LCD_POWER_2_MD); 696 - pxa_gpio_mode(GPIO106_MAGICIAN_LCD_POWER_3_MD); 672 + if (lcd_select && (system_rev < 3)) { 673 + gpio_request(GPIO75_MAGICIAN_SAMSUNG_POWER, "SAMSUNG_POWER"); 674 + gpio_direction_output(GPIO75_MAGICIAN_SAMSUNG_POWER, 0); 675 + } 676 + gpio_request(GPIO104_MAGICIAN_LCD_POWER_1, "LCD_POWER_1"); 677 + gpio_request(GPIO105_MAGICIAN_LCD_POWER_2, "LCD_POWER_2"); 678 + gpio_request(GPIO106_MAGICIAN_LCD_POWER_3, "LCD_POWER_3"); 679 + gpio_direction_output(GPIO104_MAGICIAN_LCD_POWER_1, 0); 680 + gpio_direction_output(GPIO105_MAGICIAN_LCD_POWER_2, 0); 681 + gpio_direction_output(GPIO106_MAGICIAN_LCD_POWER_3, 0); 697 682 set_pxa_fb_info(lcd_select ? &samsung_info : &toppoly_info); 698 683 } else 699 684 pr_err("LCD detection: CPLD mapping failed\n");
+2 -2
arch/arm/mach-pxa/pm.c
··· 46 46 sleep_save_checksum += sleep_save[i]; 47 47 } 48 48 49 - /* Clear sleep reset status */ 50 - RCSR = RCSR_SMR; 49 + /* Clear reset status */ 50 + RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR; 51 51 52 52 /* *** go zzz *** */ 53 53 pxa_cpu_pm_fns->enter(state);
+2
arch/arm/mach-pxa/pxa3xx.c
··· 486 486 case IRQ_MMC3: 487 487 mask = ADXER_MFP_GEN12; 488 488 break; 489 + default: 490 + return -EINVAL; 489 491 } 490 492 491 493 local_irq_save(flags);
+5 -2
arch/arm/mm/Kconfig
··· 372 372 select CPU_PABRT_NOIFAR 373 373 select CPU_CACHE_VIVT 374 374 select CPU_CP15_MMU 375 - select CPU_COPY_V4WB if MMU 375 + select CPU_COPY_FEROCEON if MMU 376 376 select CPU_TLB_V4WBI if MMU 377 377 378 378 config CPU_FEROCEON_OLD_ID ··· 523 523 config CPU_COPY_V4WB 524 524 bool 525 525 526 + config CPU_COPY_FEROCEON 527 + bool 528 + 526 529 config CPU_COPY_V6 527 530 bool 528 531 ··· 661 658 662 659 config CPU_DCACHE_WRITETHROUGH 663 660 bool "Force write through D-cache" 664 - depends on (CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_FEROCEON) && !CPU_DCACHE_DISABLE 661 + depends on (CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020) && !CPU_DCACHE_DISABLE 665 662 default y if CPU_ARM925T 666 663 help 667 664 Say Y here to use the data cache in writethrough mode. Unless you
+1
arch/arm/mm/Makefile
··· 36 36 obj-$(CONFIG_CPU_COPY_V3) += copypage-v3.o 37 37 obj-$(CONFIG_CPU_COPY_V4WT) += copypage-v4wt.o 38 38 obj-$(CONFIG_CPU_COPY_V4WB) += copypage-v4wb.o 39 + obj-$(CONFIG_CPU_COPY_FEROCEON) += copypage-feroceon.o 39 40 obj-$(CONFIG_CPU_COPY_V6) += copypage-v6.o context.o 40 41 obj-$(CONFIG_CPU_SA1100) += copypage-v4mc.o 41 42 obj-$(CONFIG_CPU_XSCALE) += copypage-xscale.o
+95
arch/arm/mm/copypage-feroceon.S
··· 1 + /* 2 + * linux/arch/arm/lib/copypage-feroceon.S 3 + * 4 + * Copyright (C) 2008 Marvell Semiconductors 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 handles copy_user_page and clear_user_page on Feroceon 11 + * more optimally than the generic implementations. 12 + */ 13 + #include <linux/linkage.h> 14 + #include <linux/init.h> 15 + #include <asm/asm-offsets.h> 16 + 17 + .text 18 + .align 5 19 + 20 + ENTRY(feroceon_copy_user_page) 21 + stmfd sp!, {r4-r9, lr} 22 + mov ip, #PAGE_SZ 23 + 1: mov lr, r1 24 + ldmia r1!, {r2 - r9} 25 + pld [lr, #32] 26 + pld [lr, #64] 27 + pld [lr, #96] 28 + pld [lr, #128] 29 + pld [lr, #160] 30 + pld [lr, #192] 31 + pld [lr, #224] 32 + stmia r0, {r2 - r9} 33 + ldmia r1!, {r2 - r9} 34 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 35 + add r0, r0, #32 36 + stmia r0, {r2 - r9} 37 + ldmia r1!, {r2 - r9} 38 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 39 + add r0, r0, #32 40 + stmia r0, {r2 - r9} 41 + ldmia r1!, {r2 - r9} 42 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 43 + add r0, r0, #32 44 + stmia r0, {r2 - r9} 45 + ldmia r1!, {r2 - r9} 46 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 47 + add r0, r0, #32 48 + stmia r0, {r2 - r9} 49 + ldmia r1!, {r2 - r9} 50 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 51 + add r0, r0, #32 52 + stmia r0, {r2 - r9} 53 + ldmia r1!, {r2 - r9} 54 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 55 + add r0, r0, #32 56 + stmia r0, {r2 - r9} 57 + ldmia r1!, {r2 - r9} 58 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 59 + add r0, r0, #32 60 + stmia r0, {r2 - r9} 61 + subs ip, ip, #(32 * 8) 62 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 63 + add r0, r0, #32 64 + bne 1b 65 + mcr p15, 0, ip, c7, c10, 4 @ drain WB 66 + ldmfd sp!, {r4-r9, pc} 67 + 68 + .align 5 69 + 70 + ENTRY(feroceon_clear_user_page) 71 + stmfd sp!, {r4-r7, lr} 72 + mov r1, #PAGE_SZ/32 73 + mov r2, #0 74 + mov r3, #0 75 + mov r4, #0 76 + mov r5, #0 77 + mov r6, #0 78 + mov r7, #0 79 + mov ip, #0 80 + mov lr, #0 81 + 1: stmia r0, {r2-r7, ip, lr} 82 + subs r1, r1, #1 83 + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D line 84 + add r0, r0, #32 85 + bne 1b 86 + mcr p15, 0, r1, c7, c10, 4 @ drain WB 87 + ldmfd sp!, {r4-r7, pc} 88 + 89 + __INITDATA 90 + 91 + .type feroceon_user_fns, #object 92 + ENTRY(feroceon_user_fns) 93 + .long feroceon_clear_user_page 94 + .long feroceon_copy_user_page 95 + .size feroceon_user_fns, . - feroceon_user_fns
+12 -48
arch/arm/mm/proc-feroceon.S
··· 93 93 * 94 94 * Called with IRQs disabled 95 95 */ 96 - .align 10 96 + .align 5 97 97 ENTRY(cpu_feroceon_do_idle) 98 98 mov r0, #0 99 99 mcr p15, 0, r0, c7, c10, 4 @ Drain write buffer ··· 106 106 * Clean and invalidate all cache entries in a particular 107 107 * address space. 108 108 */ 109 + .align 5 109 110 ENTRY(feroceon_flush_user_cache_all) 110 111 /* FALLTHROUGH */ 111 112 ··· 119 118 mov r2, #VM_EXEC 120 119 mov ip, #0 121 120 __flush_whole_cache: 122 - #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH 123 - mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache 124 - #else 125 121 1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate 126 122 bne 1b 127 - #endif 128 123 tst r2, #VM_EXEC 129 124 mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache 130 125 mcrne p15, 0, ip, c7, c10, 4 @ drain WB ··· 136 139 * - end - end address (exclusive) 137 140 * - flags - vm_flags describing address space 138 141 */ 142 + .align 5 139 143 ENTRY(feroceon_flush_user_cache_range) 140 144 mov ip, #0 141 145 sub r3, r1, r0 @ calculate total size 142 146 cmp r3, #CACHE_DLIMIT 143 147 bgt __flush_whole_cache 144 148 1: tst r2, #VM_EXEC 145 - #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH 146 - mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry 147 - mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry 148 - add r0, r0, #CACHE_DLINESIZE 149 - mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry 150 - mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry 151 - add r0, r0, #CACHE_DLINESIZE 152 - #else 153 149 mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry 154 150 mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry 155 151 add r0, r0, #CACHE_DLINESIZE 156 152 mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry 157 153 mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry 158 154 add r0, r0, #CACHE_DLINESIZE 159 - #endif 160 155 cmp r0, r1 161 156 blo 1b 162 157 tst r2, #VM_EXEC ··· 165 176 * - start - virtual start address 166 177 * - end - virtual end address 167 178 */ 179 + .align 5 168 180 ENTRY(feroceon_coherent_kern_range) 169 181 /* FALLTHROUGH */ 170 182 ··· 197 207 * 198 208 * - addr - page aligned address 199 209 */ 210 + .align 5 200 211 ENTRY(feroceon_flush_kern_dcache_page) 201 212 add r1, r0, #PAGE_SZ 202 213 1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry ··· 222 231 * 223 232 * (same as v4wb) 224 233 */ 234 + .align 5 225 235 ENTRY(feroceon_dma_inv_range) 226 - #ifndef CONFIG_CPU_DCACHE_WRITETHROUGH 227 236 tst r0, #CACHE_DLINESIZE - 1 228 237 mcrne p15, 0, r0, c7, c10, 1 @ clean D entry 229 238 tst r1, #CACHE_DLINESIZE - 1 230 239 mcrne p15, 0, r1, c7, c10, 1 @ clean D entry 231 - #endif 232 240 bic r0, r0, #CACHE_DLINESIZE - 1 233 241 1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry 234 242 add r0, r0, #CACHE_DLINESIZE ··· 246 256 * 247 257 * (same as v4wb) 248 258 */ 259 + .align 5 249 260 ENTRY(feroceon_dma_clean_range) 250 - #ifndef CONFIG_CPU_DCACHE_WRITETHROUGH 251 261 bic r0, r0, #CACHE_DLINESIZE - 1 252 262 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry 253 263 add r0, r0, #CACHE_DLINESIZE 254 264 cmp r0, r1 255 265 blo 1b 256 - #endif 257 266 mcr p15, 0, r0, c7, c10, 4 @ drain WB 258 267 mov pc, lr 259 268 ··· 264 275 * - start - virtual start address 265 276 * - end - virtual end address 266 277 */ 278 + .align 5 267 279 ENTRY(feroceon_dma_flush_range) 268 280 bic r0, r0, #CACHE_DLINESIZE - 1 269 - 1: 270 - #ifndef CONFIG_CPU_DCACHE_WRITETHROUGH 271 - mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry 272 - #else 273 - mcr p15, 0, r0, c7, c10, 1 @ clean D entry 274 - #endif 281 + 1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry 275 282 add r0, r0, #CACHE_DLINESIZE 276 283 cmp r0, r1 277 284 blo 1b ··· 285 300 .long feroceon_dma_clean_range 286 301 .long feroceon_dma_flush_range 287 302 303 + .align 5 288 304 ENTRY(cpu_feroceon_dcache_clean_area) 289 - #ifndef CONFIG_CPU_DCACHE_WRITETHROUGH 290 305 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry 291 306 add r0, r0, #CACHE_DLINESIZE 292 307 subs r1, r1, #CACHE_DLINESIZE 293 308 bhi 1b 294 - #endif 295 309 mcr p15, 0, r0, c7, c10, 4 @ drain WB 296 310 mov pc, lr 297 311 ··· 307 323 ENTRY(cpu_feroceon_switch_mm) 308 324 #ifdef CONFIG_MMU 309 325 mov ip, #0 310 - #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH 311 - mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache 312 - #else 313 326 @ && 'Clean & Invalidate whole DCache' 314 327 1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate 315 328 bne 1b 316 - #endif 317 329 mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache 318 330 mcr p15, 0, ip, c7, c10, 4 @ drain WB 319 331 mcr p15, 0, r0, c2, c0, 0 @ load page table pointer ··· 342 362 tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? 343 363 movne r2, #0 344 364 345 - #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH 346 - eor r3, r2, #0x0a @ C & small page? 347 - tst r3, #0x0b 348 - biceq r2, r2, #4 349 - #endif 350 365 str r2, [r0] @ hardware version 351 366 mov r0, r0 352 - #ifndef CONFIG_CPU_DCACHE_WRITETHROUGH 353 367 mcr p15, 0, r0, c7, c10, 1 @ clean D entry 354 - #endif 355 368 mcr p15, 0, r0, c7, c10, 4 @ drain WB 356 369 #endif 357 370 mov pc, lr ··· 360 387 mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 361 388 #endif 362 389 363 - 364 - #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH 365 - mov r0, #4 @ disable write-back on caches explicitly 366 - mcr p15, 7, r0, c15, c0, 0 367 - #endif 368 - 369 390 adr r5, feroceon_crval 370 391 ldmia r5, {r5, r6} 371 392 mrc p15, 0, r0, c1, c0 @ get control register v4 372 393 bic r0, r0, r5 373 394 orr r0, r0, r6 374 - #ifdef CONFIG_CPU_CACHE_ROUND_ROBIN 375 - orr r0, r0, #0x4000 @ .1.. .... .... .... 376 - #endif 377 395 mov pc, lr 378 396 .size __feroceon_setup, . - __feroceon_setup 379 397 ··· 440 476 .long cpu_feroceon_name 441 477 .long feroceon_processor_functions 442 478 .long v4wbi_tlb_fns 443 - .long v4wb_user_fns 479 + .long feroceon_user_fns 444 480 .long feroceon_cache_fns 445 481 .size __feroceon_old_id_proc_info, . - __feroceon_old_id_proc_info 446 482 #endif ··· 466 502 .long cpu_feroceon_name 467 503 .long feroceon_processor_functions 468 504 .long v4wbi_tlb_fns 469 - .long v4wb_user_fns 505 + .long feroceon_user_fns 470 506 .long feroceon_cache_fns 471 507 .size __feroceon_proc_info, . - __feroceon_proc_info
+22 -22
arch/arm/oprofile/op_model_mpcore.c
··· 51 51 /* 52 52 * MPCore SCU event monitor support 53 53 */ 54 - #define SCU_EVENTMONITORS_VA_BASE __io_address(REALVIEW_MPCORE_SCU_BASE + 0x10) 54 + #define SCU_EVENTMONITORS_VA_BASE __io_address(REALVIEW_EB11MP_SCU_BASE + 0x10) 55 55 56 56 /* 57 57 * Bitmask of used SCU counters ··· 80 80 struct eventmonitor __iomem *emc = SCU_EVENTMONITORS_VA_BASE; 81 81 unsigned int cnt; 82 82 83 - cnt = irq - IRQ_PMU_SCU0; 83 + cnt = irq - IRQ_EB11MP_PMU_SCU0; 84 84 oprofile_add_sample(get_irq_regs(), SCU_COUNTER(cnt)); 85 85 scu_reset_counter(emc, cnt); 86 86 ··· 119 119 */ 120 120 for (i = 0; i < NUM_SCU_COUNTERS; i++) { 121 121 if (scu_em_used & (1 << i)) { 122 - ret = request_irq(IRQ_PMU_SCU0 + i, scu_em_interrupt, IRQF_DISABLED, "SCU PMU", NULL); 122 + ret = request_irq(IRQ_EB11MP_PMU_SCU0 + i, scu_em_interrupt, IRQF_DISABLED, "SCU PMU", NULL); 123 123 if (ret) { 124 124 printk(KERN_ERR "oprofile: unable to request IRQ%u for SCU Event Monitor\n", 125 - IRQ_PMU_SCU0 + i); 125 + IRQ_EB11MP_PMU_SCU0 + i); 126 126 goto err_free_scu; 127 127 } 128 128 } ··· 153 153 154 154 err_free_scu: 155 155 while (i--) 156 - free_irq(IRQ_PMU_SCU0 + i, NULL); 156 + free_irq(IRQ_EB11MP_PMU_SCU0 + i, NULL); 157 157 return ret; 158 158 } 159 159 ··· 175 175 for (i = 0; i < NUM_SCU_COUNTERS; i++) { 176 176 if (scu_em_used & (1 << i)) { 177 177 scu_reset_counter(emc, i); 178 - free_irq(IRQ_PMU_SCU0 + i, NULL); 178 + free_irq(IRQ_EB11MP_PMU_SCU0 + i, NULL); 179 179 } 180 180 } 181 181 } ··· 225 225 } 226 226 227 227 static int arm11_irqs[] = { 228 - [0] = IRQ_PMU_CPU0, 229 - [1] = IRQ_PMU_CPU1, 230 - [2] = IRQ_PMU_CPU2, 231 - [3] = IRQ_PMU_CPU3 228 + [0] = IRQ_EB11MP_PMU_CPU0, 229 + [1] = IRQ_EB11MP_PMU_CPU1, 230 + [2] = IRQ_EB11MP_PMU_CPU2, 231 + [3] = IRQ_EB11MP_PMU_CPU3 232 232 }; 233 233 234 234 static int em_start(void) ··· 273 273 /* 274 274 * Send SCU PMU interrupts to the "owner" CPU. 275 275 */ 276 - em_route_irq(IRQ_PMU_SCU0, 0); 277 - em_route_irq(IRQ_PMU_SCU1, 0); 278 - em_route_irq(IRQ_PMU_SCU2, 1); 279 - em_route_irq(IRQ_PMU_SCU3, 1); 280 - em_route_irq(IRQ_PMU_SCU4, 2); 281 - em_route_irq(IRQ_PMU_SCU5, 2); 282 - em_route_irq(IRQ_PMU_SCU6, 3); 283 - em_route_irq(IRQ_PMU_SCU7, 3); 276 + em_route_irq(IRQ_EB11MP_PMU_SCU0, 0); 277 + em_route_irq(IRQ_EB11MP_PMU_SCU1, 0); 278 + em_route_irq(IRQ_EB11MP_PMU_SCU2, 1); 279 + em_route_irq(IRQ_EB11MP_PMU_SCU3, 1); 280 + em_route_irq(IRQ_EB11MP_PMU_SCU4, 2); 281 + em_route_irq(IRQ_EB11MP_PMU_SCU5, 2); 282 + em_route_irq(IRQ_EB11MP_PMU_SCU6, 3); 283 + em_route_irq(IRQ_EB11MP_PMU_SCU7, 3); 284 284 285 285 /* 286 286 * Send CP15 PMU interrupts to the owner CPU. 287 287 */ 288 - em_route_irq(IRQ_PMU_CPU0, 0); 289 - em_route_irq(IRQ_PMU_CPU1, 1); 290 - em_route_irq(IRQ_PMU_CPU2, 2); 291 - em_route_irq(IRQ_PMU_CPU3, 3); 288 + em_route_irq(IRQ_EB11MP_PMU_CPU0, 0); 289 + em_route_irq(IRQ_EB11MP_PMU_CPU1, 1); 290 + em_route_irq(IRQ_EB11MP_PMU_CPU2, 2); 291 + em_route_irq(IRQ_EB11MP_PMU_CPU3, 3); 292 292 293 293 return 0; 294 294 }
+5 -4
drivers/mfd/htc-pasic3.c
··· 132 132 .disable = ds1wm_disable, 133 133 }; 134 134 135 - static int ds1wm_device_add(struct device *pasic3_dev, int bus_shift) 135 + static int ds1wm_device_add(struct platform_device *pasic3_pdev, int bus_shift) 136 136 { 137 + struct device *pasic3_dev = &pasic3_pdev->dev; 137 138 struct pasic3_data *asic = pasic3_dev->driver_data; 138 139 struct platform_device *pdev; 139 140 int ret; ··· 145 144 return -ENOMEM; 146 145 } 147 146 148 - ret = platform_device_add_resources(pdev, pdev->resource, 149 - pdev->num_resources); 147 + ret = platform_device_add_resources(pdev, pasic3_pdev->resource, 148 + pasic3_pdev->num_resources); 150 149 if (ret < 0) { 151 150 dev_dbg(pasic3_dev, "failed to add DS1WM resources\n"); 152 151 goto exit_pdev_put; ··· 208 207 return -ENOMEM; 209 208 } 210 209 211 - ret = ds1wm_device_add(dev, asic->bus_shift); 210 + ret = ds1wm_device_add(pdev, asic->bus_shift); 212 211 if (ret < 0) 213 212 dev_warn(dev, "failed to register DS1WM\n"); 214 213
+3 -1
drivers/mmc/host/mmci.c
··· 213 213 void __iomem *base = host->base; 214 214 char *ptr = buffer; 215 215 u32 status; 216 + int host_remain = host->size; 216 217 217 218 do { 218 - int count = host->size - (readl(base + MMCIFIFOCNT) << 2); 219 + int count = host_remain - (readl(base + MMCIFIFOCNT) << 2); 219 220 220 221 if (count > remain) 221 222 count = remain; ··· 228 227 229 228 ptr += count; 230 229 remain -= count; 230 + host_remain -= count; 231 231 232 232 if (remain == 0) 233 233 break;
+7 -3
drivers/net/arm/am79c961a.c
··· 693 693 * done by the ether bootp loader. 694 694 */ 695 695 dev->base_addr = res->start; 696 - dev->irq = platform_get_irq(pdev, 0); 696 + ret = platform_get_irq(pdev, 0); 697 + 698 + if (ret < 0) { 699 + ret = -ENODEV; 700 + goto nodev; 701 + } 702 + dev->irq = ret; 697 703 698 704 ret = -ENODEV; 699 - if (dev->irq < 0) 700 - goto nodev; 701 705 if (!request_region(dev->base_addr, 0x18, dev->name)) 702 706 goto nodev; 703 707
+5 -2
drivers/serial/s3c2410.c
··· 1022 1022 struct uart_port *port = &ourport->port; 1023 1023 struct s3c2410_uartcfg *cfg; 1024 1024 struct resource *res; 1025 + int ret; 1025 1026 1026 1027 dbg("s3c24xx_serial_init_port: port=%p, platdev=%p\n", port, platdev); 1027 1028 ··· 1065 1064 1066 1065 port->mapbase = res->start; 1067 1066 port->membase = S3C24XX_VA_UART + (res->start - S3C24XX_PA_UART); 1068 - port->irq = platform_get_irq(platdev, 0); 1069 - if (port->irq < 0) 1067 + ret = platform_get_irq(platdev, 0); 1068 + if (ret < 0) 1070 1069 port->irq = 0; 1070 + else 1071 + port->irq = ret; 1071 1072 1072 1073 ourport->clk = clk_get(&platdev->dev, "uart"); 1073 1074
+4 -5
include/asm-arm/arch-orion5x/io.h
··· 20 20 __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) 21 21 { 22 22 void __iomem *retval; 23 - 24 - if (mtype == MT_DEVICE && size && paddr >= ORION5X_REGS_PHYS_BASE && 25 - paddr + size <= ORION5X_REGS_PHYS_BASE + ORION5X_REGS_SIZE) { 26 - retval = (void __iomem *)ORION5X_REGS_VIRT_BASE + 27 - (paddr - ORION5X_REGS_PHYS_BASE); 23 + unsigned long offs = paddr - ORION5X_REGS_PHYS_BASE; 24 + if (mtype == MT_DEVICE && size && offs < ORION5X_REGS_SIZE && 25 + size <= ORION5X_REGS_SIZE && offs + size <= ORION5X_REGS_SIZE) { 26 + retval = (void __iomem *)ORION5X_REGS_VIRT_BASE + offs; 28 27 } else { 29 28 retval = __arm_ioremap(paddr, size, mtype); 30 29 }
+4 -1
include/asm-arm/arch-pxa/irqs.h
··· 239 239 /* ITE8152 irqs */ 240 240 /* add IT8152 IRQs beyond BOARD_END */ 241 241 #ifdef CONFIG_PCI_HOST_ITE8152 242 - #define IT8152_IRQ(x) (IRQ_GPIO(IRQ_BOARD_END) + 1 + (x)) 242 + #define IT8152_IRQ(x) (IRQ_BOARD_END + (x)) 243 243 244 244 /* IRQ-sources in 3 groups - local devices, LPC (serial), and external PCI */ 245 245 #define IT8152_LD_IRQ_COUNT 9 ··· 253 253 254 254 #define IT8152_LAST_IRQ IT8152_LD_IRQ(IT8152_LD_IRQ_COUNT - 1) 255 255 256 + #if NR_IRQS < (IT8152_LAST_IRQ+1) 256 257 #undef NR_IRQS 257 258 #define NR_IRQS (IT8152_LAST_IRQ+1) 258 259 #endif 260 + 261 + #endif /* CONFIG_PCI_HOST_ITE8152 */
-49
include/asm-arm/arch-pxa/magician.h
··· 13 13 #define _MAGICIAN_H_ 14 14 15 15 #include <asm/arch/irqs.h> 16 - #include <asm/arch/pxa2xx-gpio.h> 17 16 18 17 /* 19 18 * PXA GPIOs ··· 61 62 #define GPIO116_MAGICIAN_nCAM_EN 116 62 63 #define GPIO119_MAGICIAN_UNKNOWN 119 63 64 #define GPIO120_MAGICIAN_UNKNOWN 120 64 - 65 - /* 66 - * PXA GPIO alternate function mode & direction 67 - */ 68 - 69 - #define GPIO0_MAGICIAN_KEY_POWER_MD (0 | GPIO_IN) 70 - #define GPIO9_MAGICIAN_UNKNOWN_MD (9 | GPIO_IN) 71 - #define GPIO10_MAGICIAN_GSM_IRQ_MD (10 | GPIO_IN) 72 - #define GPIO11_MAGICIAN_GSM_OUT1_MD (11 | GPIO_OUT) 73 - #define GPIO13_MAGICIAN_CPLD_IRQ_MD (13 | GPIO_IN) 74 - #define GPIO18_MAGICIAN_UNKNOWN_MD (18 | GPIO_OUT) 75 - #define GPIO22_MAGICIAN_VIBRA_EN_MD (22 | GPIO_OUT) 76 - #define GPIO26_MAGICIAN_GSM_POWER_MD (26 | GPIO_OUT) 77 - #define GPIO27_MAGICIAN_USBC_PUEN_MD (27 | GPIO_OUT) 78 - #define GPIO30_MAGICIAN_nCHARGE_EN_MD (30 | GPIO_OUT) 79 - #define GPIO37_MAGICIAN_KEY_HANGUP_MD (37 | GPIO_OUT) 80 - #define GPIO38_MAGICIAN_KEY_CONTACTS_MD (38 | GPIO_OUT) 81 - #define GPIO40_MAGICIAN_GSM_OUT2_MD (40 | GPIO_OUT) 82 - #define GPIO48_MAGICIAN_UNKNOWN_MD (48 | GPIO_OUT) 83 - #define GPIO56_MAGICIAN_UNKNOWN_MD (56 | GPIO_OUT) 84 - #define GPIO57_MAGICIAN_CAM_RESET_MD (57 | GPIO_OUT) 85 - #define GPIO75_MAGICIAN_SAMSUNG_POWER_MD (75 | GPIO_OUT) 86 - #define GPIO83_MAGICIAN_nIR_EN_MD (83 | GPIO_OUT) 87 - #define GPIO86_MAGICIAN_GSM_RESET_MD (86 | GPIO_OUT) 88 - #define GPIO87_MAGICIAN_GSM_SELECT_MD (87 | GPIO_OUT) 89 - #define GPIO90_MAGICIAN_KEY_CALENDAR_MD (90 | GPIO_OUT) 90 - #define GPIO91_MAGICIAN_KEY_CAMERA_MD (91 | GPIO_OUT) 91 - #define GPIO93_MAGICIAN_KEY_UP_MD (93 | GPIO_IN) 92 - #define GPIO94_MAGICIAN_KEY_DOWN_MD (94 | GPIO_IN) 93 - #define GPIO95_MAGICIAN_KEY_LEFT_MD (95 | GPIO_IN) 94 - #define GPIO96_MAGICIAN_KEY_RIGHT_MD (96 | GPIO_IN) 95 - #define GPIO97_MAGICIAN_KEY_ENTER_MD (97 | GPIO_IN) 96 - #define GPIO98_MAGICIAN_KEY_RECORD_MD (98 | GPIO_IN) 97 - #define GPIO99_MAGICIAN_HEADPHONE_IN_MD (99 | GPIO_IN) 98 - #define GPIO100_MAGICIAN_KEY_VOL_UP_MD (100 | GPIO_IN) 99 - #define GPIO101_MAGICIAN_KEY_VOL_DOWN_MD (101 | GPIO_IN) 100 - #define GPIO102_MAGICIAN_KEY_PHONE_MD (102 | GPIO_IN) 101 - #define GPIO103_MAGICIAN_LED_KP_MD (103 | GPIO_OUT) 102 - #define GPIO104_MAGICIAN_LCD_POWER_1_MD (104 | GPIO_OUT) 103 - #define GPIO105_MAGICIAN_LCD_POWER_2_MD (105 | GPIO_OUT) 104 - #define GPIO106_MAGICIAN_LCD_POWER_3_MD (106 | GPIO_OUT) 105 - #define GPIO107_MAGICIAN_DS1WM_IRQ_MD (107 | GPIO_IN) 106 - #define GPIO108_MAGICIAN_GSM_READY_MD (108 | GPIO_IN) 107 - #define GPIO114_MAGICIAN_UNKNOWN_MD (114 | GPIO_OUT) 108 - #define GPIO115_MAGICIAN_nPEN_IRQ_MD (115 | GPIO_IN) 109 - #define GPIO116_MAGICIAN_nCAM_EN_MD (116 | GPIO_OUT) 110 - #define GPIO119_MAGICIAN_UNKNOWN_MD (119 | GPIO_OUT) 111 - #define GPIO120_MAGICIAN_UNKNOWN_MD (120 | GPIO_OUT) 112 65 113 66 /* 114 67 * CPLD IRQs
+2
include/asm-arm/arch-pxa/system.h
··· 22 22 23 23 static inline void arch_reset(char mode) 24 24 { 25 + RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR; 26 + 25 27 if (mode == 's') { 26 28 /* Jump into ROM at address 0 */ 27 29 cpu_reset(0);
+8
include/asm-arm/page.h
··· 71 71 # endif 72 72 #endif 73 73 74 + #ifdef CONFIG_CPU_COPY_FEROCEON 75 + # ifdef _USER 76 + # define MULTI_USER 1 77 + # else 78 + # define _USER feroceon 79 + # endif 80 + #endif 81 + 74 82 #ifdef CONFIG_CPU_SA1100 75 83 # ifdef _USER 76 84 # define MULTI_USER 1