diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-07-01 14:46:30 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-07-01 14:46:30 -0400 |
commit | 5a475ce4692f668b2615ae4ea1365c7c2d93f1dd (patch) | |
tree | 0349690bce5fe2396a3788bb1a4084ffd87ee308 | |
parent | d960eea974f5e500c0dcb95a934239cc1f481cfd (diff) | |
parent | 1c6a307a54668eda556f499c94e75086aaf8f80f (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6:
sh: LCDC dcache flush for deferred io
sh: Fix compiler error and include the definition of IS_ERR_VALUE
sh: re-add LCDC fbdev support to the Migo-R defconfig
sh: fix se7724 ceu names
sh: ms7724se: Enable sh_eth in defconfig.
arch/sh/boards/mach-se/7206/io.c: Remove unnecessary semicolons
sh: ms7724se: Add sh_eth support
nommu: provide follow_pfn().
sh: Kill off unused DEBUG_BOOTMEM symbol.
perf_counter tools: add cpu_relax()/rmb() definitions for sh.
sh64: Hook up page fault events for software perf counters.
sh: Hook up page fault events for software perf counters.
sh: make set_perf_counter_pending() static inline.
clocksource: sh_tmu: Make undefined TCOR behaviour less undefined.
-rw-r--r-- | arch/sh/Kconfig.debug | 4 | ||||
-rw-r--r-- | arch/sh/boards/mach-se/7206/io.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-se/7724/setup.c | 110 | ||||
-rw-r--r-- | arch/sh/configs/migor_defconfig | 53 | ||||
-rw-r--r-- | arch/sh/configs/se7724_defconfig | 25 | ||||
-rw-r--r-- | arch/sh/include/asm/perf_counter.h | 2 | ||||
-rw-r--r-- | arch/sh/include/asm/syscall_32.h | 1 | ||||
-rw-r--r-- | arch/sh/include/mach-se/mach/se7724.h | 5 | ||||
-rw-r--r-- | arch/sh/mm/fault_32.c | 61 | ||||
-rw-r--r-- | arch/sh/mm/tlbflush_64.c | 15 | ||||
-rw-r--r-- | drivers/clocksource/sh_tmu.c | 2 | ||||
-rw-r--r-- | drivers/video/sh_mobile_lcdcfb.c | 53 | ||||
-rw-r--r-- | mm/nommu.c | 21 | ||||
-rw-r--r-- | tools/perf/perf.h | 10 |
14 files changed, 307 insertions, 57 deletions
diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug index 8ece0b5bd028..39224b57c6ef 100644 --- a/arch/sh/Kconfig.debug +++ b/arch/sh/Kconfig.debug | |||
@@ -61,10 +61,6 @@ config EARLY_PRINTK | |||
61 | select both the EARLY_SCIF_CONSOLE and SH_STANDARD_BIOS, using | 61 | select both the EARLY_SCIF_CONSOLE and SH_STANDARD_BIOS, using |
62 | the kernel command line option to toggle back and forth. | 62 | the kernel command line option to toggle back and forth. |
63 | 63 | ||
64 | config DEBUG_BOOTMEM | ||
65 | depends on DEBUG_KERNEL | ||
66 | bool "Debug BOOTMEM initialization" | ||
67 | |||
68 | config DEBUG_STACKOVERFLOW | 64 | config DEBUG_STACKOVERFLOW |
69 | bool "Check for stack overflows" | 65 | bool "Check for stack overflows" |
70 | depends on DEBUG_KERNEL && SUPERH32 | 66 | depends on DEBUG_KERNEL && SUPERH32 |
diff --git a/arch/sh/boards/mach-se/7206/io.c b/arch/sh/boards/mach-se/7206/io.c index 9c3a33210d61..180455642a43 100644 --- a/arch/sh/boards/mach-se/7206/io.c +++ b/arch/sh/boards/mach-se/7206/io.c | |||
@@ -50,7 +50,7 @@ unsigned char se7206_inb_p(unsigned long port) | |||
50 | 50 | ||
51 | unsigned short se7206_inw(unsigned long port) | 51 | unsigned short se7206_inw(unsigned long port) |
52 | { | 52 | { |
53 | return *port2adr(port);; | 53 | return *port2adr(port); |
54 | } | 54 | } |
55 | 55 | ||
56 | void se7206_outb(unsigned char value, unsigned long port) | 56 | void se7206_outb(unsigned char value, unsigned long port) |
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index 9cd04bd558b8..c050a8d76dfd 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #include <media/sh_mobile_ceu.h> | 23 | #include <media/sh_mobile_ceu.h> |
24 | #include <asm/io.h> | 24 | #include <asm/io.h> |
25 | #include <asm/heartbeat.h> | 25 | #include <asm/heartbeat.h> |
26 | #include <asm/sh_eth.h> | ||
27 | #include <asm/clock.h> | ||
26 | #include <asm/sh_keysc.h> | 28 | #include <asm/sh_keysc.h> |
27 | #include <cpu/sh7724.h> | 29 | #include <cpu/sh7724.h> |
28 | #include <mach-se/mach/se7724.h> | 30 | #include <mach-se/mach/se7724.h> |
@@ -272,6 +274,34 @@ static struct platform_device keysc_device = { | |||
272 | }, | 274 | }, |
273 | }; | 275 | }; |
274 | 276 | ||
277 | /* SH Eth */ | ||
278 | static struct resource sh_eth_resources[] = { | ||
279 | [0] = { | ||
280 | .start = SH_ETH_ADDR, | ||
281 | .end = SH_ETH_ADDR + 0x1FC, | ||
282 | .flags = IORESOURCE_MEM, | ||
283 | }, | ||
284 | [1] = { | ||
285 | .start = 91, | ||
286 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
287 | }, | ||
288 | }; | ||
289 | |||
290 | struct sh_eth_plat_data sh_eth_plat = { | ||
291 | .phy = 0x1f, /* SMSC LAN8187 */ | ||
292 | .edmac_endian = EDMAC_LITTLE_ENDIAN, | ||
293 | }; | ||
294 | |||
295 | static struct platform_device sh_eth_device = { | ||
296 | .name = "sh-eth", | ||
297 | .id = 0, | ||
298 | .dev = { | ||
299 | .platform_data = &sh_eth_plat, | ||
300 | }, | ||
301 | .num_resources = ARRAY_SIZE(sh_eth_resources), | ||
302 | .resource = sh_eth_resources, | ||
303 | }; | ||
304 | |||
275 | static struct platform_device *ms7724se_devices[] __initdata = { | 305 | static struct platform_device *ms7724se_devices[] __initdata = { |
276 | &heartbeat_device, | 306 | &heartbeat_device, |
277 | &smc91x_eth_device, | 307 | &smc91x_eth_device, |
@@ -280,8 +310,57 @@ static struct platform_device *ms7724se_devices[] __initdata = { | |||
280 | &ceu0_device, | 310 | &ceu0_device, |
281 | &ceu1_device, | 311 | &ceu1_device, |
282 | &keysc_device, | 312 | &keysc_device, |
313 | &sh_eth_device, | ||
283 | }; | 314 | }; |
284 | 315 | ||
316 | #define EEPROM_OP 0xBA206000 | ||
317 | #define EEPROM_ADR 0xBA206004 | ||
318 | #define EEPROM_DATA 0xBA20600C | ||
319 | #define EEPROM_STAT 0xBA206010 | ||
320 | #define EEPROM_STRT 0xBA206014 | ||
321 | static int __init sh_eth_is_eeprom_ready(void) | ||
322 | { | ||
323 | int t = 10000; | ||
324 | |||
325 | while (t--) { | ||
326 | if (!ctrl_inw(EEPROM_STAT)) | ||
327 | return 1; | ||
328 | cpu_relax(); | ||
329 | } | ||
330 | |||
331 | printk(KERN_ERR "ms7724se can not access to eeprom\n"); | ||
332 | return 0; | ||
333 | } | ||
334 | |||
335 | static void __init sh_eth_init(void) | ||
336 | { | ||
337 | int i; | ||
338 | u16 mac[3]; | ||
339 | |||
340 | /* check EEPROM status */ | ||
341 | if (!sh_eth_is_eeprom_ready()) | ||
342 | return; | ||
343 | |||
344 | /* read MAC addr from EEPROM */ | ||
345 | for (i = 0 ; i < 3 ; i++) { | ||
346 | ctrl_outw(0x0, EEPROM_OP); /* read */ | ||
347 | ctrl_outw(i*2, EEPROM_ADR); | ||
348 | ctrl_outw(0x1, EEPROM_STRT); | ||
349 | if (!sh_eth_is_eeprom_ready()) | ||
350 | return; | ||
351 | |||
352 | mac[i] = ctrl_inw(EEPROM_DATA); | ||
353 | mac[i] = ((mac[i] & 0xFF) << 8) | (mac[i] >> 8); /* swap */ | ||
354 | } | ||
355 | |||
356 | /* reset sh-eth */ | ||
357 | ctrl_outl(0x1, SH_ETH_ADDR + 0x0); | ||
358 | |||
359 | /* set MAC addr */ | ||
360 | ctrl_outl(((mac[0] << 16) | (mac[1])), SH_ETH_MAHR); | ||
361 | ctrl_outl((mac[2]), SH_ETH_MALR); | ||
362 | } | ||
363 | |||
285 | #define SW4140 0xBA201000 | 364 | #define SW4140 0xBA201000 |
286 | #define FPGA_OUT 0xBA200400 | 365 | #define FPGA_OUT 0xBA200400 |
287 | #define PORT_HIZA 0xA4050158 | 366 | #define PORT_HIZA 0xA4050158 |
@@ -302,7 +381,8 @@ static int __init devices_setup(void) | |||
302 | ctrl_outw(ctrl_inw(FPGA_OUT) & | 381 | ctrl_outw(ctrl_inw(FPGA_OUT) & |
303 | ~((1 << 1) | /* LAN */ | 382 | ~((1 << 1) | /* LAN */ |
304 | (1 << 6) | /* VIDEO DAC */ | 383 | (1 << 6) | /* VIDEO DAC */ |
305 | (1 << 12)), /* USB0 */ | 384 | (1 << 12) | /* USB0 */ |
385 | (1 << 14)), /* RMII */ | ||
306 | FPGA_OUT); | 386 | FPGA_OUT); |
307 | 387 | ||
308 | /* enable IRQ 0,1,2 */ | 388 | /* enable IRQ 0,1,2 */ |
@@ -374,7 +454,7 @@ static int __init devices_setup(void) | |||
374 | gpio_request(GPIO_FN_VIO0_CLK, NULL); | 454 | gpio_request(GPIO_FN_VIO0_CLK, NULL); |
375 | gpio_request(GPIO_FN_VIO0_FLD, NULL); | 455 | gpio_request(GPIO_FN_VIO0_FLD, NULL); |
376 | gpio_request(GPIO_FN_VIO0_HD, NULL); | 456 | gpio_request(GPIO_FN_VIO0_HD, NULL); |
377 | platform_resource_setup_memory(&ceu0_device, "ceu", 4 << 20); | 457 | platform_resource_setup_memory(&ceu0_device, "ceu0", 4 << 20); |
378 | 458 | ||
379 | /* enable CEU1 */ | 459 | /* enable CEU1 */ |
380 | gpio_request(GPIO_FN_VIO1_D7, NULL); | 460 | gpio_request(GPIO_FN_VIO1_D7, NULL); |
@@ -389,7 +469,7 @@ static int __init devices_setup(void) | |||
389 | gpio_request(GPIO_FN_VIO1_HD, NULL); | 469 | gpio_request(GPIO_FN_VIO1_HD, NULL); |
390 | gpio_request(GPIO_FN_VIO1_VD, NULL); | 470 | gpio_request(GPIO_FN_VIO1_VD, NULL); |
391 | gpio_request(GPIO_FN_VIO1_CLK, NULL); | 471 | gpio_request(GPIO_FN_VIO1_CLK, NULL); |
392 | platform_resource_setup_memory(&ceu1_device, "ceu", 4 << 20); | 472 | platform_resource_setup_memory(&ceu1_device, "ceu1", 4 << 20); |
393 | 473 | ||
394 | /* KEYSC */ | 474 | /* KEYSC */ |
395 | gpio_request(GPIO_FN_KEYOUT5_IN5, NULL); | 475 | gpio_request(GPIO_FN_KEYOUT5_IN5, NULL); |
@@ -404,6 +484,28 @@ static int __init devices_setup(void) | |||
404 | gpio_request(GPIO_FN_KEYOUT1, NULL); | 484 | gpio_request(GPIO_FN_KEYOUT1, NULL); |
405 | gpio_request(GPIO_FN_KEYOUT0, NULL); | 485 | gpio_request(GPIO_FN_KEYOUT0, NULL); |
406 | 486 | ||
487 | /* | ||
488 | * enable SH-Eth | ||
489 | * | ||
490 | * please remove J33 pin from your board !! | ||
491 | * | ||
492 | * ms7724 board should not use GPIO_FN_LNKSTA pin | ||
493 | * So, This time PTX5 is set to input pin | ||
494 | */ | ||
495 | gpio_request(GPIO_FN_RMII_RXD0, NULL); | ||
496 | gpio_request(GPIO_FN_RMII_RXD1, NULL); | ||
497 | gpio_request(GPIO_FN_RMII_TXD0, NULL); | ||
498 | gpio_request(GPIO_FN_RMII_TXD1, NULL); | ||
499 | gpio_request(GPIO_FN_RMII_REF_CLK, NULL); | ||
500 | gpio_request(GPIO_FN_RMII_TX_EN, NULL); | ||
501 | gpio_request(GPIO_FN_RMII_RX_ER, NULL); | ||
502 | gpio_request(GPIO_FN_RMII_CRS_DV, NULL); | ||
503 | gpio_request(GPIO_FN_MDIO, NULL); | ||
504 | gpio_request(GPIO_FN_MDC, NULL); | ||
505 | gpio_request(GPIO_PTX5, NULL); | ||
506 | gpio_direction_input(GPIO_PTX5); | ||
507 | sh_eth_init(); | ||
508 | |||
407 | if (sw & SW41_B) { | 509 | if (sw & SW41_B) { |
408 | /* SVGA */ | 510 | /* SVGA */ |
409 | lcdc_info.ch[0].lcd_cfg.xres = 800; | 511 | lcdc_info.ch[0].lcd_cfg.xres = 800; |
@@ -437,7 +539,7 @@ static int __init devices_setup(void) | |||
437 | } | 539 | } |
438 | 540 | ||
439 | return platform_add_devices(ms7724se_devices, | 541 | return platform_add_devices(ms7724se_devices, |
440 | ARRAY_SIZE(ms7724se_devices)); | 542 | ARRAY_SIZE(ms7724se_devices)); |
441 | } | 543 | } |
442 | device_initcall(devices_setup); | 544 | device_initcall(devices_setup); |
443 | 545 | ||
diff --git a/arch/sh/configs/migor_defconfig b/arch/sh/configs/migor_defconfig index da627d22c009..b18cfd39cac6 100644 --- a/arch/sh/configs/migor_defconfig +++ b/arch/sh/configs/migor_defconfig | |||
@@ -309,7 +309,7 @@ CONFIG_ZERO_PAGE_OFFSET=0x00001000 | |||
309 | CONFIG_BOOT_LINK_OFFSET=0x00800000 | 309 | CONFIG_BOOT_LINK_OFFSET=0x00800000 |
310 | CONFIG_ENTRY_OFFSET=0x00001000 | 310 | CONFIG_ENTRY_OFFSET=0x00001000 |
311 | CONFIG_CMDLINE_BOOL=y | 311 | CONFIG_CMDLINE_BOOL=y |
312 | CONFIG_CMDLINE="console=ttySC0,115200 earlyprintk=serial ip=on root=/dev/nfs ip=dhcp" | 312 | CONFIG_CMDLINE="console=tty0 console=ttySC0,115200 earlyprintk=serial ip=on root=/dev/nfs ip=dhcp" |
313 | 313 | ||
314 | # | 314 | # |
315 | # Bus options | 315 | # Bus options |
@@ -858,7 +858,35 @@ CONFIG_VIDEO_SH_MOBILE_CEU=y | |||
858 | # | 858 | # |
859 | # CONFIG_VGASTATE is not set | 859 | # CONFIG_VGASTATE is not set |
860 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | 860 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set |
861 | # CONFIG_FB is not set | 861 | CONFIG_FB=y |
862 | # CONFIG_FIRMWARE_EDID is not set | ||
863 | # CONFIG_FB_DDC is not set | ||
864 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
865 | # CONFIG_FB_CFB_FILLRECT is not set | ||
866 | # CONFIG_FB_CFB_COPYAREA is not set | ||
867 | # CONFIG_FB_CFB_IMAGEBLIT is not set | ||
868 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
869 | CONFIG_FB_SYS_FILLRECT=y | ||
870 | CONFIG_FB_SYS_COPYAREA=y | ||
871 | CONFIG_FB_SYS_IMAGEBLIT=y | ||
872 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
873 | CONFIG_FB_SYS_FOPS=y | ||
874 | CONFIG_FB_DEFERRED_IO=y | ||
875 | # CONFIG_FB_SVGALIB is not set | ||
876 | # CONFIG_FB_MACMODES is not set | ||
877 | # CONFIG_FB_BACKLIGHT is not set | ||
878 | # CONFIG_FB_MODE_HELPERS is not set | ||
879 | # CONFIG_FB_TILEBLITTING is not set | ||
880 | |||
881 | # | ||
882 | # Frame buffer hardware drivers | ||
883 | # | ||
884 | # CONFIG_FB_S1D13XXX is not set | ||
885 | CONFIG_FB_SH_MOBILE_LCDC=y | ||
886 | # CONFIG_FB_VIRTUAL is not set | ||
887 | # CONFIG_FB_METRONOME is not set | ||
888 | # CONFIG_FB_MB862XX is not set | ||
889 | # CONFIG_FB_BROADSHEET is not set | ||
862 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 890 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
863 | 891 | ||
864 | # | 892 | # |
@@ -870,6 +898,27 @@ CONFIG_VIDEO_SH_MOBILE_CEU=y | |||
870 | # Console display driver support | 898 | # Console display driver support |
871 | # | 899 | # |
872 | CONFIG_DUMMY_CONSOLE=y | 900 | CONFIG_DUMMY_CONSOLE=y |
901 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
902 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
903 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
904 | CONFIG_FONTS=y | ||
905 | # CONFIG_FONT_8x8 is not set | ||
906 | # CONFIG_FONT_8x16 is not set | ||
907 | # CONFIG_FONT_6x11 is not set | ||
908 | # CONFIG_FONT_7x14 is not set | ||
909 | # CONFIG_FONT_PEARL_8x8 is not set | ||
910 | # CONFIG_FONT_ACORN_8x8 is not set | ||
911 | CONFIG_FONT_MINI_4x6=y | ||
912 | # CONFIG_FONT_SUN8x16 is not set | ||
913 | # CONFIG_FONT_SUN12x22 is not set | ||
914 | # CONFIG_FONT_10x18 is not set | ||
915 | CONFIG_LOGO=y | ||
916 | # CONFIG_LOGO_LINUX_MONO is not set | ||
917 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
918 | # CONFIG_LOGO_LINUX_CLUT224 is not set | ||
919 | # CONFIG_LOGO_SUPERH_MONO is not set | ||
920 | CONFIG_LOGO_SUPERH_VGA16=y | ||
921 | # CONFIG_LOGO_SUPERH_CLUT224 is not set | ||
873 | # CONFIG_SOUND is not set | 922 | # CONFIG_SOUND is not set |
874 | CONFIG_HID_SUPPORT=y | 923 | CONFIG_HID_SUPPORT=y |
875 | CONFIG_HID=y | 924 | CONFIG_HID=y |
diff --git a/arch/sh/configs/se7724_defconfig b/arch/sh/configs/se7724_defconfig index 3840270283e4..3ee783a0a075 100644 --- a/arch/sh/configs/se7724_defconfig +++ b/arch/sh/configs/se7724_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.30 | 3 | # Linux kernel version: 2.6.30 |
4 | # Thu Jun 18 16:09:05 2009 | 4 | # Mon Jun 29 16:28:43 2009 |
5 | # | 5 | # |
6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
7 | CONFIG_SUPERH32=y | 7 | CONFIG_SUPERH32=y |
@@ -14,6 +14,7 @@ CONFIG_GENERIC_HWEIGHT=y | |||
14 | CONFIG_GENERIC_HARDIRQS=y | 14 | CONFIG_GENERIC_HARDIRQS=y |
15 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | 15 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y |
16 | CONFIG_GENERIC_IRQ_PROBE=y | 16 | CONFIG_GENERIC_IRQ_PROBE=y |
17 | CONFIG_IRQ_PER_CPU=y | ||
17 | CONFIG_GENERIC_GPIO=y | 18 | CONFIG_GENERIC_GPIO=y |
18 | CONFIG_GENERIC_TIME=y | 19 | CONFIG_GENERIC_TIME=y |
19 | CONFIG_GENERIC_CLOCKEVENTS=y | 20 | CONFIG_GENERIC_CLOCKEVENTS=y |
@@ -28,7 +29,9 @@ CONFIG_HAVE_LATENCYTOP_SUPPORT=y | |||
28 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 29 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
29 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | 30 | CONFIG_ARCH_NO_VIRT_TO_BUS=y |
30 | CONFIG_ARCH_HAS_DEFAULT_IDLE=y | 31 | CONFIG_ARCH_HAS_DEFAULT_IDLE=y |
32 | CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y | ||
31 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 33 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
34 | CONFIG_CONSTRUCTORS=y | ||
32 | 35 | ||
33 | # | 36 | # |
34 | # General setup | 37 | # General setup |
@@ -88,10 +91,12 @@ CONFIG_TIMERFD=y | |||
88 | CONFIG_EVENTFD=y | 91 | CONFIG_EVENTFD=y |
89 | CONFIG_SHMEM=y | 92 | CONFIG_SHMEM=y |
90 | CONFIG_AIO=y | 93 | CONFIG_AIO=y |
94 | CONFIG_HAVE_PERF_COUNTERS=y | ||
91 | 95 | ||
92 | # | 96 | # |
93 | # Performance Counters | 97 | # Performance Counters |
94 | # | 98 | # |
99 | # CONFIG_PERF_COUNTERS is not set | ||
95 | CONFIG_VM_EVENT_COUNTERS=y | 100 | CONFIG_VM_EVENT_COUNTERS=y |
96 | # CONFIG_STRIP_ASM_SYMS is not set | 101 | # CONFIG_STRIP_ASM_SYMS is not set |
97 | CONFIG_COMPAT_BRK=y | 102 | CONFIG_COMPAT_BRK=y |
@@ -107,6 +112,10 @@ CONFIG_HAVE_KRETPROBES=y | |||
107 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 112 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
108 | CONFIG_HAVE_CLK=y | 113 | CONFIG_HAVE_CLK=y |
109 | CONFIG_HAVE_DMA_API_DEBUG=y | 114 | CONFIG_HAVE_DMA_API_DEBUG=y |
115 | |||
116 | # | ||
117 | # GCOV-based kernel profiling | ||
118 | # | ||
110 | # CONFIG_SLOW_WORK is not set | 119 | # CONFIG_SLOW_WORK is not set |
111 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | 120 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y |
112 | CONFIG_SLABINFO=y | 121 | CONFIG_SLABINFO=y |
@@ -119,7 +128,7 @@ CONFIG_MODULE_UNLOAD=y | |||
119 | # CONFIG_MODVERSIONS is not set | 128 | # CONFIG_MODVERSIONS is not set |
120 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 129 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
121 | CONFIG_BLOCK=y | 130 | CONFIG_BLOCK=y |
122 | # CONFIG_LBD is not set | 131 | CONFIG_LBDAF=y |
123 | # CONFIG_BLK_DEV_BSG is not set | 132 | # CONFIG_BLK_DEV_BSG is not set |
124 | # CONFIG_BLK_DEV_INTEGRITY is not set | 133 | # CONFIG_BLK_DEV_INTEGRITY is not set |
125 | 134 | ||
@@ -584,7 +593,6 @@ CONFIG_SCSI_WAIT_SCAN=m | |||
584 | # CONFIG_SCSI_SRP_ATTRS is not set | 593 | # CONFIG_SCSI_SRP_ATTRS is not set |
585 | CONFIG_SCSI_LOWLEVEL=y | 594 | CONFIG_SCSI_LOWLEVEL=y |
586 | # CONFIG_ISCSI_TCP is not set | 595 | # CONFIG_ISCSI_TCP is not set |
587 | # CONFIG_SCSI_BNX2_ISCSI is not set | ||
588 | # CONFIG_LIBFC is not set | 596 | # CONFIG_LIBFC is not set |
589 | # CONFIG_LIBFCOE is not set | 597 | # CONFIG_LIBFCOE is not set |
590 | # CONFIG_SCSI_DEBUG is not set | 598 | # CONFIG_SCSI_DEBUG is not set |
@@ -624,7 +632,7 @@ CONFIG_NET_ETHERNET=y | |||
624 | CONFIG_MII=y | 632 | CONFIG_MII=y |
625 | # CONFIG_AX88796 is not set | 633 | # CONFIG_AX88796 is not set |
626 | # CONFIG_STNIC is not set | 634 | # CONFIG_STNIC is not set |
627 | # CONFIG_SH_ETH is not set | 635 | CONFIG_SH_ETH=y |
628 | CONFIG_SMC91X=y | 636 | CONFIG_SMC91X=y |
629 | # CONFIG_ENC28J60 is not set | 637 | # CONFIG_ENC28J60 is not set |
630 | # CONFIG_ETHOC is not set | 638 | # CONFIG_ETHOC is not set |
@@ -801,6 +809,11 @@ CONFIG_SPI_BITBANG=y | |||
801 | # | 809 | # |
802 | # CONFIG_SPI_SPIDEV is not set | 810 | # CONFIG_SPI_SPIDEV is not set |
803 | # CONFIG_SPI_TLE62X0 is not set | 811 | # CONFIG_SPI_TLE62X0 is not set |
812 | |||
813 | # | ||
814 | # PPS support | ||
815 | # | ||
816 | # CONFIG_PPS is not set | ||
804 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | 817 | CONFIG_ARCH_REQUIRE_GPIOLIB=y |
805 | CONFIG_GPIOLIB=y | 818 | CONFIG_GPIOLIB=y |
806 | # CONFIG_GPIO_SYSFS is not set | 819 | # CONFIG_GPIO_SYSFS is not set |
@@ -851,6 +864,8 @@ CONFIG_SSB_POSSIBLE=y | |||
851 | # CONFIG_MFD_WM8400 is not set | 864 | # CONFIG_MFD_WM8400 is not set |
852 | # CONFIG_MFD_WM8350_I2C is not set | 865 | # CONFIG_MFD_WM8350_I2C is not set |
853 | # CONFIG_MFD_PCF50633 is not set | 866 | # CONFIG_MFD_PCF50633 is not set |
867 | # CONFIG_AB3100_CORE is not set | ||
868 | # CONFIG_EZX_PCAP is not set | ||
854 | # CONFIG_REGULATOR is not set | 869 | # CONFIG_REGULATOR is not set |
855 | CONFIG_MEDIA_SUPPORT=y | 870 | CONFIG_MEDIA_SUPPORT=y |
856 | 871 | ||
@@ -1196,6 +1211,7 @@ CONFIG_RTC_DRV_PCF8563=y | |||
1196 | # CONFIG_RTC_DRV_S35390A is not set | 1211 | # CONFIG_RTC_DRV_S35390A is not set |
1197 | # CONFIG_RTC_DRV_FM3130 is not set | 1212 | # CONFIG_RTC_DRV_FM3130 is not set |
1198 | # CONFIG_RTC_DRV_RX8581 is not set | 1213 | # CONFIG_RTC_DRV_RX8581 is not set |
1214 | # CONFIG_RTC_DRV_RX8025 is not set | ||
1199 | 1215 | ||
1200 | # | 1216 | # |
1201 | # SPI RTC drivers | 1217 | # SPI RTC drivers |
@@ -1260,6 +1276,7 @@ CONFIG_FS_MBCACHE=y | |||
1260 | # CONFIG_JFS_FS is not set | 1276 | # CONFIG_JFS_FS is not set |
1261 | CONFIG_FS_POSIX_ACL=y | 1277 | CONFIG_FS_POSIX_ACL=y |
1262 | # CONFIG_XFS_FS is not set | 1278 | # CONFIG_XFS_FS is not set |
1279 | # CONFIG_GFS2_FS is not set | ||
1263 | # CONFIG_OCFS2_FS is not set | 1280 | # CONFIG_OCFS2_FS is not set |
1264 | # CONFIG_BTRFS_FS is not set | 1281 | # CONFIG_BTRFS_FS is not set |
1265 | CONFIG_FILE_LOCKING=y | 1282 | CONFIG_FILE_LOCKING=y |
diff --git a/arch/sh/include/asm/perf_counter.h b/arch/sh/include/asm/perf_counter.h index a8153c2aa6fa..61c2b40c802c 100644 --- a/arch/sh/include/asm/perf_counter.h +++ b/arch/sh/include/asm/perf_counter.h | |||
@@ -2,6 +2,6 @@ | |||
2 | #define __ASM_SH_PERF_COUNTER_H | 2 | #define __ASM_SH_PERF_COUNTER_H |
3 | 3 | ||
4 | /* SH only supports software counters through this interface. */ | 4 | /* SH only supports software counters through this interface. */ |
5 | #define set_perf_counter_pending() do { } while (0) | 5 | static inline void set_perf_counter_pending(void) {} |
6 | 6 | ||
7 | #endif /* __ASM_SH_PERF_COUNTER_H */ | 7 | #endif /* __ASM_SH_PERF_COUNTER_H */ |
diff --git a/arch/sh/include/asm/syscall_32.h b/arch/sh/include/asm/syscall_32.h index 5bc34681d994..6f83f2cc45c1 100644 --- a/arch/sh/include/asm/syscall_32.h +++ b/arch/sh/include/asm/syscall_32.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <linux/kernel.h> | 4 | #include <linux/kernel.h> |
5 | #include <linux/sched.h> | 5 | #include <linux/sched.h> |
6 | #include <linux/err.h> | ||
6 | #include <asm/ptrace.h> | 7 | #include <asm/ptrace.h> |
7 | 8 | ||
8 | /* The system call number is given by the user in R3 */ | 9 | /* The system call number is given by the user in R3 */ |
diff --git a/arch/sh/include/mach-se/mach/se7724.h b/arch/sh/include/mach-se/mach/se7724.h index 74164b60d0db..29514a39d0f5 100644 --- a/arch/sh/include/mach-se/mach/se7724.h +++ b/arch/sh/include/mach-se/mach/se7724.h | |||
@@ -20,6 +20,11 @@ | |||
20 | */ | 20 | */ |
21 | #include <asm/addrspace.h> | 21 | #include <asm/addrspace.h> |
22 | 22 | ||
23 | /* SH Eth */ | ||
24 | #define SH_ETH_ADDR (0xA4600000) | ||
25 | #define SH_ETH_MAHR (SH_ETH_ADDR + 0x1C0) | ||
26 | #define SH_ETH_MALR (SH_ETH_ADDR + 0x1C8) | ||
27 | |||
23 | #define PA_LED (0xba203000) /* 8bit LED */ | 28 | #define PA_LED (0xba203000) /* 8bit LED */ |
24 | #define IRQ_MODE (0xba200010) | 29 | #define IRQ_MODE (0xba200010) |
25 | #define IRQ0_SR (0xba200014) | 30 | #define IRQ0_SR (0xba200014) |
diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c index cc8ddbdf3d7a..71925946f1e1 100644 --- a/arch/sh/mm/fault_32.c +++ b/arch/sh/mm/fault_32.c | |||
@@ -15,12 +15,28 @@ | |||
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
16 | #include <linux/hardirq.h> | 16 | #include <linux/hardirq.h> |
17 | #include <linux/kprobes.h> | 17 | #include <linux/kprobes.h> |
18 | #include <linux/marker.h> | 18 | #include <linux/perf_counter.h> |
19 | #include <asm/io_trapped.h> | 19 | #include <asm/io_trapped.h> |
20 | #include <asm/system.h> | 20 | #include <asm/system.h> |
21 | #include <asm/mmu_context.h> | 21 | #include <asm/mmu_context.h> |
22 | #include <asm/tlbflush.h> | 22 | #include <asm/tlbflush.h> |
23 | 23 | ||
24 | static inline int notify_page_fault(struct pt_regs *regs, int trap) | ||
25 | { | ||
26 | int ret = 0; | ||
27 | |||
28 | #ifdef CONFIG_KPROBES | ||
29 | if (!user_mode(regs)) { | ||
30 | preempt_disable(); | ||
31 | if (kprobe_running() && kprobe_fault_handler(regs, trap)) | ||
32 | ret = 1; | ||
33 | preempt_enable(); | ||
34 | } | ||
35 | #endif | ||
36 | |||
37 | return ret; | ||
38 | } | ||
39 | |||
24 | /* | 40 | /* |
25 | * This routine handles page faults. It determines the address, | 41 | * This routine handles page faults. It determines the address, |
26 | * and the problem, and then passes it off to one of the appropriate | 42 | * and the problem, and then passes it off to one of the appropriate |
@@ -87,13 +103,16 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, | |||
87 | return; | 103 | return; |
88 | } | 104 | } |
89 | 105 | ||
106 | mm = tsk->mm; | ||
107 | |||
108 | if (unlikely(notify_page_fault(regs, lookup_exception_vector()))) | ||
109 | return; | ||
110 | |||
90 | /* Only enable interrupts if they were on before the fault */ | 111 | /* Only enable interrupts if they were on before the fault */ |
91 | if ((regs->sr & SR_IMASK) != SR_IMASK) { | 112 | if ((regs->sr & SR_IMASK) != SR_IMASK) |
92 | trace_hardirqs_on(); | ||
93 | local_irq_enable(); | 113 | local_irq_enable(); |
94 | } | ||
95 | 114 | ||
96 | mm = tsk->mm; | 115 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); |
97 | 116 | ||
98 | /* | 117 | /* |
99 | * If we're in an interrupt or have no user | 118 | * If we're in an interrupt or have no user |
@@ -141,10 +160,15 @@ survive: | |||
141 | goto do_sigbus; | 160 | goto do_sigbus; |
142 | BUG(); | 161 | BUG(); |
143 | } | 162 | } |
144 | if (fault & VM_FAULT_MAJOR) | 163 | if (fault & VM_FAULT_MAJOR) { |
145 | tsk->maj_flt++; | 164 | tsk->maj_flt++; |
146 | else | 165 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, |
166 | regs, address); | ||
167 | } else { | ||
147 | tsk->min_flt++; | 168 | tsk->min_flt++; |
169 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, | ||
170 | regs, address); | ||
171 | } | ||
148 | 172 | ||
149 | up_read(&mm->mmap_sem); | 173 | up_read(&mm->mmap_sem); |
150 | return; | 174 | return; |
@@ -245,22 +269,6 @@ do_sigbus: | |||
245 | goto no_context; | 269 | goto no_context; |
246 | } | 270 | } |
247 | 271 | ||
248 | static inline int notify_page_fault(struct pt_regs *regs, int trap) | ||
249 | { | ||
250 | int ret = 0; | ||
251 | |||
252 | #ifdef CONFIG_KPROBES | ||
253 | if (!user_mode(regs)) { | ||
254 | preempt_disable(); | ||
255 | if (kprobe_running() && kprobe_fault_handler(regs, trap)) | ||
256 | ret = 1; | ||
257 | preempt_enable(); | ||
258 | } | ||
259 | #endif | ||
260 | |||
261 | return ret; | ||
262 | } | ||
263 | |||
264 | /* | 272 | /* |
265 | * Called with interrupts disabled. | 273 | * Called with interrupts disabled. |
266 | */ | 274 | */ |
@@ -273,12 +281,7 @@ asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs, | |||
273 | pmd_t *pmd; | 281 | pmd_t *pmd; |
274 | pte_t *pte; | 282 | pte_t *pte; |
275 | pte_t entry; | 283 | pte_t entry; |
276 | int ret = 0; | 284 | int ret = 1; |
277 | |||
278 | if (notify_page_fault(regs, lookup_exception_vector())) | ||
279 | goto out; | ||
280 | |||
281 | ret = 1; | ||
282 | 285 | ||
283 | /* | 286 | /* |
284 | * We don't take page faults for P1, P2, and parts of P4, these | 287 | * We don't take page faults for P1, P2, and parts of P4, these |
diff --git a/arch/sh/mm/tlbflush_64.c b/arch/sh/mm/tlbflush_64.c index fcbb6e135cef..3ce40ea34824 100644 --- a/arch/sh/mm/tlbflush_64.c +++ b/arch/sh/mm/tlbflush_64.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2000, 2001 Paolo Alberelli | 4 | * Copyright (C) 2000, 2001 Paolo Alberelli |
5 | * Copyright (C) 2003 Richard Curnow (/proc/tlb, bug fixes) | 5 | * Copyright (C) 2003 Richard Curnow (/proc/tlb, bug fixes) |
6 | * Copyright (C) 2003 Paul Mundt | 6 | * Copyright (C) 2003 - 2009 Paul Mundt |
7 | * | 7 | * |
8 | * This file is subject to the terms and conditions of the GNU General Public | 8 | * This file is subject to the terms and conditions of the GNU General Public |
9 | * License. See the file "COPYING" in the main directory of this archive | 9 | * License. See the file "COPYING" in the main directory of this archive |
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/mman.h> | 20 | #include <linux/mman.h> |
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/smp.h> | 22 | #include <linux/smp.h> |
23 | #include <linux/perf_counter.h> | ||
23 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
24 | #include <asm/system.h> | 25 | #include <asm/system.h> |
25 | #include <asm/io.h> | 26 | #include <asm/io.h> |
@@ -115,6 +116,8 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long writeaccess, | |||
115 | /* Not an IO address, so reenable interrupts */ | 116 | /* Not an IO address, so reenable interrupts */ |
116 | local_irq_enable(); | 117 | local_irq_enable(); |
117 | 118 | ||
119 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); | ||
120 | |||
118 | /* | 121 | /* |
119 | * If we're in an interrupt or have no user | 122 | * If we're in an interrupt or have no user |
120 | * context, we must not take the fault.. | 123 | * context, we must not take the fault.. |
@@ -195,10 +198,16 @@ survive: | |||
195 | goto do_sigbus; | 198 | goto do_sigbus; |
196 | BUG(); | 199 | BUG(); |
197 | } | 200 | } |
198 | if (fault & VM_FAULT_MAJOR) | 201 | |
202 | if (fault & VM_FAULT_MAJOR) { | ||
199 | tsk->maj_flt++; | 203 | tsk->maj_flt++; |
200 | else | 204 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, |
205 | regs, address); | ||
206 | } else { | ||
201 | tsk->min_flt++; | 207 | tsk->min_flt++; |
208 | perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, | ||
209 | regs, address); | ||
210 | } | ||
202 | 211 | ||
203 | /* If we get here, the page fault has been handled. Do the TLB refill | 212 | /* If we get here, the page fault has been handled. Do the TLB refill |
204 | now from the newly-setup PTE, to avoid having to fault again right | 213 | now from the newly-setup PTE, to avoid having to fault again right |
diff --git a/drivers/clocksource/sh_tmu.c b/drivers/clocksource/sh_tmu.c index 9ffb05f4095d..93c2322feab7 100644 --- a/drivers/clocksource/sh_tmu.c +++ b/drivers/clocksource/sh_tmu.c | |||
@@ -161,7 +161,7 @@ static void sh_tmu_set_next(struct sh_tmu_priv *p, unsigned long delta, | |||
161 | if (periodic) | 161 | if (periodic) |
162 | sh_tmu_write(p, TCOR, delta); | 162 | sh_tmu_write(p, TCOR, delta); |
163 | else | 163 | else |
164 | sh_tmu_write(p, TCOR, 0); | 164 | sh_tmu_write(p, TCOR, 0xffffffff); |
165 | 165 | ||
166 | sh_tmu_write(p, TCNT, delta); | 166 | sh_tmu_write(p, TCNT, delta); |
167 | 167 | ||
diff --git a/drivers/video/sh_mobile_lcdcfb.c b/drivers/video/sh_mobile_lcdcfb.c index f10d2fbeda06..da983b720f08 100644 --- a/drivers/video/sh_mobile_lcdcfb.c +++ b/drivers/video/sh_mobile_lcdcfb.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
18 | #include <linux/dma-mapping.h> | 18 | #include <linux/dma-mapping.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/vmalloc.h> | ||
20 | #include <video/sh_mobile_lcdc.h> | 21 | #include <video/sh_mobile_lcdc.h> |
21 | #include <asm/atomic.h> | 22 | #include <asm/atomic.h> |
22 | 23 | ||
@@ -33,6 +34,7 @@ struct sh_mobile_lcdc_chan { | |||
33 | struct fb_info info; | 34 | struct fb_info info; |
34 | dma_addr_t dma_handle; | 35 | dma_addr_t dma_handle; |
35 | struct fb_deferred_io defio; | 36 | struct fb_deferred_io defio; |
37 | struct scatterlist *sglist; | ||
36 | unsigned long frame_end; | 38 | unsigned long frame_end; |
37 | wait_queue_head_t frame_end_wait; | 39 | wait_queue_head_t frame_end_wait; |
38 | }; | 40 | }; |
@@ -206,16 +208,38 @@ static void sh_mobile_lcdc_clk_on(struct sh_mobile_lcdc_priv *priv) {} | |||
206 | static void sh_mobile_lcdc_clk_off(struct sh_mobile_lcdc_priv *priv) {} | 208 | static void sh_mobile_lcdc_clk_off(struct sh_mobile_lcdc_priv *priv) {} |
207 | #endif | 209 | #endif |
208 | 210 | ||
211 | static int sh_mobile_lcdc_sginit(struct fb_info *info, | ||
212 | struct list_head *pagelist) | ||
213 | { | ||
214 | struct sh_mobile_lcdc_chan *ch = info->par; | ||
215 | unsigned int nr_pages_max = info->fix.smem_len >> PAGE_SHIFT; | ||
216 | struct page *page; | ||
217 | int nr_pages = 0; | ||
218 | |||
219 | sg_init_table(ch->sglist, nr_pages_max); | ||
220 | |||
221 | list_for_each_entry(page, pagelist, lru) | ||
222 | sg_set_page(&ch->sglist[nr_pages++], page, PAGE_SIZE, 0); | ||
223 | |||
224 | return nr_pages; | ||
225 | } | ||
226 | |||
209 | static void sh_mobile_lcdc_deferred_io(struct fb_info *info, | 227 | static void sh_mobile_lcdc_deferred_io(struct fb_info *info, |
210 | struct list_head *pagelist) | 228 | struct list_head *pagelist) |
211 | { | 229 | { |
212 | struct sh_mobile_lcdc_chan *ch = info->par; | 230 | struct sh_mobile_lcdc_chan *ch = info->par; |
231 | unsigned int nr_pages; | ||
213 | 232 | ||
214 | /* enable clocks before accessing hardware */ | 233 | /* enable clocks before accessing hardware */ |
215 | sh_mobile_lcdc_clk_on(ch->lcdc); | 234 | sh_mobile_lcdc_clk_on(ch->lcdc); |
216 | 235 | ||
236 | nr_pages = sh_mobile_lcdc_sginit(info, pagelist); | ||
237 | dma_map_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE); | ||
238 | |||
217 | /* trigger panel update */ | 239 | /* trigger panel update */ |
218 | lcdc_write_chan(ch, LDSM2R, 1); | 240 | lcdc_write_chan(ch, LDSM2R, 1); |
241 | |||
242 | dma_unmap_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE); | ||
219 | } | 243 | } |
220 | 244 | ||
221 | static void sh_mobile_lcdc_deferred_io_touch(struct fb_info *info) | 245 | static void sh_mobile_lcdc_deferred_io_touch(struct fb_info *info) |
@@ -846,21 +870,31 @@ static int __init sh_mobile_lcdc_probe(struct platform_device *pdev) | |||
846 | } | 870 | } |
847 | 871 | ||
848 | for (i = 0; i < j; i++) { | 872 | for (i = 0; i < j; i++) { |
849 | error = register_framebuffer(&priv->ch[i].info); | 873 | struct sh_mobile_lcdc_chan *ch = priv->ch + i; |
874 | |||
875 | info = &ch->info; | ||
876 | |||
877 | if (info->fbdefio) { | ||
878 | priv->ch->sglist = vmalloc(sizeof(struct scatterlist) * | ||
879 | info->fix.smem_len >> PAGE_SHIFT); | ||
880 | if (!priv->ch->sglist) { | ||
881 | dev_err(&pdev->dev, "cannot allocate sglist\n"); | ||
882 | goto err1; | ||
883 | } | ||
884 | } | ||
885 | |||
886 | error = register_framebuffer(info); | ||
850 | if (error < 0) | 887 | if (error < 0) |
851 | goto err1; | 888 | goto err1; |
852 | } | ||
853 | 889 | ||
854 | for (i = 0; i < j; i++) { | ||
855 | info = &priv->ch[i].info; | ||
856 | dev_info(info->dev, | 890 | dev_info(info->dev, |
857 | "registered %s/%s as %dx%d %dbpp.\n", | 891 | "registered %s/%s as %dx%d %dbpp.\n", |
858 | pdev->name, | 892 | pdev->name, |
859 | (priv->ch[i].cfg.chan == LCDC_CHAN_MAINLCD) ? | 893 | (ch->cfg.chan == LCDC_CHAN_MAINLCD) ? |
860 | "mainlcd" : "sublcd", | 894 | "mainlcd" : "sublcd", |
861 | (int) priv->ch[i].cfg.lcd_cfg.xres, | 895 | (int) ch->cfg.lcd_cfg.xres, |
862 | (int) priv->ch[i].cfg.lcd_cfg.yres, | 896 | (int) ch->cfg.lcd_cfg.yres, |
863 | priv->ch[i].cfg.bpp); | 897 | ch->cfg.bpp); |
864 | 898 | ||
865 | /* deferred io mode: disable clock to save power */ | 899 | /* deferred io mode: disable clock to save power */ |
866 | if (info->fbdefio) | 900 | if (info->fbdefio) |
@@ -892,6 +926,9 @@ static int sh_mobile_lcdc_remove(struct platform_device *pdev) | |||
892 | if (!info->device) | 926 | if (!info->device) |
893 | continue; | 927 | continue; |
894 | 928 | ||
929 | if (priv->ch[i].sglist) | ||
930 | vfree(priv->ch[i].sglist); | ||
931 | |||
895 | dma_free_coherent(&pdev->dev, info->fix.smem_len, | 932 | dma_free_coherent(&pdev->dev, info->fix.smem_len, |
896 | info->screen_base, priv->ch[i].dma_handle); | 933 | info->screen_base, priv->ch[i].dma_handle); |
897 | fb_dealloc_cmap(&info->cmap); | 934 | fb_dealloc_cmap(&info->cmap); |
diff --git a/mm/nommu.c b/mm/nommu.c index bf0cc762a7d2..53cab10fece4 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -238,6 +238,27 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | |||
238 | } | 238 | } |
239 | EXPORT_SYMBOL(get_user_pages); | 239 | EXPORT_SYMBOL(get_user_pages); |
240 | 240 | ||
241 | /** | ||
242 | * follow_pfn - look up PFN at a user virtual address | ||
243 | * @vma: memory mapping | ||
244 | * @address: user virtual address | ||
245 | * @pfn: location to store found PFN | ||
246 | * | ||
247 | * Only IO mappings and raw PFN mappings are allowed. | ||
248 | * | ||
249 | * Returns zero and the pfn at @pfn on success, -ve otherwise. | ||
250 | */ | ||
251 | int follow_pfn(struct vm_area_struct *vma, unsigned long address, | ||
252 | unsigned long *pfn) | ||
253 | { | ||
254 | if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) | ||
255 | return -EINVAL; | ||
256 | |||
257 | *pfn = address >> PAGE_SHIFT; | ||
258 | return 0; | ||
259 | } | ||
260 | EXPORT_SYMBOL(follow_pfn); | ||
261 | |||
241 | DEFINE_RWLOCK(vmlist_lock); | 262 | DEFINE_RWLOCK(vmlist_lock); |
242 | struct vm_struct *vmlist; | 263 | struct vm_struct *vmlist; |
243 | 264 | ||
diff --git a/tools/perf/perf.h b/tools/perf/perf.h index ce394192c85a..8f729aedc1a3 100644 --- a/tools/perf/perf.h +++ b/tools/perf/perf.h | |||
@@ -19,6 +19,16 @@ | |||
19 | #define cpu_relax() asm volatile("" ::: "memory"); | 19 | #define cpu_relax() asm volatile("" ::: "memory"); |
20 | #endif | 20 | #endif |
21 | 21 | ||
22 | #ifdef __sh__ | ||
23 | #include "../../arch/sh/include/asm/unistd.h" | ||
24 | #if defined(__SH4A__) || defined(__SH5__) | ||
25 | # define rmb() asm volatile("synco" ::: "memory") | ||
26 | #else | ||
27 | # define rmb() asm volatile("" ::: "memory") | ||
28 | #endif | ||
29 | #define cpu_relax() asm volatile("" ::: "memory") | ||
30 | #endif | ||
31 | |||
22 | #include <time.h> | 32 | #include <time.h> |
23 | #include <unistd.h> | 33 | #include <unistd.h> |
24 | #include <sys/types.h> | 34 | #include <sys/types.h> |