diff options
Diffstat (limited to 'arch/arm')
144 files changed, 1746 insertions, 2498 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ca2ab3d28639..6344543974f6 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -7,7 +7,7 @@ config ARM | |||
| 7 | select HAVE_MEMBLOCK | 7 | select HAVE_MEMBLOCK |
| 8 | select RTC_LIB | 8 | select RTC_LIB |
| 9 | select SYS_SUPPORTS_APM_EMULATION | 9 | select SYS_SUPPORTS_APM_EMULATION |
| 10 | select GENERIC_ATOMIC64 if (!CPU_32v6K) | 10 | select GENERIC_ATOMIC64 if (!CPU_32v6K || !AEABI) |
| 11 | select HAVE_OPROFILE if (HAVE_PERF_EVENTS) | 11 | select HAVE_OPROFILE if (HAVE_PERF_EVENTS) |
| 12 | select HAVE_ARCH_KGDB | 12 | select HAVE_ARCH_KGDB |
| 13 | select HAVE_KPROBES if (!XIP_KERNEL) | 13 | select HAVE_KPROBES if (!XIP_KERNEL) |
| @@ -652,7 +652,7 @@ config ARCH_S3C2410 | |||
| 652 | select ARCH_HAS_CPUFREQ | 652 | select ARCH_HAS_CPUFREQ |
| 653 | select HAVE_CLK | 653 | select HAVE_CLK |
| 654 | select ARCH_USES_GETTIMEOFFSET | 654 | select ARCH_USES_GETTIMEOFFSET |
| 655 | select HAVE_S3C2410_I2C | 655 | select HAVE_S3C2410_I2C if I2C |
| 656 | help | 656 | help |
| 657 | Samsung S3C2410X CPU based systems, such as the Simtec Electronics | 657 | Samsung S3C2410X CPU based systems, such as the Simtec Electronics |
| 658 | BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or | 658 | BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or |
| @@ -682,8 +682,8 @@ config ARCH_S3C64XX | |||
| 682 | select S3C_DEV_NAND | 682 | select S3C_DEV_NAND |
| 683 | select USB_ARCH_HAS_OHCI | 683 | select USB_ARCH_HAS_OHCI |
| 684 | select SAMSUNG_GPIOLIB_4BIT | 684 | select SAMSUNG_GPIOLIB_4BIT |
| 685 | select HAVE_S3C2410_I2C | 685 | select HAVE_S3C2410_I2C if I2C |
| 686 | select HAVE_S3C2410_WATCHDOG | 686 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 687 | help | 687 | help |
| 688 | Samsung S3C64XX series based systems | 688 | Samsung S3C64XX series based systems |
| 689 | 689 | ||
| @@ -692,10 +692,10 @@ config ARCH_S5P64X0 | |||
| 692 | select CPU_V6 | 692 | select CPU_V6 |
| 693 | select GENERIC_GPIO | 693 | select GENERIC_GPIO |
| 694 | select HAVE_CLK | 694 | select HAVE_CLK |
| 695 | select HAVE_S3C2410_WATCHDOG | 695 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 696 | select ARCH_USES_GETTIMEOFFSET | 696 | select ARCH_USES_GETTIMEOFFSET |
| 697 | select HAVE_S3C2410_I2C | 697 | select HAVE_S3C2410_I2C if I2C |
| 698 | select HAVE_S3C_RTC | 698 | select HAVE_S3C_RTC if RTC_CLASS |
| 699 | help | 699 | help |
| 700 | Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440, | 700 | Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440, |
| 701 | SMDK6450. | 701 | SMDK6450. |
| @@ -706,7 +706,7 @@ config ARCH_S5P6442 | |||
| 706 | select GENERIC_GPIO | 706 | select GENERIC_GPIO |
| 707 | select HAVE_CLK | 707 | select HAVE_CLK |
| 708 | select ARCH_USES_GETTIMEOFFSET | 708 | select ARCH_USES_GETTIMEOFFSET |
| 709 | select HAVE_S3C2410_WATCHDOG | 709 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 710 | help | 710 | help |
| 711 | Samsung S5P6442 CPU based systems | 711 | Samsung S5P6442 CPU based systems |
| 712 | 712 | ||
| @@ -717,9 +717,9 @@ config ARCH_S5PC100 | |||
| 717 | select CPU_V7 | 717 | select CPU_V7 |
| 718 | select ARM_L1_CACHE_SHIFT_6 | 718 | select ARM_L1_CACHE_SHIFT_6 |
| 719 | select ARCH_USES_GETTIMEOFFSET | 719 | select ARCH_USES_GETTIMEOFFSET |
| 720 | select HAVE_S3C2410_I2C | 720 | select HAVE_S3C2410_I2C if I2C |
| 721 | select HAVE_S3C_RTC | 721 | select HAVE_S3C_RTC if RTC_CLASS |
| 722 | select HAVE_S3C2410_WATCHDOG | 722 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 723 | help | 723 | help |
| 724 | Samsung S5PC100 series based systems | 724 | Samsung S5PC100 series based systems |
| 725 | 725 | ||
| @@ -732,9 +732,9 @@ config ARCH_S5PV210 | |||
| 732 | select ARM_L1_CACHE_SHIFT_6 | 732 | select ARM_L1_CACHE_SHIFT_6 |
| 733 | select ARCH_HAS_CPUFREQ | 733 | select ARCH_HAS_CPUFREQ |
| 734 | select ARCH_USES_GETTIMEOFFSET | 734 | select ARCH_USES_GETTIMEOFFSET |
| 735 | select HAVE_S3C2410_I2C | 735 | select HAVE_S3C2410_I2C if I2C |
| 736 | select HAVE_S3C_RTC | 736 | select HAVE_S3C_RTC if RTC_CLASS |
| 737 | select HAVE_S3C2410_WATCHDOG | 737 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 738 | help | 738 | help |
| 739 | Samsung S5PV210/S5PC110 series based systems | 739 | Samsung S5PV210/S5PC110 series based systems |
| 740 | 740 | ||
| @@ -745,9 +745,9 @@ config ARCH_S5PV310 | |||
| 745 | select GENERIC_GPIO | 745 | select GENERIC_GPIO |
| 746 | select HAVE_CLK | 746 | select HAVE_CLK |
| 747 | select GENERIC_CLOCKEVENTS | 747 | select GENERIC_CLOCKEVENTS |
| 748 | select HAVE_S3C_RTC | 748 | select HAVE_S3C_RTC if RTC_CLASS |
| 749 | select HAVE_S3C2410_I2C | 749 | select HAVE_S3C2410_I2C if I2C |
| 750 | select HAVE_S3C2410_WATCHDOG | 750 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 751 | help | 751 | help |
| 752 | Samsung S5PV310 series based systems | 752 | Samsung S5PV310 series based systems |
| 753 | 753 | ||
| @@ -1240,7 +1240,7 @@ config SMP | |||
| 1240 | config SMP_ON_UP | 1240 | config SMP_ON_UP |
| 1241 | bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)" | 1241 | bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)" |
| 1242 | depends on EXPERIMENTAL | 1242 | depends on EXPERIMENTAL |
| 1243 | depends on SMP && !XIP && !THUMB2_KERNEL | 1243 | depends on SMP && !XIP |
| 1244 | default y | 1244 | default y |
| 1245 | help | 1245 | help |
| 1246 | SMP kernels contain instructions which fail on non-SMP processors. | 1246 | SMP kernels contain instructions which fail on non-SMP processors. |
| @@ -1259,6 +1259,7 @@ config HAVE_ARM_SCU | |||
| 1259 | config HAVE_ARM_TWD | 1259 | config HAVE_ARM_TWD |
| 1260 | bool | 1260 | bool |
| 1261 | depends on SMP | 1261 | depends on SMP |
| 1262 | select TICK_ONESHOT | ||
| 1262 | help | 1263 | help |
| 1263 | This options enables support for the ARM timer and watchdog unit | 1264 | This options enables support for the ARM timer and watchdog unit |
| 1264 | 1265 | ||
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 6825c34646d4..9be21ba648cd 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
| @@ -1084,6 +1084,6 @@ memdump: mov r12, r0 | |||
| 1084 | reloc_end: | 1084 | reloc_end: |
| 1085 | 1085 | ||
| 1086 | .align | 1086 | .align |
| 1087 | .section ".stack", "w" | 1087 | .section ".stack", "aw", %nobits |
| 1088 | user_stack: .space 4096 | 1088 | user_stack: .space 4096 |
| 1089 | user_stack_end: | 1089 | user_stack_end: |
diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in index d08168941bd6..366a924019ac 100644 --- a/arch/arm/boot/compressed/vmlinux.lds.in +++ b/arch/arm/boot/compressed/vmlinux.lds.in | |||
| @@ -57,7 +57,7 @@ SECTIONS | |||
| 57 | .bss : { *(.bss) } | 57 | .bss : { *(.bss) } |
| 58 | _end = .; | 58 | _end = .; |
| 59 | 59 | ||
| 60 | .stack (NOLOAD) : { *(.stack) } | 60 | .stack : { *(.stack) } |
| 61 | 61 | ||
| 62 | .stab 0 : { *(.stab) } | 62 | .stab 0 : { *(.stab) } |
| 63 | .stabstr 0 : { *(.stabstr) } | 63 | .stabstr 0 : { *(.stabstr) } |
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c index ada6359160eb..772f95f1aecd 100644 --- a/arch/arm/common/gic.c +++ b/arch/arm/common/gic.c | |||
| @@ -251,15 +251,16 @@ void __init gic_dist_init(unsigned int gic_nr, void __iomem *base, | |||
| 251 | writel(cpumask, base + GIC_DIST_TARGET + i * 4 / 4); | 251 | writel(cpumask, base + GIC_DIST_TARGET + i * 4 / 4); |
| 252 | 252 | ||
| 253 | /* | 253 | /* |
| 254 | * Set priority on all interrupts. | 254 | * Set priority on all global interrupts. |
| 255 | */ | 255 | */ |
| 256 | for (i = 0; i < max_irq; i += 4) | 256 | for (i = 32; i < max_irq; i += 4) |
| 257 | writel(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4); | 257 | writel(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4); |
| 258 | 258 | ||
| 259 | /* | 259 | /* |
| 260 | * Disable all interrupts. | 260 | * Disable all interrupts. Leave the PPI and SGIs alone |
| 261 | * as these enables are banked registers. | ||
| 261 | */ | 262 | */ |
| 262 | for (i = 0; i < max_irq; i += 32) | 263 | for (i = 32; i < max_irq; i += 32) |
| 263 | writel(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32); | 264 | writel(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32); |
| 264 | 265 | ||
| 265 | /* | 266 | /* |
| @@ -277,11 +278,30 @@ void __init gic_dist_init(unsigned int gic_nr, void __iomem *base, | |||
| 277 | 278 | ||
| 278 | void __cpuinit gic_cpu_init(unsigned int gic_nr, void __iomem *base) | 279 | void __cpuinit gic_cpu_init(unsigned int gic_nr, void __iomem *base) |
| 279 | { | 280 | { |
| 281 | void __iomem *dist_base; | ||
| 282 | int i; | ||
| 283 | |||
| 280 | if (gic_nr >= MAX_GIC_NR) | 284 | if (gic_nr >= MAX_GIC_NR) |
| 281 | BUG(); | 285 | BUG(); |
| 282 | 286 | ||
| 287 | dist_base = gic_data[gic_nr].dist_base; | ||
| 288 | BUG_ON(!dist_base); | ||
| 289 | |||
| 283 | gic_data[gic_nr].cpu_base = base; | 290 | gic_data[gic_nr].cpu_base = base; |
| 284 | 291 | ||
| 292 | /* | ||
| 293 | * Deal with the banked PPI and SGI interrupts - disable all | ||
| 294 | * PPI interrupts, ensure all SGI interrupts are enabled. | ||
| 295 | */ | ||
| 296 | writel(0xffff0000, dist_base + GIC_DIST_ENABLE_CLEAR); | ||
| 297 | writel(0x0000ffff, dist_base + GIC_DIST_ENABLE_SET); | ||
| 298 | |||
| 299 | /* | ||
| 300 | * Set priority on PPI and SGI interrupts | ||
| 301 | */ | ||
| 302 | for (i = 0; i < 32; i += 4) | ||
| 303 | writel(0xa0a0a0a0, dist_base + GIC_DIST_PRI + i * 4 / 4); | ||
| 304 | |||
| 285 | writel(0xf0, base + GIC_CPU_PRIMASK); | 305 | writel(0xf0, base + GIC_CPU_PRIMASK); |
| 286 | writel(1, base + GIC_CPU_CTRL); | 306 | writel(1, base + GIC_CPU_CTRL); |
| 287 | } | 307 | } |
diff --git a/arch/arm/configs/at91rm9200_defconfig b/arch/arm/configs/at91rm9200_defconfig new file mode 100644 index 000000000000..38cb7c985426 --- /dev/null +++ b/arch/arm/configs/at91rm9200_defconfig | |||
| @@ -0,0 +1,341 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 3 | # CONFIG_SWAP is not set | ||
| 4 | CONFIG_SYSVIPC=y | ||
| 5 | CONFIG_IKCONFIG=y | ||
| 6 | CONFIG_IKCONFIG_PROC=y | ||
| 7 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 8 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 9 | CONFIG_BLK_DEV_INITRD=y | ||
| 10 | CONFIG_MODULES=y | ||
| 11 | CONFIG_MODULE_FORCE_LOAD=y | ||
| 12 | CONFIG_MODULE_UNLOAD=y | ||
| 13 | CONFIG_MODVERSIONS=y | ||
| 14 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
| 15 | # CONFIG_BLK_DEV_BSG is not set | ||
| 16 | # CONFIG_IOSCHED_CFQ is not set | ||
| 17 | CONFIG_ARCH_AT91=y | ||
| 18 | CONFIG_MACH_ONEARM=y | ||
| 19 | CONFIG_ARCH_AT91RM9200DK=y | ||
| 20 | CONFIG_MACH_AT91RM9200EK=y | ||
| 21 | CONFIG_MACH_CSB337=y | ||
| 22 | CONFIG_MACH_CSB637=y | ||
| 23 | CONFIG_MACH_CARMEVA=y | ||
| 24 | CONFIG_MACH_ATEB9200=y | ||
| 25 | CONFIG_MACH_KB9200=y | ||
| 26 | CONFIG_MACH_PICOTUX2XX=y | ||
| 27 | CONFIG_MACH_KAFA=y | ||
| 28 | CONFIG_MACH_ECBAT91=y | ||
| 29 | CONFIG_MACH_YL9200=y | ||
| 30 | CONFIG_MACH_CPUAT91=y | ||
| 31 | CONFIG_MACH_ECO920=y | ||
| 32 | CONFIG_MTD_AT91_DATAFLASH_CARD=y | ||
| 33 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 34 | CONFIG_AT91_TIMER_HZ=100 | ||
| 35 | # CONFIG_ARM_THUMB is not set | ||
| 36 | CONFIG_PCCARD=y | ||
| 37 | CONFIG_AT91_CF=y | ||
| 38 | CONFIG_NO_HZ=y | ||
| 39 | CONFIG_HIGH_RES_TIMERS=y | ||
| 40 | CONFIG_PREEMPT=y | ||
| 41 | CONFIG_AEABI=y | ||
| 42 | CONFIG_LEDS=y | ||
| 43 | CONFIG_LEDS_CPU=y | ||
| 44 | CONFIG_ZBOOT_ROM_TEXT=0x10000000 | ||
| 45 | CONFIG_ZBOOT_ROM_BSS=0x20040000 | ||
| 46 | CONFIG_KEXEC=y | ||
| 47 | CONFIG_FPE_NWFPE=y | ||
| 48 | CONFIG_BINFMT_MISC=y | ||
| 49 | CONFIG_NET=y | ||
| 50 | CONFIG_PACKET=y | ||
| 51 | CONFIG_UNIX=y | ||
| 52 | CONFIG_XFRM_USER=m | ||
| 53 | CONFIG_INET=y | ||
| 54 | CONFIG_IP_MULTICAST=y | ||
| 55 | CONFIG_IP_PNP=y | ||
| 56 | CONFIG_IP_PNP_DHCP=y | ||
| 57 | CONFIG_IP_PNP_BOOTP=y | ||
| 58 | CONFIG_NET_IPIP=m | ||
| 59 | CONFIG_NET_IPGRE=m | ||
| 60 | CONFIG_INET_AH=m | ||
| 61 | CONFIG_INET_ESP=m | ||
| 62 | CONFIG_INET_IPCOMP=m | ||
| 63 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | ||
| 64 | CONFIG_INET_XFRM_MODE_TUNNEL=m | ||
| 65 | CONFIG_INET_XFRM_MODE_BEET=m | ||
| 66 | CONFIG_IPV6_PRIVACY=y | ||
| 67 | CONFIG_IPV6_ROUTER_PREF=y | ||
| 68 | CONFIG_IPV6_ROUTE_INFO=y | ||
| 69 | CONFIG_INET6_AH=m | ||
| 70 | CONFIG_INET6_ESP=m | ||
| 71 | CONFIG_INET6_IPCOMP=m | ||
| 72 | CONFIG_IPV6_MIP6=m | ||
| 73 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | ||
| 74 | CONFIG_IPV6_TUNNEL=m | ||
| 75 | CONFIG_BRIDGE=m | ||
| 76 | CONFIG_VLAN_8021Q=m | ||
| 77 | CONFIG_BT=m | ||
| 78 | CONFIG_BT_L2CAP=m | ||
| 79 | CONFIG_BT_SCO=m | ||
| 80 | CONFIG_BT_RFCOMM=m | ||
| 81 | CONFIG_BT_RFCOMM_TTY=y | ||
| 82 | CONFIG_BT_BNEP=m | ||
| 83 | CONFIG_BT_BNEP_MC_FILTER=y | ||
| 84 | CONFIG_BT_BNEP_PROTO_FILTER=y | ||
| 85 | CONFIG_BT_HIDP=m | ||
| 86 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 87 | CONFIG_MTD=y | ||
| 88 | CONFIG_MTD_CONCAT=y | ||
| 89 | CONFIG_MTD_PARTITIONS=y | ||
| 90 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 91 | CONFIG_MTD_AFS_PARTS=y | ||
| 92 | CONFIG_MTD_CHAR=y | ||
| 93 | CONFIG_MTD_BLOCK=y | ||
| 94 | CONFIG_MTD_CFI=y | ||
| 95 | CONFIG_MTD_JEDECPROBE=y | ||
| 96 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 97 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 98 | CONFIG_MTD_COMPLEX_MAPPINGS=y | ||
| 99 | CONFIG_MTD_PHYSMAP=y | ||
| 100 | CONFIG_MTD_PLATRAM=y | ||
| 101 | CONFIG_MTD_DATAFLASH=y | ||
| 102 | CONFIG_MTD_NAND=y | ||
| 103 | CONFIG_MTD_NAND_ATMEL=y | ||
| 104 | CONFIG_MTD_NAND_PLATFORM=y | ||
| 105 | CONFIG_MTD_UBI=y | ||
| 106 | CONFIG_MTD_UBI_GLUEBI=y | ||
| 107 | CONFIG_BLK_DEV_LOOP=y | ||
| 108 | CONFIG_BLK_DEV_NBD=y | ||
| 109 | CONFIG_BLK_DEV_RAM=y | ||
| 110 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
| 111 | CONFIG_ATMEL_TCLIB=y | ||
| 112 | CONFIG_EEPROM_LEGACY=m | ||
| 113 | CONFIG_SCSI=y | ||
| 114 | CONFIG_BLK_DEV_SD=y | ||
| 115 | CONFIG_BLK_DEV_SR=m | ||
| 116 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
| 117 | CONFIG_CHR_DEV_SG=m | ||
| 118 | CONFIG_SCSI_MULTI_LUN=y | ||
| 119 | # CONFIG_SCSI_LOWLEVEL is not set | ||
| 120 | CONFIG_NETDEVICES=y | ||
| 121 | CONFIG_TUN=m | ||
| 122 | CONFIG_PHYLIB=y | ||
| 123 | CONFIG_DAVICOM_PHY=y | ||
| 124 | CONFIG_SMSC_PHY=y | ||
| 125 | CONFIG_MICREL_PHY=y | ||
| 126 | CONFIG_NET_ETHERNET=y | ||
| 127 | CONFIG_ARM_AT91_ETHER=y | ||
| 128 | # CONFIG_NETDEV_1000 is not set | ||
| 129 | # CONFIG_NETDEV_10000 is not set | ||
| 130 | CONFIG_USB_CATC=m | ||
| 131 | CONFIG_USB_KAWETH=m | ||
| 132 | CONFIG_USB_PEGASUS=m | ||
| 133 | CONFIG_USB_RTL8150=m | ||
| 134 | CONFIG_USB_USBNET=m | ||
| 135 | CONFIG_USB_NET_DM9601=m | ||
| 136 | CONFIG_USB_NET_GL620A=m | ||
| 137 | CONFIG_USB_NET_PLUSB=m | ||
| 138 | CONFIG_USB_NET_RNDIS_HOST=m | ||
| 139 | CONFIG_USB_ALI_M5632=y | ||
| 140 | CONFIG_USB_AN2720=y | ||
| 141 | CONFIG_USB_EPSON2888=y | ||
| 142 | CONFIG_PPP=y | ||
| 143 | CONFIG_PPP_MULTILINK=y | ||
| 144 | CONFIG_PPP_FILTER=y | ||
| 145 | CONFIG_PPP_ASYNC=y | ||
| 146 | CONFIG_PPP_DEFLATE=y | ||
| 147 | CONFIG_PPP_BSDCOMP=y | ||
| 148 | CONFIG_PPP_MPPE=m | ||
| 149 | CONFIG_PPPOE=m | ||
| 150 | CONFIG_SLIP=m | ||
| 151 | CONFIG_SLIP_COMPRESSED=y | ||
| 152 | CONFIG_SLIP_SMART=y | ||
| 153 | CONFIG_SLIP_MODE_SLIP6=y | ||
| 154 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 155 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 | ||
| 156 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 | ||
| 157 | CONFIG_INPUT_EVDEV=y | ||
| 158 | CONFIG_KEYBOARD_GPIO=y | ||
| 159 | # CONFIG_INPUT_MOUSE is not set | ||
| 160 | CONFIG_INPUT_TOUCHSCREEN=y | ||
| 161 | CONFIG_SERIAL_ATMEL=y | ||
| 162 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 163 | CONFIG_LEGACY_PTY_COUNT=32 | ||
| 164 | CONFIG_HW_RANDOM=y | ||
| 165 | CONFIG_I2C=y | ||
| 166 | CONFIG_I2C_CHARDEV=y | ||
| 167 | CONFIG_I2C_GPIO=y | ||
| 168 | CONFIG_SPI=y | ||
| 169 | CONFIG_SPI_ATMEL=y | ||
| 170 | CONFIG_SPI_BITBANG=y | ||
| 171 | CONFIG_GPIO_SYSFS=y | ||
| 172 | CONFIG_HWMON=m | ||
| 173 | CONFIG_SENSORS_ADM1021=m | ||
| 174 | CONFIG_SENSORS_ADM1025=m | ||
| 175 | CONFIG_SENSORS_ADM1026=m | ||
| 176 | CONFIG_SENSORS_ADM1029=m | ||
| 177 | CONFIG_SENSORS_ADM1031=m | ||
| 178 | CONFIG_SENSORS_ADM9240=m | ||
| 179 | CONFIG_SENSORS_DS1621=m | ||
| 180 | CONFIG_SENSORS_GL518SM=m | ||
| 181 | CONFIG_SENSORS_GL520SM=m | ||
| 182 | CONFIG_SENSORS_IT87=m | ||
| 183 | CONFIG_SENSORS_LM63=m | ||
| 184 | CONFIG_SENSORS_LM73=m | ||
| 185 | CONFIG_SENSORS_LM75=m | ||
| 186 | CONFIG_SENSORS_LM77=m | ||
| 187 | CONFIG_SENSORS_LM78=m | ||
| 188 | CONFIG_SENSORS_LM80=m | ||
| 189 | CONFIG_SENSORS_LM83=m | ||
| 190 | CONFIG_SENSORS_LM85=m | ||
| 191 | CONFIG_SENSORS_LM87=m | ||
| 192 | CONFIG_SENSORS_LM90=m | ||
| 193 | CONFIG_SENSORS_LM92=m | ||
| 194 | CONFIG_SENSORS_MAX1619=m | ||
| 195 | CONFIG_SENSORS_PCF8591=m | ||
| 196 | CONFIG_SENSORS_SMSC47B397=m | ||
| 197 | CONFIG_SENSORS_W83781D=m | ||
| 198 | CONFIG_SENSORS_W83791D=m | ||
| 199 | CONFIG_SENSORS_W83792D=m | ||
| 200 | CONFIG_SENSORS_W83793=m | ||
| 201 | CONFIG_SENSORS_W83L785TS=m | ||
| 202 | CONFIG_WATCHDOG=y | ||
| 203 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 204 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 205 | CONFIG_FB=y | ||
| 206 | CONFIG_FB_MODE_HELPERS=y | ||
| 207 | CONFIG_FB_TILEBLITTING=y | ||
| 208 | CONFIG_FB_S1D13XXX=y | ||
| 209 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
| 210 | CONFIG_LCD_CLASS_DEVICE=y | ||
| 211 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
| 212 | # CONFIG_BACKLIGHT_GENERIC is not set | ||
| 213 | CONFIG_DISPLAY_SUPPORT=y | ||
| 214 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 215 | CONFIG_FONTS=y | ||
| 216 | CONFIG_FONT_MINI_4x6=y | ||
| 217 | CONFIG_LOGO=y | ||
| 218 | # CONFIG_LOGO_LINUX_MONO is not set | ||
| 219 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
| 220 | CONFIG_USB=y | ||
| 221 | CONFIG_USB_DEVICEFS=y | ||
| 222 | # CONFIG_USB_DEVICE_CLASS is not set | ||
| 223 | CONFIG_USB_MON=y | ||
| 224 | CONFIG_USB_OHCI_HCD=y | ||
| 225 | CONFIG_USB_ACM=m | ||
| 226 | CONFIG_USB_PRINTER=m | ||
| 227 | CONFIG_USB_STORAGE=y | ||
| 228 | CONFIG_USB_SERIAL=y | ||
| 229 | CONFIG_USB_SERIAL_CONSOLE=y | ||
| 230 | CONFIG_USB_SERIAL_GENERIC=y | ||
| 231 | CONFIG_USB_SERIAL_FTDI_SIO=y | ||
| 232 | CONFIG_USB_SERIAL_KEYSPAN=y | ||
| 233 | CONFIG_USB_SERIAL_KEYSPAN_MPR=y | ||
| 234 | CONFIG_USB_SERIAL_KEYSPAN_USA28=y | ||
| 235 | CONFIG_USB_SERIAL_KEYSPAN_USA28X=y | ||
| 236 | CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y | ||
| 237 | CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y | ||
| 238 | CONFIG_USB_SERIAL_KEYSPAN_USA19=y | ||
| 239 | CONFIG_USB_SERIAL_KEYSPAN_USA18X=y | ||
| 240 | CONFIG_USB_SERIAL_KEYSPAN_USA19W=y | ||
| 241 | CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y | ||
| 242 | CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y | ||
| 243 | CONFIG_USB_SERIAL_KEYSPAN_USA49W=y | ||
| 244 | CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y | ||
| 245 | CONFIG_USB_SERIAL_MCT_U232=y | ||
| 246 | CONFIG_USB_SERIAL_PL2303=y | ||
| 247 | CONFIG_USB_GADGET=y | ||
| 248 | CONFIG_USB_ETH=m | ||
| 249 | CONFIG_USB_MASS_STORAGE=m | ||
| 250 | CONFIG_MMC=y | ||
| 251 | CONFIG_MMC_AT91=y | ||
| 252 | CONFIG_NEW_LEDS=y | ||
| 253 | CONFIG_LEDS_CLASS=y | ||
| 254 | CONFIG_LEDS_GPIO=y | ||
| 255 | CONFIG_LEDS_TRIGGERS=y | ||
| 256 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
| 257 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
| 258 | CONFIG_LEDS_TRIGGER_GPIO=y | ||
| 259 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
| 260 | CONFIG_RTC_CLASS=y | ||
| 261 | # CONFIG_RTC_HCTOSYS is not set | ||
| 262 | CONFIG_RTC_DRV_DS1307=y | ||
| 263 | CONFIG_RTC_DRV_PCF8563=y | ||
| 264 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 265 | CONFIG_EXT2_FS=y | ||
| 266 | CONFIG_EXT2_FS_XATTR=y | ||
| 267 | CONFIG_EXT3_FS=y | ||
| 268 | # CONFIG_EXT3_FS_XATTR is not set | ||
| 269 | CONFIG_REISERFS_FS=y | ||
| 270 | CONFIG_AUTOFS4_FS=y | ||
| 271 | CONFIG_ISO9660_FS=y | ||
| 272 | CONFIG_JOLIET=y | ||
| 273 | CONFIG_ZISOFS=y | ||
| 274 | CONFIG_UDF_FS=y | ||
| 275 | CONFIG_MSDOS_FS=y | ||
| 276 | CONFIG_VFAT_FS=y | ||
| 277 | CONFIG_NTFS_FS=m | ||
| 278 | CONFIG_TMPFS=y | ||
| 279 | CONFIG_CONFIGFS_FS=y | ||
| 280 | CONFIG_JFFS2_FS=y | ||
| 281 | CONFIG_JFFS2_SUMMARY=y | ||
| 282 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y | ||
| 283 | CONFIG_JFFS2_LZO=y | ||
| 284 | CONFIG_JFFS2_RUBIN=y | ||
| 285 | CONFIG_CRAMFS=y | ||
| 286 | CONFIG_MINIX_FS=y | ||
| 287 | CONFIG_NFS_FS=y | ||
| 288 | CONFIG_NFS_V3=y | ||
| 289 | CONFIG_NFS_V3_ACL=y | ||
| 290 | CONFIG_NFS_V4=y | ||
| 291 | CONFIG_ROOT_NFS=y | ||
| 292 | CONFIG_NFSD=y | ||
| 293 | CONFIG_SMB_FS=m | ||
| 294 | CONFIG_CIFS=m | ||
| 295 | CONFIG_PARTITION_ADVANCED=y | ||
| 296 | CONFIG_MAC_PARTITION=y | ||
| 297 | CONFIG_NLS_CODEPAGE_437=y | ||
| 298 | CONFIG_NLS_CODEPAGE_737=m | ||
| 299 | CONFIG_NLS_CODEPAGE_775=m | ||
| 300 | CONFIG_NLS_CODEPAGE_850=m | ||
| 301 | CONFIG_NLS_CODEPAGE_852=m | ||
| 302 | CONFIG_NLS_CODEPAGE_855=m | ||
| 303 | CONFIG_NLS_CODEPAGE_857=m | ||
| 304 | CONFIG_NLS_CODEPAGE_860=m | ||
| 305 | CONFIG_NLS_CODEPAGE_861=m | ||
| 306 | CONFIG_NLS_CODEPAGE_862=m | ||
| 307 | CONFIG_NLS_CODEPAGE_863=m | ||
| 308 | CONFIG_NLS_CODEPAGE_864=m | ||
| 309 | CONFIG_NLS_CODEPAGE_865=m | ||
| 310 | CONFIG_NLS_CODEPAGE_866=m | ||
| 311 | CONFIG_NLS_CODEPAGE_869=m | ||
| 312 | CONFIG_NLS_CODEPAGE_936=m | ||
| 313 | CONFIG_NLS_CODEPAGE_950=m | ||
| 314 | CONFIG_NLS_CODEPAGE_932=m | ||
| 315 | CONFIG_NLS_CODEPAGE_949=m | ||
| 316 | CONFIG_NLS_CODEPAGE_874=m | ||
| 317 | CONFIG_NLS_ISO8859_8=m | ||
| 318 | CONFIG_NLS_CODEPAGE_1250=m | ||
| 319 | CONFIG_NLS_CODEPAGE_1251=m | ||
| 320 | CONFIG_NLS_ASCII=m | ||
| 321 | CONFIG_NLS_ISO8859_1=y | ||
| 322 | CONFIG_NLS_ISO8859_2=m | ||
| 323 | CONFIG_NLS_ISO8859_3=m | ||
| 324 | CONFIG_NLS_ISO8859_4=m | ||
| 325 | CONFIG_NLS_ISO8859_5=m | ||
| 326 | CONFIG_NLS_ISO8859_6=m | ||
| 327 | CONFIG_NLS_ISO8859_7=m | ||
| 328 | CONFIG_NLS_ISO8859_9=m | ||
| 329 | CONFIG_NLS_ISO8859_13=m | ||
| 330 | CONFIG_NLS_ISO8859_14=m | ||
| 331 | CONFIG_NLS_ISO8859_15=m | ||
| 332 | CONFIG_NLS_KOI8_R=m | ||
| 333 | CONFIG_NLS_KOI8_U=m | ||
| 334 | CONFIG_NLS_UTF8=y | ||
| 335 | CONFIG_MAGIC_SYSRQ=y | ||
| 336 | CONFIG_DEBUG_FS=y | ||
| 337 | CONFIG_DEBUG_KERNEL=y | ||
| 338 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
| 339 | # CONFIG_FTRACE is not set | ||
| 340 | CONFIG_CRYPTO_PCBC=y | ||
| 341 | CONFIG_CRYPTO_SHA1=y | ||
diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig deleted file mode 100644 index 4438e64f3bfb..000000000000 --- a/arch/arm/configs/at91rm9200dk_defconfig +++ /dev/null | |||
| @@ -1,72 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_SWAP is not set | ||
| 3 | CONFIG_SYSVIPC=y | ||
| 4 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 5 | CONFIG_BLK_DEV_INITRD=y | ||
| 6 | CONFIG_MODULES=y | ||
| 7 | CONFIG_MODULE_UNLOAD=y | ||
| 8 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 9 | # CONFIG_IOSCHED_CFQ is not set | ||
| 10 | CONFIG_ARCH_AT91=y | ||
| 11 | CONFIG_ARCH_AT91RM9200DK=y | ||
| 12 | CONFIG_MACH_ECO920=y | ||
| 13 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 14 | # CONFIG_ARM_THUMB is not set | ||
| 15 | CONFIG_PCCARD=y | ||
| 16 | CONFIG_AT91_CF=y | ||
| 17 | CONFIG_LEDS=y | ||
| 18 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 19 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 20 | CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw" | ||
| 21 | CONFIG_FPE_NWFPE=y | ||
| 22 | CONFIG_NET=y | ||
| 23 | CONFIG_PACKET=y | ||
| 24 | CONFIG_UNIX=y | ||
| 25 | CONFIG_INET=y | ||
| 26 | CONFIG_IP_PNP=y | ||
| 27 | CONFIG_IP_PNP_BOOTP=y | ||
| 28 | # CONFIG_IPV6 is not set | ||
| 29 | CONFIG_MTD=y | ||
| 30 | CONFIG_MTD_PARTITIONS=y | ||
| 31 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 32 | CONFIG_MTD_CHAR=y | ||
| 33 | CONFIG_MTD_BLOCK=y | ||
| 34 | CONFIG_MTD_CFI=y | ||
| 35 | CONFIG_MTD_JEDECPROBE=y | ||
| 36 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 37 | CONFIG_MTD_PHYSMAP=y | ||
| 38 | CONFIG_BLK_DEV_RAM=y | ||
| 39 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
| 40 | CONFIG_NETDEVICES=y | ||
| 41 | CONFIG_NET_ETHERNET=y | ||
| 42 | CONFIG_ARM_AT91_ETHER=y | ||
| 43 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 44 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 45 | # CONFIG_INPUT_MOUSE is not set | ||
| 46 | # CONFIG_SERIO is not set | ||
| 47 | CONFIG_SERIAL_ATMEL=y | ||
| 48 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 49 | CONFIG_I2C=y | ||
| 50 | CONFIG_I2C_CHARDEV=y | ||
| 51 | CONFIG_I2C_GPIO=y | ||
| 52 | CONFIG_WATCHDOG=y | ||
| 53 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 54 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 55 | # CONFIG_VGA_CONSOLE is not set | ||
| 56 | # CONFIG_USB_HID is not set | ||
| 57 | CONFIG_USB=y | ||
| 58 | CONFIG_USB_DEBUG=y | ||
| 59 | CONFIG_USB_DEVICEFS=y | ||
| 60 | CONFIG_USB_MON=y | ||
| 61 | CONFIG_USB_OHCI_HCD=y | ||
| 62 | CONFIG_USB_GADGET=y | ||
| 63 | CONFIG_MMC=y | ||
| 64 | CONFIG_RTC_CLASS=y | ||
| 65 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 66 | CONFIG_EXT2_FS=y | ||
| 67 | CONFIG_INOTIFY=y | ||
| 68 | CONFIG_TMPFS=y | ||
| 69 | CONFIG_CRAMFS=y | ||
| 70 | CONFIG_DEBUG_KERNEL=y | ||
| 71 | CONFIG_DEBUG_USER=y | ||
| 72 | CONFIG_DEBUG_LL=y | ||
diff --git a/arch/arm/configs/at91rm9200ek_defconfig b/arch/arm/configs/at91rm9200ek_defconfig deleted file mode 100644 index ccd517c64bc7..000000000000 --- a/arch/arm/configs/at91rm9200ek_defconfig +++ /dev/null | |||
| @@ -1,73 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 3 | # CONFIG_SWAP is not set | ||
| 4 | CONFIG_SYSVIPC=y | ||
| 5 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 6 | CONFIG_BLK_DEV_INITRD=y | ||
| 7 | CONFIG_MODULES=y | ||
| 8 | CONFIG_MODULE_UNLOAD=y | ||
| 9 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 10 | # CONFIG_IOSCHED_CFQ is not set | ||
| 11 | CONFIG_ARCH_AT91=y | ||
| 12 | CONFIG_MACH_AT91RM9200EK=y | ||
| 13 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 14 | # CONFIG_ARM_THUMB is not set | ||
| 15 | CONFIG_LEDS=y | ||
| 16 | CONFIG_LEDS_CPU=y | ||
| 17 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 18 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 19 | CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw" | ||
| 20 | CONFIG_FPE_NWFPE=y | ||
| 21 | CONFIG_NET=y | ||
| 22 | CONFIG_PACKET=y | ||
| 23 | CONFIG_UNIX=y | ||
| 24 | CONFIG_INET=y | ||
| 25 | CONFIG_IP_PNP=y | ||
| 26 | CONFIG_IP_PNP_BOOTP=y | ||
| 27 | # CONFIG_IPV6 is not set | ||
| 28 | CONFIG_MTD=y | ||
| 29 | CONFIG_MTD_PARTITIONS=y | ||
| 30 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 31 | CONFIG_MTD_CHAR=y | ||
| 32 | CONFIG_MTD_BLOCK=y | ||
| 33 | CONFIG_MTD_CFI=y | ||
| 34 | CONFIG_MTD_JEDECPROBE=y | ||
| 35 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 36 | CONFIG_MTD_PHYSMAP=y | ||
| 37 | CONFIG_BLK_DEV_RAM=y | ||
| 38 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
| 39 | CONFIG_NETDEVICES=y | ||
| 40 | CONFIG_NET_ETHERNET=y | ||
| 41 | CONFIG_ARM_AT91_ETHER=y | ||
| 42 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 43 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 44 | # CONFIG_INPUT_MOUSE is not set | ||
| 45 | # CONFIG_SERIO is not set | ||
| 46 | CONFIG_SERIAL_ATMEL=y | ||
| 47 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 48 | CONFIG_I2C=y | ||
| 49 | CONFIG_I2C_CHARDEV=y | ||
| 50 | CONFIG_I2C_GPIO=y | ||
| 51 | CONFIG_WATCHDOG=y | ||
| 52 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 53 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 54 | CONFIG_FB=y | ||
| 55 | CONFIG_FB_S1D13XXX=y | ||
| 56 | # CONFIG_VGA_CONSOLE is not set | ||
| 57 | # CONFIG_USB_HID is not set | ||
| 58 | CONFIG_USB=y | ||
| 59 | CONFIG_USB_DEBUG=y | ||
| 60 | CONFIG_USB_DEVICEFS=y | ||
| 61 | CONFIG_USB_MON=y | ||
| 62 | CONFIG_USB_OHCI_HCD=y | ||
| 63 | CONFIG_USB_GADGET=y | ||
| 64 | CONFIG_MMC=y | ||
| 65 | CONFIG_RTC_CLASS=y | ||
| 66 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 67 | CONFIG_EXT2_FS=y | ||
| 68 | CONFIG_INOTIFY=y | ||
| 69 | CONFIG_TMPFS=y | ||
| 70 | CONFIG_CRAMFS=y | ||
| 71 | CONFIG_DEBUG_KERNEL=y | ||
| 72 | CONFIG_DEBUG_USER=y | ||
| 73 | CONFIG_DEBUG_LL=y | ||
diff --git a/arch/arm/configs/ateb9200_defconfig b/arch/arm/configs/ateb9200_defconfig deleted file mode 100644 index 1b0e9a1689bb..000000000000 --- a/arch/arm/configs/ateb9200_defconfig +++ /dev/null | |||
| @@ -1,131 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | CONFIG_SYSVIPC=y | ||
| 3 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 4 | CONFIG_EMBEDDED=y | ||
| 5 | CONFIG_SLAB=y | ||
| 6 | CONFIG_PROFILING=y | ||
| 7 | CONFIG_OPROFILE=m | ||
| 8 | CONFIG_MODULES=y | ||
| 9 | CONFIG_MODULE_UNLOAD=y | ||
| 10 | CONFIG_ARCH_AT91=y | ||
| 11 | CONFIG_MACH_ATEB9200=y | ||
| 12 | CONFIG_PCCARD=m | ||
| 13 | CONFIG_AT91_CF=m | ||
| 14 | CONFIG_PREEMPT=y | ||
| 15 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 16 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 17 | CONFIG_FPE_NWFPE=y | ||
| 18 | CONFIG_PM=y | ||
| 19 | CONFIG_NET=y | ||
| 20 | CONFIG_PACKET=y | ||
| 21 | CONFIG_UNIX=y | ||
| 22 | CONFIG_NET_KEY=y | ||
| 23 | CONFIG_INET=y | ||
| 24 | # CONFIG_IPV6 is not set | ||
| 25 | CONFIG_BRIDGE=m | ||
| 26 | CONFIG_VLAN_8021Q=m | ||
| 27 | CONFIG_MTD=y | ||
| 28 | CONFIG_MTD_PARTITIONS=y | ||
| 29 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 30 | CONFIG_MTD_CHAR=y | ||
| 31 | CONFIG_MTD_BLOCK_RO=y | ||
| 32 | CONFIG_BLK_DEV_LOOP=m | ||
| 33 | CONFIG_BLK_DEV_NBD=m | ||
| 34 | CONFIG_SCSI=m | ||
| 35 | CONFIG_BLK_DEV_SD=m | ||
| 36 | CONFIG_BLK_DEV_SR=m | ||
| 37 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
| 38 | CONFIG_CHR_DEV_SG=m | ||
| 39 | CONFIG_SCSI_MULTI_LUN=y | ||
| 40 | CONFIG_NETDEVICES=y | ||
| 41 | CONFIG_DUMMY=m | ||
| 42 | CONFIG_TUN=m | ||
| 43 | CONFIG_PHYLIB=y | ||
| 44 | CONFIG_DAVICOM_PHY=y | ||
| 45 | CONFIG_NET_ETHERNET=y | ||
| 46 | CONFIG_ARM_AT91_ETHER=y | ||
| 47 | CONFIG_USB_USBNET=y | ||
| 48 | CONFIG_USB_NET_GL620A=y | ||
| 49 | CONFIG_USB_NET_PLUSB=y | ||
| 50 | CONFIG_USB_NET_RNDIS_HOST=y | ||
| 51 | CONFIG_USB_ALI_M5632=y | ||
| 52 | CONFIG_USB_AN2720=y | ||
| 53 | CONFIG_USB_EPSON2888=y | ||
| 54 | CONFIG_PPP=m | ||
| 55 | CONFIG_PPP_ASYNC=m | ||
| 56 | CONFIG_PPP_SYNC_TTY=m | ||
| 57 | CONFIG_PPP_DEFLATE=m | ||
| 58 | CONFIG_PPP_BSDCOMP=m | ||
| 59 | CONFIG_PPPOE=m | ||
| 60 | CONFIG_SERIAL_ATMEL=y | ||
| 61 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 62 | CONFIG_I2C=m | ||
| 63 | CONFIG_I2C_CHARDEV=m | ||
| 64 | CONFIG_I2C_GPIO=m | ||
| 65 | # CONFIG_VGA_CONSOLE is not set | ||
| 66 | CONFIG_SOUND=y | ||
| 67 | CONFIG_USB_HID=m | ||
| 68 | CONFIG_HID_PID=y | ||
| 69 | CONFIG_USB_HIDDEV=y | ||
| 70 | CONFIG_USB=y | ||
| 71 | CONFIG_USB_DEVICEFS=y | ||
| 72 | CONFIG_USB_MON=y | ||
| 73 | CONFIG_USB_OHCI_HCD=y | ||
| 74 | CONFIG_USB_ACM=m | ||
| 75 | CONFIG_USB_PRINTER=m | ||
| 76 | CONFIG_USB_STORAGE=m | ||
| 77 | CONFIG_USB_STORAGE_DATAFAB=m | ||
| 78 | CONFIG_USB_STORAGE_FREECOM=m | ||
| 79 | CONFIG_USB_STORAGE_USBAT=m | ||
| 80 | CONFIG_USB_STORAGE_SDDR09=m | ||
| 81 | CONFIG_USB_STORAGE_SDDR55=m | ||
| 82 | CONFIG_USB_STORAGE_JUMPSHOT=m | ||
| 83 | CONFIG_USB_SERIAL=m | ||
| 84 | CONFIG_USB_SERIAL_GENERIC=y | ||
| 85 | CONFIG_USB_SERIAL_FTDI_SIO=m | ||
| 86 | CONFIG_USB_SERIAL_PL2303=m | ||
| 87 | CONFIG_USB_GADGET=m | ||
| 88 | CONFIG_USB_ETH=m | ||
| 89 | CONFIG_USB_GADGETFS=m | ||
| 90 | CONFIG_USB_FILE_STORAGE=m | ||
| 91 | CONFIG_USB_G_SERIAL=m | ||
| 92 | CONFIG_MMC=m | ||
| 93 | CONFIG_MMC_DEBUG=y | ||
| 94 | CONFIG_RTC_CLASS=y | ||
| 95 | # CONFIG_RTC_HCTOSYS is not set | ||
| 96 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 97 | CONFIG_EXT2_FS=m | ||
| 98 | CONFIG_EXT3_FS=m | ||
| 99 | CONFIG_REISERFS_FS=m | ||
| 100 | CONFIG_INOTIFY=y | ||
| 101 | CONFIG_ISO9660_FS=m | ||
| 102 | CONFIG_JOLIET=y | ||
| 103 | CONFIG_ZISOFS=y | ||
| 104 | CONFIG_UDF_FS=m | ||
| 105 | CONFIG_MSDOS_FS=m | ||
| 106 | CONFIG_VFAT_FS=m | ||
| 107 | CONFIG_NTFS_FS=m | ||
| 108 | CONFIG_NTFS_RW=y | ||
| 109 | CONFIG_TMPFS=y | ||
| 110 | CONFIG_CRAMFS=y | ||
| 111 | CONFIG_NFS_FS=m | ||
| 112 | CONFIG_NFS_V3=y | ||
| 113 | CONFIG_NFS_V3_ACL=y | ||
| 114 | CONFIG_NFS_V4=y | ||
| 115 | CONFIG_NFSD=m | ||
| 116 | CONFIG_NFSD_V4=y | ||
| 117 | CONFIG_PARTITION_ADVANCED=y | ||
| 118 | CONFIG_MAC_PARTITION=y | ||
| 119 | CONFIG_BSD_DISKLABEL=y | ||
| 120 | CONFIG_MINIX_SUBPARTITION=y | ||
| 121 | CONFIG_SOLARIS_X86_PARTITION=y | ||
| 122 | CONFIG_UNIXWARE_DISKLABEL=y | ||
| 123 | CONFIG_NLS_CODEPAGE_932=m | ||
| 124 | CONFIG_NLS_ASCII=m | ||
| 125 | CONFIG_NLS_ISO8859_15=m | ||
| 126 | CONFIG_NLS_UTF8=m | ||
| 127 | CONFIG_CRYPTO_MD5=y | ||
| 128 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
| 129 | CONFIG_CRYPTO_ARC4=m | ||
| 130 | CONFIG_CRC16=m | ||
| 131 | CONFIG_LIBCRC32C=m | ||
diff --git a/arch/arm/configs/carmeva_defconfig b/arch/arm/configs/carmeva_defconfig deleted file mode 100644 index ac64dbd8a49c..000000000000 --- a/arch/arm/configs/carmeva_defconfig +++ /dev/null | |||
| @@ -1,47 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 3 | CONFIG_BLK_DEV_INITRD=y | ||
| 4 | CONFIG_EMBEDDED=y | ||
| 5 | # CONFIG_HOTPLUG is not set | ||
| 6 | CONFIG_MODULES=y | ||
| 7 | CONFIG_MODULE_UNLOAD=y | ||
| 8 | CONFIG_MODULE_FORCE_UNLOAD=y | ||
| 9 | CONFIG_ARCH_AT91=y | ||
| 10 | CONFIG_MACH_CARMEVA=y | ||
| 11 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 12 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 13 | CONFIG_FPE_NWFPE=y | ||
| 14 | CONFIG_NET=y | ||
| 15 | CONFIG_UNIX=y | ||
| 16 | CONFIG_INET=y | ||
| 17 | CONFIG_IP_MULTICAST=y | ||
| 18 | CONFIG_IP_PNP=y | ||
| 19 | # CONFIG_IPV6 is not set | ||
| 20 | CONFIG_MTD=y | ||
| 21 | CONFIG_MTD_PARTITIONS=y | ||
| 22 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 23 | CONFIG_MTD_CHAR=y | ||
| 24 | CONFIG_MTD_BLOCK=y | ||
| 25 | CONFIG_BLK_DEV_RAM=y | ||
| 26 | CONFIG_NETDEVICES=y | ||
| 27 | CONFIG_NET_ETHERNET=y | ||
| 28 | CONFIG_ARM_AT91_ETHER=y | ||
| 29 | # CONFIG_INPUT_MOUSEDEV is not set | ||
| 30 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 31 | # CONFIG_INPUT_MOUSE is not set | ||
| 32 | CONFIG_SERIO=m | ||
| 33 | CONFIG_SERIAL_ATMEL=y | ||
| 34 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 35 | # CONFIG_VGA_CONSOLE is not set | ||
| 36 | CONFIG_MMC=m | ||
| 37 | CONFIG_MMC_DEBUG=y | ||
| 38 | CONFIG_EXT2_FS=y | ||
| 39 | CONFIG_EXT2_FS_XATTR=y | ||
| 40 | # CONFIG_DNOTIFY is not set | ||
| 41 | CONFIG_JFFS2_FS=y | ||
| 42 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y | ||
| 43 | CONFIG_NFS_FS=y | ||
| 44 | CONFIG_NFS_V3=y | ||
| 45 | CONFIG_NFS_V4=y | ||
| 46 | CONFIG_ROOT_NFS=y | ||
| 47 | CONFIG_NFSD=y | ||
diff --git a/arch/arm/configs/cpuat91_defconfig b/arch/arm/configs/cpuat91_defconfig deleted file mode 100644 index 022aeb55b676..000000000000 --- a/arch/arm/configs/cpuat91_defconfig +++ /dev/null | |||
| @@ -1,112 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 3 | # CONFIG_SWAP is not set | ||
| 4 | CONFIG_SYSVIPC=y | ||
| 5 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 6 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 7 | CONFIG_MODULES=y | ||
| 8 | CONFIG_MODULE_UNLOAD=y | ||
| 9 | # CONFIG_BLK_DEV_BSG is not set | ||
| 10 | # CONFIG_IOSCHED_CFQ is not set | ||
| 11 | CONFIG_ARCH_AT91=y | ||
| 12 | CONFIG_MACH_CPUAT91=y | ||
| 13 | CONFIG_AT91_TIMER_HZ=100 | ||
| 14 | # CONFIG_ARM_THUMB is not set | ||
| 15 | CONFIG_PREEMPT=y | ||
| 16 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 17 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 18 | CONFIG_NET=y | ||
| 19 | CONFIG_PACKET=y | ||
| 20 | CONFIG_UNIX=y | ||
| 21 | CONFIG_INET=y | ||
| 22 | CONFIG_IP_PNP=y | ||
| 23 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 24 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 25 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 26 | # CONFIG_IPV6 is not set | ||
| 27 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 28 | CONFIG_MTD=y | ||
| 29 | CONFIG_MTD_PARTITIONS=y | ||
| 30 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 31 | CONFIG_MTD_CHAR=y | ||
| 32 | CONFIG_MTD_BLOCK=y | ||
| 33 | CONFIG_MTD_CFI=y | ||
| 34 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 35 | CONFIG_MTD_PHYSMAP=y | ||
| 36 | CONFIG_MTD_PLATRAM=y | ||
| 37 | CONFIG_BLK_DEV_LOOP=y | ||
| 38 | CONFIG_BLK_DEV_NBD=y | ||
| 39 | CONFIG_BLK_DEV_RAM=y | ||
| 40 | # CONFIG_MISC_DEVICES is not set | ||
| 41 | CONFIG_SCSI=y | ||
| 42 | CONFIG_BLK_DEV_SD=y | ||
| 43 | CONFIG_SCSI_MULTI_LUN=y | ||
| 44 | # CONFIG_SCSI_LOWLEVEL is not set | ||
| 45 | CONFIG_NETDEVICES=y | ||
| 46 | CONFIG_PHYLIB=y | ||
| 47 | CONFIG_NET_ETHERNET=y | ||
| 48 | CONFIG_ARM_AT91_ETHER=y | ||
| 49 | # CONFIG_NETDEV_1000 is not set | ||
| 50 | # CONFIG_NETDEV_10000 is not set | ||
| 51 | CONFIG_PPP=y | ||
| 52 | CONFIG_PPP_ASYNC=y | ||
| 53 | CONFIG_PPP_DEFLATE=y | ||
| 54 | CONFIG_PPP_BSDCOMP=y | ||
| 55 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 56 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 57 | # CONFIG_INPUT_MOUSE is not set | ||
| 58 | # CONFIG_SERIO is not set | ||
| 59 | CONFIG_SERIAL_ATMEL=y | ||
| 60 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 61 | CONFIG_LEGACY_PTY_COUNT=32 | ||
| 62 | # CONFIG_HW_RANDOM is not set | ||
| 63 | CONFIG_I2C=y | ||
| 64 | CONFIG_I2C_CHARDEV=y | ||
| 65 | CONFIG_I2C_GPIO=y | ||
| 66 | CONFIG_GPIO_SYSFS=y | ||
| 67 | # CONFIG_HWMON is not set | ||
| 68 | CONFIG_WATCHDOG=y | ||
| 69 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 70 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 71 | # CONFIG_VGA_CONSOLE is not set | ||
| 72 | # CONFIG_HID_SUPPORT is not set | ||
| 73 | CONFIG_USB=y | ||
| 74 | # CONFIG_USB_DEVICE_CLASS is not set | ||
| 75 | CONFIG_USB_OHCI_HCD=y | ||
| 76 | CONFIG_USB_STORAGE=y | ||
| 77 | CONFIG_USB_GADGET=y | ||
| 78 | CONFIG_USB_ETH=m | ||
| 79 | CONFIG_MMC=y | ||
| 80 | CONFIG_MMC_AT91=m | ||
| 81 | CONFIG_NEW_LEDS=y | ||
| 82 | CONFIG_LEDS_CLASS=y | ||
| 83 | CONFIG_LEDS_GPIO=y | ||
| 84 | CONFIG_LEDS_TRIGGERS=y | ||
| 85 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
| 86 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
| 87 | CONFIG_LEDS_TRIGGER_GPIO=y | ||
| 88 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
| 89 | CONFIG_RTC_CLASS=y | ||
| 90 | # CONFIG_RTC_HCTOSYS is not set | ||
| 91 | CONFIG_RTC_DRV_DS1307=y | ||
| 92 | CONFIG_RTC_DRV_PCF8563=y | ||
| 93 | CONFIG_EXT2_FS=y | ||
| 94 | CONFIG_EXT3_FS=y | ||
| 95 | # CONFIG_EXT3_FS_XATTR is not set | ||
| 96 | CONFIG_INOTIFY=y | ||
| 97 | CONFIG_AUTOFS4_FS=y | ||
| 98 | CONFIG_MSDOS_FS=y | ||
| 99 | CONFIG_VFAT_FS=y | ||
| 100 | CONFIG_TMPFS=y | ||
| 101 | CONFIG_JFFS2_FS=y | ||
| 102 | CONFIG_JFFS2_SUMMARY=y | ||
| 103 | CONFIG_CRAMFS=y | ||
| 104 | CONFIG_MINIX_FS=y | ||
| 105 | CONFIG_NFS_FS=y | ||
| 106 | CONFIG_NFS_V3=y | ||
| 107 | CONFIG_ROOT_NFS=y | ||
| 108 | CONFIG_PARTITION_ADVANCED=y | ||
| 109 | CONFIG_NLS_CODEPAGE_437=y | ||
| 110 | CONFIG_NLS_ISO8859_1=y | ||
| 111 | CONFIG_NLS_UTF8=y | ||
| 112 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
diff --git a/arch/arm/configs/csb337_defconfig b/arch/arm/configs/csb337_defconfig deleted file mode 100644 index a24c448840c4..000000000000 --- a/arch/arm/configs/csb337_defconfig +++ /dev/null | |||
| @@ -1,104 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_SWAP is not set | ||
| 3 | CONFIG_SYSVIPC=y | ||
| 4 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 5 | CONFIG_BLK_DEV_INITRD=y | ||
| 6 | CONFIG_MODULES=y | ||
| 7 | CONFIG_MODULE_UNLOAD=y | ||
| 8 | # CONFIG_BLK_DEV_BSG is not set | ||
| 9 | CONFIG_ARCH_AT91=y | ||
| 10 | CONFIG_MACH_CSB337=y | ||
| 11 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 12 | # CONFIG_ARM_THUMB is not set | ||
| 13 | CONFIG_PCCARD=y | ||
| 14 | CONFIG_AT91_CF=y | ||
| 15 | CONFIG_LEDS=y | ||
| 16 | CONFIG_LEDS_CPU=y | ||
| 17 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 18 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 19 | CONFIG_CMDLINE="mem=32M console=ttyS0,38400 initrd=0x20410000,3145728 root=/dev/ram0 rw" | ||
| 20 | CONFIG_FPE_NWFPE=y | ||
| 21 | CONFIG_NET=y | ||
| 22 | CONFIG_PACKET=y | ||
| 23 | CONFIG_UNIX=y | ||
| 24 | CONFIG_INET=y | ||
| 25 | CONFIG_IP_PNP=y | ||
| 26 | CONFIG_IP_PNP_DHCP=y | ||
| 27 | CONFIG_IP_PNP_BOOTP=y | ||
| 28 | # CONFIG_INET_LRO is not set | ||
| 29 | # CONFIG_IPV6 is not set | ||
| 30 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 31 | CONFIG_MTD=y | ||
| 32 | CONFIG_MTD_PARTITIONS=y | ||
| 33 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 34 | CONFIG_MTD_CHAR=y | ||
| 35 | CONFIG_MTD_BLOCK=y | ||
| 36 | CONFIG_MTD_CFI=y | ||
| 37 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 38 | CONFIG_MTD_PHYSMAP=y | ||
| 39 | CONFIG_BLK_DEV_LOOP=y | ||
| 40 | CONFIG_BLK_DEV_RAM=y | ||
| 41 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
| 42 | CONFIG_ATMEL_SSC=y | ||
| 43 | CONFIG_SCSI=y | ||
| 44 | CONFIG_NETDEVICES=y | ||
| 45 | CONFIG_NET_ETHERNET=y | ||
| 46 | CONFIG_ARM_AT91_ETHER=y | ||
| 47 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 48 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 49 | # CONFIG_INPUT_MOUSE is not set | ||
| 50 | # CONFIG_SERIO is not set | ||
| 51 | CONFIG_SERIAL_ATMEL=y | ||
| 52 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 53 | # CONFIG_HW_RANDOM is not set | ||
| 54 | CONFIG_I2C=y | ||
| 55 | CONFIG_I2C_CHARDEV=y | ||
| 56 | CONFIG_I2C_GPIO=y | ||
| 57 | # CONFIG_HWMON is not set | ||
| 58 | CONFIG_WATCHDOG=y | ||
| 59 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 60 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 61 | # CONFIG_VGA_CONSOLE is not set | ||
| 62 | # CONFIG_USB_HID is not set | ||
| 63 | CONFIG_USB=y | ||
| 64 | CONFIG_USB_DEBUG=y | ||
| 65 | CONFIG_USB_DEVICEFS=y | ||
| 66 | CONFIG_USB_MON=y | ||
| 67 | CONFIG_USB_OHCI_HCD=y | ||
| 68 | CONFIG_USB_STORAGE=y | ||
| 69 | CONFIG_USB_SERIAL=y | ||
| 70 | CONFIG_USB_SERIAL_CONSOLE=y | ||
| 71 | CONFIG_USB_SERIAL_GENERIC=y | ||
| 72 | CONFIG_USB_SERIAL_FTDI_SIO=y | ||
| 73 | CONFIG_USB_SERIAL_KEYSPAN=y | ||
| 74 | CONFIG_USB_SERIAL_KEYSPAN_MPR=y | ||
| 75 | CONFIG_USB_SERIAL_KEYSPAN_USA28=y | ||
| 76 | CONFIG_USB_SERIAL_KEYSPAN_USA28X=y | ||
| 77 | CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y | ||
| 78 | CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y | ||
| 79 | CONFIG_USB_SERIAL_KEYSPAN_USA19=y | ||
| 80 | CONFIG_USB_SERIAL_KEYSPAN_USA18X=y | ||
| 81 | CONFIG_USB_SERIAL_KEYSPAN_USA19W=y | ||
| 82 | CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y | ||
| 83 | CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y | ||
| 84 | CONFIG_USB_SERIAL_KEYSPAN_USA49W=y | ||
| 85 | CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y | ||
| 86 | CONFIG_USB_SERIAL_MCT_U232=y | ||
| 87 | CONFIG_USB_GADGET=y | ||
| 88 | CONFIG_MMC=y | ||
| 89 | CONFIG_RTC_CLASS=y | ||
| 90 | CONFIG_RTC_HCTOSYS_DEVICE="rtc1" | ||
| 91 | # CONFIG_RTC_INTF_SYSFS is not set | ||
| 92 | CONFIG_RTC_DRV_DS1307=y | ||
| 93 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 94 | CONFIG_EXT2_FS=y | ||
| 95 | CONFIG_INOTIFY=y | ||
| 96 | CONFIG_TMPFS=y | ||
| 97 | CONFIG_CRAMFS=y | ||
| 98 | CONFIG_NFS_FS=y | ||
| 99 | CONFIG_NFS_V3=y | ||
| 100 | CONFIG_NFS_V4=y | ||
| 101 | CONFIG_ROOT_NFS=y | ||
| 102 | CONFIG_DEBUG_KERNEL=y | ||
| 103 | CONFIG_DEBUG_USER=y | ||
| 104 | CONFIG_DEBUG_LL=y | ||
diff --git a/arch/arm/configs/csb637_defconfig b/arch/arm/configs/csb637_defconfig deleted file mode 100644 index 98552adac5fb..000000000000 --- a/arch/arm/configs/csb637_defconfig +++ /dev/null | |||
| @@ -1,98 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_SWAP is not set | ||
| 3 | CONFIG_SYSVIPC=y | ||
| 4 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 5 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 6 | CONFIG_BLK_DEV_INITRD=y | ||
| 7 | CONFIG_MODULES=y | ||
| 8 | CONFIG_MODULE_UNLOAD=y | ||
| 9 | # CONFIG_BLK_DEV_BSG is not set | ||
| 10 | CONFIG_ARCH_AT91=y | ||
| 11 | CONFIG_MACH_CSB637=y | ||
| 12 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 13 | # CONFIG_ARM_THUMB is not set | ||
| 14 | CONFIG_PCCARD=y | ||
| 15 | CONFIG_AT91_CF=y | ||
| 16 | CONFIG_LEDS=y | ||
| 17 | CONFIG_LEDS_CPU=y | ||
| 18 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 19 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 20 | CONFIG_CMDLINE="mem=32M console=ttyS0,38400 initrd=0x20410000,3145728 root=/dev/ram0 rw" | ||
| 21 | CONFIG_FPE_NWFPE=y | ||
| 22 | CONFIG_NET=y | ||
| 23 | CONFIG_PACKET=y | ||
| 24 | CONFIG_UNIX=y | ||
| 25 | CONFIG_INET=y | ||
| 26 | CONFIG_IP_PNP=y | ||
| 27 | CONFIG_IP_PNP_DHCP=y | ||
| 28 | CONFIG_IP_PNP_BOOTP=y | ||
| 29 | # CONFIG_INET_LRO is not set | ||
| 30 | # CONFIG_IPV6 is not set | ||
| 31 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 32 | CONFIG_MTD=y | ||
| 33 | CONFIG_MTD_PARTITIONS=y | ||
| 34 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 35 | CONFIG_MTD_CHAR=y | ||
| 36 | CONFIG_MTD_BLOCK=y | ||
| 37 | CONFIG_MTD_CFI=y | ||
| 38 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 39 | CONFIG_MTD_PHYSMAP=y | ||
| 40 | CONFIG_BLK_DEV_LOOP=y | ||
| 41 | CONFIG_BLK_DEV_RAM=y | ||
| 42 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
| 43 | CONFIG_SCSI=y | ||
| 44 | CONFIG_NETDEVICES=y | ||
| 45 | CONFIG_NET_ETHERNET=y | ||
| 46 | CONFIG_ARM_AT91_ETHER=y | ||
| 47 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 48 | # CONFIG_INPUT_MOUSE is not set | ||
| 49 | # CONFIG_SERIO is not set | ||
| 50 | CONFIG_SERIAL_ATMEL=y | ||
| 51 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 52 | CONFIG_I2C=y | ||
| 53 | CONFIG_I2C_CHARDEV=y | ||
| 54 | CONFIG_WATCHDOG=y | ||
| 55 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 56 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 57 | # CONFIG_VGA_CONSOLE is not set | ||
| 58 | # CONFIG_USB_HID is not set | ||
| 59 | CONFIG_USB=y | ||
| 60 | CONFIG_USB_DEBUG=y | ||
| 61 | CONFIG_USB_DEVICEFS=y | ||
| 62 | CONFIG_USB_MON=y | ||
| 63 | CONFIG_USB_OHCI_HCD=y | ||
| 64 | CONFIG_USB_STORAGE=y | ||
| 65 | CONFIG_USB_SERIAL=y | ||
| 66 | CONFIG_USB_SERIAL_CONSOLE=y | ||
| 67 | CONFIG_USB_SERIAL_GENERIC=y | ||
| 68 | CONFIG_USB_SERIAL_FTDI_SIO=y | ||
| 69 | CONFIG_USB_SERIAL_KEYSPAN=y | ||
| 70 | CONFIG_USB_SERIAL_KEYSPAN_MPR=y | ||
| 71 | CONFIG_USB_SERIAL_KEYSPAN_USA28=y | ||
| 72 | CONFIG_USB_SERIAL_KEYSPAN_USA28X=y | ||
| 73 | CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y | ||
| 74 | CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y | ||
| 75 | CONFIG_USB_SERIAL_KEYSPAN_USA19=y | ||
| 76 | CONFIG_USB_SERIAL_KEYSPAN_USA18X=y | ||
| 77 | CONFIG_USB_SERIAL_KEYSPAN_USA19W=y | ||
| 78 | CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y | ||
| 79 | CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y | ||
| 80 | CONFIG_USB_SERIAL_KEYSPAN_USA49W=y | ||
| 81 | CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y | ||
| 82 | CONFIG_USB_SERIAL_MCT_U232=y | ||
| 83 | CONFIG_NEW_LEDS=y | ||
| 84 | CONFIG_LEDS_CLASS=y | ||
| 85 | CONFIG_LEDS_GPIO=y | ||
| 86 | CONFIG_LEDS_TRIGGERS=y | ||
| 87 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
| 88 | CONFIG_EXT2_FS=y | ||
| 89 | CONFIG_INOTIFY=y | ||
| 90 | CONFIG_TMPFS=y | ||
| 91 | CONFIG_CRAMFS=y | ||
| 92 | CONFIG_NFS_FS=y | ||
| 93 | CONFIG_NFS_V3=y | ||
| 94 | CONFIG_NFS_V4=y | ||
| 95 | CONFIG_ROOT_NFS=y | ||
| 96 | CONFIG_DEBUG_KERNEL=y | ||
| 97 | CONFIG_DEBUG_USER=y | ||
| 98 | CONFIG_DEBUG_LL=y | ||
diff --git a/arch/arm/configs/ecbat91_defconfig b/arch/arm/configs/ecbat91_defconfig deleted file mode 100644 index 6bb6abdcea8c..000000000000 --- a/arch/arm/configs/ecbat91_defconfig +++ /dev/null | |||
| @@ -1,99 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | CONFIG_SYSVIPC=y | ||
| 3 | CONFIG_IKCONFIG=y | ||
| 4 | CONFIG_IKCONFIG_PROC=y | ||
| 5 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 6 | CONFIG_SLAB=y | ||
| 7 | CONFIG_MODULES=y | ||
| 8 | CONFIG_MODULE_UNLOAD=y | ||
| 9 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 10 | # CONFIG_IOSCHED_CFQ is not set | ||
| 11 | CONFIG_ARCH_AT91=y | ||
| 12 | CONFIG_MACH_ECBAT91=y | ||
| 13 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 14 | CONFIG_PCCARD=y | ||
| 15 | CONFIG_AT91_CF=y | ||
| 16 | CONFIG_PREEMPT=y | ||
| 17 | CONFIG_LEDS=y | ||
| 18 | CONFIG_LEDS_CPU=y | ||
| 19 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 20 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 21 | CONFIG_CMDLINE="rootfstype=reiserfs root=/dev/mmcblk0p1 console=ttyS0,115200n8 rootdelay=1" | ||
| 22 | CONFIG_FPE_NWFPE=y | ||
| 23 | CONFIG_NET=y | ||
| 24 | CONFIG_PACKET=y | ||
| 25 | CONFIG_UNIX=y | ||
| 26 | CONFIG_INET=y | ||
| 27 | CONFIG_IP_PNP=y | ||
| 28 | CONFIG_IP_PNP_DHCP=y | ||
| 29 | # CONFIG_IPV6 is not set | ||
| 30 | CONFIG_CFG80211=y | ||
| 31 | CONFIG_MAC80211=y | ||
| 32 | # CONFIG_STANDALONE is not set | ||
| 33 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||
| 34 | CONFIG_MTD=y | ||
| 35 | CONFIG_MTD_PARTITIONS=y | ||
| 36 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 37 | CONFIG_MTD_AFS_PARTS=y | ||
| 38 | CONFIG_MTD_CHAR=y | ||
| 39 | CONFIG_MTD_BLOCK=y | ||
| 40 | CONFIG_MTD_DATAFLASH=y | ||
| 41 | CONFIG_BLK_DEV_LOOP=y | ||
| 42 | CONFIG_SCSI=y | ||
| 43 | CONFIG_BLK_DEV_SD=y | ||
| 44 | CONFIG_CHR_DEV_SG=y | ||
| 45 | CONFIG_NETDEVICES=y | ||
| 46 | CONFIG_NET_ETHERNET=y | ||
| 47 | CONFIG_ARM_AT91_ETHER=y | ||
| 48 | # CONFIG_NETDEV_1000 is not set | ||
| 49 | # CONFIG_NETDEV_10000 is not set | ||
| 50 | CONFIG_PPP=y | ||
| 51 | CONFIG_PPP_MULTILINK=y | ||
| 52 | CONFIG_PPP_FILTER=y | ||
| 53 | CONFIG_PPP_ASYNC=y | ||
| 54 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 55 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 56 | # CONFIG_INPUT_MOUSE is not set | ||
| 57 | # CONFIG_SERIO is not set | ||
| 58 | CONFIG_SERIAL_ATMEL=y | ||
| 59 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 60 | CONFIG_HW_RANDOM=y | ||
| 61 | CONFIG_I2C=y | ||
| 62 | CONFIG_I2C_CHARDEV=y | ||
| 63 | CONFIG_SPI=y | ||
| 64 | CONFIG_SPI_BITBANG=y | ||
| 65 | CONFIG_WATCHDOG=y | ||
| 66 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 67 | # CONFIG_VGA_CONSOLE is not set | ||
| 68 | # CONFIG_USB_HID is not set | ||
| 69 | CONFIG_USB=y | ||
| 70 | CONFIG_USB_DEVICEFS=y | ||
| 71 | # CONFIG_USB_DEVICE_CLASS is not set | ||
| 72 | CONFIG_USB_OHCI_HCD=y | ||
| 73 | CONFIG_USB_PRINTER=y | ||
| 74 | CONFIG_USB_STORAGE=y | ||
| 75 | CONFIG_USB_GADGET=y | ||
| 76 | CONFIG_MMC=y | ||
| 77 | CONFIG_MMC_DEBUG=y | ||
| 78 | CONFIG_MMC_AT91=m | ||
| 79 | CONFIG_NEW_LEDS=y | ||
| 80 | CONFIG_LEDS_CLASS=y | ||
| 81 | CONFIG_RTC_CLASS=y | ||
| 82 | # CONFIG_RTC_HCTOSYS is not set | ||
| 83 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 84 | CONFIG_EXT2_FS=y | ||
| 85 | CONFIG_EXT3_FS=y | ||
| 86 | CONFIG_REISERFS_FS=y | ||
| 87 | CONFIG_INOTIFY=y | ||
| 88 | CONFIG_TMPFS=y | ||
| 89 | CONFIG_CONFIGFS_FS=y | ||
| 90 | CONFIG_CRAMFS=y | ||
| 91 | CONFIG_NFS_FS=y | ||
| 92 | CONFIG_NFS_V3=y | ||
| 93 | CONFIG_NFS_V3_ACL=y | ||
| 94 | CONFIG_NFS_V4=y | ||
| 95 | CONFIG_ROOT_NFS=y | ||
| 96 | CONFIG_PARTITION_ADVANCED=y | ||
| 97 | CONFIG_DEBUG_USER=y | ||
| 98 | CONFIG_CRYPTO_PCBC=y | ||
| 99 | CONFIG_CRYPTO_SHA1=y | ||
diff --git a/arch/arm/configs/kafa_defconfig b/arch/arm/configs/kafa_defconfig deleted file mode 100644 index 896dbe00dc6e..000000000000 --- a/arch/arm/configs/kafa_defconfig +++ /dev/null | |||
| @@ -1,61 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 3 | # CONFIG_SWAP is not set | ||
| 4 | CONFIG_SYSVIPC=y | ||
| 5 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 6 | CONFIG_SLAB=y | ||
| 7 | CONFIG_MODULES=y | ||
| 8 | CONFIG_MODULE_UNLOAD=y | ||
| 9 | # CONFIG_IOSCHED_CFQ is not set | ||
| 10 | CONFIG_ARCH_AT91=y | ||
| 11 | CONFIG_MACH_KAFA=y | ||
| 12 | # CONFIG_ARM_THUMB is not set | ||
| 13 | CONFIG_PREEMPT=y | ||
| 14 | CONFIG_LEDS=y | ||
| 15 | CONFIG_LEDS_CPU=y | ||
| 16 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 17 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 18 | CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20800000,10M root=/dev/ram0 rw" | ||
| 19 | CONFIG_FPE_NWFPE=y | ||
| 20 | CONFIG_BINFMT_MISC=y | ||
| 21 | CONFIG_NET=y | ||
| 22 | CONFIG_PACKET=y | ||
| 23 | CONFIG_UNIX=y | ||
| 24 | CONFIG_INET=y | ||
| 25 | # CONFIG_INET_DIAG is not set | ||
| 26 | # CONFIG_IPV6 is not set | ||
| 27 | CONFIG_MTD=y | ||
| 28 | CONFIG_MTD_PARTITIONS=y | ||
| 29 | CONFIG_MTD_CHAR=y | ||
| 30 | CONFIG_MTD_BLOCK_RO=y | ||
| 31 | CONFIG_NETDEVICES=y | ||
| 32 | CONFIG_PHYLIB=y | ||
| 33 | CONFIG_DAVICOM_PHY=y | ||
| 34 | CONFIG_NET_ETHERNET=y | ||
| 35 | CONFIG_ARM_AT91_ETHER=y | ||
| 36 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 37 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 38 | # CONFIG_INPUT_MOUSE is not set | ||
| 39 | # CONFIG_SERIO is not set | ||
| 40 | CONFIG_SERIAL_ATMEL=y | ||
| 41 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 42 | CONFIG_LEGACY_PTY_COUNT=32 | ||
| 43 | CONFIG_I2C=y | ||
| 44 | CONFIG_I2C_CHARDEV=y | ||
| 45 | CONFIG_I2C_GPIO=y | ||
| 46 | # CONFIG_HWMON is not set | ||
| 47 | CONFIG_WATCHDOG=y | ||
| 48 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 49 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 50 | # CONFIG_VGA_CONSOLE is not set | ||
| 51 | CONFIG_RTC_CLASS=y | ||
| 52 | # CONFIG_RTC_HCTOSYS is not set | ||
| 53 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 54 | CONFIG_EXT3_FS=y | ||
| 55 | # CONFIG_EXT3_FS_XATTR is not set | ||
| 56 | CONFIG_TMPFS=y | ||
| 57 | CONFIG_CRAMFS=y | ||
| 58 | CONFIG_NFS_FS=m | ||
| 59 | CONFIG_NFS_V3=y | ||
| 60 | CONFIG_CRYPTO_MD5=y | ||
| 61 | CONFIG_CRYPTO_DES=y | ||
diff --git a/arch/arm/configs/kb9202_defconfig b/arch/arm/configs/kb9202_defconfig deleted file mode 100644 index 9f906a85f5c2..000000000000 --- a/arch/arm/configs/kb9202_defconfig +++ /dev/null | |||
| @@ -1,127 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_SWAP is not set | ||
| 3 | CONFIG_SYSVIPC=y | ||
| 4 | CONFIG_POSIX_MQUEUE=y | ||
| 5 | CONFIG_BSD_PROCESS_ACCT=y | ||
| 6 | CONFIG_AUDIT=y | ||
| 7 | CONFIG_IKCONFIG=y | ||
| 8 | CONFIG_IKCONFIG_PROC=y | ||
| 9 | CONFIG_BLK_DEV_INITRD=y | ||
| 10 | CONFIG_KALLSYMS_EXTRA_PASS=y | ||
| 11 | CONFIG_MODULES=y | ||
| 12 | CONFIG_MODULE_UNLOAD=y | ||
| 13 | CONFIG_MODVERSIONS=y | ||
| 14 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
| 15 | # CONFIG_BLK_DEV_BSG is not set | ||
| 16 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 17 | CONFIG_ARCH_AT91=y | ||
| 18 | CONFIG_MACH_KB9200=y | ||
| 19 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 20 | CONFIG_NO_HZ=y | ||
| 21 | CONFIG_HIGH_RES_TIMERS=y | ||
| 22 | CONFIG_PREEMPT=y | ||
| 23 | CONFIG_AEABI=y | ||
| 24 | CONFIG_ZBOOT_ROM_TEXT=0x10000000 | ||
| 25 | CONFIG_ZBOOT_ROM_BSS=0x20040000 | ||
| 26 | CONFIG_CMDLINE="noinitrd root=/dev/mtdblock0 rootfstype=jffs2 mem=64M" | ||
| 27 | CONFIG_KEXEC=y | ||
| 28 | CONFIG_FPE_NWFPE=y | ||
| 29 | CONFIG_BINFMT_MISC=y | ||
| 30 | CONFIG_NET=y | ||
| 31 | CONFIG_PACKET=y | ||
| 32 | CONFIG_UNIX=y | ||
| 33 | CONFIG_INET=y | ||
| 34 | CONFIG_IP_PNP=y | ||
| 35 | CONFIG_IP_PNP_DHCP=y | ||
| 36 | CONFIG_IP_PNP_BOOTP=y | ||
| 37 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 38 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 39 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 40 | # CONFIG_INET_LRO is not set | ||
| 41 | # CONFIG_INET_DIAG is not set | ||
| 42 | # CONFIG_IPV6 is not set | ||
| 43 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 44 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
| 45 | CONFIG_MTD=y | ||
| 46 | CONFIG_MTD_CONCAT=y | ||
| 47 | CONFIG_MTD_PARTITIONS=y | ||
| 48 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 49 | CONFIG_MTD_CHAR=y | ||
| 50 | CONFIG_MTD_BLOCK=y | ||
| 51 | CONFIG_MTD_CFI=y | ||
| 52 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 53 | CONFIG_MTD_COMPLEX_MAPPINGS=y | ||
| 54 | CONFIG_MTD_PHYSMAP=y | ||
| 55 | CONFIG_MTD_NAND=y | ||
| 56 | CONFIG_MTD_NAND_ATMEL=y | ||
| 57 | CONFIG_MTD_UBI=y | ||
| 58 | CONFIG_MTD_UBI_GLUEBI=y | ||
| 59 | CONFIG_BLK_DEV_LOOP=y | ||
| 60 | CONFIG_BLK_DEV_RAM=y | ||
| 61 | CONFIG_BLK_DEV_RAM_SIZE=16384 | ||
| 62 | CONFIG_ATMEL_TCLIB=y | ||
| 63 | CONFIG_ATMEL_SSC=y | ||
| 64 | CONFIG_SCSI=y | ||
| 65 | CONFIG_BLK_DEV_SD=y | ||
| 66 | CONFIG_CHR_DEV_SG=y | ||
| 67 | CONFIG_SCSI_MULTI_LUN=y | ||
| 68 | CONFIG_SCSI_CONSTANTS=y | ||
| 69 | CONFIG_SCSI_LOGGING=y | ||
| 70 | CONFIG_SCSI_SPI_ATTRS=m | ||
| 71 | # CONFIG_SCSI_LOWLEVEL is not set | ||
| 72 | CONFIG_NETDEVICES=y | ||
| 73 | CONFIG_NET_ETHERNET=y | ||
| 74 | CONFIG_ARM_AT91_ETHER=y | ||
| 75 | # CONFIG_NETDEV_1000 is not set | ||
| 76 | # CONFIG_NETDEV_10000 is not set | ||
| 77 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 78 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 79 | # CONFIG_INPUT_MOUSE is not set | ||
| 80 | # CONFIG_SERIO is not set | ||
| 81 | CONFIG_SERIAL_ATMEL=y | ||
| 82 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 83 | # CONFIG_LEGACY_PTYS is not set | ||
| 84 | # CONFIG_HW_RANDOM is not set | ||
| 85 | # CONFIG_HWMON is not set | ||
| 86 | CONFIG_WATCHDOG=y | ||
| 87 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 88 | CONFIG_FB=y | ||
| 89 | CONFIG_FB_MODE_HELPERS=y | ||
| 90 | CONFIG_FB_TILEBLITTING=y | ||
| 91 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
| 92 | # CONFIG_LCD_CLASS_DEVICE is not set | ||
| 93 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
| 94 | # CONFIG_BACKLIGHT_GENERIC is not set | ||
| 95 | # CONFIG_VGA_CONSOLE is not set | ||
| 96 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 97 | CONFIG_FONTS=y | ||
| 98 | CONFIG_FONT_MINI_4x6=y | ||
| 99 | # CONFIG_HID_SUPPORT is not set | ||
| 100 | CONFIG_USB=y | ||
| 101 | CONFIG_USB_DEVICEFS=y | ||
| 102 | CONFIG_USB_OHCI_HCD=y | ||
| 103 | CONFIG_USB_STORAGE=y | ||
| 104 | CONFIG_USB_LIBUSUAL=y | ||
| 105 | CONFIG_MMC=y | ||
| 106 | CONFIG_MMC_AT91=m | ||
| 107 | CONFIG_RTC_CLASS=y | ||
| 108 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 109 | CONFIG_EXT2_FS=y | ||
| 110 | CONFIG_EXT3_FS=y | ||
| 111 | # CONFIG_DNOTIFY is not set | ||
| 112 | CONFIG_INOTIFY=y | ||
| 113 | CONFIG_VFAT_FS=y | ||
| 114 | CONFIG_TMPFS=y | ||
| 115 | CONFIG_CONFIGFS_FS=y | ||
| 116 | CONFIG_JFFS2_FS=y | ||
| 117 | CONFIG_NFS_FS=y | ||
| 118 | CONFIG_NFS_V3=y | ||
| 119 | CONFIG_ROOT_NFS=y | ||
| 120 | CONFIG_NLS_CODEPAGE_437=y | ||
| 121 | CONFIG_NLS_UTF8=y | ||
| 122 | CONFIG_MAGIC_SYSRQ=y | ||
| 123 | CONFIG_DEBUG_FS=y | ||
| 124 | CONFIG_DEBUG_KERNEL=y | ||
| 125 | # CONFIG_SCHED_DEBUG is not set | ||
| 126 | # CONFIG_DEBUG_PREEMPT is not set | ||
| 127 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
diff --git a/arch/arm/configs/onearm_defconfig b/arch/arm/configs/onearm_defconfig deleted file mode 100644 index 1579857aeeaa..000000000000 --- a/arch/arm/configs/onearm_defconfig +++ /dev/null | |||
| @@ -1,80 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | # CONFIG_SWAP is not set | ||
| 3 | CONFIG_SYSVIPC=y | ||
| 4 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 5 | CONFIG_BLK_DEV_INITRD=y | ||
| 6 | CONFIG_EMBEDDED=y | ||
| 7 | CONFIG_SLAB=y | ||
| 8 | CONFIG_MODULES=y | ||
| 9 | CONFIG_MODULE_UNLOAD=y | ||
| 10 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 11 | # CONFIG_IOSCHED_CFQ is not set | ||
| 12 | CONFIG_ARCH_AT91=y | ||
| 13 | CONFIG_MACH_ONEARM=y | ||
| 14 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 15 | # CONFIG_ARM_THUMB is not set | ||
| 16 | CONFIG_PCCARD=y | ||
| 17 | CONFIG_AT91_CF=y | ||
| 18 | CONFIG_LEDS=y | ||
| 19 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 20 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 21 | CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M" | ||
| 22 | CONFIG_FPE_NWFPE=y | ||
| 23 | CONFIG_NET=y | ||
| 24 | CONFIG_PACKET=y | ||
| 25 | CONFIG_UNIX=y | ||
| 26 | CONFIG_INET=y | ||
| 27 | CONFIG_IP_PNP=y | ||
| 28 | CONFIG_IP_PNP_BOOTP=y | ||
| 29 | CONFIG_IPV6=y | ||
| 30 | # CONFIG_INET6_XFRM_MODE_TRANSPORT is not set | ||
| 31 | # CONFIG_INET6_XFRM_MODE_TUNNEL is not set | ||
| 32 | # CONFIG_INET6_XFRM_MODE_BEET is not set | ||
| 33 | # CONFIG_IPV6_SIT is not set | ||
| 34 | CONFIG_MTD=y | ||
| 35 | CONFIG_MTD_PARTITIONS=y | ||
| 36 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 37 | CONFIG_MTD_CHAR=y | ||
| 38 | CONFIG_MTD_BLOCK=y | ||
| 39 | CONFIG_MTD_CFI=y | ||
| 40 | CONFIG_MTD_JEDECPROBE=y | ||
| 41 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 42 | CONFIG_MTD_PHYSMAP=y | ||
| 43 | CONFIG_BLK_DEV_NBD=y | ||
| 44 | CONFIG_BLK_DEV_RAM=y | ||
| 45 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
| 46 | CONFIG_NETDEVICES=y | ||
| 47 | CONFIG_NET_ETHERNET=y | ||
| 48 | CONFIG_ARM_AT91_ETHER=y | ||
| 49 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 50 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 51 | # CONFIG_INPUT_MOUSE is not set | ||
| 52 | # CONFIG_SERIO is not set | ||
| 53 | # CONFIG_VT is not set | ||
| 54 | CONFIG_SERIAL_ATMEL=y | ||
| 55 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 56 | # CONFIG_HW_RANDOM is not set | ||
| 57 | CONFIG_I2C=y | ||
| 58 | CONFIG_I2C_CHARDEV=y | ||
| 59 | CONFIG_WATCHDOG=y | ||
| 60 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 61 | CONFIG_AT91RM9200_WATCHDOG=y | ||
| 62 | # CONFIG_USB_HID is not set | ||
| 63 | CONFIG_USB=y | ||
| 64 | CONFIG_USB_DEBUG=y | ||
| 65 | CONFIG_USB_DEVICEFS=y | ||
| 66 | CONFIG_USB_MON=y | ||
| 67 | CONFIG_USB_OHCI_HCD=y | ||
| 68 | CONFIG_USB_GADGET=y | ||
| 69 | CONFIG_MMC=y | ||
| 70 | CONFIG_EXT2_FS=y | ||
| 71 | CONFIG_INOTIFY=y | ||
| 72 | CONFIG_TMPFS=y | ||
| 73 | CONFIG_CRAMFS=y | ||
| 74 | CONFIG_NFS_FS=y | ||
| 75 | CONFIG_NFS_V3=y | ||
| 76 | CONFIG_NFS_V3_ACL=y | ||
| 77 | CONFIG_ROOT_NFS=y | ||
| 78 | CONFIG_DEBUG_KERNEL=y | ||
| 79 | CONFIG_DEBUG_USER=y | ||
| 80 | CONFIG_DEBUG_LL=y | ||
diff --git a/arch/arm/configs/picotux200_defconfig b/arch/arm/configs/picotux200_defconfig deleted file mode 100644 index 4c9afa478d57..000000000000 --- a/arch/arm/configs/picotux200_defconfig +++ /dev/null | |||
| @@ -1,242 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | CONFIG_SYSVIPC=y | ||
| 3 | CONFIG_IKCONFIG=m | ||
| 4 | CONFIG_IKCONFIG_PROC=y | ||
| 5 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 6 | CONFIG_EMBEDDED=y | ||
| 7 | # CONFIG_KALLSYMS is not set | ||
| 8 | CONFIG_SLAB=y | ||
| 9 | CONFIG_MODULES=y | ||
| 10 | CONFIG_MODULE_UNLOAD=y | ||
| 11 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 12 | # CONFIG_IOSCHED_CFQ is not set | ||
| 13 | CONFIG_ARCH_AT91=y | ||
| 14 | CONFIG_MACH_PICOTUX2XX=y | ||
| 15 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
| 16 | CONFIG_AEABI=y | ||
| 17 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 18 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 19 | CONFIG_KEXEC=y | ||
| 20 | CONFIG_FPE_NWFPE=y | ||
| 21 | CONFIG_BINFMT_MISC=m | ||
| 22 | CONFIG_NET=y | ||
| 23 | CONFIG_PACKET=m | ||
| 24 | CONFIG_UNIX=y | ||
| 25 | CONFIG_XFRM_USER=m | ||
| 26 | CONFIG_INET=y | ||
| 27 | CONFIG_IP_PNP=y | ||
| 28 | CONFIG_IP_PNP_BOOTP=y | ||
| 29 | CONFIG_NET_IPIP=m | ||
| 30 | CONFIG_NET_IPGRE=m | ||
| 31 | CONFIG_INET_AH=m | ||
| 32 | CONFIG_INET_ESP=m | ||
| 33 | CONFIG_INET_IPCOMP=m | ||
| 34 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | ||
| 35 | CONFIG_INET_XFRM_MODE_TUNNEL=m | ||
| 36 | CONFIG_INET_XFRM_MODE_BEET=m | ||
| 37 | CONFIG_INET_DIAG=m | ||
| 38 | CONFIG_IPV6_PRIVACY=y | ||
| 39 | CONFIG_IPV6_ROUTER_PREF=y | ||
| 40 | CONFIG_IPV6_ROUTE_INFO=y | ||
| 41 | CONFIG_INET6_AH=m | ||
| 42 | CONFIG_INET6_ESP=m | ||
| 43 | CONFIG_INET6_IPCOMP=m | ||
| 44 | CONFIG_IPV6_MIP6=m | ||
| 45 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | ||
| 46 | CONFIG_IPV6_TUNNEL=m | ||
| 47 | CONFIG_BRIDGE=m | ||
| 48 | CONFIG_VLAN_8021Q=m | ||
| 49 | CONFIG_BT=m | ||
| 50 | CONFIG_BT_L2CAP=m | ||
| 51 | CONFIG_BT_SCO=m | ||
| 52 | CONFIG_BT_RFCOMM=m | ||
| 53 | CONFIG_BT_RFCOMM_TTY=y | ||
| 54 | CONFIG_BT_BNEP=m | ||
| 55 | CONFIG_BT_BNEP_MC_FILTER=y | ||
| 56 | CONFIG_BT_BNEP_PROTO_FILTER=y | ||
| 57 | CONFIG_BT_HIDP=m | ||
| 58 | CONFIG_FW_LOADER=m | ||
| 59 | CONFIG_MTD=y | ||
| 60 | CONFIG_MTD_PARTITIONS=y | ||
| 61 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 62 | CONFIG_MTD_CHAR=y | ||
| 63 | CONFIG_MTD_BLOCK=y | ||
| 64 | CONFIG_MTD_CFI=y | ||
| 65 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 66 | CONFIG_MTD_PHYSMAP=y | ||
| 67 | CONFIG_BLK_DEV_LOOP=m | ||
| 68 | CONFIG_EEPROM_LEGACY=m | ||
| 69 | CONFIG_SCSI=m | ||
| 70 | CONFIG_BLK_DEV_SD=m | ||
| 71 | CONFIG_BLK_DEV_SR=m | ||
| 72 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
| 73 | CONFIG_CHR_DEV_SG=m | ||
| 74 | CONFIG_NETDEVICES=y | ||
| 75 | CONFIG_TUN=m | ||
| 76 | CONFIG_NET_ETHERNET=y | ||
| 77 | CONFIG_ARM_AT91_ETHER=y | ||
| 78 | CONFIG_USB_CATC=m | ||
| 79 | CONFIG_USB_KAWETH=m | ||
| 80 | CONFIG_USB_PEGASUS=m | ||
| 81 | CONFIG_USB_RTL8150=m | ||
| 82 | CONFIG_USB_USBNET=m | ||
| 83 | CONFIG_USB_NET_DM9601=m | ||
| 84 | CONFIG_USB_NET_GL620A=m | ||
| 85 | CONFIG_USB_NET_PLUSB=m | ||
| 86 | CONFIG_USB_NET_MCS7830=m | ||
| 87 | CONFIG_USB_NET_RNDIS_HOST=m | ||
| 88 | CONFIG_USB_ALI_M5632=y | ||
| 89 | CONFIG_USB_AN2720=y | ||
| 90 | CONFIG_USB_EPSON2888=y | ||
| 91 | CONFIG_USB_KC2190=y | ||
| 92 | CONFIG_PPP=m | ||
| 93 | CONFIG_PPP_FILTER=y | ||
| 94 | CONFIG_PPP_ASYNC=m | ||
| 95 | CONFIG_PPP_DEFLATE=m | ||
| 96 | CONFIG_PPP_BSDCOMP=m | ||
| 97 | CONFIG_PPP_MPPE=m | ||
| 98 | CONFIG_PPPOE=m | ||
| 99 | CONFIG_SLIP=m | ||
| 100 | CONFIG_SLIP_COMPRESSED=y | ||
| 101 | CONFIG_SLIP_SMART=y | ||
| 102 | CONFIG_SLIP_MODE_SLIP6=y | ||
| 103 | # CONFIG_INPUT_MOUSEDEV is not set | ||
| 104 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 105 | # CONFIG_INPUT_MOUSE is not set | ||
| 106 | # CONFIG_SERIO is not set | ||
| 107 | # CONFIG_VT is not set | ||
| 108 | CONFIG_SERIAL_ATMEL=y | ||
| 109 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 110 | # CONFIG_LEGACY_PTYS is not set | ||
| 111 | CONFIG_I2C=m | ||
| 112 | CONFIG_I2C_CHARDEV=m | ||
| 113 | CONFIG_I2C_GPIO=m | ||
| 114 | CONFIG_HWMON=m | ||
| 115 | CONFIG_SENSORS_ADM1021=m | ||
| 116 | CONFIG_SENSORS_ADM1025=m | ||
| 117 | CONFIG_SENSORS_ADM1026=m | ||
| 118 | CONFIG_SENSORS_ADM1029=m | ||
| 119 | CONFIG_SENSORS_ADM1031=m | ||
| 120 | CONFIG_SENSORS_ADM9240=m | ||
| 121 | CONFIG_SENSORS_DS1621=m | ||
| 122 | CONFIG_SENSORS_GL518SM=m | ||
| 123 | CONFIG_SENSORS_GL520SM=m | ||
| 124 | CONFIG_SENSORS_IT87=m | ||
| 125 | CONFIG_SENSORS_LM63=m | ||
| 126 | CONFIG_SENSORS_LM75=m | ||
| 127 | CONFIG_SENSORS_LM77=m | ||
| 128 | CONFIG_SENSORS_LM78=m | ||
| 129 | CONFIG_SENSORS_LM80=m | ||
| 130 | CONFIG_SENSORS_LM83=m | ||
| 131 | CONFIG_SENSORS_LM85=m | ||
| 132 | CONFIG_SENSORS_LM87=m | ||
| 133 | CONFIG_SENSORS_LM90=m | ||
| 134 | CONFIG_SENSORS_LM92=m | ||
| 135 | CONFIG_SENSORS_MAX1619=m | ||
| 136 | CONFIG_SENSORS_PCF8591=m | ||
| 137 | CONFIG_SENSORS_SMSC47B397=m | ||
| 138 | CONFIG_SENSORS_W83781D=m | ||
| 139 | CONFIG_SENSORS_W83791D=m | ||
| 140 | CONFIG_SENSORS_W83792D=m | ||
| 141 | CONFIG_SENSORS_W83793=m | ||
| 142 | CONFIG_SENSORS_W83L785TS=m | ||
| 143 | CONFIG_WATCHDOG=y | ||
| 144 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
| 145 | CONFIG_AT91RM9200_WATCHDOG=m | ||
| 146 | CONFIG_HID=m | ||
| 147 | CONFIG_USB=m | ||
| 148 | CONFIG_USB_DEVICEFS=y | ||
| 149 | CONFIG_USB_OHCI_HCD=m | ||
| 150 | CONFIG_USB_ACM=m | ||
| 151 | CONFIG_USB_PRINTER=m | ||
| 152 | CONFIG_USB_STORAGE=m | ||
| 153 | CONFIG_USB_SERIAL=m | ||
| 154 | CONFIG_USB_SERIAL_GENERIC=y | ||
| 155 | CONFIG_USB_SERIAL_PL2303=m | ||
| 156 | CONFIG_MMC=m | ||
| 157 | CONFIG_MMC_AT91=m | ||
| 158 | CONFIG_RTC_CLASS=m | ||
| 159 | CONFIG_RTC_DRV_AT91RM9200=m | ||
| 160 | CONFIG_EXT2_FS=m | ||
| 161 | CONFIG_EXT3_FS=m | ||
| 162 | # CONFIG_EXT3_FS_XATTR is not set | ||
| 163 | CONFIG_INOTIFY=y | ||
| 164 | CONFIG_ISO9660_FS=m | ||
| 165 | CONFIG_JOLIET=y | ||
| 166 | CONFIG_UDF_FS=m | ||
| 167 | CONFIG_MSDOS_FS=m | ||
| 168 | CONFIG_VFAT_FS=m | ||
| 169 | CONFIG_NTFS_FS=m | ||
| 170 | CONFIG_TMPFS=y | ||
| 171 | CONFIG_JFFS2_FS=y | ||
| 172 | CONFIG_JFFS2_SUMMARY=y | ||
| 173 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y | ||
| 174 | CONFIG_NFS_FS=m | ||
| 175 | CONFIG_SMB_FS=m | ||
| 176 | CONFIG_CIFS=m | ||
| 177 | CONFIG_PARTITION_ADVANCED=y | ||
| 178 | CONFIG_AMIGA_PARTITION=y | ||
| 179 | CONFIG_NLS_DEFAULT="utf-8" | ||
| 180 | CONFIG_NLS_CODEPAGE_437=m | ||
| 181 | CONFIG_NLS_CODEPAGE_737=m | ||
| 182 | CONFIG_NLS_CODEPAGE_775=m | ||
| 183 | CONFIG_NLS_CODEPAGE_850=m | ||
| 184 | CONFIG_NLS_CODEPAGE_852=m | ||
| 185 | CONFIG_NLS_CODEPAGE_855=m | ||
| 186 | CONFIG_NLS_CODEPAGE_857=m | ||
| 187 | CONFIG_NLS_CODEPAGE_860=m | ||
| 188 | CONFIG_NLS_CODEPAGE_861=m | ||
| 189 | CONFIG_NLS_CODEPAGE_862=m | ||
| 190 | CONFIG_NLS_CODEPAGE_863=m | ||
| 191 | CONFIG_NLS_CODEPAGE_864=m | ||
| 192 | CONFIG_NLS_CODEPAGE_865=m | ||
| 193 | CONFIG_NLS_CODEPAGE_866=m | ||
| 194 | CONFIG_NLS_CODEPAGE_869=m | ||
| 195 | CONFIG_NLS_CODEPAGE_936=m | ||
| 196 | CONFIG_NLS_CODEPAGE_950=m | ||
| 197 | CONFIG_NLS_CODEPAGE_932=m | ||
| 198 | CONFIG_NLS_CODEPAGE_949=m | ||
| 199 | CONFIG_NLS_CODEPAGE_874=m | ||
| 200 | CONFIG_NLS_ISO8859_8=m | ||
| 201 | CONFIG_NLS_CODEPAGE_1250=m | ||
| 202 | CONFIG_NLS_CODEPAGE_1251=m | ||
| 203 | CONFIG_NLS_ASCII=m | ||
| 204 | CONFIG_NLS_ISO8859_1=m | ||
| 205 | CONFIG_NLS_ISO8859_2=m | ||
| 206 | CONFIG_NLS_ISO8859_3=m | ||
| 207 | CONFIG_NLS_ISO8859_4=m | ||
| 208 | CONFIG_NLS_ISO8859_5=m | ||
| 209 | CONFIG_NLS_ISO8859_6=m | ||
| 210 | CONFIG_NLS_ISO8859_7=m | ||
| 211 | CONFIG_NLS_ISO8859_9=m | ||
| 212 | CONFIG_NLS_ISO8859_13=m | ||
| 213 | CONFIG_NLS_ISO8859_14=m | ||
| 214 | CONFIG_NLS_ISO8859_15=m | ||
| 215 | CONFIG_NLS_KOI8_R=m | ||
| 216 | CONFIG_NLS_KOI8_U=m | ||
| 217 | CONFIG_NLS_UTF8=m | ||
| 218 | CONFIG_DEBUG_KERNEL=y | ||
| 219 | # CONFIG_DEBUG_BUGVERBOSE is not set | ||
| 220 | CONFIG_DEBUG_LL=y | ||
| 221 | CONFIG_CRYPTO_NULL=m | ||
| 222 | CONFIG_CRYPTO_TEST=m | ||
| 223 | CONFIG_CRYPTO_LRW=m | ||
| 224 | CONFIG_CRYPTO_PCBC=m | ||
| 225 | CONFIG_CRYPTO_XCBC=m | ||
| 226 | CONFIG_CRYPTO_MD4=m | ||
| 227 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
| 228 | CONFIG_CRYPTO_SHA256=m | ||
| 229 | CONFIG_CRYPTO_SHA512=m | ||
| 230 | CONFIG_CRYPTO_TGR192=m | ||
| 231 | CONFIG_CRYPTO_WP512=m | ||
| 232 | CONFIG_CRYPTO_ANUBIS=m | ||
| 233 | CONFIG_CRYPTO_BLOWFISH=m | ||
| 234 | CONFIG_CRYPTO_CAMELLIA=m | ||
| 235 | CONFIG_CRYPTO_CAST5=m | ||
| 236 | CONFIG_CRYPTO_CAST6=m | ||
| 237 | CONFIG_CRYPTO_FCRYPT=m | ||
| 238 | CONFIG_CRYPTO_KHAZAD=m | ||
| 239 | CONFIG_CRYPTO_SERPENT=m | ||
| 240 | CONFIG_CRYPTO_TEA=m | ||
| 241 | CONFIG_CRYPTO_TWOFISH=m | ||
| 242 | CONFIG_LIBCRC32C=m | ||
diff --git a/arch/arm/configs/yl9200_defconfig b/arch/arm/configs/yl9200_defconfig deleted file mode 100644 index 30c537f61089..000000000000 --- a/arch/arm/configs/yl9200_defconfig +++ /dev/null | |||
| @@ -1,137 +0,0 @@ | |||
| 1 | # CONFIG_SWAP is not set | ||
| 2 | CONFIG_SYSVIPC=y | ||
| 3 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 4 | CONFIG_BLK_DEV_INITRD=y | ||
| 5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
| 6 | CONFIG_MODULES=y | ||
| 7 | CONFIG_MODULE_UNLOAD=y | ||
| 8 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 9 | # CONFIG_IOSCHED_CFQ is not set | ||
| 10 | CONFIG_ARCH_AT91=y | ||
| 11 | CONFIG_ARCH_AT91RM9200DK=y | ||
| 12 | CONFIG_MACH_YL9200=y | ||
| 13 | # CONFIG_ARM_THUMB is not set | ||
| 14 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 15 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 16 | CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw" | ||
| 17 | CONFIG_FPE_NWFPE=y | ||
| 18 | CONFIG_NET=y | ||
| 19 | CONFIG_PACKET=y | ||
| 20 | CONFIG_UNIX=y | ||
| 21 | CONFIG_INET=y | ||
| 22 | CONFIG_IP_PNP=y | ||
| 23 | CONFIG_IP_PNP_DHCP=y | ||
| 24 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 25 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 26 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 27 | # CONFIG_INET_LRO is not set | ||
| 28 | # CONFIG_INET_DIAG is not set | ||
| 29 | # CONFIG_IPV6 is not set | ||
| 30 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 31 | CONFIG_MTD=y | ||
| 32 | CONFIG_MTD_CONCAT=y | ||
| 33 | CONFIG_MTD_PARTITIONS=y | ||
| 34 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 35 | CONFIG_MTD_CHAR=y | ||
| 36 | CONFIG_MTD_BLOCK=y | ||
| 37 | CONFIG_MTD_CFI=y | ||
| 38 | CONFIG_MTD_JEDECPROBE=y | ||
| 39 | CONFIG_MTD_CFI_INTELEXT=y | ||
| 40 | CONFIG_MTD_COMPLEX_MAPPINGS=y | ||
| 41 | CONFIG_MTD_PHYSMAP=y | ||
| 42 | CONFIG_MTD_PLATRAM=y | ||
| 43 | CONFIG_MTD_NAND=y | ||
| 44 | CONFIG_MTD_NAND_ATMEL=y | ||
| 45 | CONFIG_MTD_NAND_PLATFORM=y | ||
| 46 | CONFIG_BLK_DEV_LOOP=y | ||
| 47 | CONFIG_BLK_DEV_RAM=y | ||
| 48 | CONFIG_BLK_DEV_RAM_COUNT=3 | ||
| 49 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
| 50 | # CONFIG_MISC_DEVICES is not set | ||
| 51 | CONFIG_BLK_DEV_SD=y | ||
| 52 | CONFIG_ATA=y | ||
| 53 | CONFIG_NETDEVICES=y | ||
| 54 | CONFIG_PHYLIB=y | ||
| 55 | CONFIG_DAVICOM_PHY=y | ||
| 56 | CONFIG_NET_ETHERNET=y | ||
| 57 | CONFIG_ARM_AT91_ETHER=y | ||
| 58 | # CONFIG_NETDEV_1000 is not set | ||
| 59 | # CONFIG_NETDEV_10000 is not set | ||
| 60 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 61 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 | ||
| 62 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 | ||
| 63 | CONFIG_INPUT_EVDEV=y | ||
| 64 | # CONFIG_KEYBOARD_ATKBD is not set | ||
| 65 | CONFIG_KEYBOARD_GPIO=y | ||
| 66 | CONFIG_INPUT_TOUCHSCREEN=y | ||
| 67 | CONFIG_TOUCHSCREEN_ADS7846=y | ||
| 68 | # CONFIG_SERIO_SERPORT is not set | ||
| 69 | CONFIG_SERIAL_ATMEL=y | ||
| 70 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
| 71 | # CONFIG_HW_RANDOM is not set | ||
| 72 | CONFIG_I2C=y | ||
| 73 | CONFIG_SPI=y | ||
| 74 | CONFIG_SPI_DEBUG=y | ||
| 75 | CONFIG_SPI_ATMEL=y | ||
| 76 | CONFIG_FB=y | ||
| 77 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
| 78 | CONFIG_LCD_CLASS_DEVICE=y | ||
| 79 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
| 80 | CONFIG_DISPLAY_SUPPORT=y | ||
| 81 | # CONFIG_VGA_CONSOLE is not set | ||
| 82 | CONFIG_LOGO=y | ||
| 83 | # CONFIG_LOGO_LINUX_MONO is not set | ||
| 84 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
| 85 | CONFIG_USB=y | ||
| 86 | CONFIG_USB_DEBUG=y | ||
| 87 | CONFIG_USB_DEVICEFS=y | ||
| 88 | # CONFIG_USB_DEVICE_CLASS is not set | ||
| 89 | CONFIG_USB_MON=y | ||
| 90 | CONFIG_USB_OHCI_HCD=y | ||
| 91 | CONFIG_USB_STORAGE=y | ||
| 92 | CONFIG_USB_GADGET=y | ||
| 93 | CONFIG_USB_GADGET_M66592=y | ||
| 94 | CONFIG_USB_FILE_STORAGE=m | ||
| 95 | CONFIG_MMC=y | ||
| 96 | CONFIG_MMC_DEBUG=y | ||
| 97 | # CONFIG_MMC_BLOCK_BOUNCE is not set | ||
| 98 | CONFIG_MMC_AT91=m | ||
| 99 | CONFIG_NEW_LEDS=y | ||
| 100 | CONFIG_LEDS_CLASS=y | ||
| 101 | CONFIG_LEDS_GPIO=y | ||
| 102 | CONFIG_LEDS_TRIGGERS=y | ||
| 103 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
| 104 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
| 105 | CONFIG_RTC_CLASS=y | ||
| 106 | CONFIG_RTC_DRV_AT91RM9200=y | ||
| 107 | CONFIG_EXT2_FS=y | ||
| 108 | CONFIG_EXT2_FS_XATTR=y | ||
| 109 | CONFIG_EXT3_FS=y | ||
| 110 | CONFIG_REISERFS_FS=y | ||
| 111 | CONFIG_INOTIFY=y | ||
| 112 | CONFIG_ISO9660_FS=y | ||
| 113 | CONFIG_JOLIET=y | ||
| 114 | CONFIG_ZISOFS=y | ||
| 115 | CONFIG_UDF_FS=y | ||
| 116 | CONFIG_MSDOS_FS=y | ||
| 117 | CONFIG_VFAT_FS=y | ||
| 118 | CONFIG_TMPFS=y | ||
| 119 | CONFIG_JFFS2_FS=y | ||
| 120 | CONFIG_JFFS2_FS_DEBUG=1 | ||
| 121 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y | ||
| 122 | CONFIG_JFFS2_RUBIN=y | ||
| 123 | CONFIG_CRAMFS=y | ||
| 124 | CONFIG_PARTITION_ADVANCED=y | ||
| 125 | CONFIG_MAC_PARTITION=y | ||
| 126 | CONFIG_NLS_CODEPAGE_437=y | ||
| 127 | CONFIG_NLS_ISO8859_1=y | ||
| 128 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
| 129 | CONFIG_DEBUG_FS=y | ||
| 130 | CONFIG_DEBUG_KERNEL=y | ||
| 131 | CONFIG_SLUB_DEBUG_ON=y | ||
| 132 | CONFIG_DEBUG_KOBJECT=y | ||
| 133 | CONFIG_DEBUG_INFO=y | ||
| 134 | CONFIG_DEBUG_LIST=y | ||
| 135 | CONFIG_DEBUG_USER=y | ||
| 136 | CONFIG_DEBUG_ERRORS=y | ||
| 137 | CONFIG_DEBUG_LL=y | ||
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index 4e84d09c9c1b..bc2d2d75f706 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h | |||
| @@ -158,16 +158,24 @@ | |||
| 158 | #ifdef CONFIG_SMP | 158 | #ifdef CONFIG_SMP |
| 159 | #define ALT_SMP(instr...) \ | 159 | #define ALT_SMP(instr...) \ |
| 160 | 9998: instr | 160 | 9998: instr |
| 161 | /* | ||
| 162 | * Note: if you get assembler errors from ALT_UP() when building with | ||
| 163 | * CONFIG_THUMB2_KERNEL, you almost certainly need to use | ||
| 164 | * ALT_SMP( W(instr) ... ) | ||
| 165 | */ | ||
| 161 | #define ALT_UP(instr...) \ | 166 | #define ALT_UP(instr...) \ |
| 162 | .pushsection ".alt.smp.init", "a" ;\ | 167 | .pushsection ".alt.smp.init", "a" ;\ |
| 163 | .long 9998b ;\ | 168 | .long 9998b ;\ |
| 164 | instr ;\ | 169 | 9997: instr ;\ |
| 170 | .if . - 9997b != 4 ;\ | ||
| 171 | .error "ALT_UP() content must assemble to exactly 4 bytes";\ | ||
| 172 | .endif ;\ | ||
| 165 | .popsection | 173 | .popsection |
| 166 | #define ALT_UP_B(label) \ | 174 | #define ALT_UP_B(label) \ |
| 167 | .equ up_b_offset, label - 9998b ;\ | 175 | .equ up_b_offset, label - 9998b ;\ |
| 168 | .pushsection ".alt.smp.init", "a" ;\ | 176 | .pushsection ".alt.smp.init", "a" ;\ |
| 169 | .long 9998b ;\ | 177 | .long 9998b ;\ |
| 170 | b . + up_b_offset ;\ | 178 | W(b) . + up_b_offset ;\ |
| 171 | .popsection | 179 | .popsection |
| 172 | #else | 180 | #else |
| 173 | #define ALT_SMP(instr...) | 181 | #define ALT_SMP(instr...) |
| @@ -178,16 +186,24 @@ | |||
| 178 | /* | 186 | /* |
| 179 | * SMP data memory barrier | 187 | * SMP data memory barrier |
| 180 | */ | 188 | */ |
| 181 | .macro smp_dmb | 189 | .macro smp_dmb mode |
| 182 | #ifdef CONFIG_SMP | 190 | #ifdef CONFIG_SMP |
| 183 | #if __LINUX_ARM_ARCH__ >= 7 | 191 | #if __LINUX_ARM_ARCH__ >= 7 |
| 192 | .ifeqs "\mode","arm" | ||
| 184 | ALT_SMP(dmb) | 193 | ALT_SMP(dmb) |
| 194 | .else | ||
| 195 | ALT_SMP(W(dmb)) | ||
| 196 | .endif | ||
| 185 | #elif __LINUX_ARM_ARCH__ == 6 | 197 | #elif __LINUX_ARM_ARCH__ == 6 |
| 186 | ALT_SMP(mcr p15, 0, r0, c7, c10, 5) @ dmb | 198 | ALT_SMP(mcr p15, 0, r0, c7, c10, 5) @ dmb |
| 187 | #else | 199 | #else |
| 188 | #error Incompatible SMP platform | 200 | #error Incompatible SMP platform |
| 189 | #endif | 201 | #endif |
| 202 | .ifeqs "\mode","arm" | ||
| 190 | ALT_UP(nop) | 203 | ALT_UP(nop) |
| 204 | .else | ||
| 205 | ALT_UP(W(nop)) | ||
| 206 | .endif | ||
| 191 | #endif | 207 | #endif |
| 192 | .endm | 208 | .endm |
| 193 | 209 | ||
| @@ -239,7 +255,7 @@ | |||
| 239 | @ Slightly optimised to avoid incrementing the pointer twice | 255 | @ Slightly optimised to avoid incrementing the pointer twice |
| 240 | usraccoff \instr, \reg, \ptr, \inc, 0, \cond, \abort | 256 | usraccoff \instr, \reg, \ptr, \inc, 0, \cond, \abort |
| 241 | .if \rept == 2 | 257 | .if \rept == 2 |
| 242 | usraccoff \instr, \reg, \ptr, \inc, 4, \cond, \abort | 258 | usraccoff \instr, \reg, \ptr, \inc, \inc, \cond, \abort |
| 243 | .endif | 259 | .endif |
| 244 | 260 | ||
| 245 | add\cond \ptr, #\rept * \inc | 261 | add\cond \ptr, #\rept * \inc |
diff --git a/arch/arm/include/asm/entry-macro-multi.S b/arch/arm/include/asm/entry-macro-multi.S index 44f21d4584e8..ec0bbf79c71f 100644 --- a/arch/arm/include/asm/entry-macro-multi.S +++ b/arch/arm/include/asm/entry-macro-multi.S | |||
| @@ -20,7 +20,7 @@ | |||
| 20 | */ | 20 | */ |
| 21 | ALT_SMP(test_for_ipi r0, r6, r5, lr) | 21 | ALT_SMP(test_for_ipi r0, r6, r5, lr) |
| 22 | ALT_UP_B(9997f) | 22 | ALT_UP_B(9997f) |
| 23 | movne r0, sp | 23 | movne r1, sp |
| 24 | adrne lr, BSYM(1b) | 24 | adrne lr, BSYM(1b) |
| 25 | bne do_IPI | 25 | bne do_IPI |
| 26 | 26 | ||
diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h index 6d7485aff955..89ad1805e579 100644 --- a/arch/arm/include/asm/hardirq.h +++ b/arch/arm/include/asm/hardirq.h | |||
| @@ -5,13 +5,31 @@ | |||
| 5 | #include <linux/threads.h> | 5 | #include <linux/threads.h> |
| 6 | #include <asm/irq.h> | 6 | #include <asm/irq.h> |
| 7 | 7 | ||
| 8 | #define NR_IPI 5 | ||
| 9 | |||
| 8 | typedef struct { | 10 | typedef struct { |
| 9 | unsigned int __softirq_pending; | 11 | unsigned int __softirq_pending; |
| 12 | #ifdef CONFIG_LOCAL_TIMERS | ||
| 10 | unsigned int local_timer_irqs; | 13 | unsigned int local_timer_irqs; |
| 14 | #endif | ||
| 15 | #ifdef CONFIG_SMP | ||
| 16 | unsigned int ipi_irqs[NR_IPI]; | ||
| 17 | #endif | ||
| 11 | } ____cacheline_aligned irq_cpustat_t; | 18 | } ____cacheline_aligned irq_cpustat_t; |
| 12 | 19 | ||
| 13 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ | 20 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ |
| 14 | 21 | ||
| 22 | #define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++ | ||
| 23 | #define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member) | ||
| 24 | |||
| 25 | #ifdef CONFIG_SMP | ||
| 26 | u64 smp_irq_stat_cpu(unsigned int cpu); | ||
| 27 | #else | ||
| 28 | #define smp_irq_stat_cpu(cpu) 0 | ||
| 29 | #endif | ||
| 30 | |||
| 31 | #define arch_irq_stat_cpu smp_irq_stat_cpu | ||
| 32 | |||
| 15 | #if NR_IRQS > 512 | 33 | #if NR_IRQS > 512 |
| 16 | #define HARDIRQ_BITS 10 | 34 | #define HARDIRQ_BITS 10 |
| 17 | #elif NR_IRQS > 256 | 35 | #elif NR_IRQS > 256 |
diff --git a/arch/arm/include/asm/hardware/it8152.h b/arch/arm/include/asm/hardware/it8152.h index 6700c7fc7ebd..21fa272301f8 100644 --- a/arch/arm/include/asm/hardware/it8152.h +++ b/arch/arm/include/asm/hardware/it8152.h | |||
| @@ -75,7 +75,7 @@ extern unsigned long it8152_base_address; | |||
| 75 | IT8152_PD_IRQ(1) USB (USBR) | 75 | IT8152_PD_IRQ(1) USB (USBR) |
| 76 | IT8152_PD_IRQ(0) Audio controller (ACR) | 76 | IT8152_PD_IRQ(0) Audio controller (ACR) |
| 77 | */ | 77 | */ |
| 78 | #define IT8152_IRQ(x) (IRQ_BOARD_END + (x)) | 78 | #define IT8152_IRQ(x) (IRQ_BOARD_START + (x)) |
| 79 | 79 | ||
| 80 | /* IRQ-sources in 3 groups - local devices, LPC (serial), and external PCI */ | 80 | /* IRQ-sources in 3 groups - local devices, LPC (serial), and external PCI */ |
| 81 | #define IT8152_LD_IRQ_COUNT 9 | 81 | #define IT8152_LD_IRQ_COUNT 9 |
diff --git a/arch/arm/include/asm/localtimer.h b/arch/arm/include/asm/localtimer.h index 50c7e7cfd670..6bc63ab498ce 100644 --- a/arch/arm/include/asm/localtimer.h +++ b/arch/arm/include/asm/localtimer.h | |||
| @@ -30,7 +30,6 @@ asmlinkage void do_local_timer(struct pt_regs *); | |||
| 30 | #include "smp_twd.h" | 30 | #include "smp_twd.h" |
| 31 | 31 | ||
| 32 | #define local_timer_ack() twd_timer_ack() | 32 | #define local_timer_ack() twd_timer_ack() |
| 33 | #define local_timer_stop() twd_timer_stop() | ||
| 34 | 33 | ||
| 35 | #else | 34 | #else |
| 36 | 35 | ||
| @@ -40,11 +39,6 @@ asmlinkage void do_local_timer(struct pt_regs *); | |||
| 40 | */ | 39 | */ |
| 41 | int local_timer_ack(void); | 40 | int local_timer_ack(void); |
| 42 | 41 | ||
| 43 | /* | ||
| 44 | * Stop a local timer interrupt. | ||
| 45 | */ | ||
| 46 | void local_timer_stop(void); | ||
| 47 | |||
| 48 | #endif | 42 | #endif |
| 49 | 43 | ||
| 50 | /* | 44 | /* |
| @@ -52,12 +46,6 @@ void local_timer_stop(void); | |||
| 52 | */ | 46 | */ |
| 53 | void local_timer_setup(struct clock_event_device *); | 47 | void local_timer_setup(struct clock_event_device *); |
| 54 | 48 | ||
| 55 | #else | ||
| 56 | |||
| 57 | static inline void local_timer_stop(void) | ||
| 58 | { | ||
| 59 | } | ||
| 60 | |||
| 61 | #endif | 49 | #endif |
| 62 | 50 | ||
| 63 | #endif | 51 | #endif |
diff --git a/arch/arm/include/asm/mach/irq.h b/arch/arm/include/asm/mach/irq.h index 831e81453f81..22ac140edd9e 100644 --- a/arch/arm/include/asm/mach/irq.h +++ b/arch/arm/include/asm/mach/irq.h | |||
| @@ -18,7 +18,7 @@ struct seq_file; | |||
| 18 | * This is internal. Do not use it. | 18 | * This is internal. Do not use it. |
| 19 | */ | 19 | */ |
| 20 | extern void init_FIQ(void); | 20 | extern void init_FIQ(void); |
| 21 | extern int show_fiq_list(struct seq_file *, void *); | 21 | extern int show_fiq_list(struct seq_file *, int); |
| 22 | 22 | ||
| 23 | #ifdef CONFIG_MULTI_IRQ_HANDLER | 23 | #ifdef CONFIG_MULTI_IRQ_HANDLER |
| 24 | extern void (*handle_arch_irq)(struct pt_regs *); | 24 | extern void (*handle_arch_irq)(struct pt_regs *); |
diff --git a/arch/arm/include/asm/mmu.h b/arch/arm/include/asm/mmu.h index 68870c776671..b4ffe9d5b526 100644 --- a/arch/arm/include/asm/mmu.h +++ b/arch/arm/include/asm/mmu.h | |||
| @@ -13,6 +13,10 @@ typedef struct { | |||
| 13 | 13 | ||
| 14 | #ifdef CONFIG_CPU_HAS_ASID | 14 | #ifdef CONFIG_CPU_HAS_ASID |
| 15 | #define ASID(mm) ((mm)->context.id & 255) | 15 | #define ASID(mm) ((mm)->context.id & 255) |
| 16 | |||
| 17 | /* init_mm.context.id_lock should be initialized. */ | ||
| 18 | #define INIT_MM_CONTEXT(name) \ | ||
| 19 | .context.id_lock = __SPIN_LOCK_UNLOCKED(name.context.id_lock), | ||
| 16 | #else | 20 | #else |
| 17 | #define ASID(mm) (0) | 21 | #define ASID(mm) (0) |
| 18 | #endif | 22 | #endif |
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index b155414192da..53d1d5deb111 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h | |||
| @@ -374,6 +374,9 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd) | |||
| 374 | 374 | ||
| 375 | #define pmd_page(pmd) pfn_to_page(__phys_to_pfn(pmd_val(pmd))) | 375 | #define pmd_page(pmd) pfn_to_page(__phys_to_pfn(pmd_val(pmd))) |
| 376 | 376 | ||
| 377 | /* we don't need complex calculations here as the pmd is folded into the pgd */ | ||
| 378 | #define pmd_addr_end(addr,end) (end) | ||
| 379 | |||
| 377 | /* | 380 | /* |
| 378 | * Conversion functions: convert a page and protection to a page entry, | 381 | * Conversion functions: convert a page and protection to a page entry, |
| 379 | * and a page entry and page directory to the page they refer to. | 382 | * and a page entry and page directory to the page they refer to. |
diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h index 3d05190797cb..96ed521f2408 100644 --- a/arch/arm/include/asm/smp.h +++ b/arch/arm/include/asm/smp.h | |||
| @@ -33,27 +33,23 @@ struct seq_file; | |||
| 33 | /* | 33 | /* |
| 34 | * generate IPI list text | 34 | * generate IPI list text |
| 35 | */ | 35 | */ |
| 36 | extern void show_ipi_list(struct seq_file *p); | 36 | extern void show_ipi_list(struct seq_file *, int); |
| 37 | 37 | ||
| 38 | /* | 38 | /* |
| 39 | * Called from assembly code, this handles an IPI. | 39 | * Called from assembly code, this handles an IPI. |
| 40 | */ | 40 | */ |
| 41 | asmlinkage void do_IPI(struct pt_regs *regs); | 41 | asmlinkage void do_IPI(int ipinr, struct pt_regs *regs); |
| 42 | 42 | ||
| 43 | /* | 43 | /* |
| 44 | * Setup the set of possible CPUs (via set_cpu_possible) | 44 | * Setup the set of possible CPUs (via set_cpu_possible) |
| 45 | */ | 45 | */ |
| 46 | extern void smp_init_cpus(void); | 46 | extern void smp_init_cpus(void); |
| 47 | 47 | ||
| 48 | /* | ||
| 49 | * Move global data into per-processor storage. | ||
| 50 | */ | ||
| 51 | extern void smp_store_cpu_info(unsigned int cpuid); | ||
| 52 | 48 | ||
| 53 | /* | 49 | /* |
| 54 | * Raise an IPI cross call on CPUs in callmap. | 50 | * Raise an IPI cross call on CPUs in callmap. |
| 55 | */ | 51 | */ |
| 56 | extern void smp_cross_call(const struct cpumask *mask); | 52 | extern void smp_cross_call(const struct cpumask *mask, int ipi); |
| 57 | 53 | ||
| 58 | /* | 54 | /* |
| 59 | * Boot a secondary CPU, and assign it the specified idle task. | 55 | * Boot a secondary CPU, and assign it the specified idle task. |
| @@ -73,6 +69,11 @@ asmlinkage void secondary_start_kernel(void); | |||
| 73 | extern void platform_secondary_init(unsigned int cpu); | 69 | extern void platform_secondary_init(unsigned int cpu); |
| 74 | 70 | ||
| 75 | /* | 71 | /* |
| 72 | * Initialize cpu_possible map, and enable coherency | ||
| 73 | */ | ||
| 74 | extern void platform_smp_prepare_cpus(unsigned int); | ||
| 75 | |||
| 76 | /* | ||
| 76 | * Initial data for bringing up a secondary CPU. | 77 | * Initial data for bringing up a secondary CPU. |
| 77 | */ | 78 | */ |
| 78 | struct secondary_data { | 79 | struct secondary_data { |
| @@ -97,6 +98,6 @@ extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); | |||
| 97 | /* | 98 | /* |
| 98 | * show local interrupt info | 99 | * show local interrupt info |
| 99 | */ | 100 | */ |
| 100 | extern void show_local_irqs(struct seq_file *); | 101 | extern void show_local_irqs(struct seq_file *, int); |
| 101 | 102 | ||
| 102 | #endif /* ifndef __ASM_ARM_SMP_H */ | 103 | #endif /* ifndef __ASM_ARM_SMP_H */ |
diff --git a/arch/arm/include/asm/smp_mpidr.h b/arch/arm/include/asm/smp_mpidr.h deleted file mode 100644 index 6a9307d64900..000000000000 --- a/arch/arm/include/asm/smp_mpidr.h +++ /dev/null | |||
| @@ -1,17 +0,0 @@ | |||
| 1 | #ifndef ASMARM_SMP_MIDR_H | ||
| 2 | #define ASMARM_SMP_MIDR_H | ||
| 3 | |||
| 4 | #define hard_smp_processor_id() \ | ||
| 5 | ({ \ | ||
| 6 | unsigned int cpunum; \ | ||
| 7 | __asm__("\n" \ | ||
| 8 | "1: mrc p15, 0, %0, c0, c0, 5\n" \ | ||
| 9 | " .pushsection \".alt.smp.init\", \"a\"\n"\ | ||
| 10 | " .long 1b\n" \ | ||
| 11 | " mov %0, #0\n" \ | ||
| 12 | " .popsection" \ | ||
| 13 | : "=r" (cpunum)); \ | ||
| 14 | cpunum &= 0x0F; \ | ||
| 15 | }) | ||
| 16 | |||
| 17 | #endif | ||
diff --git a/arch/arm/include/asm/smp_twd.h b/arch/arm/include/asm/smp_twd.h index 634f357be6bb..fed9981fba08 100644 --- a/arch/arm/include/asm/smp_twd.h +++ b/arch/arm/include/asm/smp_twd.h | |||
| @@ -22,7 +22,6 @@ struct clock_event_device; | |||
| 22 | 22 | ||
| 23 | extern void __iomem *twd_base; | 23 | extern void __iomem *twd_base; |
| 24 | 24 | ||
| 25 | void twd_timer_stop(void); | ||
| 26 | int twd_timer_ack(void); | 25 | int twd_timer_ack(void); |
| 27 | void twd_timer_setup(struct clock_event_device *); | 26 | void twd_timer_setup(struct clock_event_device *); |
| 28 | 27 | ||
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index 4036a5926465..0e1067957029 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
| @@ -29,7 +29,7 @@ obj-$(CONFIG_MODULES) += armksyms.o module.o | |||
| 29 | obj-$(CONFIG_ARTHUR) += arthur.o | 29 | obj-$(CONFIG_ARTHUR) += arthur.o |
| 30 | obj-$(CONFIG_ISA_DMA) += dma-isa.o | 30 | obj-$(CONFIG_ISA_DMA) += dma-isa.o |
| 31 | obj-$(CONFIG_PCI) += bios32.o isa.o | 31 | obj-$(CONFIG_PCI) += bios32.o isa.o |
| 32 | obj-$(CONFIG_SMP) += smp.o | 32 | obj-$(CONFIG_SMP) += smp.o smp_tlb.o |
| 33 | obj-$(CONFIG_HAVE_ARM_SCU) += smp_scu.o | 33 | obj-$(CONFIG_HAVE_ARM_SCU) += smp_scu.o |
| 34 | obj-$(CONFIG_HAVE_ARM_TWD) += smp_twd.o | 34 | obj-$(CONFIG_HAVE_ARM_TWD) += smp_twd.o |
| 35 | obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o | 35 | obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index a866dce611d0..8e2dacdbdccb 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
| @@ -822,7 +822,7 @@ __kuser_helper_start: | |||
| 822 | */ | 822 | */ |
| 823 | 823 | ||
| 824 | __kuser_memory_barrier: @ 0xffff0fa0 | 824 | __kuser_memory_barrier: @ 0xffff0fa0 |
| 825 | smp_dmb | 825 | smp_dmb arm |
| 826 | usr_ret lr | 826 | usr_ret lr |
| 827 | 827 | ||
| 828 | .align 5 | 828 | .align 5 |
| @@ -939,7 +939,7 @@ kuser_cmpxchg_fixup: | |||
| 939 | 939 | ||
| 940 | #else | 940 | #else |
| 941 | 941 | ||
| 942 | smp_dmb | 942 | smp_dmb arm |
| 943 | 1: ldrex r3, [r2] | 943 | 1: ldrex r3, [r2] |
| 944 | subs r3, r3, r0 | 944 | subs r3, r3, r0 |
| 945 | strexeq r3, r1, [r2] | 945 | strexeq r3, r1, [r2] |
diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c index d601ef297eb6..e72dc34eea1c 100644 --- a/arch/arm/kernel/fiq.c +++ b/arch/arm/kernel/fiq.c | |||
| @@ -68,10 +68,11 @@ static struct fiq_handler default_owner = { | |||
| 68 | 68 | ||
| 69 | static struct fiq_handler *current_fiq = &default_owner; | 69 | static struct fiq_handler *current_fiq = &default_owner; |
| 70 | 70 | ||
| 71 | int show_fiq_list(struct seq_file *p, void *v) | 71 | int show_fiq_list(struct seq_file *p, int prec) |
| 72 | { | 72 | { |
| 73 | if (current_fiq != &default_owner) | 73 | if (current_fiq != &default_owner) |
| 74 | seq_printf(p, "FIQ: %s\n", current_fiq->name); | 74 | seq_printf(p, "%*s: %s\n", prec, "FIQ", |
| 75 | current_fiq->name); | ||
| 75 | 76 | ||
| 76 | return 0; | 77 | return 0; |
| 77 | } | 78 | } |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index dd6b369ac69c..359e54e83bd5 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
| @@ -89,6 +89,11 @@ ENTRY(stext) | |||
| 89 | bl __lookup_machine_type @ r5=machinfo | 89 | bl __lookup_machine_type @ r5=machinfo |
| 90 | movs r8, r5 @ invalid machine (r5=0)? | 90 | movs r8, r5 @ invalid machine (r5=0)? |
| 91 | beq __error_a @ yes, error 'a' | 91 | beq __error_a @ yes, error 'a' |
| 92 | |||
| 93 | /* | ||
| 94 | * r1 = machine no, r2 = atags, | ||
| 95 | * r8 = machinfo, r9 = cpuid, r10 = procinfo | ||
| 96 | */ | ||
| 92 | bl __vet_atags | 97 | bl __vet_atags |
| 93 | #ifdef CONFIG_SMP_ON_UP | 98 | #ifdef CONFIG_SMP_ON_UP |
| 94 | bl __fixup_smp | 99 | bl __fixup_smp |
| @@ -381,19 +386,19 @@ ENDPROC(__turn_mmu_on) | |||
| 381 | 386 | ||
| 382 | #ifdef CONFIG_SMP_ON_UP | 387 | #ifdef CONFIG_SMP_ON_UP |
| 383 | __fixup_smp: | 388 | __fixup_smp: |
| 384 | mov r7, #0x00070000 | 389 | mov r4, #0x00070000 |
| 385 | orr r6, r7, #0xff000000 @ mask 0xff070000 | 390 | orr r3, r4, #0xff000000 @ mask 0xff070000 |
| 386 | orr r7, r7, #0x41000000 @ val 0x41070000 | 391 | orr r4, r4, #0x41000000 @ val 0x41070000 |
| 387 | and r0, r9, r6 | 392 | and r0, r9, r3 |
| 388 | teq r0, r7 @ ARM CPU and ARMv6/v7? | 393 | teq r0, r4 @ ARM CPU and ARMv6/v7? |
| 389 | bne __fixup_smp_on_up @ no, assume UP | 394 | bne __fixup_smp_on_up @ no, assume UP |
| 390 | 395 | ||
| 391 | orr r6, r6, #0x0000ff00 | 396 | orr r3, r3, #0x0000ff00 |
| 392 | orr r6, r6, #0x000000f0 @ mask 0xff07fff0 | 397 | orr r3, r3, #0x000000f0 @ mask 0xff07fff0 |
| 393 | orr r7, r7, #0x0000b000 | 398 | orr r4, r4, #0x0000b000 |
| 394 | orr r7, r7, #0x00000020 @ val 0x4107b020 | 399 | orr r4, r4, #0x00000020 @ val 0x4107b020 |
| 395 | and r0, r9, r6 | 400 | and r0, r9, r3 |
| 396 | teq r0, r7 @ ARM 11MPCore? | 401 | teq r0, r4 @ ARM 11MPCore? |
| 397 | moveq pc, lr @ yes, assume SMP | 402 | moveq pc, lr @ yes, assume SMP |
| 398 | 403 | ||
| 399 | mrc p15, 0, r0, c0, c0, 5 @ read MPIDR | 404 | mrc p15, 0, r0, c0, c0, 5 @ read MPIDR |
| @@ -402,15 +407,22 @@ __fixup_smp: | |||
| 402 | 407 | ||
| 403 | __fixup_smp_on_up: | 408 | __fixup_smp_on_up: |
| 404 | adr r0, 1f | 409 | adr r0, 1f |
| 405 | ldmia r0, {r3, r6, r7} | 410 | ldmia r0, {r3 - r5} |
| 406 | sub r3, r0, r3 | 411 | sub r3, r0, r3 |
| 407 | add r6, r6, r3 | 412 | add r4, r4, r3 |
| 408 | add r7, r7, r3 | 413 | add r5, r5, r3 |
| 409 | 2: cmp r6, r7 | 414 | 2: cmp r4, r5 |
| 410 | ldmia r6!, {r0, r4} | 415 | movhs pc, lr |
| 411 | strlo r4, [r0, r3] | 416 | ldmia r4!, {r0, r6} |
| 412 | blo 2b | 417 | ARM( str r6, [r0, r3] ) |
| 413 | mov pc, lr | 418 | THUMB( add r0, r0, r3 ) |
| 419 | #ifdef __ARMEB__ | ||
| 420 | THUMB( mov r6, r6, ror #16 ) @ Convert word order for big-endian. | ||
| 421 | #endif | ||
| 422 | THUMB( strh r6, [r0], #2 ) @ For Thumb-2, store as two halfwords | ||
| 423 | THUMB( mov r6, r6, lsr #16 ) @ to be robust against misaligned r3. | ||
| 424 | THUMB( strh r6, [r0] ) | ||
| 425 | b 2b | ||
| 414 | ENDPROC(__fixup_smp) | 426 | ENDPROC(__fixup_smp) |
| 415 | 427 | ||
| 416 | 1: .word . | 428 | 1: .word . |
diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index 54593b0c241b..21e3a4ab3b8c 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c | |||
| @@ -748,8 +748,7 @@ static int hw_breakpoint_pending(unsigned long addr, unsigned int fsr, | |||
| 748 | breakpoint_handler(addr, regs); | 748 | breakpoint_handler(addr, regs); |
| 749 | break; | 749 | break; |
| 750 | case ARM_ENTRY_ASYNC_WATCHPOINT: | 750 | case ARM_ENTRY_ASYNC_WATCHPOINT: |
| 751 | WARN_ON("Asynchronous watchpoint exception taken. " | 751 | WARN(1, "Asynchronous watchpoint exception taken. Debugging results may be unreliable\n"); |
| 752 | "Debugging results may be unreliable"); | ||
| 753 | case ARM_ENTRY_SYNC_WATCHPOINT: | 752 | case ARM_ENTRY_SYNC_WATCHPOINT: |
| 754 | watchpoint_handler(addr, regs); | 753 | watchpoint_handler(addr, regs); |
| 755 | break; | 754 | break; |
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index a591971dbf7b..c1269944cc59 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
| @@ -56,11 +56,20 @@ int show_interrupts(struct seq_file *p, void *v) | |||
| 56 | struct irq_desc *desc; | 56 | struct irq_desc *desc; |
| 57 | struct irqaction * action; | 57 | struct irqaction * action; |
| 58 | unsigned long flags; | 58 | unsigned long flags; |
| 59 | int prec, n; | ||
| 60 | |||
| 61 | for (prec = 3, n = 1000; prec < 10 && n <= nr_irqs; prec++) | ||
| 62 | n *= 10; | ||
| 63 | |||
| 64 | #ifdef CONFIG_SMP | ||
| 65 | if (prec < 4) | ||
| 66 | prec = 4; | ||
| 67 | #endif | ||
| 59 | 68 | ||
| 60 | if (i == 0) { | 69 | if (i == 0) { |
| 61 | char cpuname[12]; | 70 | char cpuname[12]; |
| 62 | 71 | ||
| 63 | seq_printf(p, " "); | 72 | seq_printf(p, "%*s ", prec, ""); |
| 64 | for_each_present_cpu(cpu) { | 73 | for_each_present_cpu(cpu) { |
| 65 | sprintf(cpuname, "CPU%d", cpu); | 74 | sprintf(cpuname, "CPU%d", cpu); |
| 66 | seq_printf(p, " %10s", cpuname); | 75 | seq_printf(p, " %10s", cpuname); |
| @@ -75,7 +84,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
| 75 | if (!action) | 84 | if (!action) |
| 76 | goto unlock; | 85 | goto unlock; |
| 77 | 86 | ||
| 78 | seq_printf(p, "%3d: ", i); | 87 | seq_printf(p, "%*d: ", prec, i); |
| 79 | for_each_present_cpu(cpu) | 88 | for_each_present_cpu(cpu) |
| 80 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu)); | 89 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu)); |
| 81 | seq_printf(p, " %10s", desc->chip->name ? : "-"); | 90 | seq_printf(p, " %10s", desc->chip->name ? : "-"); |
| @@ -88,13 +97,15 @@ unlock: | |||
| 88 | raw_spin_unlock_irqrestore(&desc->lock, flags); | 97 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
| 89 | } else if (i == nr_irqs) { | 98 | } else if (i == nr_irqs) { |
| 90 | #ifdef CONFIG_FIQ | 99 | #ifdef CONFIG_FIQ |
| 91 | show_fiq_list(p, v); | 100 | show_fiq_list(p, prec); |
| 92 | #endif | 101 | #endif |
| 93 | #ifdef CONFIG_SMP | 102 | #ifdef CONFIG_SMP |
| 94 | show_ipi_list(p); | 103 | show_ipi_list(p, prec); |
| 95 | show_local_irqs(p); | 104 | #endif |
| 105 | #ifdef CONFIG_LOCAL_TIMERS | ||
| 106 | show_local_irqs(p, prec); | ||
| 96 | #endif | 107 | #endif |
| 97 | seq_printf(p, "Err: %10lu\n", irq_err_count); | 108 | seq_printf(p, "%*s: %10lu\n", prec, "Err", irq_err_count); |
| 98 | } | 109 | } |
| 99 | return 0; | 110 | return 0; |
| 100 | } | 111 | } |
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index 49643b1467e6..07a50357492a 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c | |||
| @@ -1749,7 +1749,7 @@ static inline int armv7_pmnc_has_overflowed(unsigned long pmnc) | |||
| 1749 | static inline int armv7_pmnc_counter_has_overflowed(unsigned long pmnc, | 1749 | static inline int armv7_pmnc_counter_has_overflowed(unsigned long pmnc, |
| 1750 | enum armv7_counters counter) | 1750 | enum armv7_counters counter) |
| 1751 | { | 1751 | { |
| 1752 | int ret; | 1752 | int ret = 0; |
| 1753 | 1753 | ||
| 1754 | if (counter == ARMV7_CYCLE_COUNTER) | 1754 | if (counter == ARMV7_CYCLE_COUNTER) |
| 1755 | ret = pmnc & ARMV7_FLAG_C; | 1755 | ret = pmnc & ARMV7_FLAG_C; |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 8c1959590252..5341b0b19701 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/irq.h> | 24 | #include <linux/irq.h> |
| 25 | #include <linux/percpu.h> | 25 | #include <linux/percpu.h> |
| 26 | #include <linux/clockchips.h> | 26 | #include <linux/clockchips.h> |
| 27 | #include <linux/completion.h> | ||
| 27 | 28 | ||
| 28 | #include <asm/atomic.h> | 29 | #include <asm/atomic.h> |
| 29 | #include <asm/cacheflush.h> | 30 | #include <asm/cacheflush.h> |
| @@ -37,7 +38,6 @@ | |||
| 37 | #include <asm/tlbflush.h> | 38 | #include <asm/tlbflush.h> |
| 38 | #include <asm/ptrace.h> | 39 | #include <asm/ptrace.h> |
| 39 | #include <asm/localtimer.h> | 40 | #include <asm/localtimer.h> |
| 40 | #include <asm/smp_plat.h> | ||
| 41 | 41 | ||
| 42 | /* | 42 | /* |
| 43 | * as from 2.5, kernels no longer have an init_tasks structure | 43 | * as from 2.5, kernels no longer have an init_tasks structure |
| @@ -46,22 +46,8 @@ | |||
| 46 | */ | 46 | */ |
| 47 | struct secondary_data secondary_data; | 47 | struct secondary_data secondary_data; |
| 48 | 48 | ||
| 49 | /* | ||
| 50 | * structures for inter-processor calls | ||
| 51 | * - A collection of single bit ipi messages. | ||
| 52 | */ | ||
| 53 | struct ipi_data { | ||
| 54 | spinlock_t lock; | ||
| 55 | unsigned long ipi_count; | ||
| 56 | unsigned long bits; | ||
| 57 | }; | ||
| 58 | |||
| 59 | static DEFINE_PER_CPU(struct ipi_data, ipi_data) = { | ||
| 60 | .lock = SPIN_LOCK_UNLOCKED, | ||
| 61 | }; | ||
| 62 | |||
| 63 | enum ipi_msg_type { | 49 | enum ipi_msg_type { |
| 64 | IPI_TIMER, | 50 | IPI_TIMER = 2, |
| 65 | IPI_RESCHEDULE, | 51 | IPI_RESCHEDULE, |
| 66 | IPI_CALL_FUNC, | 52 | IPI_CALL_FUNC, |
| 67 | IPI_CALL_FUNC_SINGLE, | 53 | IPI_CALL_FUNC_SINGLE, |
| @@ -177,8 +163,12 @@ int __cpuinit __cpu_up(unsigned int cpu) | |||
| 177 | barrier(); | 163 | barrier(); |
| 178 | } | 164 | } |
| 179 | 165 | ||
| 180 | if (!cpu_online(cpu)) | 166 | if (!cpu_online(cpu)) { |
| 167 | pr_crit("CPU%u: failed to come online\n", cpu); | ||
| 181 | ret = -EIO; | 168 | ret = -EIO; |
| 169 | } | ||
| 170 | } else { | ||
| 171 | pr_err("CPU%u: failed to boot: %d\n", cpu, ret); | ||
| 182 | } | 172 | } |
| 183 | 173 | ||
| 184 | secondary_data.stack = NULL; | 174 | secondary_data.stack = NULL; |
| @@ -194,18 +184,12 @@ int __cpuinit __cpu_up(unsigned int cpu) | |||
| 194 | 184 | ||
| 195 | pgd_free(&init_mm, pgd); | 185 | pgd_free(&init_mm, pgd); |
| 196 | 186 | ||
| 197 | if (ret) { | ||
| 198 | printk(KERN_CRIT "CPU%u: processor failed to boot\n", cpu); | ||
| 199 | |||
| 200 | /* | ||
| 201 | * FIXME: We need to clean up the new idle thread. --rmk | ||
| 202 | */ | ||
| 203 | } | ||
| 204 | |||
| 205 | return ret; | 187 | return ret; |
| 206 | } | 188 | } |
| 207 | 189 | ||
| 208 | #ifdef CONFIG_HOTPLUG_CPU | 190 | #ifdef CONFIG_HOTPLUG_CPU |
| 191 | static void percpu_timer_stop(void); | ||
| 192 | |||
| 209 | /* | 193 | /* |
| 210 | * __cpu_disable runs on the processor to be shutdown. | 194 | * __cpu_disable runs on the processor to be shutdown. |
| 211 | */ | 195 | */ |
| @@ -233,7 +217,7 @@ int __cpu_disable(void) | |||
| 233 | /* | 217 | /* |
| 234 | * Stop the local timer for this CPU. | 218 | * Stop the local timer for this CPU. |
| 235 | */ | 219 | */ |
| 236 | local_timer_stop(); | 220 | percpu_timer_stop(); |
| 237 | 221 | ||
| 238 | /* | 222 | /* |
| 239 | * Flush user cache and TLB mappings, and then remove this CPU | 223 | * Flush user cache and TLB mappings, and then remove this CPU |
| @@ -252,12 +236,20 @@ int __cpu_disable(void) | |||
| 252 | return 0; | 236 | return 0; |
| 253 | } | 237 | } |
| 254 | 238 | ||
| 239 | static DECLARE_COMPLETION(cpu_died); | ||
| 240 | |||
| 255 | /* | 241 | /* |
| 256 | * called on the thread which is asking for a CPU to be shutdown - | 242 | * called on the thread which is asking for a CPU to be shutdown - |
| 257 | * waits until shutdown has completed, or it is timed out. | 243 | * waits until shutdown has completed, or it is timed out. |
| 258 | */ | 244 | */ |
| 259 | void __cpu_die(unsigned int cpu) | 245 | void __cpu_die(unsigned int cpu) |
| 260 | { | 246 | { |
| 247 | if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) { | ||
| 248 | pr_err("CPU%u: cpu didn't die\n", cpu); | ||
| 249 | return; | ||
| 250 | } | ||
| 251 | printk(KERN_NOTICE "CPU%u: shutdown\n", cpu); | ||
| 252 | |||
| 261 | if (!platform_cpu_kill(cpu)) | 253 | if (!platform_cpu_kill(cpu)) |
| 262 | printk("CPU%u: unable to kill\n", cpu); | 254 | printk("CPU%u: unable to kill\n", cpu); |
| 263 | } | 255 | } |
| @@ -274,12 +266,17 @@ void __ref cpu_die(void) | |||
| 274 | { | 266 | { |
| 275 | unsigned int cpu = smp_processor_id(); | 267 | unsigned int cpu = smp_processor_id(); |
| 276 | 268 | ||
| 277 | local_irq_disable(); | ||
| 278 | idle_task_exit(); | 269 | idle_task_exit(); |
| 279 | 270 | ||
| 271 | local_irq_disable(); | ||
| 272 | mb(); | ||
| 273 | |||
| 274 | /* Tell __cpu_die() that this CPU is now safe to dispose of */ | ||
| 275 | complete(&cpu_died); | ||
| 276 | |||
| 280 | /* | 277 | /* |
| 281 | * actual CPU shutdown procedure is at least platform (if not | 278 | * actual CPU shutdown procedure is at least platform (if not |
| 282 | * CPU) specific | 279 | * CPU) specific. |
| 283 | */ | 280 | */ |
| 284 | platform_cpu_die(cpu); | 281 | platform_cpu_die(cpu); |
| 285 | 282 | ||
| @@ -289,6 +286,7 @@ void __ref cpu_die(void) | |||
| 289 | * to be repeated to undo the effects of taking the CPU offline. | 286 | * to be repeated to undo the effects of taking the CPU offline. |
| 290 | */ | 287 | */ |
| 291 | __asm__("mov sp, %0\n" | 288 | __asm__("mov sp, %0\n" |
| 289 | " mov fp, #0\n" | ||
| 292 | " b secondary_start_kernel" | 290 | " b secondary_start_kernel" |
| 293 | : | 291 | : |
| 294 | : "r" (task_stack_page(current) + THREAD_SIZE - 8)); | 292 | : "r" (task_stack_page(current) + THREAD_SIZE - 8)); |
| @@ -296,6 +294,17 @@ void __ref cpu_die(void) | |||
| 296 | #endif /* CONFIG_HOTPLUG_CPU */ | 294 | #endif /* CONFIG_HOTPLUG_CPU */ |
| 297 | 295 | ||
| 298 | /* | 296 | /* |
| 297 | * Called by both boot and secondaries to move global data into | ||
| 298 | * per-processor storage. | ||
| 299 | */ | ||
| 300 | static void __cpuinit smp_store_cpu_info(unsigned int cpuid) | ||
| 301 | { | ||
| 302 | struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid); | ||
| 303 | |||
| 304 | cpu_info->loops_per_jiffy = loops_per_jiffy; | ||
| 305 | } | ||
| 306 | |||
| 307 | /* | ||
| 299 | * This is the secondary CPU boot entry. We're using this CPUs | 308 | * This is the secondary CPU boot entry. We're using this CPUs |
| 300 | * idle thread stack, but a set of temporary page tables. | 309 | * idle thread stack, but a set of temporary page tables. |
| 301 | */ | 310 | */ |
| @@ -320,6 +329,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
| 320 | 329 | ||
| 321 | cpu_init(); | 330 | cpu_init(); |
| 322 | preempt_disable(); | 331 | preempt_disable(); |
| 332 | trace_hardirqs_off(); | ||
| 323 | 333 | ||
| 324 | /* | 334 | /* |
| 325 | * Give the platform a chance to do its own initialisation. | 335 | * Give the platform a chance to do its own initialisation. |
| @@ -353,17 +363,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
| 353 | cpu_idle(); | 363 | cpu_idle(); |
| 354 | } | 364 | } |
| 355 | 365 | ||
| 356 | /* | ||
| 357 | * Called by both boot and secondaries to move global data into | ||
| 358 | * per-processor storage. | ||
| 359 | */ | ||
| 360 | void __cpuinit smp_store_cpu_info(unsigned int cpuid) | ||
| 361 | { | ||
| 362 | struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid); | ||
| 363 | |||
| 364 | cpu_info->loops_per_jiffy = loops_per_jiffy; | ||
| 365 | } | ||
| 366 | |||
| 367 | void __init smp_cpus_done(unsigned int max_cpus) | 366 | void __init smp_cpus_done(unsigned int max_cpus) |
| 368 | { | 367 | { |
| 369 | int cpu; | 368 | int cpu; |
| @@ -386,61 +385,80 @@ void __init smp_prepare_boot_cpu(void) | |||
| 386 | per_cpu(cpu_data, cpu).idle = current; | 385 | per_cpu(cpu_data, cpu).idle = current; |
| 387 | } | 386 | } |
| 388 | 387 | ||
| 389 | static void send_ipi_message(const struct cpumask *mask, enum ipi_msg_type msg) | 388 | void __init smp_prepare_cpus(unsigned int max_cpus) |
| 390 | { | 389 | { |
| 391 | unsigned long flags; | 390 | unsigned int ncores = num_possible_cpus(); |
| 392 | unsigned int cpu; | ||
| 393 | |||
| 394 | local_irq_save(flags); | ||
| 395 | 391 | ||
| 396 | for_each_cpu(cpu, mask) { | 392 | smp_store_cpu_info(smp_processor_id()); |
| 397 | struct ipi_data *ipi = &per_cpu(ipi_data, cpu); | ||
| 398 | |||
| 399 | spin_lock(&ipi->lock); | ||
| 400 | ipi->bits |= 1 << msg; | ||
| 401 | spin_unlock(&ipi->lock); | ||
| 402 | } | ||
| 403 | 393 | ||
| 404 | /* | 394 | /* |
| 405 | * Call the platform specific cross-CPU call function. | 395 | * are we trying to boot more cores than exist? |
| 406 | */ | 396 | */ |
| 407 | smp_cross_call(mask); | 397 | if (max_cpus > ncores) |
| 398 | max_cpus = ncores; | ||
| 399 | |||
| 400 | if (max_cpus > 1) { | ||
| 401 | /* | ||
| 402 | * Enable the local timer or broadcast device for the | ||
| 403 | * boot CPU, but only if we have more than one CPU. | ||
| 404 | */ | ||
| 405 | percpu_timer_setup(); | ||
| 408 | 406 | ||
| 409 | local_irq_restore(flags); | 407 | /* |
| 408 | * Initialise the SCU if there are more than one CPU | ||
| 409 | * and let them know where to start. | ||
| 410 | */ | ||
| 411 | platform_smp_prepare_cpus(max_cpus); | ||
| 412 | } | ||
| 410 | } | 413 | } |
| 411 | 414 | ||
| 412 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) | 415 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) |
| 413 | { | 416 | { |
| 414 | send_ipi_message(mask, IPI_CALL_FUNC); | 417 | smp_cross_call(mask, IPI_CALL_FUNC); |
| 415 | } | 418 | } |
| 416 | 419 | ||
| 417 | void arch_send_call_function_single_ipi(int cpu) | 420 | void arch_send_call_function_single_ipi(int cpu) |
| 418 | { | 421 | { |
| 419 | send_ipi_message(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE); | 422 | smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE); |
| 420 | } | 423 | } |
| 421 | 424 | ||
| 422 | void show_ipi_list(struct seq_file *p) | 425 | static const char *ipi_types[NR_IPI] = { |
| 426 | #define S(x,s) [x - IPI_TIMER] = s | ||
| 427 | S(IPI_TIMER, "Timer broadcast interrupts"), | ||
| 428 | S(IPI_RESCHEDULE, "Rescheduling interrupts"), | ||
| 429 | S(IPI_CALL_FUNC, "Function call interrupts"), | ||
| 430 | S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"), | ||
| 431 | S(IPI_CPU_STOP, "CPU stop interrupts"), | ||
| 432 | }; | ||
| 433 | |||
| 434 | void show_ipi_list(struct seq_file *p, int prec) | ||
| 423 | { | 435 | { |
| 424 | unsigned int cpu; | 436 | unsigned int cpu, i; |
| 425 | 437 | ||
| 426 | seq_puts(p, "IPI:"); | 438 | for (i = 0; i < NR_IPI; i++) { |
| 439 | seq_printf(p, "%*s%u: ", prec - 1, "IPI", i); | ||
| 427 | 440 | ||
| 428 | for_each_present_cpu(cpu) | 441 | for_each_present_cpu(cpu) |
| 429 | seq_printf(p, " %10lu", per_cpu(ipi_data, cpu).ipi_count); | 442 | seq_printf(p, "%10u ", |
| 443 | __get_irq_stat(cpu, ipi_irqs[i])); | ||
| 430 | 444 | ||
| 431 | seq_putc(p, '\n'); | 445 | seq_printf(p, " %s\n", ipi_types[i]); |
| 446 | } | ||
| 432 | } | 447 | } |
| 433 | 448 | ||
| 434 | void show_local_irqs(struct seq_file *p) | 449 | u64 smp_irq_stat_cpu(unsigned int cpu) |
| 435 | { | 450 | { |
| 436 | unsigned int cpu; | 451 | u64 sum = 0; |
| 452 | int i; | ||
| 437 | 453 | ||
| 438 | seq_printf(p, "LOC: "); | 454 | for (i = 0; i < NR_IPI; i++) |
| 455 | sum += __get_irq_stat(cpu, ipi_irqs[i]); | ||
| 439 | 456 | ||
| 440 | for_each_present_cpu(cpu) | 457 | #ifdef CONFIG_LOCAL_TIMERS |
| 441 | seq_printf(p, "%10u ", irq_stat[cpu].local_timer_irqs); | 458 | sum += __get_irq_stat(cpu, local_timer_irqs); |
| 459 | #endif | ||
| 442 | 460 | ||
| 443 | seq_putc(p, '\n'); | 461 | return sum; |
| 444 | } | 462 | } |
| 445 | 463 | ||
| 446 | /* | 464 | /* |
| @@ -463,18 +481,30 @@ asmlinkage void __exception do_local_timer(struct pt_regs *regs) | |||
| 463 | int cpu = smp_processor_id(); | 481 | int cpu = smp_processor_id(); |
| 464 | 482 | ||
| 465 | if (local_timer_ack()) { | 483 | if (local_timer_ack()) { |
| 466 | irq_stat[cpu].local_timer_irqs++; | 484 | __inc_irq_stat(cpu, local_timer_irqs); |
| 467 | ipi_timer(); | 485 | ipi_timer(); |
| 468 | } | 486 | } |
| 469 | 487 | ||
| 470 | set_irq_regs(old_regs); | 488 | set_irq_regs(old_regs); |
| 471 | } | 489 | } |
| 490 | |||
| 491 | void show_local_irqs(struct seq_file *p, int prec) | ||
| 492 | { | ||
| 493 | unsigned int cpu; | ||
| 494 | |||
| 495 | seq_printf(p, "%*s: ", prec, "LOC"); | ||
| 496 | |||
| 497 | for_each_present_cpu(cpu) | ||
| 498 | seq_printf(p, "%10u ", __get_irq_stat(cpu, local_timer_irqs)); | ||
| 499 | |||
| 500 | seq_printf(p, " Local timer interrupts\n"); | ||
| 501 | } | ||
| 472 | #endif | 502 | #endif |
| 473 | 503 | ||
| 474 | #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST | 504 | #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST |
| 475 | static void smp_timer_broadcast(const struct cpumask *mask) | 505 | static void smp_timer_broadcast(const struct cpumask *mask) |
| 476 | { | 506 | { |
| 477 | send_ipi_message(mask, IPI_TIMER); | 507 | smp_cross_call(mask, IPI_TIMER); |
| 478 | } | 508 | } |
| 479 | #else | 509 | #else |
| 480 | #define smp_timer_broadcast NULL | 510 | #define smp_timer_broadcast NULL |
| @@ -511,6 +541,21 @@ void __cpuinit percpu_timer_setup(void) | |||
| 511 | local_timer_setup(evt); | 541 | local_timer_setup(evt); |
| 512 | } | 542 | } |
| 513 | 543 | ||
| 544 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 545 | /* | ||
| 546 | * The generic clock events code purposely does not stop the local timer | ||
| 547 | * on CPU_DEAD/CPU_DEAD_FROZEN hotplug events, so we have to do it | ||
| 548 | * manually here. | ||
| 549 | */ | ||
| 550 | static void percpu_timer_stop(void) | ||
| 551 | { | ||
| 552 | unsigned int cpu = smp_processor_id(); | ||
| 553 | struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu); | ||
| 554 | |||
| 555 | evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt); | ||
| 556 | } | ||
| 557 | #endif | ||
| 558 | |||
| 514 | static DEFINE_SPINLOCK(stop_lock); | 559 | static DEFINE_SPINLOCK(stop_lock); |
| 515 | 560 | ||
| 516 | /* | 561 | /* |
| @@ -537,216 +582,76 @@ static void ipi_cpu_stop(unsigned int cpu) | |||
| 537 | 582 | ||
| 538 | /* | 583 | /* |
| 539 | * Main handler for inter-processor interrupts | 584 | * Main handler for inter-processor interrupts |
| 540 | * | ||
| 541 | * For ARM, the ipimask now only identifies a single | ||
| 542 | * category of IPI (Bit 1 IPIs have been replaced by a | ||
| 543 | * different mechanism): | ||
| 544 | * | ||
| 545 | * Bit 0 - Inter-processor function call | ||
| 546 | */ | 585 | */ |
| 547 | asmlinkage void __exception do_IPI(struct pt_regs *regs) | 586 | asmlinkage void __exception do_IPI(int ipinr, struct pt_regs *regs) |
| 548 | { | 587 | { |
| 549 | unsigned int cpu = smp_processor_id(); | 588 | unsigned int cpu = smp_processor_id(); |
| 550 | struct ipi_data *ipi = &per_cpu(ipi_data, cpu); | ||
| 551 | struct pt_regs *old_regs = set_irq_regs(regs); | 589 | struct pt_regs *old_regs = set_irq_regs(regs); |
| 552 | 590 | ||
| 553 | ipi->ipi_count++; | 591 | if (ipinr >= IPI_TIMER && ipinr < IPI_TIMER + NR_IPI) |
| 554 | 592 | __inc_irq_stat(cpu, ipi_irqs[ipinr - IPI_TIMER]); | |
| 555 | for (;;) { | ||
| 556 | unsigned long msgs; | ||
| 557 | 593 | ||
| 558 | spin_lock(&ipi->lock); | 594 | switch (ipinr) { |
| 559 | msgs = ipi->bits; | 595 | case IPI_TIMER: |
| 560 | ipi->bits = 0; | 596 | ipi_timer(); |
| 561 | spin_unlock(&ipi->lock); | 597 | break; |
| 562 | |||
| 563 | if (!msgs) | ||
| 564 | break; | ||
| 565 | |||
| 566 | do { | ||
| 567 | unsigned nextmsg; | ||
| 568 | |||
| 569 | nextmsg = msgs & -msgs; | ||
| 570 | msgs &= ~nextmsg; | ||
| 571 | nextmsg = ffz(~nextmsg); | ||
| 572 | |||
| 573 | switch (nextmsg) { | ||
| 574 | case IPI_TIMER: | ||
| 575 | ipi_timer(); | ||
| 576 | break; | ||
| 577 | 598 | ||
| 578 | case IPI_RESCHEDULE: | 599 | case IPI_RESCHEDULE: |
| 579 | /* | 600 | /* |
| 580 | * nothing more to do - eveything is | 601 | * nothing more to do - eveything is |
| 581 | * done on the interrupt return path | 602 | * done on the interrupt return path |
| 582 | */ | 603 | */ |
| 583 | break; | 604 | break; |
| 584 | 605 | ||
| 585 | case IPI_CALL_FUNC: | 606 | case IPI_CALL_FUNC: |
| 586 | generic_smp_call_function_interrupt(); | 607 | generic_smp_call_function_interrupt(); |
| 587 | break; | 608 | break; |
| 588 | 609 | ||
| 589 | case IPI_CALL_FUNC_SINGLE: | 610 | case IPI_CALL_FUNC_SINGLE: |
| 590 | generic_smp_call_function_single_interrupt(); | 611 | generic_smp_call_function_single_interrupt(); |
| 591 | break; | 612 | break; |
| 592 | 613 | ||
| 593 | case IPI_CPU_STOP: | 614 | case IPI_CPU_STOP: |
| 594 | ipi_cpu_stop(cpu); | 615 | ipi_cpu_stop(cpu); |
| 595 | break; | 616 | break; |
| 596 | 617 | ||
| 597 | default: | 618 | default: |
| 598 | printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n", | 619 | printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n", |
| 599 | cpu, nextmsg); | 620 | cpu, ipinr); |
| 600 | break; | 621 | break; |
| 601 | } | ||
| 602 | } while (msgs); | ||
| 603 | } | 622 | } |
| 604 | |||
| 605 | set_irq_regs(old_regs); | 623 | set_irq_regs(old_regs); |
| 606 | } | 624 | } |
| 607 | 625 | ||
| 608 | void smp_send_reschedule(int cpu) | 626 | void smp_send_reschedule(int cpu) |
| 609 | { | 627 | { |
| 610 | send_ipi_message(cpumask_of(cpu), IPI_RESCHEDULE); | 628 | smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE); |
| 611 | } | 629 | } |
| 612 | 630 | ||
| 613 | void smp_send_stop(void) | 631 | void smp_send_stop(void) |
| 614 | { | 632 | { |
| 615 | cpumask_t mask = cpu_online_map; | 633 | unsigned long timeout; |
| 616 | cpu_clear(smp_processor_id(), mask); | ||
| 617 | if (!cpus_empty(mask)) | ||
| 618 | send_ipi_message(&mask, IPI_CPU_STOP); | ||
| 619 | } | ||
| 620 | 634 | ||
| 621 | /* | 635 | if (num_online_cpus() > 1) { |
| 622 | * not supported here | 636 | cpumask_t mask = cpu_online_map; |
| 623 | */ | 637 | cpu_clear(smp_processor_id(), mask); |
| 624 | int setup_profiling_timer(unsigned int multiplier) | ||
| 625 | { | ||
| 626 | return -EINVAL; | ||
| 627 | } | ||
| 628 | 638 | ||
| 629 | static void | 639 | smp_cross_call(&mask, IPI_CPU_STOP); |
| 630 | on_each_cpu_mask(void (*func)(void *), void *info, int wait, | 640 | } |
| 631 | const struct cpumask *mask) | ||
| 632 | { | ||
| 633 | preempt_disable(); | ||
| 634 | 641 | ||
| 635 | smp_call_function_many(mask, func, info, wait); | 642 | /* Wait up to one second for other CPUs to stop */ |
| 636 | if (cpumask_test_cpu(smp_processor_id(), mask)) | 643 | timeout = USEC_PER_SEC; |
| 637 | func(info); | 644 | while (num_online_cpus() > 1 && timeout--) |
| 645 | udelay(1); | ||
| 638 | 646 | ||
| 639 | preempt_enable(); | 647 | if (num_online_cpus() > 1) |
| 648 | pr_warning("SMP: failed to stop secondary CPUs\n"); | ||
| 640 | } | 649 | } |
| 641 | 650 | ||
| 642 | /**********************************************************************/ | ||
| 643 | |||
| 644 | /* | 651 | /* |
| 645 | * TLB operations | 652 | * not supported here |
| 646 | */ | 653 | */ |
| 647 | struct tlb_args { | 654 | int setup_profiling_timer(unsigned int multiplier) |
| 648 | struct vm_area_struct *ta_vma; | ||
| 649 | unsigned long ta_start; | ||
| 650 | unsigned long ta_end; | ||
| 651 | }; | ||
| 652 | |||
| 653 | static inline void ipi_flush_tlb_all(void *ignored) | ||
| 654 | { | ||
| 655 | local_flush_tlb_all(); | ||
| 656 | } | ||
| 657 | |||
| 658 | static inline void ipi_flush_tlb_mm(void *arg) | ||
| 659 | { | ||
| 660 | struct mm_struct *mm = (struct mm_struct *)arg; | ||
| 661 | |||
| 662 | local_flush_tlb_mm(mm); | ||
| 663 | } | ||
| 664 | |||
| 665 | static inline void ipi_flush_tlb_page(void *arg) | ||
| 666 | { | ||
| 667 | struct tlb_args *ta = (struct tlb_args *)arg; | ||
| 668 | |||
| 669 | local_flush_tlb_page(ta->ta_vma, ta->ta_start); | ||
| 670 | } | ||
| 671 | |||
| 672 | static inline void ipi_flush_tlb_kernel_page(void *arg) | ||
| 673 | { | ||
| 674 | struct tlb_args *ta = (struct tlb_args *)arg; | ||
| 675 | |||
| 676 | local_flush_tlb_kernel_page(ta->ta_start); | ||
| 677 | } | ||
| 678 | |||
| 679 | static inline void ipi_flush_tlb_range(void *arg) | ||
| 680 | { | ||
| 681 | struct tlb_args *ta = (struct tlb_args *)arg; | ||
| 682 | |||
| 683 | local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end); | ||
| 684 | } | ||
| 685 | |||
| 686 | static inline void ipi_flush_tlb_kernel_range(void *arg) | ||
| 687 | { | ||
| 688 | struct tlb_args *ta = (struct tlb_args *)arg; | ||
| 689 | |||
| 690 | local_flush_tlb_kernel_range(ta->ta_start, ta->ta_end); | ||
| 691 | } | ||
| 692 | |||
| 693 | void flush_tlb_all(void) | ||
| 694 | { | ||
| 695 | if (tlb_ops_need_broadcast()) | ||
| 696 | on_each_cpu(ipi_flush_tlb_all, NULL, 1); | ||
| 697 | else | ||
| 698 | local_flush_tlb_all(); | ||
| 699 | } | ||
| 700 | |||
| 701 | void flush_tlb_mm(struct mm_struct *mm) | ||
| 702 | { | ||
| 703 | if (tlb_ops_need_broadcast()) | ||
| 704 | on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, mm_cpumask(mm)); | ||
| 705 | else | ||
| 706 | local_flush_tlb_mm(mm); | ||
| 707 | } | ||
| 708 | |||
| 709 | void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) | ||
| 710 | { | ||
| 711 | if (tlb_ops_need_broadcast()) { | ||
| 712 | struct tlb_args ta; | ||
| 713 | ta.ta_vma = vma; | ||
| 714 | ta.ta_start = uaddr; | ||
| 715 | on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, mm_cpumask(vma->vm_mm)); | ||
| 716 | } else | ||
| 717 | local_flush_tlb_page(vma, uaddr); | ||
| 718 | } | ||
| 719 | |||
| 720 | void flush_tlb_kernel_page(unsigned long kaddr) | ||
| 721 | { | ||
| 722 | if (tlb_ops_need_broadcast()) { | ||
| 723 | struct tlb_args ta; | ||
| 724 | ta.ta_start = kaddr; | ||
| 725 | on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1); | ||
| 726 | } else | ||
| 727 | local_flush_tlb_kernel_page(kaddr); | ||
| 728 | } | ||
| 729 | |||
| 730 | void flush_tlb_range(struct vm_area_struct *vma, | ||
| 731 | unsigned long start, unsigned long end) | ||
| 732 | { | ||
| 733 | if (tlb_ops_need_broadcast()) { | ||
| 734 | struct tlb_args ta; | ||
| 735 | ta.ta_vma = vma; | ||
| 736 | ta.ta_start = start; | ||
| 737 | ta.ta_end = end; | ||
| 738 | on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, mm_cpumask(vma->vm_mm)); | ||
| 739 | } else | ||
| 740 | local_flush_tlb_range(vma, start, end); | ||
| 741 | } | ||
| 742 | |||
| 743 | void flush_tlb_kernel_range(unsigned long start, unsigned long end) | ||
| 744 | { | 655 | { |
| 745 | if (tlb_ops_need_broadcast()) { | 656 | return -EINVAL; |
| 746 | struct tlb_args ta; | ||
| 747 | ta.ta_start = start; | ||
| 748 | ta.ta_end = end; | ||
| 749 | on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1); | ||
| 750 | } else | ||
| 751 | local_flush_tlb_kernel_range(start, end); | ||
| 752 | } | 657 | } |
diff --git a/arch/arm/kernel/smp_tlb.c b/arch/arm/kernel/smp_tlb.c new file mode 100644 index 000000000000..7dcb35285be7 --- /dev/null +++ b/arch/arm/kernel/smp_tlb.c | |||
| @@ -0,0 +1,139 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/kernel/smp_tlb.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 2002 ARM Limited, All Rights Reserved. | ||
| 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 | #include <linux/preempt.h> | ||
| 11 | #include <linux/smp.h> | ||
| 12 | |||
| 13 | #include <asm/smp_plat.h> | ||
| 14 | #include <asm/tlbflush.h> | ||
| 15 | |||
| 16 | static void on_each_cpu_mask(void (*func)(void *), void *info, int wait, | ||
| 17 | const struct cpumask *mask) | ||
| 18 | { | ||
| 19 | preempt_disable(); | ||
| 20 | |||
| 21 | smp_call_function_many(mask, func, info, wait); | ||
| 22 | if (cpumask_test_cpu(smp_processor_id(), mask)) | ||
| 23 | func(info); | ||
| 24 | |||
| 25 | preempt_enable(); | ||
| 26 | } | ||
| 27 | |||
| 28 | /**********************************************************************/ | ||
| 29 | |||
| 30 | /* | ||
| 31 | * TLB operations | ||
| 32 | */ | ||
| 33 | struct tlb_args { | ||
| 34 | struct vm_area_struct *ta_vma; | ||
| 35 | unsigned long ta_start; | ||
| 36 | unsigned long ta_end; | ||
| 37 | }; | ||
| 38 | |||
| 39 | static inline void ipi_flush_tlb_all(void *ignored) | ||
| 40 | { | ||
| 41 | local_flush_tlb_all(); | ||
| 42 | } | ||
| 43 | |||
| 44 | static inline void ipi_flush_tlb_mm(void *arg) | ||
| 45 | { | ||
| 46 | struct mm_struct *mm = (struct mm_struct *)arg; | ||
| 47 | |||
| 48 | local_flush_tlb_mm(mm); | ||
| 49 | } | ||
| 50 | |||
| 51 | static inline void ipi_flush_tlb_page(void *arg) | ||
| 52 | { | ||
| 53 | struct tlb_args *ta = (struct tlb_args *)arg; | ||
| 54 | |||
| 55 | local_flush_tlb_page(ta->ta_vma, ta->ta_start); | ||
| 56 | } | ||
| 57 | |||
| 58 | static inline void ipi_flush_tlb_kernel_page(void *arg) | ||
| 59 | { | ||
| 60 | struct tlb_args *ta = (struct tlb_args *)arg; | ||
| 61 | |||
| 62 | local_flush_tlb_kernel_page(ta->ta_start); | ||
| 63 | } | ||
| 64 | |||
| 65 | static inline void ipi_flush_tlb_range(void *arg) | ||
| 66 | { | ||
| 67 | struct tlb_args *ta = (struct tlb_args *)arg; | ||
| 68 | |||
| 69 | local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end); | ||
| 70 | } | ||
| 71 | |||
| 72 | static inline void ipi_flush_tlb_kernel_range(void *arg) | ||
| 73 | { | ||
| 74 | struct tlb_args *ta = (struct tlb_args *)arg; | ||
| 75 | |||
| 76 | local_flush_tlb_kernel_range(ta->ta_start, ta->ta_end); | ||
| 77 | } | ||
| 78 | |||
| 79 | void flush_tlb_all(void) | ||
| 80 | { | ||
| 81 | if (tlb_ops_need_broadcast()) | ||
| 82 | on_each_cpu(ipi_flush_tlb_all, NULL, 1); | ||
| 83 | else | ||
| 84 | local_flush_tlb_all(); | ||
| 85 | } | ||
| 86 | |||
| 87 | void flush_tlb_mm(struct mm_struct *mm) | ||
| 88 | { | ||
| 89 | if (tlb_ops_need_broadcast()) | ||
| 90 | on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, mm_cpumask(mm)); | ||
| 91 | else | ||
| 92 | local_flush_tlb_mm(mm); | ||
| 93 | } | ||
| 94 | |||
| 95 | void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) | ||
| 96 | { | ||
| 97 | if (tlb_ops_need_broadcast()) { | ||
| 98 | struct tlb_args ta; | ||
| 99 | ta.ta_vma = vma; | ||
| 100 | ta.ta_start = uaddr; | ||
| 101 | on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, mm_cpumask(vma->vm_mm)); | ||
| 102 | } else | ||
| 103 | local_flush_tlb_page(vma, uaddr); | ||
| 104 | } | ||
| 105 | |||
| 106 | void flush_tlb_kernel_page(unsigned long kaddr) | ||
| 107 | { | ||
| 108 | if (tlb_ops_need_broadcast()) { | ||
| 109 | struct tlb_args ta; | ||
| 110 | ta.ta_start = kaddr; | ||
| 111 | on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1); | ||
| 112 | } else | ||
| 113 | local_flush_tlb_kernel_page(kaddr); | ||
| 114 | } | ||
| 115 | |||
| 116 | void flush_tlb_range(struct vm_area_struct *vma, | ||
| 117 | unsigned long start, unsigned long end) | ||
| 118 | { | ||
| 119 | if (tlb_ops_need_broadcast()) { | ||
| 120 | struct tlb_args ta; | ||
| 121 | ta.ta_vma = vma; | ||
| 122 | ta.ta_start = start; | ||
| 123 | ta.ta_end = end; | ||
| 124 | on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, mm_cpumask(vma->vm_mm)); | ||
| 125 | } else | ||
| 126 | local_flush_tlb_range(vma, start, end); | ||
| 127 | } | ||
| 128 | |||
| 129 | void flush_tlb_kernel_range(unsigned long start, unsigned long end) | ||
| 130 | { | ||
| 131 | if (tlb_ops_need_broadcast()) { | ||
| 132 | struct tlb_args ta; | ||
| 133 | ta.ta_start = start; | ||
| 134 | ta.ta_end = end; | ||
| 135 | on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1); | ||
| 136 | } else | ||
| 137 | local_flush_tlb_kernel_range(start, end); | ||
| 138 | } | ||
| 139 | |||
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index 35882fbf37f9..24585d97c104 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
| @@ -150,13 +150,3 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk) | |||
| 150 | 150 | ||
| 151 | clockevents_register_device(clk); | 151 | clockevents_register_device(clk); |
| 152 | } | 152 | } |
| 153 | |||
| 154 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 155 | /* | ||
| 156 | * take a local timer down | ||
| 157 | */ | ||
| 158 | void twd_timer_stop(void) | ||
| 159 | { | ||
| 160 | __raw_writel(0, twd_base + TWD_TIMER_CONTROL); | ||
| 161 | } | ||
| 162 | #endif | ||
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c index 20b7411e47fd..c2e112e1a05f 100644 --- a/arch/arm/kernel/stacktrace.c +++ b/arch/arm/kernel/stacktrace.c | |||
| @@ -28,7 +28,7 @@ int notrace unwind_frame(struct stackframe *frame) | |||
| 28 | 28 | ||
| 29 | /* only go to a higher address on the stack */ | 29 | /* only go to a higher address on the stack */ |
| 30 | low = frame->sp; | 30 | low = frame->sp; |
| 31 | high = ALIGN(low, THREAD_SIZE) + THREAD_SIZE; | 31 | high = ALIGN(low, THREAD_SIZE); |
| 32 | 32 | ||
| 33 | /* check current frame pointer is within bounds */ | 33 | /* check current frame pointer is within bounds */ |
| 34 | if (fp < (low + 12) || fp + 4 >= high) | 34 | if (fp < (low + 12) || fp + 4 >= high) |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 87abca018054..e02f4f7537c5 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
| @@ -55,10 +55,7 @@ static void dump_mem(const char *, const char *, unsigned long, unsigned long); | |||
| 55 | void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame) | 55 | void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame) |
| 56 | { | 56 | { |
| 57 | #ifdef CONFIG_KALLSYMS | 57 | #ifdef CONFIG_KALLSYMS |
| 58 | char sym1[KSYM_SYMBOL_LEN], sym2[KSYM_SYMBOL_LEN]; | 58 | printk("[<%08lx>] (%pS) from [<%08lx>] (%pS)\n", where, (void *)where, from, (void *)from); |
| 59 | sprint_symbol(sym1, where); | ||
| 60 | sprint_symbol(sym2, from); | ||
| 61 | printk("[<%08lx>] (%s) from [<%08lx>] (%s)\n", where, sym1, from, sym2); | ||
| 62 | #else | 59 | #else |
| 63 | printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from); | 60 | printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from); |
| 64 | #endif | 61 | #endif |
diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c index 2a161765f6d5..d2cb0b3c9872 100644 --- a/arch/arm/kernel/unwind.c +++ b/arch/arm/kernel/unwind.c | |||
| @@ -279,7 +279,7 @@ int unwind_frame(struct stackframe *frame) | |||
| 279 | 279 | ||
| 280 | /* only go to a higher address on the stack */ | 280 | /* only go to a higher address on the stack */ |
| 281 | low = frame->sp; | 281 | low = frame->sp; |
| 282 | high = ALIGN(low, THREAD_SIZE) + THREAD_SIZE; | 282 | high = ALIGN(low, THREAD_SIZE); |
| 283 | 283 | ||
| 284 | pr_debug("%s(pc = %08lx lr = %08lx sp = %08lx)\n", __func__, | 284 | pr_debug("%s(pc = %08lx lr = %08lx sp = %08lx)\n", __func__, |
| 285 | frame->pc, frame->lr, frame->sp); | 285 | frame->pc, frame->lr, frame->sp); |
diff --git a/arch/arm/lib/findbit.S b/arch/arm/lib/findbit.S index 1e4cbd4e7be9..64f6bc1a9132 100644 --- a/arch/arm/lib/findbit.S +++ b/arch/arm/lib/findbit.S | |||
| @@ -174,8 +174,8 @@ ENDPROC(_find_next_bit_be) | |||
| 174 | */ | 174 | */ |
| 175 | .L_found: | 175 | .L_found: |
| 176 | #if __LINUX_ARM_ARCH__ >= 5 | 176 | #if __LINUX_ARM_ARCH__ >= 5 |
| 177 | rsb r1, r3, #0 | 177 | rsb r0, r3, #0 |
| 178 | and r3, r3, r1 | 178 | and r3, r3, r0 |
| 179 | clz r3, r3 | 179 | clz r3, r3 |
| 180 | rsb r3, r3, #31 | 180 | rsb r3, r3, #31 |
| 181 | add r0, r2, r3 | 181 | add r0, r2, r3 |
| @@ -190,5 +190,7 @@ ENDPROC(_find_next_bit_be) | |||
| 190 | addeq r2, r2, #1 | 190 | addeq r2, r2, #1 |
| 191 | mov r0, r2 | 191 | mov r0, r2 |
| 192 | #endif | 192 | #endif |
| 193 | cmp r1, r0 @ Clamp to maxbit | ||
| 194 | movlo r0, r1 | ||
| 193 | mov pc, lr | 195 | mov pc, lr |
| 194 | 196 | ||
diff --git a/arch/arm/mach-aaec2000/include/mach/vmalloc.h b/arch/arm/mach-aaec2000/include/mach/vmalloc.h index cff4e0a996ce..a6299e8321bd 100644 --- a/arch/arm/mach-aaec2000/include/mach/vmalloc.h +++ b/arch/arm/mach-aaec2000/include/mach/vmalloc.h | |||
| @@ -11,6 +11,6 @@ | |||
| 11 | #ifndef __ASM_ARCH_VMALLOC_H | 11 | #ifndef __ASM_ARCH_VMALLOC_H |
| 12 | #define __ASM_ARCH_VMALLOC_H | 12 | #define __ASM_ARCH_VMALLOC_H |
| 13 | 13 | ||
| 14 | #define VMALLOC_END 0xd0000000 | 14 | #define VMALLOC_END 0xd0000000UL |
| 15 | 15 | ||
| 16 | #endif /* __ASM_ARCH_VMALLOC_H */ | 16 | #endif /* __ASM_ARCH_VMALLOC_H */ |
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 821eb842795f..62d686f0b426 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile | |||
| @@ -24,8 +24,8 @@ obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o | |||
| 24 | 24 | ||
| 25 | # AT91RM9200 board-specific support | 25 | # AT91RM9200 board-specific support |
| 26 | obj-$(CONFIG_MACH_ONEARM) += board-1arm.o | 26 | obj-$(CONFIG_MACH_ONEARM) += board-1arm.o |
| 27 | obj-$(CONFIG_ARCH_AT91RM9200DK) += board-dk.o | 27 | obj-$(CONFIG_ARCH_AT91RM9200DK) += board-rm9200dk.o |
| 28 | obj-$(CONFIG_MACH_AT91RM9200EK) += board-ek.o | 28 | obj-$(CONFIG_MACH_AT91RM9200EK) += board-rm9200ek.o |
| 29 | obj-$(CONFIG_MACH_CSB337) += board-csb337.o | 29 | obj-$(CONFIG_MACH_CSB337) += board-csb337.o |
| 30 | obj-$(CONFIG_MACH_CSB637) += board-csb637.o | 30 | obj-$(CONFIG_MACH_CSB637) += board-csb637.o |
| 31 | obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o | 31 | obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o |
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index 9338825cfcd7..7b539228e0ef 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c | |||
| @@ -1106,51 +1106,6 @@ static inline void configure_usart3_pins(unsigned pins) | |||
| 1106 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ | 1106 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ |
| 1107 | struct platform_device *atmel_default_console_device; /* the serial console device */ | 1107 | struct platform_device *atmel_default_console_device; /* the serial console device */ |
| 1108 | 1108 | ||
| 1109 | void __init __deprecated at91_init_serial(struct at91_uart_config *config) | ||
| 1110 | { | ||
| 1111 | int i; | ||
| 1112 | |||
| 1113 | /* Fill in list of supported UARTs */ | ||
| 1114 | for (i = 0; i < config->nr_tty; i++) { | ||
| 1115 | switch (config->tty_map[i]) { | ||
| 1116 | case 0: | ||
| 1117 | configure_usart0_pins(ATMEL_UART_CTS | ATMEL_UART_RTS); | ||
| 1118 | at91_uarts[i] = &at91rm9200_uart0_device; | ||
| 1119 | at91_clock_associate("usart0_clk", &at91rm9200_uart0_device.dev, "usart"); | ||
| 1120 | break; | ||
| 1121 | case 1: | ||
| 1122 | configure_usart1_pins(ATMEL_UART_CTS | ATMEL_UART_RTS | ATMEL_UART_DSR | ATMEL_UART_DTR | ATMEL_UART_DCD | ATMEL_UART_RI); | ||
| 1123 | at91_uarts[i] = &at91rm9200_uart1_device; | ||
| 1124 | at91_clock_associate("usart1_clk", &at91rm9200_uart1_device.dev, "usart"); | ||
| 1125 | break; | ||
| 1126 | case 2: | ||
| 1127 | configure_usart2_pins(0); | ||
| 1128 | at91_uarts[i] = &at91rm9200_uart2_device; | ||
| 1129 | at91_clock_associate("usart2_clk", &at91rm9200_uart2_device.dev, "usart"); | ||
| 1130 | break; | ||
| 1131 | case 3: | ||
| 1132 | configure_usart3_pins(0); | ||
| 1133 | at91_uarts[i] = &at91rm9200_uart3_device; | ||
| 1134 | at91_clock_associate("usart3_clk", &at91rm9200_uart3_device.dev, "usart"); | ||
| 1135 | break; | ||
| 1136 | case 4: | ||
| 1137 | configure_dbgu_pins(); | ||
| 1138 | at91_uarts[i] = &at91rm9200_dbgu_device; | ||
| 1139 | at91_clock_associate("mck", &at91rm9200_dbgu_device.dev, "usart"); | ||
| 1140 | break; | ||
| 1141 | default: | ||
| 1142 | continue; | ||
| 1143 | } | ||
| 1144 | at91_uarts[i]->id = i; /* update ID number to mapped ID */ | ||
| 1145 | } | ||
| 1146 | |||
| 1147 | /* Set serial console device */ | ||
| 1148 | if (config->console_tty < ATMEL_MAX_UART) | ||
| 1149 | atmel_default_console_device = at91_uarts[config->console_tty]; | ||
| 1150 | if (!atmel_default_console_device) | ||
| 1151 | printk(KERN_INFO "AT91: No default serial console defined.\n"); | ||
| 1152 | } | ||
| 1153 | |||
| 1154 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) | 1109 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) |
| 1155 | { | 1110 | { |
| 1156 | struct platform_device *pdev; | 1111 | struct platform_device *pdev; |
diff --git a/arch/arm/mach-at91/board-1arm.c b/arch/arm/mach-at91/board-1arm.c index 46bdc82d3fbf..8a3fc84847c1 100644 --- a/arch/arm/mach-at91/board-1arm.c +++ b/arch/arm/mach-at91/board-1arm.c | |||
| @@ -39,24 +39,24 @@ | |||
| 39 | #include "generic.h" | 39 | #include "generic.h" |
| 40 | 40 | ||
| 41 | 41 | ||
| 42 | /* | ||
| 43 | * Serial port configuration. | ||
| 44 | * 0 .. 3 = USART0 .. USART3 | ||
| 45 | * 4 = DBGU | ||
| 46 | */ | ||
| 47 | static struct at91_uart_config __initdata onearm_uart_config = { | ||
| 48 | .console_tty = 0, /* ttyS0 */ | ||
| 49 | .nr_tty = 3, | ||
| 50 | .tty_map = { 4, 0, 1, -1, -1 }, /* ttyS0, ..., ttyS4 */ | ||
| 51 | }; | ||
| 52 | |||
| 53 | static void __init onearm_map_io(void) | 42 | static void __init onearm_map_io(void) |
| 54 | { | 43 | { |
| 55 | /* Initialize processor: 18.432 MHz crystal */ | 44 | /* Initialize processor: 18.432 MHz crystal */ |
| 56 | at91rm9200_initialize(18432000, AT91RM9200_PQFP); | 45 | at91rm9200_initialize(18432000, AT91RM9200_PQFP); |
| 57 | 46 | ||
| 58 | /* Setup the serial ports and console */ | 47 | /* DBGU on ttyS0. (Rx & Tx only) */ |
| 59 | at91_init_serial(&onearm_uart_config); | 48 | at91_register_uart(0, 0, 0); |
| 49 | |||
| 50 | /* USART0 on ttyS1 (Rx, Tx, CTS, RTS) */ | ||
| 51 | at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); | ||
| 52 | |||
| 53 | /* USART1 on ttyS2 (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ | ||
| 54 | at91_register_uart(AT91RM9200_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS | ||
| 55 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD | ||
| 56 | | ATMEL_UART_RI); | ||
| 57 | |||
| 58 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
| 59 | at91_set_serial_console(0); | ||
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | static void __init onearm_init_irq(void) | 62 | static void __init onearm_init_irq(void) |
diff --git a/arch/arm/mach-at91/board-kafa.c b/arch/arm/mach-at91/board-kafa.c index c0ce79d431a0..d2e1f4ec1fcc 100644 --- a/arch/arm/mach-at91/board-kafa.c +++ b/arch/arm/mach-at91/board-kafa.c | |||
| @@ -39,17 +39,6 @@ | |||
| 39 | #include "generic.h" | 39 | #include "generic.h" |
| 40 | 40 | ||
| 41 | 41 | ||
| 42 | /* | ||
| 43 | * Serial port configuration. | ||
| 44 | * 0 .. 3 = USART0 .. USART3 | ||
| 45 | * 4 = DBGU | ||
| 46 | */ | ||
| 47 | static struct at91_uart_config __initdata kafa_uart_config = { | ||
| 48 | .console_tty = 0, /* ttyS0 */ | ||
| 49 | .nr_tty = 2, | ||
| 50 | .tty_map = { 4, 0, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
| 51 | }; | ||
| 52 | |||
| 53 | static void __init kafa_map_io(void) | 42 | static void __init kafa_map_io(void) |
| 54 | { | 43 | { |
| 55 | /* Initialize processor: 18.432 MHz crystal */ | 44 | /* Initialize processor: 18.432 MHz crystal */ |
| @@ -58,8 +47,14 @@ static void __init kafa_map_io(void) | |||
| 58 | /* Set up the LEDs */ | 47 | /* Set up the LEDs */ |
| 59 | at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4); | 48 | at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4); |
| 60 | 49 | ||
| 61 | /* Setup the serial ports and console */ | 50 | /* DBGU on ttyS0. (Rx & Tx only) */ |
| 62 | at91_init_serial(&kafa_uart_config); | 51 | at91_register_uart(0, 0, 0); |
| 52 | |||
| 53 | /* USART0 on ttyS1 (Rx, Tx, CTS, RTS) */ | ||
| 54 | at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); | ||
| 55 | |||
| 56 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
| 57 | at91_set_serial_console(0); | ||
| 63 | } | 58 | } |
| 64 | 59 | ||
| 65 | static void __init kafa_init_irq(void) | 60 | static void __init kafa_init_irq(void) |
diff --git a/arch/arm/mach-at91/board-picotux200.c b/arch/arm/mach-at91/board-picotux200.c index 9d833bbc592d..55dad3a46547 100644 --- a/arch/arm/mach-at91/board-picotux200.c +++ b/arch/arm/mach-at91/board-picotux200.c | |||
| @@ -43,24 +43,21 @@ | |||
| 43 | #include "generic.h" | 43 | #include "generic.h" |
| 44 | 44 | ||
| 45 | 45 | ||
| 46 | /* | ||
| 47 | * Serial port configuration. | ||
| 48 | * 0 .. 3 = USART0 .. USART3 | ||
| 49 | * 4 = DBGU | ||
| 50 | */ | ||
| 51 | static struct at91_uart_config __initdata picotux200_uart_config = { | ||
| 52 | .console_tty = 0, /* ttyS0 */ | ||
| 53 | .nr_tty = 2, | ||
| 54 | .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
| 55 | }; | ||
| 56 | |||
| 57 | static void __init picotux200_map_io(void) | 46 | static void __init picotux200_map_io(void) |
| 58 | { | 47 | { |
| 59 | /* Initialize processor: 18.432 MHz crystal */ | 48 | /* Initialize processor: 18.432 MHz crystal */ |
| 60 | at91rm9200_initialize(18432000, AT91RM9200_BGA); | 49 | at91rm9200_initialize(18432000, AT91RM9200_BGA); |
| 61 | 50 | ||
| 62 | /* Setup the serial ports and console */ | 51 | /* DBGU on ttyS0. (Rx & Tx only) */ |
| 63 | at91_init_serial(&picotux200_uart_config); | 52 | at91_register_uart(0, 0, 0); |
| 53 | |||
| 54 | /* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ | ||
| 55 | at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS | ||
| 56 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD | ||
| 57 | | ATMEL_UART_RI); | ||
| 58 | |||
| 59 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
| 60 | at91_set_serial_console(0); | ||
| 64 | } | 61 | } |
| 65 | 62 | ||
| 66 | static void __init picotux200_init_irq(void) | 63 | static void __init picotux200_init_irq(void) |
| @@ -77,11 +74,6 @@ static struct at91_usbh_data __initdata picotux200_usbh_data = { | |||
| 77 | .ports = 1, | 74 | .ports = 1, |
| 78 | }; | 75 | }; |
| 79 | 76 | ||
| 80 | // static struct at91_udc_data __initdata picotux200_udc_data = { | ||
| 81 | // .vbus_pin = AT91_PIN_PD4, | ||
| 82 | // .pullup_pin = AT91_PIN_PD5, | ||
| 83 | // }; | ||
| 84 | |||
| 85 | static struct at91_mmc_data __initdata picotux200_mmc_data = { | 77 | static struct at91_mmc_data __initdata picotux200_mmc_data = { |
| 86 | .det_pin = AT91_PIN_PB27, | 78 | .det_pin = AT91_PIN_PB27, |
| 87 | .slot_b = 0, | 79 | .slot_b = 0, |
| @@ -89,21 +81,6 @@ static struct at91_mmc_data __initdata picotux200_mmc_data = { | |||
| 89 | .wp_pin = AT91_PIN_PA17, | 81 | .wp_pin = AT91_PIN_PA17, |
| 90 | }; | 82 | }; |
| 91 | 83 | ||
| 92 | // static struct spi_board_info picotux200_spi_devices[] = { | ||
| 93 | // { /* DataFlash chip */ | ||
| 94 | // .modalias = "mtd_dataflash", | ||
| 95 | // .chip_select = 0, | ||
| 96 | // .max_speed_hz = 15 * 1000 * 1000, | ||
| 97 | // }, | ||
| 98 | // #ifdef CONFIG_MTD_AT91_DATAFLASH_CARD | ||
| 99 | // { /* DataFlash card */ | ||
| 100 | // .modalias = "mtd_dataflash", | ||
| 101 | // .chip_select = 3, | ||
| 102 | // .max_speed_hz = 15 * 1000 * 1000, | ||
| 103 | // }, | ||
| 104 | // #endif | ||
| 105 | // }; | ||
| 106 | |||
| 107 | #define PICOTUX200_FLASH_BASE AT91_CHIPSELECT_0 | 84 | #define PICOTUX200_FLASH_BASE AT91_CHIPSELECT_0 |
| 108 | #define PICOTUX200_FLASH_SIZE SZ_4M | 85 | #define PICOTUX200_FLASH_SIZE SZ_4M |
| 109 | 86 | ||
| @@ -135,21 +112,11 @@ static void __init picotux200_board_init(void) | |||
| 135 | at91_add_device_eth(&picotux200_eth_data); | 112 | at91_add_device_eth(&picotux200_eth_data); |
| 136 | /* USB Host */ | 113 | /* USB Host */ |
| 137 | at91_add_device_usbh(&picotux200_usbh_data); | 114 | at91_add_device_usbh(&picotux200_usbh_data); |
| 138 | /* USB Device */ | ||
| 139 | // at91_add_device_udc(&picotux200_udc_data); | ||
| 140 | // at91_set_multi_drive(picotux200_udc_data.pullup_pin, 1); /* pullup_pin is connected to reset */ | ||
| 141 | /* I2C */ | 115 | /* I2C */ |
| 142 | at91_add_device_i2c(NULL, 0); | 116 | at91_add_device_i2c(NULL, 0); |
| 143 | /* SPI */ | ||
| 144 | // at91_add_device_spi(picotux200_spi_devices, ARRAY_SIZE(picotux200_spi_devices)); | ||
| 145 | #ifdef CONFIG_MTD_AT91_DATAFLASH_CARD | ||
| 146 | /* DataFlash card */ | ||
| 147 | at91_set_gpio_output(AT91_PIN_PB22, 0); | ||
| 148 | #else | ||
| 149 | /* MMC */ | 117 | /* MMC */ |
| 150 | at91_set_gpio_output(AT91_PIN_PB22, 1); /* this MMC card slot can optionally use SPI signaling (CS3). */ | 118 | at91_set_gpio_output(AT91_PIN_PB22, 1); /* this MMC card slot can optionally use SPI signaling (CS3). */ |
| 151 | at91_add_device_mmc(0, &picotux200_mmc_data); | 119 | at91_add_device_mmc(0, &picotux200_mmc_data); |
| 152 | #endif | ||
| 153 | /* NOR Flash */ | 120 | /* NOR Flash */ |
| 154 | platform_device_register(&picotux200_flash); | 121 | platform_device_register(&picotux200_flash); |
| 155 | } | 122 | } |
diff --git a/arch/arm/mach-at91/board-dk.c b/arch/arm/mach-at91/board-rm9200dk.c index e14f0e165680..4c1047c8200d 100644 --- a/arch/arm/mach-at91/board-dk.c +++ b/arch/arm/mach-at91/board-rm9200dk.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/arch/arm/mach-at91/board-dk.c | 2 | * linux/arch/arm/mach-at91/board-rm9200dk.c |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2005 SAN People | 4 | * Copyright (C) 2005 SAN People |
| 5 | * | 5 | * |
| @@ -91,10 +91,12 @@ static struct at91_cf_data __initdata dk_cf_data = { | |||
| 91 | // .vcc_pin = ... always powered | 91 | // .vcc_pin = ... always powered |
| 92 | }; | 92 | }; |
| 93 | 93 | ||
| 94 | #ifndef CONFIG_MTD_AT91_DATAFLASH_CARD | ||
| 94 | static struct at91_mmc_data __initdata dk_mmc_data = { | 95 | static struct at91_mmc_data __initdata dk_mmc_data = { |
| 95 | .slot_b = 0, | 96 | .slot_b = 0, |
| 96 | .wire4 = 1, | 97 | .wire4 = 1, |
| 97 | }; | 98 | }; |
| 99 | #endif | ||
| 98 | 100 | ||
| 99 | static struct spi_board_info dk_spi_devices[] = { | 101 | static struct spi_board_info dk_spi_devices[] = { |
| 100 | { /* DataFlash chip */ | 102 | { /* DataFlash chip */ |
diff --git a/arch/arm/mach-at91/board-ek.c b/arch/arm/mach-at91/board-rm9200ek.c index 56e92c4bbc2a..9df1be8818c0 100644 --- a/arch/arm/mach-at91/board-ek.c +++ b/arch/arm/mach-at91/board-rm9200ek.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/arch/arm/mach-at91/board-ek.c | 2 | * linux/arch/arm/mach-at91/board-rm9200ek.c |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2005 SAN People | 4 | * Copyright (C) 2005 SAN People |
| 5 | * | 5 | * |
| @@ -84,12 +84,14 @@ static struct at91_udc_data __initdata ek_udc_data = { | |||
| 84 | .pullup_pin = AT91_PIN_PD5, | 84 | .pullup_pin = AT91_PIN_PD5, |
| 85 | }; | 85 | }; |
| 86 | 86 | ||
| 87 | #ifndef CONFIG_MTD_AT91_DATAFLASH_CARD | ||
| 87 | static struct at91_mmc_data __initdata ek_mmc_data = { | 88 | static struct at91_mmc_data __initdata ek_mmc_data = { |
| 88 | .det_pin = AT91_PIN_PB27, | 89 | .det_pin = AT91_PIN_PB27, |
| 89 | .slot_b = 0, | 90 | .slot_b = 0, |
| 90 | .wire4 = 1, | 91 | .wire4 = 1, |
| 91 | .wp_pin = AT91_PIN_PA17, | 92 | .wp_pin = AT91_PIN_PA17, |
| 92 | }; | 93 | }; |
| 94 | #endif | ||
| 93 | 95 | ||
| 94 | static struct spi_board_info ek_spi_devices[] = { | 96 | static struct spi_board_info ek_spi_devices[] = { |
| 95 | { /* DataFlash chip */ | 97 | { /* DataFlash chip */ |
diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index 89df00a9d2f7..e0f0080eb639 100644 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c | |||
| @@ -387,7 +387,7 @@ static struct spi_board_info yl9200_spi_devices[] = { | |||
| 387 | * EPSON S1D13806 FB (discontinued chip) | 387 | * EPSON S1D13806 FB (discontinued chip) |
| 388 | * EPSON S1D13506 FB | 388 | * EPSON S1D13506 FB |
| 389 | */ | 389 | */ |
| 390 | #if defined(CONFIG_FB_S1D135XX) || defined(CONFIG_FB_S1D13XXX_MODULE) | 390 | #if defined(CONFIG_FB_S1D13XXX) || defined(CONFIG_FB_S1D13XXX_MODULE) |
| 391 | #include <video/s1d13xxxfb.h> | 391 | #include <video/s1d13xxxfb.h> |
| 392 | 392 | ||
| 393 | 393 | ||
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index 58528aa9c8a8..2b499eb343a1 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
| @@ -137,13 +137,7 @@ extern void __init at91_add_device_spi(struct spi_board_info *devices, int nr_de | |||
| 137 | extern void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins); | 137 | extern void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins); |
| 138 | extern void __init at91_set_serial_console(unsigned portnr); | 138 | extern void __init at91_set_serial_console(unsigned portnr); |
| 139 | 139 | ||
| 140 | struct at91_uart_config { | ||
| 141 | unsigned short console_tty; /* tty number of serial console */ | ||
| 142 | unsigned short nr_tty; /* number of serial tty's */ | ||
| 143 | short tty_map[]; /* map UART to tty number */ | ||
| 144 | }; | ||
| 145 | extern struct platform_device *atmel_default_console_device; | 140 | extern struct platform_device *atmel_default_console_device; |
| 146 | extern void __init __deprecated at91_init_serial(struct at91_uart_config *config); | ||
| 147 | 141 | ||
| 148 | struct atmel_uart_data { | 142 | struct atmel_uart_data { |
| 149 | short use_dma_tx; /* use transmit DMA? */ | 143 | short use_dma_tx; /* use transmit DMA? */ |
diff --git a/arch/arm/mach-bcmring/include/mach/vmalloc.h b/arch/arm/mach-bcmring/include/mach/vmalloc.h index 3db3a09fd398..7397bd7817d9 100644 --- a/arch/arm/mach-bcmring/include/mach/vmalloc.h +++ b/arch/arm/mach-bcmring/include/mach/vmalloc.h | |||
| @@ -22,4 +22,4 @@ | |||
| 22 | * 0xe0000000 to 0xefffffff. This gives us 256 MB of vm space and handles | 22 | * 0xe0000000 to 0xefffffff. This gives us 256 MB of vm space and handles |
| 23 | * larger physical memory designs better. | 23 | * larger physical memory designs better. |
| 24 | */ | 24 | */ |
| 25 | #define VMALLOC_END 0xf0000000 | 25 | #define VMALLOC_END 0xf0000000UL |
diff --git a/arch/arm/mach-clps711x/include/mach/vmalloc.h b/arch/arm/mach-clps711x/include/mach/vmalloc.h index 30b3a287ed88..467b96137e47 100644 --- a/arch/arm/mach-clps711x/include/mach/vmalloc.h +++ b/arch/arm/mach-clps711x/include/mach/vmalloc.h | |||
| @@ -17,4 +17,4 @@ | |||
| 17 | * along with this program; if not, write to the Free Software | 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 | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | */ | 19 | */ |
| 20 | #define VMALLOC_END 0xd0000000 | 20 | #define VMALLOC_END 0xd0000000UL |
diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c index 9be261beae7d..2652af124acd 100644 --- a/arch/arm/mach-davinci/dm355.c +++ b/arch/arm/mach-davinci/dm355.c | |||
| @@ -359,8 +359,8 @@ static struct clk_lookup dm355_clks[] = { | |||
| 359 | CLK(NULL, "uart1", &uart1_clk), | 359 | CLK(NULL, "uart1", &uart1_clk), |
| 360 | CLK(NULL, "uart2", &uart2_clk), | 360 | CLK(NULL, "uart2", &uart2_clk), |
| 361 | CLK("i2c_davinci.1", NULL, &i2c_clk), | 361 | CLK("i2c_davinci.1", NULL, &i2c_clk), |
| 362 | CLK("davinci-asp.0", NULL, &asp0_clk), | 362 | CLK("davinci-mcbsp.0", NULL, &asp0_clk), |
| 363 | CLK("davinci-asp.1", NULL, &asp1_clk), | 363 | CLK("davinci-mcbsp.1", NULL, &asp1_clk), |
| 364 | CLK("davinci_mmc.0", NULL, &mmcsd0_clk), | 364 | CLK("davinci_mmc.0", NULL, &mmcsd0_clk), |
| 365 | CLK("davinci_mmc.1", NULL, &mmcsd1_clk), | 365 | CLK("davinci_mmc.1", NULL, &mmcsd1_clk), |
| 366 | CLK("spi_davinci.0", NULL, &spi0_clk), | 366 | CLK("spi_davinci.0", NULL, &spi0_clk), |
| @@ -664,7 +664,7 @@ static struct resource dm355_asp1_resources[] = { | |||
| 664 | }; | 664 | }; |
| 665 | 665 | ||
| 666 | static struct platform_device dm355_asp1_device = { | 666 | static struct platform_device dm355_asp1_device = { |
| 667 | .name = "davinci-asp", | 667 | .name = "davinci-mcbsp", |
| 668 | .id = 1, | 668 | .id = 1, |
| 669 | .num_resources = ARRAY_SIZE(dm355_asp1_resources), | 669 | .num_resources = ARRAY_SIZE(dm355_asp1_resources), |
| 670 | .resource = dm355_asp1_resources, | 670 | .resource = dm355_asp1_resources, |
diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c index a12065e87266..c466d710d3c1 100644 --- a/arch/arm/mach-davinci/dm365.c +++ b/arch/arm/mach-davinci/dm365.c | |||
| @@ -459,7 +459,7 @@ static struct clk_lookup dm365_clks[] = { | |||
| 459 | CLK(NULL, "usb", &usb_clk), | 459 | CLK(NULL, "usb", &usb_clk), |
| 460 | CLK("davinci_emac.1", NULL, &emac_clk), | 460 | CLK("davinci_emac.1", NULL, &emac_clk), |
| 461 | CLK("davinci_voicecodec", NULL, &voicecodec_clk), | 461 | CLK("davinci_voicecodec", NULL, &voicecodec_clk), |
| 462 | CLK("davinci-asp.0", NULL, &asp0_clk), | 462 | CLK("davinci-mcbsp", NULL, &asp0_clk), |
| 463 | CLK(NULL, "rto", &rto_clk), | 463 | CLK(NULL, "rto", &rto_clk), |
| 464 | CLK(NULL, "mjcp", &mjcp_clk), | 464 | CLK(NULL, "mjcp", &mjcp_clk), |
| 465 | CLK(NULL, NULL, NULL), | 465 | CLK(NULL, NULL, NULL), |
| @@ -922,8 +922,8 @@ static struct resource dm365_asp_resources[] = { | |||
| 922 | }; | 922 | }; |
| 923 | 923 | ||
| 924 | static struct platform_device dm365_asp_device = { | 924 | static struct platform_device dm365_asp_device = { |
| 925 | .name = "davinci-asp", | 925 | .name = "davinci-mcbsp", |
| 926 | .id = 0, | 926 | .id = -1, |
| 927 | .num_resources = ARRAY_SIZE(dm365_asp_resources), | 927 | .num_resources = ARRAY_SIZE(dm365_asp_resources), |
| 928 | .resource = dm365_asp_resources, | 928 | .resource = dm365_asp_resources, |
| 929 | }; | 929 | }; |
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c index 0608dd776a16..9a2376b3137c 100644 --- a/arch/arm/mach-davinci/dm644x.c +++ b/arch/arm/mach-davinci/dm644x.c | |||
| @@ -302,7 +302,7 @@ static struct clk_lookup dm644x_clks[] = { | |||
| 302 | CLK("davinci_emac.1", NULL, &emac_clk), | 302 | CLK("davinci_emac.1", NULL, &emac_clk), |
| 303 | CLK("i2c_davinci.1", NULL, &i2c_clk), | 303 | CLK("i2c_davinci.1", NULL, &i2c_clk), |
| 304 | CLK("palm_bk3710", NULL, &ide_clk), | 304 | CLK("palm_bk3710", NULL, &ide_clk), |
| 305 | CLK("davinci-asp", NULL, &asp_clk), | 305 | CLK("davinci-mcbsp", NULL, &asp_clk), |
| 306 | CLK("davinci_mmc.0", NULL, &mmcsd_clk), | 306 | CLK("davinci_mmc.0", NULL, &mmcsd_clk), |
| 307 | CLK(NULL, "spi", &spi_clk), | 307 | CLK(NULL, "spi", &spi_clk), |
| 308 | CLK(NULL, "gpio", &gpio_clk), | 308 | CLK(NULL, "gpio", &gpio_clk), |
| @@ -580,7 +580,7 @@ static struct resource dm644x_asp_resources[] = { | |||
| 580 | }; | 580 | }; |
| 581 | 581 | ||
| 582 | static struct platform_device dm644x_asp_device = { | 582 | static struct platform_device dm644x_asp_device = { |
| 583 | .name = "davinci-asp", | 583 | .name = "davinci-mcbsp", |
| 584 | .id = -1, | 584 | .id = -1, |
| 585 | .num_resources = ARRAY_SIZE(dm644x_asp_resources), | 585 | .num_resources = ARRAY_SIZE(dm644x_asp_resources), |
| 586 | .resource = dm644x_asp_resources, | 586 | .resource = dm644x_asp_resources, |
diff --git a/arch/arm/mach-ebsa110/include/mach/vmalloc.h b/arch/arm/mach-ebsa110/include/mach/vmalloc.h index 60bde56fba4c..ea141b7a3e03 100644 --- a/arch/arm/mach-ebsa110/include/mach/vmalloc.h +++ b/arch/arm/mach-ebsa110/include/mach/vmalloc.h | |||
| @@ -7,4 +7,4 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | #define VMALLOC_END 0xdf000000 | 10 | #define VMALLOC_END 0xdf000000UL |
diff --git a/arch/arm/mach-ep93xx/include/mach/dma.h b/arch/arm/mach-ep93xx/include/mach/dma.h index 3a5961d3f3b1..5e31b2b25da9 100644 --- a/arch/arm/mach-ep93xx/include/mach/dma.h +++ b/arch/arm/mach-ep93xx/include/mach/dma.h | |||
| @@ -1,5 +1,13 @@ | |||
| 1 | /* | 1 | /** |
| 2 | * arch/arm/mach-ep93xx/include/mach/dma.h | 2 | * DOC: EP93xx DMA M2P memory to peripheral and peripheral to memory engine |
| 3 | * | ||
| 4 | * The EP93xx DMA M2P subsystem handles DMA transfers between memory and | ||
| 5 | * peripherals. DMA M2P channels are available for audio, UARTs and IrDA. | ||
| 6 | * See chapter 10 of the EP93xx users guide for full details on the DMA M2P | ||
| 7 | * engine. | ||
| 8 | * | ||
| 9 | * See sound/soc/ep93xx/ep93xx-pcm.c for an example use of the DMA M2P code. | ||
| 10 | * | ||
| 3 | */ | 11 | */ |
| 4 | 12 | ||
| 5 | #ifndef __ASM_ARCH_DMA_H | 13 | #ifndef __ASM_ARCH_DMA_H |
| @@ -8,12 +16,34 @@ | |||
| 8 | #include <linux/list.h> | 16 | #include <linux/list.h> |
| 9 | #include <linux/types.h> | 17 | #include <linux/types.h> |
| 10 | 18 | ||
| 19 | /** | ||
| 20 | * struct ep93xx_dma_buffer - Information about a buffer to be transferred | ||
| 21 | * using the DMA M2P engine | ||
| 22 | * | ||
| 23 | * @list: Entry in DMA buffer list | ||
| 24 | * @bus_addr: Physical address of the buffer | ||
| 25 | * @size: Size of the buffer in bytes | ||
| 26 | */ | ||
| 11 | struct ep93xx_dma_buffer { | 27 | struct ep93xx_dma_buffer { |
| 12 | struct list_head list; | 28 | struct list_head list; |
| 13 | u32 bus_addr; | 29 | u32 bus_addr; |
| 14 | u16 size; | 30 | u16 size; |
| 15 | }; | 31 | }; |
| 16 | 32 | ||
| 33 | /** | ||
| 34 | * struct ep93xx_dma_m2p_client - Information about a DMA M2P client | ||
| 35 | * | ||
| 36 | * @name: Unique name for this client | ||
| 37 | * @flags: Client flags | ||
| 38 | * @cookie: User data to pass to callback functions | ||
| 39 | * @buffer_started: Non NULL function to call when a transfer is started. | ||
| 40 | * The arguments are the user data cookie and the DMA | ||
| 41 | * buffer which is starting. | ||
| 42 | * @buffer_finished: Non NULL function to call when a transfer is completed. | ||
| 43 | * The arguments are the user data cookie, the DMA buffer | ||
| 44 | * which has completed, and a boolean flag indicating if | ||
| 45 | * the transfer had an error. | ||
| 46 | */ | ||
| 17 | struct ep93xx_dma_m2p_client { | 47 | struct ep93xx_dma_m2p_client { |
| 18 | char *name; | 48 | char *name; |
| 19 | u8 flags; | 49 | u8 flags; |
| @@ -24,10 +54,11 @@ struct ep93xx_dma_m2p_client { | |||
| 24 | struct ep93xx_dma_buffer *buf, | 54 | struct ep93xx_dma_buffer *buf, |
| 25 | int bytes, int error); | 55 | int bytes, int error); |
| 26 | 56 | ||
| 27 | /* Internal to the DMA code. */ | 57 | /* private: Internal use only */ |
| 28 | void *channel; | 58 | void *channel; |
| 29 | }; | 59 | }; |
| 30 | 60 | ||
| 61 | /* DMA M2P ports */ | ||
| 31 | #define EP93XX_DMA_M2P_PORT_I2S1 0x00 | 62 | #define EP93XX_DMA_M2P_PORT_I2S1 0x00 |
| 32 | #define EP93XX_DMA_M2P_PORT_I2S2 0x01 | 63 | #define EP93XX_DMA_M2P_PORT_I2S2 0x01 |
| 33 | #define EP93XX_DMA_M2P_PORT_AAC1 0x02 | 64 | #define EP93XX_DMA_M2P_PORT_AAC1 0x02 |
| @@ -39,18 +70,80 @@ struct ep93xx_dma_m2p_client { | |||
| 39 | #define EP93XX_DMA_M2P_PORT_UART3 0x08 | 70 | #define EP93XX_DMA_M2P_PORT_UART3 0x08 |
| 40 | #define EP93XX_DMA_M2P_PORT_IRDA 0x09 | 71 | #define EP93XX_DMA_M2P_PORT_IRDA 0x09 |
| 41 | #define EP93XX_DMA_M2P_PORT_MASK 0x0f | 72 | #define EP93XX_DMA_M2P_PORT_MASK 0x0f |
| 42 | #define EP93XX_DMA_M2P_TX 0x00 | ||
| 43 | #define EP93XX_DMA_M2P_RX 0x10 | ||
| 44 | #define EP93XX_DMA_M2P_ABORT_ON_ERROR 0x20 | ||
| 45 | #define EP93XX_DMA_M2P_IGNORE_ERROR 0x40 | ||
| 46 | #define EP93XX_DMA_M2P_ERROR_MASK 0x60 | ||
| 47 | 73 | ||
| 48 | int ep93xx_dma_m2p_client_register(struct ep93xx_dma_m2p_client *m2p); | 74 | /* DMA M2P client flags */ |
| 75 | #define EP93XX_DMA_M2P_TX 0x00 /* Memory to peripheral */ | ||
| 76 | #define EP93XX_DMA_M2P_RX 0x10 /* Peripheral to memory */ | ||
| 77 | |||
| 78 | /* | ||
| 79 | * DMA M2P client error handling flags. See the EP93xx users guide | ||
| 80 | * documentation on the DMA M2P CONTROL register for more details | ||
| 81 | */ | ||
| 82 | #define EP93XX_DMA_M2P_ABORT_ON_ERROR 0x20 /* Abort on peripheral error */ | ||
| 83 | #define EP93XX_DMA_M2P_IGNORE_ERROR 0x40 /* Ignore peripheral errors */ | ||
| 84 | #define EP93XX_DMA_M2P_ERROR_MASK 0x60 /* Mask of error bits */ | ||
| 85 | |||
| 86 | /** | ||
| 87 | * ep93xx_dma_m2p_client_register - Register a client with the DMA M2P | ||
| 88 | * subsystem | ||
| 89 | * | ||
| 90 | * @m2p: Client information to register | ||
| 91 | * returns 0 on success | ||
| 92 | * | ||
| 93 | * The DMA M2P subsystem allocates a channel and an interrupt line for the DMA | ||
| 94 | * client | ||
| 95 | */ | ||
| 96 | int ep93xx_dma_m2p_client_register(struct ep93xx_dma_m2p_client *m2p); | ||
| 97 | |||
| 98 | /** | ||
| 99 | * ep93xx_dma_m2p_client_unregister - Unregister a client from the DMA M2P | ||
| 100 | * subsystem | ||
| 101 | * | ||
| 102 | * @m2p: Client to unregister | ||
| 103 | * | ||
| 104 | * Any transfers currently in progress will be completed in hardware, but | ||
| 105 | * ignored in software. | ||
| 106 | */ | ||
| 49 | void ep93xx_dma_m2p_client_unregister(struct ep93xx_dma_m2p_client *m2p); | 107 | void ep93xx_dma_m2p_client_unregister(struct ep93xx_dma_m2p_client *m2p); |
| 108 | |||
| 109 | /** | ||
| 110 | * ep93xx_dma_m2p_submit - Submit a DMA M2P transfer | ||
| 111 | * | ||
| 112 | * @m2p: DMA Client to submit the transfer on | ||
| 113 | * @buf: DMA Buffer to submit | ||
| 114 | * | ||
| 115 | * If the current or next transfer positions are free on the M2P client then | ||
| 116 | * the transfer is started immediately. If not, the transfer is added to the | ||
| 117 | * list of pending transfers. This function must not be called from the | ||
| 118 | * buffer_finished callback for an M2P channel. | ||
| 119 | * | ||
| 120 | */ | ||
| 50 | void ep93xx_dma_m2p_submit(struct ep93xx_dma_m2p_client *m2p, | 121 | void ep93xx_dma_m2p_submit(struct ep93xx_dma_m2p_client *m2p, |
| 51 | struct ep93xx_dma_buffer *buf); | 122 | struct ep93xx_dma_buffer *buf); |
| 123 | |||
| 124 | /** | ||
| 125 | * ep93xx_dma_m2p_submit_recursive - Put a DMA transfer on the pending list | ||
| 126 | * for an M2P channel | ||
| 127 | * | ||
| 128 | * @m2p: DMA Client to submit the transfer on | ||
| 129 | * @buf: DMA Buffer to submit | ||
| 130 | * | ||
| 131 | * This function must only be called from the buffer_finished callback for an | ||
| 132 | * M2P channel. It is commonly used to add the next transfer in a chained list | ||
| 133 | * of DMA transfers. | ||
| 134 | */ | ||
| 52 | void ep93xx_dma_m2p_submit_recursive(struct ep93xx_dma_m2p_client *m2p, | 135 | void ep93xx_dma_m2p_submit_recursive(struct ep93xx_dma_m2p_client *m2p, |
| 53 | struct ep93xx_dma_buffer *buf); | 136 | struct ep93xx_dma_buffer *buf); |
| 137 | |||
| 138 | /** | ||
| 139 | * ep93xx_dma_m2p_flush - Flush all pending transfers on a DMA M2P client | ||
| 140 | * | ||
| 141 | * @m2p: DMA client to flush transfers on | ||
| 142 | * | ||
| 143 | * Any transfers currently in progress will be completed in hardware, but | ||
| 144 | * ignored in software. | ||
| 145 | * | ||
| 146 | */ | ||
| 54 | void ep93xx_dma_m2p_flush(struct ep93xx_dma_m2p_client *m2p); | 147 | void ep93xx_dma_m2p_flush(struct ep93xx_dma_m2p_client *m2p); |
| 55 | 148 | ||
| 56 | #endif /* __ASM_ARCH_DMA_H */ | 149 | #endif /* __ASM_ARCH_DMA_H */ |
diff --git a/arch/arm/mach-footbridge/include/mach/vmalloc.h b/arch/arm/mach-footbridge/include/mach/vmalloc.h index 0ffbb7c85e59..40ba78e5782b 100644 --- a/arch/arm/mach-footbridge/include/mach/vmalloc.h +++ b/arch/arm/mach-footbridge/include/mach/vmalloc.h | |||
| @@ -7,4 +7,4 @@ | |||
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | 9 | ||
| 10 | #define VMALLOC_END 0xf0000000 | 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 index a45915b88756..8520b4a4d4e6 100644 --- a/arch/arm/mach-h720x/include/mach/vmalloc.h +++ b/arch/arm/mach-h720x/include/mach/vmalloc.h | |||
| @@ -5,6 +5,6 @@ | |||
| 5 | #ifndef __ARCH_ARM_VMALLOC_H | 5 | #ifndef __ARCH_ARM_VMALLOC_H |
| 6 | #define __ARCH_ARM_VMALLOC_H | 6 | #define __ARCH_ARM_VMALLOC_H |
| 7 | 7 | ||
| 8 | #define VMALLOC_END 0xd0000000 | 8 | #define VMALLOC_END 0xd0000000UL |
| 9 | 9 | ||
| 10 | #endif | 10 | #endif |
diff --git a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c index 026263c665ca..7e1e9dc2c8fc 100644 --- a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c | |||
| @@ -250,9 +250,6 @@ static const struct imxuart_platform_data uart_pdata __initconst = { | |||
| 250 | .flags = IMXUART_HAVE_RTSCTS, | 250 | .flags = IMXUART_HAVE_RTSCTS, |
| 251 | }; | 251 | }; |
| 252 | 252 | ||
| 253 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) \ | ||
| 254 | || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | ||
| 255 | |||
| 256 | #define ADS7846_PENDOWN (GPIO_PORTD | 25) | 253 | #define ADS7846_PENDOWN (GPIO_PORTD | 25) |
| 257 | 254 | ||
| 258 | static void ads7846_dev_init(void) | 255 | static void ads7846_dev_init(void) |
| @@ -273,9 +270,7 @@ static struct ads7846_platform_data ads7846_config __initdata = { | |||
| 273 | .get_pendown_state = ads7846_get_pendown_state, | 270 | .get_pendown_state = ads7846_get_pendown_state, |
| 274 | .keep_vref_on = 1, | 271 | .keep_vref_on = 1, |
| 275 | }; | 272 | }; |
| 276 | #endif | ||
| 277 | 273 | ||
| 278 | #if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE) | ||
| 279 | static struct spi_board_info eukrea_mbimx27_spi_board_info[] __initdata = { | 274 | static struct spi_board_info eukrea_mbimx27_spi_board_info[] __initdata = { |
| 280 | [0] = { | 275 | [0] = { |
| 281 | .modalias = "ads7846", | 276 | .modalias = "ads7846", |
| @@ -294,7 +289,6 @@ static const struct spi_imx_master eukrea_mbimx27_spi0_data __initconst = { | |||
| 294 | .chipselect = eukrea_mbimx27_spi_cs, | 289 | .chipselect = eukrea_mbimx27_spi_cs, |
| 295 | .num_chipselect = ARRAY_SIZE(eukrea_mbimx27_spi_cs), | 290 | .num_chipselect = ARRAY_SIZE(eukrea_mbimx27_spi_cs), |
| 296 | }; | 291 | }; |
| 297 | #endif | ||
| 298 | 292 | ||
| 299 | static struct i2c_board_info eukrea_mbimx27_i2c_devices[] = { | 293 | static struct i2c_board_info eukrea_mbimx27_i2c_devices[] = { |
| 300 | { | 294 | { |
diff --git a/arch/arm/mach-integrator/include/mach/vmalloc.h b/arch/arm/mach-integrator/include/mach/vmalloc.h index e056e7cf5645..2f5a2bafb11f 100644 --- a/arch/arm/mach-integrator/include/mach/vmalloc.h +++ b/arch/arm/mach-integrator/include/mach/vmalloc.h | |||
| @@ -17,4 +17,4 @@ | |||
| 17 | * along with this program; if not, write to the Free Software | 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 | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | */ | 19 | */ |
| 20 | #define VMALLOC_END 0xd0000000 | 20 | #define VMALLOC_END 0xd0000000UL |
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index 51ff23b72d3a..3688123b5ad8 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
| @@ -854,10 +854,9 @@ int __init kirkwood_find_tclk(void) | |||
| 854 | 854 | ||
| 855 | kirkwood_pcie_id(&dev, &rev); | 855 | kirkwood_pcie_id(&dev, &rev); |
| 856 | 856 | ||
| 857 | if ((dev == MV88F6281_DEV_ID && (rev == MV88F6281_REV_A0 || | 857 | if (dev == MV88F6281_DEV_ID || dev == MV88F6282_DEV_ID) |
| 858 | rev == MV88F6281_REV_A1)) || | 858 | if (((readl(SAMPLE_AT_RESET) >> 21) & 1) == 0) |
| 859 | (dev == MV88F6282_DEV_ID)) | 859 | return 200000000; |
| 860 | return 200000000; | ||
| 861 | 860 | ||
| 862 | return 166666667; | 861 | return 166666667; |
| 863 | } | 862 | } |
diff --git a/arch/arm/mach-kirkwood/d2net_v2-setup.c b/arch/arm/mach-kirkwood/d2net_v2-setup.c index 4aa86e4a152c..a31c9499ab36 100644 --- a/arch/arm/mach-kirkwood/d2net_v2-setup.c +++ b/arch/arm/mach-kirkwood/d2net_v2-setup.c | |||
| @@ -225,5 +225,5 @@ MACHINE_START(D2NET_V2, "LaCie d2 Network v2") | |||
| 225 | .init_machine = d2net_v2_init, | 225 | .init_machine = d2net_v2_init, |
| 226 | .map_io = kirkwood_map_io, | 226 | .map_io = kirkwood_map_io, |
| 227 | .init_irq = kirkwood_init_irq, | 227 | .init_irq = kirkwood_init_irq, |
| 228 | .timer = &lacie_v2_timer, | 228 | .timer = &kirkwood_timer, |
| 229 | MACHINE_END | 229 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/lacie_v2-common.c b/arch/arm/mach-kirkwood/lacie_v2-common.c index d3ea1b6c8a02..285edab776e9 100644 --- a/arch/arm/mach-kirkwood/lacie_v2-common.c +++ b/arch/arm/mach-kirkwood/lacie_v2-common.c | |||
| @@ -111,17 +111,3 @@ void __init lacie_v2_hdd_power_init(int hdd_num) | |||
| 111 | pr_err("Failed to power up HDD%d\n", i + 1); | 111 | pr_err("Failed to power up HDD%d\n", i + 1); |
| 112 | } | 112 | } |
| 113 | } | 113 | } |
| 114 | |||
| 115 | /***************************************************************************** | ||
| 116 | * Timer | ||
| 117 | ****************************************************************************/ | ||
| 118 | |||
| 119 | static void lacie_v2_timer_init(void) | ||
| 120 | { | ||
| 121 | kirkwood_tclk = 166666667; | ||
| 122 | orion_time_init(IRQ_KIRKWOOD_BRIDGE, kirkwood_tclk); | ||
| 123 | } | ||
| 124 | |||
| 125 | struct sys_timer lacie_v2_timer = { | ||
| 126 | .init = lacie_v2_timer_init, | ||
| 127 | }; | ||
diff --git a/arch/arm/mach-kirkwood/lacie_v2-common.h b/arch/arm/mach-kirkwood/lacie_v2-common.h index af521315b87b..fc64f578536e 100644 --- a/arch/arm/mach-kirkwood/lacie_v2-common.h +++ b/arch/arm/mach-kirkwood/lacie_v2-common.h | |||
| @@ -13,6 +13,4 @@ void lacie_v2_register_flash(void); | |||
| 13 | void lacie_v2_register_i2c_devices(void); | 13 | void lacie_v2_register_i2c_devices(void); |
| 14 | void lacie_v2_hdd_power_init(int hdd_num); | 14 | void lacie_v2_hdd_power_init(int hdd_num); |
| 15 | 15 | ||
| 16 | extern struct sys_timer lacie_v2_timer; | ||
| 17 | |||
| 18 | #endif | 16 | #endif |
diff --git a/arch/arm/mach-kirkwood/mpp.c b/arch/arm/mach-kirkwood/mpp.c index 065187d177c6..27901f702feb 100644 --- a/arch/arm/mach-kirkwood/mpp.c +++ b/arch/arm/mach-kirkwood/mpp.c | |||
| @@ -59,7 +59,7 @@ void __init kirkwood_mpp_conf(unsigned int *mpp_list) | |||
| 59 | } | 59 | } |
| 60 | printk("\n"); | 60 | printk("\n"); |
| 61 | 61 | ||
| 62 | while (*mpp_list) { | 62 | for ( ; *mpp_list; mpp_list++) { |
| 63 | unsigned int num = MPP_NUM(*mpp_list); | 63 | unsigned int num = MPP_NUM(*mpp_list); |
| 64 | unsigned int sel = MPP_SEL(*mpp_list); | 64 | unsigned int sel = MPP_SEL(*mpp_list); |
| 65 | int shift, gpio_mode; | 65 | int shift, gpio_mode; |
| @@ -88,8 +88,6 @@ void __init kirkwood_mpp_conf(unsigned int *mpp_list) | |||
| 88 | if (sel != 0) | 88 | if (sel != 0) |
| 89 | gpio_mode = 0; | 89 | gpio_mode = 0; |
| 90 | orion_gpio_set_valid(num, gpio_mode); | 90 | orion_gpio_set_valid(num, gpio_mode); |
| 91 | |||
| 92 | mpp_list++; | ||
| 93 | } | 91 | } |
| 94 | 92 | ||
| 95 | printk(KERN_DEBUG " final MPP regs:"); | 93 | printk(KERN_DEBUG " final MPP regs:"); |
diff --git a/arch/arm/mach-kirkwood/netspace_v2-setup.c b/arch/arm/mach-kirkwood/netspace_v2-setup.c index 5ea66f1f4178..65ee21fd2f3b 100644 --- a/arch/arm/mach-kirkwood/netspace_v2-setup.c +++ b/arch/arm/mach-kirkwood/netspace_v2-setup.c | |||
| @@ -262,7 +262,7 @@ MACHINE_START(NETSPACE_V2, "LaCie Network Space v2") | |||
| 262 | .init_machine = netspace_v2_init, | 262 | .init_machine = netspace_v2_init, |
| 263 | .map_io = kirkwood_map_io, | 263 | .map_io = kirkwood_map_io, |
| 264 | .init_irq = kirkwood_init_irq, | 264 | .init_irq = kirkwood_init_irq, |
| 265 | .timer = &lacie_v2_timer, | 265 | .timer = &kirkwood_timer, |
| 266 | MACHINE_END | 266 | MACHINE_END |
| 267 | #endif | 267 | #endif |
| 268 | 268 | ||
| @@ -272,7 +272,7 @@ MACHINE_START(INETSPACE_V2, "LaCie Internet Space v2") | |||
| 272 | .init_machine = netspace_v2_init, | 272 | .init_machine = netspace_v2_init, |
| 273 | .map_io = kirkwood_map_io, | 273 | .map_io = kirkwood_map_io, |
| 274 | .init_irq = kirkwood_init_irq, | 274 | .init_irq = kirkwood_init_irq, |
| 275 | .timer = &lacie_v2_timer, | 275 | .timer = &kirkwood_timer, |
| 276 | MACHINE_END | 276 | MACHINE_END |
| 277 | #endif | 277 | #endif |
| 278 | 278 | ||
| @@ -282,6 +282,6 @@ MACHINE_START(NETSPACE_MAX_V2, "LaCie Network Space Max v2") | |||
| 282 | .init_machine = netspace_v2_init, | 282 | .init_machine = netspace_v2_init, |
| 283 | .map_io = kirkwood_map_io, | 283 | .map_io = kirkwood_map_io, |
| 284 | .init_irq = kirkwood_init_irq, | 284 | .init_irq = kirkwood_init_irq, |
| 285 | .timer = &lacie_v2_timer, | 285 | .timer = &kirkwood_timer, |
| 286 | MACHINE_END | 286 | MACHINE_END |
| 287 | #endif | 287 | #endif |
diff --git a/arch/arm/mach-kirkwood/netxbig_v2-setup.c b/arch/arm/mach-kirkwood/netxbig_v2-setup.c index a1b45d501aef..93afd3c8bfd8 100644 --- a/arch/arm/mach-kirkwood/netxbig_v2-setup.c +++ b/arch/arm/mach-kirkwood/netxbig_v2-setup.c | |||
| @@ -403,7 +403,7 @@ MACHINE_START(NET2BIG_V2, "LaCie 2Big Network v2") | |||
| 403 | .init_machine = netxbig_v2_init, | 403 | .init_machine = netxbig_v2_init, |
| 404 | .map_io = kirkwood_map_io, | 404 | .map_io = kirkwood_map_io, |
| 405 | .init_irq = kirkwood_init_irq, | 405 | .init_irq = kirkwood_init_irq, |
| 406 | .timer = &lacie_v2_timer, | 406 | .timer = &kirkwood_timer, |
| 407 | MACHINE_END | 407 | MACHINE_END |
| 408 | #endif | 408 | #endif |
| 409 | 409 | ||
| @@ -413,6 +413,6 @@ MACHINE_START(NET5BIG_V2, "LaCie 5Big Network v2") | |||
| 413 | .init_machine = netxbig_v2_init, | 413 | .init_machine = netxbig_v2_init, |
| 414 | .map_io = kirkwood_map_io, | 414 | .map_io = kirkwood_map_io, |
| 415 | .init_irq = kirkwood_init_irq, | 415 | .init_irq = kirkwood_init_irq, |
| 416 | .timer = &lacie_v2_timer, | 416 | .timer = &kirkwood_timer, |
| 417 | MACHINE_END | 417 | MACHINE_END |
| 418 | #endif | 418 | #endif |
diff --git a/arch/arm/mach-kirkwood/ts41x-setup.c b/arch/arm/mach-kirkwood/ts41x-setup.c index 8be09a0ce4ac..3587a281d993 100644 --- a/arch/arm/mach-kirkwood/ts41x-setup.c +++ b/arch/arm/mach-kirkwood/ts41x-setup.c | |||
| @@ -27,6 +27,10 @@ | |||
| 27 | #include "mpp.h" | 27 | #include "mpp.h" |
| 28 | #include "tsx1x-common.h" | 28 | #include "tsx1x-common.h" |
| 29 | 29 | ||
| 30 | /* for the PCIe reset workaround */ | ||
| 31 | #include <plat/pcie.h> | ||
| 32 | |||
| 33 | |||
| 30 | #define QNAP_TS41X_JUMPER_JP1 45 | 34 | #define QNAP_TS41X_JUMPER_JP1 45 |
| 31 | 35 | ||
| 32 | static struct i2c_board_info __initdata qnap_ts41x_i2c_rtc = { | 36 | static struct i2c_board_info __initdata qnap_ts41x_i2c_rtc = { |
| @@ -140,8 +144,16 @@ static void __init qnap_ts41x_init(void) | |||
| 140 | 144 | ||
| 141 | static int __init ts41x_pci_init(void) | 145 | static int __init ts41x_pci_init(void) |
| 142 | { | 146 | { |
| 143 | if (machine_is_ts41x()) | 147 | if (machine_is_ts41x()) { |
| 148 | /* | ||
| 149 | * Without this explicit reset, the PCIe SATA controller | ||
| 150 | * (Marvell 88sx7042/sata_mv) is known to stop working | ||
| 151 | * after a few minutes. | ||
| 152 | */ | ||
| 153 | orion_pcie_reset((void __iomem *)PCIE_VIRT_BASE); | ||
| 154 | |||
| 144 | kirkwood_pcie_init(KW_PCIE0); | 155 | kirkwood_pcie_init(KW_PCIE0); |
| 156 | } | ||
| 145 | 157 | ||
| 146 | return 0; | 158 | return 0; |
| 147 | } | 159 | } |
diff --git a/arch/arm/mach-mmp/include/mach/cputype.h b/arch/arm/mach-mmp/include/mach/cputype.h index f43a68b213f1..8a3b56dfd35d 100644 --- a/arch/arm/mach-mmp/include/mach/cputype.h +++ b/arch/arm/mach-mmp/include/mach/cputype.h | |||
| @@ -46,7 +46,8 @@ static inline int cpu_is_pxa910(void) | |||
| 46 | #ifdef CONFIG_CPU_MMP2 | 46 | #ifdef CONFIG_CPU_MMP2 |
| 47 | static inline int cpu_is_mmp2(void) | 47 | static inline int cpu_is_mmp2(void) |
| 48 | { | 48 | { |
| 49 | return (((cpu_readid_id() >> 8) & 0xff) == 0x58); | 49 | return (((read_cpuid_id() >> 8) & 0xff) == 0x58); |
| 50 | } | ||
| 50 | #else | 51 | #else |
| 51 | #define cpu_is_mmp2() (0) | 52 | #define cpu_is_mmp2() (0) |
| 52 | #endif | 53 | #endif |
diff --git a/arch/arm/mach-msm/include/mach/smp.h b/arch/arm/mach-msm/include/mach/smp.h index 3ff7bf5e679e..a95f7b9efe31 100644 --- a/arch/arm/mach-msm/include/mach/smp.h +++ b/arch/arm/mach-msm/include/mach/smp.h | |||
| @@ -31,9 +31,9 @@ | |||
| 31 | 31 | ||
| 32 | #include <asm/hardware/gic.h> | 32 | #include <asm/hardware/gic.h> |
| 33 | 33 | ||
| 34 | static inline void smp_cross_call(const struct cpumask *mask) | 34 | static inline void smp_cross_call(const struct cpumask *mask, int ipi) |
| 35 | { | 35 | { |
| 36 | gic_raise_softirq(mask, 1); | 36 | gic_raise_softirq(mask, ipi); |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | #endif | 39 | #endif |
diff --git a/arch/arm/mach-msm/include/mach/vmalloc.h b/arch/arm/mach-msm/include/mach/vmalloc.h index 31a32ad062dc..d138448eff16 100644 --- a/arch/arm/mach-msm/include/mach/vmalloc.h +++ b/arch/arm/mach-msm/include/mach/vmalloc.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #ifndef __ASM_ARCH_MSM_VMALLOC_H | 16 | #ifndef __ASM_ARCH_MSM_VMALLOC_H |
| 17 | #define __ASM_ARCH_MSM_VMALLOC_H | 17 | #define __ASM_ARCH_MSM_VMALLOC_H |
| 18 | 18 | ||
| 19 | #define VMALLOC_END 0xd0000000 | 19 | #define VMALLOC_END 0xd0000000UL |
| 20 | 20 | ||
| 21 | #endif | 21 | #endif |
| 22 | 22 | ||
diff --git a/arch/arm/mach-mv78xx0/mpp.c b/arch/arm/mach-mv78xx0/mpp.c index 354ac514eb89..84db2dfc475c 100644 --- a/arch/arm/mach-mv78xx0/mpp.c +++ b/arch/arm/mach-mv78xx0/mpp.c | |||
| @@ -54,7 +54,7 @@ void __init mv78xx0_mpp_conf(unsigned int *mpp_list) | |||
| 54 | } | 54 | } |
| 55 | printk("\n"); | 55 | printk("\n"); |
| 56 | 56 | ||
| 57 | while (*mpp_list) { | 57 | for ( ; *mpp_list; mpp_list++) { |
| 58 | unsigned int num = MPP_NUM(*mpp_list); | 58 | unsigned int num = MPP_NUM(*mpp_list); |
| 59 | unsigned int sel = MPP_SEL(*mpp_list); | 59 | unsigned int sel = MPP_SEL(*mpp_list); |
| 60 | int shift, gpio_mode; | 60 | int shift, gpio_mode; |
| @@ -83,8 +83,6 @@ void __init mv78xx0_mpp_conf(unsigned int *mpp_list) | |||
| 83 | if (sel != 0) | 83 | if (sel != 0) |
| 84 | gpio_mode = 0; | 84 | gpio_mode = 0; |
| 85 | orion_gpio_set_valid(num, gpio_mode); | 85 | orion_gpio_set_valid(num, gpio_mode); |
| 86 | |||
| 87 | mpp_list++; | ||
| 88 | } | 86 | } |
| 89 | 87 | ||
| 90 | printk(KERN_DEBUG " final MPP regs:"); | 88 | printk(KERN_DEBUG " final MPP regs:"); |
diff --git a/arch/arm/mach-mx25/devices-imx25.h b/arch/arm/mach-mx25/devices-imx25.h index 93afa10b13cf..d94d282fa676 100644 --- a/arch/arm/mach-mx25/devices-imx25.h +++ b/arch/arm/mach-mx25/devices-imx25.h | |||
| @@ -42,9 +42,9 @@ extern const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst; | |||
| 42 | #define imx25_add_mxc_nand(pdata) \ | 42 | #define imx25_add_mxc_nand(pdata) \ |
| 43 | imx_add_mxc_nand(&imx25_mxc_nand_data, pdata) | 43 | imx_add_mxc_nand(&imx25_mxc_nand_data, pdata) |
| 44 | 44 | ||
| 45 | extern const struct imx_spi_imx_data imx25_spi_imx_data[] __initconst; | 45 | extern const struct imx_spi_imx_data imx25_cspi_data[] __initconst; |
| 46 | #define imx25_add_spi_imx(id, pdata) \ | 46 | #define imx25_add_spi_imx(id, pdata) \ |
| 47 | imx_add_spi_imx(&imx25_spi_imx_data[id], pdata) | 47 | imx_add_spi_imx(&imx25_cspi_data[id], pdata) |
| 48 | #define imx25_add_spi_imx0(pdata) imx25_add_spi_imx(0, pdata) | 48 | #define imx25_add_spi_imx0(pdata) imx25_add_spi_imx(0, pdata) |
| 49 | #define imx25_add_spi_imx1(pdata) imx25_add_spi_imx(1, pdata) | 49 | #define imx25_add_spi_imx1(pdata) imx25_add_spi_imx(1, pdata) |
| 50 | #define imx25_add_spi_imx2(pdata) imx25_add_spi_imx(2, pdata) | 50 | #define imx25_add_spi_imx2(pdata) imx25_add_spi_imx(2, pdata) |
diff --git a/arch/arm/mach-mx3/mach-pcm037_eet.c b/arch/arm/mach-mx3/mach-pcm037_eet.c index 99e0894e07db..fda56545d2fd 100644 --- a/arch/arm/mach-mx3/mach-pcm037_eet.c +++ b/arch/arm/mach-mx3/mach-pcm037_eet.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | 14 | ||
| 15 | #include <mach/common.h> | 15 | #include <mach/common.h> |
| 16 | #include <mach/iomux-mx3.h> | 16 | #include <mach/iomux-mx3.h> |
| 17 | #include <mach/spi.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/mach-types.h> | 19 | #include <asm/mach-types.h> |
| 19 | 20 | ||
| @@ -59,14 +60,12 @@ static struct spi_board_info pcm037_spi_dev[] = { | |||
| 59 | }; | 60 | }; |
| 60 | 61 | ||
| 61 | /* Platform Data for MXC CSPI */ | 62 | /* Platform Data for MXC CSPI */ |
| 62 | #if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE) | ||
| 63 | static int pcm037_spi1_cs[] = {MXC_SPI_CS(1), IOMUX_TO_GPIO(MX31_PIN_KEY_COL7)}; | 63 | static int pcm037_spi1_cs[] = {MXC_SPI_CS(1), IOMUX_TO_GPIO(MX31_PIN_KEY_COL7)}; |
| 64 | 64 | ||
| 65 | static const struct spi_imx_master pcm037_spi1_pdata __initconst = { | 65 | static const struct spi_imx_master pcm037_spi1_pdata __initconst = { |
| 66 | .chipselect = pcm037_spi1_cs, | 66 | .chipselect = pcm037_spi1_cs, |
| 67 | .num_chipselect = ARRAY_SIZE(pcm037_spi1_cs), | 67 | .num_chipselect = ARRAY_SIZE(pcm037_spi1_cs), |
| 68 | }; | 68 | }; |
| 69 | #endif | ||
| 70 | 69 | ||
| 71 | /* GPIO-keys input device */ | 70 | /* GPIO-keys input device */ |
| 72 | static struct gpio_keys_button pcm037_gpio_keys[] = { | 71 | static struct gpio_keys_button pcm037_gpio_keys[] = { |
| @@ -171,7 +170,7 @@ static struct platform_device pcm037_gpio_keys_device = { | |||
| 171 | }, | 170 | }, |
| 172 | }; | 171 | }; |
| 173 | 172 | ||
| 174 | static int eet_init_devices(void) | 173 | static int __init eet_init_devices(void) |
| 175 | { | 174 | { |
| 176 | if (!machine_is_pcm037() || pcm037_variant() != PCM037_EET) | 175 | if (!machine_is_pcm037() || pcm037_variant() != PCM037_EET) |
| 177 | return 0; | 176 | return 0; |
diff --git a/arch/arm/mach-netx/include/mach/vmalloc.h b/arch/arm/mach-netx/include/mach/vmalloc.h index 7cca3574308f..871f1ef7bff5 100644 --- a/arch/arm/mach-netx/include/mach/vmalloc.h +++ b/arch/arm/mach-netx/include/mach/vmalloc.h | |||
| @@ -16,4 +16,4 @@ | |||
| 16 | * along with this program; if not, write to the Free Software | 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 | 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 18 | */ | 18 | */ |
| 19 | #define VMALLOC_END 0xd0000000 | 19 | #define VMALLOC_END 0xd0000000UL |
diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c index ea0d80a89da7..e7f9ee63dce5 100644 --- a/arch/arm/mach-omap1/devices.c +++ b/arch/arm/mach-omap1/devices.c | |||
| @@ -321,10 +321,9 @@ static struct platform_device omap_wdt_device = { | |||
| 321 | static int __init omap_init_wdt(void) | 321 | static int __init omap_init_wdt(void) |
| 322 | { | 322 | { |
| 323 | if (!cpu_is_omap16xx()) | 323 | if (!cpu_is_omap16xx()) |
| 324 | return; | 324 | return -ENODEV; |
| 325 | 325 | ||
| 326 | platform_device_register(&omap_wdt_device); | 326 | return platform_device_register(&omap_wdt_device); |
| 327 | return 0; | ||
| 328 | } | 327 | } |
| 329 | subsys_initcall(omap_init_wdt); | 328 | subsys_initcall(omap_init_wdt); |
| 330 | #endif | 329 | #endif |
diff --git a/arch/arm/mach-omap1/include/mach/camera.h b/arch/arm/mach-omap1/include/mach/camera.h index fd54b452eb22..847d00f0bb0a 100644 --- a/arch/arm/mach-omap1/include/mach/camera.h +++ b/arch/arm/mach-omap1/include/mach/camera.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef __ASM_ARCH_CAMERA_H_ | 1 | #ifndef __ASM_ARCH_CAMERA_H_ |
| 2 | #define __ASM_ARCH_CAMERA_H_ | 2 | #define __ASM_ARCH_CAMERA_H_ |
| 3 | 3 | ||
| 4 | #include <media/omap1_camera.h> | ||
| 5 | |||
| 4 | void omap1_camera_init(void *); | 6 | void omap1_camera_init(void *); |
| 5 | 7 | ||
| 6 | static inline void omap1_set_camera_info(struct omap1_cam_platform_data *info) | 8 | static inline void omap1_set_camera_info(struct omap1_cam_platform_data *info) |
diff --git a/arch/arm/mach-omap1/include/mach/vmalloc.h b/arch/arm/mach-omap1/include/mach/vmalloc.h index b001f67d695b..22ec4a479577 100644 --- a/arch/arm/mach-omap1/include/mach/vmalloc.h +++ b/arch/arm/mach-omap1/include/mach/vmalloc.h | |||
| @@ -17,4 +17,4 @@ | |||
| 17 | * along with this program; if not, write to the Free Software | 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 | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | */ | 19 | */ |
| 20 | #define VMALLOC_END 0xd8000000 | 20 | #define VMALLOC_END 0xd8000000UL |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 067f4379c87f..53ac762518bd 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
| @@ -242,9 +242,6 @@ static int devkit8000_twl_gpio_setup(struct device *dev, | |||
| 242 | mmc[0].gpio_cd = gpio + 0; | 242 | mmc[0].gpio_cd = gpio + 0; |
| 243 | omap2_hsmmc_init(mmc); | 243 | omap2_hsmmc_init(mmc); |
| 244 | 244 | ||
| 245 | /* link regulators to MMC adapters */ | ||
| 246 | devkit8000_vmmc1_supply.dev = mmc[0].dev; | ||
| 247 | |||
| 248 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ | 245 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ |
| 249 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | 246 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; |
| 250 | 247 | ||
diff --git a/arch/arm/mach-omap2/include/mach/vmalloc.h b/arch/arm/mach-omap2/include/mach/vmalloc.h index 4da31e997efe..866319947760 100644 --- a/arch/arm/mach-omap2/include/mach/vmalloc.h +++ b/arch/arm/mach-omap2/include/mach/vmalloc.h | |||
| @@ -17,4 +17,4 @@ | |||
| 17 | * along with this program; if not, write to the Free Software | 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 | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | */ | 19 | */ |
| 20 | #define VMALLOC_END 0xf8000000 | 20 | #define VMALLOC_END 0xf8000000UL |
diff --git a/arch/arm/mach-omap2/omap-hotplug.c b/arch/arm/mach-omap2/omap-hotplug.c index 6cee456ca542..4976b9393e49 100644 --- a/arch/arm/mach-omap2/omap-hotplug.c +++ b/arch/arm/mach-omap2/omap-hotplug.c | |||
| @@ -17,16 +17,13 @@ | |||
| 17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
| 18 | #include <linux/errno.h> | 18 | #include <linux/errno.h> |
| 19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
| 20 | #include <linux/completion.h> | ||
| 21 | 20 | ||
| 22 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
| 23 | #include <mach/omap4-common.h> | 22 | #include <mach/omap4-common.h> |
| 24 | 23 | ||
| 25 | static DECLARE_COMPLETION(cpu_killed); | ||
| 26 | |||
| 27 | int platform_cpu_kill(unsigned int cpu) | 24 | int platform_cpu_kill(unsigned int cpu) |
| 28 | { | 25 | { |
| 29 | return wait_for_completion_timeout(&cpu_killed, 5000); | 26 | return 1; |
| 30 | } | 27 | } |
| 31 | 28 | ||
| 32 | /* | 29 | /* |
| @@ -35,15 +32,6 @@ int platform_cpu_kill(unsigned int cpu) | |||
| 35 | */ | 32 | */ |
| 36 | void platform_cpu_die(unsigned int cpu) | 33 | void platform_cpu_die(unsigned int cpu) |
| 37 | { | 34 | { |
| 38 | unsigned int this_cpu = hard_smp_processor_id(); | ||
| 39 | |||
| 40 | if (cpu != this_cpu) { | ||
| 41 | pr_crit("platform_cpu_die running on %u, should be %u\n", | ||
| 42 | this_cpu, cpu); | ||
| 43 | BUG(); | ||
| 44 | } | ||
| 45 | pr_notice("CPU%u: shutdown\n", cpu); | ||
| 46 | complete(&cpu_killed); | ||
| 47 | flush_cache_all(); | 35 | flush_cache_all(); |
| 48 | dsb(); | 36 | dsb(); |
| 49 | 37 | ||
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index 9e9f70e18e3c..9fed631ba046 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c | |||
| @@ -21,7 +21,6 @@ | |||
| 21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
| 22 | 22 | ||
| 23 | #include <asm/cacheflush.h> | 23 | #include <asm/cacheflush.h> |
| 24 | #include <asm/localtimer.h> | ||
| 25 | #include <asm/smp_scu.h> | 24 | #include <asm/smp_scu.h> |
| 26 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
| 27 | #include <mach/omap4-common.h> | 26 | #include <mach/omap4-common.h> |
| @@ -29,22 +28,10 @@ | |||
| 29 | /* SCU base address */ | 28 | /* SCU base address */ |
| 30 | static void __iomem *scu_base; | 29 | static void __iomem *scu_base; |
| 31 | 30 | ||
| 32 | /* | ||
| 33 | * Use SCU config register to count number of cores | ||
| 34 | */ | ||
| 35 | static inline unsigned int get_core_count(void) | ||
| 36 | { | ||
| 37 | if (scu_base) | ||
| 38 | return scu_get_core_count(scu_base); | ||
| 39 | return 1; | ||
| 40 | } | ||
| 41 | |||
| 42 | static DEFINE_SPINLOCK(boot_lock); | 31 | static DEFINE_SPINLOCK(boot_lock); |
| 43 | 32 | ||
| 44 | void __cpuinit platform_secondary_init(unsigned int cpu) | 33 | void __cpuinit platform_secondary_init(unsigned int cpu) |
| 45 | { | 34 | { |
| 46 | trace_hardirqs_off(); | ||
| 47 | |||
| 48 | /* | 35 | /* |
| 49 | * If any interrupts are already enabled for the primary | 36 | * If any interrupts are already enabled for the primary |
| 50 | * core (e.g. timer irq), then they will not have been enabled | 37 | * core (e.g. timer irq), then they will not have been enabled |
| @@ -76,7 +63,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
| 76 | omap_modify_auxcoreboot0(0x200, 0xfffffdff); | 63 | omap_modify_auxcoreboot0(0x200, 0xfffffdff); |
| 77 | flush_cache_all(); | 64 | flush_cache_all(); |
| 78 | smp_wmb(); | 65 | smp_wmb(); |
| 79 | smp_cross_call(cpumask_of(cpu)); | 66 | smp_cross_call(cpumask_of(cpu), 1); |
| 80 | 67 | ||
| 81 | /* | 68 | /* |
| 82 | * Now the secondary core is starting up let it run its | 69 | * Now the secondary core is starting up let it run its |
| @@ -118,25 +105,9 @@ void __init smp_init_cpus(void) | |||
| 118 | scu_base = ioremap(OMAP44XX_SCU_BASE, SZ_256); | 105 | scu_base = ioremap(OMAP44XX_SCU_BASE, SZ_256); |
| 119 | BUG_ON(!scu_base); | 106 | BUG_ON(!scu_base); |
| 120 | 107 | ||
| 121 | ncores = get_core_count(); | 108 | ncores = scu_get_core_count(scu_base); |
| 122 | |||
| 123 | for (i = 0; i < ncores; i++) | ||
| 124 | set_cpu_possible(i, true); | ||
| 125 | } | ||
| 126 | |||
| 127 | void __init smp_prepare_cpus(unsigned int max_cpus) | ||
| 128 | { | ||
| 129 | unsigned int ncores = get_core_count(); | ||
| 130 | unsigned int cpu = smp_processor_id(); | ||
| 131 | int i; | ||
| 132 | 109 | ||
| 133 | /* sanity check */ | 110 | /* sanity check */ |
| 134 | if (ncores == 0) { | ||
| 135 | printk(KERN_ERR | ||
| 136 | "OMAP4: strange core count of 0? Default to 1\n"); | ||
| 137 | ncores = 1; | ||
| 138 | } | ||
| 139 | |||
| 140 | if (ncores > NR_CPUS) { | 111 | if (ncores > NR_CPUS) { |
| 141 | printk(KERN_WARNING | 112 | printk(KERN_WARNING |
| 142 | "OMAP4: no. of cores (%d) greater than configured " | 113 | "OMAP4: no. of cores (%d) greater than configured " |
| @@ -144,13 +115,14 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 144 | ncores, NR_CPUS); | 115 | ncores, NR_CPUS); |
| 145 | ncores = NR_CPUS; | 116 | ncores = NR_CPUS; |
| 146 | } | 117 | } |
| 147 | smp_store_cpu_info(cpu); | ||
| 148 | 118 | ||
| 149 | /* | 119 | for (i = 0; i < ncores; i++) |
| 150 | * are we trying to boot more cores than exist? | 120 | set_cpu_possible(i, true); |
| 151 | */ | 121 | } |
| 152 | if (max_cpus > ncores) | 122 | |
| 153 | max_cpus = ncores; | 123 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) |
| 124 | { | ||
| 125 | int i; | ||
| 154 | 126 | ||
| 155 | /* | 127 | /* |
| 156 | * Initialise the present map, which describes the set of CPUs | 128 | * Initialise the present map, which describes the set of CPUs |
| @@ -159,18 +131,10 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 159 | for (i = 0; i < max_cpus; i++) | 131 | for (i = 0; i < max_cpus; i++) |
| 160 | set_cpu_present(i, true); | 132 | set_cpu_present(i, true); |
| 161 | 133 | ||
| 162 | if (max_cpus > 1) { | 134 | /* |
| 163 | /* | 135 | * Initialise the SCU and wake up the secondary core using |
| 164 | * Enable the local timer or broadcast device for the | 136 | * wakeup_secondary(). |
| 165 | * boot CPU, but only if we have more than one CPU. | 137 | */ |
| 166 | */ | 138 | scu_enable(scu_base); |
| 167 | percpu_timer_setup(); | 139 | wakeup_secondary(); |
| 168 | |||
| 169 | /* | ||
| 170 | * Initialise the SCU and wake up the secondary core using | ||
| 171 | * wakeup_secondary(). | ||
| 172 | */ | ||
| 173 | scu_enable(scu_base); | ||
| 174 | wakeup_secondary(); | ||
| 175 | } | ||
| 176 | } | 140 | } |
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index a40457d81927..c85923e56b85 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/irq.h> | 30 | #include <linux/irq.h> |
| 31 | #include <linux/time.h> | 31 | #include <linux/time.h> |
| 32 | #include <linux/gpio.h> | 32 | #include <linux/gpio.h> |
| 33 | #include <linux/console.h> | ||
| 33 | 34 | ||
| 34 | #include <asm/mach/time.h> | 35 | #include <asm/mach/time.h> |
| 35 | #include <asm/mach/irq.h> | 36 | #include <asm/mach/irq.h> |
| @@ -118,6 +119,10 @@ static void omap2_enter_full_retention(void) | |||
| 118 | if (omap_irq_pending()) | 119 | if (omap_irq_pending()) |
| 119 | goto no_sleep; | 120 | goto no_sleep; |
| 120 | 121 | ||
| 122 | /* Block console output in case it is on one of the OMAP UARTs */ | ||
| 123 | if (try_acquire_console_sem()) | ||
| 124 | goto no_sleep; | ||
| 125 | |||
| 121 | omap_uart_prepare_idle(0); | 126 | omap_uart_prepare_idle(0); |
| 122 | omap_uart_prepare_idle(1); | 127 | omap_uart_prepare_idle(1); |
| 123 | omap_uart_prepare_idle(2); | 128 | omap_uart_prepare_idle(2); |
| @@ -131,6 +136,8 @@ static void omap2_enter_full_retention(void) | |||
| 131 | omap_uart_resume_idle(1); | 136 | omap_uart_resume_idle(1); |
| 132 | omap_uart_resume_idle(0); | 137 | omap_uart_resume_idle(0); |
| 133 | 138 | ||
| 139 | release_console_sem(); | ||
| 140 | |||
| 134 | no_sleep: | 141 | no_sleep: |
| 135 | if (omap2_pm_debug) { | 142 | if (omap2_pm_debug) { |
| 136 | unsigned long long tmp; | 143 | unsigned long long tmp; |
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 75c0cd13ad8e..0ec8a04b7473 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/clk.h> | 28 | #include <linux/clk.h> |
| 29 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
| 30 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
| 31 | #include <linux/console.h> | ||
| 31 | 32 | ||
| 32 | #include <plat/sram.h> | 33 | #include <plat/sram.h> |
| 33 | #include <plat/clockdomain.h> | 34 | #include <plat/clockdomain.h> |
| @@ -385,6 +386,12 @@ void omap_sram_idle(void) | |||
| 385 | omap3_enable_io_chain(); | 386 | omap3_enable_io_chain(); |
| 386 | } | 387 | } |
| 387 | 388 | ||
| 389 | /* Block console output in case it is on one of the OMAP UARTs */ | ||
| 390 | if (per_next_state < PWRDM_POWER_ON || | ||
| 391 | core_next_state < PWRDM_POWER_ON) | ||
| 392 | if (try_acquire_console_sem()) | ||
| 393 | goto console_still_active; | ||
| 394 | |||
| 388 | /* PER */ | 395 | /* PER */ |
| 389 | if (per_next_state < PWRDM_POWER_ON) { | 396 | if (per_next_state < PWRDM_POWER_ON) { |
| 390 | omap_uart_prepare_idle(2); | 397 | omap_uart_prepare_idle(2); |
| @@ -463,6 +470,9 @@ void omap_sram_idle(void) | |||
| 463 | omap_uart_resume_idle(3); | 470 | omap_uart_resume_idle(3); |
| 464 | } | 471 | } |
| 465 | 472 | ||
| 473 | release_console_sem(); | ||
| 474 | |||
| 475 | console_still_active: | ||
| 466 | /* Disable IO-PAD and IO-CHAIN wakeup */ | 476 | /* Disable IO-PAD and IO-CHAIN wakeup */ |
| 467 | if (omap3_has_io_wakeup() && | 477 | if (omap3_has_io_wakeup() && |
| 468 | (per_next_state < PWRDM_POWER_ON || | 478 | (per_next_state < PWRDM_POWER_ON || |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index becf0e38ef7e..d17960a1be25 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
| 28 | #include <linux/serial_8250.h> | 28 | #include <linux/serial_8250.h> |
| 29 | #include <linux/pm_runtime.h> | 29 | #include <linux/pm_runtime.h> |
| 30 | #include <linux/console.h> | ||
| 30 | 31 | ||
| 31 | #ifdef CONFIG_SERIAL_OMAP | 32 | #ifdef CONFIG_SERIAL_OMAP |
| 32 | #include <plat/omap-serial.h> | 33 | #include <plat/omap-serial.h> |
| @@ -406,7 +407,7 @@ void omap_uart_resume_idle(int num) | |||
| 406 | struct omap_uart_state *uart; | 407 | struct omap_uart_state *uart; |
| 407 | 408 | ||
| 408 | list_for_each_entry(uart, &uart_list, node) { | 409 | list_for_each_entry(uart, &uart_list, node) { |
| 409 | if (num == uart->num) { | 410 | if (num == uart->num && uart->can_sleep) { |
| 410 | omap_uart_enable_clocks(uart); | 411 | omap_uart_enable_clocks(uart); |
| 411 | 412 | ||
| 412 | /* Check for IO pad wakeup */ | 413 | /* Check for IO pad wakeup */ |
| @@ -807,6 +808,8 @@ void __init omap_serial_init_port(int port) | |||
| 807 | 808 | ||
| 808 | oh->dev_attr = uart; | 809 | oh->dev_attr = uart; |
| 809 | 810 | ||
| 811 | acquire_console_sem(); /* in case the earlycon is on the UART */ | ||
| 812 | |||
| 810 | /* | 813 | /* |
| 811 | * Because of early UART probing, UART did not get idled | 814 | * Because of early UART probing, UART did not get idled |
| 812 | * on init. Now that omap_device is ready, ensure full idle | 815 | * on init. Now that omap_device is ready, ensure full idle |
| @@ -831,6 +834,8 @@ void __init omap_serial_init_port(int port) | |||
| 831 | omap_uart_block_sleep(uart); | 834 | omap_uart_block_sleep(uart); |
| 832 | uart->timeout = DEFAULT_TIMEOUT; | 835 | uart->timeout = DEFAULT_TIMEOUT; |
| 833 | 836 | ||
| 837 | release_console_sem(); | ||
| 838 | |||
| 834 | if ((cpu_is_omap34xx() && uart->padconf) || | 839 | if ((cpu_is_omap34xx() && uart->padconf) || |
| 835 | (uart->wk_en && uart->wk_mask)) { | 840 | (uart->wk_en && uart->wk_mask)) { |
| 836 | device_init_wakeup(&od->pdev.dev, true); | 841 | device_init_wakeup(&od->pdev.dev, true); |
diff --git a/arch/arm/mach-orion5x/mpp.c b/arch/arm/mach-orion5x/mpp.c index bc4c3b9aaf83..db485d3b8144 100644 --- a/arch/arm/mach-orion5x/mpp.c +++ b/arch/arm/mach-orion5x/mpp.c | |||
| @@ -127,7 +127,7 @@ void __init orion5x_mpp_conf(struct orion5x_mpp_mode *mode) | |||
| 127 | /* Initialize gpiolib. */ | 127 | /* Initialize gpiolib. */ |
| 128 | orion_gpio_init(); | 128 | orion_gpio_init(); |
| 129 | 129 | ||
| 130 | while (mode->mpp >= 0) { | 130 | for ( ; mode->mpp >= 0; mode++) { |
| 131 | u32 *reg; | 131 | u32 *reg; |
| 132 | int num_type; | 132 | int num_type; |
| 133 | int shift; | 133 | int shift; |
| @@ -160,8 +160,6 @@ void __init orion5x_mpp_conf(struct orion5x_mpp_mode *mode) | |||
| 160 | orion_gpio_set_unused(mode->mpp); | 160 | orion_gpio_set_unused(mode->mpp); |
| 161 | 161 | ||
| 162 | orion_gpio_set_valid(mode->mpp, !!(mode->type == MPP_GPIO)); | 162 | orion_gpio_set_valid(mode->mpp, !!(mode->type == MPP_GPIO)); |
| 163 | |||
| 164 | mode++; | ||
| 165 | } | 163 | } |
| 166 | 164 | ||
| 167 | writel(mpp_0_7_ctrl, MPP_0_7_CTRL); | 165 | writel(mpp_0_7_ctrl, MPP_0_7_CTRL); |
diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c index 16f1bd5324be..c1c1cd04bdde 100644 --- a/arch/arm/mach-orion5x/ts78xx-setup.c +++ b/arch/arm/mach-orion5x/ts78xx-setup.c | |||
| @@ -239,7 +239,7 @@ static struct platform_nand_data ts78xx_ts_nand_data = { | |||
| 239 | static struct resource ts78xx_ts_nand_resources = { | 239 | static struct resource ts78xx_ts_nand_resources = { |
| 240 | .start = TS_NAND_DATA, | 240 | .start = TS_NAND_DATA, |
| 241 | .end = TS_NAND_DATA + 4, | 241 | .end = TS_NAND_DATA + 4, |
| 242 | .flags = IORESOURCE_IO, | 242 | .flags = IORESOURCE_MEM, |
| 243 | }; | 243 | }; |
| 244 | 244 | ||
| 245 | static struct platform_device ts78xx_ts_nand_device = { | 245 | static struct platform_device ts78xx_ts_nand_device = { |
diff --git a/arch/arm/mach-pnx4008/include/mach/vmalloc.h b/arch/arm/mach-pnx4008/include/mach/vmalloc.h index 31b65ee07b0b..184913c71141 100644 --- a/arch/arm/mach-pnx4008/include/mach/vmalloc.h +++ b/arch/arm/mach-pnx4008/include/mach/vmalloc.h | |||
| @@ -17,4 +17,4 @@ | |||
| 17 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | 17 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced |
| 18 | * area for the same reason. ;) | 18 | * area for the same reason. ;) |
| 19 | */ | 19 | */ |
| 20 | #define VMALLOC_END 0xd0000000 | 20 | #define VMALLOC_END 0xd0000000UL |
diff --git a/arch/arm/mach-pxa/cm-x2xx.c b/arch/arm/mach-pxa/cm-x2xx.c index ac5598ce9724..d34b99febeb9 100644 --- a/arch/arm/mach-pxa/cm-x2xx.c +++ b/arch/arm/mach-pxa/cm-x2xx.c | |||
| @@ -476,8 +476,6 @@ static void __init cmx2xx_init(void) | |||
| 476 | 476 | ||
| 477 | static void __init cmx2xx_init_irq(void) | 477 | static void __init cmx2xx_init_irq(void) |
| 478 | { | 478 | { |
| 479 | pxa27x_init_irq(); | ||
| 480 | |||
| 481 | if (cpu_is_pxa25x()) { | 479 | if (cpu_is_pxa25x()) { |
| 482 | pxa25x_init_irq(); | 480 | pxa25x_init_irq(); |
| 483 | cmx2xx_pci_init_irq(CMX255_GPIO_IT8152_IRQ); | 481 | cmx2xx_pci_init_irq(CMX255_GPIO_IT8152_IRQ); |
diff --git a/arch/arm/mach-pxa/saar.c b/arch/arm/mach-pxa/saar.c index 4b521e045d75..ffa50e633ee6 100644 --- a/arch/arm/mach-pxa/saar.c +++ b/arch/arm/mach-pxa/saar.c | |||
| @@ -116,7 +116,7 @@ static struct platform_device smc91x_device = { | |||
| 116 | }, | 116 | }, |
| 117 | }; | 117 | }; |
| 118 | 118 | ||
| 119 | #if defined(CONFIG_FB_PXA) || (CONFIG_FB_PXA_MODULE) | 119 | #if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE) |
| 120 | static uint16_t lcd_power_on[] = { | 120 | static uint16_t lcd_power_on[] = { |
| 121 | /* single frame */ | 121 | /* single frame */ |
| 122 | SMART_CMD_NOOP, | 122 | SMART_CMD_NOOP, |
diff --git a/arch/arm/mach-realview/hotplug.c b/arch/arm/mach-realview/hotplug.c index f95521a5e5ce..a87523d095e6 100644 --- a/arch/arm/mach-realview/hotplug.c +++ b/arch/arm/mach-realview/hotplug.c | |||
| @@ -11,14 +11,11 @@ | |||
| 11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
| 12 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
| 13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
| 14 | #include <linux/completion.h> | ||
| 15 | 14 | ||
| 16 | #include <asm/cacheflush.h> | 15 | #include <asm/cacheflush.h> |
| 17 | 16 | ||
| 18 | extern volatile int pen_release; | 17 | extern volatile int pen_release; |
| 19 | 18 | ||
| 20 | static DECLARE_COMPLETION(cpu_killed); | ||
| 21 | |||
| 22 | static inline void cpu_enter_lowpower(void) | 19 | static inline void cpu_enter_lowpower(void) |
| 23 | { | 20 | { |
| 24 | unsigned int v; | 21 | unsigned int v; |
| @@ -34,10 +31,10 @@ static inline void cpu_enter_lowpower(void) | |||
| 34 | " bic %0, %0, #0x20\n" | 31 | " bic %0, %0, #0x20\n" |
| 35 | " mcr p15, 0, %0, c1, c0, 1\n" | 32 | " mcr p15, 0, %0, c1, c0, 1\n" |
| 36 | " mrc p15, 0, %0, c1, c0, 0\n" | 33 | " mrc p15, 0, %0, c1, c0, 0\n" |
| 37 | " bic %0, %0, #0x04\n" | 34 | " bic %0, %0, %2\n" |
| 38 | " mcr p15, 0, %0, c1, c0, 0\n" | 35 | " mcr p15, 0, %0, c1, c0, 0\n" |
| 39 | : "=&r" (v) | 36 | : "=&r" (v) |
| 40 | : "r" (0) | 37 | : "r" (0), "Ir" (CR_C) |
| 41 | : "cc"); | 38 | : "cc"); |
| 42 | } | 39 | } |
| 43 | 40 | ||
| @@ -46,17 +43,17 @@ static inline void cpu_leave_lowpower(void) | |||
| 46 | unsigned int v; | 43 | unsigned int v; |
| 47 | 44 | ||
| 48 | asm volatile( "mrc p15, 0, %0, c1, c0, 0\n" | 45 | asm volatile( "mrc p15, 0, %0, c1, c0, 0\n" |
| 49 | " orr %0, %0, #0x04\n" | 46 | " orr %0, %0, %1\n" |
| 50 | " mcr p15, 0, %0, c1, c0, 0\n" | 47 | " mcr p15, 0, %0, c1, c0, 0\n" |
| 51 | " mrc p15, 0, %0, c1, c0, 1\n" | 48 | " mrc p15, 0, %0, c1, c0, 1\n" |
| 52 | " orr %0, %0, #0x20\n" | 49 | " orr %0, %0, #0x20\n" |
| 53 | " mcr p15, 0, %0, c1, c0, 1\n" | 50 | " mcr p15, 0, %0, c1, c0, 1\n" |
| 54 | : "=&r" (v) | 51 | : "=&r" (v) |
| 55 | : | 52 | : "Ir" (CR_C) |
| 56 | : "cc"); | 53 | : "cc"); |
| 57 | } | 54 | } |
| 58 | 55 | ||
| 59 | static inline void platform_do_lowpower(unsigned int cpu) | 56 | static inline void platform_do_lowpower(unsigned int cpu, int *spurious) |
| 60 | { | 57 | { |
| 61 | /* | 58 | /* |
| 62 | * there is no power-control hardware on this platform, so all | 59 | * there is no power-control hardware on this platform, so all |
| @@ -80,22 +77,19 @@ static inline void platform_do_lowpower(unsigned int cpu) | |||
| 80 | } | 77 | } |
| 81 | 78 | ||
| 82 | /* | 79 | /* |
| 83 | * getting here, means that we have come out of WFI without | 80 | * Getting here, means that we have come out of WFI without |
| 84 | * having been woken up - this shouldn't happen | 81 | * having been woken up - this shouldn't happen |
| 85 | * | 82 | * |
| 86 | * The trouble is, letting people know about this is not really | 83 | * Just note it happening - when we're woken, we can report |
| 87 | * possible, since we are currently running incoherently, and | 84 | * its occurrence. |
| 88 | * therefore cannot safely call printk() or anything else | ||
| 89 | */ | 85 | */ |
| 90 | #ifdef DEBUG | 86 | (*spurious)++; |
| 91 | printk("CPU%u: spurious wakeup call\n", cpu); | ||
| 92 | #endif | ||
| 93 | } | 87 | } |
| 94 | } | 88 | } |
| 95 | 89 | ||
| 96 | int platform_cpu_kill(unsigned int cpu) | 90 | int platform_cpu_kill(unsigned int cpu) |
| 97 | { | 91 | { |
| 98 | return wait_for_completion_timeout(&cpu_killed, 5000); | 92 | return 1; |
| 99 | } | 93 | } |
| 100 | 94 | ||
| 101 | /* | 95 | /* |
| @@ -105,30 +99,22 @@ int platform_cpu_kill(unsigned int cpu) | |||
| 105 | */ | 99 | */ |
| 106 | void platform_cpu_die(unsigned int cpu) | 100 | void platform_cpu_die(unsigned int cpu) |
| 107 | { | 101 | { |
| 108 | #ifdef DEBUG | 102 | int spurious = 0; |
| 109 | unsigned int this_cpu = hard_smp_processor_id(); | ||
| 110 | |||
| 111 | if (cpu != this_cpu) { | ||
| 112 | printk(KERN_CRIT "Eek! platform_cpu_die running on %u, should be %u\n", | ||
| 113 | this_cpu, cpu); | ||
| 114 | BUG(); | ||
| 115 | } | ||
| 116 | #endif | ||
| 117 | |||
| 118 | printk(KERN_NOTICE "CPU%u: shutdown\n", cpu); | ||
| 119 | complete(&cpu_killed); | ||
| 120 | 103 | ||
| 121 | /* | 104 | /* |
| 122 | * we're ready for shutdown now, so do it | 105 | * we're ready for shutdown now, so do it |
| 123 | */ | 106 | */ |
| 124 | cpu_enter_lowpower(); | 107 | cpu_enter_lowpower(); |
| 125 | platform_do_lowpower(cpu); | 108 | platform_do_lowpower(cpu, &spurious); |
| 126 | 109 | ||
| 127 | /* | 110 | /* |
| 128 | * bring this CPU back into the world of cache | 111 | * bring this CPU back into the world of cache |
| 129 | * coherency, and then restore interrupts | 112 | * coherency, and then restore interrupts |
| 130 | */ | 113 | */ |
| 131 | cpu_leave_lowpower(); | 114 | cpu_leave_lowpower(); |
| 115 | |||
| 116 | if (spurious) | ||
| 117 | pr_warn("CPU%u: %u spurious wakeup calls\n", cpu, spurious); | ||
| 132 | } | 118 | } |
| 133 | 119 | ||
| 134 | int platform_cpu_disable(unsigned int cpu) | 120 | int platform_cpu_disable(unsigned int cpu) |
diff --git a/arch/arm/mach-realview/include/mach/smp.h b/arch/arm/mach-realview/include/mach/smp.h index d3cd265cb058..c8221b38ee7c 100644 --- a/arch/arm/mach-realview/include/mach/smp.h +++ b/arch/arm/mach-realview/include/mach/smp.h | |||
| @@ -2,14 +2,13 @@ | |||
| 2 | #define ASMARM_ARCH_SMP_H | 2 | #define ASMARM_ARCH_SMP_H |
| 3 | 3 | ||
| 4 | #include <asm/hardware/gic.h> | 4 | #include <asm/hardware/gic.h> |
| 5 | #include <asm/smp_mpidr.h> | ||
| 6 | 5 | ||
| 7 | /* | 6 | /* |
| 8 | * We use IRQ1 as the IPI | 7 | * We use IRQ1 as the IPI |
| 9 | */ | 8 | */ |
| 10 | static inline void smp_cross_call(const struct cpumask *mask) | 9 | static inline void smp_cross_call(const struct cpumask *mask, int ipi) |
| 11 | { | 10 | { |
| 12 | gic_raise_softirq(mask, 1); | 11 | gic_raise_softirq(mask, ipi); |
| 13 | } | 12 | } |
| 14 | 13 | ||
| 15 | #endif | 14 | #endif |
diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c index 009265818d55..bb8d6c4e4315 100644 --- a/arch/arm/mach-realview/platsmp.c +++ b/arch/arm/mach-realview/platsmp.c | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <asm/cacheflush.h> | 19 | #include <asm/cacheflush.h> |
| 20 | #include <mach/hardware.h> | 20 | #include <mach/hardware.h> |
| 21 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
| 22 | #include <asm/localtimer.h> | ||
| 23 | #include <asm/unified.h> | 22 | #include <asm/unified.h> |
| 24 | 23 | ||
| 25 | #include <mach/board-eb.h> | 24 | #include <mach/board-eb.h> |
| @@ -37,6 +36,19 @@ extern void realview_secondary_startup(void); | |||
| 37 | */ | 36 | */ |
| 38 | volatile int __cpuinitdata pen_release = -1; | 37 | volatile int __cpuinitdata pen_release = -1; |
| 39 | 38 | ||
| 39 | /* | ||
| 40 | * Write pen_release in a way that is guaranteed to be visible to all | ||
| 41 | * observers, irrespective of whether they're taking part in coherency | ||
| 42 | * or not. This is necessary for the hotplug code to work reliably. | ||
| 43 | */ | ||
| 44 | static void write_pen_release(int val) | ||
| 45 | { | ||
| 46 | pen_release = val; | ||
| 47 | smp_wmb(); | ||
| 48 | __cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release)); | ||
| 49 | outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1)); | ||
| 50 | } | ||
| 51 | |||
| 40 | static void __iomem *scu_base_addr(void) | 52 | static void __iomem *scu_base_addr(void) |
| 41 | { | 53 | { |
| 42 | if (machine_is_realview_eb_mp()) | 54 | if (machine_is_realview_eb_mp()) |
| @@ -50,20 +62,10 @@ static void __iomem *scu_base_addr(void) | |||
| 50 | return (void __iomem *)0; | 62 | return (void __iomem *)0; |
| 51 | } | 63 | } |
| 52 | 64 | ||
| 53 | static inline unsigned int get_core_count(void) | ||
| 54 | { | ||
| 55 | void __iomem *scu_base = scu_base_addr(); | ||
| 56 | if (scu_base) | ||
| 57 | return scu_get_core_count(scu_base); | ||
| 58 | return 1; | ||
| 59 | } | ||
| 60 | |||
| 61 | static DEFINE_SPINLOCK(boot_lock); | 65 | static DEFINE_SPINLOCK(boot_lock); |
| 62 | 66 | ||
| 63 | void __cpuinit platform_secondary_init(unsigned int cpu) | 67 | void __cpuinit platform_secondary_init(unsigned int cpu) |
| 64 | { | 68 | { |
| 65 | trace_hardirqs_off(); | ||
| 66 | |||
| 67 | /* | 69 | /* |
| 68 | * if any interrupts are already enabled for the primary | 70 | * if any interrupts are already enabled for the primary |
| 69 | * 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 |
| @@ -75,8 +77,7 @@ void __cpuinit platform_secondary_init(unsigned int cpu) | |||
| 75 | * let the primary processor know we're out of the | 77 | * let the primary processor know we're out of the |
| 76 | * pen, then head off into the C entry point | 78 | * pen, then head off into the C entry point |
| 77 | */ | 79 | */ |
| 78 | pen_release = -1; | 80 | write_pen_release(-1); |
| 79 | smp_wmb(); | ||
| 80 | 81 | ||
| 81 | /* | 82 | /* |
| 82 | * Synchronise with the boot thread. | 83 | * Synchronise with the boot thread. |
| @@ -103,20 +104,14 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
| 103 | * Note that "pen_release" is the hardware CPU ID, whereas | 104 | * Note that "pen_release" is the hardware CPU ID, whereas |
| 104 | * "cpu" is Linux's internal ID. | 105 | * "cpu" is Linux's internal ID. |
| 105 | */ | 106 | */ |
| 106 | pen_release = cpu; | 107 | write_pen_release(cpu); |
| 107 | flush_cache_all(); | ||
| 108 | 108 | ||
| 109 | /* | 109 | /* |
| 110 | * XXX | 110 | * Send the secondary CPU a soft interrupt, thereby causing |
| 111 | * | 111 | * the boot monitor to read the system wide flags register, |
| 112 | * This is a later addition to the booting protocol: the | 112 | * and branch to the address found there. |
| 113 | * bootMonitor now puts secondary cores into WFI, so | ||
| 114 | * poke_milo() no longer gets the cores moving; we need | ||
| 115 | * to send a soft interrupt to wake the secondary core. | ||
| 116 | * Use smp_cross_call() for this, since there's little | ||
| 117 | * point duplicating the code here | ||
| 118 | */ | 113 | */ |
| 119 | smp_cross_call(cpumask_of(cpu)); | 114 | smp_cross_call(cpumask_of(cpu), 1); |
| 120 | 115 | ||
| 121 | timeout = jiffies + (1 * HZ); | 116 | timeout = jiffies + (1 * HZ); |
| 122 | while (time_before(jiffies, timeout)) { | 117 | while (time_before(jiffies, timeout)) { |
| @@ -136,48 +131,18 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
| 136 | return pen_release != -1 ? -ENOSYS : 0; | 131 | return pen_release != -1 ? -ENOSYS : 0; |
| 137 | } | 132 | } |
| 138 | 133 | ||
| 139 | static void __init poke_milo(void) | ||
| 140 | { | ||
| 141 | /* nobody is to be released from the pen yet */ | ||
| 142 | pen_release = -1; | ||
| 143 | |||
| 144 | /* | ||
| 145 | * Write the address of secondary startup into the system-wide flags | ||
| 146 | * register. The BootMonitor waits for this register to become | ||
| 147 | * non-zero. | ||
| 148 | */ | ||
| 149 | __raw_writel(BSYM(virt_to_phys(realview_secondary_startup)), | ||
| 150 | __io_address(REALVIEW_SYS_FLAGSSET)); | ||
| 151 | |||
| 152 | mb(); | ||
| 153 | } | ||
| 154 | |||
| 155 | /* | 134 | /* |
| 156 | * Initialise the CPU possible map early - this describes the CPUs | 135 | * Initialise the CPU possible map early - this describes the CPUs |
| 157 | * which may be present or become present in the system. | 136 | * which may be present or become present in the system. |
| 158 | */ | 137 | */ |
| 159 | void __init smp_init_cpus(void) | 138 | void __init smp_init_cpus(void) |
| 160 | { | 139 | { |
| 161 | unsigned int i, ncores = get_core_count(); | 140 | void __iomem *scu_base = scu_base_addr(); |
| 141 | unsigned int i, ncores; | ||
| 162 | 142 | ||
| 163 | for (i = 0; i < ncores; i++) | 143 | ncores = scu_base ? scu_get_core_count(scu_base) : 1; |
| 164 | set_cpu_possible(i, true); | ||
| 165 | } | ||
| 166 | |||
| 167 | void __init smp_prepare_cpus(unsigned int max_cpus) | ||
| 168 | { | ||
| 169 | unsigned int ncores = get_core_count(); | ||
| 170 | unsigned int cpu = smp_processor_id(); | ||
| 171 | int i; | ||
| 172 | 144 | ||
| 173 | /* sanity check */ | 145 | /* sanity check */ |
| 174 | if (ncores == 0) { | ||
| 175 | printk(KERN_ERR | ||
| 176 | "Realview: strange CM count of 0? Default to 1\n"); | ||
| 177 | |||
| 178 | ncores = 1; | ||
| 179 | } | ||
| 180 | |||
| 181 | if (ncores > NR_CPUS) { | 146 | if (ncores > NR_CPUS) { |
| 182 | printk(KERN_WARNING | 147 | printk(KERN_WARNING |
| 183 | "Realview: no. of cores (%d) greater than configured " | 148 | "Realview: no. of cores (%d) greater than configured " |
| @@ -186,13 +151,13 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 186 | ncores = NR_CPUS; | 151 | ncores = NR_CPUS; |
| 187 | } | 152 | } |
| 188 | 153 | ||
| 189 | smp_store_cpu_info(cpu); | 154 | for (i = 0; i < ncores; i++) |
| 155 | set_cpu_possible(i, true); | ||
| 156 | } | ||
| 190 | 157 | ||
| 191 | /* | 158 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) |
| 192 | * are we trying to boot more cores than exist? | 159 | { |
| 193 | */ | 160 | int i; |
| 194 | if (max_cpus > ncores) | ||
| 195 | max_cpus = ncores; | ||
| 196 | 161 | ||
| 197 | /* | 162 | /* |
| 198 | * Initialise the present map, which describes the set of CPUs | 163 | * Initialise the present map, which describes the set of CPUs |
| @@ -201,21 +166,14 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 201 | for (i = 0; i < max_cpus; i++) | 166 | for (i = 0; i < max_cpus; i++) |
| 202 | set_cpu_present(i, true); | 167 | set_cpu_present(i, true); |
| 203 | 168 | ||
| 169 | scu_enable(scu_base_addr()); | ||
| 170 | |||
| 204 | /* | 171 | /* |
| 205 | * Initialise the SCU if there are more than one CPU and let | 172 | * Write the address of secondary startup into the |
| 206 | * them know where to start. Note that, on modern versions of | 173 | * system-wide flags register. The BootMonitor waits |
| 207 | * MILO, the "poke" doesn't actually do anything until each | 174 | * until it receives a soft interrupt, and then the |
| 208 | * individual core is sent a soft interrupt to get it out of | 175 | * secondary CPU branches to this address. |
| 209 | * WFI | ||
| 210 | */ | 176 | */ |
| 211 | if (max_cpus > 1) { | 177 | __raw_writel(BSYM(virt_to_phys(realview_secondary_startup)), |
| 212 | /* | 178 | __io_address(REALVIEW_SYS_FLAGSSET)); |
| 213 | * Enable the local timer or broadcast device for the | ||
| 214 | * boot CPU, but only if we have more than one CPU. | ||
| 215 | */ | ||
| 216 | percpu_timer_setup(); | ||
| 217 | |||
| 218 | scu_enable(scu_base_addr()); | ||
| 219 | poke_milo(); | ||
| 220 | } | ||
| 221 | } | 179 | } |
diff --git a/arch/arm/mach-rpc/include/mach/vmalloc.h b/arch/arm/mach-rpc/include/mach/vmalloc.h index 3bcd86fadb81..fb700228637a 100644 --- a/arch/arm/mach-rpc/include/mach/vmalloc.h +++ b/arch/arm/mach-rpc/include/mach/vmalloc.h | |||
| @@ -7,4 +7,4 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | #define VMALLOC_END 0xdc000000 | 10 | #define VMALLOC_END 0xdc000000UL |
diff --git a/arch/arm/mach-s3c2410/h1940-bluetooth.c b/arch/arm/mach-s3c2410/h1940-bluetooth.c index 8aa2f1902a94..6b86a722a7db 100644 --- a/arch/arm/mach-s3c2410/h1940-bluetooth.c +++ b/arch/arm/mach-s3c2410/h1940-bluetooth.c | |||
| @@ -77,13 +77,13 @@ static int __devinit h1940bt_probe(struct platform_device *pdev) | |||
| 77 | 77 | ||
| 78 | /* Configures BT serial port GPIOs */ | 78 | /* Configures BT serial port GPIOs */ |
| 79 | s3c_gpio_cfgpin(S3C2410_GPH(0), S3C2410_GPH0_nCTS0); | 79 | s3c_gpio_cfgpin(S3C2410_GPH(0), S3C2410_GPH0_nCTS0); |
| 80 | s3c_gpio_cfgpull(S3C2410_GPH(0), S3C_GPIO_PULL_NONE); | 80 | s3c_gpio_setpull(S3C2410_GPH(0), S3C_GPIO_PULL_NONE); |
| 81 | s3c_gpio_cfgpin(S3C2410_GPH(1), S3C2410_GPIO_OUTPUT); | 81 | s3c_gpio_cfgpin(S3C2410_GPH(1), S3C2410_GPIO_OUTPUT); |
| 82 | s3c_gpio_cfgpull(S3C2410_GPH(1), S3C_GPIO_PULL_NONE); | 82 | s3c_gpio_setpull(S3C2410_GPH(1), S3C_GPIO_PULL_NONE); |
| 83 | s3c_gpio_cfgpin(S3C2410_GPH(2), S3C2410_GPH2_TXD0); | 83 | s3c_gpio_cfgpin(S3C2410_GPH(2), S3C2410_GPH2_TXD0); |
| 84 | s3c_gpio_cfgpull(S3C2410_GPH(2), S3C_GPIO_PULL_NONE); | 84 | s3c_gpio_setpull(S3C2410_GPH(2), S3C_GPIO_PULL_NONE); |
| 85 | s3c_gpio_cfgpin(S3C2410_GPH(3), S3C2410_GPH3_RXD0); | 85 | s3c_gpio_cfgpin(S3C2410_GPH(3), S3C2410_GPH3_RXD0); |
| 86 | s3c_gpio_cfgpull(S3C2410_GPH(3), S3C_GPIO_PULL_NONE); | 86 | s3c_gpio_setpull(S3C2410_GPH(3), S3C_GPIO_PULL_NONE); |
| 87 | 87 | ||
| 88 | 88 | ||
| 89 | rfk = rfkill_alloc(DRV_NAME, &pdev->dev, RFKILL_TYPE_BLUETOOTH, | 89 | rfk = rfkill_alloc(DRV_NAME, &pdev->dev, RFKILL_TYPE_BLUETOOTH, |
diff --git a/arch/arm/mach-s3c2416/irq.c b/arch/arm/mach-s3c2416/irq.c index 084d121f368c..00174daf1526 100644 --- a/arch/arm/mach-s3c2416/irq.c +++ b/arch/arm/mach-s3c2416/irq.c | |||
| @@ -168,12 +168,11 @@ static struct irq_chip s3c2416_irq_dma = { | |||
| 168 | 168 | ||
| 169 | static void s3c2416_irq_demux_uart3(unsigned int irq, struct irq_desc *desc) | 169 | static void s3c2416_irq_demux_uart3(unsigned int irq, struct irq_desc *desc) |
| 170 | { | 170 | { |
| 171 | s3c2416_irq_demux(IRQ_S3C2443_UART3, 3); | 171 | s3c2416_irq_demux(IRQ_S3C2443_RX3, 3); |
| 172 | } | 172 | } |
| 173 | 173 | ||
| 174 | #define INTMSK_UART3 (1UL << (IRQ_S3C2443_UART3 - IRQ_EINT0)) | 174 | #define INTMSK_UART3 (1UL << (IRQ_S3C2443_UART3 - IRQ_EINT0)) |
| 175 | #define SUBMSK_UART3 (0xf << (IRQ_S3C2443_RX3 - S3C2410_IRQSUB(0))) | 175 | #define SUBMSK_UART3 (0x7 << (IRQ_S3C2443_RX3 - S3C2410_IRQSUB(0))) |
| 176 | |||
| 177 | 176 | ||
| 178 | static void s3c2416_irq_uart3_mask(unsigned int irqno) | 177 | static void s3c2416_irq_uart3_mask(unsigned int irqno) |
| 179 | { | 178 | { |
diff --git a/arch/arm/mach-s3c2443/irq.c b/arch/arm/mach-s3c2443/irq.c index 0e0d693f3974..893424767ce1 100644 --- a/arch/arm/mach-s3c2443/irq.c +++ b/arch/arm/mach-s3c2443/irq.c | |||
| @@ -166,12 +166,11 @@ static struct irq_chip s3c2443_irq_dma = { | |||
| 166 | 166 | ||
| 167 | static void s3c2443_irq_demux_uart3(unsigned int irq, struct irq_desc *desc) | 167 | static void s3c2443_irq_demux_uart3(unsigned int irq, struct irq_desc *desc) |
| 168 | { | 168 | { |
| 169 | s3c2443_irq_demux(IRQ_S3C2443_UART3, 3); | 169 | s3c2443_irq_demux(IRQ_S3C2443_RX3, 3); |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | #define INTMSK_UART3 (1UL << (IRQ_S3C2443_UART3 - IRQ_EINT0)) | 172 | #define INTMSK_UART3 (1UL << (IRQ_S3C2443_UART3 - IRQ_EINT0)) |
| 173 | #define SUBMSK_UART3 (0xf << (IRQ_S3C2443_RX3 - S3C2410_IRQSUB(0))) | 173 | #define SUBMSK_UART3 (0x7 << (IRQ_S3C2443_RX3 - S3C2410_IRQSUB(0))) |
| 174 | |||
| 175 | 174 | ||
| 176 | static void s3c2443_irq_uart3_mask(unsigned int irqno) | 175 | static void s3c2443_irq_uart3_mask(unsigned int irqno) |
| 177 | { | 176 | { |
diff --git a/arch/arm/mach-s3c64xx/Kconfig b/arch/arm/mach-s3c64xx/Kconfig index 1ca7bdc6485c..579d2f0f4dd0 100644 --- a/arch/arm/mach-s3c64xx/Kconfig +++ b/arch/arm/mach-s3c64xx/Kconfig | |||
| @@ -143,7 +143,7 @@ config MACH_SMDK6410 | |||
| 143 | select S3C_DEV_USB_HSOTG | 143 | select S3C_DEV_USB_HSOTG |
| 144 | select S3C_DEV_WDT | 144 | select S3C_DEV_WDT |
| 145 | select SAMSUNG_DEV_KEYPAD | 145 | select SAMSUNG_DEV_KEYPAD |
| 146 | select HAVE_S3C2410_WATCHDOG | 146 | select HAVE_S3C2410_WATCHDOG if WATCHDOG |
| 147 | select S3C64XX_SETUP_SDHCI | 147 | select S3C64XX_SETUP_SDHCI |
| 148 | select S3C64XX_SETUP_I2C1 | 148 | select S3C64XX_SETUP_I2C1 |
| 149 | select S3C64XX_SETUP_IDE | 149 | select S3C64XX_SETUP_IDE |
diff --git a/arch/arm/mach-s3c64xx/mach-mini6410.c b/arch/arm/mach-s3c64xx/mach-mini6410.c index 249c62956471..89f35e02e883 100644 --- a/arch/arm/mach-s3c64xx/mach-mini6410.c +++ b/arch/arm/mach-s3c64xx/mach-mini6410.c | |||
| @@ -45,7 +45,7 @@ | |||
| 45 | 45 | ||
| 46 | #include <video/platform_lcd.h> | 46 | #include <video/platform_lcd.h> |
| 47 | 47 | ||
| 48 | #define UCON (S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK) | 48 | #define UCON S3C2410_UCON_DEFAULT |
| 49 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) | 49 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) |
| 50 | #define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE) | 50 | #define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE) |
| 51 | 51 | ||
diff --git a/arch/arm/mach-s3c64xx/mach-real6410.c b/arch/arm/mach-s3c64xx/mach-real6410.c index f9ef9b5c5f5a..4957ab0a0d4a 100644 --- a/arch/arm/mach-s3c64xx/mach-real6410.c +++ b/arch/arm/mach-s3c64xx/mach-real6410.c | |||
| @@ -46,7 +46,7 @@ | |||
| 46 | 46 | ||
| 47 | #include <video/platform_lcd.h> | 47 | #include <video/platform_lcd.h> |
| 48 | 48 | ||
| 49 | #define UCON (S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK) | 49 | #define UCON S3C2410_UCON_DEFAULT |
| 50 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) | 50 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) |
| 51 | #define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE) | 51 | #define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE) |
| 52 | 52 | ||
diff --git a/arch/arm/mach-s5pv210/mach-smdkc110.c b/arch/arm/mach-s5pv210/mach-smdkc110.c index 0ad7924fe62e..5dd1681c069e 100644 --- a/arch/arm/mach-s5pv210/mach-smdkc110.c +++ b/arch/arm/mach-s5pv210/mach-smdkc110.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/serial_core.h> | 14 | #include <linux/serial_core.h> |
| 15 | #include <linux/i2c.h> | 15 | #include <linux/i2c.h> |
| 16 | #include <linux/sysdev.h> | ||
| 16 | 17 | ||
| 17 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
| 18 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
diff --git a/arch/arm/mach-s5pv210/mach-smdkv210.c b/arch/arm/mach-s5pv210/mach-smdkv210.c index bcd7a5d53401..1fbc45b2a432 100644 --- a/arch/arm/mach-s5pv210/mach-smdkv210.c +++ b/arch/arm/mach-s5pv210/mach-smdkv210.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/i2c.h> | 13 | #include <linux/i2c.h> |
| 14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
| 15 | #include <linux/serial_core.h> | 15 | #include <linux/serial_core.h> |
| 16 | #include <linux/sysdev.h> | ||
| 16 | 17 | ||
| 17 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
| 18 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
diff --git a/arch/arm/mach-s5pv310/hotplug.c b/arch/arm/mach-s5pv310/hotplug.c index 03652c3605f6..afa5392d9fc0 100644 --- a/arch/arm/mach-s5pv310/hotplug.c +++ b/arch/arm/mach-s5pv310/hotplug.c | |||
| @@ -13,14 +13,11 @@ | |||
| 13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| 14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
| 15 | #include <linux/smp.h> | 15 | #include <linux/smp.h> |
| 16 | #include <linux/completion.h> | ||
| 17 | 16 | ||
| 18 | #include <asm/cacheflush.h> | 17 | #include <asm/cacheflush.h> |
| 19 | 18 | ||
| 20 | extern volatile int pen_release; | 19 | extern volatile int pen_release; |
| 21 | 20 | ||
| 22 | static DECLARE_COMPLETION(cpu_killed); | ||
| 23 | |||
| 24 | static inline void cpu_enter_lowpower(void) | 21 | static inline void cpu_enter_lowpower(void) |
| 25 | { | 22 | { |
| 26 | unsigned int v; | 23 | unsigned int v; |
| @@ -33,13 +30,13 @@ static inline void cpu_enter_lowpower(void) | |||
| 33 | * Turn off coherency | 30 | * Turn off coherency |
| 34 | */ | 31 | */ |
| 35 | " mrc p15, 0, %0, c1, c0, 1\n" | 32 | " mrc p15, 0, %0, c1, c0, 1\n" |
| 36 | " bic %0, %0, #0x20\n" | 33 | " bic %0, %0, %2\n" |
| 37 | " mcr p15, 0, %0, c1, c0, 1\n" | 34 | " mcr p15, 0, %0, c1, c0, 1\n" |
| 38 | " mrc p15, 0, %0, c1, c0, 0\n" | 35 | " mrc p15, 0, %0, c1, c0, 0\n" |
| 39 | " bic %0, %0, #0x04\n" | 36 | " bic %0, %0, #0x04\n" |
| 40 | " mcr p15, 0, %0, c1, c0, 0\n" | 37 | " mcr p15, 0, %0, c1, c0, 0\n" |
| 41 | : "=&r" (v) | 38 | : "=&r" (v) |
| 42 | : "r" (0) | 39 | : "r" (0), "Ir" (CR_C) |
| 43 | : "cc"); | 40 | : "cc"); |
| 44 | } | 41 | } |
| 45 | 42 | ||
| @@ -49,17 +46,17 @@ static inline void cpu_leave_lowpower(void) | |||
| 49 | 46 | ||
| 50 | asm volatile( | 47 | asm volatile( |
| 51 | "mrc p15, 0, %0, c1, c0, 0\n" | 48 | "mrc p15, 0, %0, c1, c0, 0\n" |
| 52 | " orr %0, %0, #0x04\n" | 49 | " orr %0, %0, %1\n" |
| 53 | " mcr p15, 0, %0, c1, c0, 0\n" | 50 | " mcr p15, 0, %0, c1, c0, 0\n" |
| 54 | " mrc p15, 0, %0, c1, c0, 1\n" | 51 | " mrc p15, 0, %0, c1, c0, 1\n" |
| 55 | " orr %0, %0, #0x20\n" | 52 | " orr %0, %0, #0x20\n" |
| 56 | " mcr p15, 0, %0, c1, c0, 1\n" | 53 | " mcr p15, 0, %0, c1, c0, 1\n" |
| 57 | : "=&r" (v) | 54 | : "=&r" (v) |
| 58 | : | 55 | : "Ir" (CR_C) |
| 59 | : "cc"); | 56 | : "cc"); |
| 60 | } | 57 | } |
| 61 | 58 | ||
| 62 | static inline void platform_do_lowpower(unsigned int cpu) | 59 | static inline void platform_do_lowpower(unsigned int cpu, int *spurious) |
| 63 | { | 60 | { |
| 64 | /* | 61 | /* |
| 65 | * there is no power-control hardware on this platform, so all | 62 | * there is no power-control hardware on this platform, so all |
| @@ -83,22 +80,19 @@ static inline void platform_do_lowpower(unsigned int cpu) | |||
| 83 | } | 80 | } |
| 84 | 81 | ||
| 85 | /* | 82 | /* |
| 86 | * getting here, means that we have come out of WFI without | 83 | * Getting here, means that we have come out of WFI without |
| 87 | * having been woken up - this shouldn't happen | 84 | * having been woken up - this shouldn't happen |
| 88 | * | 85 | * |
| 89 | * The trouble is, letting people know about this is not really | 86 | * Just note it happening - when we're woken, we can report |
| 90 | * possible, since we are currently running incoherently, and | 87 | * its occurrence. |
| 91 | * therefore cannot safely call printk() or anything else | ||
| 92 | */ | 88 | */ |
| 93 | #ifdef DEBUG | 89 | (*spurious)++; |
| 94 | printk(KERN_WARN "CPU%u: spurious wakeup call\n", cpu); | ||
| 95 | #endif | ||
| 96 | } | 90 | } |
| 97 | } | 91 | } |
| 98 | 92 | ||
| 99 | int platform_cpu_kill(unsigned int cpu) | 93 | int platform_cpu_kill(unsigned int cpu) |
| 100 | { | 94 | { |
| 101 | return wait_for_completion_timeout(&cpu_killed, 5000); | 95 | return 1; |
| 102 | } | 96 | } |
| 103 | 97 | ||
| 104 | /* | 98 | /* |
| @@ -108,30 +102,22 @@ int platform_cpu_kill(unsigned int cpu) | |||
| 108 | */ | 102 | */ |
| 109 | void platform_cpu_die(unsigned int cpu) | 103 | void platform_cpu_die(unsigned int cpu) |
| 110 | { | 104 | { |
| 111 | #ifdef DEBUG | 105 | int spurious = 0; |
| 112 | unsigned int this_cpu = hard_smp_processor_id(); | ||
| 113 | |||
| 114 | if (cpu != this_cpu) { | ||
| 115 | printk(KERN_CRIT "Eek! platform_cpu_die running on %u, should be %u\n", | ||
| 116 | this_cpu, cpu); | ||
| 117 | BUG(); | ||
| 118 | } | ||
| 119 | #endif | ||
| 120 | |||
| 121 | printk(KERN_NOTICE "CPU%u: shutdown\n", cpu); | ||
| 122 | complete(&cpu_killed); | ||
| 123 | 106 | ||
| 124 | /* | 107 | /* |
| 125 | * we're ready for shutdown now, so do it | 108 | * we're ready for shutdown now, so do it |
| 126 | */ | 109 | */ |
| 127 | cpu_enter_lowpower(); | 110 | cpu_enter_lowpower(); |
| 128 | platform_do_lowpower(cpu); | 111 | platform_do_lowpower(cpu, &spurious); |
| 129 | 112 | ||
| 130 | /* | 113 | /* |
| 131 | * bring this CPU back into the world of cache | 114 | * bring this CPU back into the world of cache |
| 132 | * coherency, and then restore interrupts | 115 | * coherency, and then restore interrupts |
| 133 | */ | 116 | */ |
| 134 | cpu_leave_lowpower(); | 117 | cpu_leave_lowpower(); |
| 118 | |||
| 119 | if (spurious) | ||
| 120 | pr_warn("CPU%u: %u spurious wakeup calls\n", cpu, spurious); | ||
| 135 | } | 121 | } |
| 136 | 122 | ||
| 137 | int platform_cpu_disable(unsigned int cpu) | 123 | int platform_cpu_disable(unsigned int cpu) |
diff --git a/arch/arm/mach-s5pv310/include/mach/smp.h b/arch/arm/mach-s5pv310/include/mach/smp.h index b7ec252384f4..77e5a841f741 100644 --- a/arch/arm/mach-s5pv310/include/mach/smp.h +++ b/arch/arm/mach-s5pv310/include/mach/smp.h | |||
| @@ -7,16 +7,15 @@ | |||
| 7 | #define ASM_ARCH_SMP_H __FILE__ | 7 | #define ASM_ARCH_SMP_H __FILE__ |
| 8 | 8 | ||
| 9 | #include <asm/hardware/gic.h> | 9 | #include <asm/hardware/gic.h> |
| 10 | #include <asm/smp_mpidr.h> | ||
| 11 | 10 | ||
| 12 | extern void __iomem *gic_cpu_base_addr; | 11 | extern void __iomem *gic_cpu_base_addr; |
| 13 | 12 | ||
| 14 | /* | 13 | /* |
| 15 | * We use IRQ1 as the IPI | 14 | * We use IRQ1 as the IPI |
| 16 | */ | 15 | */ |
| 17 | static inline void smp_cross_call(const struct cpumask *mask) | 16 | static inline void smp_cross_call(const struct cpumask *mask, int ipi) |
| 18 | { | 17 | { |
| 19 | gic_raise_softirq(mask, 1); | 18 | gic_raise_softirq(mask, ipi); |
| 20 | } | 19 | } |
| 21 | 20 | ||
| 22 | #endif | 21 | #endif |
diff --git a/arch/arm/mach-s5pv310/platsmp.c b/arch/arm/mach-s5pv310/platsmp.c index d357c198edee..98c04748ed84 100644 --- a/arch/arm/mach-s5pv310/platsmp.c +++ b/arch/arm/mach-s5pv310/platsmp.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | 23 | ||
| 24 | #include <asm/cacheflush.h> | 24 | #include <asm/cacheflush.h> |
| 25 | #include <asm/localtimer.h> | ||
| 26 | #include <asm/smp_scu.h> | 25 | #include <asm/smp_scu.h> |
| 27 | #include <asm/unified.h> | 26 | #include <asm/unified.h> |
| 28 | 27 | ||
| @@ -38,6 +37,19 @@ extern void s5pv310_secondary_startup(void); | |||
| 38 | 37 | ||
| 39 | volatile int __cpuinitdata pen_release = -1; | 38 | volatile int __cpuinitdata pen_release = -1; |
| 40 | 39 | ||
| 40 | /* | ||
| 41 | * Write pen_release in a way that is guaranteed to be visible to all | ||
| 42 | * observers, irrespective of whether they're taking part in coherency | ||
| 43 | * or not. This is necessary for the hotplug code to work reliably. | ||
| 44 | */ | ||
| 45 | static void write_pen_release(int val) | ||
| 46 | { | ||
| 47 | pen_release = val; | ||
| 48 | smp_wmb(); | ||
| 49 | __cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release)); | ||
| 50 | outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1)); | ||
| 51 | } | ||
| 52 | |||
| 41 | static void __iomem *scu_base_addr(void) | 53 | static void __iomem *scu_base_addr(void) |
| 42 | { | 54 | { |
| 43 | return (void __iomem *)(S5P_VA_SCU); | 55 | return (void __iomem *)(S5P_VA_SCU); |
| @@ -47,8 +59,6 @@ static DEFINE_SPINLOCK(boot_lock); | |||
| 47 | 59 | ||
| 48 | void __cpuinit platform_secondary_init(unsigned int cpu) | 60 | void __cpuinit platform_secondary_init(unsigned int cpu) |
| 49 | { | 61 | { |
| 50 | trace_hardirqs_off(); | ||
| 51 | |||
| 52 | /* | 62 | /* |
| 53 | * if any interrupts are already enabled for the primary | 63 | * if any interrupts are already enabled for the primary |
| 54 | * core (e.g. timer irq), then they will not have been enabled | 64 | * core (e.g. timer irq), then they will not have been enabled |
| @@ -60,8 +70,7 @@ void __cpuinit platform_secondary_init(unsigned int cpu) | |||
| 60 | * let the primary processor know we're out of the | 70 | * let the primary processor know we're out of the |
| 61 | * pen, then head off into the C entry point | 71 | * pen, then head off into the C entry point |
| 62 | */ | 72 | */ |
| 63 | pen_release = -1; | 73 | write_pen_release(-1); |
| 64 | smp_wmb(); | ||
| 65 | 74 | ||
| 66 | /* | 75 | /* |
| 67 | * Synchronise with the boot thread. | 76 | * Synchronise with the boot thread. |
| @@ -88,16 +97,14 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
| 88 | * Note that "pen_release" is the hardware CPU ID, whereas | 97 | * Note that "pen_release" is the hardware CPU ID, whereas |
| 89 | * "cpu" is Linux's internal ID. | 98 | * "cpu" is Linux's internal ID. |
| 90 | */ | 99 | */ |
| 91 | pen_release = cpu; | 100 | write_pen_release(cpu); |
| 92 | __cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release)); | ||
| 93 | outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1)); | ||
| 94 | 101 | ||
| 95 | /* | 102 | /* |
| 96 | * Send the secondary CPU a soft interrupt, thereby causing | 103 | * Send the secondary CPU a soft interrupt, thereby causing |
| 97 | * the boot monitor to read the system wide flags register, | 104 | * the boot monitor to read the system wide flags register, |
| 98 | * and branch to the address found there. | 105 | * and branch to the address found there. |
| 99 | */ | 106 | */ |
| 100 | smp_cross_call(cpumask_of(cpu)); | 107 | smp_cross_call(cpumask_of(cpu), 1); |
| 101 | 108 | ||
| 102 | timeout = jiffies + (1 * HZ); | 109 | timeout = jiffies + (1 * HZ); |
| 103 | while (time_before(jiffies, timeout)) { | 110 | while (time_before(jiffies, timeout)) { |
| @@ -130,13 +137,6 @@ void __init smp_init_cpus(void) | |||
| 130 | ncores = scu_base ? scu_get_core_count(scu_base) : 1; | 137 | ncores = scu_base ? scu_get_core_count(scu_base) : 1; |
| 131 | 138 | ||
| 132 | /* sanity check */ | 139 | /* sanity check */ |
| 133 | if (ncores == 0) { | ||
| 134 | printk(KERN_ERR | ||
| 135 | "S5PV310: strange CM count of 0? Default to 1\n"); | ||
| 136 | |||
| 137 | ncores = 1; | ||
| 138 | } | ||
| 139 | |||
| 140 | if (ncores > NR_CPUS) { | 140 | if (ncores > NR_CPUS) { |
| 141 | printk(KERN_WARNING | 141 | printk(KERN_WARNING |
| 142 | "S5PV310: no. of cores (%d) greater than configured " | 142 | "S5PV310: no. of cores (%d) greater than configured " |
| @@ -149,18 +149,10 @@ void __init smp_init_cpus(void) | |||
| 149 | set_cpu_possible(i, true); | 149 | set_cpu_possible(i, true); |
| 150 | } | 150 | } |
| 151 | 151 | ||
| 152 | void __init smp_prepare_cpus(unsigned int max_cpus) | 152 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) |
| 153 | { | 153 | { |
| 154 | unsigned int ncores = num_possible_cpus(); | ||
| 155 | unsigned int cpu = smp_processor_id(); | ||
| 156 | int i; | 154 | int i; |
| 157 | 155 | ||
| 158 | smp_store_cpu_info(cpu); | ||
| 159 | |||
| 160 | /* are we trying to boot more cores than exist? */ | ||
| 161 | if (max_cpus > ncores) | ||
| 162 | max_cpus = ncores; | ||
| 163 | |||
| 164 | /* | 156 | /* |
| 165 | * Initialise the present map, which describes the set of CPUs | 157 | * Initialise the present map, which describes the set of CPUs |
| 166 | * actually populated at the present time. | 158 | * actually populated at the present time. |
| @@ -168,25 +160,13 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 168 | for (i = 0; i < max_cpus; i++) | 160 | for (i = 0; i < max_cpus; i++) |
| 169 | set_cpu_present(i, true); | 161 | set_cpu_present(i, true); |
| 170 | 162 | ||
| 163 | scu_enable(scu_base_addr()); | ||
| 164 | |||
| 171 | /* | 165 | /* |
| 172 | * Initialise the SCU if there are more than one CPU and let | 166 | * Write the address of secondary startup into the |
| 173 | * them know where to start. | 167 | * system-wide flags register. The boot monitor waits |
| 168 | * until it receives a soft interrupt, and then the | ||
| 169 | * secondary CPU branches to this address. | ||
| 174 | */ | 170 | */ |
| 175 | if (max_cpus > 1) { | ||
| 176 | /* | ||
| 177 | * Enable the local timer or broadcast device for the | ||
| 178 | * boot CPU, but only if we have more than one CPU. | ||
| 179 | */ | ||
| 180 | percpu_timer_setup(); | ||
| 181 | |||
| 182 | scu_enable(scu_base_addr()); | ||
| 183 | |||
| 184 | /* | ||
| 185 | * Write the address of secondary startup into the | ||
| 186 | * system-wide flags register. The boot monitor waits | ||
| 187 | * until it receives a soft interrupt, and then the | ||
| 188 | * secondary CPU branches to this address. | ||
| 189 | */ | ||
| 190 | __raw_writel(BSYM(virt_to_phys(s5pv310_secondary_startup)), S5P_VA_SYSRAM); | 171 | __raw_writel(BSYM(virt_to_phys(s5pv310_secondary_startup)), S5P_VA_SYSRAM); |
| 191 | } | ||
| 192 | } | 172 | } |
diff --git a/arch/arm/mach-shark/include/mach/vmalloc.h b/arch/arm/mach-shark/include/mach/vmalloc.h index 8e845b6a7cb5..b10df988526d 100644 --- a/arch/arm/mach-shark/include/mach/vmalloc.h +++ b/arch/arm/mach-shark/include/mach/vmalloc.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * arch/arm/mach-shark/include/mach/vmalloc.h | 2 | * arch/arm/mach-shark/include/mach/vmalloc.h |
| 3 | */ | 3 | */ |
| 4 | #define VMALLOC_END 0xd0000000 | 4 | #define VMALLOC_END 0xd0000000UL |
diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig index f8f06e9fec35..632933357242 100644 --- a/arch/arm/mach-shmobile/Kconfig +++ b/arch/arm/mach-shmobile/Kconfig | |||
| @@ -116,4 +116,6 @@ endmenu | |||
| 116 | config SH_CLK_CPG | 116 | config SH_CLK_CPG |
| 117 | bool | 117 | bool |
| 118 | 118 | ||
| 119 | source "drivers/sh/Kconfig" | ||
| 120 | |||
| 119 | endif | 121 | endif |
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index 46ca4d4abf91..d440e5f456ad 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
| @@ -163,11 +163,13 @@ static struct mtd_partition nor_flash_partitions[] = { | |||
| 163 | .name = "loader", | 163 | .name = "loader", |
| 164 | .offset = 0x00000000, | 164 | .offset = 0x00000000, |
| 165 | .size = 512 * 1024, | 165 | .size = 512 * 1024, |
| 166 | .mask_flags = MTD_WRITEABLE, | ||
| 166 | }, | 167 | }, |
| 167 | { | 168 | { |
| 168 | .name = "bootenv", | 169 | .name = "bootenv", |
| 169 | .offset = MTDPART_OFS_APPEND, | 170 | .offset = MTDPART_OFS_APPEND, |
| 170 | .size = 512 * 1024, | 171 | .size = 512 * 1024, |
| 172 | .mask_flags = MTD_WRITEABLE, | ||
| 171 | }, | 173 | }, |
| 172 | { | 174 | { |
| 173 | .name = "kernel_ro", | 175 | .name = "kernel_ro", |
| @@ -565,12 +567,143 @@ static struct platform_device *qhd_devices[] __initdata = { | |||
| 565 | 567 | ||
| 566 | /* FSI */ | 568 | /* FSI */ |
| 567 | #define IRQ_FSI evt2irq(0x1840) | 569 | #define IRQ_FSI evt2irq(0x1840) |
| 570 | static int __fsi_set_rate(struct clk *clk, long rate, int enable) | ||
| 571 | { | ||
| 572 | int ret = 0; | ||
| 573 | |||
| 574 | if (rate <= 0) | ||
| 575 | return ret; | ||
| 576 | |||
| 577 | if (enable) { | ||
| 578 | ret = clk_set_rate(clk, rate); | ||
| 579 | if (0 == ret) | ||
| 580 | ret = clk_enable(clk); | ||
| 581 | } else { | ||
| 582 | clk_disable(clk); | ||
| 583 | } | ||
| 584 | |||
| 585 | return ret; | ||
| 586 | } | ||
| 587 | |||
| 588 | static int __fsi_set_round_rate(struct clk *clk, long rate, int enable) | ||
| 589 | { | ||
| 590 | return __fsi_set_rate(clk, clk_round_rate(clk, rate), enable); | ||
| 591 | } | ||
| 592 | |||
| 593 | static int fsi_ak4642_set_rate(struct device *dev, int rate, int enable) | ||
| 594 | { | ||
| 595 | struct clk *fsia_ick; | ||
| 596 | struct clk *fsiack; | ||
| 597 | int ret = -EIO; | ||
| 598 | |||
| 599 | fsia_ick = clk_get(dev, "icka"); | ||
| 600 | if (IS_ERR(fsia_ick)) | ||
| 601 | return PTR_ERR(fsia_ick); | ||
| 602 | |||
| 603 | /* | ||
| 604 | * FSIACK is connected to AK4642, | ||
| 605 | * and use external clock pin from it. | ||
| 606 | * it is parent of fsia_ick now. | ||
| 607 | */ | ||
| 608 | fsiack = clk_get_parent(fsia_ick); | ||
| 609 | if (!fsiack) | ||
| 610 | goto fsia_ick_out; | ||
| 611 | |||
| 612 | /* | ||
| 613 | * we get 1/1 divided clock by setting same rate to fsiack and fsia_ick | ||
| 614 | * | ||
| 615 | ** FIXME ** | ||
| 616 | * Because the freq_table of external clk (fsiack) are all 0, | ||
| 617 | * the return value of clk_round_rate became 0. | ||
| 618 | * So, it use __fsi_set_rate here. | ||
| 619 | */ | ||
| 620 | ret = __fsi_set_rate(fsiack, rate, enable); | ||
| 621 | if (ret < 0) | ||
| 622 | goto fsiack_out; | ||
| 623 | |||
| 624 | ret = __fsi_set_round_rate(fsia_ick, rate, enable); | ||
| 625 | if ((ret < 0) && enable) | ||
| 626 | __fsi_set_round_rate(fsiack, rate, 0); /* disable FSI ACK */ | ||
| 627 | |||
| 628 | fsiack_out: | ||
| 629 | clk_put(fsiack); | ||
| 630 | |||
| 631 | fsia_ick_out: | ||
| 632 | clk_put(fsia_ick); | ||
| 633 | |||
| 634 | return 0; | ||
| 635 | } | ||
| 636 | |||
| 637 | static int fsi_hdmi_set_rate(struct device *dev, int rate, int enable) | ||
| 638 | { | ||
| 639 | struct clk *fsib_clk; | ||
| 640 | struct clk *fdiv_clk = &sh7372_fsidivb_clk; | ||
| 641 | long fsib_rate = 0; | ||
| 642 | long fdiv_rate = 0; | ||
| 643 | int ackmd_bpfmd; | ||
| 644 | int ret; | ||
| 645 | |||
| 646 | switch (rate) { | ||
| 647 | case 44100: | ||
| 648 | fsib_rate = rate * 256; | ||
| 649 | ackmd_bpfmd = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64; | ||
| 650 | break; | ||
| 651 | case 48000: | ||
| 652 | fsib_rate = 85428000; /* around 48kHz x 256 x 7 */ | ||
| 653 | fdiv_rate = rate * 256; | ||
| 654 | ackmd_bpfmd = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64; | ||
| 655 | break; | ||
| 656 | default: | ||
| 657 | pr_err("unsupported rate in FSI2 port B\n"); | ||
| 658 | return -EINVAL; | ||
| 659 | } | ||
| 660 | |||
| 661 | /* FSI B setting */ | ||
| 662 | fsib_clk = clk_get(dev, "ickb"); | ||
| 663 | if (IS_ERR(fsib_clk)) | ||
| 664 | return -EIO; | ||
| 665 | |||
| 666 | ret = __fsi_set_round_rate(fsib_clk, fsib_rate, enable); | ||
| 667 | clk_put(fsib_clk); | ||
| 668 | if (ret < 0) | ||
| 669 | return ret; | ||
| 670 | |||
| 671 | /* FSI DIV setting */ | ||
| 672 | ret = __fsi_set_round_rate(fdiv_clk, fdiv_rate, enable); | ||
| 673 | if (ret < 0) { | ||
| 674 | /* disable FSI B */ | ||
| 675 | if (enable) | ||
| 676 | __fsi_set_round_rate(fsib_clk, fsib_rate, 0); | ||
| 677 | return ret; | ||
| 678 | } | ||
| 679 | |||
| 680 | return ackmd_bpfmd; | ||
| 681 | } | ||
| 682 | |||
| 683 | static int fsi_set_rate(struct device *dev, int is_porta, int rate, int enable) | ||
| 684 | { | ||
| 685 | int ret; | ||
| 686 | |||
| 687 | if (is_porta) | ||
| 688 | ret = fsi_ak4642_set_rate(dev, rate, enable); | ||
| 689 | else | ||
| 690 | ret = fsi_hdmi_set_rate(dev, rate, enable); | ||
| 691 | |||
| 692 | return ret; | ||
| 693 | } | ||
| 694 | |||
| 568 | static struct sh_fsi_platform_info fsi_info = { | 695 | static struct sh_fsi_platform_info fsi_info = { |
| 569 | .porta_flags = SH_FSI_BRS_INV | | 696 | .porta_flags = SH_FSI_BRS_INV | |
| 570 | SH_FSI_OUT_SLAVE_MODE | | 697 | SH_FSI_OUT_SLAVE_MODE | |
| 571 | SH_FSI_IN_SLAVE_MODE | | 698 | SH_FSI_IN_SLAVE_MODE | |
| 572 | SH_FSI_OFMT(PCM) | | 699 | SH_FSI_OFMT(PCM) | |
| 573 | SH_FSI_IFMT(PCM), | 700 | SH_FSI_IFMT(PCM), |
| 701 | |||
| 702 | .portb_flags = SH_FSI_BRS_INV | | ||
| 703 | SH_FSI_BRM_INV | | ||
| 704 | SH_FSI_LRS_INV | | ||
| 705 | SH_FSI_OFMT(SPDIF), | ||
| 706 | .set_rate = fsi_set_rate, | ||
| 574 | }; | 707 | }; |
| 575 | 708 | ||
| 576 | static struct resource fsi_resources[] = { | 709 | static struct resource fsi_resources[] = { |
| @@ -634,6 +767,7 @@ static struct platform_device lcdc1_device = { | |||
| 634 | static struct sh_mobile_hdmi_info hdmi_info = { | 767 | static struct sh_mobile_hdmi_info hdmi_info = { |
| 635 | .lcd_chan = &sh_mobile_lcdc1_info.ch[0], | 768 | .lcd_chan = &sh_mobile_lcdc1_info.ch[0], |
| 636 | .lcd_dev = &lcdc1_device.dev, | 769 | .lcd_dev = &lcdc1_device.dev, |
| 770 | .flags = HDMI_SND_SRC_SPDIF, | ||
| 637 | }; | 771 | }; |
| 638 | 772 | ||
| 639 | static struct resource hdmi_resources[] = { | 773 | static struct resource hdmi_resources[] = { |
| @@ -835,6 +969,11 @@ static int __init hdmi_init_pm_clock(void) | |||
| 835 | goto out; | 969 | goto out; |
| 836 | } | 970 | } |
| 837 | 971 | ||
| 972 | ret = clk_enable(&sh7372_pllc2_clk); | ||
| 973 | if (ret < 0) { | ||
| 974 | pr_err("Cannot enable pllc2 clock\n"); | ||
| 975 | goto out; | ||
| 976 | } | ||
| 838 | pr_debug("PLLC2 set frequency %lu\n", rate); | 977 | pr_debug("PLLC2 set frequency %lu\n", rate); |
| 839 | 978 | ||
| 840 | ret = clk_set_parent(hdmi_ick, &sh7372_pllc2_clk); | 979 | ret = clk_set_parent(hdmi_ick, &sh7372_pllc2_clk); |
| @@ -851,23 +990,11 @@ out: | |||
| 851 | 990 | ||
| 852 | device_initcall(hdmi_init_pm_clock); | 991 | device_initcall(hdmi_init_pm_clock); |
| 853 | 992 | ||
| 854 | #define FSIACK_DUMMY_RATE 48000 | ||
| 855 | static int __init fsi_init_pm_clock(void) | 993 | static int __init fsi_init_pm_clock(void) |
| 856 | { | 994 | { |
| 857 | struct clk *fsia_ick; | 995 | struct clk *fsia_ick; |
| 858 | int ret; | 996 | int ret; |
| 859 | 997 | ||
| 860 | /* | ||
| 861 | * FSIACK is connected to AK4642, | ||
| 862 | * and the rate is depend on playing sound rate. | ||
| 863 | * So, set dummy rate (= 48k) here | ||
| 864 | */ | ||
| 865 | ret = clk_set_rate(&sh7372_fsiack_clk, FSIACK_DUMMY_RATE); | ||
| 866 | if (ret < 0) { | ||
| 867 | pr_err("Cannot set FSIACK dummy rate: %d\n", ret); | ||
| 868 | return ret; | ||
| 869 | } | ||
| 870 | |||
| 871 | fsia_ick = clk_get(&fsi_device.dev, "icka"); | 998 | fsia_ick = clk_get(&fsi_device.dev, "icka"); |
| 872 | if (IS_ERR(fsia_ick)) { | 999 | if (IS_ERR(fsia_ick)) { |
| 873 | ret = PTR_ERR(fsia_ick); | 1000 | ret = PTR_ERR(fsia_ick); |
| @@ -876,16 +1003,9 @@ static int __init fsi_init_pm_clock(void) | |||
| 876 | } | 1003 | } |
| 877 | 1004 | ||
| 878 | ret = clk_set_parent(fsia_ick, &sh7372_fsiack_clk); | 1005 | ret = clk_set_parent(fsia_ick, &sh7372_fsiack_clk); |
| 879 | if (ret < 0) { | ||
| 880 | pr_err("Cannot set FSI-A parent: %d\n", ret); | ||
| 881 | goto out; | ||
| 882 | } | ||
| 883 | |||
| 884 | ret = clk_set_rate(fsia_ick, FSIACK_DUMMY_RATE); | ||
| 885 | if (ret < 0) | 1006 | if (ret < 0) |
| 886 | pr_err("Cannot set FSI-A rate: %d\n", ret); | 1007 | pr_err("Cannot set FSI-A parent: %d\n", ret); |
| 887 | 1008 | ||
| 888 | out: | ||
| 889 | clk_put(fsia_ick); | 1009 | clk_put(fsia_ick); |
| 890 | 1010 | ||
| 891 | return ret; | 1011 | return ret; |
| @@ -992,6 +1112,7 @@ static void __init ap4evb_map_io(void) | |||
| 992 | 1112 | ||
| 993 | #define GPIO_PORT9CR 0xE6051009 | 1113 | #define GPIO_PORT9CR 0xE6051009 |
| 994 | #define GPIO_PORT10CR 0xE605100A | 1114 | #define GPIO_PORT10CR 0xE605100A |
| 1115 | #define USCCR1 0xE6058144 | ||
| 995 | static void __init ap4evb_init(void) | 1116 | static void __init ap4evb_init(void) |
| 996 | { | 1117 | { |
| 997 | u32 srcr4; | 1118 | u32 srcr4; |
| @@ -1062,7 +1183,7 @@ static void __init ap4evb_init(void) | |||
| 1062 | /* setup USB phy */ | 1183 | /* setup USB phy */ |
| 1063 | __raw_writew(0x8a0a, 0xE6058130); /* USBCR2 */ | 1184 | __raw_writew(0x8a0a, 0xE6058130); /* USBCR2 */ |
| 1064 | 1185 | ||
| 1065 | /* enable FSI2 */ | 1186 | /* enable FSI2 port A (ak4643) */ |
| 1066 | gpio_request(GPIO_FN_FSIAIBT, NULL); | 1187 | gpio_request(GPIO_FN_FSIAIBT, NULL); |
| 1067 | gpio_request(GPIO_FN_FSIAILR, NULL); | 1188 | gpio_request(GPIO_FN_FSIAILR, NULL); |
| 1068 | gpio_request(GPIO_FN_FSIAISLD, NULL); | 1189 | gpio_request(GPIO_FN_FSIAISLD, NULL); |
| @@ -1079,6 +1200,10 @@ static void __init ap4evb_init(void) | |||
| 1079 | gpio_request(GPIO_PORT41, NULL); | 1200 | gpio_request(GPIO_PORT41, NULL); |
| 1080 | gpio_direction_input(GPIO_PORT41); | 1201 | gpio_direction_input(GPIO_PORT41); |
| 1081 | 1202 | ||
| 1203 | /* setup FSI2 port B (HDMI) */ | ||
| 1204 | gpio_request(GPIO_FN_FSIBCK, NULL); | ||
| 1205 | __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */ | ||
| 1206 | |||
| 1082 | /* set SPU2 clock to 119.6 MHz */ | 1207 | /* set SPU2 clock to 119.6 MHz */ |
| 1083 | clk = clk_get(NULL, "spu_clk"); | 1208 | clk = clk_get(NULL, "spu_clk"); |
| 1084 | if (!IS_ERR(clk)) { | 1209 | if (!IS_ERR(clk)) { |
diff --git a/arch/arm/mach-shmobile/clock-sh7372.c b/arch/arm/mach-shmobile/clock-sh7372.c index 445112adba46..d98deb497c2f 100644 --- a/arch/arm/mach-shmobile/clock-sh7372.c +++ b/arch/arm/mach-shmobile/clock-sh7372.c | |||
| @@ -50,6 +50,9 @@ | |||
| 50 | #define SMSTPCR3 0xe615013c | 50 | #define SMSTPCR3 0xe615013c |
| 51 | #define SMSTPCR4 0xe6150140 | 51 | #define SMSTPCR4 0xe6150140 |
| 52 | 52 | ||
| 53 | #define FSIDIVA 0xFE1F8000 | ||
| 54 | #define FSIDIVB 0xFE1F8008 | ||
| 55 | |||
| 53 | /* Platforms must set frequency on their DV_CLKI pin */ | 56 | /* Platforms must set frequency on their DV_CLKI pin */ |
| 54 | struct clk sh7372_dv_clki_clk = { | 57 | struct clk sh7372_dv_clki_clk = { |
| 55 | }; | 58 | }; |
| @@ -217,8 +220,7 @@ static void pllc2_disable(struct clk *clk) | |||
| 217 | __raw_writel(__raw_readl(PLLC2CR) & ~0x80000000, PLLC2CR); | 220 | __raw_writel(__raw_readl(PLLC2CR) & ~0x80000000, PLLC2CR); |
| 218 | } | 221 | } |
| 219 | 222 | ||
| 220 | static int pllc2_set_rate(struct clk *clk, | 223 | static int pllc2_set_rate(struct clk *clk, unsigned long rate) |
| 221 | unsigned long rate, int algo_id) | ||
| 222 | { | 224 | { |
| 223 | unsigned long value; | 225 | unsigned long value; |
| 224 | int idx; | 226 | int idx; |
| @@ -227,21 +229,13 @@ static int pllc2_set_rate(struct clk *clk, | |||
| 227 | if (idx < 0) | 229 | if (idx < 0) |
| 228 | return idx; | 230 | return idx; |
| 229 | 231 | ||
| 230 | if (rate == clk->parent->rate) { | 232 | if (rate == clk->parent->rate) |
| 231 | pllc2_disable(clk); | 233 | return -EINVAL; |
| 232 | return 0; | ||
| 233 | } | ||
| 234 | 234 | ||
| 235 | value = __raw_readl(PLLC2CR) & ~(0x3f << 24); | 235 | value = __raw_readl(PLLC2CR) & ~(0x3f << 24); |
| 236 | 236 | ||
| 237 | if (value & 0x80000000) | ||
| 238 | pllc2_disable(clk); | ||
| 239 | |||
| 240 | __raw_writel((value & ~0x80000000) | ((idx + 19) << 24), PLLC2CR); | 237 | __raw_writel((value & ~0x80000000) | ((idx + 19) << 24), PLLC2CR); |
| 241 | 238 | ||
| 242 | if (value & 0x80000000) | ||
| 243 | return pllc2_enable(clk); | ||
| 244 | |||
| 245 | return 0; | 239 | return 0; |
| 246 | } | 240 | } |
| 247 | 241 | ||
| @@ -288,6 +282,7 @@ struct clk sh7372_pllc2_clk = { | |||
| 288 | .ops = &pllc2_clk_ops, | 282 | .ops = &pllc2_clk_ops, |
| 289 | .parent = &extal1_div2_clk, | 283 | .parent = &extal1_div2_clk, |
| 290 | .freq_table = pllc2_freq_table, | 284 | .freq_table = pllc2_freq_table, |
| 285 | .nr_freqs = ARRAY_SIZE(pllc2_freq_table) - 1, | ||
| 291 | .parent_table = pllc2_parent, | 286 | .parent_table = pllc2_parent, |
| 292 | .parent_num = ARRAY_SIZE(pllc2_parent), | 287 | .parent_num = ARRAY_SIZE(pllc2_parent), |
| 293 | }; | 288 | }; |
| @@ -417,6 +412,93 @@ static struct clk div6_reparent_clks[DIV6_REPARENT_NR] = { | |||
| 417 | fsibckcr_parent, ARRAY_SIZE(fsibckcr_parent), 6, 2), | 412 | fsibckcr_parent, ARRAY_SIZE(fsibckcr_parent), 6, 2), |
| 418 | }; | 413 | }; |
| 419 | 414 | ||
| 415 | /* FSI DIV */ | ||
| 416 | static unsigned long fsidiv_recalc(struct clk *clk) | ||
| 417 | { | ||
| 418 | unsigned long value; | ||
| 419 | |||
| 420 | value = __raw_readl(clk->mapping->base); | ||
| 421 | |||
| 422 | if ((value & 0x3) != 0x3) | ||
| 423 | return 0; | ||
| 424 | |||
| 425 | value >>= 16; | ||
| 426 | if (value < 2) | ||
| 427 | return 0; | ||
| 428 | |||
| 429 | return clk->parent->rate / value; | ||
| 430 | } | ||
| 431 | |||
| 432 | static long fsidiv_round_rate(struct clk *clk, unsigned long rate) | ||
| 433 | { | ||
| 434 | return clk_rate_div_range_round(clk, 2, 0xffff, rate); | ||
| 435 | } | ||
| 436 | |||
| 437 | static void fsidiv_disable(struct clk *clk) | ||
| 438 | { | ||
| 439 | __raw_writel(0, clk->mapping->base); | ||
| 440 | } | ||
| 441 | |||
| 442 | static int fsidiv_enable(struct clk *clk) | ||
| 443 | { | ||
| 444 | unsigned long value; | ||
| 445 | |||
| 446 | value = __raw_readl(clk->mapping->base) >> 16; | ||
| 447 | if (value < 2) | ||
| 448 | return -EIO; | ||
| 449 | |||
| 450 | __raw_writel((value << 16) | 0x3, clk->mapping->base); | ||
| 451 | |||
| 452 | return 0; | ||
| 453 | } | ||
| 454 | |||
| 455 | static int fsidiv_set_rate(struct clk *clk, unsigned long rate) | ||
| 456 | { | ||
| 457 | int idx; | ||
| 458 | |||
| 459 | idx = (clk->parent->rate / rate) & 0xffff; | ||
| 460 | if (idx < 2) | ||
| 461 | return -EINVAL; | ||
| 462 | |||
| 463 | __raw_writel(idx << 16, clk->mapping->base); | ||
| 464 | return 0; | ||
| 465 | } | ||
| 466 | |||
| 467 | static struct clk_ops fsidiv_clk_ops = { | ||
| 468 | .recalc = fsidiv_recalc, | ||
| 469 | .round_rate = fsidiv_round_rate, | ||
| 470 | .set_rate = fsidiv_set_rate, | ||
| 471 | .enable = fsidiv_enable, | ||
| 472 | .disable = fsidiv_disable, | ||
| 473 | }; | ||
| 474 | |||
| 475 | static struct clk_mapping sh7372_fsidiva_clk_mapping = { | ||
| 476 | .phys = FSIDIVA, | ||
| 477 | .len = 8, | ||
| 478 | }; | ||
| 479 | |||
| 480 | struct clk sh7372_fsidiva_clk = { | ||
| 481 | .ops = &fsidiv_clk_ops, | ||
| 482 | .parent = &div6_reparent_clks[DIV6_FSIA], /* late install */ | ||
| 483 | .mapping = &sh7372_fsidiva_clk_mapping, | ||
| 484 | }; | ||
| 485 | |||
| 486 | static struct clk_mapping sh7372_fsidivb_clk_mapping = { | ||
| 487 | .phys = FSIDIVB, | ||
| 488 | .len = 8, | ||
| 489 | }; | ||
| 490 | |||
| 491 | struct clk sh7372_fsidivb_clk = { | ||
| 492 | .ops = &fsidiv_clk_ops, | ||
| 493 | .parent = &div6_reparent_clks[DIV6_FSIB], /* late install */ | ||
| 494 | .mapping = &sh7372_fsidivb_clk_mapping, | ||
| 495 | }; | ||
| 496 | |||
| 497 | static struct clk *late_main_clks[] = { | ||
| 498 | &sh7372_fsidiva_clk, | ||
| 499 | &sh7372_fsidivb_clk, | ||
| 500 | }; | ||
| 501 | |||
| 420 | enum { MSTP001, | 502 | enum { MSTP001, |
| 421 | MSTP131, MSTP130, | 503 | MSTP131, MSTP130, |
| 422 | MSTP129, MSTP128, MSTP127, MSTP126, MSTP125, | 504 | MSTP129, MSTP128, MSTP127, MSTP126, MSTP125, |
| @@ -510,8 +592,6 @@ static struct clk_lookup lookups[] = { | |||
| 510 | CLKDEV_CON_ID("vck3_clk", &div6_clks[DIV6_VCK3]), | 592 | CLKDEV_CON_ID("vck3_clk", &div6_clks[DIV6_VCK3]), |
| 511 | CLKDEV_CON_ID("fmsi_clk", &div6_clks[DIV6_FMSI]), | 593 | CLKDEV_CON_ID("fmsi_clk", &div6_clks[DIV6_FMSI]), |
| 512 | CLKDEV_CON_ID("fmso_clk", &div6_clks[DIV6_FMSO]), | 594 | CLKDEV_CON_ID("fmso_clk", &div6_clks[DIV6_FMSO]), |
| 513 | CLKDEV_CON_ID("fsia_clk", &div6_reparent_clks[DIV6_FSIA]), | ||
| 514 | CLKDEV_CON_ID("fsib_clk", &div6_reparent_clks[DIV6_FSIB]), | ||
| 515 | CLKDEV_CON_ID("sub_clk", &div6_clks[DIV6_SUB]), | 595 | CLKDEV_CON_ID("sub_clk", &div6_clks[DIV6_SUB]), |
| 516 | CLKDEV_CON_ID("spu_clk", &div6_clks[DIV6_SPU]), | 596 | CLKDEV_CON_ID("spu_clk", &div6_clks[DIV6_SPU]), |
| 517 | CLKDEV_CON_ID("vou_clk", &div6_clks[DIV6_VOU]), | 597 | CLKDEV_CON_ID("vou_clk", &div6_clks[DIV6_VOU]), |
| @@ -548,8 +628,8 @@ static struct clk_lookup lookups[] = { | |||
| 548 | CLKDEV_DEV_ID("sh_cmt.10", &mstp_clks[MSTP329]), /* CMT10 */ | 628 | CLKDEV_DEV_ID("sh_cmt.10", &mstp_clks[MSTP329]), /* CMT10 */ |
| 549 | CLKDEV_DEV_ID("sh_fsi2", &mstp_clks[MSTP328]), /* FSI2 */ | 629 | CLKDEV_DEV_ID("sh_fsi2", &mstp_clks[MSTP328]), /* FSI2 */ |
| 550 | CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), /* IIC1 */ | 630 | CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), /* IIC1 */ |
| 551 | CLKDEV_DEV_ID("r8a66597_hcd.0", &mstp_clks[MSTP323]), /* USB0 */ | 631 | CLKDEV_DEV_ID("r8a66597_hcd.0", &mstp_clks[MSTP322]), /* USB0 */ |
| 552 | CLKDEV_DEV_ID("r8a66597_udc.0", &mstp_clks[MSTP323]), /* USB0 */ | 632 | CLKDEV_DEV_ID("r8a66597_udc.0", &mstp_clks[MSTP322]), /* USB0 */ |
| 553 | CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), /* SDHI0 */ | 633 | CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), /* SDHI0 */ |
| 554 | CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */ | 634 | CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */ |
| 555 | CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMC */ | 635 | CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMC */ |
| @@ -585,6 +665,9 @@ void __init sh7372_clock_init(void) | |||
| 585 | if (!ret) | 665 | if (!ret) |
| 586 | ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); | 666 | ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); |
| 587 | 667 | ||
| 668 | for (k = 0; !ret && (k < ARRAY_SIZE(late_main_clks)); k++) | ||
| 669 | ret = clk_register(late_main_clks[k]); | ||
| 670 | |||
| 588 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 671 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
| 589 | 672 | ||
| 590 | if (!ret) | 673 | if (!ret) |
diff --git a/arch/arm/mach-shmobile/include/mach/gpio.h b/arch/arm/mach-shmobile/include/mach/gpio.h index 5bc6bd444d72..2b1bb9e43dda 100644 --- a/arch/arm/mach-shmobile/include/mach/gpio.h +++ b/arch/arm/mach-shmobile/include/mach/gpio.h | |||
| @@ -35,12 +35,12 @@ static inline int gpio_cansleep(unsigned gpio) | |||
| 35 | 35 | ||
| 36 | static inline int gpio_to_irq(unsigned gpio) | 36 | static inline int gpio_to_irq(unsigned gpio) |
| 37 | { | 37 | { |
| 38 | return -ENOSYS; | 38 | return __gpio_to_irq(gpio); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | static inline int irq_to_gpio(unsigned int irq) | 41 | static inline int irq_to_gpio(unsigned int irq) |
| 42 | { | 42 | { |
| 43 | return -EINVAL; | 43 | return -ENOSYS; |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | #endif /* CONFIG_GPIOLIB */ | 46 | #endif /* CONFIG_GPIOLIB */ |
diff --git a/arch/arm/mach-shmobile/include/mach/sh7372.h b/arch/arm/mach-shmobile/include/mach/sh7372.h index 147775a94bce..e4f9004e7103 100644 --- a/arch/arm/mach-shmobile/include/mach/sh7372.h +++ b/arch/arm/mach-shmobile/include/mach/sh7372.h | |||
| @@ -464,5 +464,7 @@ extern struct clk sh7372_dv_clki_div2_clk; | |||
| 464 | extern struct clk sh7372_pllc2_clk; | 464 | extern struct clk sh7372_pllc2_clk; |
| 465 | extern struct clk sh7372_fsiack_clk; | 465 | extern struct clk sh7372_fsiack_clk; |
| 466 | extern struct clk sh7372_fsibck_clk; | 466 | extern struct clk sh7372_fsibck_clk; |
| 467 | extern struct clk sh7372_fsidiva_clk; | ||
| 468 | extern struct clk sh7372_fsidivb_clk; | ||
| 467 | 469 | ||
| 468 | #endif /* __ASM_SH7372_H__ */ | 470 | #endif /* __ASM_SH7372_H__ */ |
diff --git a/arch/arm/mach-shmobile/intc-sh7372.c b/arch/arm/mach-shmobile/intc-sh7372.c index 4cd3cae38e72..30b2f400666a 100644 --- a/arch/arm/mach-shmobile/intc-sh7372.c +++ b/arch/arm/mach-shmobile/intc-sh7372.c | |||
| @@ -98,7 +98,7 @@ static struct intc_vect intca_vectors[] __initdata = { | |||
| 98 | INTC_VECT(IRQ14A, 0x03c0), INTC_VECT(IRQ15A, 0x03e0), | 98 | INTC_VECT(IRQ14A, 0x03c0), INTC_VECT(IRQ15A, 0x03e0), |
| 99 | INTC_VECT(IRQ16A, 0x3200), INTC_VECT(IRQ17A, 0x3220), | 99 | INTC_VECT(IRQ16A, 0x3200), INTC_VECT(IRQ17A, 0x3220), |
| 100 | INTC_VECT(IRQ18A, 0x3240), INTC_VECT(IRQ19A, 0x3260), | 100 | INTC_VECT(IRQ18A, 0x3240), INTC_VECT(IRQ19A, 0x3260), |
| 101 | INTC_VECT(IRQ20A, 0x3280), INTC_VECT(IRQ31A, 0x32a0), | 101 | INTC_VECT(IRQ20A, 0x3280), INTC_VECT(IRQ21A, 0x32a0), |
| 102 | INTC_VECT(IRQ22A, 0x32c0), INTC_VECT(IRQ23A, 0x32e0), | 102 | INTC_VECT(IRQ22A, 0x32c0), INTC_VECT(IRQ23A, 0x32e0), |
| 103 | INTC_VECT(IRQ24A, 0x3300), INTC_VECT(IRQ25A, 0x3320), | 103 | INTC_VECT(IRQ24A, 0x3300), INTC_VECT(IRQ25A, 0x3320), |
| 104 | INTC_VECT(IRQ26A, 0x3340), INTC_VECT(IRQ27A, 0x3360), | 104 | INTC_VECT(IRQ26A, 0x3340), INTC_VECT(IRQ27A, 0x3360), |
diff --git a/arch/arm/mach-tegra/hotplug.c b/arch/arm/mach-tegra/hotplug.c index 8e7f115aa21e..a5cb1ce76ff2 100644 --- a/arch/arm/mach-tegra/hotplug.c +++ b/arch/arm/mach-tegra/hotplug.c | |||
| @@ -11,12 +11,9 @@ | |||
| 11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
| 12 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
| 13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
| 14 | #include <linux/completion.h> | ||
| 15 | 14 | ||
| 16 | #include <asm/cacheflush.h> | 15 | #include <asm/cacheflush.h> |
| 17 | 16 | ||
| 18 | static DECLARE_COMPLETION(cpu_killed); | ||
| 19 | |||
| 20 | static inline void cpu_enter_lowpower(void) | 17 | static inline void cpu_enter_lowpower(void) |
| 21 | { | 18 | { |
| 22 | unsigned int v; | 19 | unsigned int v; |
| @@ -29,13 +26,13 @@ static inline void cpu_enter_lowpower(void) | |||
| 29 | * Turn off coherency | 26 | * Turn off coherency |
| 30 | */ | 27 | */ |
| 31 | " mrc p15, 0, %0, c1, c0, 1\n" | 28 | " mrc p15, 0, %0, c1, c0, 1\n" |
| 32 | " bic %0, %0, #0x20\n" | 29 | " bic %0, %0, %2\n" |
| 33 | " mcr p15, 0, %0, c1, c0, 1\n" | 30 | " mcr p15, 0, %0, c1, c0, 1\n" |
| 34 | " mrc p15, 0, %0, c1, c0, 0\n" | 31 | " mrc p15, 0, %0, c1, c0, 0\n" |
| 35 | " bic %0, %0, #0x04\n" | 32 | " bic %0, %0, #0x04\n" |
| 36 | " mcr p15, 0, %0, c1, c0, 0\n" | 33 | " mcr p15, 0, %0, c1, c0, 0\n" |
| 37 | : "=&r" (v) | 34 | : "=&r" (v) |
| 38 | : "r" (0) | 35 | : "r" (0), "Ir" (CR_C) |
| 39 | : "cc"); | 36 | : "cc"); |
| 40 | } | 37 | } |
| 41 | 38 | ||
| @@ -45,17 +42,17 @@ static inline void cpu_leave_lowpower(void) | |||
| 45 | 42 | ||
| 46 | asm volatile( | 43 | asm volatile( |
| 47 | "mrc p15, 0, %0, c1, c0, 0\n" | 44 | "mrc p15, 0, %0, c1, c0, 0\n" |
| 48 | " orr %0, %0, #0x04\n" | 45 | " orr %0, %0, %1\n" |
| 49 | " mcr p15, 0, %0, c1, c0, 0\n" | 46 | " mcr p15, 0, %0, c1, c0, 0\n" |
| 50 | " mrc p15, 0, %0, c1, c0, 1\n" | 47 | " mrc p15, 0, %0, c1, c0, 1\n" |
| 51 | " orr %0, %0, #0x20\n" | 48 | " orr %0, %0, #0x20\n" |
| 52 | " mcr p15, 0, %0, c1, c0, 1\n" | 49 | " mcr p15, 0, %0, c1, c0, 1\n" |
| 53 | : "=&r" (v) | 50 | : "=&r" (v) |
| 54 | : | 51 | : "Ir" (CR_C) |
| 55 | : "cc"); | 52 | : "cc"); |
| 56 | } | 53 | } |
| 57 | 54 | ||
| 58 | static inline void platform_do_lowpower(unsigned int cpu) | 55 | static inline void platform_do_lowpower(unsigned int cpu, int *spurious) |
| 59 | { | 56 | { |
| 60 | /* | 57 | /* |
| 61 | * there is no power-control hardware on this platform, so all | 58 | * there is no power-control hardware on this platform, so all |
| @@ -79,22 +76,19 @@ static inline void platform_do_lowpower(unsigned int cpu) | |||
| 79 | /*}*/ | 76 | /*}*/ |
| 80 | 77 | ||
| 81 | /* | 78 | /* |
| 82 | * getting here, means that we have come out of WFI without | 79 | * Getting here, means that we have come out of WFI without |
| 83 | * having been woken up - this shouldn't happen | 80 | * having been woken up - this shouldn't happen |
| 84 | * | 81 | * |
| 85 | * The trouble is, letting people know about this is not really | 82 | * Just note it happening - when we're woken, we can report |
| 86 | * possible, since we are currently running incoherently, and | 83 | * its occurrence. |
| 87 | * therefore cannot safely call printk() or anything else | ||
| 88 | */ | 84 | */ |
| 89 | #ifdef DEBUG | 85 | (*spurious)++; |
| 90 | printk(KERN_WARN "CPU%u: spurious wakeup call\n", cpu); | ||
| 91 | #endif | ||
| 92 | } | 86 | } |
| 93 | } | 87 | } |
| 94 | 88 | ||
| 95 | int platform_cpu_kill(unsigned int cpu) | 89 | int platform_cpu_kill(unsigned int cpu) |
| 96 | { | 90 | { |
| 97 | return wait_for_completion_timeout(&cpu_killed, 5000); | 91 | return 1; |
| 98 | } | 92 | } |
| 99 | 93 | ||
| 100 | /* | 94 | /* |
| @@ -104,30 +98,22 @@ int platform_cpu_kill(unsigned int cpu) | |||
| 104 | */ | 98 | */ |
| 105 | void platform_cpu_die(unsigned int cpu) | 99 | void platform_cpu_die(unsigned int cpu) |
| 106 | { | 100 | { |
| 107 | #ifdef DEBUG | 101 | int spurious = 0; |
| 108 | unsigned int this_cpu = hard_smp_processor_id(); | ||
| 109 | |||
| 110 | if (cpu != this_cpu) { | ||
| 111 | printk(KERN_CRIT "Eek! platform_cpu_die running on %u, should be %u\n", | ||
| 112 | this_cpu, cpu); | ||
| 113 | BUG(); | ||
| 114 | } | ||
| 115 | #endif | ||
| 116 | |||
| 117 | printk(KERN_NOTICE "CPU%u: shutdown\n", cpu); | ||
| 118 | complete(&cpu_killed); | ||
| 119 | 102 | ||
| 120 | /* | 103 | /* |
| 121 | * we're ready for shutdown now, so do it | 104 | * we're ready for shutdown now, so do it |
| 122 | */ | 105 | */ |
| 123 | cpu_enter_lowpower(); | 106 | cpu_enter_lowpower(); |
| 124 | platform_do_lowpower(cpu); | 107 | platform_do_lowpower(cpu, &spurious); |
| 125 | 108 | ||
| 126 | /* | 109 | /* |
| 127 | * bring this CPU back into the world of cache | 110 | * bring this CPU back into the world of cache |
| 128 | * coherency, and then restore interrupts | 111 | * coherency, and then restore interrupts |
| 129 | */ | 112 | */ |
| 130 | cpu_leave_lowpower(); | 113 | cpu_leave_lowpower(); |
| 114 | |||
| 115 | if (spurious) | ||
| 116 | pr_warn("CPU%u: %u spurious wakeup calls\n", cpu, spurious); | ||
| 131 | } | 117 | } |
| 132 | 118 | ||
| 133 | int platform_cpu_disable(unsigned int cpu) | 119 | int platform_cpu_disable(unsigned int cpu) |
diff --git a/arch/arm/mach-tegra/include/mach/smp.h b/arch/arm/mach-tegra/include/mach/smp.h index e4a34a35a544..c8221b38ee7c 100644 --- a/arch/arm/mach-tegra/include/mach/smp.h +++ b/arch/arm/mach-tegra/include/mach/smp.h | |||
| @@ -2,21 +2,13 @@ | |||
| 2 | #define ASMARM_ARCH_SMP_H | 2 | #define ASMARM_ARCH_SMP_H |
| 3 | 3 | ||
| 4 | #include <asm/hardware/gic.h> | 4 | #include <asm/hardware/gic.h> |
| 5 | #include <asm/smp_mpidr.h> | ||
| 6 | 5 | ||
| 7 | /* | 6 | /* |
| 8 | * We use IRQ1 as the IPI | 7 | * We use IRQ1 as the IPI |
| 9 | */ | 8 | */ |
| 10 | static inline void smp_cross_call(const struct cpumask *mask) | 9 | static inline void smp_cross_call(const struct cpumask *mask, int ipi) |
| 11 | { | ||
| 12 | gic_raise_softirq(mask, 1); | ||
| 13 | } | ||
| 14 | |||
| 15 | /* | ||
| 16 | * Do nothing on MPcore. | ||
| 17 | */ | ||
| 18 | static inline void smp_cross_call_done(cpumask_t callmap) | ||
| 19 | { | 10 | { |
| 11 | gic_raise_softirq(mask, ipi); | ||
| 20 | } | 12 | } |
| 21 | 13 | ||
| 22 | #endif | 14 | #endif |
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c index 1c0fd92cab39..c729cd72cc3b 100644 --- a/arch/arm/mach-tegra/platsmp.c +++ b/arch/arm/mach-tegra/platsmp.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <asm/cacheflush.h> | 22 | #include <asm/cacheflush.h> |
| 23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
| 24 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
| 25 | #include <asm/localtimer.h> | ||
| 26 | #include <asm/smp_scu.h> | 25 | #include <asm/smp_scu.h> |
| 27 | 26 | ||
| 28 | #include <mach/iomap.h> | 27 | #include <mach/iomap.h> |
| @@ -41,8 +40,6 @@ static void __iomem *scu_base = IO_ADDRESS(TEGRA_ARM_PERIF_BASE); | |||
| 41 | 40 | ||
| 42 | void __cpuinit platform_secondary_init(unsigned int cpu) | 41 | void __cpuinit platform_secondary_init(unsigned int cpu) |
| 43 | { | 42 | { |
| 44 | trace_hardirqs_off(); | ||
| 45 | |||
| 46 | /* | 43 | /* |
| 47 | * if any interrupts are already enabled for the primary | 44 | * if any interrupts are already enabled for the primary |
| 48 | * core (e.g. timer irq), then they will not have been enabled | 45 | * core (e.g. timer irq), then they will not have been enabled |
| @@ -117,24 +114,20 @@ void __init smp_init_cpus(void) | |||
| 117 | { | 114 | { |
| 118 | unsigned int i, ncores = scu_get_core_count(scu_base); | 115 | unsigned int i, ncores = scu_get_core_count(scu_base); |
| 119 | 116 | ||
| 117 | if (ncores > NR_CPUS) { | ||
| 118 | printk(KERN_ERR "Tegra: no. of cores (%u) greater than configured (%u), clipping\n", | ||
| 119 | ncores, NR_CPUS); | ||
| 120 | ncores = NR_CPUS; | ||
| 121 | } | ||
| 122 | |||
| 120 | for (i = 0; i < ncores; i++) | 123 | for (i = 0; i < ncores; i++) |
| 121 | cpu_set(i, cpu_possible_map); | 124 | cpu_set(i, cpu_possible_map); |
| 122 | } | 125 | } |
| 123 | 126 | ||
| 124 | void __init smp_prepare_cpus(unsigned int max_cpus) | 127 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) |
| 125 | { | 128 | { |
| 126 | unsigned int ncores = scu_get_core_count(scu_base); | ||
| 127 | unsigned int cpu = smp_processor_id(); | ||
| 128 | int i; | 129 | int i; |
| 129 | 130 | ||
| 130 | smp_store_cpu_info(cpu); | ||
| 131 | |||
| 132 | /* | ||
| 133 | * are we trying to boot more cores than exist? | ||
| 134 | */ | ||
| 135 | if (max_cpus > ncores) | ||
| 136 | max_cpus = ncores; | ||
| 137 | |||
| 138 | /* | 131 | /* |
| 139 | * Initialise the present map, which describes the set of CPUs | 132 | * Initialise the present map, which describes the set of CPUs |
| 140 | * actually populated at the present time. | 133 | * actually populated at the present time. |
| @@ -142,15 +135,5 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 142 | for (i = 0; i < max_cpus; i++) | 135 | for (i = 0; i < max_cpus; i++) |
| 143 | set_cpu_present(i, true); | 136 | set_cpu_present(i, true); |
| 144 | 137 | ||
| 145 | /* | 138 | scu_enable(scu_base); |
| 146 | * Initialise the SCU if there are more than one CPU and let | ||
| 147 | * them know where to start. Note that, on modern versions of | ||
| 148 | * MILO, the "poke" doesn't actually do anything until each | ||
| 149 | * individual core is sent a soft interrupt to get it out of | ||
| 150 | * WFI | ||
| 151 | */ | ||
| 152 | if (max_cpus > 1) { | ||
| 153 | percpu_timer_setup(); | ||
| 154 | scu_enable(scu_base); | ||
| 155 | } | ||
| 156 | } | 139 | } |
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c index 73fb1a551ec6..608a1372b172 100644 --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c | |||
| @@ -75,14 +75,14 @@ void __init ux500_init_irq(void) | |||
| 75 | static inline void ux500_cache_wait(void __iomem *reg, unsigned long mask) | 75 | static inline void ux500_cache_wait(void __iomem *reg, unsigned long mask) |
| 76 | { | 76 | { |
| 77 | /* wait for the operation to complete */ | 77 | /* wait for the operation to complete */ |
| 78 | while (readl(reg) & mask) | 78 | while (readl_relaxed(reg) & mask) |
| 79 | ; | 79 | ; |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | static inline void ux500_cache_sync(void) | 82 | static inline void ux500_cache_sync(void) |
| 83 | { | 83 | { |
| 84 | void __iomem *base = __io_address(UX500_L2CC_BASE); | 84 | void __iomem *base = __io_address(UX500_L2CC_BASE); |
| 85 | writel(0, base + L2X0_CACHE_SYNC); | 85 | writel_relaxed(0, base + L2X0_CACHE_SYNC); |
| 86 | ux500_cache_wait(base + L2X0_CACHE_SYNC, 1); | 86 | ux500_cache_wait(base + L2X0_CACHE_SYNC, 1); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| @@ -107,7 +107,7 @@ static void ux500_l2x0_inv_all(void) | |||
| 107 | uint32_t l2x0_way_mask = (1<<16) - 1; /* Bitmask of active ways */ | 107 | uint32_t l2x0_way_mask = (1<<16) - 1; /* Bitmask of active ways */ |
| 108 | 108 | ||
| 109 | /* invalidate all ways */ | 109 | /* invalidate all ways */ |
| 110 | writel(l2x0_way_mask, l2x0_base + L2X0_INV_WAY); | 110 | writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_INV_WAY); |
| 111 | ux500_cache_wait(l2x0_base + L2X0_INV_WAY, l2x0_way_mask); | 111 | ux500_cache_wait(l2x0_base + L2X0_INV_WAY, l2x0_way_mask); |
| 112 | ux500_cache_sync(); | 112 | ux500_cache_sync(); |
| 113 | } | 113 | } |
diff --git a/arch/arm/mach-ux500/headsmp.S b/arch/arm/mach-ux500/headsmp.S index a6be2cdf2b2f..64fa451edcfd 100644 --- a/arch/arm/mach-ux500/headsmp.S +++ b/arch/arm/mach-ux500/headsmp.S | |||
| @@ -23,7 +23,6 @@ ENTRY(u8500_secondary_startup) | |||
| 23 | ldmia r4, {r5, r6} | 23 | ldmia r4, {r5, r6} |
| 24 | sub r4, r4, r5 | 24 | sub r4, r4, r5 |
| 25 | add r6, r6, r4 | 25 | add r6, r6, r4 |
| 26 | dsb | ||
| 27 | pen: ldr r7, [r6] | 26 | pen: ldr r7, [r6] |
| 28 | cmp r7, r0 | 27 | cmp r7, r0 |
| 29 | bne pen | 28 | bne pen |
diff --git a/arch/arm/mach-ux500/hotplug.c b/arch/arm/mach-ux500/hotplug.c index b782a03024be..dd8037ebccf8 100644 --- a/arch/arm/mach-ux500/hotplug.c +++ b/arch/arm/mach-ux500/hotplug.c | |||
| @@ -11,14 +11,11 @@ | |||
| 11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
| 12 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
| 13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
| 14 | #include <linux/completion.h> | ||
| 15 | 14 | ||
| 16 | #include <asm/cacheflush.h> | 15 | #include <asm/cacheflush.h> |
| 17 | 16 | ||
| 18 | extern volatile int pen_release; | 17 | extern volatile int pen_release; |
| 19 | 18 | ||
| 20 | static DECLARE_COMPLETION(cpu_killed); | ||
| 21 | |||
| 22 | static inline void platform_do_lowpower(unsigned int cpu) | 19 | static inline void platform_do_lowpower(unsigned int cpu) |
| 23 | { | 20 | { |
| 24 | flush_cache_all(); | 21 | flush_cache_all(); |
| @@ -38,7 +35,7 @@ static inline void platform_do_lowpower(unsigned int cpu) | |||
| 38 | 35 | ||
| 39 | int platform_cpu_kill(unsigned int cpu) | 36 | int platform_cpu_kill(unsigned int cpu) |
| 40 | { | 37 | { |
| 41 | return wait_for_completion_timeout(&cpu_killed, 5000); | 38 | return 1; |
| 42 | } | 39 | } |
| 43 | 40 | ||
| 44 | /* | 41 | /* |
| @@ -48,19 +45,6 @@ int platform_cpu_kill(unsigned int cpu) | |||
| 48 | */ | 45 | */ |
| 49 | void platform_cpu_die(unsigned int cpu) | 46 | void platform_cpu_die(unsigned int cpu) |
| 50 | { | 47 | { |
| 51 | #ifdef DEBUG | ||
| 52 | unsigned int this_cpu = hard_smp_processor_id(); | ||
| 53 | |||
| 54 | if (cpu != this_cpu) { | ||
| 55 | printk(KERN_CRIT "Eek! platform_cpu_die running on %u, should be %u\n", | ||
| 56 | this_cpu, cpu); | ||
| 57 | BUG(); | ||
| 58 | } | ||
| 59 | #endif | ||
| 60 | |||
| 61 | printk(KERN_NOTICE "CPU%u: shutdown\n", cpu); | ||
| 62 | complete(&cpu_killed); | ||
| 63 | |||
| 64 | /* directly enter low power state, skipping secure registers */ | 48 | /* directly enter low power state, skipping secure registers */ |
| 65 | platform_do_lowpower(cpu); | 49 | platform_do_lowpower(cpu); |
| 66 | } | 50 | } |
diff --git a/arch/arm/mach-ux500/include/mach/smp.h b/arch/arm/mach-ux500/include/mach/smp.h index 197e8417375e..ca2b15b1b3b1 100644 --- a/arch/arm/mach-ux500/include/mach/smp.h +++ b/arch/arm/mach-ux500/include/mach/smp.h | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | #define ASMARM_ARCH_SMP_H | 10 | #define ASMARM_ARCH_SMP_H |
| 11 | 11 | ||
| 12 | #include <asm/hardware/gic.h> | 12 | #include <asm/hardware/gic.h> |
| 13 | #include <asm/smp_mpidr.h> | ||
| 14 | 13 | ||
| 15 | /* This is required to wakeup the secondary core */ | 14 | /* This is required to wakeup the secondary core */ |
| 16 | extern void u8500_secondary_startup(void); | 15 | extern void u8500_secondary_startup(void); |
| @@ -18,8 +17,8 @@ extern void u8500_secondary_startup(void); | |||
| 18 | /* | 17 | /* |
| 19 | * We use IRQ1 as the IPI | 18 | * We use IRQ1 as the IPI |
| 20 | */ | 19 | */ |
| 21 | static inline void smp_cross_call(const struct cpumask *mask) | 20 | static inline void smp_cross_call(const struct cpumask *mask, int ipi) |
| 22 | { | 21 | { |
| 23 | gic_raise_softirq(mask, 1); | 22 | gic_raise_softirq(mask, ipi); |
| 24 | } | 23 | } |
| 25 | #endif | 24 | #endif |
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c index 9e4c678de785..f71175a766d7 100644 --- a/arch/arm/mach-ux500/platsmp.c +++ b/arch/arm/mach-ux500/platsmp.c | |||
| @@ -18,7 +18,6 @@ | |||
| 18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 19 | 19 | ||
| 20 | #include <asm/cacheflush.h> | 20 | #include <asm/cacheflush.h> |
| 21 | #include <asm/localtimer.h> | ||
| 22 | #include <asm/smp_scu.h> | 21 | #include <asm/smp_scu.h> |
| 23 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
| 24 | 23 | ||
| @@ -28,17 +27,23 @@ | |||
| 28 | */ | 27 | */ |
| 29 | volatile int __cpuinitdata pen_release = -1; | 28 | volatile int __cpuinitdata pen_release = -1; |
| 30 | 29 | ||
| 31 | static unsigned int __init get_core_count(void) | 30 | /* |
| 31 | * Write pen_release in a way that is guaranteed to be visible to all | ||
| 32 | * observers, irrespective of whether they're taking part in coherency | ||
| 33 | * or not. This is necessary for the hotplug code to work reliably. | ||
| 34 | */ | ||
| 35 | static void write_pen_release(int val) | ||
| 32 | { | 36 | { |
| 33 | return scu_get_core_count(__io_address(UX500_SCU_BASE)); | 37 | pen_release = val; |
| 38 | smp_wmb(); | ||
| 39 | __cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release)); | ||
| 40 | outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1)); | ||
| 34 | } | 41 | } |
| 35 | 42 | ||
| 36 | static DEFINE_SPINLOCK(boot_lock); | 43 | static DEFINE_SPINLOCK(boot_lock); |
| 37 | 44 | ||
| 38 | void __cpuinit platform_secondary_init(unsigned int cpu) | 45 | void __cpuinit platform_secondary_init(unsigned int cpu) |
| 39 | { | 46 | { |
| 40 | trace_hardirqs_off(); | ||
| 41 | |||
| 42 | /* | 47 | /* |
| 43 | * if any interrupts are already enabled for the primary | 48 | * if any interrupts are already enabled for the primary |
| 44 | * core (e.g. timer irq), then they will not have been enabled | 49 | * core (e.g. timer irq), then they will not have been enabled |
| @@ -50,7 +55,7 @@ void __cpuinit platform_secondary_init(unsigned int cpu) | |||
| 50 | * let the primary processor know we're out of the | 55 | * let the primary processor know we're out of the |
| 51 | * pen, then head off into the C entry point | 56 | * pen, then head off into the C entry point |
| 52 | */ | 57 | */ |
| 53 | pen_release = -1; | 58 | write_pen_release(-1); |
| 54 | 59 | ||
| 55 | /* | 60 | /* |
| 56 | * Synchronise with the boot thread. | 61 | * Synchronise with the boot thread. |
| @@ -74,11 +79,9 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
| 74 | * the holding pen - release it, then wait for it to flag | 79 | * the holding pen - release it, then wait for it to flag |
| 75 | * that it has been released by resetting pen_release. | 80 | * that it has been released by resetting pen_release. |
| 76 | */ | 81 | */ |
| 77 | pen_release = cpu; | 82 | write_pen_release(cpu); |
| 78 | __cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release)); | ||
| 79 | outer_clean_range(__pa(&pen_release), __pa(&pen_release) + 1); | ||
| 80 | 83 | ||
| 81 | smp_cross_call(cpumask_of(cpu)); | 84 | smp_cross_call(cpumask_of(cpu), 1); |
| 82 | 85 | ||
| 83 | timeout = jiffies + (1 * HZ); | 86 | timeout = jiffies + (1 * HZ); |
| 84 | while (time_before(jiffies, timeout)) { | 87 | while (time_before(jiffies, timeout)) { |
| @@ -97,9 +100,6 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
| 97 | 100 | ||
| 98 | static void __init wakeup_secondary(void) | 101 | static void __init wakeup_secondary(void) |
| 99 | { | 102 | { |
| 100 | /* nobody is to be released from the pen yet */ | ||
| 101 | pen_release = -1; | ||
| 102 | |||
| 103 | /* | 103 | /* |
| 104 | * write the address of secondary startup into the backup ram register | 104 | * write the address of secondary startup into the backup ram register |
| 105 | * at offset 0x1FF4, then write the magic number 0xA1FEED01 to the | 105 | * at offset 0x1FF4, then write the magic number 0xA1FEED01 to the |
| @@ -126,40 +126,26 @@ static void __init wakeup_secondary(void) | |||
| 126 | */ | 126 | */ |
| 127 | void __init smp_init_cpus(void) | 127 | void __init smp_init_cpus(void) |
| 128 | { | 128 | { |
| 129 | unsigned int i, ncores = get_core_count(); | 129 | unsigned int i, ncores; |
| 130 | 130 | ||
| 131 | for (i = 0; i < ncores; i++) | 131 | ncores = scu_get_core_count(__io_address(UX500_SCU_BASE)); |
| 132 | set_cpu_possible(i, true); | ||
| 133 | } | ||
| 134 | |||
| 135 | void __init smp_prepare_cpus(unsigned int max_cpus) | ||
| 136 | { | ||
| 137 | unsigned int ncores = get_core_count(); | ||
| 138 | unsigned int cpu = smp_processor_id(); | ||
| 139 | int i; | ||
| 140 | 132 | ||
| 141 | /* sanity check */ | 133 | /* sanity check */ |
| 142 | if (ncores == 0) { | 134 | if (ncores > NR_CPUS) { |
| 143 | printk(KERN_ERR | ||
| 144 | "U8500: strange CM count of 0? Default to 1\n"); | ||
| 145 | ncores = 1; | ||
| 146 | } | ||
| 147 | |||
| 148 | if (ncores > num_possible_cpus()) { | ||
| 149 | printk(KERN_WARNING | 135 | printk(KERN_WARNING |
| 150 | "U8500: no. of cores (%d) greater than configured " | 136 | "U8500: no. of cores (%d) greater than configured " |
| 151 | "maximum of %d - clipping\n", | 137 | "maximum of %d - clipping\n", |
| 152 | ncores, num_possible_cpus()); | 138 | ncores, NR_CPUS); |
| 153 | ncores = num_possible_cpus(); | 139 | ncores = NR_CPUS; |
| 154 | } | 140 | } |
| 155 | 141 | ||
| 156 | smp_store_cpu_info(cpu); | 142 | for (i = 0; i < ncores; i++) |
| 143 | set_cpu_possible(i, true); | ||
| 144 | } | ||
| 157 | 145 | ||
| 158 | /* | 146 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) |
| 159 | * are we trying to boot more cores than exist? | 147 | { |
| 160 | */ | 148 | int i; |
| 161 | if (max_cpus > ncores) | ||
| 162 | max_cpus = ncores; | ||
| 163 | 149 | ||
| 164 | /* | 150 | /* |
| 165 | * Initialise the present map, which describes the set of CPUs | 151 | * Initialise the present map, which describes the set of CPUs |
| @@ -168,13 +154,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 168 | for (i = 0; i < max_cpus; i++) | 154 | for (i = 0; i < max_cpus; i++) |
| 169 | set_cpu_present(i, true); | 155 | set_cpu_present(i, true); |
| 170 | 156 | ||
| 171 | if (max_cpus > 1) { | 157 | scu_enable(__io_address(UX500_SCU_BASE)); |
| 172 | /* | 158 | wakeup_secondary(); |
| 173 | * Enable the local timer or broadcast device for the | ||
| 174 | * boot CPU, but only if we have more than one CPU. | ||
| 175 | */ | ||
| 176 | percpu_timer_setup(); | ||
| 177 | scu_enable(__io_address(UX500_SCU_BASE)); | ||
| 178 | wakeup_secondary(); | ||
| 179 | } | ||
| 180 | } | 159 | } |
diff --git a/arch/arm/mach-versatile/include/mach/vmalloc.h b/arch/arm/mach-versatile/include/mach/vmalloc.h index ebd8a2543d3b..7d8e069ad51b 100644 --- a/arch/arm/mach-versatile/include/mach/vmalloc.h +++ b/arch/arm/mach-versatile/include/mach/vmalloc.h | |||
| @@ -18,4 +18,4 @@ | |||
| 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 | #define VMALLOC_END 0xd8000000 | 21 | #define VMALLOC_END 0xd8000000UL |
diff --git a/arch/arm/mach-vexpress/Makefile b/arch/arm/mach-vexpress/Makefile index 1b71b77ade22..2c0ac7de2814 100644 --- a/arch/arm/mach-vexpress/Makefile +++ b/arch/arm/mach-vexpress/Makefile | |||
| @@ -5,4 +5,5 @@ | |||
| 5 | obj-y := v2m.o | 5 | obj-y := v2m.o |
| 6 | obj-$(CONFIG_ARCH_VEXPRESS_CA9X4) += ct-ca9x4.o | 6 | obj-$(CONFIG_ARCH_VEXPRESS_CA9X4) += ct-ca9x4.o |
| 7 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o | 7 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
| 8 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o | ||
| 8 | obj-$(CONFIG_LOCAL_TIMERS) += localtimer.o | 9 | obj-$(CONFIG_LOCAL_TIMERS) += localtimer.o |
diff --git a/arch/arm/mach-vexpress/ct-ca9x4.c b/arch/arm/mach-vexpress/ct-ca9x4.c index 26a02eb57571..f4455e3ed6a4 100644 --- a/arch/arm/mach-vexpress/ct-ca9x4.c +++ b/arch/arm/mach-vexpress/ct-ca9x4.c | |||
| @@ -53,7 +53,9 @@ static struct map_desc ct_ca9x4_io_desc[] __initdata = { | |||
| 53 | 53 | ||
| 54 | static void __init ct_ca9x4_map_io(void) | 54 | static void __init ct_ca9x4_map_io(void) |
| 55 | { | 55 | { |
| 56 | #ifdef CONFIG_LOCAL_TIMERS | ||
| 56 | twd_base = MMIO_P2V(A9_MPCORE_TWD); | 57 | twd_base = MMIO_P2V(A9_MPCORE_TWD); |
| 58 | #endif | ||
| 57 | v2m_map_io(ct_ca9x4_io_desc, ARRAY_SIZE(ct_ca9x4_io_desc)); | 59 | v2m_map_io(ct_ca9x4_io_desc, ARRAY_SIZE(ct_ca9x4_io_desc)); |
| 58 | } | 60 | } |
| 59 | 61 | ||
diff --git a/arch/arm/mach-vexpress/hotplug.c b/arch/arm/mach-vexpress/hotplug.c new file mode 100644 index 000000000000..ea4cbfb90a66 --- /dev/null +++ b/arch/arm/mach-vexpress/hotplug.c | |||
| @@ -0,0 +1,128 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-realview/hotplug.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 2002 ARM Ltd. | ||
| 5 | * All Rights Reserved | ||
| 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 | #include <linux/kernel.h> | ||
| 12 | #include <linux/errno.h> | ||
| 13 | #include <linux/smp.h> | ||
| 14 | |||
| 15 | #include <asm/cacheflush.h> | ||
| 16 | |||
| 17 | extern volatile int pen_release; | ||
| 18 | |||
| 19 | static inline void cpu_enter_lowpower(void) | ||
| 20 | { | ||
| 21 | unsigned int v; | ||
| 22 | |||
| 23 | flush_cache_all(); | ||
| 24 | asm volatile( | ||
| 25 | "mcr p15, 0, %1, c7, c5, 0\n" | ||
| 26 | " mcr p15, 0, %1, c7, c10, 4\n" | ||
| 27 | /* | ||
| 28 | * Turn off coherency | ||
| 29 | */ | ||
| 30 | " mrc p15, 0, %0, c1, c0, 1\n" | ||
| 31 | " bic %0, %0, %3\n" | ||
| 32 | " mcr p15, 0, %0, c1, c0, 1\n" | ||
| 33 | " mrc p15, 0, %0, c1, c0, 0\n" | ||
| 34 | " bic %0, %0, %2\n" | ||
| 35 | " mcr p15, 0, %0, c1, c0, 0\n" | ||
| 36 | : "=&r" (v) | ||
| 37 | : "r" (0), "Ir" (CR_C), "Ir" (0x40) | ||
| 38 | : "cc"); | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline void cpu_leave_lowpower(void) | ||
| 42 | { | ||
| 43 | unsigned int v; | ||
| 44 | |||
| 45 | asm volatile( | ||
| 46 | "mrc p15, 0, %0, c1, c0, 0\n" | ||
| 47 | " orr %0, %0, %1\n" | ||
| 48 | " mcr p15, 0, %0, c1, c0, 0\n" | ||
| 49 | " mrc p15, 0, %0, c1, c0, 1\n" | ||
| 50 | " orr %0, %0, %2\n" | ||
| 51 | " mcr p15, 0, %0, c1, c0, 1\n" | ||
| 52 | : "=&r" (v) | ||
| 53 | : "Ir" (CR_C), "Ir" (0x40) | ||
| 54 | : "cc"); | ||
| 55 | } | ||
| 56 | |||
| 57 | static inline void platform_do_lowpower(unsigned int cpu, int *spurious) | ||
| 58 | { | ||
| 59 | /* | ||
| 60 | * there is no power-control hardware on this platform, so all | ||
| 61 | * we can do is put the core into WFI; this is safe as the calling | ||
| 62 | * code will have already disabled interrupts | ||
| 63 | */ | ||
| 64 | for (;;) { | ||
| 65 | /* | ||
| 66 | * here's the WFI | ||
| 67 | */ | ||
| 68 | asm(".word 0xe320f003\n" | ||
| 69 | : | ||
| 70 | : | ||
| 71 | : "memory", "cc"); | ||
| 72 | |||
| 73 | if (pen_release == cpu) { | ||
| 74 | /* | ||
| 75 | * OK, proper wakeup, we're done | ||
| 76 | */ | ||
| 77 | break; | ||
| 78 | } | ||
| 79 | |||
| 80 | /* | ||
| 81 | * Getting here, means that we have come out of WFI without | ||
| 82 | * having been woken up - this shouldn't happen | ||
| 83 | * | ||
| 84 | * Just note it happening - when we're woken, we can report | ||
| 85 | * its occurrence. | ||
| 86 | */ | ||
| 87 | (*spurious)++; | ||
| 88 | } | ||
| 89 | } | ||
| 90 | |||
| 91 | int platform_cpu_kill(unsigned int cpu) | ||
| 92 | { | ||
| 93 | return 1; | ||
| 94 | } | ||
| 95 | |||
| 96 | /* | ||
| 97 | * platform-specific code to shutdown a CPU | ||
| 98 | * | ||
| 99 | * Called with IRQs disabled | ||
| 100 | */ | ||
| 101 | void platform_cpu_die(unsigned int cpu) | ||
| 102 | { | ||
| 103 | int spurious = 0; | ||
| 104 | |||
| 105 | /* | ||
| 106 | * we're ready for shutdown now, so do it | ||
| 107 | */ | ||
| 108 | cpu_enter_lowpower(); | ||
| 109 | platform_do_lowpower(cpu, &spurious); | ||
| 110 | |||
| 111 | /* | ||
| 112 | * bring this CPU back into the world of cache | ||
| 113 | * coherency, and then restore interrupts | ||
| 114 | */ | ||
| 115 | cpu_leave_lowpower(); | ||
| 116 | |||
| 117 | if (spurious) | ||
| 118 | pr_warn("CPU%u: %u spurious wakeup calls\n", cpu, spurious); | ||
| 119 | } | ||
| 120 | |||
| 121 | int platform_cpu_disable(unsigned int cpu) | ||
| 122 | { | ||
| 123 | /* | ||
| 124 | * we don't allow CPU 0 to be shutdown (it is still too special | ||
| 125 | * e.g. clock tick interrupts) | ||
| 126 | */ | ||
| 127 | return cpu == 0 ? -EPERM : 0; | ||
| 128 | } | ||
diff --git a/arch/arm/mach-vexpress/include/mach/smp.h b/arch/arm/mach-vexpress/include/mach/smp.h index 5a6da4fd247e..4c05e4a9713a 100644 --- a/arch/arm/mach-vexpress/include/mach/smp.h +++ b/arch/arm/mach-vexpress/include/mach/smp.h | |||
| @@ -2,13 +2,12 @@ | |||
| 2 | #define __MACH_SMP_H | 2 | #define __MACH_SMP_H |
| 3 | 3 | ||
| 4 | #include <asm/hardware/gic.h> | 4 | #include <asm/hardware/gic.h> |
| 5 | #include <asm/smp_mpidr.h> | ||
| 6 | 5 | ||
| 7 | /* | 6 | /* |
| 8 | * We use IRQ1 as the IPI | 7 | * We use IRQ1 as the IPI |
| 9 | */ | 8 | */ |
| 10 | static inline void smp_cross_call(const struct cpumask *mask) | 9 | static inline void smp_cross_call(const struct cpumask *mask, int ipi) |
| 11 | { | 10 | { |
| 12 | gic_raise_softirq(mask, 1); | 11 | gic_raise_softirq(mask, ipi); |
| 13 | } | 12 | } |
| 14 | #endif | 13 | #endif |
diff --git a/arch/arm/mach-vexpress/platsmp.c b/arch/arm/mach-vexpress/platsmp.c index 670970699ba9..8ce9fef29555 100644 --- a/arch/arm/mach-vexpress/platsmp.c +++ b/arch/arm/mach-vexpress/platsmp.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
| 18 | 18 | ||
| 19 | #include <asm/cacheflush.h> | 19 | #include <asm/cacheflush.h> |
| 20 | #include <asm/localtimer.h> | ||
| 21 | #include <asm/smp_scu.h> | 20 | #include <asm/smp_scu.h> |
| 22 | #include <asm/unified.h> | 21 | #include <asm/unified.h> |
| 23 | 22 | ||
| @@ -35,6 +34,19 @@ extern void vexpress_secondary_startup(void); | |||
| 35 | */ | 34 | */ |
| 36 | volatile int __cpuinitdata pen_release = -1; | 35 | volatile int __cpuinitdata pen_release = -1; |
| 37 | 36 | ||
| 37 | /* | ||
| 38 | * Write pen_release in a way that is guaranteed to be visible to all | ||
| 39 | * observers, irrespective of whether they're taking part in coherency | ||
| 40 | * or not. This is necessary for the hotplug code to work reliably. | ||
| 41 | */ | ||
| 42 | static void write_pen_release(int val) | ||
| 43 | { | ||
| 44 | pen_release = val; | ||
| 45 | smp_wmb(); | ||
| 46 | __cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release)); | ||
| 47 | outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1)); | ||
| 48 | } | ||
| 49 | |||
| 38 | static void __iomem *scu_base_addr(void) | 50 | static void __iomem *scu_base_addr(void) |
| 39 | { | 51 | { |
| 40 | return MMIO_P2V(A9_MPCORE_SCU); | 52 | return MMIO_P2V(A9_MPCORE_SCU); |
| @@ -44,8 +56,6 @@ static DEFINE_SPINLOCK(boot_lock); | |||
| 44 | 56 | ||
| 45 | void __cpuinit platform_secondary_init(unsigned int cpu) | 57 | void __cpuinit platform_secondary_init(unsigned int cpu) |
| 46 | { | 58 | { |
| 47 | trace_hardirqs_off(); | ||
| 48 | |||
| 49 | /* | 59 | /* |
| 50 | * if any interrupts are already enabled for the primary | 60 | * if any interrupts are already enabled for the primary |
| 51 | * core (e.g. timer irq), then they will not have been enabled | 61 | * core (e.g. timer irq), then they will not have been enabled |
| @@ -57,8 +67,7 @@ void __cpuinit platform_secondary_init(unsigned int cpu) | |||
| 57 | * let the primary processor know we're out of the | 67 | * let the primary processor know we're out of the |
| 58 | * pen, then head off into the C entry point | 68 | * pen, then head off into the C entry point |
| 59 | */ | 69 | */ |
| 60 | pen_release = -1; | 70 | write_pen_release(-1); |
| 61 | smp_wmb(); | ||
| 62 | 71 | ||
| 63 | /* | 72 | /* |
| 64 | * Synchronise with the boot thread. | 73 | * Synchronise with the boot thread. |
| @@ -83,16 +92,14 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
| 83 | * since we haven't sent them a soft interrupt, they shouldn't | 92 | * since we haven't sent them a soft interrupt, they shouldn't |
| 84 | * be there. | 93 | * be there. |
| 85 | */ | 94 | */ |
| 86 | pen_release = cpu; | 95 | write_pen_release(cpu); |
| 87 | __cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release)); | ||
| 88 | outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1)); | ||
| 89 | 96 | ||
| 90 | /* | 97 | /* |
| 91 | * Send the secondary CPU a soft interrupt, thereby causing | 98 | * Send the secondary CPU a soft interrupt, thereby causing |
| 92 | * the boot monitor to read the system wide flags register, | 99 | * the boot monitor to read the system wide flags register, |
| 93 | * and branch to the address found there. | 100 | * and branch to the address found there. |
| 94 | */ | 101 | */ |
| 95 | smp_cross_call(cpumask_of(cpu)); | 102 | smp_cross_call(cpumask_of(cpu), 1); |
| 96 | 103 | ||
| 97 | timeout = jiffies + (1 * HZ); | 104 | timeout = jiffies + (1 * HZ); |
| 98 | while (time_before(jiffies, timeout)) { | 105 | while (time_before(jiffies, timeout)) { |
| @@ -124,13 +131,6 @@ void __init smp_init_cpus(void) | |||
| 124 | ncores = scu_base ? scu_get_core_count(scu_base) : 1; | 131 | ncores = scu_base ? scu_get_core_count(scu_base) : 1; |
| 125 | 132 | ||
| 126 | /* sanity check */ | 133 | /* sanity check */ |
| 127 | if (ncores == 0) { | ||
| 128 | printk(KERN_ERR | ||
| 129 | "vexpress: strange CM count of 0? Default to 1\n"); | ||
| 130 | |||
| 131 | ncores = 1; | ||
| 132 | } | ||
| 133 | |||
| 134 | if (ncores > NR_CPUS) { | 134 | if (ncores > NR_CPUS) { |
| 135 | printk(KERN_WARNING | 135 | printk(KERN_WARNING |
| 136 | "vexpress: no. of cores (%d) greater than configured " | 136 | "vexpress: no. of cores (%d) greater than configured " |
| @@ -143,20 +143,10 @@ void __init smp_init_cpus(void) | |||
| 143 | set_cpu_possible(i, true); | 143 | set_cpu_possible(i, true); |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | void __init smp_prepare_cpus(unsigned int max_cpus) | 146 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) |
| 147 | { | 147 | { |
| 148 | unsigned int ncores = num_possible_cpus(); | ||
| 149 | unsigned int cpu = smp_processor_id(); | ||
| 150 | int i; | 148 | int i; |
| 151 | 149 | ||
| 152 | smp_store_cpu_info(cpu); | ||
| 153 | |||
| 154 | /* | ||
| 155 | * are we trying to boot more cores than exist? | ||
| 156 | */ | ||
| 157 | if (max_cpus > ncores) | ||
| 158 | max_cpus = ncores; | ||
| 159 | |||
| 160 | /* | 150 | /* |
| 161 | * Initialise the present map, which describes the set of CPUs | 151 | * Initialise the present map, which describes the set of CPUs |
| 162 | * actually populated at the present time. | 152 | * actually populated at the present time. |
| @@ -164,27 +154,15 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 164 | for (i = 0; i < max_cpus; i++) | 154 | for (i = 0; i < max_cpus; i++) |
| 165 | set_cpu_present(i, true); | 155 | set_cpu_present(i, true); |
| 166 | 156 | ||
| 157 | scu_enable(scu_base_addr()); | ||
| 158 | |||
| 167 | /* | 159 | /* |
| 168 | * Initialise the SCU if there are more than one CPU and let | 160 | * Write the address of secondary startup into the |
| 169 | * them know where to start. | 161 | * system-wide flags register. The boot monitor waits |
| 162 | * until it receives a soft interrupt, and then the | ||
| 163 | * secondary CPU branches to this address. | ||
| 170 | */ | 164 | */ |
| 171 | if (max_cpus > 1) { | 165 | writel(~0, MMIO_P2V(V2M_SYS_FLAGSCLR)); |
| 172 | /* | 166 | writel(BSYM(virt_to_phys(vexpress_secondary_startup)), |
| 173 | * Enable the local timer or broadcast device for the | 167 | MMIO_P2V(V2M_SYS_FLAGSSET)); |
| 174 | * boot CPU, but only if we have more than one CPU. | ||
| 175 | */ | ||
| 176 | percpu_timer_setup(); | ||
| 177 | |||
| 178 | scu_enable(scu_base_addr()); | ||
| 179 | |||
| 180 | /* | ||
| 181 | * Write the address of secondary startup into the | ||
| 182 | * system-wide flags register. The boot monitor waits | ||
| 183 | * until it receives a soft interrupt, and then the | ||
| 184 | * secondary CPU branches to this address. | ||
| 185 | */ | ||
| 186 | writel(~0, MMIO_P2V(V2M_SYS_FLAGSCLR)); | ||
| 187 | writel(BSYM(virt_to_phys(vexpress_secondary_startup)), | ||
| 188 | MMIO_P2V(V2M_SYS_FLAGSSET)); | ||
| 189 | } | ||
| 190 | } | 168 | } |
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 85f9361f3e02..e24fe6d9c712 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
| @@ -198,7 +198,7 @@ __dma_alloc_remap(struct page *page, size_t size, gfp_t gfp, pgprot_t prot) | |||
| 198 | * fragmentation of the DMA space, and also prevents allocations | 198 | * fragmentation of the DMA space, and also prevents allocations |
| 199 | * smaller than a section from crossing a section boundary. | 199 | * smaller than a section from crossing a section boundary. |
| 200 | */ | 200 | */ |
| 201 | bit = fls(size - 1) + 1; | 201 | bit = fls(size - 1); |
| 202 | if (bit > SECTION_SHIFT) | 202 | if (bit > SECTION_SHIFT) |
| 203 | bit = SECTION_SHIFT; | 203 | bit = SECTION_SHIFT; |
| 204 | align = 1 << bit; | 204 | align = 1 << bit; |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-dma.c b/arch/arm/plat-mxc/devices/platform-imx-dma.c index 02d989018059..3a705c7877dd 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-dma.c +++ b/arch/arm/plat-mxc/devices/platform-imx-dma.c | |||
| @@ -12,15 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | #include <mach/hardware.h> | 13 | #include <mach/hardware.h> |
| 14 | #include <mach/devices-common.h> | 14 | #include <mach/devices-common.h> |
| 15 | #ifdef SDMA_IS_MERGED | ||
| 16 | #include <mach/sdma.h> | 15 | #include <mach/sdma.h> |
| 17 | #else | ||
| 18 | struct sdma_platform_data { | ||
| 19 | int sdma_version; | ||
| 20 | char *cpu_name; | ||
| 21 | int to_version; | ||
| 22 | }; | ||
| 23 | #endif | ||
| 24 | 16 | ||
| 25 | struct imx_imx_sdma_data { | 17 | struct imx_imx_sdma_data { |
| 26 | resource_size_t iobase; | 18 | resource_size_t iobase; |
diff --git a/arch/arm/plat-mxc/devices/platform-spi_imx.c b/arch/arm/plat-mxc/devices/platform-spi_imx.c index e48340ec331e..17f724c9452d 100644 --- a/arch/arm/plat-mxc/devices/platform-spi_imx.c +++ b/arch/arm/plat-mxc/devices/platform-spi_imx.c | |||
| @@ -27,6 +27,7 @@ const struct imx_spi_imx_data imx21_cspi_data[] __initconst = { | |||
| 27 | imx_spi_imx_data_entry(MX21, CSPI, "imx21-cspi", _id, _hwid, SZ_4K) | 27 | imx_spi_imx_data_entry(MX21, CSPI, "imx21-cspi", _id, _hwid, SZ_4K) |
| 28 | imx21_cspi_data_entry(0, 1), | 28 | imx21_cspi_data_entry(0, 1), |
| 29 | imx21_cspi_data_entry(1, 2), | 29 | imx21_cspi_data_entry(1, 2), |
| 30 | }; | ||
| 30 | #endif | 31 | #endif |
| 31 | 32 | ||
| 32 | #ifdef CONFIG_ARCH_MX25 | 33 | #ifdef CONFIG_ARCH_MX25 |
diff --git a/arch/arm/plat-nomadik/timer.c b/arch/arm/plat-nomadik/timer.c index aedf9c1d645e..63cdc6025bd7 100644 --- a/arch/arm/plat-nomadik/timer.c +++ b/arch/arm/plat-nomadik/timer.c | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2008 STMicroelectronics | 4 | * Copyright (C) 2008 STMicroelectronics |
| 5 | * Copyright (C) 2010 Alessandro Rubini | 5 | * Copyright (C) 2010 Alessandro Rubini |
| 6 | * Copyright (C) 2010 Linus Walleij for ST-Ericsson | ||
| 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,11 +17,13 @@ | |||
| 16 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
| 17 | #include <linux/jiffies.h> | 18 | #include <linux/jiffies.h> |
| 18 | #include <linux/err.h> | 19 | #include <linux/err.h> |
| 20 | #include <linux/cnt32_to_63.h> | ||
| 21 | #include <linux/timer.h> | ||
| 19 | #include <asm/mach/time.h> | 22 | #include <asm/mach/time.h> |
| 20 | 23 | ||
| 21 | #include <plat/mtu.h> | 24 | #include <plat/mtu.h> |
| 22 | 25 | ||
| 23 | void __iomem *mtu_base; /* ssigned by machine code */ | 26 | void __iomem *mtu_base; /* Assigned by machine code */ |
| 24 | 27 | ||
| 25 | /* | 28 | /* |
| 26 | * Kernel assumes that sched_clock can be called early | 29 | * Kernel assumes that sched_clock can be called early |
| @@ -48,16 +51,82 @@ static struct clocksource nmdk_clksrc = { | |||
| 48 | /* | 51 | /* |
| 49 | * Override the global weak sched_clock symbol with this | 52 | * Override the global weak sched_clock symbol with this |
| 50 | * local implementation which uses the clocksource to get some | 53 | * local implementation which uses the clocksource to get some |
| 51 | * better resolution when scheduling the kernel. We accept that | 54 | * better resolution when scheduling the kernel. |
| 52 | * this wraps around for now, since it is just a relative time | 55 | * |
| 53 | * stamp. (Inspired by OMAP implementation.) | 56 | * Because the hardware timer period may be quite short |
| 57 | * (32.3 secs on the 133 MHz MTU timer selection on ux500) | ||
| 58 | * and because cnt32_to_63() needs to be called at least once per | ||
| 59 | * half period to work properly, a kernel keepwarm() timer is set up | ||
| 60 | * to ensure this requirement is always met. | ||
| 61 | * | ||
| 62 | * Also the sched_clock timer will wrap around at some point, | ||
| 63 | * here we set it to run continously for a year. | ||
| 54 | */ | 64 | */ |
| 65 | #define SCHED_CLOCK_MIN_WRAP 3600*24*365 | ||
| 66 | static struct timer_list cnt32_to_63_keepwarm_timer; | ||
| 67 | static u32 sched_mult; | ||
| 68 | static u32 sched_shift; | ||
| 69 | |||
| 55 | unsigned long long notrace sched_clock(void) | 70 | unsigned long long notrace sched_clock(void) |
| 56 | { | 71 | { |
| 57 | return clocksource_cyc2ns(nmdk_clksrc.read( | 72 | u64 cycles; |
| 58 | &nmdk_clksrc), | 73 | |
| 59 | nmdk_clksrc.mult, | 74 | if (unlikely(!mtu_base)) |
| 60 | nmdk_clksrc.shift); | 75 | return 0; |
| 76 | |||
| 77 | cycles = cnt32_to_63(-readl(mtu_base + MTU_VAL(0))); | ||
| 78 | /* | ||
| 79 | * sched_mult is guaranteed to be even so will | ||
| 80 | * shift out bit 63 | ||
| 81 | */ | ||
| 82 | return (cycles * sched_mult) >> sched_shift; | ||
| 83 | } | ||
| 84 | |||
| 85 | /* Just kick sched_clock every so often */ | ||
| 86 | static void cnt32_to_63_keepwarm(unsigned long data) | ||
| 87 | { | ||
| 88 | mod_timer(&cnt32_to_63_keepwarm_timer, round_jiffies(jiffies + data)); | ||
| 89 | (void) sched_clock(); | ||
| 90 | } | ||
| 91 | |||
| 92 | /* | ||
| 93 | * Set up a timer to keep sched_clock():s 32_to_63 algorithm warm | ||
| 94 | * once in half a 32bit timer wrap interval. | ||
| 95 | */ | ||
| 96 | static void __init nmdk_sched_clock_init(unsigned long rate) | ||
| 97 | { | ||
| 98 | u32 v; | ||
| 99 | unsigned long delta; | ||
| 100 | u64 days; | ||
| 101 | |||
| 102 | /* Find the apropriate mult and shift factors */ | ||
| 103 | clocks_calc_mult_shift(&sched_mult, &sched_shift, | ||
| 104 | rate, NSEC_PER_SEC, SCHED_CLOCK_MIN_WRAP); | ||
| 105 | /* We need to multiply by an even number to get rid of bit 63 */ | ||
| 106 | if (sched_mult & 1) | ||
| 107 | sched_mult++; | ||
| 108 | |||
| 109 | /* Let's see what we get, take max counter and scale it */ | ||
| 110 | days = (0xFFFFFFFFFFFFFFFFLLU * sched_mult) >> sched_shift; | ||
| 111 | do_div(days, NSEC_PER_SEC); | ||
| 112 | do_div(days, (3600*24)); | ||
| 113 | |||
| 114 | pr_info("sched_clock: using %d bits @ %lu Hz wrap in %lu days\n", | ||
| 115 | (64 - sched_shift), rate, (unsigned long) days); | ||
| 116 | |||
| 117 | /* | ||
| 118 | * Program a timer to kick us at half 32bit wraparound | ||
| 119 | * Formula: seconds per wrap = (2^32) / f | ||
| 120 | */ | ||
| 121 | v = 0xFFFFFFFFUL / rate; | ||
| 122 | /* We want half of the wrap time to keep cnt32_to_63 warm */ | ||
| 123 | v /= 2; | ||
| 124 | pr_debug("sched_clock: prescaled timer rate: %lu Hz, " | ||
| 125 | "initialize keepwarm timer every %d seconds\n", rate, v); | ||
| 126 | /* Convert seconds to jiffies */ | ||
| 127 | delta = msecs_to_jiffies(v*1000); | ||
| 128 | setup_timer(&cnt32_to_63_keepwarm_timer, cnt32_to_63_keepwarm, delta); | ||
| 129 | mod_timer(&cnt32_to_63_keepwarm_timer, round_jiffies(jiffies + delta)); | ||
| 61 | } | 130 | } |
| 62 | 131 | ||
| 63 | /* Clockevent device: use one-shot mode */ | 132 | /* Clockevent device: use one-shot mode */ |
| @@ -161,13 +230,15 @@ void __init nmdk_timer_init(void) | |||
| 161 | writel(0, mtu_base + MTU_BGLR(0)); | 230 | writel(0, mtu_base + MTU_BGLR(0)); |
| 162 | writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(0)); | 231 | writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(0)); |
| 163 | 232 | ||
| 164 | /* Now the scheduling clock is ready */ | 233 | /* Now the clock source is ready */ |
| 165 | nmdk_clksrc.read = nmdk_read_timer; | 234 | nmdk_clksrc.read = nmdk_read_timer; |
| 166 | 235 | ||
| 167 | if (clocksource_register(&nmdk_clksrc)) | 236 | if (clocksource_register(&nmdk_clksrc)) |
| 168 | pr_err("timer: failed to initialize clock source %s\n", | 237 | pr_err("timer: failed to initialize clock source %s\n", |
| 169 | nmdk_clksrc.name); | 238 | nmdk_clksrc.name); |
| 170 | 239 | ||
| 240 | nmdk_sched_clock_init(rate); | ||
| 241 | |||
| 171 | /* Timer 1 is used for events */ | 242 | /* Timer 1 is used for events */ |
| 172 | 243 | ||
| 173 | clockevents_calc_mult_shift(&nmdk_clkevt, rate, MTU_MIN_RANGE); | 244 | clockevents_calc_mult_shift(&nmdk_clkevt, rate, MTU_MIN_RANGE); |
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c index 6f42a18b8aa4..fc819120978d 100644 --- a/arch/arm/plat-omap/devices.c +++ b/arch/arm/plat-omap/devices.c | |||
| @@ -284,12 +284,14 @@ void __init omap_dsp_reserve_sdram_memblock(void) | |||
| 284 | if (!size) | 284 | if (!size) |
| 285 | return; | 285 | return; |
| 286 | 286 | ||
| 287 | paddr = __memblock_alloc_base(size, SZ_1M, MEMBLOCK_REAL_LIMIT); | 287 | paddr = memblock_alloc(size, SZ_1M); |
| 288 | if (!paddr) { | 288 | if (!paddr) { |
| 289 | pr_err("%s: failed to reserve %x bytes\n", | 289 | pr_err("%s: failed to reserve %x bytes\n", |
| 290 | __func__, size); | 290 | __func__, size); |
| 291 | return; | 291 | return; |
| 292 | } | 292 | } |
| 293 | memblock_free(paddr, size); | ||
| 294 | memblock_remove(paddr, size); | ||
| 293 | 295 | ||
| 294 | omap_dsp_phys_mempool_base = paddr; | 296 | omap_dsp_phys_mempool_base = paddr; |
| 295 | } | 297 | } |
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index f5c5b8da9a87..2c2826571d45 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
| @@ -1983,6 +1983,8 @@ static int omap2_dma_handle_ch(int ch) | |||
| 1983 | 1983 | ||
| 1984 | dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(ch)); | 1984 | dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(ch)); |
| 1985 | dma_write(1 << ch, IRQSTATUS_L0); | 1985 | dma_write(1 << ch, IRQSTATUS_L0); |
| 1986 | /* read back the register to flush the write */ | ||
| 1987 | dma_read(IRQSTATUS_L0); | ||
| 1986 | 1988 | ||
| 1987 | /* If the ch is not chained then chain_id will be -1 */ | 1989 | /* If the ch is not chained then chain_id will be -1 */ |
| 1988 | if (dma_chan[ch].chain_id != -1) { | 1990 | if (dma_chan[ch].chain_id != -1) { |
diff --git a/arch/arm/plat-omap/include/plat/smp.h b/arch/arm/plat-omap/include/plat/smp.h index ecd6a488c497..7a10257909ef 100644 --- a/arch/arm/plat-omap/include/plat/smp.h +++ b/arch/arm/plat-omap/include/plat/smp.h | |||
| @@ -18,7 +18,6 @@ | |||
| 18 | #define OMAP_ARCH_SMP_H | 18 | #define OMAP_ARCH_SMP_H |
| 19 | 19 | ||
| 20 | #include <asm/hardware/gic.h> | 20 | #include <asm/hardware/gic.h> |
| 21 | #include <asm/smp_mpidr.h> | ||
| 22 | 21 | ||
| 23 | /* Needed for secondary core boot */ | 22 | /* Needed for secondary core boot */ |
| 24 | extern void omap_secondary_startup(void); | 23 | extern void omap_secondary_startup(void); |
| @@ -29,9 +28,9 @@ extern u32 omap_read_auxcoreboot0(void); | |||
| 29 | /* | 28 | /* |
| 30 | * We use Soft IRQ1 as the IPI | 29 | * We use Soft IRQ1 as the IPI |
| 31 | */ | 30 | */ |
| 32 | static inline void smp_cross_call(const struct cpumask *mask) | 31 | static inline void smp_cross_call(const struct cpumask *mask, int ipi) |
| 33 | { | 32 | { |
| 34 | gic_raise_softirq(mask, 1); | 33 | gic_raise_softirq(mask, ipi); |
| 35 | } | 34 | } |
| 36 | 35 | ||
| 37 | #endif | 36 | #endif |
diff --git a/arch/arm/plat-orion/include/plat/pcie.h b/arch/arm/plat-orion/include/plat/pcie.h index 3ebfef72b4e7..cc99163e73fd 100644 --- a/arch/arm/plat-orion/include/plat/pcie.h +++ b/arch/arm/plat-orion/include/plat/pcie.h | |||
| @@ -11,12 +11,15 @@ | |||
| 11 | #ifndef __PLAT_PCIE_H | 11 | #ifndef __PLAT_PCIE_H |
| 12 | #define __PLAT_PCIE_H | 12 | #define __PLAT_PCIE_H |
| 13 | 13 | ||
| 14 | struct pci_bus; | ||
| 15 | |||
| 14 | u32 orion_pcie_dev_id(void __iomem *base); | 16 | u32 orion_pcie_dev_id(void __iomem *base); |
| 15 | u32 orion_pcie_rev(void __iomem *base); | 17 | u32 orion_pcie_rev(void __iomem *base); |
| 16 | int orion_pcie_link_up(void __iomem *base); | 18 | int orion_pcie_link_up(void __iomem *base); |
| 17 | int orion_pcie_x4_mode(void __iomem *base); | 19 | int orion_pcie_x4_mode(void __iomem *base); |
| 18 | int orion_pcie_get_local_bus_nr(void __iomem *base); | 20 | int orion_pcie_get_local_bus_nr(void __iomem *base); |
| 19 | void orion_pcie_set_local_bus_nr(void __iomem *base, int nr); | 21 | void orion_pcie_set_local_bus_nr(void __iomem *base, int nr); |
| 22 | void orion_pcie_reset(void __iomem *base); | ||
| 20 | void orion_pcie_setup(void __iomem *base, | 23 | void orion_pcie_setup(void __iomem *base, |
| 21 | struct mbus_dram_target_info *dram); | 24 | struct mbus_dram_target_info *dram); |
| 22 | int orion_pcie_rd_conf(void __iomem *base, struct pci_bus *bus, | 25 | int orion_pcie_rd_conf(void __iomem *base, struct pci_bus *bus, |
diff --git a/arch/arm/plat-orion/pcie.c b/arch/arm/plat-orion/pcie.c index 779553a1595e..af2d733c50b5 100644 --- a/arch/arm/plat-orion/pcie.c +++ b/arch/arm/plat-orion/pcie.c | |||
| @@ -182,11 +182,6 @@ void __init orion_pcie_setup(void __iomem *base, | |||
| 182 | u32 mask; | 182 | u32 mask; |
| 183 | 183 | ||
| 184 | /* | 184 | /* |
| 185 | * soft reset PCIe unit | ||
| 186 | */ | ||
| 187 | orion_pcie_reset(base); | ||
| 188 | |||
| 189 | /* | ||
| 190 | * Point PCIe unit MBUS decode windows to DRAM space. | 185 | * Point PCIe unit MBUS decode windows to DRAM space. |
| 191 | */ | 186 | */ |
| 192 | orion_pcie_setup_wins(base, dram); | 187 | orion_pcie_setup_wins(base, dram); |
diff --git a/arch/arm/plat-pxa/include/plat/sdhci.h b/arch/arm/plat-pxa/include/plat/sdhci.h index e49c5b6fc4e2..1ab332e37d7d 100644 --- a/arch/arm/plat-pxa/include/plat/sdhci.h +++ b/arch/arm/plat-pxa/include/plat/sdhci.h | |||
| @@ -17,6 +17,9 @@ | |||
| 17 | /* Require clock free running */ | 17 | /* Require clock free running */ |
| 18 | #define PXA_FLAG_DISABLE_CLOCK_GATING (1<<0) | 18 | #define PXA_FLAG_DISABLE_CLOCK_GATING (1<<0) |
| 19 | 19 | ||
| 20 | /* Board design supports 8-bit data on SD/SDIO BUS */ | ||
| 21 | #define PXA_FLAG_SD_8_BIT_CAPABLE_SLOT (1<<2) | ||
| 22 | |||
| 20 | /* | 23 | /* |
| 21 | * struct pxa_sdhci_platdata() - Platform device data for PXA SDHCI | 24 | * struct pxa_sdhci_platdata() - Platform device data for PXA SDHCI |
| 22 | * @max_speed: the maximum speed supported | 25 | * @max_speed: the maximum speed supported |
diff --git a/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c b/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c index 9793544a6ace..704175b0573f 100644 --- a/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c +++ b/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c | |||
| @@ -29,8 +29,8 @@ void s3c24xx_spi_gpiocfg_bus0_gpe11_12_13(struct s3c2410_spi_info *spi, | |||
| 29 | } else { | 29 | } else { |
| 30 | s3c_gpio_cfgpin(S3C2410_GPE(13), S3C2410_GPIO_INPUT); | 30 | s3c_gpio_cfgpin(S3C2410_GPE(13), S3C2410_GPIO_INPUT); |
| 31 | s3c_gpio_cfgpin(S3C2410_GPE(11), S3C2410_GPIO_INPUT); | 31 | s3c_gpio_cfgpin(S3C2410_GPE(11), S3C2410_GPIO_INPUT); |
| 32 | s3c_gpio_cfgpull(S3C2410_GPE(11), S3C_GPIO_PULL_NONE); | 32 | s3c_gpio_setpull(S3C2410_GPE(11), S3C_GPIO_PULL_NONE); |
| 33 | s3c_gpio_cfgpull(S3C2410_GPE(12), S3C_GPIO_PULL_NONE); | 33 | s3c_gpio_setpull(S3C2410_GPE(12), S3C_GPIO_PULL_NONE); |
| 34 | s3c_gpio_cfgpull(S3C2410_GPE(13), S3C_GPIO_PULL_NONE); | 34 | s3c_gpio_setpull(S3C2410_GPE(13), S3C_GPIO_PULL_NONE); |
| 35 | } | 35 | } |
| 36 | } | 36 | } |
diff --git a/arch/arm/plat-s3c24xx/spi-bus1-gpd8_9_10.c b/arch/arm/plat-s3c24xx/spi-bus1-gpd8_9_10.c index db9e9e477ec1..72457afd6255 100644 --- a/arch/arm/plat-s3c24xx/spi-bus1-gpd8_9_10.c +++ b/arch/arm/plat-s3c24xx/spi-bus1-gpd8_9_10.c | |||
| @@ -31,8 +31,8 @@ void s3c24xx_spi_gpiocfg_bus1_gpd8_9_10(struct s3c2410_spi_info *spi, | |||
| 31 | } else { | 31 | } else { |
| 32 | s3c_gpio_cfgpin(S3C2410_GPD(8), S3C2410_GPIO_INPUT); | 32 | s3c_gpio_cfgpin(S3C2410_GPD(8), S3C2410_GPIO_INPUT); |
| 33 | s3c_gpio_cfgpin(S3C2410_GPD(9), S3C2410_GPIO_INPUT); | 33 | s3c_gpio_cfgpin(S3C2410_GPD(9), S3C2410_GPIO_INPUT); |
| 34 | s3c_gpio_cfgpull(S3C2410_GPD(10), S3C_GPIO_PULL_NONE); | 34 | s3c_gpio_setpull(S3C2410_GPD(10), S3C_GPIO_PULL_NONE); |
| 35 | s3c_gpio_cfgpull(S3C2410_GPD(9), S3C_GPIO_PULL_NONE); | 35 | s3c_gpio_setpull(S3C2410_GPD(9), S3C_GPIO_PULL_NONE); |
| 36 | s3c_gpio_cfgpull(S3C2410_GPD(8), S3C_GPIO_PULL_NONE); | 36 | s3c_gpio_setpull(S3C2410_GPD(8), S3C_GPIO_PULL_NONE); |
| 37 | } | 37 | } |
| 38 | } | 38 | } |
diff --git a/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c b/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c index 8ea663a438bb..c3972b645d13 100644 --- a/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c +++ b/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c | |||
| @@ -29,8 +29,8 @@ void s3c24xx_spi_gpiocfg_bus1_gpg5_6_7(struct s3c2410_spi_info *spi, | |||
| 29 | } else { | 29 | } else { |
| 30 | s3c_gpio_cfgpin(S3C2410_GPG(7), S3C2410_GPIO_INPUT); | 30 | s3c_gpio_cfgpin(S3C2410_GPG(7), S3C2410_GPIO_INPUT); |
| 31 | s3c_gpio_cfgpin(S3C2410_GPG(5), S3C2410_GPIO_INPUT); | 31 | s3c_gpio_cfgpin(S3C2410_GPG(5), S3C2410_GPIO_INPUT); |
| 32 | s3c_gpio_cfgpull(S3C2410_GPG(5), S3C_GPIO_PULL_NONE); | 32 | s3c_gpio_setpull(S3C2410_GPG(5), S3C_GPIO_PULL_NONE); |
| 33 | s3c_gpio_cfgpull(S3C2410_GPG(6), S3C_GPIO_PULL_NONE); | 33 | s3c_gpio_setpull(S3C2410_GPG(6), S3C_GPIO_PULL_NONE); |
| 34 | s3c_gpio_cfgpull(S3C2410_GPG(7), S3C_GPIO_PULL_NONE); | 34 | s3c_gpio_setpull(S3C2410_GPG(7), S3C_GPIO_PULL_NONE); |
| 35 | } | 35 | } |
| 36 | } | 36 | } |
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index 8063a322c790..0797cb528b46 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c | |||
| @@ -10,9 +10,12 @@ | |||
| 10 | */ | 10 | */ |
| 11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
| 13 | #include <linux/cpu.h> | ||
| 13 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 15 | #include <linux/notifier.h> | ||
| 14 | #include <linux/signal.h> | 16 | #include <linux/signal.h> |
| 15 | #include <linux/sched.h> | 17 | #include <linux/sched.h> |
| 18 | #include <linux/smp.h> | ||
| 16 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 17 | 20 | ||
| 18 | #include <asm/cputype.h> | 21 | #include <asm/cputype.h> |
| @@ -484,7 +487,24 @@ void vfp_flush_hwstate(struct thread_info *thread) | |||
| 484 | put_cpu(); | 487 | put_cpu(); |
| 485 | } | 488 | } |
| 486 | 489 | ||
| 487 | #include <linux/smp.h> | 490 | /* |
| 491 | * VFP hardware can lose all context when a CPU goes offline. | ||
| 492 | * Safely clear our held state when a CPU has been killed, and | ||
| 493 | * re-enable access to VFP when the CPU comes back online. | ||
| 494 | * | ||
| 495 | * Both CPU_DYING and CPU_STARTING are called on the CPU which | ||
| 496 | * is being offlined/onlined. | ||
| 497 | */ | ||
| 498 | static int vfp_hotplug(struct notifier_block *b, unsigned long action, | ||
| 499 | void *hcpu) | ||
| 500 | { | ||
| 501 | if (action == CPU_DYING || action == CPU_DYING_FROZEN) { | ||
| 502 | unsigned int cpu = (long)hcpu; | ||
| 503 | last_VFP_context[cpu] = NULL; | ||
| 504 | } else if (action == CPU_STARTING || action == CPU_STARTING_FROZEN) | ||
| 505 | vfp_enable(NULL); | ||
| 506 | return NOTIFY_OK; | ||
| 507 | } | ||
| 488 | 508 | ||
| 489 | /* | 509 | /* |
| 490 | * VFP support code initialisation. | 510 | * VFP support code initialisation. |
| @@ -514,6 +534,8 @@ static int __init vfp_init(void) | |||
| 514 | else if (vfpsid & FPSID_NODOUBLE) { | 534 | else if (vfpsid & FPSID_NODOUBLE) { |
| 515 | printk("no double precision support\n"); | 535 | printk("no double precision support\n"); |
| 516 | } else { | 536 | } else { |
| 537 | hotcpu_notifier(vfp_hotplug, 0); | ||
| 538 | |||
| 517 | smp_call_function(vfp_enable, NULL, 1); | 539 | smp_call_function(vfp_enable, NULL, 1); |
| 518 | 540 | ||
| 519 | VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */ | 541 | VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */ |
