diff options
author | Olof Johansson <olof@lixom.net> | 2012-10-17 20:05:25 -0400 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2012-10-17 20:05:25 -0400 |
commit | b5beb20d03c89a1ea7cb208c445546f2c62225e4 (patch) | |
tree | 903875467ff7fef37762be9edb3e8407bd49f056 /arch/arm/mach-omap2/gpmc.c | |
parent | b08d48414e73fbf743a93b96e2e5449775239e4a (diff) | |
parent | 8119024ef7363591fd958ec89ebfaee7c18209e3 (diff) |
Merge tag 'omap-for-v3.7-rc1/fixes-take5-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into fixes
From Tony Lindgren:
A boot problem fix for am33xx beaglebone caused by GPMC,
a regression fix for local timer, and a clockdomain locking fix.
Also few minor fixes for boot time and sparse warnings.
* tag 'omap-for-v3.7-rc1/fixes-take5-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
ARM: OMAP2+: Allow kernel to boot even if GPMC fails to reserve memory
ARM: OMAP: clockdomain: Fix locking on _clkdm_clk_hwmod_enable / disable
ARM: OMAP4: devices: fixup OMAP4 DMIC platform device error message
ARM: OMAP2+: clock data: Add dev-id for the omap-gpmc dummy fck
ARM: OMAP: resolve sparse warning concerning debug_card_init()
ARM: OMAP4: Fix twd_local_timer_register regression
Diffstat (limited to 'arch/arm/mach-omap2/gpmc.c')
-rw-r--r-- | arch/arm/mach-omap2/gpmc.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 5ac5cf30406a..92b5718fa722 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
@@ -868,9 +868,9 @@ static void __devexit gpmc_mem_exit(void) | |||
868 | 868 | ||
869 | } | 869 | } |
870 | 870 | ||
871 | static void __devinit gpmc_mem_init(void) | 871 | static int __devinit gpmc_mem_init(void) |
872 | { | 872 | { |
873 | int cs; | 873 | int cs, rc; |
874 | unsigned long boot_rom_space = 0; | 874 | unsigned long boot_rom_space = 0; |
875 | 875 | ||
876 | /* never allocate the first page, to facilitate bug detection; | 876 | /* never allocate the first page, to facilitate bug detection; |
@@ -890,13 +890,21 @@ static void __devinit gpmc_mem_init(void) | |||
890 | if (!gpmc_cs_mem_enabled(cs)) | 890 | if (!gpmc_cs_mem_enabled(cs)) |
891 | continue; | 891 | continue; |
892 | gpmc_cs_get_memconf(cs, &base, &size); | 892 | gpmc_cs_get_memconf(cs, &base, &size); |
893 | if (gpmc_cs_insert_mem(cs, base, size) < 0) | 893 | rc = gpmc_cs_insert_mem(cs, base, size); |
894 | BUG(); | 894 | if (IS_ERR_VALUE(rc)) { |
895 | while (--cs >= 0) | ||
896 | if (gpmc_cs_mem_enabled(cs)) | ||
897 | gpmc_cs_delete_mem(cs); | ||
898 | return rc; | ||
899 | } | ||
895 | } | 900 | } |
901 | |||
902 | return 0; | ||
896 | } | 903 | } |
897 | 904 | ||
898 | static __devinit int gpmc_probe(struct platform_device *pdev) | 905 | static __devinit int gpmc_probe(struct platform_device *pdev) |
899 | { | 906 | { |
907 | int rc; | ||
900 | u32 l; | 908 | u32 l; |
901 | struct resource *res; | 909 | struct resource *res; |
902 | 910 | ||
@@ -936,7 +944,13 @@ static __devinit int gpmc_probe(struct platform_device *pdev) | |||
936 | dev_info(gpmc_dev, "GPMC revision %d.%d\n", GPMC_REVISION_MAJOR(l), | 944 | dev_info(gpmc_dev, "GPMC revision %d.%d\n", GPMC_REVISION_MAJOR(l), |
937 | GPMC_REVISION_MINOR(l)); | 945 | GPMC_REVISION_MINOR(l)); |
938 | 946 | ||
939 | gpmc_mem_init(); | 947 | rc = gpmc_mem_init(); |
948 | if (IS_ERR_VALUE(rc)) { | ||
949 | clk_disable_unprepare(gpmc_l3_clk); | ||
950 | clk_put(gpmc_l3_clk); | ||
951 | dev_err(gpmc_dev, "failed to reserve memory\n"); | ||
952 | return rc; | ||
953 | } | ||
940 | 954 | ||
941 | if (IS_ERR_VALUE(gpmc_setup_irq())) | 955 | if (IS_ERR_VALUE(gpmc_setup_irq())) |
942 | dev_warn(gpmc_dev, "gpmc_setup_irq failed\n"); | 956 | dev_warn(gpmc_dev, "gpmc_setup_irq failed\n"); |