diff options
27 files changed, 916 insertions, 207 deletions
diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 62123885a6fa..49714258732e 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/device.h> | 12 | #include <linux/device.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
14 | #include <linux/mtd/physmap.h> | 15 | #include <linux/mtd/physmap.h> |
15 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
16 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
@@ -442,7 +443,9 @@ static void sdhi0_set_pwr(struct platform_device *pdev, int state) | |||
442 | } | 443 | } |
443 | 444 | ||
444 | static struct sh_mobile_sdhi_info sdhi0_info = { | 445 | static struct sh_mobile_sdhi_info sdhi0_info = { |
445 | .set_pwr = sdhi0_set_pwr, | 446 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, |
447 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
448 | .set_pwr = sdhi0_set_pwr, | ||
446 | }; | 449 | }; |
447 | 450 | ||
448 | static struct resource sdhi0_resources[] = { | 451 | static struct resource sdhi0_resources[] = { |
@@ -478,7 +481,9 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int state) | |||
478 | } | 481 | } |
479 | 482 | ||
480 | static struct sh_mobile_sdhi_info sdhi1_info = { | 483 | static struct sh_mobile_sdhi_info sdhi1_info = { |
481 | .set_pwr = sdhi1_set_pwr, | 484 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, |
485 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, | ||
486 | .set_pwr = sdhi1_set_pwr, | ||
482 | }; | 487 | }; |
483 | 488 | ||
484 | static struct resource sdhi1_resources[] = { | 489 | static struct resource sdhi1_resources[] = { |
@@ -769,6 +774,51 @@ static struct platform_device irda_device = { | |||
769 | .resource = irda_resources, | 774 | .resource = irda_resources, |
770 | }; | 775 | }; |
771 | 776 | ||
777 | #include <media/ak881x.h> | ||
778 | #include <media/sh_vou.h> | ||
779 | |||
780 | struct ak881x_pdata ak881x_pdata = { | ||
781 | .flags = AK881X_IF_MODE_SLAVE, | ||
782 | }; | ||
783 | |||
784 | static struct i2c_board_info ak8813 = { | ||
785 | I2C_BOARD_INFO("ak8813", 0x20), | ||
786 | .platform_data = &ak881x_pdata, | ||
787 | }; | ||
788 | |||
789 | struct sh_vou_pdata sh_vou_pdata = { | ||
790 | .bus_fmt = SH_VOU_BUS_8BIT, | ||
791 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, | ||
792 | .board_info = &ak8813, | ||
793 | .i2c_adap = 0, | ||
794 | .module_name = "ak881x", | ||
795 | }; | ||
796 | |||
797 | static struct resource sh_vou_resources[] = { | ||
798 | [0] = { | ||
799 | .start = 0xfe960000, | ||
800 | .end = 0xfe962043, | ||
801 | .flags = IORESOURCE_MEM, | ||
802 | }, | ||
803 | [1] = { | ||
804 | .start = 55, | ||
805 | .flags = IORESOURCE_IRQ, | ||
806 | }, | ||
807 | }; | ||
808 | |||
809 | static struct platform_device vou_device = { | ||
810 | .name = "sh-vou", | ||
811 | .id = -1, | ||
812 | .num_resources = ARRAY_SIZE(sh_vou_resources), | ||
813 | .resource = sh_vou_resources, | ||
814 | .dev = { | ||
815 | .platform_data = &sh_vou_pdata, | ||
816 | }, | ||
817 | .archdata = { | ||
818 | .hwblk_id = HWBLK_VOU, | ||
819 | }, | ||
820 | }; | ||
821 | |||
772 | static struct platform_device *ecovec_devices[] __initdata = { | 822 | static struct platform_device *ecovec_devices[] __initdata = { |
773 | &heartbeat_device, | 823 | &heartbeat_device, |
774 | &nor_flash_device, | 824 | &nor_flash_device, |
@@ -790,6 +840,7 @@ static struct platform_device *ecovec_devices[] __initdata = { | |||
790 | &camera_devices[2], | 840 | &camera_devices[2], |
791 | &fsi_device, | 841 | &fsi_device, |
792 | &irda_device, | 842 | &irda_device, |
843 | &vou_device, | ||
793 | }; | 844 | }; |
794 | 845 | ||
795 | #ifdef CONFIG_I2C | 846 | #ifdef CONFIG_I2C |
@@ -1179,6 +1230,38 @@ static int __init arch_setup(void) | |||
1179 | i2c_register_board_info(1, i2c1_devices, | 1230 | i2c_register_board_info(1, i2c1_devices, |
1180 | ARRAY_SIZE(i2c1_devices)); | 1231 | ARRAY_SIZE(i2c1_devices)); |
1181 | 1232 | ||
1233 | /* VOU */ | ||
1234 | gpio_request(GPIO_FN_DV_D15, NULL); | ||
1235 | gpio_request(GPIO_FN_DV_D14, NULL); | ||
1236 | gpio_request(GPIO_FN_DV_D13, NULL); | ||
1237 | gpio_request(GPIO_FN_DV_D12, NULL); | ||
1238 | gpio_request(GPIO_FN_DV_D11, NULL); | ||
1239 | gpio_request(GPIO_FN_DV_D10, NULL); | ||
1240 | gpio_request(GPIO_FN_DV_D9, NULL); | ||
1241 | gpio_request(GPIO_FN_DV_D8, NULL); | ||
1242 | gpio_request(GPIO_FN_DV_CLKI, NULL); | ||
1243 | gpio_request(GPIO_FN_DV_CLK, NULL); | ||
1244 | gpio_request(GPIO_FN_DV_VSYNC, NULL); | ||
1245 | gpio_request(GPIO_FN_DV_HSYNC, NULL); | ||
1246 | |||
1247 | /* AK8813 power / reset sequence */ | ||
1248 | gpio_request(GPIO_PTG4, NULL); | ||
1249 | gpio_request(GPIO_PTU3, NULL); | ||
1250 | /* Reset */ | ||
1251 | gpio_direction_output(GPIO_PTG4, 0); | ||
1252 | /* Power down */ | ||
1253 | gpio_direction_output(GPIO_PTU3, 1); | ||
1254 | |||
1255 | udelay(10); | ||
1256 | |||
1257 | /* Power up, reset */ | ||
1258 | gpio_set_value(GPIO_PTU3, 0); | ||
1259 | |||
1260 | udelay(10); | ||
1261 | |||
1262 | /* Remove reset */ | ||
1263 | gpio_set_value(GPIO_PTG4, 1); | ||
1264 | |||
1182 | return platform_add_devices(ecovec_devices, | 1265 | return platform_add_devices(ecovec_devices, |
1183 | ARRAY_SIZE(ecovec_devices)); | 1266 | ARRAY_SIZE(ecovec_devices)); |
1184 | } | 1267 | } |
diff --git a/arch/sh/boards/mach-kfr2r09/setup.c b/arch/sh/boards/mach-kfr2r09/setup.c index b2cd0ed8664e..68994a163f6c 100644 --- a/arch/sh/boards/mach-kfr2r09/setup.c +++ b/arch/sh/boards/mach-kfr2r09/setup.c | |||
@@ -10,6 +10,8 @@ | |||
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
13 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
14 | #include <linux/mfd/tmio.h> | ||
13 | #include <linux/mtd/physmap.h> | 15 | #include <linux/mtd/physmap.h> |
14 | #include <linux/mtd/onenand.h> | 16 | #include <linux/mtd/onenand.h> |
15 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
@@ -356,10 +358,19 @@ static struct resource kfr2r09_sh_sdhi0_resources[] = { | |||
356 | }, | 358 | }, |
357 | }; | 359 | }; |
358 | 360 | ||
361 | static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { | ||
362 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | ||
363 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
364 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE, | ||
365 | }; | ||
366 | |||
359 | static struct platform_device kfr2r09_sh_sdhi0_device = { | 367 | static struct platform_device kfr2r09_sh_sdhi0_device = { |
360 | .name = "sh_mobile_sdhi", | 368 | .name = "sh_mobile_sdhi", |
361 | .num_resources = ARRAY_SIZE(kfr2r09_sh_sdhi0_resources), | 369 | .num_resources = ARRAY_SIZE(kfr2r09_sh_sdhi0_resources), |
362 | .resource = kfr2r09_sh_sdhi0_resources, | 370 | .resource = kfr2r09_sh_sdhi0_resources, |
371 | .dev = { | ||
372 | .platform_data = &sh7724_sdhi0_data, | ||
373 | }, | ||
363 | .archdata = { | 374 | .archdata = { |
364 | .hwblk_id = HWBLK_SDHI0, | 375 | .hwblk_id = HWBLK_SDHI0, |
365 | }, | 376 | }, |
diff --git a/arch/sh/boards/mach-migor/setup.c b/arch/sh/boards/mach-migor/setup.c index 7da0fc94a01e..87185de20446 100644 --- a/arch/sh/boards/mach-migor/setup.c +++ b/arch/sh/boards/mach-migor/setup.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
13 | #include <linux/input.h> | 13 | #include <linux/input.h> |
14 | #include <linux/input/sh_keysc.h> | 14 | #include <linux/input/sh_keysc.h> |
15 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
15 | #include <linux/mtd/physmap.h> | 16 | #include <linux/mtd/physmap.h> |
16 | #include <linux/mtd/nand.h> | 17 | #include <linux/mtd/nand.h> |
17 | #include <linux/i2c.h> | 18 | #include <linux/i2c.h> |
@@ -402,10 +403,18 @@ static struct resource sdhi_cn9_resources[] = { | |||
402 | }, | 403 | }, |
403 | }; | 404 | }; |
404 | 405 | ||
406 | static struct sh_mobile_sdhi_info sh7724_sdhi_data = { | ||
407 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | ||
408 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
409 | }; | ||
410 | |||
405 | static struct platform_device sdhi_cn9_device = { | 411 | static struct platform_device sdhi_cn9_device = { |
406 | .name = "sh_mobile_sdhi", | 412 | .name = "sh_mobile_sdhi", |
407 | .num_resources = ARRAY_SIZE(sdhi_cn9_resources), | 413 | .num_resources = ARRAY_SIZE(sdhi_cn9_resources), |
408 | .resource = sdhi_cn9_resources, | 414 | .resource = sdhi_cn9_resources, |
415 | .dev = { | ||
416 | .platform_data = &sh7724_sdhi_data, | ||
417 | }, | ||
409 | .archdata = { | 418 | .archdata = { |
410 | .hwblk_id = HWBLK_SDHI, | 419 | .hwblk_id = HWBLK_SDHI, |
411 | }, | 420 | }, |
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index e74ae7b0d8bf..f9b82546c2df 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/device.h> | 14 | #include <linux/device.h> |
15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
17 | #include <linux/mtd/physmap.h> | 18 | #include <linux/mtd/physmap.h> |
18 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
19 | #include <linux/smc91x.h> | 20 | #include <linux/smc91x.h> |
@@ -462,11 +463,19 @@ static struct resource sdhi0_cn7_resources[] = { | |||
462 | }, | 463 | }, |
463 | }; | 464 | }; |
464 | 465 | ||
466 | static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { | ||
467 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | ||
468 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
469 | }; | ||
470 | |||
465 | static struct platform_device sdhi0_cn7_device = { | 471 | static struct platform_device sdhi0_cn7_device = { |
466 | .name = "sh_mobile_sdhi", | 472 | .name = "sh_mobile_sdhi", |
467 | .id = 0, | 473 | .id = 0, |
468 | .num_resources = ARRAY_SIZE(sdhi0_cn7_resources), | 474 | .num_resources = ARRAY_SIZE(sdhi0_cn7_resources), |
469 | .resource = sdhi0_cn7_resources, | 475 | .resource = sdhi0_cn7_resources, |
476 | .dev = { | ||
477 | .platform_data = &sh7724_sdhi0_data, | ||
478 | }, | ||
470 | .archdata = { | 479 | .archdata = { |
471 | .hwblk_id = HWBLK_SDHI0, | 480 | .hwblk_id = HWBLK_SDHI0, |
472 | }, | 481 | }, |
@@ -485,11 +494,19 @@ static struct resource sdhi1_cn8_resources[] = { | |||
485 | }, | 494 | }, |
486 | }; | 495 | }; |
487 | 496 | ||
497 | static struct sh_mobile_sdhi_info sh7724_sdhi1_data = { | ||
498 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, | ||
499 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, | ||
500 | }; | ||
501 | |||
488 | static struct platform_device sdhi1_cn8_device = { | 502 | static struct platform_device sdhi1_cn8_device = { |
489 | .name = "sh_mobile_sdhi", | 503 | .name = "sh_mobile_sdhi", |
490 | .id = 1, | 504 | .id = 1, |
491 | .num_resources = ARRAY_SIZE(sdhi1_cn8_resources), | 505 | .num_resources = ARRAY_SIZE(sdhi1_cn8_resources), |
492 | .resource = sdhi1_cn8_resources, | 506 | .resource = sdhi1_cn8_resources, |
507 | .dev = { | ||
508 | .platform_data = &sh7724_sdhi1_data, | ||
509 | }, | ||
493 | .archdata = { | 510 | .archdata = { |
494 | .hwblk_id = HWBLK_SDHI1, | 511 | .hwblk_id = HWBLK_SDHI1, |
495 | }, | 512 | }, |
@@ -515,6 +532,52 @@ static struct platform_device irda_device = { | |||
515 | .resource = irda_resources, | 532 | .resource = irda_resources, |
516 | }; | 533 | }; |
517 | 534 | ||
535 | #include <media/ak881x.h> | ||
536 | #include <media/sh_vou.h> | ||
537 | |||
538 | struct ak881x_pdata ak881x_pdata = { | ||
539 | .flags = AK881X_IF_MODE_SLAVE, | ||
540 | }; | ||
541 | |||
542 | static struct i2c_board_info ak8813 = { | ||
543 | /* With open J18 jumper address is 0x21 */ | ||
544 | I2C_BOARD_INFO("ak8813", 0x20), | ||
545 | .platform_data = &ak881x_pdata, | ||
546 | }; | ||
547 | |||
548 | struct sh_vou_pdata sh_vou_pdata = { | ||
549 | .bus_fmt = SH_VOU_BUS_8BIT, | ||
550 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, | ||
551 | .board_info = &ak8813, | ||
552 | .i2c_adap = 0, | ||
553 | .module_name = "ak881x", | ||
554 | }; | ||
555 | |||
556 | static struct resource sh_vou_resources[] = { | ||
557 | [0] = { | ||
558 | .start = 0xfe960000, | ||
559 | .end = 0xfe962043, | ||
560 | .flags = IORESOURCE_MEM, | ||
561 | }, | ||
562 | [1] = { | ||
563 | .start = 55, | ||
564 | .flags = IORESOURCE_IRQ, | ||
565 | }, | ||
566 | }; | ||
567 | |||
568 | static struct platform_device vou_device = { | ||
569 | .name = "sh-vou", | ||
570 | .id = -1, | ||
571 | .num_resources = ARRAY_SIZE(sh_vou_resources), | ||
572 | .resource = sh_vou_resources, | ||
573 | .dev = { | ||
574 | .platform_data = &sh_vou_pdata, | ||
575 | }, | ||
576 | .archdata = { | ||
577 | .hwblk_id = HWBLK_VOU, | ||
578 | }, | ||
579 | }; | ||
580 | |||
518 | static struct platform_device *ms7724se_devices[] __initdata = { | 581 | static struct platform_device *ms7724se_devices[] __initdata = { |
519 | &heartbeat_device, | 582 | &heartbeat_device, |
520 | &smc91x_eth_device, | 583 | &smc91x_eth_device, |
@@ -530,6 +593,7 @@ static struct platform_device *ms7724se_devices[] __initdata = { | |||
530 | &sdhi0_cn7_device, | 593 | &sdhi0_cn7_device, |
531 | &sdhi1_cn8_device, | 594 | &sdhi1_cn8_device, |
532 | &irda_device, | 595 | &irda_device, |
596 | &vou_device, | ||
533 | }; | 597 | }; |
534 | 598 | ||
535 | /* I2C device */ | 599 | /* I2C device */ |
@@ -614,6 +678,7 @@ static int __init devices_setup(void) | |||
614 | { | 678 | { |
615 | u16 sw = __raw_readw(SW4140); /* select camera, monitor */ | 679 | u16 sw = __raw_readw(SW4140); /* select camera, monitor */ |
616 | struct clk *clk; | 680 | struct clk *clk; |
681 | u16 fpga_out; | ||
617 | 682 | ||
618 | /* register board specific self-refresh code */ | 683 | /* register board specific self-refresh code */ |
619 | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | | 684 | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | |
@@ -623,14 +688,26 @@ static int __init devices_setup(void) | |||
623 | &ms7724se_sdram_leave_start, | 688 | &ms7724se_sdram_leave_start, |
624 | &ms7724se_sdram_leave_end); | 689 | &ms7724se_sdram_leave_end); |
625 | /* Reset Release */ | 690 | /* Reset Release */ |
626 | __raw_writew(__raw_readw(FPGA_OUT) & | 691 | fpga_out = __raw_readw(FPGA_OUT); |
627 | ~((1 << 1) | /* LAN */ | 692 | /* bit4: NTSC_PDN, bit5: NTSC_RESET */ |
628 | (1 << 6) | /* VIDEO DAC */ | 693 | fpga_out &= ~((1 << 1) | /* LAN */ |
629 | (1 << 7) | /* AK4643 */ | 694 | (1 << 4) | /* AK8813 PDN */ |
630 | (1 << 8) | /* IrDA */ | 695 | (1 << 5) | /* AK8813 RESET */ |
631 | (1 << 12) | /* USB0 */ | 696 | (1 << 6) | /* VIDEO DAC */ |
632 | (1 << 14)), /* RMII */ | 697 | (1 << 7) | /* AK4643 */ |
633 | FPGA_OUT); | 698 | (1 << 8) | /* IrDA */ |
699 | (1 << 12) | /* USB0 */ | ||
700 | (1 << 14)); /* RMII */ | ||
701 | __raw_writew(fpga_out | (1 << 4), FPGA_OUT); | ||
702 | |||
703 | udelay(10); | ||
704 | |||
705 | /* AK8813 RESET */ | ||
706 | __raw_writew(fpga_out | (1 << 5), FPGA_OUT); | ||
707 | |||
708 | udelay(10); | ||
709 | |||
710 | __raw_writew(fpga_out, FPGA_OUT); | ||
634 | 711 | ||
635 | /* turn on USB clocks, use external clock */ | 712 | /* turn on USB clocks, use external clock */ |
636 | __raw_writew((__raw_readw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); | 713 | __raw_writew((__raw_readw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); |
@@ -862,6 +939,20 @@ static int __init devices_setup(void) | |||
862 | lcdc_info.ch[0].flags = LCDC_FLAGS_DWPOL; | 939 | lcdc_info.ch[0].flags = LCDC_FLAGS_DWPOL; |
863 | } | 940 | } |
864 | 941 | ||
942 | /* VOU */ | ||
943 | gpio_request(GPIO_FN_DV_D15, NULL); | ||
944 | gpio_request(GPIO_FN_DV_D14, NULL); | ||
945 | gpio_request(GPIO_FN_DV_D13, NULL); | ||
946 | gpio_request(GPIO_FN_DV_D12, NULL); | ||
947 | gpio_request(GPIO_FN_DV_D11, NULL); | ||
948 | gpio_request(GPIO_FN_DV_D10, NULL); | ||
949 | gpio_request(GPIO_FN_DV_D9, NULL); | ||
950 | gpio_request(GPIO_FN_DV_D8, NULL); | ||
951 | gpio_request(GPIO_FN_DV_CLKI, NULL); | ||
952 | gpio_request(GPIO_FN_DV_CLK, NULL); | ||
953 | gpio_request(GPIO_FN_DV_VSYNC, NULL); | ||
954 | gpio_request(GPIO_FN_DV_HSYNC, NULL); | ||
955 | |||
865 | return platform_add_devices(ms7724se_devices, | 956 | return platform_add_devices(ms7724se_devices, |
866 | ARRAY_SIZE(ms7724se_devices)); | 957 | ARRAY_SIZE(ms7724se_devices)); |
867 | } | 958 | } |
diff --git a/arch/sh/configs/sh7785lcr_32bit_defconfig b/arch/sh/configs/sh7785lcr_32bit_defconfig index e9af616b2160..71f39c71b04b 100644 --- a/arch/sh/configs/sh7785lcr_32bit_defconfig +++ b/arch/sh/configs/sh7785lcr_32bit_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.34-rc5 | 3 | # Linux kernel version: 2.6.34 |
4 | # Tue May 18 17:22:09 2010 | 4 | # Mon May 24 08:33:02 2010 |
5 | # | 5 | # |
6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
7 | CONFIG_SUPERH32=y | 7 | CONFIG_SUPERH32=y |
@@ -76,7 +76,7 @@ CONFIG_RCU_FANOUT=32 | |||
76 | # CONFIG_TREE_RCU_TRACE is not set | 76 | # CONFIG_TREE_RCU_TRACE is not set |
77 | CONFIG_IKCONFIG=y | 77 | CONFIG_IKCONFIG=y |
78 | CONFIG_IKCONFIG_PROC=y | 78 | CONFIG_IKCONFIG_PROC=y |
79 | CONFIG_LOG_BUF_SHIFT=14 | 79 | CONFIG_LOG_BUF_SHIFT=16 |
80 | # CONFIG_CGROUPS is not set | 80 | # CONFIG_CGROUPS is not set |
81 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | 81 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
82 | # CONFIG_RELAY is not set | 82 | # CONFIG_RELAY is not set |
@@ -111,18 +111,17 @@ CONFIG_PERF_USE_VMALLOC=y | |||
111 | # | 111 | # |
112 | CONFIG_PERF_EVENTS=y | 112 | CONFIG_PERF_EVENTS=y |
113 | CONFIG_PERF_COUNTERS=y | 113 | CONFIG_PERF_COUNTERS=y |
114 | # CONFIG_DEBUG_PERF_USE_VMALLOC is not set | ||
114 | CONFIG_VM_EVENT_COUNTERS=y | 115 | CONFIG_VM_EVENT_COUNTERS=y |
115 | CONFIG_PCI_QUIRKS=y | 116 | CONFIG_PCI_QUIRKS=y |
116 | CONFIG_COMPAT_BRK=y | 117 | # CONFIG_COMPAT_BRK is not set |
117 | CONFIG_SLAB=y | 118 | CONFIG_SLAB=y |
118 | # CONFIG_SLUB is not set | 119 | # CONFIG_SLUB is not set |
119 | # CONFIG_SLOB is not set | 120 | # CONFIG_SLOB is not set |
120 | CONFIG_PROFILING=y | 121 | CONFIG_PROFILING=y |
121 | CONFIG_TRACEPOINTS=y | 122 | # CONFIG_OPROFILE is not set |
122 | CONFIG_OPROFILE=y | ||
123 | CONFIG_HAVE_OPROFILE=y | 123 | CONFIG_HAVE_OPROFILE=y |
124 | CONFIG_KPROBES=y | 124 | # CONFIG_KPROBES is not set |
125 | CONFIG_KRETPROBES=y | ||
126 | CONFIG_HAVE_KPROBES=y | 125 | CONFIG_HAVE_KPROBES=y |
127 | CONFIG_HAVE_KRETPROBES=y | 126 | CONFIG_HAVE_KRETPROBES=y |
128 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 127 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
@@ -130,6 +129,7 @@ CONFIG_HAVE_DMA_ATTRS=y | |||
130 | CONFIG_HAVE_CLK=y | 129 | CONFIG_HAVE_CLK=y |
131 | CONFIG_HAVE_DMA_API_DEBUG=y | 130 | CONFIG_HAVE_DMA_API_DEBUG=y |
132 | CONFIG_HAVE_HW_BREAKPOINT=y | 131 | CONFIG_HAVE_HW_BREAKPOINT=y |
132 | CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y | ||
133 | 133 | ||
134 | # | 134 | # |
135 | # GCOV-based kernel profiling | 135 | # GCOV-based kernel profiling |
@@ -243,8 +243,9 @@ CONFIG_PAGE_OFFSET=0x80000000 | |||
243 | CONFIG_FORCE_MAX_ZONEORDER=11 | 243 | CONFIG_FORCE_MAX_ZONEORDER=11 |
244 | CONFIG_MEMORY_START=0x40000000 | 244 | CONFIG_MEMORY_START=0x40000000 |
245 | CONFIG_MEMORY_SIZE=0x20000000 | 245 | CONFIG_MEMORY_SIZE=0x20000000 |
246 | CONFIG_29BIT=y | 246 | # CONFIG_29BIT is not set |
247 | # CONFIG_PMB is not set | 247 | CONFIG_32BIT=y |
248 | CONFIG_PMB=y | ||
248 | CONFIG_X2TLB=y | 249 | CONFIG_X2TLB=y |
249 | CONFIG_VSYSCALL=y | 250 | CONFIG_VSYSCALL=y |
250 | # CONFIG_NUMA is not set | 251 | # CONFIG_NUMA is not set |
@@ -262,9 +263,9 @@ CONFIG_PAGE_SIZE_4KB=y | |||
262 | # CONFIG_PAGE_SIZE_8KB is not set | 263 | # CONFIG_PAGE_SIZE_8KB is not set |
263 | # CONFIG_PAGE_SIZE_16KB is not set | 264 | # CONFIG_PAGE_SIZE_16KB is not set |
264 | # CONFIG_PAGE_SIZE_64KB is not set | 265 | # CONFIG_PAGE_SIZE_64KB is not set |
265 | CONFIG_HUGETLB_PAGE_SIZE_64K=y | 266 | # CONFIG_HUGETLB_PAGE_SIZE_64K is not set |
266 | # CONFIG_HUGETLB_PAGE_SIZE_256K is not set | 267 | # CONFIG_HUGETLB_PAGE_SIZE_256K is not set |
267 | # CONFIG_HUGETLB_PAGE_SIZE_1MB is not set | 268 | CONFIG_HUGETLB_PAGE_SIZE_1MB=y |
268 | # CONFIG_HUGETLB_PAGE_SIZE_4MB is not set | 269 | # CONFIG_HUGETLB_PAGE_SIZE_4MB is not set |
269 | # CONFIG_HUGETLB_PAGE_SIZE_64MB is not set | 270 | # CONFIG_HUGETLB_PAGE_SIZE_64MB is not set |
270 | # CONFIG_HUGETLB_PAGE_SIZE_512MB is not set | 271 | # CONFIG_HUGETLB_PAGE_SIZE_512MB is not set |
@@ -276,7 +277,7 @@ CONFIG_SPARSEMEM=y | |||
276 | CONFIG_HAVE_MEMORY_PRESENT=y | 277 | CONFIG_HAVE_MEMORY_PRESENT=y |
277 | CONFIG_SPARSEMEM_STATIC=y | 278 | CONFIG_SPARSEMEM_STATIC=y |
278 | # CONFIG_MEMORY_HOTPLUG is not set | 279 | # CONFIG_MEMORY_HOTPLUG is not set |
279 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 280 | CONFIG_SPLIT_PTLOCK_CPUS=999999 |
280 | CONFIG_MIGRATION=y | 281 | CONFIG_MIGRATION=y |
281 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 282 | # CONFIG_PHYS_ADDR_T_64BIT is not set |
282 | CONFIG_ZONE_DMA_FLAG=0 | 283 | CONFIG_ZONE_DMA_FLAG=0 |
@@ -298,7 +299,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y | |||
298 | # CONFIG_CPU_BIG_ENDIAN is not set | 299 | # CONFIG_CPU_BIG_ENDIAN is not set |
299 | CONFIG_SH_FPU=y | 300 | CONFIG_SH_FPU=y |
300 | CONFIG_SH_STORE_QUEUES=y | 301 | CONFIG_SH_STORE_QUEUES=y |
301 | # CONFIG_SPECULATIVE_EXECUTION is not set | 302 | CONFIG_SPECULATIVE_EXECUTION=y |
302 | CONFIG_CPU_HAS_INTEVT=y | 303 | CONFIG_CPU_HAS_INTEVT=y |
303 | CONFIG_CPU_HAS_SR_RB=y | 304 | CONFIG_CPU_HAS_SR_RB=y |
304 | CONFIG_CPU_HAS_FPU=y | 305 | CONFIG_CPU_HAS_FPU=y |
@@ -308,7 +309,7 @@ CONFIG_CPU_HAS_FPU=y | |||
308 | # | 309 | # |
309 | # CONFIG_SH_HIGHLANDER is not set | 310 | # CONFIG_SH_HIGHLANDER is not set |
310 | CONFIG_SH_SH7785LCR=y | 311 | CONFIG_SH_SH7785LCR=y |
311 | CONFIG_SH_SH7785LCR_29BIT_PHYSMAPS=y | 312 | # CONFIG_SH_SH7785LCR_PT is not set |
312 | 313 | ||
313 | # | 314 | # |
314 | # Timer and clock configuration | 315 | # Timer and clock configuration |
@@ -371,7 +372,7 @@ CONFIG_SECCOMP=y | |||
371 | # CONFIG_PREEMPT_VOLUNTARY is not set | 372 | # CONFIG_PREEMPT_VOLUNTARY is not set |
372 | CONFIG_PREEMPT=y | 373 | CONFIG_PREEMPT=y |
373 | CONFIG_GUSA=y | 374 | CONFIG_GUSA=y |
374 | # CONFIG_INTC_USERIMASK is not set | 375 | CONFIG_INTC_USERIMASK=y |
375 | 376 | ||
376 | # | 377 | # |
377 | # Boot options | 378 | # Boot options |
@@ -389,6 +390,7 @@ CONFIG_PCI=y | |||
389 | CONFIG_PCI_DOMAINS=y | 390 | CONFIG_PCI_DOMAINS=y |
390 | # CONFIG_PCIEPORTBUS is not set | 391 | # CONFIG_PCIEPORTBUS is not set |
391 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 392 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
393 | CONFIG_PCI_DEBUG=y | ||
392 | # CONFIG_PCI_STUB is not set | 394 | # CONFIG_PCI_STUB is not set |
393 | # CONFIG_PCI_IOV is not set | 395 | # CONFIG_PCI_IOV is not set |
394 | # CONFIG_PCCARD is not set | 396 | # CONFIG_PCCARD is not set |
@@ -465,6 +467,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
465 | # CONFIG_RDS is not set | 467 | # CONFIG_RDS is not set |
466 | # CONFIG_TIPC is not set | 468 | # CONFIG_TIPC is not set |
467 | # CONFIG_ATM is not set | 469 | # CONFIG_ATM is not set |
470 | # CONFIG_L2TP is not set | ||
468 | # CONFIG_BRIDGE is not set | 471 | # CONFIG_BRIDGE is not set |
469 | # CONFIG_NET_DSA is not set | 472 | # CONFIG_NET_DSA is not set |
470 | # CONFIG_VLAN_8021Q is not set | 473 | # CONFIG_VLAN_8021Q is not set |
@@ -485,8 +488,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
485 | # Network testing | 488 | # Network testing |
486 | # | 489 | # |
487 | # CONFIG_NET_PKTGEN is not set | 490 | # CONFIG_NET_PKTGEN is not set |
488 | # CONFIG_NET_TCPPROBE is not set | ||
489 | # CONFIG_NET_DROP_MONITOR is not set | ||
490 | # CONFIG_HAMRADIO is not set | 491 | # CONFIG_HAMRADIO is not set |
491 | # CONFIG_CAN is not set | 492 | # CONFIG_CAN is not set |
492 | # CONFIG_IRDA is not set | 493 | # CONFIG_IRDA is not set |
@@ -499,11 +500,20 @@ CONFIG_WIRELESS=y | |||
499 | # | 500 | # |
500 | # CFG80211 needs to be enabled for MAC80211 | 501 | # CFG80211 needs to be enabled for MAC80211 |
501 | # | 502 | # |
503 | |||
504 | # | ||
505 | # Some wireless drivers require a rate control algorithm | ||
506 | # | ||
502 | # CONFIG_WIMAX is not set | 507 | # CONFIG_WIMAX is not set |
503 | # CONFIG_RFKILL is not set | 508 | # CONFIG_RFKILL is not set |
504 | # CONFIG_NET_9P is not set | 509 | # CONFIG_NET_9P is not set |
505 | 510 | ||
506 | # | 511 | # |
512 | # CAIF Support | ||
513 | # | ||
514 | # CONFIG_CAIF is not set | ||
515 | |||
516 | # | ||
507 | # Device Drivers | 517 | # Device Drivers |
508 | # | 518 | # |
509 | 519 | ||
@@ -514,7 +524,11 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |||
514 | # CONFIG_DEVTMPFS is not set | 524 | # CONFIG_DEVTMPFS is not set |
515 | CONFIG_STANDALONE=y | 525 | CONFIG_STANDALONE=y |
516 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 526 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
517 | # CONFIG_FW_LOADER is not set | 527 | CONFIG_FW_LOADER=y |
528 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
529 | CONFIG_EXTRA_FIRMWARE="" | ||
530 | # CONFIG_DEBUG_DRIVER is not set | ||
531 | # CONFIG_DEBUG_DEVRES is not set | ||
518 | # CONFIG_SYS_HYPERVISOR is not set | 532 | # CONFIG_SYS_HYPERVISOR is not set |
519 | # CONFIG_CONNECTOR is not set | 533 | # CONFIG_CONNECTOR is not set |
520 | CONFIG_MTD=y | 534 | CONFIG_MTD=y |
@@ -537,6 +551,7 @@ CONFIG_MTD_BLOCK=y | |||
537 | # CONFIG_INFTL is not set | 551 | # CONFIG_INFTL is not set |
538 | # CONFIG_RFD_FTL is not set | 552 | # CONFIG_RFD_FTL is not set |
539 | # CONFIG_SSFDC is not set | 553 | # CONFIG_SSFDC is not set |
554 | # CONFIG_SM_FTL is not set | ||
540 | # CONFIG_MTD_OOPS is not set | 555 | # CONFIG_MTD_OOPS is not set |
541 | 556 | ||
542 | # | 557 | # |
@@ -668,7 +683,9 @@ CONFIG_ATA=y | |||
668 | CONFIG_ATA_VERBOSE_ERROR=y | 683 | CONFIG_ATA_VERBOSE_ERROR=y |
669 | CONFIG_SATA_PMP=y | 684 | CONFIG_SATA_PMP=y |
670 | # CONFIG_SATA_AHCI is not set | 685 | # CONFIG_SATA_AHCI is not set |
686 | # CONFIG_SATA_AHCI_PLATFORM is not set | ||
671 | # CONFIG_SATA_SIL24 is not set | 687 | # CONFIG_SATA_SIL24 is not set |
688 | # CONFIG_SATA_INIC162X is not set | ||
672 | CONFIG_ATA_SFF=y | 689 | CONFIG_ATA_SFF=y |
673 | # CONFIG_SATA_SVW is not set | 690 | # CONFIG_SATA_SVW is not set |
674 | # CONFIG_ATA_PIIX is not set | 691 | # CONFIG_ATA_PIIX is not set |
@@ -683,7 +700,6 @@ CONFIG_SATA_SIL=y | |||
683 | # CONFIG_SATA_ULI is not set | 700 | # CONFIG_SATA_ULI is not set |
684 | # CONFIG_SATA_VIA is not set | 701 | # CONFIG_SATA_VIA is not set |
685 | # CONFIG_SATA_VITESSE is not set | 702 | # CONFIG_SATA_VITESSE is not set |
686 | # CONFIG_SATA_INIC162X is not set | ||
687 | # CONFIG_PATA_ALI is not set | 703 | # CONFIG_PATA_ALI is not set |
688 | # CONFIG_PATA_AMD is not set | 704 | # CONFIG_PATA_AMD is not set |
689 | # CONFIG_PATA_ARTOP is not set | 705 | # CONFIG_PATA_ARTOP is not set |
@@ -753,8 +769,36 @@ CONFIG_NETDEVICES=y | |||
753 | # CONFIG_TUN is not set | 769 | # CONFIG_TUN is not set |
754 | # CONFIG_VETH is not set | 770 | # CONFIG_VETH is not set |
755 | # CONFIG_ARCNET is not set | 771 | # CONFIG_ARCNET is not set |
756 | # CONFIG_NET_ETHERNET is not set | 772 | # CONFIG_PHYLIB is not set |
773 | CONFIG_NET_ETHERNET=y | ||
757 | CONFIG_MII=y | 774 | CONFIG_MII=y |
775 | # CONFIG_AX88796 is not set | ||
776 | # CONFIG_STNIC is not set | ||
777 | # CONFIG_HAPPYMEAL is not set | ||
778 | # CONFIG_SUNGEM is not set | ||
779 | # CONFIG_CASSINI is not set | ||
780 | CONFIG_NET_VENDOR_3COM=y | ||
781 | CONFIG_VORTEX=y | ||
782 | # CONFIG_TYPHOON is not set | ||
783 | # CONFIG_SMC91X is not set | ||
784 | # CONFIG_ETHOC is not set | ||
785 | # CONFIG_SMC911X is not set | ||
786 | # CONFIG_SMSC911X is not set | ||
787 | # CONFIG_DNET is not set | ||
788 | # CONFIG_NET_TULIP is not set | ||
789 | # CONFIG_HP100 is not set | ||
790 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
791 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
792 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
793 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
794 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
795 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
796 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
797 | # CONFIG_NET_PCI is not set | ||
798 | # CONFIG_B44 is not set | ||
799 | # CONFIG_KS8842 is not set | ||
800 | # CONFIG_KS8851_MLL is not set | ||
801 | # CONFIG_ATL2 is not set | ||
758 | CONFIG_NETDEV_1000=y | 802 | CONFIG_NETDEV_1000=y |
759 | # CONFIG_ACENIC is not set | 803 | # CONFIG_ACENIC is not set |
760 | # CONFIG_DL2K is not set | 804 | # CONFIG_DL2K is not set |
@@ -836,6 +880,7 @@ CONFIG_INPUT_KEYBOARD=y | |||
836 | CONFIG_KEYBOARD_ATKBD=y | 880 | CONFIG_KEYBOARD_ATKBD=y |
837 | # CONFIG_QT2160 is not set | 881 | # CONFIG_QT2160 is not set |
838 | # CONFIG_KEYBOARD_LKKBD is not set | 882 | # CONFIG_KEYBOARD_LKKBD is not set |
883 | # CONFIG_KEYBOARD_TCA6416 is not set | ||
839 | # CONFIG_KEYBOARD_MAX7359 is not set | 884 | # CONFIG_KEYBOARD_MAX7359 is not set |
840 | # CONFIG_KEYBOARD_NEWTON is not set | 885 | # CONFIG_KEYBOARD_NEWTON is not set |
841 | # CONFIG_KEYBOARD_OPENCORES is not set | 886 | # CONFIG_KEYBOARD_OPENCORES is not set |
@@ -884,6 +929,7 @@ CONFIG_HW_CONSOLE=y | |||
884 | CONFIG_VT_HW_CONSOLE_BINDING=y | 929 | CONFIG_VT_HW_CONSOLE_BINDING=y |
885 | # CONFIG_DEVKMEM is not set | 930 | # CONFIG_DEVKMEM is not set |
886 | # CONFIG_SERIAL_NONSTANDARD is not set | 931 | # CONFIG_SERIAL_NONSTANDARD is not set |
932 | # CONFIG_N_GSM is not set | ||
887 | # CONFIG_NOZOMI is not set | 933 | # CONFIG_NOZOMI is not set |
888 | 934 | ||
889 | # | 935 | # |
@@ -901,6 +947,8 @@ CONFIG_SERIAL_CORE=y | |||
901 | CONFIG_SERIAL_CORE_CONSOLE=y | 947 | CONFIG_SERIAL_CORE_CONSOLE=y |
902 | # CONFIG_SERIAL_JSM is not set | 948 | # CONFIG_SERIAL_JSM is not set |
903 | # CONFIG_SERIAL_TIMBERDALE is not set | 949 | # CONFIG_SERIAL_TIMBERDALE is not set |
950 | # CONFIG_SERIAL_ALTERA_JTAGUART is not set | ||
951 | # CONFIG_SERIAL_ALTERA_UART is not set | ||
904 | CONFIG_UNIX98_PTYS=y | 952 | CONFIG_UNIX98_PTYS=y |
905 | CONFIG_DEVPTS_MULTIPLE_INSTANCES=y | 953 | CONFIG_DEVPTS_MULTIPLE_INSTANCES=y |
906 | # CONFIG_LEGACY_PTYS is not set | 954 | # CONFIG_LEGACY_PTYS is not set |
@@ -1071,7 +1119,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
1071 | # CONFIG_FB_SIS is not set | 1119 | # CONFIG_FB_SIS is not set |
1072 | # CONFIG_FB_VIA is not set | 1120 | # CONFIG_FB_VIA is not set |
1073 | # CONFIG_FB_NEOMAGIC is not set | 1121 | # CONFIG_FB_NEOMAGIC is not set |
1074 | # CONFIG_FB_KYRO is not set | 1122 | CONFIG_FB_KYRO=y |
1075 | # CONFIG_FB_3DFX is not set | 1123 | # CONFIG_FB_3DFX is not set |
1076 | # CONFIG_FB_VOODOO1 is not set | 1124 | # CONFIG_FB_VOODOO1 is not set |
1077 | # CONFIG_FB_VT8623 is not set | 1125 | # CONFIG_FB_VT8623 is not set |
@@ -1097,15 +1145,15 @@ CONFIG_FB_SM501=y | |||
1097 | # | 1145 | # |
1098 | CONFIG_DUMMY_CONSOLE=y | 1146 | CONFIG_DUMMY_CONSOLE=y |
1099 | CONFIG_FRAMEBUFFER_CONSOLE=y | 1147 | CONFIG_FRAMEBUFFER_CONSOLE=y |
1100 | # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set | 1148 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y |
1101 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | 1149 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set |
1102 | # CONFIG_FONTS is not set | 1150 | # CONFIG_FONTS is not set |
1103 | CONFIG_FONT_8x8=y | 1151 | CONFIG_FONT_8x8=y |
1104 | CONFIG_FONT_8x16=y | 1152 | CONFIG_FONT_8x16=y |
1105 | CONFIG_LOGO=y | 1153 | CONFIG_LOGO=y |
1106 | # CONFIG_LOGO_LINUX_MONO is not set | 1154 | CONFIG_LOGO_LINUX_MONO=y |
1107 | # CONFIG_LOGO_LINUX_VGA16 is not set | 1155 | CONFIG_LOGO_LINUX_VGA16=y |
1108 | # CONFIG_LOGO_LINUX_CLUT224 is not set | 1156 | CONFIG_LOGO_LINUX_CLUT224=y |
1109 | CONFIG_LOGO_SUPERH_MONO=y | 1157 | CONFIG_LOGO_SUPERH_MONO=y |
1110 | CONFIG_LOGO_SUPERH_VGA16=y | 1158 | CONFIG_LOGO_SUPERH_VGA16=y |
1111 | CONFIG_LOGO_SUPERH_CLUT224=y | 1159 | CONFIG_LOGO_SUPERH_CLUT224=y |
@@ -1129,15 +1177,18 @@ CONFIG_SND_SEQ_HRTIMER_DEFAULT=y | |||
1129 | CONFIG_SND_DYNAMIC_MINORS=y | 1177 | CONFIG_SND_DYNAMIC_MINORS=y |
1130 | # CONFIG_SND_SUPPORT_OLD_API is not set | 1178 | # CONFIG_SND_SUPPORT_OLD_API is not set |
1131 | # CONFIG_SND_VERBOSE_PROCFS is not set | 1179 | # CONFIG_SND_VERBOSE_PROCFS is not set |
1132 | # CONFIG_SND_VERBOSE_PRINTK is not set | 1180 | CONFIG_SND_VERBOSE_PRINTK=y |
1133 | # CONFIG_SND_DEBUG is not set | 1181 | CONFIG_SND_DEBUG=y |
1182 | CONFIG_SND_DEBUG_VERBOSE=y | ||
1183 | CONFIG_SND_VMASTER=y | ||
1134 | CONFIG_SND_RAWMIDI_SEQ=y | 1184 | CONFIG_SND_RAWMIDI_SEQ=y |
1135 | CONFIG_SND_OPL3_LIB_SEQ=y | 1185 | CONFIG_SND_OPL3_LIB_SEQ=y |
1136 | # CONFIG_SND_OPL4_LIB_SEQ is not set | 1186 | # CONFIG_SND_OPL4_LIB_SEQ is not set |
1137 | # CONFIG_SND_SBAWE_SEQ is not set | 1187 | # CONFIG_SND_SBAWE_SEQ is not set |
1138 | # CONFIG_SND_EMU10K1_SEQ is not set | 1188 | CONFIG_SND_EMU10K1_SEQ=y |
1139 | CONFIG_SND_MPU401_UART=y | 1189 | CONFIG_SND_MPU401_UART=y |
1140 | CONFIG_SND_OPL3_LIB=y | 1190 | CONFIG_SND_OPL3_LIB=y |
1191 | CONFIG_SND_AC97_CODEC=y | ||
1141 | # CONFIG_SND_DRIVERS is not set | 1192 | # CONFIG_SND_DRIVERS is not set |
1142 | CONFIG_SND_PCI=y | 1193 | CONFIG_SND_PCI=y |
1143 | # CONFIG_SND_AD1889 is not set | 1194 | # CONFIG_SND_AD1889 is not set |
@@ -1172,7 +1223,7 @@ CONFIG_SND_CMIPCI=y | |||
1172 | # CONFIG_SND_INDIGODJ is not set | 1223 | # CONFIG_SND_INDIGODJ is not set |
1173 | # CONFIG_SND_INDIGOIOX is not set | 1224 | # CONFIG_SND_INDIGOIOX is not set |
1174 | # CONFIG_SND_INDIGODJX is not set | 1225 | # CONFIG_SND_INDIGODJX is not set |
1175 | # CONFIG_SND_EMU10K1 is not set | 1226 | CONFIG_SND_EMU10K1=y |
1176 | # CONFIG_SND_EMU10K1X is not set | 1227 | # CONFIG_SND_EMU10K1X is not set |
1177 | # CONFIG_SND_ENS1370 is not set | 1228 | # CONFIG_SND_ENS1370 is not set |
1178 | # CONFIG_SND_ENS1371 is not set | 1229 | # CONFIG_SND_ENS1371 is not set |
@@ -1211,6 +1262,7 @@ CONFIG_SND_USB=y | |||
1211 | # CONFIG_SND_USB_CAIAQ is not set | 1262 | # CONFIG_SND_USB_CAIAQ is not set |
1212 | # CONFIG_SND_SOC is not set | 1263 | # CONFIG_SND_SOC is not set |
1213 | # CONFIG_SOUND_PRIME is not set | 1264 | # CONFIG_SOUND_PRIME is not set |
1265 | CONFIG_AC97_BUS=y | ||
1214 | CONFIG_HID_SUPPORT=y | 1266 | CONFIG_HID_SUPPORT=y |
1215 | CONFIG_HID=y | 1267 | CONFIG_HID=y |
1216 | # CONFIG_HIDRAW is not set | 1268 | # CONFIG_HIDRAW is not set |
@@ -1226,44 +1278,42 @@ CONFIG_USB_HID=y | |||
1226 | # Special HID drivers | 1278 | # Special HID drivers |
1227 | # | 1279 | # |
1228 | # CONFIG_HID_3M_PCT is not set | 1280 | # CONFIG_HID_3M_PCT is not set |
1229 | CONFIG_HID_A4TECH=m | 1281 | # CONFIG_HID_A4TECH is not set |
1230 | CONFIG_HID_APPLE=m | 1282 | # CONFIG_HID_APPLE is not set |
1231 | CONFIG_HID_BELKIN=m | 1283 | # CONFIG_HID_BELKIN is not set |
1232 | CONFIG_HID_CHERRY=m | 1284 | # CONFIG_HID_CANDO is not set |
1233 | CONFIG_HID_CHICONY=m | 1285 | # CONFIG_HID_CHERRY is not set |
1234 | CONFIG_HID_CYPRESS=m | 1286 | # CONFIG_HID_CHICONY is not set |
1235 | CONFIG_HID_DRAGONRISE=m | 1287 | # CONFIG_HID_PRODIKEYS is not set |
1236 | # CONFIG_DRAGONRISE_FF is not set | 1288 | # CONFIG_HID_CYPRESS is not set |
1237 | CONFIG_HID_EZKEY=m | 1289 | # CONFIG_HID_DRAGONRISE is not set |
1238 | CONFIG_HID_KYE=m | 1290 | # CONFIG_HID_EGALAX is not set |
1239 | CONFIG_HID_GYRATION=m | 1291 | # CONFIG_HID_EZKEY is not set |
1240 | CONFIG_HID_TWINHAN=m | 1292 | # CONFIG_HID_KYE is not set |
1241 | CONFIG_HID_KENSINGTON=m | 1293 | # CONFIG_HID_GYRATION is not set |
1242 | CONFIG_HID_LOGITECH=m | 1294 | # CONFIG_HID_TWINHAN is not set |
1243 | # CONFIG_LOGITECH_FF is not set | 1295 | # CONFIG_HID_KENSINGTON is not set |
1244 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | 1296 | # CONFIG_HID_LOGITECH is not set |
1245 | # CONFIG_LOGIG940_FF is not set | 1297 | # CONFIG_HID_MICROSOFT is not set |
1246 | CONFIG_HID_MICROSOFT=m | ||
1247 | # CONFIG_HID_MOSART is not set | 1298 | # CONFIG_HID_MOSART is not set |
1248 | CONFIG_HID_MONTEREY=m | 1299 | # CONFIG_HID_MONTEREY is not set |
1249 | CONFIG_HID_NTRIG=m | 1300 | # CONFIG_HID_NTRIG is not set |
1250 | # CONFIG_HID_ORTEK is not set | 1301 | # CONFIG_HID_ORTEK is not set |
1251 | CONFIG_HID_PANTHERLORD=m | 1302 | # CONFIG_HID_PANTHERLORD is not set |
1252 | # CONFIG_PANTHERLORD_FF is not set | 1303 | # CONFIG_HID_PETALYNX is not set |
1253 | CONFIG_HID_PETALYNX=m | 1304 | # CONFIG_HID_PICOLCD is not set |
1254 | # CONFIG_HID_QUANTA is not set | 1305 | # CONFIG_HID_QUANTA is not set |
1255 | CONFIG_HID_SAMSUNG=m | 1306 | # CONFIG_HID_ROCCAT_KONE is not set |
1256 | CONFIG_HID_SONY=m | 1307 | # CONFIG_HID_SAMSUNG is not set |
1308 | # CONFIG_HID_SONY is not set | ||
1257 | # CONFIG_HID_STANTUM is not set | 1309 | # CONFIG_HID_STANTUM is not set |
1258 | CONFIG_HID_SUNPLUS=m | 1310 | # CONFIG_HID_SUNPLUS is not set |
1259 | CONFIG_HID_GREENASIA=m | 1311 | # CONFIG_HID_GREENASIA is not set |
1260 | # CONFIG_GREENASIA_FF is not set | 1312 | # CONFIG_HID_SMARTJOYPLUS is not set |
1261 | CONFIG_HID_SMARTJOYPLUS=m | 1313 | # CONFIG_HID_TOPSEED is not set |
1262 | # CONFIG_SMARTJOYPLUS_FF is not set | ||
1263 | CONFIG_HID_TOPSEED=m | ||
1264 | # CONFIG_HID_THRUSTMASTER is not set | 1314 | # CONFIG_HID_THRUSTMASTER is not set |
1265 | CONFIG_HID_ZEROPLUS=m | 1315 | # CONFIG_HID_ZEROPLUS is not set |
1266 | # CONFIG_ZEROPLUS_FF is not set | 1316 | # CONFIG_HID_ZYDACRON is not set |
1267 | CONFIG_USB_SUPPORT=y | 1317 | CONFIG_USB_SUPPORT=y |
1268 | CONFIG_USB_ARCH_HAS_HCD=y | 1318 | CONFIG_USB_ARCH_HAS_HCD=y |
1269 | CONFIG_USB_ARCH_HAS_OHCI=y | 1319 | CONFIG_USB_ARCH_HAS_OHCI=y |
@@ -1276,9 +1326,8 @@ CONFIG_USB=y | |||
1276 | # Miscellaneous USB options | 1326 | # Miscellaneous USB options |
1277 | # | 1327 | # |
1278 | # CONFIG_USB_DEVICEFS is not set | 1328 | # CONFIG_USB_DEVICEFS is not set |
1279 | CONFIG_USB_DEVICE_CLASS=y | 1329 | # CONFIG_USB_DEVICE_CLASS is not set |
1280 | # CONFIG_USB_DYNAMIC_MINORS is not set | 1330 | # CONFIG_USB_DYNAMIC_MINORS is not set |
1281 | # CONFIG_USB_OTG is not set | ||
1282 | # CONFIG_USB_OTG_WHITELIST is not set | 1331 | # CONFIG_USB_OTG_WHITELIST is not set |
1283 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | 1332 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set |
1284 | # CONFIG_USB_MON is not set | 1333 | # CONFIG_USB_MON is not set |
@@ -1290,9 +1339,7 @@ CONFIG_USB_DEVICE_CLASS=y | |||
1290 | # | 1339 | # |
1291 | # CONFIG_USB_C67X00_HCD is not set | 1340 | # CONFIG_USB_C67X00_HCD is not set |
1292 | # CONFIG_USB_XHCI_HCD is not set | 1341 | # CONFIG_USB_XHCI_HCD is not set |
1293 | CONFIG_USB_EHCI_HCD=m | 1342 | # CONFIG_USB_EHCI_HCD is not set |
1294 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
1295 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
1296 | # CONFIG_USB_OXU210HP_HCD is not set | 1343 | # CONFIG_USB_OXU210HP_HCD is not set |
1297 | # CONFIG_USB_ISP116X_HCD is not set | 1344 | # CONFIG_USB_ISP116X_HCD is not set |
1298 | # CONFIG_USB_ISP1760_HCD is not set | 1345 | # CONFIG_USB_ISP1760_HCD is not set |
@@ -1361,7 +1408,6 @@ CONFIG_USB_STORAGE=y | |||
1361 | # CONFIG_USB_IDMOUSE is not set | 1408 | # CONFIG_USB_IDMOUSE is not set |
1362 | # CONFIG_USB_FTDI_ELAN is not set | 1409 | # CONFIG_USB_FTDI_ELAN is not set |
1363 | # CONFIG_USB_APPLEDISPLAY is not set | 1410 | # CONFIG_USB_APPLEDISPLAY is not set |
1364 | # CONFIG_USB_SISUSBVGA is not set | ||
1365 | # CONFIG_USB_LD is not set | 1411 | # CONFIG_USB_LD is not set |
1366 | # CONFIG_USB_TRANCEVIBRATOR is not set | 1412 | # CONFIG_USB_TRANCEVIBRATOR is not set |
1367 | # CONFIG_USB_IOWARRIOR is not set | 1413 | # CONFIG_USB_IOWARRIOR is not set |
@@ -1464,6 +1510,7 @@ CONFIG_DMADEVICES=y | |||
1464 | # | 1510 | # |
1465 | # DMA Devices | 1511 | # DMA Devices |
1466 | # | 1512 | # |
1513 | # CONFIG_TIMB_DMA is not set | ||
1467 | # CONFIG_AUXDISPLAY is not set | 1514 | # CONFIG_AUXDISPLAY is not set |
1468 | CONFIG_UIO=m | 1515 | CONFIG_UIO=m |
1469 | # CONFIG_UIO_CIF is not set | 1516 | # CONFIG_UIO_CIF is not set |
@@ -1473,10 +1520,6 @@ CONFIG_UIO=m | |||
1473 | # CONFIG_UIO_SERCOS3 is not set | 1520 | # CONFIG_UIO_SERCOS3 is not set |
1474 | # CONFIG_UIO_PCI_GENERIC is not set | 1521 | # CONFIG_UIO_PCI_GENERIC is not set |
1475 | # CONFIG_UIO_NETX is not set | 1522 | # CONFIG_UIO_NETX is not set |
1476 | |||
1477 | # | ||
1478 | # TI VLYNQ | ||
1479 | # | ||
1480 | # CONFIG_STAGING is not set | 1523 | # CONFIG_STAGING is not set |
1481 | 1524 | ||
1482 | # | 1525 | # |
@@ -1653,63 +1696,75 @@ CONFIG_MAGIC_SYSRQ=y | |||
1653 | # CONFIG_UNUSED_SYMBOLS is not set | 1696 | # CONFIG_UNUSED_SYMBOLS is not set |
1654 | CONFIG_DEBUG_FS=y | 1697 | CONFIG_DEBUG_FS=y |
1655 | # CONFIG_HEADERS_CHECK is not set | 1698 | # CONFIG_HEADERS_CHECK is not set |
1656 | # CONFIG_DEBUG_KERNEL is not set | 1699 | CONFIG_DEBUG_KERNEL=y |
1700 | # CONFIG_DEBUG_SHIRQ is not set | ||
1701 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1702 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
1703 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
1704 | CONFIG_DETECT_HUNG_TASK=y | ||
1705 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
1706 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
1657 | CONFIG_SCHED_DEBUG=y | 1707 | CONFIG_SCHED_DEBUG=y |
1658 | CONFIG_SCHEDSTATS=y | 1708 | CONFIG_SCHEDSTATS=y |
1659 | CONFIG_TRACE_IRQFLAGS=y | 1709 | # CONFIG_TIMER_STATS is not set |
1710 | # CONFIG_DEBUG_OBJECTS is not set | ||
1711 | # CONFIG_DEBUG_SLAB is not set | ||
1712 | CONFIG_DEBUG_KMEMLEAK=y | ||
1713 | CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400 | ||
1714 | # CONFIG_DEBUG_KMEMLEAK_TEST is not set | ||
1715 | CONFIG_DEBUG_PREEMPT=y | ||
1716 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1717 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1718 | CONFIG_DEBUG_SPINLOCK=y | ||
1719 | CONFIG_DEBUG_MUTEXES=y | ||
1720 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1721 | # CONFIG_PROVE_LOCKING is not set | ||
1722 | # CONFIG_LOCK_STAT is not set | ||
1723 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | ||
1724 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1660 | CONFIG_STACKTRACE=y | 1725 | CONFIG_STACKTRACE=y |
1726 | # CONFIG_DEBUG_KOBJECT is not set | ||
1661 | CONFIG_DEBUG_BUGVERBOSE=y | 1727 | CONFIG_DEBUG_BUGVERBOSE=y |
1728 | CONFIG_DEBUG_INFO=y | ||
1729 | # CONFIG_DEBUG_VM is not set | ||
1730 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
1662 | # CONFIG_DEBUG_MEMORY_INIT is not set | 1731 | # CONFIG_DEBUG_MEMORY_INIT is not set |
1732 | # CONFIG_DEBUG_LIST is not set | ||
1733 | # CONFIG_DEBUG_SG is not set | ||
1734 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
1735 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
1663 | CONFIG_FRAME_POINTER=y | 1736 | CONFIG_FRAME_POINTER=y |
1737 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1664 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 1738 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
1739 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1740 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
1741 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
1665 | # CONFIG_LKDTM is not set | 1742 | # CONFIG_LKDTM is not set |
1743 | # CONFIG_FAULT_INJECTION is not set | ||
1666 | CONFIG_LATENCYTOP=y | 1744 | CONFIG_LATENCYTOP=y |
1667 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1745 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
1668 | CONFIG_NOP_TRACER=y | 1746 | # CONFIG_PAGE_POISONING is not set |
1669 | CONFIG_HAVE_FTRACE_NMI_ENTER=y | ||
1670 | CONFIG_HAVE_FUNCTION_TRACER=y | 1747 | CONFIG_HAVE_FUNCTION_TRACER=y |
1671 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | 1748 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y |
1672 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y | 1749 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y |
1673 | CONFIG_HAVE_DYNAMIC_FTRACE=y | 1750 | CONFIG_HAVE_DYNAMIC_FTRACE=y |
1674 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | 1751 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y |
1675 | CONFIG_HAVE_SYSCALL_TRACEPOINTS=y | 1752 | CONFIG_HAVE_SYSCALL_TRACEPOINTS=y |
1676 | CONFIG_TRACER_MAX_TRACE=y | ||
1677 | CONFIG_RING_BUFFER=y | ||
1678 | CONFIG_FTRACE_NMI_ENTER=y | ||
1679 | CONFIG_EVENT_TRACING=y | ||
1680 | CONFIG_CONTEXT_SWITCH_TRACER=y | ||
1681 | CONFIG_RING_BUFFER_ALLOW_SWAP=y | ||
1682 | CONFIG_TRACING=y | ||
1683 | CONFIG_GENERIC_TRACER=y | ||
1684 | CONFIG_TRACING_SUPPORT=y | 1753 | CONFIG_TRACING_SUPPORT=y |
1685 | CONFIG_FTRACE=y | 1754 | # CONFIG_FTRACE is not set |
1686 | CONFIG_FUNCTION_TRACER=y | ||
1687 | CONFIG_FUNCTION_GRAPH_TRACER=y | ||
1688 | CONFIG_IRQSOFF_TRACER=y | ||
1689 | # CONFIG_PREEMPT_TRACER is not set | ||
1690 | CONFIG_SCHED_TRACER=y | ||
1691 | # CONFIG_FTRACE_SYSCALLS is not set | ||
1692 | # CONFIG_BOOT_TRACER is not set | ||
1693 | CONFIG_BRANCH_PROFILE_NONE=y | ||
1694 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
1695 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
1696 | # CONFIG_KSYM_TRACER is not set | ||
1697 | CONFIG_STACK_TRACER=y | ||
1698 | CONFIG_KMEMTRACE=y | ||
1699 | CONFIG_WORKQUEUE_TRACER=y | ||
1700 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
1701 | CONFIG_DYNAMIC_FTRACE=y | ||
1702 | # CONFIG_FUNCTION_PROFILER is not set | ||
1703 | CONFIG_FTRACE_MCOUNT_RECORD=y | ||
1704 | # CONFIG_FTRACE_STARTUP_TEST is not set | ||
1705 | # CONFIG_RING_BUFFER_BENCHMARK is not set | ||
1706 | # CONFIG_DYNAMIC_DEBUG is not set | 1755 | # CONFIG_DYNAMIC_DEBUG is not set |
1707 | # CONFIG_DMA_API_DEBUG is not set | 1756 | # CONFIG_DMA_API_DEBUG is not set |
1757 | # CONFIG_ATOMIC64_SELFTEST is not set | ||
1708 | # CONFIG_SAMPLES is not set | 1758 | # CONFIG_SAMPLES is not set |
1709 | CONFIG_HAVE_ARCH_KGDB=y | 1759 | CONFIG_HAVE_ARCH_KGDB=y |
1760 | # CONFIG_KGDB is not set | ||
1710 | # CONFIG_SH_STANDARD_BIOS is not set | 1761 | # CONFIG_SH_STANDARD_BIOS is not set |
1711 | CONFIG_DWARF_UNWINDER=y | 1762 | # CONFIG_STACK_DEBUG is not set |
1712 | CONFIG_MCOUNT=y | 1763 | # CONFIG_DEBUG_STACK_USAGE is not set |
1764 | # CONFIG_4KSTACKS is not set | ||
1765 | CONFIG_DUMP_CODE=y | ||
1766 | # CONFIG_DWARF_UNWINDER is not set | ||
1767 | # CONFIG_SH_NO_BSS_INIT is not set | ||
1713 | 1768 | ||
1714 | # | 1769 | # |
1715 | # Security options | 1770 | # Security options |
@@ -1820,7 +1875,7 @@ CONFIG_CRYPTO_DES=y | |||
1820 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 1875 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
1821 | # CONFIG_CRYPTO_HW is not set | 1876 | # CONFIG_CRYPTO_HW is not set |
1822 | # CONFIG_VIRTUALIZATION is not set | 1877 | # CONFIG_VIRTUALIZATION is not set |
1823 | CONFIG_BINARY_PRINTF=y | 1878 | # CONFIG_BINARY_PRINTF is not set |
1824 | 1879 | ||
1825 | # | 1880 | # |
1826 | # Library routines | 1881 | # Library routines |
diff --git a/arch/sh/include/asm/dmaengine.h b/arch/sh/include/asm/dmaengine.h deleted file mode 100644 index 2a02b611a9ad..000000000000 --- a/arch/sh/include/asm/dmaengine.h +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | /* | ||
2 | * Header for the new SH dmaengine driver | ||
3 | * | ||
4 | * Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de> | ||
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 | #ifndef ASM_DMAENGINE_H | ||
11 | #define ASM_DMAENGINE_H | ||
12 | |||
13 | #include <linux/sh_dma.h> | ||
14 | |||
15 | enum { | ||
16 | SHDMA_SLAVE_SCIF0_TX, | ||
17 | SHDMA_SLAVE_SCIF0_RX, | ||
18 | SHDMA_SLAVE_SCIF1_TX, | ||
19 | SHDMA_SLAVE_SCIF1_RX, | ||
20 | SHDMA_SLAVE_SCIF2_TX, | ||
21 | SHDMA_SLAVE_SCIF2_RX, | ||
22 | SHDMA_SLAVE_SCIF3_TX, | ||
23 | SHDMA_SLAVE_SCIF3_RX, | ||
24 | SHDMA_SLAVE_SCIF4_TX, | ||
25 | SHDMA_SLAVE_SCIF4_RX, | ||
26 | SHDMA_SLAVE_SCIF5_TX, | ||
27 | SHDMA_SLAVE_SCIF5_RX, | ||
28 | SHDMA_SLAVE_SIUA_TX, | ||
29 | SHDMA_SLAVE_SIUA_RX, | ||
30 | SHDMA_SLAVE_SIUB_TX, | ||
31 | SHDMA_SLAVE_SIUB_RX, | ||
32 | }; | ||
33 | |||
34 | #endif | ||
diff --git a/arch/sh/include/asm/siu.h b/arch/sh/include/asm/siu.h index e8d4142baf59..1d95c78808d1 100644 --- a/arch/sh/include/asm/siu.h +++ b/arch/sh/include/asm/siu.h | |||
@@ -11,8 +11,6 @@ | |||
11 | #ifndef ASM_SIU_H | 11 | #ifndef ASM_SIU_H |
12 | #define ASM_SIU_H | 12 | #define ASM_SIU_H |
13 | 13 | ||
14 | #include <asm/dmaengine.h> | ||
15 | |||
16 | struct device; | 14 | struct device; |
17 | 15 | ||
18 | struct siu_platform { | 16 | struct siu_platform { |
diff --git a/arch/sh/include/cpu-sh4/cpu/sh7722.h b/arch/sh/include/cpu-sh4/cpu/sh7722.h index 48560407cbe1..7a5b8a331b4a 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7722.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7722.h | |||
@@ -235,4 +235,19 @@ enum { | |||
235 | HWBLK_NR, | 235 | HWBLK_NR, |
236 | }; | 236 | }; |
237 | 237 | ||
238 | enum { | ||
239 | SHDMA_SLAVE_SCIF0_TX, | ||
240 | SHDMA_SLAVE_SCIF0_RX, | ||
241 | SHDMA_SLAVE_SCIF1_TX, | ||
242 | SHDMA_SLAVE_SCIF1_RX, | ||
243 | SHDMA_SLAVE_SCIF2_TX, | ||
244 | SHDMA_SLAVE_SCIF2_RX, | ||
245 | SHDMA_SLAVE_SIUA_TX, | ||
246 | SHDMA_SLAVE_SIUA_RX, | ||
247 | SHDMA_SLAVE_SIUB_TX, | ||
248 | SHDMA_SLAVE_SIUB_RX, | ||
249 | SHDMA_SLAVE_SDHI0_TX, | ||
250 | SHDMA_SLAVE_SDHI0_RX, | ||
251 | }; | ||
252 | |||
238 | #endif /* __ASM_SH7722_H__ */ | 253 | #endif /* __ASM_SH7722_H__ */ |
diff --git a/arch/sh/include/cpu-sh4/cpu/sh7724.h b/arch/sh/include/cpu-sh4/cpu/sh7724.h index 0cd1f71a1116..fbbf550cc529 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7724.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7724.h | |||
@@ -283,4 +283,23 @@ enum { | |||
283 | HWBLK_NR, | 283 | HWBLK_NR, |
284 | }; | 284 | }; |
285 | 285 | ||
286 | enum { | ||
287 | SHDMA_SLAVE_SCIF0_TX, | ||
288 | SHDMA_SLAVE_SCIF0_RX, | ||
289 | SHDMA_SLAVE_SCIF1_TX, | ||
290 | SHDMA_SLAVE_SCIF1_RX, | ||
291 | SHDMA_SLAVE_SCIF2_TX, | ||
292 | SHDMA_SLAVE_SCIF2_RX, | ||
293 | SHDMA_SLAVE_SCIF3_TX, | ||
294 | SHDMA_SLAVE_SCIF3_RX, | ||
295 | SHDMA_SLAVE_SCIF4_TX, | ||
296 | SHDMA_SLAVE_SCIF4_RX, | ||
297 | SHDMA_SLAVE_SCIF5_TX, | ||
298 | SHDMA_SLAVE_SCIF5_RX, | ||
299 | SHDMA_SLAVE_SDHI0_TX, | ||
300 | SHDMA_SLAVE_SDHI0_RX, | ||
301 | SHDMA_SLAVE_SDHI1_TX, | ||
302 | SHDMA_SLAVE_SDHI1_RX, | ||
303 | }; | ||
304 | |||
286 | #endif /* __ASM_SH7724_H__ */ | 305 | #endif /* __ASM_SH7724_H__ */ |
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7786.c b/arch/sh/kernel/cpu/sh4a/clock-sh7786.c index 105a6d41b569..597c9fbe49c6 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7786.c | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/clk.h> | 14 | #include <linux/clk.h> |
15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
16 | #include <linux/clk.h> | ||
17 | #include <asm/clkdev.h> | 16 | #include <asm/clkdev.h> |
18 | #include <asm/clock.h> | 17 | #include <asm/clock.h> |
19 | #include <asm/freq.h> | 18 | #include <asm/freq.h> |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c index 24c6167a7181..156ccc960015 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/usb/m66592.h> | 17 | #include <linux/usb/m66592.h> |
18 | 18 | ||
19 | #include <asm/clock.h> | 19 | #include <asm/clock.h> |
20 | #include <asm/dmaengine.h> | ||
21 | #include <asm/mmzone.h> | 20 | #include <asm/mmzone.h> |
22 | #include <asm/siu.h> | 21 | #include <asm/siu.h> |
23 | 22 | ||
@@ -75,6 +74,16 @@ static const struct sh_dmae_slave_config sh7722_dmae_slaves[] = { | |||
75 | .addr = 0xa454c094, | 74 | .addr = 0xa454c094, |
76 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), | 75 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), |
77 | .mid_rid = 0xb6, | 76 | .mid_rid = 0xb6, |
77 | }, { | ||
78 | .slave_id = SHDMA_SLAVE_SDHI0_TX, | ||
79 | .addr = 0x04ce0030, | ||
80 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
81 | .mid_rid = 0xc1, | ||
82 | }, { | ||
83 | .slave_id = SHDMA_SLAVE_SDHI0_RX, | ||
84 | .addr = 0x04ce0030, | ||
85 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
86 | .mid_rid = 0xc2, | ||
78 | }, | 87 | }, |
79 | }; | 88 | }; |
80 | 89 | ||
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c index 89fe16d20fdb..79c556e56262 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c | |||
@@ -18,19 +18,103 @@ | |||
18 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
19 | #include <linux/serial_sci.h> | 19 | #include <linux/serial_sci.h> |
20 | #include <linux/uio_driver.h> | 20 | #include <linux/uio_driver.h> |
21 | #include <linux/sh_dma.h> | ||
21 | #include <linux/sh_timer.h> | 22 | #include <linux/sh_timer.h> |
22 | #include <linux/io.h> | 23 | #include <linux/io.h> |
23 | #include <linux/notifier.h> | 24 | #include <linux/notifier.h> |
24 | 25 | ||
25 | #include <asm/suspend.h> | 26 | #include <asm/suspend.h> |
26 | #include <asm/clock.h> | 27 | #include <asm/clock.h> |
27 | #include <asm/dmaengine.h> | ||
28 | #include <asm/mmzone.h> | 28 | #include <asm/mmzone.h> |
29 | 29 | ||
30 | #include <cpu/dma-register.h> | 30 | #include <cpu/dma-register.h> |
31 | #include <cpu/sh7724.h> | 31 | #include <cpu/sh7724.h> |
32 | 32 | ||
33 | /* DMA */ | 33 | /* DMA */ |
34 | static const struct sh_dmae_slave_config sh7724_dmae_slaves[] = { | ||
35 | { | ||
36 | .slave_id = SHDMA_SLAVE_SCIF0_TX, | ||
37 | .addr = 0xffe0000c, | ||
38 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
39 | .mid_rid = 0x21, | ||
40 | }, { | ||
41 | .slave_id = SHDMA_SLAVE_SCIF0_RX, | ||
42 | .addr = 0xffe00014, | ||
43 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
44 | .mid_rid = 0x22, | ||
45 | }, { | ||
46 | .slave_id = SHDMA_SLAVE_SCIF1_TX, | ||
47 | .addr = 0xffe1000c, | ||
48 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
49 | .mid_rid = 0x25, | ||
50 | }, { | ||
51 | .slave_id = SHDMA_SLAVE_SCIF1_RX, | ||
52 | .addr = 0xffe10014, | ||
53 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
54 | .mid_rid = 0x26, | ||
55 | }, { | ||
56 | .slave_id = SHDMA_SLAVE_SCIF2_TX, | ||
57 | .addr = 0xffe2000c, | ||
58 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
59 | .mid_rid = 0x29, | ||
60 | }, { | ||
61 | .slave_id = SHDMA_SLAVE_SCIF2_RX, | ||
62 | .addr = 0xffe20014, | ||
63 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
64 | .mid_rid = 0x2a, | ||
65 | }, { | ||
66 | .slave_id = SHDMA_SLAVE_SCIF3_TX, | ||
67 | .addr = 0xa4e30020, | ||
68 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
69 | .mid_rid = 0x2d, | ||
70 | }, { | ||
71 | .slave_id = SHDMA_SLAVE_SCIF3_RX, | ||
72 | .addr = 0xa4e30024, | ||
73 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
74 | .mid_rid = 0x2e, | ||
75 | }, { | ||
76 | .slave_id = SHDMA_SLAVE_SCIF4_TX, | ||
77 | .addr = 0xa4e40020, | ||
78 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
79 | .mid_rid = 0x31, | ||
80 | }, { | ||
81 | .slave_id = SHDMA_SLAVE_SCIF4_RX, | ||
82 | .addr = 0xa4e40024, | ||
83 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
84 | .mid_rid = 0x32, | ||
85 | }, { | ||
86 | .slave_id = SHDMA_SLAVE_SCIF5_TX, | ||
87 | .addr = 0xa4e50020, | ||
88 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
89 | .mid_rid = 0x35, | ||
90 | }, { | ||
91 | .slave_id = SHDMA_SLAVE_SCIF5_RX, | ||
92 | .addr = 0xa4e50024, | ||
93 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
94 | .mid_rid = 0x36, | ||
95 | }, { | ||
96 | .slave_id = SHDMA_SLAVE_SDHI0_TX, | ||
97 | .addr = 0x04ce0030, | ||
98 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
99 | .mid_rid = 0xc1, | ||
100 | }, { | ||
101 | .slave_id = SHDMA_SLAVE_SDHI0_RX, | ||
102 | .addr = 0x04ce0030, | ||
103 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
104 | .mid_rid = 0xc2, | ||
105 | }, { | ||
106 | .slave_id = SHDMA_SLAVE_SDHI1_TX, | ||
107 | .addr = 0x04cf0030, | ||
108 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
109 | .mid_rid = 0xc9, | ||
110 | }, { | ||
111 | .slave_id = SHDMA_SLAVE_SDHI1_RX, | ||
112 | .addr = 0x04cf0030, | ||
113 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
114 | .mid_rid = 0xca, | ||
115 | }, | ||
116 | }; | ||
117 | |||
34 | static const struct sh_dmae_channel sh7724_dmae_channels[] = { | 118 | static const struct sh_dmae_channel sh7724_dmae_channels[] = { |
35 | { | 119 | { |
36 | .offset = 0, | 120 | .offset = 0, |
@@ -62,6 +146,8 @@ static const struct sh_dmae_channel sh7724_dmae_channels[] = { | |||
62 | static const unsigned int ts_shift[] = TS_SHIFT; | 146 | static const unsigned int ts_shift[] = TS_SHIFT; |
63 | 147 | ||
64 | static struct sh_dmae_pdata dma_platform_data = { | 148 | static struct sh_dmae_pdata dma_platform_data = { |
149 | .slave = sh7724_dmae_slaves, | ||
150 | .slave_num = ARRAY_SIZE(sh7724_dmae_slaves), | ||
65 | .channel = sh7724_dmae_channels, | 151 | .channel = sh7724_dmae_channels, |
66 | .channel_num = ARRAY_SIZE(sh7724_dmae_channels), | 152 | .channel_num = ARRAY_SIZE(sh7724_dmae_channels), |
67 | .ts_low_shift = CHCR_TS_LOW_SHIFT, | 153 | .ts_low_shift = CHCR_TS_LOW_SHIFT, |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c index b12f537e4dde..0f414864f76b 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c | |||
@@ -12,10 +12,9 @@ | |||
12 | #include <linux/serial.h> | 12 | #include <linux/serial.h> |
13 | #include <linux/io.h> | 13 | #include <linux/io.h> |
14 | #include <linux/serial_sci.h> | 14 | #include <linux/serial_sci.h> |
15 | #include <linux/sh_dma.h> | ||
15 | #include <linux/sh_timer.h> | 16 | #include <linux/sh_timer.h> |
16 | 17 | ||
17 | #include <asm/dmaengine.h> | ||
18 | |||
19 | #include <cpu/dma-register.h> | 18 | #include <cpu/dma-register.h> |
20 | 19 | ||
21 | static struct plat_sci_port scif0_platform_data = { | 20 | static struct plat_sci_port scif0_platform_data = { |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c index f3e3ea0ce050..c9a572bc6dc8 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c | |||
@@ -13,9 +13,9 @@ | |||
13 | #include <linux/serial_sci.h> | 13 | #include <linux/serial_sci.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
16 | #include <linux/sh_dma.h> | ||
16 | #include <linux/sh_timer.h> | 17 | #include <linux/sh_timer.h> |
17 | 18 | ||
18 | #include <asm/dmaengine.h> | ||
19 | #include <asm/mmzone.h> | 19 | #include <asm/mmzone.h> |
20 | 20 | ||
21 | #include <cpu/dma-register.h> | 21 | #include <cpu/dma-register.h> |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 81657091da46..8797723231ea 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | |||
@@ -21,10 +21,10 @@ | |||
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/dma-mapping.h> | 22 | #include <linux/dma-mapping.h> |
23 | #include <linux/sh_timer.h> | 23 | #include <linux/sh_timer.h> |
24 | #include <linux/sh_dma.h> | ||
24 | #include <linux/sh_intc.h> | 25 | #include <linux/sh_intc.h> |
25 | #include <cpu/dma-register.h> | 26 | #include <cpu/dma-register.h> |
26 | #include <asm/mmzone.h> | 27 | #include <asm/mmzone.h> |
27 | #include <asm/dmaengine.h> | ||
28 | 28 | ||
29 | static struct plat_sci_port scif0_platform_data = { | 29 | static struct plat_sci_port scif0_platform_data = { |
30 | .mapbase = 0xffea0000, | 30 | .mapbase = 0xffea0000, |
diff --git a/arch/sh/kernel/dwarf.c b/arch/sh/kernel/dwarf.c index 5ec1d1818691..886d7d83ace3 100644 --- a/arch/sh/kernel/dwarf.c +++ b/arch/sh/kernel/dwarf.c | |||
@@ -845,8 +845,10 @@ static int dwarf_parse_cie(void *entry, void *p, unsigned long len, | |||
845 | rb_link_node(&cie->node, parent, rb_node); | 845 | rb_link_node(&cie->node, parent, rb_node); |
846 | rb_insert_color(&cie->node, &cie_root); | 846 | rb_insert_color(&cie->node, &cie_root); |
847 | 847 | ||
848 | #ifdef CONFIG_MODULES | ||
848 | if (mod != NULL) | 849 | if (mod != NULL) |
849 | list_add_tail(&cie->link, &mod->arch.cie_list); | 850 | list_add_tail(&cie->link, &mod->arch.cie_list); |
851 | #endif | ||
850 | 852 | ||
851 | spin_unlock_irqrestore(&dwarf_cie_lock, flags); | 853 | spin_unlock_irqrestore(&dwarf_cie_lock, flags); |
852 | 854 | ||
@@ -935,8 +937,10 @@ static int dwarf_parse_fde(void *entry, u32 entry_type, | |||
935 | rb_link_node(&fde->node, parent, rb_node); | 937 | rb_link_node(&fde->node, parent, rb_node); |
936 | rb_insert_color(&fde->node, &fde_root); | 938 | rb_insert_color(&fde->node, &fde_root); |
937 | 939 | ||
940 | #ifdef CONFIG_MODULES | ||
938 | if (mod != NULL) | 941 | if (mod != NULL) |
939 | list_add_tail(&fde->link, &mod->arch.fde_list); | 942 | list_add_tail(&fde->link, &mod->arch.fde_list); |
943 | #endif | ||
940 | 944 | ||
941 | spin_unlock_irqrestore(&dwarf_fde_lock, flags); | 945 | spin_unlock_irqrestore(&dwarf_fde_lock, flags); |
942 | 946 | ||
diff --git a/arch/sh/lib/strlen.S b/arch/sh/lib/strlen.S index f8ab296047b3..1bcc13f05962 100644 --- a/arch/sh/lib/strlen.S +++ b/arch/sh/lib/strlen.S | |||
@@ -35,7 +35,7 @@ ENTRY(strlen) | |||
35 | mov.b @r4+,r1 | 35 | mov.b @r4+,r1 |
36 | tst r1,r1 | 36 | tst r1,r1 |
37 | bt 8f | 37 | bt 8f |
38 | add #1,r2 | 38 | add #1,r2 |
39 | 39 | ||
40 | 1: | 40 | 1: |
41 | mov #0,r3 | 41 | mov #0,r3 |
diff --git a/drivers/dma/shdma.c b/drivers/dma/shdma.c index a1727522343e..a2a519fd2a24 100644 --- a/drivers/dma/shdma.c +++ b/drivers/dma/shdma.c | |||
@@ -722,6 +722,10 @@ static void sh_dmae_chan_ld_cleanup(struct sh_dmae_chan *sh_chan, bool all) | |||
722 | { | 722 | { |
723 | while (__ld_cleanup(sh_chan, all)) | 723 | while (__ld_cleanup(sh_chan, all)) |
724 | ; | 724 | ; |
725 | |||
726 | if (all) | ||
727 | /* Terminating - forgive uncompleted cookies */ | ||
728 | sh_chan->completed_cookie = sh_chan->common.cookie; | ||
725 | } | 729 | } |
726 | 730 | ||
727 | static void sh_chan_xfer_ld_queue(struct sh_dmae_chan *sh_chan) | 731 | static void sh_chan_xfer_ld_queue(struct sh_dmae_chan *sh_chan) |
@@ -1188,6 +1192,7 @@ static struct platform_driver sh_dmae_driver = { | |||
1188 | .remove = __exit_p(sh_dmae_remove), | 1192 | .remove = __exit_p(sh_dmae_remove), |
1189 | .shutdown = sh_dmae_shutdown, | 1193 | .shutdown = sh_dmae_shutdown, |
1190 | .driver = { | 1194 | .driver = { |
1195 | .owner = THIS_MODULE, | ||
1191 | .name = "sh-dma-engine", | 1196 | .name = "sh-dma-engine", |
1192 | }, | 1197 | }, |
1193 | }; | 1198 | }; |
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index de3e74cde51c..3c6a9860dd9c 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig | |||
@@ -49,6 +49,7 @@ config MFD_SH_MOBILE_SDHI | |||
49 | bool "Support for SuperH Mobile SDHI" | 49 | bool "Support for SuperH Mobile SDHI" |
50 | depends on SUPERH || ARCH_SHMOBILE | 50 | depends on SUPERH || ARCH_SHMOBILE |
51 | select MFD_CORE | 51 | select MFD_CORE |
52 | select TMIO_MMC_DMA | ||
52 | ---help--- | 53 | ---help--- |
53 | This driver supports the SDHI hardware block found in many | 54 | This driver supports the SDHI hardware block found in many |
54 | SuperH Mobile SoCs. | 55 | SuperH Mobile SoCs. |
@@ -162,6 +163,11 @@ config MFD_TMIO | |||
162 | bool | 163 | bool |
163 | default n | 164 | default n |
164 | 165 | ||
166 | config TMIO_MMC_DMA | ||
167 | bool | ||
168 | select DMA_ENGINE | ||
169 | select DMADEVICES | ||
170 | |||
165 | config MFD_T7L66XB | 171 | config MFD_T7L66XB |
166 | bool "Support Toshiba T7L66XB" | 172 | bool "Support Toshiba T7L66XB" |
167 | depends on ARM && HAVE_CLK | 173 | depends on ARM && HAVE_CLK |
diff --git a/drivers/mfd/sh_mobile_sdhi.c b/drivers/mfd/sh_mobile_sdhi.c index 497f91b6138e..cd164595f08a 100644 --- a/drivers/mfd/sh_mobile_sdhi.c +++ b/drivers/mfd/sh_mobile_sdhi.c | |||
@@ -26,11 +26,15 @@ | |||
26 | #include <linux/mfd/core.h> | 26 | #include <linux/mfd/core.h> |
27 | #include <linux/mfd/tmio.h> | 27 | #include <linux/mfd/tmio.h> |
28 | #include <linux/mfd/sh_mobile_sdhi.h> | 28 | #include <linux/mfd/sh_mobile_sdhi.h> |
29 | #include <linux/sh_dma.h> | ||
29 | 30 | ||
30 | struct sh_mobile_sdhi { | 31 | struct sh_mobile_sdhi { |
31 | struct clk *clk; | 32 | struct clk *clk; |
32 | struct tmio_mmc_data mmc_data; | 33 | struct tmio_mmc_data mmc_data; |
33 | struct mfd_cell cell_mmc; | 34 | struct mfd_cell cell_mmc; |
35 | struct sh_dmae_slave param_tx; | ||
36 | struct sh_dmae_slave param_rx; | ||
37 | struct tmio_mmc_dma dma_priv; | ||
34 | }; | 38 | }; |
35 | 39 | ||
36 | static struct resource sh_mobile_sdhi_resources[] = { | 40 | static struct resource sh_mobile_sdhi_resources[] = { |
@@ -64,6 +68,8 @@ static void sh_mobile_sdhi_set_pwr(struct platform_device *tmio, int state) | |||
64 | static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) | 68 | static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) |
65 | { | 69 | { |
66 | struct sh_mobile_sdhi *priv; | 70 | struct sh_mobile_sdhi *priv; |
71 | struct tmio_mmc_data *mmc_data; | ||
72 | struct sh_mobile_sdhi_info *p = pdev->dev.platform_data; | ||
67 | struct resource *mem; | 73 | struct resource *mem; |
68 | char clk_name[8]; | 74 | char clk_name[8]; |
69 | int ret, irq; | 75 | int ret, irq; |
@@ -85,6 +91,8 @@ static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) | |||
85 | return -ENOMEM; | 91 | return -ENOMEM; |
86 | } | 92 | } |
87 | 93 | ||
94 | mmc_data = &priv->mmc_data; | ||
95 | |||
88 | snprintf(clk_name, sizeof(clk_name), "sdhi%d", pdev->id); | 96 | snprintf(clk_name, sizeof(clk_name), "sdhi%d", pdev->id); |
89 | priv->clk = clk_get(&pdev->dev, clk_name); | 97 | priv->clk = clk_get(&pdev->dev, clk_name); |
90 | if (IS_ERR(priv->clk)) { | 98 | if (IS_ERR(priv->clk)) { |
@@ -96,12 +104,24 @@ static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) | |||
96 | 104 | ||
97 | clk_enable(priv->clk); | 105 | clk_enable(priv->clk); |
98 | 106 | ||
99 | priv->mmc_data.hclk = clk_get_rate(priv->clk); | 107 | mmc_data->hclk = clk_get_rate(priv->clk); |
100 | priv->mmc_data.set_pwr = sh_mobile_sdhi_set_pwr; | 108 | mmc_data->set_pwr = sh_mobile_sdhi_set_pwr; |
101 | priv->mmc_data.capabilities = MMC_CAP_MMC_HIGHSPEED; | 109 | mmc_data->capabilities = MMC_CAP_MMC_HIGHSPEED; |
110 | if (p) { | ||
111 | mmc_data->flags = p->tmio_flags; | ||
112 | mmc_data->ocr_mask = p->tmio_ocr_mask; | ||
113 | } | ||
114 | |||
115 | if (p && p->dma_slave_tx >= 0 && p->dma_slave_rx >= 0) { | ||
116 | priv->param_tx.slave_id = p->dma_slave_tx; | ||
117 | priv->param_rx.slave_id = p->dma_slave_rx; | ||
118 | priv->dma_priv.chan_priv_tx = &priv->param_tx; | ||
119 | priv->dma_priv.chan_priv_rx = &priv->param_rx; | ||
120 | mmc_data->dma = &priv->dma_priv; | ||
121 | } | ||
102 | 122 | ||
103 | memcpy(&priv->cell_mmc, &sh_mobile_sdhi_cell, sizeof(priv->cell_mmc)); | 123 | memcpy(&priv->cell_mmc, &sh_mobile_sdhi_cell, sizeof(priv->cell_mmc)); |
104 | priv->cell_mmc.driver_data = &priv->mmc_data; | 124 | priv->cell_mmc.driver_data = mmc_data; |
105 | priv->cell_mmc.platform_data = &priv->cell_mmc; | 125 | priv->cell_mmc.platform_data = &priv->cell_mmc; |
106 | priv->cell_mmc.data_size = sizeof(priv->cell_mmc); | 126 | priv->cell_mmc.data_size = sizeof(priv->cell_mmc); |
107 | 127 | ||
diff --git a/drivers/mmc/host/tmio_mmc.c b/drivers/mmc/host/tmio_mmc.c index b2b577f6afd4..883fcac21004 100644 --- a/drivers/mmc/host/tmio_mmc.c +++ b/drivers/mmc/host/tmio_mmc.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/irq.h> | 29 | #include <linux/irq.h> |
30 | #include <linux/device.h> | 30 | #include <linux/device.h> |
31 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
32 | #include <linux/dmaengine.h> | ||
32 | #include <linux/mmc/host.h> | 33 | #include <linux/mmc/host.h> |
33 | #include <linux/mfd/core.h> | 34 | #include <linux/mfd/core.h> |
34 | #include <linux/mfd/tmio.h> | 35 | #include <linux/mfd/tmio.h> |
@@ -131,8 +132,8 @@ tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd) | |||
131 | 132 | ||
132 | host->cmd = cmd; | 133 | host->cmd = cmd; |
133 | 134 | ||
134 | /* FIXME - this seems to be ok comented out but the spec suggest this bit should | 135 | /* FIXME - this seems to be ok commented out but the spec suggest this bit |
135 | * be set when issuing app commands. | 136 | * should be set when issuing app commands. |
136 | * if(cmd->flags & MMC_FLAG_ACMD) | 137 | * if(cmd->flags & MMC_FLAG_ACMD) |
137 | * c |= APP_CMD; | 138 | * c |= APP_CMD; |
138 | */ | 139 | */ |
@@ -155,12 +156,12 @@ tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd) | |||
155 | return 0; | 156 | return 0; |
156 | } | 157 | } |
157 | 158 | ||
158 | /* This chip always returns (at least?) as much data as you ask for. | 159 | /* |
160 | * This chip always returns (at least?) as much data as you ask for. | ||
159 | * I'm unsure what happens if you ask for less than a block. This should be | 161 | * I'm unsure what happens if you ask for less than a block. This should be |
160 | * looked into to ensure that a funny length read doesnt hose the controller. | 162 | * looked into to ensure that a funny length read doesnt hose the controller. |
161 | * | ||
162 | */ | 163 | */ |
163 | static inline void tmio_mmc_pio_irq(struct tmio_mmc_host *host) | 164 | static void tmio_mmc_pio_irq(struct tmio_mmc_host *host) |
164 | { | 165 | { |
165 | struct mmc_data *data = host->data; | 166 | struct mmc_data *data = host->data; |
166 | unsigned short *buf; | 167 | unsigned short *buf; |
@@ -180,7 +181,7 @@ static inline void tmio_mmc_pio_irq(struct tmio_mmc_host *host) | |||
180 | count = data->blksz; | 181 | count = data->blksz; |
181 | 182 | ||
182 | pr_debug("count: %08x offset: %08x flags %08x\n", | 183 | pr_debug("count: %08x offset: %08x flags %08x\n", |
183 | count, host->sg_off, data->flags); | 184 | count, host->sg_off, data->flags); |
184 | 185 | ||
185 | /* Transfer the data */ | 186 | /* Transfer the data */ |
186 | if (data->flags & MMC_DATA_READ) | 187 | if (data->flags & MMC_DATA_READ) |
@@ -198,7 +199,7 @@ static inline void tmio_mmc_pio_irq(struct tmio_mmc_host *host) | |||
198 | return; | 199 | return; |
199 | } | 200 | } |
200 | 201 | ||
201 | static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | 202 | static void tmio_mmc_do_data_irq(struct tmio_mmc_host *host) |
202 | { | 203 | { |
203 | struct mmc_data *data = host->data; | 204 | struct mmc_data *data = host->data; |
204 | struct mmc_command *stop; | 205 | struct mmc_command *stop; |
@@ -206,7 +207,7 @@ static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | |||
206 | host->data = NULL; | 207 | host->data = NULL; |
207 | 208 | ||
208 | if (!data) { | 209 | if (!data) { |
209 | pr_debug("Spurious data end IRQ\n"); | 210 | dev_warn(&host->pdev->dev, "Spurious data end IRQ\n"); |
210 | return; | 211 | return; |
211 | } | 212 | } |
212 | stop = data->stop; | 213 | stop = data->stop; |
@@ -219,7 +220,8 @@ static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | |||
219 | 220 | ||
220 | pr_debug("Completed data request\n"); | 221 | pr_debug("Completed data request\n"); |
221 | 222 | ||
222 | /*FIXME - other drivers allow an optional stop command of any given type | 223 | /* |
224 | * FIXME: other drivers allow an optional stop command of any given type | ||
223 | * which we dont do, as the chip can auto generate them. | 225 | * which we dont do, as the chip can auto generate them. |
224 | * Perhaps we can be smarter about when to use auto CMD12 and | 226 | * Perhaps we can be smarter about when to use auto CMD12 and |
225 | * only issue the auto request when we know this is the desired | 227 | * only issue the auto request when we know this is the desired |
@@ -227,10 +229,17 @@ static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | |||
227 | * upper layers expect. For now, we do what works. | 229 | * upper layers expect. For now, we do what works. |
228 | */ | 230 | */ |
229 | 231 | ||
230 | if (data->flags & MMC_DATA_READ) | 232 | if (data->flags & MMC_DATA_READ) { |
231 | disable_mmc_irqs(host, TMIO_MASK_READOP); | 233 | if (!host->chan_rx) |
232 | else | 234 | disable_mmc_irqs(host, TMIO_MASK_READOP); |
233 | disable_mmc_irqs(host, TMIO_MASK_WRITEOP); | 235 | dev_dbg(&host->pdev->dev, "Complete Rx request %p\n", |
236 | host->mrq); | ||
237 | } else { | ||
238 | if (!host->chan_tx) | ||
239 | disable_mmc_irqs(host, TMIO_MASK_WRITEOP); | ||
240 | dev_dbg(&host->pdev->dev, "Complete Tx request %p\n", | ||
241 | host->mrq); | ||
242 | } | ||
234 | 243 | ||
235 | if (stop) { | 244 | if (stop) { |
236 | if (stop->opcode == 12 && !stop->arg) | 245 | if (stop->opcode == 12 && !stop->arg) |
@@ -242,7 +251,35 @@ static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | |||
242 | tmio_mmc_finish_request(host); | 251 | tmio_mmc_finish_request(host); |
243 | } | 252 | } |
244 | 253 | ||
245 | static inline void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, | 254 | static void tmio_mmc_data_irq(struct tmio_mmc_host *host) |
255 | { | ||
256 | struct mmc_data *data = host->data; | ||
257 | |||
258 | if (!data) | ||
259 | return; | ||
260 | |||
261 | if (host->chan_tx && (data->flags & MMC_DATA_WRITE)) { | ||
262 | /* | ||
263 | * Has all data been written out yet? Testing on SuperH showed, | ||
264 | * that in most cases the first interrupt comes already with the | ||
265 | * BUSY status bit clear, but on some operations, like mount or | ||
266 | * in the beginning of a write / sync / umount, there is one | ||
267 | * DATAEND interrupt with the BUSY bit set, in this cases | ||
268 | * waiting for one more interrupt fixes the problem. | ||
269 | */ | ||
270 | if (!(sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_CMD_BUSY)) { | ||
271 | disable_mmc_irqs(host, TMIO_STAT_DATAEND); | ||
272 | tasklet_schedule(&host->dma_complete); | ||
273 | } | ||
274 | } else if (host->chan_rx && (data->flags & MMC_DATA_READ)) { | ||
275 | disable_mmc_irqs(host, TMIO_STAT_DATAEND); | ||
276 | tasklet_schedule(&host->dma_complete); | ||
277 | } else { | ||
278 | tmio_mmc_do_data_irq(host); | ||
279 | } | ||
280 | } | ||
281 | |||
282 | static void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, | ||
246 | unsigned int stat) | 283 | unsigned int stat) |
247 | { | 284 | { |
248 | struct mmc_command *cmd = host->cmd; | 285 | struct mmc_command *cmd = host->cmd; |
@@ -282,10 +319,16 @@ static inline void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, | |||
282 | * If theres no data or we encountered an error, finish now. | 319 | * If theres no data or we encountered an error, finish now. |
283 | */ | 320 | */ |
284 | if (host->data && !cmd->error) { | 321 | if (host->data && !cmd->error) { |
285 | if (host->data->flags & MMC_DATA_READ) | 322 | if (host->data->flags & MMC_DATA_READ) { |
286 | enable_mmc_irqs(host, TMIO_MASK_READOP); | 323 | if (!host->chan_rx) |
287 | else | 324 | enable_mmc_irqs(host, TMIO_MASK_READOP); |
288 | enable_mmc_irqs(host, TMIO_MASK_WRITEOP); | 325 | } else { |
326 | struct dma_chan *chan = host->chan_tx; | ||
327 | if (!chan) | ||
328 | enable_mmc_irqs(host, TMIO_MASK_WRITEOP); | ||
329 | else | ||
330 | tasklet_schedule(&host->dma_issue); | ||
331 | } | ||
289 | } else { | 332 | } else { |
290 | tmio_mmc_finish_request(host); | 333 | tmio_mmc_finish_request(host); |
291 | } | 334 | } |
@@ -293,7 +336,6 @@ static inline void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, | |||
293 | return; | 336 | return; |
294 | } | 337 | } |
295 | 338 | ||
296 | |||
297 | static irqreturn_t tmio_mmc_irq(int irq, void *devid) | 339 | static irqreturn_t tmio_mmc_irq(int irq, void *devid) |
298 | { | 340 | { |
299 | struct tmio_mmc_host *host = devid; | 341 | struct tmio_mmc_host *host = devid; |
@@ -311,7 +353,7 @@ static irqreturn_t tmio_mmc_irq(int irq, void *devid) | |||
311 | if (!ireg) { | 353 | if (!ireg) { |
312 | disable_mmc_irqs(host, status & ~irq_mask); | 354 | disable_mmc_irqs(host, status & ~irq_mask); |
313 | 355 | ||
314 | pr_debug("tmio_mmc: Spurious irq, disabling! " | 356 | pr_warning("tmio_mmc: Spurious irq, disabling! " |
315 | "0x%08x 0x%08x 0x%08x\n", status, irq_mask, ireg); | 357 | "0x%08x 0x%08x 0x%08x\n", status, irq_mask, ireg); |
316 | pr_debug_status(status); | 358 | pr_debug_status(status); |
317 | 359 | ||
@@ -363,16 +405,265 @@ out: | |||
363 | return IRQ_HANDLED; | 405 | return IRQ_HANDLED; |
364 | } | 406 | } |
365 | 407 | ||
408 | #ifdef CONFIG_TMIO_MMC_DMA | ||
409 | static void tmio_mmc_enable_dma(struct tmio_mmc_host *host, bool enable) | ||
410 | { | ||
411 | #if defined(CONFIG_SUPERH) || defined(CONFIG_ARCH_SHMOBILE) | ||
412 | /* Switch DMA mode on or off - SuperH specific? */ | ||
413 | sd_ctrl_write16(host, 0xd8, enable ? 2 : 0); | ||
414 | #endif | ||
415 | } | ||
416 | |||
417 | static void tmio_dma_complete(void *arg) | ||
418 | { | ||
419 | struct tmio_mmc_host *host = arg; | ||
420 | |||
421 | dev_dbg(&host->pdev->dev, "Command completed\n"); | ||
422 | |||
423 | if (!host->data) | ||
424 | dev_warn(&host->pdev->dev, "NULL data in DMA completion!\n"); | ||
425 | else | ||
426 | enable_mmc_irqs(host, TMIO_STAT_DATAEND); | ||
427 | } | ||
428 | |||
429 | static int tmio_mmc_start_dma_rx(struct tmio_mmc_host *host) | ||
430 | { | ||
431 | struct scatterlist *sg = host->sg_ptr; | ||
432 | struct dma_async_tx_descriptor *desc = NULL; | ||
433 | struct dma_chan *chan = host->chan_rx; | ||
434 | int ret; | ||
435 | |||
436 | ret = dma_map_sg(&host->pdev->dev, sg, host->sg_len, DMA_FROM_DEVICE); | ||
437 | if (ret > 0) { | ||
438 | host->dma_sglen = ret; | ||
439 | desc = chan->device->device_prep_slave_sg(chan, sg, ret, | ||
440 | DMA_FROM_DEVICE, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | ||
441 | } | ||
442 | |||
443 | if (desc) { | ||
444 | host->desc = desc; | ||
445 | desc->callback = tmio_dma_complete; | ||
446 | desc->callback_param = host; | ||
447 | host->cookie = desc->tx_submit(desc); | ||
448 | if (host->cookie < 0) { | ||
449 | host->desc = NULL; | ||
450 | ret = host->cookie; | ||
451 | } else { | ||
452 | chan->device->device_issue_pending(chan); | ||
453 | } | ||
454 | } | ||
455 | dev_dbg(&host->pdev->dev, "%s(): mapped %d -> %d, cookie %d, rq %p\n", | ||
456 | __func__, host->sg_len, ret, host->cookie, host->mrq); | ||
457 | |||
458 | if (!host->desc) { | ||
459 | /* DMA failed, fall back to PIO */ | ||
460 | if (ret >= 0) | ||
461 | ret = -EIO; | ||
462 | host->chan_rx = NULL; | ||
463 | dma_release_channel(chan); | ||
464 | /* Free the Tx channel too */ | ||
465 | chan = host->chan_tx; | ||
466 | if (chan) { | ||
467 | host->chan_tx = NULL; | ||
468 | dma_release_channel(chan); | ||
469 | } | ||
470 | dev_warn(&host->pdev->dev, | ||
471 | "DMA failed: %d, falling back to PIO\n", ret); | ||
472 | tmio_mmc_enable_dma(host, false); | ||
473 | reset(host); | ||
474 | /* Fail this request, let above layers recover */ | ||
475 | host->mrq->cmd->error = ret; | ||
476 | tmio_mmc_finish_request(host); | ||
477 | } | ||
478 | |||
479 | dev_dbg(&host->pdev->dev, "%s(): desc %p, cookie %d, sg[%d]\n", __func__, | ||
480 | desc, host->cookie, host->sg_len); | ||
481 | |||
482 | return ret > 0 ? 0 : ret; | ||
483 | } | ||
484 | |||
485 | static int tmio_mmc_start_dma_tx(struct tmio_mmc_host *host) | ||
486 | { | ||
487 | struct scatterlist *sg = host->sg_ptr; | ||
488 | struct dma_async_tx_descriptor *desc = NULL; | ||
489 | struct dma_chan *chan = host->chan_tx; | ||
490 | int ret; | ||
491 | |||
492 | ret = dma_map_sg(&host->pdev->dev, sg, host->sg_len, DMA_TO_DEVICE); | ||
493 | if (ret > 0) { | ||
494 | host->dma_sglen = ret; | ||
495 | desc = chan->device->device_prep_slave_sg(chan, sg, ret, | ||
496 | DMA_TO_DEVICE, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | ||
497 | } | ||
498 | |||
499 | if (desc) { | ||
500 | host->desc = desc; | ||
501 | desc->callback = tmio_dma_complete; | ||
502 | desc->callback_param = host; | ||
503 | host->cookie = desc->tx_submit(desc); | ||
504 | if (host->cookie < 0) { | ||
505 | host->desc = NULL; | ||
506 | ret = host->cookie; | ||
507 | } | ||
508 | } | ||
509 | dev_dbg(&host->pdev->dev, "%s(): mapped %d -> %d, cookie %d, rq %p\n", | ||
510 | __func__, host->sg_len, ret, host->cookie, host->mrq); | ||
511 | |||
512 | if (!host->desc) { | ||
513 | /* DMA failed, fall back to PIO */ | ||
514 | if (ret >= 0) | ||
515 | ret = -EIO; | ||
516 | host->chan_tx = NULL; | ||
517 | dma_release_channel(chan); | ||
518 | /* Free the Rx channel too */ | ||
519 | chan = host->chan_rx; | ||
520 | if (chan) { | ||
521 | host->chan_rx = NULL; | ||
522 | dma_release_channel(chan); | ||
523 | } | ||
524 | dev_warn(&host->pdev->dev, | ||
525 | "DMA failed: %d, falling back to PIO\n", ret); | ||
526 | tmio_mmc_enable_dma(host, false); | ||
527 | reset(host); | ||
528 | /* Fail this request, let above layers recover */ | ||
529 | host->mrq->cmd->error = ret; | ||
530 | tmio_mmc_finish_request(host); | ||
531 | } | ||
532 | |||
533 | dev_dbg(&host->pdev->dev, "%s(): desc %p, cookie %d\n", __func__, | ||
534 | desc, host->cookie); | ||
535 | |||
536 | return ret > 0 ? 0 : ret; | ||
537 | } | ||
538 | |||
539 | static int tmio_mmc_start_dma(struct tmio_mmc_host *host, | ||
540 | struct mmc_data *data) | ||
541 | { | ||
542 | if (data->flags & MMC_DATA_READ) { | ||
543 | if (host->chan_rx) | ||
544 | return tmio_mmc_start_dma_rx(host); | ||
545 | } else { | ||
546 | if (host->chan_tx) | ||
547 | return tmio_mmc_start_dma_tx(host); | ||
548 | } | ||
549 | |||
550 | return 0; | ||
551 | } | ||
552 | |||
553 | static void tmio_issue_tasklet_fn(unsigned long priv) | ||
554 | { | ||
555 | struct tmio_mmc_host *host = (struct tmio_mmc_host *)priv; | ||
556 | struct dma_chan *chan = host->chan_tx; | ||
557 | |||
558 | chan->device->device_issue_pending(chan); | ||
559 | } | ||
560 | |||
561 | static void tmio_tasklet_fn(unsigned long arg) | ||
562 | { | ||
563 | struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg; | ||
564 | |||
565 | if (host->data->flags & MMC_DATA_READ) | ||
566 | dma_unmap_sg(&host->pdev->dev, host->sg_ptr, host->dma_sglen, | ||
567 | DMA_FROM_DEVICE); | ||
568 | else | ||
569 | dma_unmap_sg(&host->pdev->dev, host->sg_ptr, host->dma_sglen, | ||
570 | DMA_TO_DEVICE); | ||
571 | |||
572 | tmio_mmc_do_data_irq(host); | ||
573 | } | ||
574 | |||
575 | /* It might be necessary to make filter MFD specific */ | ||
576 | static bool tmio_mmc_filter(struct dma_chan *chan, void *arg) | ||
577 | { | ||
578 | dev_dbg(chan->device->dev, "%s: slave data %p\n", __func__, arg); | ||
579 | chan->private = arg; | ||
580 | return true; | ||
581 | } | ||
582 | |||
583 | static void tmio_mmc_request_dma(struct tmio_mmc_host *host, | ||
584 | struct tmio_mmc_data *pdata) | ||
585 | { | ||
586 | host->cookie = -EINVAL; | ||
587 | host->desc = NULL; | ||
588 | |||
589 | /* We can only either use DMA for both Tx and Rx or not use it at all */ | ||
590 | if (pdata->dma) { | ||
591 | dma_cap_mask_t mask; | ||
592 | |||
593 | dma_cap_zero(mask); | ||
594 | dma_cap_set(DMA_SLAVE, mask); | ||
595 | |||
596 | host->chan_tx = dma_request_channel(mask, tmio_mmc_filter, | ||
597 | pdata->dma->chan_priv_tx); | ||
598 | dev_dbg(&host->pdev->dev, "%s: TX: got channel %p\n", __func__, | ||
599 | host->chan_tx); | ||
600 | |||
601 | if (!host->chan_tx) | ||
602 | return; | ||
603 | |||
604 | host->chan_rx = dma_request_channel(mask, tmio_mmc_filter, | ||
605 | pdata->dma->chan_priv_rx); | ||
606 | dev_dbg(&host->pdev->dev, "%s: RX: got channel %p\n", __func__, | ||
607 | host->chan_rx); | ||
608 | |||
609 | if (!host->chan_rx) { | ||
610 | dma_release_channel(host->chan_tx); | ||
611 | host->chan_tx = NULL; | ||
612 | return; | ||
613 | } | ||
614 | |||
615 | tasklet_init(&host->dma_complete, tmio_tasklet_fn, (unsigned long)host); | ||
616 | tasklet_init(&host->dma_issue, tmio_issue_tasklet_fn, (unsigned long)host); | ||
617 | |||
618 | tmio_mmc_enable_dma(host, true); | ||
619 | } | ||
620 | } | ||
621 | |||
622 | static void tmio_mmc_release_dma(struct tmio_mmc_host *host) | ||
623 | { | ||
624 | if (host->chan_tx) { | ||
625 | struct dma_chan *chan = host->chan_tx; | ||
626 | host->chan_tx = NULL; | ||
627 | dma_release_channel(chan); | ||
628 | } | ||
629 | if (host->chan_rx) { | ||
630 | struct dma_chan *chan = host->chan_rx; | ||
631 | host->chan_rx = NULL; | ||
632 | dma_release_channel(chan); | ||
633 | } | ||
634 | |||
635 | host->cookie = -EINVAL; | ||
636 | host->desc = NULL; | ||
637 | } | ||
638 | #else | ||
639 | static int tmio_mmc_start_dma(struct tmio_mmc_host *host, | ||
640 | struct mmc_data *data) | ||
641 | { | ||
642 | return 0; | ||
643 | } | ||
644 | |||
645 | static void tmio_mmc_request_dma(struct tmio_mmc_host *host, | ||
646 | struct tmio_mmc_data *pdata) | ||
647 | { | ||
648 | host->chan_tx = NULL; | ||
649 | host->chan_rx = NULL; | ||
650 | } | ||
651 | |||
652 | static void tmio_mmc_release_dma(struct tmio_mmc_host *host) | ||
653 | { | ||
654 | } | ||
655 | #endif | ||
656 | |||
366 | static int tmio_mmc_start_data(struct tmio_mmc_host *host, | 657 | static int tmio_mmc_start_data(struct tmio_mmc_host *host, |
367 | struct mmc_data *data) | 658 | struct mmc_data *data) |
368 | { | 659 | { |
369 | pr_debug("setup data transfer: blocksize %08x nr_blocks %d\n", | 660 | pr_debug("setup data transfer: blocksize %08x nr_blocks %d\n", |
370 | data->blksz, data->blocks); | 661 | data->blksz, data->blocks); |
371 | 662 | ||
372 | /* Hardware cannot perform 1 and 2 byte requests in 4 bit mode */ | 663 | /* Hardware cannot perform 1 and 2 byte requests in 4 bit mode */ |
373 | if (data->blksz < 4 && host->mmc->ios.bus_width == MMC_BUS_WIDTH_4) { | 664 | if (data->blksz < 4 && host->mmc->ios.bus_width == MMC_BUS_WIDTH_4) { |
374 | printk(KERN_ERR "%s: %d byte block unsupported in 4 bit mode\n", | 665 | pr_err("%s: %d byte block unsupported in 4 bit mode\n", |
375 | mmc_hostname(host->mmc), data->blksz); | 666 | mmc_hostname(host->mmc), data->blksz); |
376 | return -EINVAL; | 667 | return -EINVAL; |
377 | } | 668 | } |
378 | 669 | ||
@@ -383,7 +674,7 @@ static int tmio_mmc_start_data(struct tmio_mmc_host *host, | |||
383 | sd_ctrl_write16(host, CTL_SD_XFER_LEN, data->blksz); | 674 | sd_ctrl_write16(host, CTL_SD_XFER_LEN, data->blksz); |
384 | sd_ctrl_write16(host, CTL_XFER_BLK_COUNT, data->blocks); | 675 | sd_ctrl_write16(host, CTL_XFER_BLK_COUNT, data->blocks); |
385 | 676 | ||
386 | return 0; | 677 | return tmio_mmc_start_dma(host, data); |
387 | } | 678 | } |
388 | 679 | ||
389 | /* Process requests from the MMC layer */ | 680 | /* Process requests from the MMC layer */ |
@@ -404,7 +695,6 @@ static void tmio_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) | |||
404 | } | 695 | } |
405 | 696 | ||
406 | ret = tmio_mmc_start_command(host, mrq->cmd); | 697 | ret = tmio_mmc_start_command(host, mrq->cmd); |
407 | |||
408 | if (!ret) | 698 | if (!ret) |
409 | return; | 699 | return; |
410 | 700 | ||
@@ -458,11 +748,14 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | |||
458 | static int tmio_mmc_get_ro(struct mmc_host *mmc) | 748 | static int tmio_mmc_get_ro(struct mmc_host *mmc) |
459 | { | 749 | { |
460 | struct tmio_mmc_host *host = mmc_priv(mmc); | 750 | struct tmio_mmc_host *host = mmc_priv(mmc); |
751 | struct mfd_cell *cell = host->pdev->dev.platform_data; | ||
752 | struct tmio_mmc_data *pdata = cell->driver_data; | ||
461 | 753 | ||
462 | return (sd_ctrl_read16(host, CTL_STATUS) & TMIO_STAT_WRPROTECT) ? 0 : 1; | 754 | return ((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) || |
755 | (sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT)) ? 0 : 1; | ||
463 | } | 756 | } |
464 | 757 | ||
465 | static struct mmc_host_ops tmio_mmc_ops = { | 758 | static const struct mmc_host_ops tmio_mmc_ops = { |
466 | .request = tmio_mmc_request, | 759 | .request = tmio_mmc_request, |
467 | .set_ios = tmio_mmc_set_ios, | 760 | .set_ios = tmio_mmc_set_ios, |
468 | .get_ro = tmio_mmc_get_ro, | 761 | .get_ro = tmio_mmc_get_ro, |
@@ -515,6 +808,7 @@ static int __devinit tmio_mmc_probe(struct platform_device *dev) | |||
515 | struct tmio_mmc_host *host; | 808 | struct tmio_mmc_host *host; |
516 | struct mmc_host *mmc; | 809 | struct mmc_host *mmc; |
517 | int ret = -EINVAL; | 810 | int ret = -EINVAL; |
811 | u32 irq_mask = TMIO_MASK_CMD; | ||
518 | 812 | ||
519 | if (dev->num_resources != 2) | 813 | if (dev->num_resources != 2) |
520 | goto out; | 814 | goto out; |
@@ -553,7 +847,10 @@ static int __devinit tmio_mmc_probe(struct platform_device *dev) | |||
553 | mmc->caps |= pdata->capabilities; | 847 | mmc->caps |= pdata->capabilities; |
554 | mmc->f_max = pdata->hclk; | 848 | mmc->f_max = pdata->hclk; |
555 | mmc->f_min = mmc->f_max / 512; | 849 | mmc->f_min = mmc->f_max / 512; |
556 | mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; | 850 | if (pdata->ocr_mask) |
851 | mmc->ocr_avail = pdata->ocr_mask; | ||
852 | else | ||
853 | mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; | ||
557 | 854 | ||
558 | /* Tell the MFD core we are ready to be enabled */ | 855 | /* Tell the MFD core we are ready to be enabled */ |
559 | if (cell->enable) { | 856 | if (cell->enable) { |
@@ -578,13 +875,20 @@ static int __devinit tmio_mmc_probe(struct platform_device *dev) | |||
578 | if (ret) | 875 | if (ret) |
579 | goto cell_disable; | 876 | goto cell_disable; |
580 | 877 | ||
878 | /* See if we also get DMA */ | ||
879 | tmio_mmc_request_dma(host, pdata); | ||
880 | |||
581 | mmc_add_host(mmc); | 881 | mmc_add_host(mmc); |
582 | 882 | ||
583 | printk(KERN_INFO "%s at 0x%08lx irq %d\n", mmc_hostname(host->mmc), | 883 | pr_info("%s at 0x%08lx irq %d\n", mmc_hostname(host->mmc), |
584 | (unsigned long)host->ctl, host->irq); | 884 | (unsigned long)host->ctl, host->irq); |
585 | 885 | ||
586 | /* Unmask the IRQs we want to know about */ | 886 | /* Unmask the IRQs we want to know about */ |
587 | enable_mmc_irqs(host, TMIO_MASK_IRQ); | 887 | if (!host->chan_rx) |
888 | irq_mask |= TMIO_MASK_READOP; | ||
889 | if (!host->chan_tx) | ||
890 | irq_mask |= TMIO_MASK_WRITEOP; | ||
891 | enable_mmc_irqs(host, irq_mask); | ||
588 | 892 | ||
589 | return 0; | 893 | return 0; |
590 | 894 | ||
@@ -609,6 +913,7 @@ static int __devexit tmio_mmc_remove(struct platform_device *dev) | |||
609 | if (mmc) { | 913 | if (mmc) { |
610 | struct tmio_mmc_host *host = mmc_priv(mmc); | 914 | struct tmio_mmc_host *host = mmc_priv(mmc); |
611 | mmc_remove_host(mmc); | 915 | mmc_remove_host(mmc); |
916 | tmio_mmc_release_dma(host); | ||
612 | free_irq(host->irq, host); | 917 | free_irq(host->irq, host); |
613 | if (cell->disable) | 918 | if (cell->disable) |
614 | cell->disable(dev); | 919 | cell->disable(dev); |
diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h index dafecfbcd91a..64f7d5dfc106 100644 --- a/drivers/mmc/host/tmio_mmc.h +++ b/drivers/mmc/host/tmio_mmc.h | |||
@@ -10,6 +10,8 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/highmem.h> | 12 | #include <linux/highmem.h> |
13 | #include <linux/interrupt.h> | ||
14 | #include <linux/dmaengine.h> | ||
13 | 15 | ||
14 | #define CTL_SD_CMD 0x00 | 16 | #define CTL_SD_CMD 0x00 |
15 | #define CTL_ARG_REG 0x04 | 17 | #define CTL_ARG_REG 0x04 |
@@ -106,6 +108,17 @@ struct tmio_mmc_host { | |||
106 | unsigned int sg_off; | 108 | unsigned int sg_off; |
107 | 109 | ||
108 | struct platform_device *pdev; | 110 | struct platform_device *pdev; |
111 | |||
112 | /* DMA support */ | ||
113 | struct dma_chan *chan_rx; | ||
114 | struct dma_chan *chan_tx; | ||
115 | struct tasklet_struct dma_complete; | ||
116 | struct tasklet_struct dma_issue; | ||
117 | #ifdef CONFIG_TMIO_MMC_DMA | ||
118 | struct dma_async_tx_descriptor *desc; | ||
119 | unsigned int dma_sglen; | ||
120 | dma_cookie_t cookie; | ||
121 | #endif | ||
109 | }; | 122 | }; |
110 | 123 | ||
111 | #include <linux/io.h> | 124 | #include <linux/io.h> |
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c index 4f73fb756745..5f90fcd7d107 100644 --- a/drivers/serial/sh-sci.c +++ b/drivers/serial/sh-sci.c | |||
@@ -1004,8 +1004,9 @@ static void sci_rx_dma_release(struct sci_port *s, bool enable_pio) | |||
1004 | s->chan_rx = NULL; | 1004 | s->chan_rx = NULL; |
1005 | s->cookie_rx[0] = s->cookie_rx[1] = -EINVAL; | 1005 | s->cookie_rx[0] = s->cookie_rx[1] = -EINVAL; |
1006 | dma_release_channel(chan); | 1006 | dma_release_channel(chan); |
1007 | dma_free_coherent(port->dev, s->buf_len_rx * 2, | 1007 | if (sg_dma_address(&s->sg_rx[0])) |
1008 | sg_virt(&s->sg_rx[0]), sg_dma_address(&s->sg_rx[0])); | 1008 | dma_free_coherent(port->dev, s->buf_len_rx * 2, |
1009 | sg_virt(&s->sg_rx[0]), sg_dma_address(&s->sg_rx[0])); | ||
1009 | if (enable_pio) | 1010 | if (enable_pio) |
1010 | sci_start_rx(port); | 1011 | sci_start_rx(port); |
1011 | } | 1012 | } |
diff --git a/include/linux/mfd/sh_mobile_sdhi.h b/include/linux/mfd/sh_mobile_sdhi.h index 3bcd7163485c..49067802a6d7 100644 --- a/include/linux/mfd/sh_mobile_sdhi.h +++ b/include/linux/mfd/sh_mobile_sdhi.h | |||
@@ -1,7 +1,13 @@ | |||
1 | #ifndef __SH_MOBILE_SDHI_H__ | 1 | #ifndef __SH_MOBILE_SDHI_H__ |
2 | #define __SH_MOBILE_SDHI_H__ | 2 | #define __SH_MOBILE_SDHI_H__ |
3 | 3 | ||
4 | #include <linux/types.h> | ||
5 | |||
4 | struct sh_mobile_sdhi_info { | 6 | struct sh_mobile_sdhi_info { |
7 | int dma_slave_tx; | ||
8 | int dma_slave_rx; | ||
9 | unsigned long tmio_flags; | ||
10 | u32 tmio_ocr_mask; /* available MMC voltages */ | ||
5 | void (*set_pwr)(struct platform_device *pdev, int state); | 11 | void (*set_pwr)(struct platform_device *pdev, int state); |
6 | }; | 12 | }; |
7 | 13 | ||
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index c3f7dff8effc..f07425bc3dcd 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h | |||
@@ -50,17 +50,28 @@ | |||
50 | tmio_iowrite16((val) >> 16, (base) + ((reg + 2) << (shift))); \ | 50 | tmio_iowrite16((val) >> 16, (base) + ((reg + 2) << (shift))); \ |
51 | } while (0) | 51 | } while (0) |
52 | 52 | ||
53 | /* tmio MMC platform flags */ | ||
54 | #define TMIO_MMC_WRPROTECT_DISABLE (1 << 0) | ||
55 | |||
53 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); | 56 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); |
54 | int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); | 57 | int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); |
55 | void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state); | 58 | void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state); |
56 | void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state); | 59 | void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state); |
57 | 60 | ||
61 | struct tmio_mmc_dma { | ||
62 | void *chan_priv_tx; | ||
63 | void *chan_priv_rx; | ||
64 | }; | ||
65 | |||
58 | /* | 66 | /* |
59 | * data for the MMC controller | 67 | * data for the MMC controller |
60 | */ | 68 | */ |
61 | struct tmio_mmc_data { | 69 | struct tmio_mmc_data { |
62 | unsigned int hclk; | 70 | unsigned int hclk; |
63 | unsigned long capabilities; | 71 | unsigned long capabilities; |
72 | unsigned long flags; | ||
73 | u32 ocr_mask; /* available voltages */ | ||
74 | struct tmio_mmc_dma *dma; | ||
64 | void (*set_pwr)(struct platform_device *host, int state); | 75 | void (*set_pwr)(struct platform_device *host, int state); |
65 | void (*set_clk_div)(struct platform_device *host, int state); | 76 | void (*set_clk_div)(struct platform_device *host, int state); |
66 | }; | 77 | }; |
diff --git a/sound/soc/sh/siu.h b/sound/soc/sh/siu.h index c0bfab8fed3d..492b1cae24cc 100644 --- a/sound/soc/sh/siu.h +++ b/sound/soc/sh/siu.h | |||
@@ -71,8 +71,7 @@ struct siu_firmware { | |||
71 | #include <linux/dmaengine.h> | 71 | #include <linux/dmaengine.h> |
72 | #include <linux/interrupt.h> | 72 | #include <linux/interrupt.h> |
73 | #include <linux/io.h> | 73 | #include <linux/io.h> |
74 | 74 | #include <linux/sh_dma.h> | |
75 | #include <asm/dmaengine.h> | ||
76 | 75 | ||
77 | #include <sound/core.h> | 76 | #include <sound/core.h> |
78 | #include <sound/pcm.h> | 77 | #include <sound/pcm.h> |
diff --git a/sound/soc/sh/siu_pcm.c b/sound/soc/sh/siu_pcm.c index 8f85719212f9..36170be15aa7 100644 --- a/sound/soc/sh/siu_pcm.c +++ b/sound/soc/sh/siu_pcm.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <sound/pcm_params.h> | 31 | #include <sound/pcm_params.h> |
32 | #include <sound/soc-dai.h> | 32 | #include <sound/soc-dai.h> |
33 | 33 | ||
34 | #include <asm/dmaengine.h> | ||
35 | #include <asm/siu.h> | 34 | #include <asm/siu.h> |
36 | 35 | ||
37 | #include "siu.h" | 36 | #include "siu.h" |
@@ -358,13 +357,13 @@ static int siu_pcm_open(struct snd_pcm_substream *ss) | |||
358 | if (ss->stream == SNDRV_PCM_STREAM_PLAYBACK) { | 357 | if (ss->stream == SNDRV_PCM_STREAM_PLAYBACK) { |
359 | siu_stream = &port_info->playback; | 358 | siu_stream = &port_info->playback; |
360 | param = &siu_stream->param; | 359 | param = &siu_stream->param; |
361 | param->slave_id = port ? SHDMA_SLAVE_SIUB_TX : | 360 | param->slave_id = port ? pdata->dma_slave_tx_b : |
362 | SHDMA_SLAVE_SIUA_TX; | 361 | pdata->dma_slave_tx_a; |
363 | } else { | 362 | } else { |
364 | siu_stream = &port_info->capture; | 363 | siu_stream = &port_info->capture; |
365 | param = &siu_stream->param; | 364 | param = &siu_stream->param; |
366 | param->slave_id = port ? SHDMA_SLAVE_SIUB_RX : | 365 | param->slave_id = port ? pdata->dma_slave_rx_b : |
367 | SHDMA_SLAVE_SIUA_RX; | 366 | pdata->dma_slave_rx_a; |
368 | } | 367 | } |
369 | 368 | ||
370 | param->dma_dev = pdata->dma_dev; | 369 | param->dma_dev = pdata->dma_dev; |