diff options
Diffstat (limited to 'arch/arm/mach-exynos')
-rw-r--r-- | arch/arm/mach-exynos/Kconfig | 9 | ||||
-rw-r--r-- | arch/arm/mach-exynos/Makefile.boot | 3 | ||||
-rw-r--r-- | arch/arm/mach-exynos/clock-exynos4.c | 31 | ||||
-rw-r--r-- | arch/arm/mach-exynos/clock-exynos5.c | 172 | ||||
-rw-r--r-- | arch/arm/mach-exynos/common.c | 26 | ||||
-rw-r--r-- | arch/arm/mach-exynos/common.h | 5 | ||||
-rw-r--r-- | arch/arm/mach-exynos/hotplug.c | 18 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/map.h | 12 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/sysmmu.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-armlex4210.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-exynos4-dt.c | 32 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-exynos5-dt.c | 17 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-nuri.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-origen.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-smdk4x12.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-smdkv310.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-universal_c210.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-exynos/platsmp.c | 29 |
18 files changed, 290 insertions, 93 deletions
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index b5b4c8c9db11..4372075c551f 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig | |||
@@ -221,6 +221,7 @@ config MACH_SMDKV310 | |||
221 | select EXYNOS4_SETUP_KEYPAD | 221 | select EXYNOS4_SETUP_KEYPAD |
222 | select EXYNOS4_SETUP_SDHCI | 222 | select EXYNOS4_SETUP_SDHCI |
223 | select EXYNOS4_SETUP_USB_PHY | 223 | select EXYNOS4_SETUP_USB_PHY |
224 | select S3C24XX_PWM | ||
224 | help | 225 | help |
225 | Machine support for Samsung SMDKV310 | 226 | Machine support for Samsung SMDKV310 |
226 | 227 | ||
@@ -348,6 +349,7 @@ config MACH_ORIGEN | |||
348 | select EXYNOS4_SETUP_FIMD0 | 349 | select EXYNOS4_SETUP_FIMD0 |
349 | select EXYNOS4_SETUP_SDHCI | 350 | select EXYNOS4_SETUP_SDHCI |
350 | select EXYNOS4_SETUP_USB_PHY | 351 | select EXYNOS4_SETUP_USB_PHY |
352 | select S3C24XX_PWM | ||
351 | help | 353 | help |
352 | Machine support for ORIGEN based on Samsung EXYNOS4210 | 354 | Machine support for ORIGEN based on Samsung EXYNOS4210 |
353 | 355 | ||
@@ -383,6 +385,7 @@ config MACH_SMDK4212 | |||
383 | select EXYNOS4_SETUP_KEYPAD | 385 | select EXYNOS4_SETUP_KEYPAD |
384 | select EXYNOS4_SETUP_SDHCI | 386 | select EXYNOS4_SETUP_SDHCI |
385 | select EXYNOS4_SETUP_USB_PHY | 387 | select EXYNOS4_SETUP_USB_PHY |
388 | select S3C24XX_PWM | ||
386 | help | 389 | help |
387 | Machine support for Samsung SMDK4212 | 390 | Machine support for Samsung SMDK4212 |
388 | 391 | ||
@@ -405,6 +408,8 @@ config MACH_EXYNOS4_DT | |||
405 | select USE_OF | 408 | select USE_OF |
406 | select ARM_AMBA | 409 | select ARM_AMBA |
407 | select HAVE_SAMSUNG_KEYPAD if INPUT_KEYBOARD | 410 | select HAVE_SAMSUNG_KEYPAD if INPUT_KEYBOARD |
411 | select PINCTRL | ||
412 | select PINCTRL_EXYNOS4 | ||
408 | help | 413 | help |
409 | Machine support for Samsung Exynos4 machine with device tree enabled. | 414 | Machine support for Samsung Exynos4 machine with device tree enabled. |
410 | Select this if a fdt blob is available for the Exynos4 SoC based board. | 415 | Select this if a fdt blob is available for the Exynos4 SoC based board. |
@@ -418,8 +423,8 @@ config MACH_EXYNOS5_DT | |||
418 | select USE_OF | 423 | select USE_OF |
419 | select ARM_AMBA | 424 | select ARM_AMBA |
420 | help | 425 | help |
421 | Machine support for Samsung Exynos4 machine with device tree enabled. | 426 | Machine support for Samsung EXYNOS5 machine with device tree enabled. |
422 | Select this if a fdt blob is available for the EXYNOS4 SoC based board. | 427 | Select this if a fdt blob is available for the EXYNOS5 SoC based board. |
423 | 428 | ||
424 | if ARCH_EXYNOS4 | 429 | if ARCH_EXYNOS4 |
425 | 430 | ||
diff --git a/arch/arm/mach-exynos/Makefile.boot b/arch/arm/mach-exynos/Makefile.boot index 31bd181b0514..b9862e22bf10 100644 --- a/arch/arm/mach-exynos/Makefile.boot +++ b/arch/arm/mach-exynos/Makefile.boot | |||
@@ -1,5 +1,2 @@ | |||
1 | zreladdr-y += 0x40008000 | 1 | zreladdr-y += 0x40008000 |
2 | params_phys-y := 0x40000100 | 2 | params_phys-y := 0x40000100 |
3 | |||
4 | dtb-$(CONFIG_MACH_EXYNOS4_DT) += exynos4210-origen.dtb exynos4210-smdkv310.dtb | ||
5 | dtb-$(CONFIG_MACH_EXYNOS5_DT) += exynos5250-smdk5250.dtb | ||
diff --git a/arch/arm/mach-exynos/clock-exynos4.c b/arch/arm/mach-exynos/clock-exynos4.c index 2f51293c1875..6a45c9a9abe9 100644 --- a/arch/arm/mach-exynos/clock-exynos4.c +++ b/arch/arm/mach-exynos/clock-exynos4.c | |||
@@ -501,6 +501,10 @@ static struct clk exynos4_init_clocks_off[] = { | |||
501 | .enable = exynos4_clk_ip_cam_ctrl, | 501 | .enable = exynos4_clk_ip_cam_ctrl, |
502 | .ctrlbit = (1 << 3), | 502 | .ctrlbit = (1 << 3), |
503 | }, { | 503 | }, { |
504 | .name = "tsi", | ||
505 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
506 | .ctrlbit = (1 << 4), | ||
507 | }, { | ||
504 | .name = "hsmmc", | 508 | .name = "hsmmc", |
505 | .devname = "exynos4-sdhci.0", | 509 | .devname = "exynos4-sdhci.0", |
506 | .parent = &exynos4_clk_aclk_133.clk, | 510 | .parent = &exynos4_clk_aclk_133.clk, |
@@ -530,6 +534,14 @@ static struct clk exynos4_init_clocks_off[] = { | |||
530 | .enable = exynos4_clk_ip_fsys_ctrl, | 534 | .enable = exynos4_clk_ip_fsys_ctrl, |
531 | .ctrlbit = (1 << 9), | 535 | .ctrlbit = (1 << 9), |
532 | }, { | 536 | }, { |
537 | .name = "onenand", | ||
538 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
539 | .ctrlbit = (1 << 15), | ||
540 | }, { | ||
541 | .name = "nfcon", | ||
542 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
543 | .ctrlbit = (1 << 16), | ||
544 | }, { | ||
533 | .name = "dac", | 545 | .name = "dac", |
534 | .devname = "s5p-sdo", | 546 | .devname = "s5p-sdo", |
535 | .enable = exynos4_clk_ip_tv_ctrl, | 547 | .enable = exynos4_clk_ip_tv_ctrl, |
@@ -615,6 +627,25 @@ static struct clk exynos4_init_clocks_off[] = { | |||
615 | .enable = exynos4_clk_ip_peril_ctrl, | 627 | .enable = exynos4_clk_ip_peril_ctrl, |
616 | .ctrlbit = (1 << 21), | 628 | .ctrlbit = (1 << 21), |
617 | }, { | 629 | }, { |
630 | .name = "pcm", | ||
631 | .devname = "samsung-pcm.1", | ||
632 | .enable = exynos4_clk_ip_peril_ctrl, | ||
633 | .ctrlbit = (1 << 22), | ||
634 | }, { | ||
635 | .name = "pcm", | ||
636 | .devname = "samsung-pcm.2", | ||
637 | .enable = exynos4_clk_ip_peril_ctrl, | ||
638 | .ctrlbit = (1 << 23), | ||
639 | }, { | ||
640 | .name = "slimbus", | ||
641 | .enable = exynos4_clk_ip_peril_ctrl, | ||
642 | .ctrlbit = (1 << 25), | ||
643 | }, { | ||
644 | .name = "spdif", | ||
645 | .devname = "samsung-spdif", | ||
646 | .enable = exynos4_clk_ip_peril_ctrl, | ||
647 | .ctrlbit = (1 << 26), | ||
648 | }, { | ||
618 | .name = "ac97", | 649 | .name = "ac97", |
619 | .devname = "samsung-ac97", | 650 | .devname = "samsung-ac97", |
620 | .enable = exynos4_clk_ip_peril_ctrl, | 651 | .enable = exynos4_clk_ip_peril_ctrl, |
diff --git a/arch/arm/mach-exynos/clock-exynos5.c b/arch/arm/mach-exynos/clock-exynos5.c index 774533c67066..c44ca1ee1b8d 100644 --- a/arch/arm/mach-exynos/clock-exynos5.c +++ b/arch/arm/mach-exynos/clock-exynos5.c | |||
@@ -166,11 +166,6 @@ static int exynos5_clk_ip_gen_ctrl(struct clk *clk, int enable) | |||
166 | return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GEN, clk, enable); | 166 | return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GEN, clk, enable); |
167 | } | 167 | } |
168 | 168 | ||
169 | static int exynos5_clk_ip_gps_ctrl(struct clk *clk, int enable) | ||
170 | { | ||
171 | return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GPS, clk, enable); | ||
172 | } | ||
173 | |||
174 | static int exynos5_clk_ip_mfc_ctrl(struct clk *clk, int enable) | 169 | static int exynos5_clk_ip_mfc_ctrl(struct clk *clk, int enable) |
175 | { | 170 | { |
176 | return s5p_gatectrl(EXYNOS5_CLKGATE_IP_MFC, clk, enable); | 171 | return s5p_gatectrl(EXYNOS5_CLKGATE_IP_MFC, clk, enable); |
@@ -552,6 +547,68 @@ static struct clksrc_clk exynos5_clk_aclk_66 = { | |||
552 | .reg_div = { .reg = EXYNOS5_CLKDIV_TOP0, .shift = 0, .size = 3 }, | 547 | .reg_div = { .reg = EXYNOS5_CLKDIV_TOP0, .shift = 0, .size = 3 }, |
553 | }; | 548 | }; |
554 | 549 | ||
550 | static struct clksrc_clk exynos5_clk_mout_aclk_300_gscl_mid = { | ||
551 | .clk = { | ||
552 | .name = "mout_aclk_300_gscl_mid", | ||
553 | }, | ||
554 | .sources = &exynos5_clkset_aclk, | ||
555 | .reg_src = { .reg = EXYNOS5_CLKSRC_TOP0, .shift = 24, .size = 1 }, | ||
556 | }; | ||
557 | |||
558 | static struct clk *exynos5_clkset_aclk_300_mid1_list[] = { | ||
559 | [0] = &exynos5_clk_sclk_vpll.clk, | ||
560 | [1] = &exynos5_clk_mout_cpll.clk, | ||
561 | }; | ||
562 | |||
563 | static struct clksrc_sources exynos5_clkset_aclk_300_gscl_mid1 = { | ||
564 | .sources = exynos5_clkset_aclk_300_mid1_list, | ||
565 | .nr_sources = ARRAY_SIZE(exynos5_clkset_aclk_300_mid1_list), | ||
566 | }; | ||
567 | |||
568 | static struct clksrc_clk exynos5_clk_mout_aclk_300_gscl_mid1 = { | ||
569 | .clk = { | ||
570 | .name = "mout_aclk_300_gscl_mid1", | ||
571 | }, | ||
572 | .sources = &exynos5_clkset_aclk_300_gscl_mid1, | ||
573 | .reg_src = { .reg = EXYNOS5_CLKSRC_TOP1, .shift = 12, .size = 1 }, | ||
574 | }; | ||
575 | |||
576 | static struct clk *exynos5_clkset_aclk_300_gscl_list[] = { | ||
577 | [0] = &exynos5_clk_mout_aclk_300_gscl_mid.clk, | ||
578 | [1] = &exynos5_clk_mout_aclk_300_gscl_mid1.clk, | ||
579 | }; | ||
580 | |||
581 | static struct clksrc_sources exynos5_clkset_aclk_300_gscl = { | ||
582 | .sources = exynos5_clkset_aclk_300_gscl_list, | ||
583 | .nr_sources = ARRAY_SIZE(exynos5_clkset_aclk_300_gscl_list), | ||
584 | }; | ||
585 | |||
586 | static struct clksrc_clk exynos5_clk_mout_aclk_300_gscl = { | ||
587 | .clk = { | ||
588 | .name = "mout_aclk_300_gscl", | ||
589 | }, | ||
590 | .sources = &exynos5_clkset_aclk_300_gscl, | ||
591 | .reg_src = { .reg = EXYNOS5_CLKSRC_TOP0, .shift = 25, .size = 1 }, | ||
592 | }; | ||
593 | |||
594 | static struct clk *exynos5_clk_src_gscl_300_list[] = { | ||
595 | [0] = &clk_ext_xtal_mux, | ||
596 | [1] = &exynos5_clk_mout_aclk_300_gscl.clk, | ||
597 | }; | ||
598 | |||
599 | static struct clksrc_sources exynos5_clk_src_gscl_300 = { | ||
600 | .sources = exynos5_clk_src_gscl_300_list, | ||
601 | .nr_sources = ARRAY_SIZE(exynos5_clk_src_gscl_300_list), | ||
602 | }; | ||
603 | |||
604 | static struct clksrc_clk exynos5_clk_aclk_300_gscl = { | ||
605 | .clk = { | ||
606 | .name = "aclk_300_gscl", | ||
607 | }, | ||
608 | .sources = &exynos5_clk_src_gscl_300, | ||
609 | .reg_src = { .reg = EXYNOS5_CLKSRC_TOP3, .shift = 10, .size = 1 }, | ||
610 | }; | ||
611 | |||
555 | static struct clk exynos5_init_clocks_off[] = { | 612 | static struct clk exynos5_init_clocks_off[] = { |
556 | { | 613 | { |
557 | .name = "timers", | 614 | .name = "timers", |
@@ -569,35 +626,30 @@ static struct clk exynos5_init_clocks_off[] = { | |||
569 | .enable = exynos5_clk_ip_peris_ctrl, | 626 | .enable = exynos5_clk_ip_peris_ctrl, |
570 | .ctrlbit = (1 << 19), | 627 | .ctrlbit = (1 << 19), |
571 | }, { | 628 | }, { |
572 | .name = "hsmmc", | 629 | .name = "biu", /* bus interface unit clock */ |
573 | .devname = "exynos4-sdhci.0", | 630 | .devname = "dw_mmc.0", |
574 | .parent = &exynos5_clk_aclk_200.clk, | 631 | .parent = &exynos5_clk_aclk_200.clk, |
575 | .enable = exynos5_clk_ip_fsys_ctrl, | 632 | .enable = exynos5_clk_ip_fsys_ctrl, |
576 | .ctrlbit = (1 << 12), | 633 | .ctrlbit = (1 << 12), |
577 | }, { | 634 | }, { |
578 | .name = "hsmmc", | 635 | .name = "biu", |
579 | .devname = "exynos4-sdhci.1", | 636 | .devname = "dw_mmc.1", |
580 | .parent = &exynos5_clk_aclk_200.clk, | 637 | .parent = &exynos5_clk_aclk_200.clk, |
581 | .enable = exynos5_clk_ip_fsys_ctrl, | 638 | .enable = exynos5_clk_ip_fsys_ctrl, |
582 | .ctrlbit = (1 << 13), | 639 | .ctrlbit = (1 << 13), |
583 | }, { | 640 | }, { |
584 | .name = "hsmmc", | 641 | .name = "biu", |
585 | .devname = "exynos4-sdhci.2", | 642 | .devname = "dw_mmc.2", |
586 | .parent = &exynos5_clk_aclk_200.clk, | 643 | .parent = &exynos5_clk_aclk_200.clk, |
587 | .enable = exynos5_clk_ip_fsys_ctrl, | 644 | .enable = exynos5_clk_ip_fsys_ctrl, |
588 | .ctrlbit = (1 << 14), | 645 | .ctrlbit = (1 << 14), |
589 | }, { | 646 | }, { |
590 | .name = "hsmmc", | 647 | .name = "biu", |
591 | .devname = "exynos4-sdhci.3", | 648 | .devname = "dw_mmc.3", |
592 | .parent = &exynos5_clk_aclk_200.clk, | 649 | .parent = &exynos5_clk_aclk_200.clk, |
593 | .enable = exynos5_clk_ip_fsys_ctrl, | 650 | .enable = exynos5_clk_ip_fsys_ctrl, |
594 | .ctrlbit = (1 << 15), | 651 | .ctrlbit = (1 << 15), |
595 | }, { | 652 | }, { |
596 | .name = "dwmci", | ||
597 | .parent = &exynos5_clk_aclk_200.clk, | ||
598 | .enable = exynos5_clk_ip_fsys_ctrl, | ||
599 | .ctrlbit = (1 << 16), | ||
600 | }, { | ||
601 | .name = "sata", | 653 | .name = "sata", |
602 | .devname = "ahci", | 654 | .devname = "ahci", |
603 | .enable = exynos5_clk_ip_fsys_ctrl, | 655 | .enable = exynos5_clk_ip_fsys_ctrl, |
@@ -672,10 +724,6 @@ static struct clk exynos5_init_clocks_off[] = { | |||
672 | .enable = exynos5_clk_ip_fsys_ctrl, | 724 | .enable = exynos5_clk_ip_fsys_ctrl, |
673 | .ctrlbit = (1 << 7), | 725 | .ctrlbit = (1 << 7), |
674 | }, { | 726 | }, { |
675 | .name = "gps", | ||
676 | .enable = exynos5_clk_ip_gps_ctrl, | ||
677 | .ctrlbit = ((1 << 3) | (1 << 2) | (1 << 0)), | ||
678 | }, { | ||
679 | .name = "nfcon", | 727 | .name = "nfcon", |
680 | .enable = exynos5_clk_ip_fsys_ctrl, | 728 | .enable = exynos5_clk_ip_fsys_ctrl, |
681 | .ctrlbit = (1 << 22), | 729 | .ctrlbit = (1 << 22), |
@@ -764,6 +812,26 @@ static struct clk exynos5_init_clocks_off[] = { | |||
764 | .enable = exynos5_clk_ip_peric_ctrl, | 812 | .enable = exynos5_clk_ip_peric_ctrl, |
765 | .ctrlbit = (1 << 18), | 813 | .ctrlbit = (1 << 18), |
766 | }, { | 814 | }, { |
815 | .name = "gscl", | ||
816 | .devname = "exynos-gsc.0", | ||
817 | .enable = exynos5_clk_ip_gscl_ctrl, | ||
818 | .ctrlbit = (1 << 0), | ||
819 | }, { | ||
820 | .name = "gscl", | ||
821 | .devname = "exynos-gsc.1", | ||
822 | .enable = exynos5_clk_ip_gscl_ctrl, | ||
823 | .ctrlbit = (1 << 1), | ||
824 | }, { | ||
825 | .name = "gscl", | ||
826 | .devname = "exynos-gsc.2", | ||
827 | .enable = exynos5_clk_ip_gscl_ctrl, | ||
828 | .ctrlbit = (1 << 2), | ||
829 | }, { | ||
830 | .name = "gscl", | ||
831 | .devname = "exynos-gsc.3", | ||
832 | .enable = exynos5_clk_ip_gscl_ctrl, | ||
833 | .ctrlbit = (1 << 3), | ||
834 | }, { | ||
767 | .name = SYSMMU_CLOCK_NAME, | 835 | .name = SYSMMU_CLOCK_NAME, |
768 | .devname = SYSMMU_CLOCK_DEVNAME(mfc_l, 0), | 836 | .devname = SYSMMU_CLOCK_DEVNAME(mfc_l, 0), |
769 | .enable = &exynos5_clk_ip_mfc_ctrl, | 837 | .enable = &exynos5_clk_ip_mfc_ctrl, |
@@ -891,6 +959,13 @@ static struct clk exynos5_clk_mdma1 = { | |||
891 | .ctrlbit = (1 << 4), | 959 | .ctrlbit = (1 << 4), |
892 | }; | 960 | }; |
893 | 961 | ||
962 | static struct clk exynos5_clk_fimd1 = { | ||
963 | .name = "fimd", | ||
964 | .devname = "exynos5-fb.1", | ||
965 | .enable = exynos5_clk_ip_disp1_ctrl, | ||
966 | .ctrlbit = (1 << 0), | ||
967 | }; | ||
968 | |||
894 | struct clk *exynos5_clkset_group_list[] = { | 969 | struct clk *exynos5_clkset_group_list[] = { |
895 | [0] = &clk_ext_xtal_mux, | 970 | [0] = &clk_ext_xtal_mux, |
896 | [1] = NULL, | 971 | [1] = NULL, |
@@ -1015,8 +1090,8 @@ static struct clksrc_clk exynos5_clk_sclk_uart3 = { | |||
1015 | 1090 | ||
1016 | static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | 1091 | static struct clksrc_clk exynos5_clk_sclk_mmc0 = { |
1017 | .clk = { | 1092 | .clk = { |
1018 | .name = "sclk_mmc", | 1093 | .name = "ciu", /* card interface unit clock */ |
1019 | .devname = "exynos4-sdhci.0", | 1094 | .devname = "dw_mmc.0", |
1020 | .parent = &exynos5_clk_dout_mmc0.clk, | 1095 | .parent = &exynos5_clk_dout_mmc0.clk, |
1021 | .enable = exynos5_clksrc_mask_fsys_ctrl, | 1096 | .enable = exynos5_clksrc_mask_fsys_ctrl, |
1022 | .ctrlbit = (1 << 0), | 1097 | .ctrlbit = (1 << 0), |
@@ -1026,8 +1101,8 @@ static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | |||
1026 | 1101 | ||
1027 | static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | 1102 | static struct clksrc_clk exynos5_clk_sclk_mmc1 = { |
1028 | .clk = { | 1103 | .clk = { |
1029 | .name = "sclk_mmc", | 1104 | .name = "ciu", |
1030 | .devname = "exynos4-sdhci.1", | 1105 | .devname = "dw_mmc.1", |
1031 | .parent = &exynos5_clk_dout_mmc1.clk, | 1106 | .parent = &exynos5_clk_dout_mmc1.clk, |
1032 | .enable = exynos5_clksrc_mask_fsys_ctrl, | 1107 | .enable = exynos5_clksrc_mask_fsys_ctrl, |
1033 | .ctrlbit = (1 << 4), | 1108 | .ctrlbit = (1 << 4), |
@@ -1037,8 +1112,8 @@ static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | |||
1037 | 1112 | ||
1038 | static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | 1113 | static struct clksrc_clk exynos5_clk_sclk_mmc2 = { |
1039 | .clk = { | 1114 | .clk = { |
1040 | .name = "sclk_mmc", | 1115 | .name = "ciu", |
1041 | .devname = "exynos4-sdhci.2", | 1116 | .devname = "dw_mmc.2", |
1042 | .parent = &exynos5_clk_dout_mmc2.clk, | 1117 | .parent = &exynos5_clk_dout_mmc2.clk, |
1043 | .enable = exynos5_clksrc_mask_fsys_ctrl, | 1118 | .enable = exynos5_clksrc_mask_fsys_ctrl, |
1044 | .ctrlbit = (1 << 8), | 1119 | .ctrlbit = (1 << 8), |
@@ -1048,8 +1123,8 @@ static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | |||
1048 | 1123 | ||
1049 | static struct clksrc_clk exynos5_clk_sclk_mmc3 = { | 1124 | static struct clksrc_clk exynos5_clk_sclk_mmc3 = { |
1050 | .clk = { | 1125 | .clk = { |
1051 | .name = "sclk_mmc", | 1126 | .name = "ciu", |
1052 | .devname = "exynos4-sdhci.3", | 1127 | .devname = "dw_mmc.3", |
1053 | .parent = &exynos5_clk_dout_mmc3.clk, | 1128 | .parent = &exynos5_clk_dout_mmc3.clk, |
1054 | .enable = exynos5_clksrc_mask_fsys_ctrl, | 1129 | .enable = exynos5_clksrc_mask_fsys_ctrl, |
1055 | .ctrlbit = (1 << 12), | 1130 | .ctrlbit = (1 << 12), |
@@ -1120,27 +1195,21 @@ static struct clksrc_clk exynos5_clk_sclk_spi2 = { | |||
1120 | .reg_div = { .reg = EXYNOS5_CLKDIV_PERIC2, .shift = 8, .size = 8 }, | 1195 | .reg_div = { .reg = EXYNOS5_CLKDIV_PERIC2, .shift = 8, .size = 8 }, |
1121 | }; | 1196 | }; |
1122 | 1197 | ||
1198 | struct clksrc_clk exynos5_clk_sclk_fimd1 = { | ||
1199 | .clk = { | ||
1200 | .name = "sclk_fimd", | ||
1201 | .devname = "exynos5-fb.1", | ||
1202 | .enable = exynos5_clksrc_mask_disp1_0_ctrl, | ||
1203 | .ctrlbit = (1 << 0), | ||
1204 | }, | ||
1205 | .sources = &exynos5_clkset_group, | ||
1206 | .reg_src = { .reg = EXYNOS5_CLKSRC_DISP1_0, .shift = 0, .size = 4 }, | ||
1207 | .reg_div = { .reg = EXYNOS5_CLKDIV_DISP1_0, .shift = 0, .size = 4 }, | ||
1208 | }; | ||
1209 | |||
1123 | static struct clksrc_clk exynos5_clksrcs[] = { | 1210 | static struct clksrc_clk exynos5_clksrcs[] = { |
1124 | { | 1211 | { |
1125 | .clk = { | 1212 | .clk = { |
1126 | .name = "sclk_dwmci", | ||
1127 | .parent = &exynos5_clk_dout_mmc4.clk, | ||
1128 | .enable = exynos5_clksrc_mask_fsys_ctrl, | ||
1129 | .ctrlbit = (1 << 16), | ||
1130 | }, | ||
1131 | .reg_div = { .reg = EXYNOS5_CLKDIV_FSYS3, .shift = 8, .size = 8 }, | ||
1132 | }, { | ||
1133 | .clk = { | ||
1134 | .name = "sclk_fimd", | ||
1135 | .devname = "s3cfb.1", | ||
1136 | .enable = exynos5_clksrc_mask_disp1_0_ctrl, | ||
1137 | .ctrlbit = (1 << 0), | ||
1138 | }, | ||
1139 | .sources = &exynos5_clkset_group, | ||
1140 | .reg_src = { .reg = EXYNOS5_CLKSRC_DISP1_0, .shift = 0, .size = 4 }, | ||
1141 | .reg_div = { .reg = EXYNOS5_CLKDIV_DISP1_0, .shift = 0, .size = 4 }, | ||
1142 | }, { | ||
1143 | .clk = { | ||
1144 | .name = "aclk_266_gscl", | 1213 | .name = "aclk_266_gscl", |
1145 | }, | 1214 | }, |
1146 | .sources = &clk_src_gscl_266, | 1215 | .sources = &clk_src_gscl_266, |
@@ -1225,6 +1294,10 @@ static struct clksrc_clk *exynos5_sysclks[] = { | |||
1225 | &exynos5_clk_aclk_266, | 1294 | &exynos5_clk_aclk_266, |
1226 | &exynos5_clk_aclk_200, | 1295 | &exynos5_clk_aclk_200, |
1227 | &exynos5_clk_aclk_166, | 1296 | &exynos5_clk_aclk_166, |
1297 | &exynos5_clk_aclk_300_gscl, | ||
1298 | &exynos5_clk_mout_aclk_300_gscl, | ||
1299 | &exynos5_clk_mout_aclk_300_gscl_mid, | ||
1300 | &exynos5_clk_mout_aclk_300_gscl_mid1, | ||
1228 | &exynos5_clk_aclk_66_pre, | 1301 | &exynos5_clk_aclk_66_pre, |
1229 | &exynos5_clk_aclk_66, | 1302 | &exynos5_clk_aclk_66, |
1230 | &exynos5_clk_dout_mmc0, | 1303 | &exynos5_clk_dout_mmc0, |
@@ -1240,12 +1313,14 @@ static struct clksrc_clk *exynos5_sysclks[] = { | |||
1240 | &exynos5_clk_mdout_spi0, | 1313 | &exynos5_clk_mdout_spi0, |
1241 | &exynos5_clk_mdout_spi1, | 1314 | &exynos5_clk_mdout_spi1, |
1242 | &exynos5_clk_mdout_spi2, | 1315 | &exynos5_clk_mdout_spi2, |
1316 | &exynos5_clk_sclk_fimd1, | ||
1243 | }; | 1317 | }; |
1244 | 1318 | ||
1245 | static struct clk *exynos5_clk_cdev[] = { | 1319 | static struct clk *exynos5_clk_cdev[] = { |
1246 | &exynos5_clk_pdma0, | 1320 | &exynos5_clk_pdma0, |
1247 | &exynos5_clk_pdma1, | 1321 | &exynos5_clk_pdma1, |
1248 | &exynos5_clk_mdma1, | 1322 | &exynos5_clk_mdma1, |
1323 | &exynos5_clk_fimd1, | ||
1249 | }; | 1324 | }; |
1250 | 1325 | ||
1251 | static struct clksrc_clk *exynos5_clksrc_cdev[] = { | 1326 | static struct clksrc_clk *exynos5_clksrc_cdev[] = { |
@@ -1274,6 +1349,7 @@ static struct clk_lookup exynos5_clk_lookup[] = { | |||
1274 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0), | 1349 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0), |
1275 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1), | 1350 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1), |
1276 | CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1), | 1351 | CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1), |
1352 | CLKDEV_INIT("exynos5-fb.1", "lcd", &exynos5_clk_fimd1), | ||
1277 | }; | 1353 | }; |
1278 | 1354 | ||
1279 | static unsigned long exynos5_epll_get_rate(struct clk *clk) | 1355 | static unsigned long exynos5_epll_get_rate(struct clk *clk) |
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 4eb39cdf75ea..715b690e5009 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c | |||
@@ -980,6 +980,32 @@ static int __init exynos_init_irq_eint(void) | |||
980 | { | 980 | { |
981 | int irq; | 981 | int irq; |
982 | 982 | ||
983 | #ifdef CONFIG_PINCTRL_SAMSUNG | ||
984 | /* | ||
985 | * The Samsung pinctrl driver provides an integrated gpio/pinmux/pinconf | ||
986 | * functionality along with support for external gpio and wakeup | ||
987 | * interrupts. If the samsung pinctrl driver is enabled and includes | ||
988 | * the wakeup interrupt support, then the setting up external wakeup | ||
989 | * interrupts here can be skipped. This check here is temporary to | ||
990 | * allow exynos4 platforms that do not use Samsung pinctrl driver to | ||
991 | * co-exist with platforms that do. When all of the Samsung Exynos4 | ||
992 | * platforms switch over to using the pinctrl driver, the wakeup | ||
993 | * interrupt support code here can be completely removed. | ||
994 | */ | ||
995 | struct device_node *pctrl_np, *wkup_np; | ||
996 | const char *pctrl_compat = "samsung,pinctrl-exynos4210"; | ||
997 | const char *wkup_compat = "samsung,exynos4210-wakeup-eint"; | ||
998 | |||
999 | for_each_compatible_node(pctrl_np, NULL, pctrl_compat) { | ||
1000 | if (of_device_is_available(pctrl_np)) { | ||
1001 | wkup_np = of_find_compatible_node(pctrl_np, NULL, | ||
1002 | wkup_compat); | ||
1003 | if (wkup_np) | ||
1004 | return -ENODEV; | ||
1005 | } | ||
1006 | } | ||
1007 | #endif | ||
1008 | |||
983 | if (soc_is_exynos5250()) | 1009 | if (soc_is_exynos5250()) |
984 | exynos_eint_base = ioremap(EXYNOS5_PA_GPIO1, SZ_4K); | 1010 | exynos_eint_base = ioremap(EXYNOS5_PA_GPIO1, SZ_4K); |
985 | else | 1011 | else |
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h index aed2eeb06517..dac146df79ac 100644 --- a/arch/arm/mach-exynos/common.h +++ b/arch/arm/mach-exynos/common.h | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | extern struct sys_timer exynos4_timer; | 15 | extern struct sys_timer exynos4_timer; |
16 | 16 | ||
17 | struct map_desc; | ||
17 | void exynos_init_io(struct map_desc *mach_desc, int size); | 18 | void exynos_init_io(struct map_desc *mach_desc, int size); |
18 | void exynos4_init_irq(void); | 19 | void exynos4_init_irq(void); |
19 | void exynos5_init_irq(void); | 20 | void exynos5_init_irq(void); |
@@ -59,4 +60,8 @@ void exynos4212_register_clocks(void); | |||
59 | #define exynos4212_register_clocks() | 60 | #define exynos4212_register_clocks() |
60 | #endif | 61 | #endif |
61 | 62 | ||
63 | extern struct smp_operations exynos_smp_ops; | ||
64 | |||
65 | extern void exynos_cpu_die(unsigned int cpu); | ||
66 | |||
62 | #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ | 67 | #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ |
diff --git a/arch/arm/mach-exynos/hotplug.c b/arch/arm/mach-exynos/hotplug.c index 9c17a0a43858..f4d7dd20cdac 100644 --- a/arch/arm/mach-exynos/hotplug.c +++ b/arch/arm/mach-exynos/hotplug.c | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | #include <mach/regs-pmu.h> | 22 | #include <mach/regs-pmu.h> |
23 | 23 | ||
24 | extern volatile int pen_release; | 24 | #include "common.h" |
25 | 25 | ||
26 | static inline void cpu_enter_lowpower(void) | 26 | static inline void cpu_enter_lowpower(void) |
27 | { | 27 | { |
@@ -95,17 +95,12 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious) | |||
95 | } | 95 | } |
96 | } | 96 | } |
97 | 97 | ||
98 | int platform_cpu_kill(unsigned int cpu) | ||
99 | { | ||
100 | return 1; | ||
101 | } | ||
102 | |||
103 | /* | 98 | /* |
104 | * platform-specific code to shutdown a CPU | 99 | * platform-specific code to shutdown a CPU |
105 | * | 100 | * |
106 | * Called with IRQs disabled | 101 | * Called with IRQs disabled |
107 | */ | 102 | */ |
108 | void platform_cpu_die(unsigned int cpu) | 103 | void __ref exynos_cpu_die(unsigned int cpu) |
109 | { | 104 | { |
110 | int spurious = 0; | 105 | int spurious = 0; |
111 | 106 | ||
@@ -124,12 +119,3 @@ void platform_cpu_die(unsigned int cpu) | |||
124 | if (spurious) | 119 | if (spurious) |
125 | pr_warn("CPU%u: %u spurious wakeup calls\n", cpu, spurious); | 120 | pr_warn("CPU%u: %u spurious wakeup calls\n", cpu, spurious); |
126 | } | 121 | } |
127 | |||
128 | int platform_cpu_disable(unsigned int cpu) | ||
129 | { | ||
130 | /* | ||
131 | * we don't allow CPU 0 to be shutdown (it is still too special | ||
132 | * e.g. clock tick interrupts) | ||
133 | */ | ||
134 | return cpu == 0 ? -EPERM : 0; | ||
135 | } | ||
diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h index c72b675b3e4b..8480849affb9 100644 --- a/arch/arm/mach-exynos/include/mach/map.h +++ b/arch/arm/mach-exynos/include/mach/map.h | |||
@@ -89,7 +89,7 @@ | |||
89 | #define EXYNOS4_PA_L2CC 0x10502000 | 89 | #define EXYNOS4_PA_L2CC 0x10502000 |
90 | 90 | ||
91 | #define EXYNOS4_PA_MDMA0 0x10810000 | 91 | #define EXYNOS4_PA_MDMA0 0x10810000 |
92 | #define EXYNOS4_PA_MDMA1 0x12840000 | 92 | #define EXYNOS4_PA_MDMA1 0x12850000 |
93 | #define EXYNOS4_PA_PDMA0 0x12680000 | 93 | #define EXYNOS4_PA_PDMA0 0x12680000 |
94 | #define EXYNOS4_PA_PDMA1 0x12690000 | 94 | #define EXYNOS4_PA_PDMA1 0x12690000 |
95 | #define EXYNOS5_PA_MDMA0 0x10800000 | 95 | #define EXYNOS5_PA_MDMA0 0x10800000 |
@@ -121,6 +121,11 @@ | |||
121 | #define EXYNOS4_PA_SYSMMU_MFC_L 0x13620000 | 121 | #define EXYNOS4_PA_SYSMMU_MFC_L 0x13620000 |
122 | #define EXYNOS4_PA_SYSMMU_MFC_R 0x13630000 | 122 | #define EXYNOS4_PA_SYSMMU_MFC_R 0x13630000 |
123 | 123 | ||
124 | #define EXYNOS5_PA_GSC0 0x13E00000 | ||
125 | #define EXYNOS5_PA_GSC1 0x13E10000 | ||
126 | #define EXYNOS5_PA_GSC2 0x13E20000 | ||
127 | #define EXYNOS5_PA_GSC3 0x13E30000 | ||
128 | |||
124 | #define EXYNOS5_PA_SYSMMU_MDMA1 0x10A40000 | 129 | #define EXYNOS5_PA_SYSMMU_MDMA1 0x10A40000 |
125 | #define EXYNOS5_PA_SYSMMU_SSS 0x10A50000 | 130 | #define EXYNOS5_PA_SYSMMU_SSS 0x10A50000 |
126 | #define EXYNOS5_PA_SYSMMU_2D 0x10A60000 | 131 | #define EXYNOS5_PA_SYSMMU_2D 0x10A60000 |
@@ -131,7 +136,6 @@ | |||
131 | #define EXYNOS5_PA_SYSMMU_JPEG 0x11F20000 | 136 | #define EXYNOS5_PA_SYSMMU_JPEG 0x11F20000 |
132 | #define EXYNOS5_PA_SYSMMU_IOP 0x12360000 | 137 | #define EXYNOS5_PA_SYSMMU_IOP 0x12360000 |
133 | #define EXYNOS5_PA_SYSMMU_RTIC 0x12370000 | 138 | #define EXYNOS5_PA_SYSMMU_RTIC 0x12370000 |
134 | #define EXYNOS5_PA_SYSMMU_GPS 0x12630000 | ||
135 | #define EXYNOS5_PA_SYSMMU_ISP 0x13260000 | 139 | #define EXYNOS5_PA_SYSMMU_ISP 0x13260000 |
136 | #define EXYNOS5_PA_SYSMMU_DRC 0x12370000 | 140 | #define EXYNOS5_PA_SYSMMU_DRC 0x12370000 |
137 | #define EXYNOS5_PA_SYSMMU_SCALERC 0x13280000 | 141 | #define EXYNOS5_PA_SYSMMU_SCALERC 0x13280000 |
@@ -173,6 +177,10 @@ | |||
173 | 177 | ||
174 | #define EXYNOS4_PA_HSMMC(x) (0x12510000 + ((x) * 0x10000)) | 178 | #define EXYNOS4_PA_HSMMC(x) (0x12510000 + ((x) * 0x10000)) |
175 | #define EXYNOS4_PA_DWMCI 0x12550000 | 179 | #define EXYNOS4_PA_DWMCI 0x12550000 |
180 | #define EXYNOS5_PA_DWMCI0 0x12200000 | ||
181 | #define EXYNOS5_PA_DWMCI1 0x12210000 | ||
182 | #define EXYNOS5_PA_DWMCI2 0x12220000 | ||
183 | #define EXYNOS5_PA_DWMCI3 0x12230000 | ||
176 | 184 | ||
177 | #define EXYNOS4_PA_HSOTG 0x12480000 | 185 | #define EXYNOS4_PA_HSOTG 0x12480000 |
178 | #define EXYNOS4_PA_USB_HSPHY 0x125B0000 | 186 | #define EXYNOS4_PA_USB_HSPHY 0x125B0000 |
diff --git a/arch/arm/mach-exynos/include/mach/sysmmu.h b/arch/arm/mach-exynos/include/mach/sysmmu.h index 998daf2add92..88a4543b0001 100644 --- a/arch/arm/mach-exynos/include/mach/sysmmu.h +++ b/arch/arm/mach-exynos/include/mach/sysmmu.h | |||
@@ -58,7 +58,7 @@ static inline void platform_set_sysmmu( | |||
58 | #endif | 58 | #endif |
59 | 59 | ||
60 | #else /* !CONFIG_EXYNOS_DEV_SYSMMU */ | 60 | #else /* !CONFIG_EXYNOS_DEV_SYSMMU */ |
61 | #define platform_set_sysmmu(dev, sysmmu) do { } while (0) | 61 | #define platform_set_sysmmu(sysmmu, dev) do { } while (0) |
62 | #endif | 62 | #endif |
63 | 63 | ||
64 | #define SYSMMU_CLOCK_DEVNAME(ipname, id) (SYSMMU_DEVNAME_BASE "." #id) | 64 | #define SYSMMU_CLOCK_DEVNAME(ipname, id) (SYSMMU_DEVNAME_BASE "." #id) |
diff --git a/arch/arm/mach-exynos/mach-armlex4210.c b/arch/arm/mach-exynos/mach-armlex4210.c index 5a3daa0168d8..3f37a5e8a1f4 100644 --- a/arch/arm/mach-exynos/mach-armlex4210.c +++ b/arch/arm/mach-exynos/mach-armlex4210.c | |||
@@ -199,6 +199,7 @@ static void __init armlex4210_machine_init(void) | |||
199 | MACHINE_START(ARMLEX4210, "ARMLEX4210") | 199 | MACHINE_START(ARMLEX4210, "ARMLEX4210") |
200 | /* Maintainer: Alim Akhtar <alim.akhtar@samsung.com> */ | 200 | /* Maintainer: Alim Akhtar <alim.akhtar@samsung.com> */ |
201 | .atag_offset = 0x100, | 201 | .atag_offset = 0x100, |
202 | .smp = smp_ops(exynos_smp_ops), | ||
202 | .init_irq = exynos4_init_irq, | 203 | .init_irq = exynos4_init_irq, |
203 | .map_io = armlex4210_map_io, | 204 | .map_io = armlex4210_map_io, |
204 | .handle_irq = gic_handle_irq, | 205 | .handle_irq = gic_handle_irq, |
diff --git a/arch/arm/mach-exynos/mach-exynos4-dt.c b/arch/arm/mach-exynos/mach-exynos4-dt.c index b2b5d5faa748..e58d786faf78 100644 --- a/arch/arm/mach-exynos/mach-exynos4-dt.c +++ b/arch/arm/mach-exynos/mach-exynos4-dt.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Samsung's Exynos4210 flattened device tree enabled machine | 2 | * Samsung's EXYNOS4 flattened device tree enabled machine |
3 | * | 3 | * |
4 | * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. | 4 | * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. |
5 | * http://www.samsung.com | 5 | * http://www.samsung.com |
@@ -36,7 +36,7 @@ | |||
36 | * at some point, the drivers should be capable of parsing all the platform | 36 | * at some point, the drivers should be capable of parsing all the platform |
37 | * data from the device tree. | 37 | * data from the device tree. |
38 | */ | 38 | */ |
39 | static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = { | 39 | static const struct of_dev_auxdata exynos4_auxdata_lookup[] __initconst = { |
40 | OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS4_PA_UART0, | 40 | OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS4_PA_UART0, |
41 | "exynos4210-uart.0", NULL), | 41 | "exynos4210-uart.0", NULL), |
42 | OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS4_PA_UART1, | 42 | OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS4_PA_UART1, |
@@ -55,6 +55,20 @@ static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = { | |||
55 | "exynos4-sdhci.3", NULL), | 55 | "exynos4-sdhci.3", NULL), |
56 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(0), | 56 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(0), |
57 | "s3c2440-i2c.0", NULL), | 57 | "s3c2440-i2c.0", NULL), |
58 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(1), | ||
59 | "s3c2440-i2c.1", NULL), | ||
60 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(2), | ||
61 | "s3c2440-i2c.2", NULL), | ||
62 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(3), | ||
63 | "s3c2440-i2c.3", NULL), | ||
64 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(4), | ||
65 | "s3c2440-i2c.4", NULL), | ||
66 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(5), | ||
67 | "s3c2440-i2c.5", NULL), | ||
68 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(6), | ||
69 | "s3c2440-i2c.6", NULL), | ||
70 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(7), | ||
71 | "s3c2440-i2c.7", NULL), | ||
58 | OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI0, | 72 | OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI0, |
59 | "exynos4210-spi.0", NULL), | 73 | "exynos4210-spi.0", NULL), |
60 | OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI1, | 74 | OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI1, |
@@ -66,19 +80,19 @@ static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = { | |||
66 | {}, | 80 | {}, |
67 | }; | 81 | }; |
68 | 82 | ||
69 | static void __init exynos4210_dt_map_io(void) | 83 | static void __init exynos4_dt_map_io(void) |
70 | { | 84 | { |
71 | exynos_init_io(NULL, 0); | 85 | exynos_init_io(NULL, 0); |
72 | s3c24xx_init_clocks(24000000); | 86 | s3c24xx_init_clocks(24000000); |
73 | } | 87 | } |
74 | 88 | ||
75 | static void __init exynos4210_dt_machine_init(void) | 89 | static void __init exynos4_dt_machine_init(void) |
76 | { | 90 | { |
77 | of_platform_populate(NULL, of_default_bus_match_table, | 91 | of_platform_populate(NULL, of_default_bus_match_table, |
78 | exynos4210_auxdata_lookup, NULL); | 92 | exynos4_auxdata_lookup, NULL); |
79 | } | 93 | } |
80 | 94 | ||
81 | static char const *exynos4210_dt_compat[] __initdata = { | 95 | static char const *exynos4_dt_compat[] __initdata = { |
82 | "samsung,exynos4210", | 96 | "samsung,exynos4210", |
83 | NULL | 97 | NULL |
84 | }; | 98 | }; |
@@ -86,11 +100,11 @@ static char const *exynos4210_dt_compat[] __initdata = { | |||
86 | DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)") | 100 | DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)") |
87 | /* Maintainer: Thomas Abraham <thomas.abraham@linaro.org> */ | 101 | /* Maintainer: Thomas Abraham <thomas.abraham@linaro.org> */ |
88 | .init_irq = exynos4_init_irq, | 102 | .init_irq = exynos4_init_irq, |
89 | .map_io = exynos4210_dt_map_io, | 103 | .map_io = exynos4_dt_map_io, |
90 | .handle_irq = gic_handle_irq, | 104 | .handle_irq = gic_handle_irq, |
91 | .init_machine = exynos4210_dt_machine_init, | 105 | .init_machine = exynos4_dt_machine_init, |
92 | .init_late = exynos_init_late, | 106 | .init_late = exynos_init_late, |
93 | .timer = &exynos4_timer, | 107 | .timer = &exynos4_timer, |
94 | .dt_compat = exynos4210_dt_compat, | 108 | .dt_compat = exynos4_dt_compat, |
95 | .restart = exynos4_restart, | 109 | .restart = exynos4_restart, |
96 | MACHINE_END | 110 | MACHINE_END |
diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c index ef770bc2318f..db1cd8eacf28 100644 --- a/arch/arm/mach-exynos/mach-exynos5-dt.c +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c | |||
@@ -47,6 +47,14 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = { | |||
47 | "s3c2440-i2c.0", NULL), | 47 | "s3c2440-i2c.0", NULL), |
48 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(1), | 48 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(1), |
49 | "s3c2440-i2c.1", NULL), | 49 | "s3c2440-i2c.1", NULL), |
50 | OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI0, | ||
51 | "dw_mmc.0", NULL), | ||
52 | OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI1, | ||
53 | "dw_mmc.1", NULL), | ||
54 | OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI2, | ||
55 | "dw_mmc.2", NULL), | ||
56 | OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI3, | ||
57 | "dw_mmc.3", NULL), | ||
50 | OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS5_PA_SPI0, | 58 | OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS5_PA_SPI0, |
51 | "exynos4210-spi.0", NULL), | 59 | "exynos4210-spi.0", NULL), |
52 | OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS5_PA_SPI1, | 60 | OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS5_PA_SPI1, |
@@ -56,6 +64,14 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = { | |||
56 | OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA0, "dma-pl330.0", NULL), | 64 | OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA0, "dma-pl330.0", NULL), |
57 | OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.1", NULL), | 65 | OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.1", NULL), |
58 | OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_MDMA1, "dma-pl330.2", NULL), | 66 | OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_MDMA1, "dma-pl330.2", NULL), |
67 | OF_DEV_AUXDATA("samsung,exynos5-gsc", EXYNOS5_PA_GSC0, | ||
68 | "exynos-gsc.0", NULL), | ||
69 | OF_DEV_AUXDATA("samsung,exynos5-gsc", EXYNOS5_PA_GSC1, | ||
70 | "exynos-gsc.1", NULL), | ||
71 | OF_DEV_AUXDATA("samsung,exynos5-gsc", EXYNOS5_PA_GSC2, | ||
72 | "exynos-gsc.2", NULL), | ||
73 | OF_DEV_AUXDATA("samsung,exynos5-gsc", EXYNOS5_PA_GSC3, | ||
74 | "exynos-gsc.3", NULL), | ||
59 | {}, | 75 | {}, |
60 | }; | 76 | }; |
61 | 77 | ||
@@ -79,6 +95,7 @@ static char const *exynos5250_dt_compat[] __initdata = { | |||
79 | DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)") | 95 | DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)") |
80 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 96 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
81 | .init_irq = exynos5_init_irq, | 97 | .init_irq = exynos5_init_irq, |
98 | .smp = smp_ops(exynos_smp_ops), | ||
82 | .map_io = exynos5250_dt_map_io, | 99 | .map_io = exynos5250_dt_map_io, |
83 | .handle_irq = gic_handle_irq, | 100 | .handle_irq = gic_handle_irq, |
84 | .init_machine = exynos5250_dt_machine_init, | 101 | .init_machine = exynos5250_dt_machine_init, |
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c index bdbaef2ae2cd..d397fd2f07ff 100644 --- a/arch/arm/mach-exynos/mach-nuri.c +++ b/arch/arm/mach-exynos/mach-nuri.c | |||
@@ -1380,6 +1380,7 @@ static void __init nuri_machine_init(void) | |||
1380 | MACHINE_START(NURI, "NURI") | 1380 | MACHINE_START(NURI, "NURI") |
1381 | /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */ | 1381 | /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */ |
1382 | .atag_offset = 0x100, | 1382 | .atag_offset = 0x100, |
1383 | .smp = smp_ops(exynos_smp_ops), | ||
1383 | .init_irq = exynos4_init_irq, | 1384 | .init_irq = exynos4_init_irq, |
1384 | .map_io = nuri_map_io, | 1385 | .map_io = nuri_map_io, |
1385 | .handle_irq = gic_handle_irq, | 1386 | .handle_irq = gic_handle_irq, |
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c index 0b8d24e27e74..8ff06eb87c49 100644 --- a/arch/arm/mach-exynos/mach-origen.c +++ b/arch/arm/mach-exynos/mach-origen.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/platform_device.h> | 15 | #include <linux/platform_device.h> |
16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
17 | #include <linux/input.h> | 17 | #include <linux/input.h> |
18 | #include <linux/pwm.h> | ||
18 | #include <linux/pwm_backlight.h> | 19 | #include <linux/pwm_backlight.h> |
19 | #include <linux/gpio_keys.h> | 20 | #include <linux/gpio_keys.h> |
20 | #include <linux/i2c.h> | 21 | #include <linux/i2c.h> |
@@ -614,6 +615,10 @@ static struct platform_device origen_lcd_hv070wsa = { | |||
614 | .dev.platform_data = &origen_lcd_hv070wsa_data, | 615 | .dev.platform_data = &origen_lcd_hv070wsa_data, |
615 | }; | 616 | }; |
616 | 617 | ||
618 | static struct pwm_lookup origen_pwm_lookup[] = { | ||
619 | PWM_LOOKUP("s3c24xx-pwm.0", 0, "pwm-backlight.0", NULL), | ||
620 | }; | ||
621 | |||
617 | #ifdef CONFIG_DRM_EXYNOS | 622 | #ifdef CONFIG_DRM_EXYNOS |
618 | static struct exynos_drm_fimd_pdata drm_fimd_pdata = { | 623 | static struct exynos_drm_fimd_pdata drm_fimd_pdata = { |
619 | .panel = { | 624 | .panel = { |
@@ -798,6 +803,7 @@ static void __init origen_machine_init(void) | |||
798 | 803 | ||
799 | platform_add_devices(origen_devices, ARRAY_SIZE(origen_devices)); | 804 | platform_add_devices(origen_devices, ARRAY_SIZE(origen_devices)); |
800 | 805 | ||
806 | pwm_add_table(origen_pwm_lookup, ARRAY_SIZE(origen_pwm_lookup)); | ||
801 | samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data); | 807 | samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data); |
802 | 808 | ||
803 | origen_bt_setup(); | 809 | origen_bt_setup(); |
@@ -806,6 +812,7 @@ static void __init origen_machine_init(void) | |||
806 | MACHINE_START(ORIGEN, "ORIGEN") | 812 | MACHINE_START(ORIGEN, "ORIGEN") |
807 | /* Maintainer: JeongHyeon Kim <jhkim@insignal.co.kr> */ | 813 | /* Maintainer: JeongHyeon Kim <jhkim@insignal.co.kr> */ |
808 | .atag_offset = 0x100, | 814 | .atag_offset = 0x100, |
815 | .smp = smp_ops(exynos_smp_ops), | ||
809 | .init_irq = exynos4_init_irq, | 816 | .init_irq = exynos4_init_irq, |
810 | .map_io = origen_map_io, | 817 | .map_io = origen_map_io, |
811 | .handle_irq = gic_handle_irq, | 818 | .handle_irq = gic_handle_irq, |
diff --git a/arch/arm/mach-exynos/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c index 6a791fd4fb0d..7a265d1a82d3 100644 --- a/arch/arm/mach-exynos/mach-smdk4x12.c +++ b/arch/arm/mach-exynos/mach-smdk4x12.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/mfd/max8997.h> | 17 | #include <linux/mfd/max8997.h> |
18 | #include <linux/mmc/host.h> | 18 | #include <linux/mmc/host.h> |
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | #include <linux/pwm.h> | ||
20 | #include <linux/pwm_backlight.h> | 21 | #include <linux/pwm_backlight.h> |
21 | #include <linux/regulator/machine.h> | 22 | #include <linux/regulator/machine.h> |
22 | #include <linux/serial_core.h> | 23 | #include <linux/serial_core.h> |
@@ -222,6 +223,10 @@ static struct platform_pwm_backlight_data smdk4x12_bl_data = { | |||
222 | .pwm_period_ns = 1000, | 223 | .pwm_period_ns = 1000, |
223 | }; | 224 | }; |
224 | 225 | ||
226 | static struct pwm_lookup smdk4x12_pwm_lookup[] = { | ||
227 | PWM_LOOKUP("s3c24xx-pwm.1", 0, "pwm-backlight.0", NULL), | ||
228 | }; | ||
229 | |||
225 | static uint32_t smdk4x12_keymap[] __initdata = { | 230 | static uint32_t smdk4x12_keymap[] __initdata = { |
226 | /* KEY(row, col, keycode) */ | 231 | /* KEY(row, col, keycode) */ |
227 | KEY(1, 3, KEY_1), KEY(1, 4, KEY_2), KEY(1, 5, KEY_3), | 232 | KEY(1, 3, KEY_1), KEY(1, 4, KEY_2), KEY(1, 5, KEY_3), |
@@ -349,6 +354,7 @@ static void __init smdk4x12_machine_init(void) | |||
349 | ARRAY_SIZE(smdk4x12_i2c_devs7)); | 354 | ARRAY_SIZE(smdk4x12_i2c_devs7)); |
350 | 355 | ||
351 | samsung_bl_set(&smdk4x12_bl_gpio_info, &smdk4x12_bl_data); | 356 | samsung_bl_set(&smdk4x12_bl_gpio_info, &smdk4x12_bl_data); |
357 | pwm_add_table(smdk4x12_pwm_lookup, ARRAY_SIZE(smdk4x12_pwm_lookup)); | ||
352 | 358 | ||
353 | samsung_keypad_set_platdata(&smdk4x12_keypad_data); | 359 | samsung_keypad_set_platdata(&smdk4x12_keypad_data); |
354 | 360 | ||
@@ -370,6 +376,7 @@ static void __init smdk4x12_machine_init(void) | |||
370 | MACHINE_START(SMDK4212, "SMDK4212") | 376 | MACHINE_START(SMDK4212, "SMDK4212") |
371 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 377 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
372 | .atag_offset = 0x100, | 378 | .atag_offset = 0x100, |
379 | .smp = smp_ops(exynos_smp_ops), | ||
373 | .init_irq = exynos4_init_irq, | 380 | .init_irq = exynos4_init_irq, |
374 | .map_io = smdk4x12_map_io, | 381 | .map_io = smdk4x12_map_io, |
375 | .handle_irq = gic_handle_irq, | 382 | .handle_irq = gic_handle_irq, |
@@ -383,6 +390,7 @@ MACHINE_START(SMDK4412, "SMDK4412") | |||
383 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 390 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
384 | /* Maintainer: Changhwan Youn <chaos.youn@samsung.com> */ | 391 | /* Maintainer: Changhwan Youn <chaos.youn@samsung.com> */ |
385 | .atag_offset = 0x100, | 392 | .atag_offset = 0x100, |
393 | .smp = smp_ops(exynos_smp_ops), | ||
386 | .init_irq = exynos4_init_irq, | 394 | .init_irq = exynos4_init_irq, |
387 | .map_io = smdk4x12_map_io, | 395 | .map_io = smdk4x12_map_io, |
388 | .handle_irq = gic_handle_irq, | 396 | .handle_irq = gic_handle_irq, |
diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c index 1b864ee387cd..c15d2238ceb0 100644 --- a/arch/arm/mach-exynos/mach-smdkv310.c +++ b/arch/arm/mach-exynos/mach-smdkv310.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
19 | #include <linux/i2c.h> | 19 | #include <linux/i2c.h> |
20 | #include <linux/input.h> | 20 | #include <linux/input.h> |
21 | #include <linux/pwm.h> | ||
21 | #include <linux/pwm_backlight.h> | 22 | #include <linux/pwm_backlight.h> |
22 | #include <linux/platform_data/s3c-hsotg.h> | 23 | #include <linux/platform_data/s3c-hsotg.h> |
23 | 24 | ||
@@ -360,6 +361,10 @@ static struct i2c_board_info hdmiphy_info = { | |||
360 | I2C_BOARD_INFO("hdmiphy-exynos4210", 0x38), | 361 | I2C_BOARD_INFO("hdmiphy-exynos4210", 0x38), |
361 | }; | 362 | }; |
362 | 363 | ||
364 | static struct pwm_lookup smdkv310_pwm_lookup[] = { | ||
365 | PWM_LOOKUP("s3c24xx-pwm.1", 0, "pwm-backlight.0", NULL), | ||
366 | }; | ||
367 | |||
363 | static void s5p_tv_setup(void) | 368 | static void s5p_tv_setup(void) |
364 | { | 369 | { |
365 | /* direct HPD to HDMI chip */ | 370 | /* direct HPD to HDMI chip */ |
@@ -399,6 +404,8 @@ static void __init smdkv310_machine_init(void) | |||
399 | samsung_keypad_set_platdata(&smdkv310_keypad_data); | 404 | samsung_keypad_set_platdata(&smdkv310_keypad_data); |
400 | 405 | ||
401 | samsung_bl_set(&smdkv310_bl_gpio_info, &smdkv310_bl_data); | 406 | samsung_bl_set(&smdkv310_bl_gpio_info, &smdkv310_bl_data); |
407 | pwm_add_table(smdkv310_pwm_lookup, ARRAY_SIZE(smdkv310_pwm_lookup)); | ||
408 | |||
402 | #ifdef CONFIG_DRM_EXYNOS | 409 | #ifdef CONFIG_DRM_EXYNOS |
403 | s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata; | 410 | s5p_device_fimd0.dev.platform_data = &drm_fimd_pdata; |
404 | exynos4_fimd0_gpio_setup_24bpp(); | 411 | exynos4_fimd0_gpio_setup_24bpp(); |
@@ -417,6 +424,7 @@ MACHINE_START(SMDKV310, "SMDKV310") | |||
417 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 424 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
418 | /* Maintainer: Changhwan Youn <chaos.youn@samsung.com> */ | 425 | /* Maintainer: Changhwan Youn <chaos.youn@samsung.com> */ |
419 | .atag_offset = 0x100, | 426 | .atag_offset = 0x100, |
427 | .smp = smp_ops(exynos_smp_ops), | ||
420 | .init_irq = exynos4_init_irq, | 428 | .init_irq = exynos4_init_irq, |
421 | .map_io = smdkv310_map_io, | 429 | .map_io = smdkv310_map_io, |
422 | .handle_irq = gic_handle_irq, | 430 | .handle_irq = gic_handle_irq, |
@@ -429,6 +437,7 @@ MACHINE_END | |||
429 | MACHINE_START(SMDKC210, "SMDKC210") | 437 | MACHINE_START(SMDKC210, "SMDKC210") |
430 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 438 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
431 | .atag_offset = 0x100, | 439 | .atag_offset = 0x100, |
440 | .smp = smp_ops(exynos_smp_ops), | ||
432 | .init_irq = exynos4_init_irq, | 441 | .init_irq = exynos4_init_irq, |
433 | .map_io = smdkv310_map_io, | 442 | .map_io = smdkv310_map_io, |
434 | .handle_irq = gic_handle_irq, | 443 | .handle_irq = gic_handle_irq, |
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index 8b9ee219efb7..6e7313382088 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c | |||
@@ -1152,6 +1152,7 @@ static void __init universal_machine_init(void) | |||
1152 | MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210") | 1152 | MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210") |
1153 | /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */ | 1153 | /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */ |
1154 | .atag_offset = 0x100, | 1154 | .atag_offset = 0x100, |
1155 | .smp = smp_ops(exynos_smp_ops), | ||
1155 | .init_irq = exynos4_init_irq, | 1156 | .init_irq = exynos4_init_irq, |
1156 | .map_io = universal_map_io, | 1157 | .map_io = universal_map_io, |
1157 | .handle_irq = gic_handle_irq, | 1158 | .handle_irq = gic_handle_irq, |
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c index 36c3984aaa47..f93d820ecab5 100644 --- a/arch/arm/mach-exynos/platsmp.c +++ b/arch/arm/mach-exynos/platsmp.c | |||
@@ -32,19 +32,14 @@ | |||
32 | 32 | ||
33 | #include <plat/cpu.h> | 33 | #include <plat/cpu.h> |
34 | 34 | ||
35 | #include "common.h" | ||
36 | |||
35 | extern void exynos4_secondary_startup(void); | 37 | extern void exynos4_secondary_startup(void); |
36 | 38 | ||
37 | #define CPU1_BOOT_REG (samsung_rev() == EXYNOS4210_REV_1_1 ? \ | 39 | #define CPU1_BOOT_REG (samsung_rev() == EXYNOS4210_REV_1_1 ? \ |
38 | S5P_INFORM5 : S5P_VA_SYSRAM) | 40 | S5P_INFORM5 : S5P_VA_SYSRAM) |
39 | 41 | ||
40 | /* | 42 | /* |
41 | * control for which core is the next to come out of the secondary | ||
42 | * boot "holding pen" | ||
43 | */ | ||
44 | |||
45 | volatile int __cpuinitdata pen_release = -1; | ||
46 | |||
47 | /* | ||
48 | * Write pen_release in a way that is guaranteed to be visible to all | 43 | * Write pen_release in a way that is guaranteed to be visible to all |
49 | * observers, irrespective of whether they're taking part in coherency | 44 | * observers, irrespective of whether they're taking part in coherency |
50 | * or not. This is necessary for the hotplug code to work reliably. | 45 | * or not. This is necessary for the hotplug code to work reliably. |
@@ -64,7 +59,7 @@ static void __iomem *scu_base_addr(void) | |||
64 | 59 | ||
65 | static DEFINE_SPINLOCK(boot_lock); | 60 | static DEFINE_SPINLOCK(boot_lock); |
66 | 61 | ||
67 | void __cpuinit platform_secondary_init(unsigned int cpu) | 62 | static void __cpuinit exynos_secondary_init(unsigned int cpu) |
68 | { | 63 | { |
69 | /* | 64 | /* |
70 | * if any interrupts are already enabled for the primary | 65 | * if any interrupts are already enabled for the primary |
@@ -86,7 +81,7 @@ void __cpuinit platform_secondary_init(unsigned int cpu) | |||
86 | spin_unlock(&boot_lock); | 81 | spin_unlock(&boot_lock); |
87 | } | 82 | } |
88 | 83 | ||
89 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | 84 | static int __cpuinit exynos_boot_secondary(unsigned int cpu, struct task_struct *idle) |
90 | { | 85 | { |
91 | unsigned long timeout; | 86 | unsigned long timeout; |
92 | 87 | ||
@@ -139,7 +134,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
139 | 134 | ||
140 | __raw_writel(virt_to_phys(exynos4_secondary_startup), | 135 | __raw_writel(virt_to_phys(exynos4_secondary_startup), |
141 | CPU1_BOOT_REG); | 136 | CPU1_BOOT_REG); |
142 | gic_raise_softirq(cpumask_of(cpu), 1); | 137 | gic_raise_softirq(cpumask_of(cpu), 0); |
143 | 138 | ||
144 | if (pen_release == -1) | 139 | if (pen_release == -1) |
145 | break; | 140 | break; |
@@ -161,7 +156,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
161 | * which may be present or become present in the system. | 156 | * which may be present or become present in the system. |
162 | */ | 157 | */ |
163 | 158 | ||
164 | void __init smp_init_cpus(void) | 159 | static void __init exynos_smp_init_cpus(void) |
165 | { | 160 | { |
166 | void __iomem *scu_base = scu_base_addr(); | 161 | void __iomem *scu_base = scu_base_addr(); |
167 | unsigned int i, ncores; | 162 | unsigned int i, ncores; |
@@ -184,7 +179,7 @@ void __init smp_init_cpus(void) | |||
184 | set_smp_cross_call(gic_raise_softirq); | 179 | set_smp_cross_call(gic_raise_softirq); |
185 | } | 180 | } |
186 | 181 | ||
187 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) | 182 | static void __init exynos_smp_prepare_cpus(unsigned int max_cpus) |
188 | { | 183 | { |
189 | if (!soc_is_exynos5250()) | 184 | if (!soc_is_exynos5250()) |
190 | scu_enable(scu_base_addr()); | 185 | scu_enable(scu_base_addr()); |
@@ -198,3 +193,13 @@ void __init platform_smp_prepare_cpus(unsigned int max_cpus) | |||
198 | __raw_writel(virt_to_phys(exynos4_secondary_startup), | 193 | __raw_writel(virt_to_phys(exynos4_secondary_startup), |
199 | CPU1_BOOT_REG); | 194 | CPU1_BOOT_REG); |
200 | } | 195 | } |
196 | |||
197 | struct smp_operations exynos_smp_ops __initdata = { | ||
198 | .smp_init_cpus = exynos_smp_init_cpus, | ||
199 | .smp_prepare_cpus = exynos_smp_prepare_cpus, | ||
200 | .smp_secondary_init = exynos_secondary_init, | ||
201 | .smp_boot_secondary = exynos_boot_secondary, | ||
202 | #ifdef CONFIG_HOTPLUG_CPU | ||
203 | .cpu_die = exynos_cpu_die, | ||
204 | #endif | ||
205 | }; | ||