diff options
author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-09-05 10:22:45 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-09-05 10:22:45 -0400 |
commit | 593d0a3e9f813db910dc50574532914db21d09ff (patch) | |
tree | 12d8413ee57b4383ca8c906996ffe02be6d377a5 /arch/arm/plat-omap | |
parent | 50e900417b8096939d12a46848f965e27a905e36 (diff) | |
parent | 4cb38750d49010ae72e718d46605ac9ba5a851b4 (diff) |
Merge commit '4cb38750d49010ae72e718d46605ac9ba5a851b4' into stable/for-linus-3.6
* commit '4cb38750d49010ae72e718d46605ac9ba5a851b4': (6849 commits)
bcma: fix invalid PMU chip control masks
[libata] pata_cmd64x: whitespace cleanup
libata-acpi: fix up for acpi_pm_device_sleep_state API
sata_dwc_460ex: device tree may specify dma_channel
ahci, trivial: fixed coding style issues related to braces
ahci_platform: add hibernation callbacks
libata-eh.c: local functions should not be exposed globally
libata-transport.c: local functions should not be exposed globally
sata_dwc_460ex: support hardreset
ata: use module_pci_driver
drivers/ata/pata_pcmcia.c: adjust suspicious bit operation
pata_imx: Convert to clk_prepare_enable/clk_disable_unprepare
ahci: Enable SB600 64bit DMA on MSI K9AGM2 (MS-7327) v2
[libata] Prevent interface errors with Seagate FreeAgent GoFlex
drivers/acpi/glue: revert accidental license-related 6b66d95895c bits
libata-acpi: add missing inlines in libata.h
i2c-omap: Add support for I2C_M_STOP message flag
i2c: Fall back to emulated SMBus if the operation isn't supported natively
i2c: Add SCCB support
i2c-tiny-usb: Add support for the Robofuzz OSIF USB/I2C converter
...
Diffstat (limited to 'arch/arm/plat-omap')
30 files changed, 350 insertions, 797 deletions
diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig index ad95c7a5d009..dd36eba9506c 100644 --- a/arch/arm/plat-omap/Kconfig +++ b/arch/arm/plat-omap/Kconfig | |||
@@ -29,7 +29,7 @@ config ARCH_OMAP2PLUS | |||
29 | select USE_OF | 29 | select USE_OF |
30 | select PROC_DEVICETREE if PROC_FS | 30 | select PROC_DEVICETREE if PROC_FS |
31 | help | 31 | help |
32 | "Systems based on OMAP2, OMAP3 or OMAP4" | 32 | "Systems based on OMAP2, OMAP3, OMAP4 or OMAP5" |
33 | 33 | ||
34 | endchoice | 34 | endchoice |
35 | 35 | ||
@@ -45,31 +45,30 @@ config OMAP_DEBUG_LEDS | |||
45 | depends on OMAP_DEBUG_DEVICES | 45 | depends on OMAP_DEBUG_DEVICES |
46 | default y if LEDS_CLASS | 46 | default y if LEDS_CLASS |
47 | 47 | ||
48 | config OMAP_SMARTREFLEX | 48 | config POWER_AVS_OMAP |
49 | bool "SmartReflex support" | 49 | bool "AVS(Adaptive Voltage Scaling) support for OMAP IP versions 1&2" |
50 | depends on (ARCH_OMAP3 || ARCH_OMAP4) && PM | 50 | depends on POWER_AVS && (ARCH_OMAP3 || ARCH_OMAP4) && PM |
51 | help | 51 | help |
52 | Say Y if you want to enable SmartReflex. | 52 | Say Y to enable AVS(Adaptive Voltage Scaling) |
53 | 53 | support on OMAP containing the version 1 or | |
54 | SmartReflex can perform continuous dynamic voltage | 54 | version 2 of the SmartReflex IP. |
55 | scaling around the nominal operating point voltage | 55 | V1 is the 65nm version used in OMAP3430. |
56 | according to silicon characteristics and operating | 56 | V2 is the update for the 45nm version of the IP used in OMAP3630 |
57 | conditions. Enabling SmartReflex reduces power | 57 | and OMAP4430 |
58 | consumption. | ||
59 | 58 | ||
60 | Please note, that by default SmartReflex is only | 59 | Please note, that by default SmartReflex is only |
61 | initialized. To enable the automatic voltage | 60 | initialized and not enabled. To enable the automatic voltage |
62 | compensation for vdd mpu and vdd core from user space, | 61 | compensation for vdd mpu and vdd core from user space, |
63 | user must write 1 to | 62 | user must write 1 to |
64 | /debug/voltage/vdd_<X>/smartreflex/autocomp, | 63 | /debug/smartreflex/sr_<X>/autocomp, |
65 | where X is mpu or core for OMAP3. | 64 | where X is mpu_iva or core for OMAP3. |
66 | Optionally autocompensation can be enabled in the kernel | 65 | Optionally autocompensation can be enabled in the kernel |
67 | by default during system init via the enable_on_init flag | 66 | by default during system init via the enable_on_init flag |
68 | which an be passed as platform data to the smartreflex driver. | 67 | which an be passed as platform data to the smartreflex driver. |
69 | 68 | ||
70 | config OMAP_SMARTREFLEX_CLASS3 | 69 | config POWER_AVS_OMAP_CLASS3 |
71 | bool "Class 3 mode of Smartreflex Implementation" | 70 | bool "Class 3 mode of Smartreflex Implementation" |
72 | depends on OMAP_SMARTREFLEX && TWL4030_CORE | 71 | depends on POWER_AVS_OMAP && TWL4030_CORE |
73 | help | 72 | help |
74 | Say Y to enable Class 3 implementation of Smartreflex | 73 | Say Y to enable Class 3 implementation of Smartreflex |
75 | 74 | ||
@@ -150,7 +149,7 @@ config OMAP_32K_TIMER | |||
150 | This timer saves power compared to the OMAP_MPU_TIMER, and has | 149 | This timer saves power compared to the OMAP_MPU_TIMER, and has |
151 | support for no tick during idle. The 32KHz timer provides less | 150 | support for no tick during idle. The 32KHz timer provides less |
152 | intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is | 151 | intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is |
153 | currently only available for OMAP16XX, 24XX, 34XX and OMAP4. | 152 | currently only available for OMAP16XX, 24XX, 34XX and OMAP4/5. |
154 | 153 | ||
155 | config OMAP3_L2_AUX_SECURE_SAVE_RESTORE | 154 | config OMAP3_L2_AUX_SECURE_SAVE_RESTORE |
156 | bool "OMAP3 HS/EMU save and restore for L2 AUX control register" | 155 | bool "OMAP3 HS/EMU save and restore for L2 AUX control register" |
diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile index ed8605f01155..961bf859bc0c 100644 --- a/arch/arm/plat-omap/Makefile +++ b/arch/arm/plat-omap/Makefile | |||
@@ -4,15 +4,13 @@ | |||
4 | 4 | ||
5 | # Common support | 5 | # Common support |
6 | obj-y := common.o sram.o clock.o devices.o dma.o mux.o \ | 6 | obj-y := common.o sram.o clock.o devices.o dma.o mux.o \ |
7 | usb.o fb.o counter_32k.o | 7 | fb.o counter_32k.o |
8 | obj-m := | 8 | obj-m := |
9 | obj-n := | 9 | obj-n := |
10 | obj- := | 10 | obj- := |
11 | 11 | ||
12 | # omap_device support (OMAP2+ only at the moment) | 12 | # omap_device support (OMAP2+ only at the moment) |
13 | obj-$(CONFIG_ARCH_OMAP2) += omap_device.o | 13 | obj-$(CONFIG_ARCH_OMAP2PLUS) += omap_device.o |
14 | obj-$(CONFIG_ARCH_OMAP3) += omap_device.o | ||
15 | obj-$(CONFIG_ARCH_OMAP4) += omap_device.o | ||
16 | 14 | ||
17 | obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o | 15 | obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o |
18 | obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o | 16 | obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o |
diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c index 62ec5c452792..706b7e29397f 100644 --- a/arch/arm/plat-omap/clock.c +++ b/arch/arm/plat-omap/clock.c | |||
@@ -461,6 +461,7 @@ static int clk_dbg_show_summary(struct seq_file *s, void *unused) | |||
461 | struct clk *c; | 461 | struct clk *c; |
462 | struct clk *pa; | 462 | struct clk *pa; |
463 | 463 | ||
464 | mutex_lock(&clocks_mutex); | ||
464 | seq_printf(s, "%-30s %-30s %-10s %s\n", | 465 | seq_printf(s, "%-30s %-30s %-10s %s\n", |
465 | "clock-name", "parent-name", "rate", "use-count"); | 466 | "clock-name", "parent-name", "rate", "use-count"); |
466 | 467 | ||
@@ -469,6 +470,7 @@ static int clk_dbg_show_summary(struct seq_file *s, void *unused) | |||
469 | seq_printf(s, "%-30s %-30s %-10lu %d\n", | 470 | seq_printf(s, "%-30s %-30s %-10lu %d\n", |
470 | c->name, pa ? pa->name : "none", c->rate, c->usecount); | 471 | c->name, pa ? pa->name : "none", c->rate, c->usecount); |
471 | } | 472 | } |
473 | mutex_unlock(&clocks_mutex); | ||
472 | 474 | ||
473 | return 0; | 475 | return 0; |
474 | } | 476 | } |
diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index 0a9b9a970113..89a3723b3538 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c | |||
@@ -77,3 +77,12 @@ void __init omap_init_consistent_dma_size(void) | |||
77 | init_consistent_dma_size(CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE << 20); | 77 | init_consistent_dma_size(CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE << 20); |
78 | #endif | 78 | #endif |
79 | } | 79 | } |
80 | |||
81 | /* | ||
82 | * Stub function for OMAP2 so that common files | ||
83 | * continue to build when custom builds are used | ||
84 | */ | ||
85 | int __weak omap_secure_ram_reserve_memblock(void) | ||
86 | { | ||
87 | return 0; | ||
88 | } | ||
diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c index 2132c4f389e1..dbf1e03029a5 100644 --- a/arch/arm/plat-omap/counter_32k.c +++ b/arch/arm/plat-omap/counter_32k.c | |||
@@ -29,7 +29,10 @@ | |||
29 | #include <plat/clock.h> | 29 | #include <plat/clock.h> |
30 | 30 | ||
31 | /* OMAP2_32KSYNCNT_CR_OFF: offset of 32ksync counter register */ | 31 | /* OMAP2_32KSYNCNT_CR_OFF: offset of 32ksync counter register */ |
32 | #define OMAP2_32KSYNCNT_CR_OFF 0x10 | 32 | #define OMAP2_32KSYNCNT_REV_OFF 0x0 |
33 | #define OMAP2_32KSYNCNT_REV_SCHEME (0x3 << 30) | ||
34 | #define OMAP2_32KSYNCNT_CR_OFF_LOW 0x10 | ||
35 | #define OMAP2_32KSYNCNT_CR_OFF_HIGH 0x30 | ||
33 | 36 | ||
34 | /* | 37 | /* |
35 | * 32KHz clocksource ... always available, on pretty most chips except | 38 | * 32KHz clocksource ... always available, on pretty most chips except |
@@ -84,9 +87,16 @@ int __init omap_init_clocksource_32k(void __iomem *vbase) | |||
84 | int ret; | 87 | int ret; |
85 | 88 | ||
86 | /* | 89 | /* |
87 | * 32k sync Counter register offset is at 0x10 | 90 | * 32k sync Counter IP register offsets vary between the |
91 | * highlander version and the legacy ones. | ||
92 | * The 'SCHEME' bits(30-31) of the revision register is used | ||
93 | * to identify the version. | ||
88 | */ | 94 | */ |
89 | sync32k_cnt_reg = vbase + OMAP2_32KSYNCNT_CR_OFF; | 95 | if (__raw_readl(vbase + OMAP2_32KSYNCNT_REV_OFF) & |
96 | OMAP2_32KSYNCNT_REV_SCHEME) | ||
97 | sync32k_cnt_reg = vbase + OMAP2_32KSYNCNT_CR_OFF_HIGH; | ||
98 | else | ||
99 | sync32k_cnt_reg = vbase + OMAP2_32KSYNCNT_CR_OFF_LOW; | ||
90 | 100 | ||
91 | /* | 101 | /* |
92 | * 120000 rough estimate from the calculations in | 102 | * 120000 rough estimate from the calculations in |
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index cb16ade437cb..7fe626761e53 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -573,22 +573,25 @@ EXPORT_SYMBOL(omap_set_dma_dest_burst_mode); | |||
573 | 573 | ||
574 | static inline void omap_enable_channel_irq(int lch) | 574 | static inline void omap_enable_channel_irq(int lch) |
575 | { | 575 | { |
576 | u32 status; | ||
577 | |||
578 | /* Clear CSR */ | 576 | /* Clear CSR */ |
579 | if (cpu_class_is_omap1()) | 577 | if (cpu_class_is_omap1()) |
580 | status = p->dma_read(CSR, lch); | 578 | p->dma_read(CSR, lch); |
581 | else if (cpu_class_is_omap2()) | 579 | else |
582 | p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); | 580 | p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); |
583 | 581 | ||
584 | /* Enable some nice interrupts. */ | 582 | /* Enable some nice interrupts. */ |
585 | p->dma_write(dma_chan[lch].enabled_irqs, CICR, lch); | 583 | p->dma_write(dma_chan[lch].enabled_irqs, CICR, lch); |
586 | } | 584 | } |
587 | 585 | ||
588 | static void omap_disable_channel_irq(int lch) | 586 | static inline void omap_disable_channel_irq(int lch) |
589 | { | 587 | { |
590 | if (cpu_class_is_omap2()) | 588 | /* disable channel interrupts */ |
591 | p->dma_write(0, CICR, lch); | 589 | p->dma_write(0, CICR, lch); |
590 | /* Clear CSR */ | ||
591 | if (cpu_class_is_omap1()) | ||
592 | p->dma_read(CSR, lch); | ||
593 | else | ||
594 | p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); | ||
592 | } | 595 | } |
593 | 596 | ||
594 | void omap_enable_dma_irq(int lch, u16 bits) | 597 | void omap_enable_dma_irq(int lch, u16 bits) |
@@ -632,14 +635,14 @@ static inline void disable_lnk(int lch) | |||
632 | l = p->dma_read(CLNK_CTRL, lch); | 635 | l = p->dma_read(CLNK_CTRL, lch); |
633 | 636 | ||
634 | /* Disable interrupts */ | 637 | /* Disable interrupts */ |
638 | omap_disable_channel_irq(lch); | ||
639 | |||
635 | if (cpu_class_is_omap1()) { | 640 | if (cpu_class_is_omap1()) { |
636 | p->dma_write(0, CICR, lch); | ||
637 | /* Set the STOP_LNK bit */ | 641 | /* Set the STOP_LNK bit */ |
638 | l |= 1 << 14; | 642 | l |= 1 << 14; |
639 | } | 643 | } |
640 | 644 | ||
641 | if (cpu_class_is_omap2()) { | 645 | if (cpu_class_is_omap2()) { |
642 | omap_disable_channel_irq(lch); | ||
643 | /* Clear the ENABLE_LNK bit */ | 646 | /* Clear the ENABLE_LNK bit */ |
644 | l &= ~(1 << 15); | 647 | l &= ~(1 << 15); |
645 | } | 648 | } |
@@ -657,6 +660,9 @@ static inline void omap2_enable_irq_lch(int lch) | |||
657 | return; | 660 | return; |
658 | 661 | ||
659 | spin_lock_irqsave(&dma_chan_lock, flags); | 662 | spin_lock_irqsave(&dma_chan_lock, flags); |
663 | /* clear IRQ STATUS */ | ||
664 | p->dma_write(1 << lch, IRQSTATUS_L0, lch); | ||
665 | /* Enable interrupt */ | ||
660 | val = p->dma_read(IRQENABLE_L0, lch); | 666 | val = p->dma_read(IRQENABLE_L0, lch); |
661 | val |= 1 << lch; | 667 | val |= 1 << lch; |
662 | p->dma_write(val, IRQENABLE_L0, lch); | 668 | p->dma_write(val, IRQENABLE_L0, lch); |
@@ -672,9 +678,12 @@ static inline void omap2_disable_irq_lch(int lch) | |||
672 | return; | 678 | return; |
673 | 679 | ||
674 | spin_lock_irqsave(&dma_chan_lock, flags); | 680 | spin_lock_irqsave(&dma_chan_lock, flags); |
681 | /* Disable interrupt */ | ||
675 | val = p->dma_read(IRQENABLE_L0, lch); | 682 | val = p->dma_read(IRQENABLE_L0, lch); |
676 | val &= ~(1 << lch); | 683 | val &= ~(1 << lch); |
677 | p->dma_write(val, IRQENABLE_L0, lch); | 684 | p->dma_write(val, IRQENABLE_L0, lch); |
685 | /* clear IRQ STATUS */ | ||
686 | p->dma_write(1 << lch, IRQSTATUS_L0, lch); | ||
678 | spin_unlock_irqrestore(&dma_chan_lock, flags); | 687 | spin_unlock_irqrestore(&dma_chan_lock, flags); |
679 | } | 688 | } |
680 | 689 | ||
@@ -745,11 +754,8 @@ int omap_request_dma(int dev_id, const char *dev_name, | |||
745 | } | 754 | } |
746 | 755 | ||
747 | if (cpu_class_is_omap2()) { | 756 | if (cpu_class_is_omap2()) { |
748 | omap2_enable_irq_lch(free_ch); | ||
749 | omap_enable_channel_irq(free_ch); | 757 | omap_enable_channel_irq(free_ch); |
750 | /* Clear the CSR register and IRQ status register */ | 758 | omap2_enable_irq_lch(free_ch); |
751 | p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, free_ch); | ||
752 | p->dma_write(1 << free_ch, IRQSTATUS_L0, 0); | ||
753 | } | 759 | } |
754 | 760 | ||
755 | *dma_ch_out = free_ch; | 761 | *dma_ch_out = free_ch; |
@@ -768,27 +774,19 @@ void omap_free_dma(int lch) | |||
768 | return; | 774 | return; |
769 | } | 775 | } |
770 | 776 | ||
771 | if (cpu_class_is_omap1()) { | 777 | /* Disable interrupt for logical channel */ |
772 | /* Disable all DMA interrupts for the channel. */ | 778 | if (cpu_class_is_omap2()) |
773 | p->dma_write(0, CICR, lch); | ||
774 | /* Make sure the DMA transfer is stopped. */ | ||
775 | p->dma_write(0, CCR, lch); | ||
776 | } | ||
777 | |||
778 | if (cpu_class_is_omap2()) { | ||
779 | omap2_disable_irq_lch(lch); | 779 | omap2_disable_irq_lch(lch); |
780 | 780 | ||
781 | /* Clear the CSR register and IRQ status register */ | 781 | /* Disable all DMA interrupts for the channel. */ |
782 | p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); | 782 | omap_disable_channel_irq(lch); |
783 | p->dma_write(1 << lch, IRQSTATUS_L0, lch); | ||
784 | 783 | ||
785 | /* Disable all DMA interrupts for the channel. */ | 784 | /* Make sure the DMA transfer is stopped. */ |
786 | p->dma_write(0, CICR, lch); | 785 | p->dma_write(0, CCR, lch); |
787 | 786 | ||
788 | /* Make sure the DMA transfer is stopped. */ | 787 | /* Clear registers */ |
789 | p->dma_write(0, CCR, lch); | 788 | if (cpu_class_is_omap2()) |
790 | omap_clear_dma(lch); | 789 | omap_clear_dma(lch); |
791 | } | ||
792 | 790 | ||
793 | spin_lock_irqsave(&dma_chan_lock, flags); | 791 | spin_lock_irqsave(&dma_chan_lock, flags); |
794 | dma_chan[lch].dev_id = -1; | 792 | dma_chan[lch].dev_id = -1; |
@@ -943,8 +941,7 @@ void omap_stop_dma(int lch) | |||
943 | u32 l; | 941 | u32 l; |
944 | 942 | ||
945 | /* Disable all interrupts on the channel */ | 943 | /* Disable all interrupts on the channel */ |
946 | if (cpu_class_is_omap1()) | 944 | omap_disable_channel_irq(lch); |
947 | p->dma_write(0, CICR, lch); | ||
948 | 945 | ||
949 | l = p->dma_read(CCR, lch); | 946 | l = p->dma_read(CCR, lch); |
950 | if (IS_DMA_ERRATA(DMA_ERRATA_i541) && | 947 | if (IS_DMA_ERRATA(DMA_ERRATA_i541) && |
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index 3b0cfeb33d05..626ad8cad7a9 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c | |||
@@ -37,14 +37,16 @@ | |||
37 | 37 | ||
38 | #include <linux/module.h> | 38 | #include <linux/module.h> |
39 | #include <linux/io.h> | 39 | #include <linux/io.h> |
40 | #include <linux/slab.h> | 40 | #include <linux/device.h> |
41 | #include <linux/err.h> | 41 | #include <linux/err.h> |
42 | #include <linux/pm_runtime.h> | 42 | #include <linux/pm_runtime.h> |
43 | 43 | ||
44 | #include <plat/dmtimer.h> | 44 | #include <plat/dmtimer.h> |
45 | #include <plat/omap-pm.h> | ||
45 | 46 | ||
46 | #include <mach/hardware.h> | 47 | #include <mach/hardware.h> |
47 | 48 | ||
49 | static u32 omap_reserved_systimers; | ||
48 | static LIST_HEAD(omap_timer_list); | 50 | static LIST_HEAD(omap_timer_list); |
49 | static DEFINE_SPINLOCK(dm_timer_lock); | 51 | static DEFINE_SPINLOCK(dm_timer_lock); |
50 | 52 | ||
@@ -133,17 +135,22 @@ static void omap_dm_timer_reset(struct omap_dm_timer *timer) | |||
133 | 135 | ||
134 | int omap_dm_timer_prepare(struct omap_dm_timer *timer) | 136 | int omap_dm_timer_prepare(struct omap_dm_timer *timer) |
135 | { | 137 | { |
136 | struct dmtimer_platform_data *pdata = timer->pdev->dev.platform_data; | ||
137 | int ret; | 138 | int ret; |
138 | 139 | ||
139 | timer->fclk = clk_get(&timer->pdev->dev, "fck"); | 140 | /* |
140 | if (WARN_ON_ONCE(IS_ERR_OR_NULL(timer->fclk))) { | 141 | * FIXME: OMAP1 devices do not use the clock framework for dmtimers so |
141 | timer->fclk = NULL; | 142 | * do not call clk_get() for these devices. |
142 | dev_err(&timer->pdev->dev, ": No fclk handle.\n"); | 143 | */ |
143 | return -EINVAL; | 144 | if (!(timer->capability & OMAP_TIMER_NEEDS_RESET)) { |
145 | timer->fclk = clk_get(&timer->pdev->dev, "fck"); | ||
146 | if (WARN_ON_ONCE(IS_ERR_OR_NULL(timer->fclk))) { | ||
147 | timer->fclk = NULL; | ||
148 | dev_err(&timer->pdev->dev, ": No fclk handle.\n"); | ||
149 | return -EINVAL; | ||
150 | } | ||
144 | } | 151 | } |
145 | 152 | ||
146 | if (pdata->needs_manual_reset) | 153 | if (timer->capability & OMAP_TIMER_NEEDS_RESET) |
147 | omap_dm_timer_reset(timer); | 154 | omap_dm_timer_reset(timer); |
148 | 155 | ||
149 | ret = omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ); | 156 | ret = omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ); |
@@ -152,6 +159,21 @@ int omap_dm_timer_prepare(struct omap_dm_timer *timer) | |||
152 | return ret; | 159 | return ret; |
153 | } | 160 | } |
154 | 161 | ||
162 | static inline u32 omap_dm_timer_reserved_systimer(int id) | ||
163 | { | ||
164 | return (omap_reserved_systimers & (1 << (id - 1))) ? 1 : 0; | ||
165 | } | ||
166 | |||
167 | int omap_dm_timer_reserve_systimer(int id) | ||
168 | { | ||
169 | if (omap_dm_timer_reserved_systimer(id)) | ||
170 | return -ENODEV; | ||
171 | |||
172 | omap_reserved_systimers |= (1 << (id - 1)); | ||
173 | |||
174 | return 0; | ||
175 | } | ||
176 | |||
155 | struct omap_dm_timer *omap_dm_timer_request(void) | 177 | struct omap_dm_timer *omap_dm_timer_request(void) |
156 | { | 178 | { |
157 | struct omap_dm_timer *timer = NULL, *t; | 179 | struct omap_dm_timer *timer = NULL, *t; |
@@ -325,10 +347,9 @@ int omap_dm_timer_start(struct omap_dm_timer *timer) | |||
325 | 347 | ||
326 | omap_dm_timer_enable(timer); | 348 | omap_dm_timer_enable(timer); |
327 | 349 | ||
328 | if (timer->loses_context) { | 350 | if (!(timer->capability & OMAP_TIMER_ALWON)) { |
329 | u32 ctx_loss_cnt_after = | 351 | if (omap_pm_get_dev_context_loss_count(&timer->pdev->dev) != |
330 | timer->get_context_loss_count(&timer->pdev->dev); | 352 | timer->ctx_loss_count) |
331 | if (ctx_loss_cnt_after != timer->ctx_loss_count) | ||
332 | omap_timer_restore_context(timer); | 353 | omap_timer_restore_context(timer); |
333 | } | 354 | } |
334 | 355 | ||
@@ -347,20 +368,18 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_start); | |||
347 | int omap_dm_timer_stop(struct omap_dm_timer *timer) | 368 | int omap_dm_timer_stop(struct omap_dm_timer *timer) |
348 | { | 369 | { |
349 | unsigned long rate = 0; | 370 | unsigned long rate = 0; |
350 | struct dmtimer_platform_data *pdata; | ||
351 | 371 | ||
352 | if (unlikely(!timer)) | 372 | if (unlikely(!timer)) |
353 | return -EINVAL; | 373 | return -EINVAL; |
354 | 374 | ||
355 | pdata = timer->pdev->dev.platform_data; | 375 | if (!(timer->capability & OMAP_TIMER_NEEDS_RESET)) |
356 | if (!pdata->needs_manual_reset) | ||
357 | rate = clk_get_rate(timer->fclk); | 376 | rate = clk_get_rate(timer->fclk); |
358 | 377 | ||
359 | __omap_dm_timer_stop(timer, timer->posted, rate); | 378 | __omap_dm_timer_stop(timer, timer->posted, rate); |
360 | 379 | ||
361 | if (timer->loses_context && timer->get_context_loss_count) | 380 | if (!(timer->capability & OMAP_TIMER_ALWON)) |
362 | timer->ctx_loss_count = | 381 | timer->ctx_loss_count = |
363 | timer->get_context_loss_count(&timer->pdev->dev); | 382 | omap_pm_get_dev_context_loss_count(&timer->pdev->dev); |
364 | 383 | ||
365 | /* | 384 | /* |
366 | * Since the register values are computed and written within | 385 | * Since the register values are computed and written within |
@@ -378,6 +397,8 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_stop); | |||
378 | int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source) | 397 | int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source) |
379 | { | 398 | { |
380 | int ret; | 399 | int ret; |
400 | char *parent_name = NULL; | ||
401 | struct clk *fclk, *parent; | ||
381 | struct dmtimer_platform_data *pdata; | 402 | struct dmtimer_platform_data *pdata; |
382 | 403 | ||
383 | if (unlikely(!timer)) | 404 | if (unlikely(!timer)) |
@@ -388,7 +409,49 @@ int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source) | |||
388 | if (source < 0 || source >= 3) | 409 | if (source < 0 || source >= 3) |
389 | return -EINVAL; | 410 | return -EINVAL; |
390 | 411 | ||
391 | ret = pdata->set_timer_src(timer->pdev, source); | 412 | /* |
413 | * FIXME: Used for OMAP1 devices only because they do not currently | ||
414 | * use the clock framework to set the parent clock. To be removed | ||
415 | * once OMAP1 migrated to using clock framework for dmtimers | ||
416 | */ | ||
417 | if (pdata->set_timer_src) | ||
418 | return pdata->set_timer_src(timer->pdev, source); | ||
419 | |||
420 | fclk = clk_get(&timer->pdev->dev, "fck"); | ||
421 | if (IS_ERR_OR_NULL(fclk)) { | ||
422 | pr_err("%s: fck not found\n", __func__); | ||
423 | return -EINVAL; | ||
424 | } | ||
425 | |||
426 | switch (source) { | ||
427 | case OMAP_TIMER_SRC_SYS_CLK: | ||
428 | parent_name = "timer_sys_ck"; | ||
429 | break; | ||
430 | |||
431 | case OMAP_TIMER_SRC_32_KHZ: | ||
432 | parent_name = "timer_32k_ck"; | ||
433 | break; | ||
434 | |||
435 | case OMAP_TIMER_SRC_EXT_CLK: | ||
436 | parent_name = "timer_ext_ck"; | ||
437 | break; | ||
438 | } | ||
439 | |||
440 | parent = clk_get(&timer->pdev->dev, parent_name); | ||
441 | if (IS_ERR_OR_NULL(parent)) { | ||
442 | pr_err("%s: %s not found\n", __func__, parent_name); | ||
443 | ret = -EINVAL; | ||
444 | goto out; | ||
445 | } | ||
446 | |||
447 | ret = clk_set_parent(fclk, parent); | ||
448 | if (IS_ERR_VALUE(ret)) | ||
449 | pr_err("%s: failed to set %s as parent\n", __func__, | ||
450 | parent_name); | ||
451 | |||
452 | clk_put(parent); | ||
453 | out: | ||
454 | clk_put(fclk); | ||
392 | 455 | ||
393 | return ret; | 456 | return ret; |
394 | } | 457 | } |
@@ -431,10 +494,9 @@ int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload, | |||
431 | 494 | ||
432 | omap_dm_timer_enable(timer); | 495 | omap_dm_timer_enable(timer); |
433 | 496 | ||
434 | if (timer->loses_context) { | 497 | if (!(timer->capability & OMAP_TIMER_ALWON)) { |
435 | u32 ctx_loss_cnt_after = | 498 | if (omap_pm_get_dev_context_loss_count(&timer->pdev->dev) != |
436 | timer->get_context_loss_count(&timer->pdev->dev); | 499 | timer->ctx_loss_count) |
437 | if (ctx_loss_cnt_after != timer->ctx_loss_count) | ||
438 | omap_timer_restore_context(timer); | 500 | omap_timer_restore_context(timer); |
439 | } | 501 | } |
440 | 502 | ||
@@ -627,68 +689,57 @@ EXPORT_SYMBOL_GPL(omap_dm_timers_active); | |||
627 | */ | 689 | */ |
628 | static int __devinit omap_dm_timer_probe(struct platform_device *pdev) | 690 | static int __devinit omap_dm_timer_probe(struct platform_device *pdev) |
629 | { | 691 | { |
630 | int ret; | ||
631 | unsigned long flags; | 692 | unsigned long flags; |
632 | struct omap_dm_timer *timer; | 693 | struct omap_dm_timer *timer; |
633 | struct resource *mem, *irq, *ioarea; | 694 | struct resource *mem, *irq; |
695 | struct device *dev = &pdev->dev; | ||
634 | struct dmtimer_platform_data *pdata = pdev->dev.platform_data; | 696 | struct dmtimer_platform_data *pdata = pdev->dev.platform_data; |
635 | 697 | ||
636 | if (!pdata) { | 698 | if (!pdata) { |
637 | dev_err(&pdev->dev, "%s: no platform data.\n", __func__); | 699 | dev_err(dev, "%s: no platform data.\n", __func__); |
638 | return -ENODEV; | 700 | return -ENODEV; |
639 | } | 701 | } |
640 | 702 | ||
641 | irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); | 703 | irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
642 | if (unlikely(!irq)) { | 704 | if (unlikely(!irq)) { |
643 | dev_err(&pdev->dev, "%s: no IRQ resource.\n", __func__); | 705 | dev_err(dev, "%s: no IRQ resource.\n", __func__); |
644 | return -ENODEV; | 706 | return -ENODEV; |
645 | } | 707 | } |
646 | 708 | ||
647 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 709 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
648 | if (unlikely(!mem)) { | 710 | if (unlikely(!mem)) { |
649 | dev_err(&pdev->dev, "%s: no memory resource.\n", __func__); | 711 | dev_err(dev, "%s: no memory resource.\n", __func__); |
650 | return -ENODEV; | 712 | return -ENODEV; |
651 | } | 713 | } |
652 | 714 | ||
653 | ioarea = request_mem_region(mem->start, resource_size(mem), | 715 | timer = devm_kzalloc(dev, sizeof(struct omap_dm_timer), GFP_KERNEL); |
654 | pdev->name); | ||
655 | if (!ioarea) { | ||
656 | dev_err(&pdev->dev, "%s: region already claimed.\n", __func__); | ||
657 | return -EBUSY; | ||
658 | } | ||
659 | |||
660 | timer = kzalloc(sizeof(struct omap_dm_timer), GFP_KERNEL); | ||
661 | if (!timer) { | 716 | if (!timer) { |
662 | dev_err(&pdev->dev, "%s: no memory for omap_dm_timer.\n", | 717 | dev_err(dev, "%s: memory alloc failed!\n", __func__); |
663 | __func__); | 718 | return -ENOMEM; |
664 | ret = -ENOMEM; | ||
665 | goto err_free_ioregion; | ||
666 | } | 719 | } |
667 | 720 | ||
668 | timer->io_base = ioremap(mem->start, resource_size(mem)); | 721 | timer->io_base = devm_request_and_ioremap(dev, mem); |
669 | if (!timer->io_base) { | 722 | if (!timer->io_base) { |
670 | dev_err(&pdev->dev, "%s: ioremap failed.\n", __func__); | 723 | dev_err(dev, "%s: region already claimed.\n", __func__); |
671 | ret = -ENOMEM; | 724 | return -ENOMEM; |
672 | goto err_free_mem; | ||
673 | } | 725 | } |
674 | 726 | ||
675 | timer->id = pdev->id; | 727 | timer->id = pdev->id; |
676 | timer->irq = irq->start; | 728 | timer->irq = irq->start; |
677 | timer->reserved = pdata->reserved; | 729 | timer->reserved = omap_dm_timer_reserved_systimer(timer->id); |
678 | timer->pdev = pdev; | 730 | timer->pdev = pdev; |
679 | timer->loses_context = pdata->loses_context; | 731 | timer->capability = pdata->timer_capability; |
680 | timer->get_context_loss_count = pdata->get_context_loss_count; | ||
681 | 732 | ||
682 | /* Skip pm_runtime_enable for OMAP1 */ | 733 | /* Skip pm_runtime_enable for OMAP1 */ |
683 | if (!pdata->needs_manual_reset) { | 734 | if (!(timer->capability & OMAP_TIMER_NEEDS_RESET)) { |
684 | pm_runtime_enable(&pdev->dev); | 735 | pm_runtime_enable(dev); |
685 | pm_runtime_irq_safe(&pdev->dev); | 736 | pm_runtime_irq_safe(dev); |
686 | } | 737 | } |
687 | 738 | ||
688 | if (!timer->reserved) { | 739 | if (!timer->reserved) { |
689 | pm_runtime_get_sync(&pdev->dev); | 740 | pm_runtime_get_sync(dev); |
690 | __omap_dm_timer_init_regs(timer); | 741 | __omap_dm_timer_init_regs(timer); |
691 | pm_runtime_put(&pdev->dev); | 742 | pm_runtime_put(dev); |
692 | } | 743 | } |
693 | 744 | ||
694 | /* add the timer element to the list */ | 745 | /* add the timer element to the list */ |
@@ -696,17 +747,9 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev) | |||
696 | list_add_tail(&timer->node, &omap_timer_list); | 747 | list_add_tail(&timer->node, &omap_timer_list); |
697 | spin_unlock_irqrestore(&dm_timer_lock, flags); | 748 | spin_unlock_irqrestore(&dm_timer_lock, flags); |
698 | 749 | ||
699 | dev_dbg(&pdev->dev, "Device Probed.\n"); | 750 | dev_dbg(dev, "Device Probed.\n"); |
700 | 751 | ||
701 | return 0; | 752 | return 0; |
702 | |||
703 | err_free_mem: | ||
704 | kfree(timer); | ||
705 | |||
706 | err_free_ioregion: | ||
707 | release_mem_region(mem->start, resource_size(mem)); | ||
708 | |||
709 | return ret; | ||
710 | } | 753 | } |
711 | 754 | ||
712 | /** | 755 | /** |
@@ -727,7 +770,6 @@ static int __devexit omap_dm_timer_remove(struct platform_device *pdev) | |||
727 | list_for_each_entry(timer, &omap_timer_list, node) | 770 | list_for_each_entry(timer, &omap_timer_list, node) |
728 | if (timer->pdev->id == pdev->id) { | 771 | if (timer->pdev->id == pdev->id) { |
729 | list_del(&timer->node); | 772 | list_del(&timer->node); |
730 | kfree(timer); | ||
731 | ret = 0; | 773 | ret = 0; |
732 | break; | 774 | break; |
733 | } | 775 | } |
diff --git a/arch/arm/plat-omap/include/plat/board.h b/arch/arm/plat-omap/include/plat/board.h index 4814c5b65306..e62f20a5c0af 100644 --- a/arch/arm/plat-omap/include/plat/board.h +++ b/arch/arm/plat-omap/include/plat/board.h | |||
@@ -57,44 +57,6 @@ struct omap_camera_sensor_config { | |||
57 | int (*power_off)(void * data); | 57 | int (*power_off)(void * data); |
58 | }; | 58 | }; |
59 | 59 | ||
60 | struct omap_usb_config { | ||
61 | /* Configure drivers according to the connectors on your board: | ||
62 | * - "A" connector (rectagular) | ||
63 | * ... for host/OHCI use, set "register_host". | ||
64 | * - "B" connector (squarish) or "Mini-B" | ||
65 | * ... for device/gadget use, set "register_dev". | ||
66 | * - "Mini-AB" connector (very similar to Mini-B) | ||
67 | * ... for OTG use as device OR host, initialize "otg" | ||
68 | */ | ||
69 | unsigned register_host:1; | ||
70 | unsigned register_dev:1; | ||
71 | u8 otg; /* port number, 1-based: usb1 == 2 */ | ||
72 | |||
73 | u8 hmc_mode; | ||
74 | |||
75 | /* implicitly true if otg: host supports remote wakeup? */ | ||
76 | u8 rwc; | ||
77 | |||
78 | /* signaling pins used to talk to transceiver on usbN: | ||
79 | * 0 == usbN unused | ||
80 | * 2 == usb0-only, using internal transceiver | ||
81 | * 3 == 3 wire bidirectional | ||
82 | * 4 == 4 wire bidirectional | ||
83 | * 6 == 6 wire unidirectional (or TLL) | ||
84 | */ | ||
85 | u8 pins[3]; | ||
86 | |||
87 | struct platform_device *udc_device; | ||
88 | struct platform_device *ohci_device; | ||
89 | struct platform_device *otg_device; | ||
90 | |||
91 | u32 (*usb0_init)(unsigned nwires, unsigned is_device); | ||
92 | u32 (*usb1_init)(unsigned nwires); | ||
93 | u32 (*usb2_init)(unsigned nwires, unsigned alt_pingroup); | ||
94 | |||
95 | int (*ocpi_enable)(void); | ||
96 | }; | ||
97 | |||
98 | struct omap_lcd_config { | 60 | struct omap_lcd_config { |
99 | char panel_name[16]; | 61 | char panel_name[16]; |
100 | char ctrl_name[16]; | 62 | char ctrl_name[16]; |
diff --git a/arch/arm/plat-omap/include/plat/clkdev_omap.h b/arch/arm/plat-omap/include/plat/clkdev_omap.h index d0ed8c443a63..025d85a3ee86 100644 --- a/arch/arm/plat-omap/include/plat/clkdev_omap.h +++ b/arch/arm/plat-omap/include/plat/clkdev_omap.h | |||
@@ -39,6 +39,7 @@ struct omap_clk { | |||
39 | #define CK_443X (1 << 11) | 39 | #define CK_443X (1 << 11) |
40 | #define CK_TI816X (1 << 12) | 40 | #define CK_TI816X (1 << 12) |
41 | #define CK_446X (1 << 13) | 41 | #define CK_446X (1 << 13) |
42 | #define CK_AM33XX (1 << 14) /* AM33xx specific clocks */ | ||
42 | #define CK_1710 (1 << 15) /* 1710 extra for rate selection */ | 43 | #define CK_1710 (1 << 15) /* 1710 extra for rate selection */ |
43 | 44 | ||
44 | 45 | ||
diff --git a/arch/arm/plat-omap/include/plat/clock.h b/arch/arm/plat-omap/include/plat/clock.h index d0ef57c1d71b..656b9862279e 100644 --- a/arch/arm/plat-omap/include/plat/clock.h +++ b/arch/arm/plat-omap/include/plat/clock.h | |||
@@ -156,7 +156,6 @@ struct dpll_data { | |||
156 | u8 min_divider; | 156 | u8 min_divider; |
157 | u16 max_divider; | 157 | u16 max_divider; |
158 | u8 modes; | 158 | u8 modes; |
159 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) | ||
160 | void __iomem *autoidle_reg; | 159 | void __iomem *autoidle_reg; |
161 | void __iomem *idlest_reg; | 160 | void __iomem *idlest_reg; |
162 | u32 autoidle_mask; | 161 | u32 autoidle_mask; |
@@ -167,7 +166,6 @@ struct dpll_data { | |||
167 | u8 auto_recal_bit; | 166 | u8 auto_recal_bit; |
168 | u8 recal_en_bit; | 167 | u8 recal_en_bit; |
169 | u8 recal_st_bit; | 168 | u8 recal_st_bit; |
170 | # endif | ||
171 | u8 flags; | 169 | u8 flags; |
172 | }; | 170 | }; |
173 | 171 | ||
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index 297245dba66e..68b180edcfff 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h | |||
@@ -9,7 +9,7 @@ | |||
9 | * | 9 | * |
10 | * Written by Tony Lindgren <tony.lindgren@nokia.com> | 10 | * Written by Tony Lindgren <tony.lindgren@nokia.com> |
11 | * | 11 | * |
12 | * Added OMAP4 specific defines - Santosh Shilimkar<santosh.shilimkar@ti.com> | 12 | * Added OMAP4/5 specific defines - Santosh Shilimkar<santosh.shilimkar@ti.com> |
13 | * | 13 | * |
14 | * This program is free software; you can redistribute it and/or modify | 14 | * This program is free software; you can redistribute it and/or modify |
15 | * it under the terms of the GNU General Public License as published by | 15 | * it under the terms of the GNU General Public License as published by |
@@ -70,6 +70,7 @@ unsigned int omap_rev(void); | |||
70 | * cpu_is_omap443x(): True for OMAP4430 | 70 | * cpu_is_omap443x(): True for OMAP4430 |
71 | * cpu_is_omap446x(): True for OMAP4460 | 71 | * cpu_is_omap446x(): True for OMAP4460 |
72 | * cpu_is_omap447x(): True for OMAP4470 | 72 | * cpu_is_omap447x(): True for OMAP4470 |
73 | * soc_is_omap543x(): True for OMAP5430, OMAP5432 | ||
73 | */ | 74 | */ |
74 | #define GET_OMAP_CLASS (omap_rev() & 0xff) | 75 | #define GET_OMAP_CLASS (omap_rev() & 0xff) |
75 | 76 | ||
@@ -122,6 +123,7 @@ IS_OMAP_CLASS(24xx, 0x24) | |||
122 | IS_OMAP_CLASS(34xx, 0x34) | 123 | IS_OMAP_CLASS(34xx, 0x34) |
123 | IS_OMAP_CLASS(44xx, 0x44) | 124 | IS_OMAP_CLASS(44xx, 0x44) |
124 | IS_AM_CLASS(35xx, 0x35) | 125 | IS_AM_CLASS(35xx, 0x35) |
126 | IS_OMAP_CLASS(54xx, 0x54) | ||
125 | IS_AM_CLASS(33xx, 0x33) | 127 | IS_AM_CLASS(33xx, 0x33) |
126 | 128 | ||
127 | IS_TI_CLASS(81xx, 0x81) | 129 | IS_TI_CLASS(81xx, 0x81) |
@@ -133,6 +135,7 @@ IS_OMAP_SUBCLASS(363x, 0x363) | |||
133 | IS_OMAP_SUBCLASS(443x, 0x443) | 135 | IS_OMAP_SUBCLASS(443x, 0x443) |
134 | IS_OMAP_SUBCLASS(446x, 0x446) | 136 | IS_OMAP_SUBCLASS(446x, 0x446) |
135 | IS_OMAP_SUBCLASS(447x, 0x447) | 137 | IS_OMAP_SUBCLASS(447x, 0x447) |
138 | IS_OMAP_SUBCLASS(543x, 0x543) | ||
136 | 139 | ||
137 | IS_TI_SUBCLASS(816x, 0x816) | 140 | IS_TI_SUBCLASS(816x, 0x816) |
138 | IS_TI_SUBCLASS(814x, 0x814) | 141 | IS_TI_SUBCLASS(814x, 0x814) |
@@ -150,12 +153,14 @@ IS_AM_SUBCLASS(335x, 0x335) | |||
150 | #define cpu_is_ti816x() 0 | 153 | #define cpu_is_ti816x() 0 |
151 | #define cpu_is_ti814x() 0 | 154 | #define cpu_is_ti814x() 0 |
152 | #define soc_is_am35xx() 0 | 155 | #define soc_is_am35xx() 0 |
153 | #define cpu_is_am33xx() 0 | 156 | #define soc_is_am33xx() 0 |
154 | #define cpu_is_am335x() 0 | 157 | #define soc_is_am335x() 0 |
155 | #define cpu_is_omap44xx() 0 | 158 | #define cpu_is_omap44xx() 0 |
156 | #define cpu_is_omap443x() 0 | 159 | #define cpu_is_omap443x() 0 |
157 | #define cpu_is_omap446x() 0 | 160 | #define cpu_is_omap446x() 0 |
158 | #define cpu_is_omap447x() 0 | 161 | #define cpu_is_omap447x() 0 |
162 | #define soc_is_omap54xx() 0 | ||
163 | #define soc_is_omap543x() 0 | ||
159 | 164 | ||
160 | #if defined(MULTI_OMAP1) | 165 | #if defined(MULTI_OMAP1) |
161 | # if defined(CONFIG_ARCH_OMAP730) | 166 | # if defined(CONFIG_ARCH_OMAP730) |
@@ -238,9 +243,7 @@ IS_AM_SUBCLASS(335x, 0x335) | |||
238 | /* | 243 | /* |
239 | * Macros to detect individual cpu types. | 244 | * Macros to detect individual cpu types. |
240 | * These are only rarely needed. | 245 | * These are only rarely needed. |
241 | * cpu_is_omap330(): True for OMAP330 | 246 | * cpu_is_omap310(): True for OMAP310 |
242 | * cpu_is_omap730(): True for OMAP730 | ||
243 | * cpu_is_omap850(): True for OMAP850 | ||
244 | * cpu_is_omap1510(): True for OMAP1510 | 247 | * cpu_is_omap1510(): True for OMAP1510 |
245 | * cpu_is_omap1610(): True for OMAP1610 | 248 | * cpu_is_omap1610(): True for OMAP1610 |
246 | * cpu_is_omap1611(): True for OMAP1611 | 249 | * cpu_is_omap1611(): True for OMAP1611 |
@@ -252,8 +255,6 @@ IS_AM_SUBCLASS(335x, 0x335) | |||
252 | * cpu_is_omap2423(): True for OMAP2423 | 255 | * cpu_is_omap2423(): True for OMAP2423 |
253 | * cpu_is_omap2430(): True for OMAP2430 | 256 | * cpu_is_omap2430(): True for OMAP2430 |
254 | * cpu_is_omap3430(): True for OMAP3430 | 257 | * cpu_is_omap3430(): True for OMAP3430 |
255 | * cpu_is_omap3505(): True for OMAP3505 | ||
256 | * cpu_is_omap3517(): True for OMAP3517 | ||
257 | */ | 258 | */ |
258 | #define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff) | 259 | #define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff) |
259 | 260 | ||
@@ -264,8 +265,6 @@ static inline int is_omap ##type (void) \ | |||
264 | } | 265 | } |
265 | 266 | ||
266 | IS_OMAP_TYPE(310, 0x0310) | 267 | IS_OMAP_TYPE(310, 0x0310) |
267 | IS_OMAP_TYPE(730, 0x0730) | ||
268 | IS_OMAP_TYPE(850, 0x0850) | ||
269 | IS_OMAP_TYPE(1510, 0x1510) | 268 | IS_OMAP_TYPE(1510, 0x1510) |
270 | IS_OMAP_TYPE(1610, 0x1610) | 269 | IS_OMAP_TYPE(1610, 0x1610) |
271 | IS_OMAP_TYPE(1611, 0x1611) | 270 | IS_OMAP_TYPE(1611, 0x1611) |
@@ -277,12 +276,8 @@ IS_OMAP_TYPE(2422, 0x2422) | |||
277 | IS_OMAP_TYPE(2423, 0x2423) | 276 | IS_OMAP_TYPE(2423, 0x2423) |
278 | IS_OMAP_TYPE(2430, 0x2430) | 277 | IS_OMAP_TYPE(2430, 0x2430) |
279 | IS_OMAP_TYPE(3430, 0x3430) | 278 | IS_OMAP_TYPE(3430, 0x3430) |
280 | IS_OMAP_TYPE(3505, 0x3517) | ||
281 | IS_OMAP_TYPE(3517, 0x3517) | ||
282 | 279 | ||
283 | #define cpu_is_omap310() 0 | 280 | #define cpu_is_omap310() 0 |
284 | #define cpu_is_omap730() 0 | ||
285 | #define cpu_is_omap850() 0 | ||
286 | #define cpu_is_omap1510() 0 | 281 | #define cpu_is_omap1510() 0 |
287 | #define cpu_is_omap1610() 0 | 282 | #define cpu_is_omap1610() 0 |
288 | #define cpu_is_omap5912() 0 | 283 | #define cpu_is_omap5912() 0 |
@@ -293,30 +288,15 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
293 | #define cpu_is_omap2422() 0 | 288 | #define cpu_is_omap2422() 0 |
294 | #define cpu_is_omap2423() 0 | 289 | #define cpu_is_omap2423() 0 |
295 | #define cpu_is_omap2430() 0 | 290 | #define cpu_is_omap2430() 0 |
296 | #define cpu_is_omap3503() 0 | ||
297 | #define cpu_is_omap3515() 0 | ||
298 | #define cpu_is_omap3525() 0 | ||
299 | #define cpu_is_omap3530() 0 | ||
300 | #define cpu_is_omap3505() 0 | ||
301 | #define cpu_is_omap3517() 0 | ||
302 | #define cpu_is_omap3430() 0 | 291 | #define cpu_is_omap3430() 0 |
303 | #define cpu_is_omap3630() 0 | 292 | #define cpu_is_omap3630() 0 |
293 | #define soc_is_omap5430() 0 | ||
304 | 294 | ||
305 | /* | 295 | /* |
306 | * Whether we have MULTI_OMAP1 or not, we still need to distinguish | 296 | * Whether we have MULTI_OMAP1 or not, we still need to distinguish |
307 | * between 730 vs 850, 330 vs. 1510 and 1611B/5912 vs. 1710. | 297 | * between 310 vs. 1510 and 1611B/5912 vs. 1710. |
308 | */ | 298 | */ |
309 | 299 | ||
310 | #if defined(CONFIG_ARCH_OMAP730) | ||
311 | # undef cpu_is_omap730 | ||
312 | # define cpu_is_omap730() is_omap730() | ||
313 | #endif | ||
314 | |||
315 | #if defined(CONFIG_ARCH_OMAP850) | ||
316 | # undef cpu_is_omap850 | ||
317 | # define cpu_is_omap850() is_omap850() | ||
318 | #endif | ||
319 | |||
320 | #if defined(CONFIG_ARCH_OMAP15XX) | 300 | #if defined(CONFIG_ARCH_OMAP15XX) |
321 | # undef cpu_is_omap310 | 301 | # undef cpu_is_omap310 |
322 | # undef cpu_is_omap1510 | 302 | # undef cpu_is_omap1510 |
@@ -350,40 +330,24 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
350 | 330 | ||
351 | #if defined(CONFIG_ARCH_OMAP3) | 331 | #if defined(CONFIG_ARCH_OMAP3) |
352 | # undef cpu_is_omap3430 | 332 | # undef cpu_is_omap3430 |
353 | # undef cpu_is_omap3503 | ||
354 | # undef cpu_is_omap3515 | ||
355 | # undef cpu_is_omap3525 | ||
356 | # undef cpu_is_omap3530 | ||
357 | # undef cpu_is_omap3505 | ||
358 | # undef cpu_is_omap3517 | ||
359 | # undef cpu_is_ti81xx | 333 | # undef cpu_is_ti81xx |
360 | # undef cpu_is_ti816x | 334 | # undef cpu_is_ti816x |
361 | # undef cpu_is_ti814x | 335 | # undef cpu_is_ti814x |
362 | # undef soc_is_am35xx | 336 | # undef soc_is_am35xx |
363 | # undef cpu_is_am33xx | ||
364 | # undef cpu_is_am335x | ||
365 | # define cpu_is_omap3430() is_omap3430() | 337 | # define cpu_is_omap3430() is_omap3430() |
366 | # define cpu_is_omap3503() (cpu_is_omap3430() && \ | ||
367 | (!omap3_has_iva()) && \ | ||
368 | (!omap3_has_sgx())) | ||
369 | # define cpu_is_omap3515() (cpu_is_omap3430() && \ | ||
370 | (!omap3_has_iva()) && \ | ||
371 | (omap3_has_sgx())) | ||
372 | # define cpu_is_omap3525() (cpu_is_omap3430() && \ | ||
373 | (!omap3_has_sgx()) && \ | ||
374 | (omap3_has_iva())) | ||
375 | # define cpu_is_omap3530() (cpu_is_omap3430()) | ||
376 | # define cpu_is_omap3517() is_omap3517() | ||
377 | # define cpu_is_omap3505() (cpu_is_omap3517() && \ | ||
378 | !omap3_has_sgx()) | ||
379 | # undef cpu_is_omap3630 | 338 | # undef cpu_is_omap3630 |
380 | # define cpu_is_omap3630() is_omap363x() | 339 | # define cpu_is_omap3630() is_omap363x() |
381 | # define cpu_is_ti81xx() is_ti81xx() | 340 | # define cpu_is_ti81xx() is_ti81xx() |
382 | # define cpu_is_ti816x() is_ti816x() | 341 | # define cpu_is_ti816x() is_ti816x() |
383 | # define cpu_is_ti814x() is_ti814x() | 342 | # define cpu_is_ti814x() is_ti814x() |
384 | # define soc_is_am35xx() is_am35xx() | 343 | # define soc_is_am35xx() is_am35xx() |
385 | # define cpu_is_am33xx() is_am33xx() | 344 | #endif |
386 | # define cpu_is_am335x() is_am335x() | 345 | |
346 | # if defined(CONFIG_SOC_AM33XX) | ||
347 | # undef soc_is_am33xx | ||
348 | # undef soc_is_am335x | ||
349 | # define soc_is_am33xx() is_am33xx() | ||
350 | # define soc_is_am335x() is_am335x() | ||
387 | #endif | 351 | #endif |
388 | 352 | ||
389 | # if defined(CONFIG_ARCH_OMAP4) | 353 | # if defined(CONFIG_ARCH_OMAP4) |
@@ -397,11 +361,18 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
397 | # define cpu_is_omap447x() is_omap447x() | 361 | # define cpu_is_omap447x() is_omap447x() |
398 | # endif | 362 | # endif |
399 | 363 | ||
364 | # if defined(CONFIG_SOC_OMAP5) | ||
365 | # undef soc_is_omap54xx | ||
366 | # undef soc_is_omap543x | ||
367 | # define soc_is_omap54xx() is_omap54xx() | ||
368 | # define soc_is_omap543x() is_omap543x() | ||
369 | #endif | ||
370 | |||
400 | /* Macros to detect if we have OMAP1 or OMAP2 */ | 371 | /* Macros to detect if we have OMAP1 or OMAP2 */ |
401 | #define cpu_class_is_omap1() (cpu_is_omap7xx() || cpu_is_omap15xx() || \ | 372 | #define cpu_class_is_omap1() (cpu_is_omap7xx() || cpu_is_omap15xx() || \ |
402 | cpu_is_omap16xx()) | 373 | cpu_is_omap16xx()) |
403 | #define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \ | 374 | #define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \ |
404 | cpu_is_omap44xx()) | 375 | cpu_is_omap44xx() || soc_is_omap54xx()) |
405 | 376 | ||
406 | /* Various silicon revisions for omap2 */ | 377 | /* Various silicon revisions for omap2 */ |
407 | #define OMAP242X_CLASS 0x24200024 | 378 | #define OMAP242X_CLASS 0x24200024 |
@@ -424,10 +395,6 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
424 | #define OMAP3630_REV_ES1_1 (OMAP363X_CLASS | (0x1 << 8)) | 395 | #define OMAP3630_REV_ES1_1 (OMAP363X_CLASS | (0x1 << 8)) |
425 | #define OMAP3630_REV_ES1_2 (OMAP363X_CLASS | (0x2 << 8)) | 396 | #define OMAP3630_REV_ES1_2 (OMAP363X_CLASS | (0x2 << 8)) |
426 | 397 | ||
427 | #define OMAP3517_CLASS 0x35170034 | ||
428 | #define OMAP3517_REV_ES1_0 OMAP3517_CLASS | ||
429 | #define OMAP3517_REV_ES1_1 (OMAP3517_CLASS | (0x1 << 8)) | ||
430 | |||
431 | #define TI816X_CLASS 0x81600034 | 398 | #define TI816X_CLASS 0x81600034 |
432 | #define TI8168_REV_ES1_0 TI816X_CLASS | 399 | #define TI8168_REV_ES1_0 TI816X_CLASS |
433 | #define TI8168_REV_ES1_1 (TI816X_CLASS | (0x1 << 8)) | 400 | #define TI8168_REV_ES1_1 (TI816X_CLASS | (0x1 << 8)) |
@@ -441,7 +408,7 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
441 | #define AM35XX_REV_ES1_0 AM35XX_CLASS | 408 | #define AM35XX_REV_ES1_0 AM35XX_CLASS |
442 | #define AM35XX_REV_ES1_1 (AM35XX_CLASS | (0x1 << 8)) | 409 | #define AM35XX_REV_ES1_1 (AM35XX_CLASS | (0x1 << 8)) |
443 | 410 | ||
444 | #define AM335X_CLASS 0x33500034 | 411 | #define AM335X_CLASS 0x33500033 |
445 | #define AM335X_REV_ES1_0 AM335X_CLASS | 412 | #define AM335X_REV_ES1_0 AM335X_CLASS |
446 | 413 | ||
447 | #define OMAP443X_CLASS 0x44300044 | 414 | #define OMAP443X_CLASS 0x44300044 |
@@ -458,9 +425,14 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
458 | #define OMAP447X_CLASS 0x44700044 | 425 | #define OMAP447X_CLASS 0x44700044 |
459 | #define OMAP4470_REV_ES1_0 (OMAP447X_CLASS | (0x10 << 8)) | 426 | #define OMAP4470_REV_ES1_0 (OMAP447X_CLASS | (0x10 << 8)) |
460 | 427 | ||
428 | #define OMAP54XX_CLASS 0x54000054 | ||
429 | #define OMAP5430_REV_ES1_0 (OMAP54XX_CLASS | (0x30 << 16) | (0x10 << 8)) | ||
430 | #define OMAP5432_REV_ES1_0 (OMAP54XX_CLASS | (0x32 << 16) | (0x10 << 8)) | ||
431 | |||
461 | void omap2xxx_check_revision(void); | 432 | void omap2xxx_check_revision(void); |
462 | void omap3xxx_check_revision(void); | 433 | void omap3xxx_check_revision(void); |
463 | void omap4xxx_check_revision(void); | 434 | void omap4xxx_check_revision(void); |
435 | void omap5xxx_check_revision(void); | ||
464 | void omap3xxx_check_features(void); | 436 | void omap3xxx_check_features(void); |
465 | void ti81xx_check_features(void); | 437 | void ti81xx_check_features(void); |
466 | void omap4xxx_check_features(void); | 438 | void omap4xxx_check_features(void); |
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h index 5da73562e486..19e7fa577bd0 100644 --- a/arch/arm/plat-omap/include/plat/dmtimer.h +++ b/arch/arm/plat-omap/include/plat/dmtimer.h | |||
@@ -55,23 +55,17 @@ | |||
55 | #define OMAP_TIMER_TRIGGER_OVERFLOW 0x01 | 55 | #define OMAP_TIMER_TRIGGER_OVERFLOW 0x01 |
56 | #define OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE 0x02 | 56 | #define OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE 0x02 |
57 | 57 | ||
58 | /* | ||
59 | * IP revision identifier so that Highlander IP | ||
60 | * in OMAP4 can be distinguished. | ||
61 | */ | ||
62 | #define OMAP_TIMER_IP_VERSION_1 0x1 | ||
63 | |||
64 | /* timer capabilities used in hwmod database */ | 58 | /* timer capabilities used in hwmod database */ |
65 | #define OMAP_TIMER_SECURE 0x80000000 | 59 | #define OMAP_TIMER_SECURE 0x80000000 |
66 | #define OMAP_TIMER_ALWON 0x40000000 | 60 | #define OMAP_TIMER_ALWON 0x40000000 |
67 | #define OMAP_TIMER_HAS_PWM 0x20000000 | 61 | #define OMAP_TIMER_HAS_PWM 0x20000000 |
62 | #define OMAP_TIMER_NEEDS_RESET 0x10000000 | ||
68 | 63 | ||
69 | struct omap_timer_capability_dev_attr { | 64 | struct omap_timer_capability_dev_attr { |
70 | u32 timer_capability; | 65 | u32 timer_capability; |
71 | }; | 66 | }; |
72 | 67 | ||
73 | struct omap_dm_timer; | 68 | struct omap_dm_timer; |
74 | struct clk; | ||
75 | 69 | ||
76 | struct timer_regs { | 70 | struct timer_regs { |
77 | u32 tidr; | 71 | u32 tidr; |
@@ -96,16 +90,12 @@ struct timer_regs { | |||
96 | }; | 90 | }; |
97 | 91 | ||
98 | struct dmtimer_platform_data { | 92 | struct dmtimer_platform_data { |
93 | /* set_timer_src - Only used for OMAP1 devices */ | ||
99 | int (*set_timer_src)(struct platform_device *pdev, int source); | 94 | int (*set_timer_src)(struct platform_device *pdev, int source); |
100 | int timer_ip_version; | 95 | u32 timer_capability; |
101 | u32 needs_manual_reset:1; | ||
102 | bool reserved; | ||
103 | |||
104 | bool loses_context; | ||
105 | |||
106 | int (*get_context_loss_count)(struct device *dev); | ||
107 | }; | 96 | }; |
108 | 97 | ||
98 | int omap_dm_timer_reserve_systimer(int id); | ||
109 | struct omap_dm_timer *omap_dm_timer_request(void); | 99 | struct omap_dm_timer *omap_dm_timer_request(void); |
110 | struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); | 100 | struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); |
111 | int omap_dm_timer_free(struct omap_dm_timer *timer); | 101 | int omap_dm_timer_free(struct omap_dm_timer *timer); |
@@ -272,13 +262,11 @@ struct omap_dm_timer { | |||
272 | unsigned reserved:1; | 262 | unsigned reserved:1; |
273 | unsigned posted:1; | 263 | unsigned posted:1; |
274 | struct timer_regs context; | 264 | struct timer_regs context; |
275 | bool loses_context; | ||
276 | int ctx_loss_count; | 265 | int ctx_loss_count; |
277 | int revision; | 266 | int revision; |
267 | u32 capability; | ||
278 | struct platform_device *pdev; | 268 | struct platform_device *pdev; |
279 | struct list_head node; | 269 | struct list_head node; |
280 | |||
281 | int (*get_context_loss_count)(struct device *dev); | ||
282 | }; | 270 | }; |
283 | 271 | ||
284 | int omap_dm_timer_prepare(struct omap_dm_timer *timer); | 272 | int omap_dm_timer_prepare(struct omap_dm_timer *timer); |
diff --git a/arch/arm/plat-omap/include/plat/dsp.h b/arch/arm/plat-omap/include/plat/dsp.h index 9c604b390f9f..5927709b1908 100644 --- a/arch/arm/plat-omap/include/plat/dsp.h +++ b/arch/arm/plat-omap/include/plat/dsp.h | |||
@@ -18,6 +18,9 @@ struct omap_dsp_platform_data { | |||
18 | u32 (*dsp_cm_read)(s16 , u16); | 18 | u32 (*dsp_cm_read)(s16 , u16); |
19 | u32 (*dsp_cm_rmw_bits)(u32, u32, s16, s16); | 19 | u32 (*dsp_cm_rmw_bits)(u32, u32, s16, s16); |
20 | 20 | ||
21 | void (*set_bootaddr)(u32); | ||
22 | void (*set_bootmode)(u8); | ||
23 | |||
21 | phys_addr_t phys_mempool_base; | 24 | phys_addr_t phys_mempool_base; |
22 | phys_addr_t phys_mempool_size; | 25 | phys_addr_t phys_mempool_size; |
23 | }; | 26 | }; |
diff --git a/arch/arm/plat-omap/include/plat/hardware.h b/arch/arm/plat-omap/include/plat/hardware.h index e897978371c2..ddbde38e1e33 100644 --- a/arch/arm/plat-omap/include/plat/hardware.h +++ b/arch/arm/plat-omap/include/plat/hardware.h | |||
@@ -288,5 +288,6 @@ | |||
288 | #include <plat/omap44xx.h> | 288 | #include <plat/omap44xx.h> |
289 | #include <plat/ti81xx.h> | 289 | #include <plat/ti81xx.h> |
290 | #include <plat/am33xx.h> | 290 | #include <plat/am33xx.h> |
291 | #include <plat/omap54xx.h> | ||
291 | 292 | ||
292 | #endif /* __ASM_ARCH_OMAP_HARDWARE_H */ | 293 | #endif /* __ASM_ARCH_OMAP_HARDWARE_H */ |
diff --git a/arch/arm/plat-omap/include/plat/mmc.h b/arch/arm/plat-omap/include/plat/mmc.h index a7754a886d42..5493bd95da5e 100644 --- a/arch/arm/plat-omap/include/plat/mmc.h +++ b/arch/arm/plat-omap/include/plat/mmc.h | |||
@@ -172,8 +172,7 @@ struct omap_mmc_platform_data { | |||
172 | extern void omap_mmc_notify_cover_event(struct device *dev, int slot, | 172 | extern void omap_mmc_notify_cover_event(struct device *dev, int slot, |
173 | int is_closed); | 173 | int is_closed); |
174 | 174 | ||
175 | #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \ | 175 | #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) |
176 | defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) | ||
177 | void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, | 176 | void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, |
178 | int nr_controllers); | 177 | int nr_controllers); |
179 | void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data); | 178 | void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data); |
@@ -185,7 +184,6 @@ static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, | |||
185 | static inline void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data) | 184 | static inline void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data) |
186 | { | 185 | { |
187 | } | 186 | } |
188 | |||
189 | #endif | 187 | #endif |
190 | 188 | ||
191 | extern int omap_msdi_reset(struct omap_hwmod *oh); | 189 | extern int omap_msdi_reset(struct omap_hwmod *oh); |
diff --git a/arch/arm/plat-omap/include/plat/multi.h b/arch/arm/plat-omap/include/plat/multi.h index 999ffba2690c..045e320f1067 100644 --- a/arch/arm/plat-omap/include/plat/multi.h +++ b/arch/arm/plat-omap/include/plat/multi.h | |||
@@ -99,4 +99,13 @@ | |||
99 | # endif | 99 | # endif |
100 | #endif | 100 | #endif |
101 | 101 | ||
102 | #ifdef CONFIG_SOC_OMAP5 | ||
103 | # ifdef OMAP_NAME | ||
104 | # undef MULTI_OMAP2 | ||
105 | # define MULTI_OMAP2 | ||
106 | # else | ||
107 | # define OMAP_NAME omap5 | ||
108 | # endif | ||
109 | #endif | ||
110 | |||
102 | #endif /* __PLAT_OMAP_MULTI_H */ | 111 | #endif /* __PLAT_OMAP_MULTI_H */ |
diff --git a/arch/arm/plat-omap/include/plat/mux.h b/arch/arm/plat-omap/include/plat/mux.h index aeba71796ad9..323948959200 100644 --- a/arch/arm/plat-omap/include/plat/mux.h +++ b/arch/arm/plat-omap/include/plat/mux.h | |||
@@ -99,7 +99,7 @@ | |||
99 | 99 | ||
100 | /* | 100 | /* |
101 | * OMAP730/850 has a slightly different config for the pin mux. | 101 | * OMAP730/850 has a slightly different config for the pin mux. |
102 | * - config regs are the OMAP7XX_IO_CONF_x regs (see omap730.h) regs and | 102 | * - config regs are the OMAP7XX_IO_CONF_x regs (see omap7xx.h) regs and |
103 | * not the FUNC_MUX_CTRL_x regs from hardware.h | 103 | * not the FUNC_MUX_CTRL_x regs from hardware.h |
104 | * - for pull-up/down, only has one enable bit which is is in the same register | 104 | * - for pull-up/down, only has one enable bit which is is in the same register |
105 | * as mux config | 105 | * as mux config |
diff --git a/arch/arm/plat-omap/include/plat/omap-secure.h b/arch/arm/plat-omap/include/plat/omap-secure.h index 8c7994ce9869..0e4acd2d2deb 100644 --- a/arch/arm/plat-omap/include/plat/omap-secure.h +++ b/arch/arm/plat-omap/include/plat/omap-secure.h | |||
@@ -3,12 +3,7 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) | ||
7 | extern int omap_secure_ram_reserve_memblock(void); | 6 | extern int omap_secure_ram_reserve_memblock(void); |
8 | #else | ||
9 | static inline void omap_secure_ram_reserve_memblock(void) | ||
10 | { } | ||
11 | #endif | ||
12 | 7 | ||
13 | #ifdef CONFIG_OMAP4_ERRATA_I688 | 8 | #ifdef CONFIG_OMAP4_ERRATA_I688 |
14 | extern int omap_barrier_reserve_memblock(void); | 9 | extern int omap_barrier_reserve_memblock(void); |
diff --git a/arch/arm/plat-omap/include/plat/omap54xx.h b/arch/arm/plat-omap/include/plat/omap54xx.h new file mode 100644 index 000000000000..a2582bb3cab3 --- /dev/null +++ b/arch/arm/plat-omap/include/plat/omap54xx.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /*: | ||
2 | * Address mappings and base address for OMAP5 interconnects | ||
3 | * and peripherals. | ||
4 | * | ||
5 | * Copyright (C) 2012 Texas Instruments | ||
6 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
7 | * Sricharan <r.sricharan@ti.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | #ifndef __ASM_SOC_OMAP54XX_H | ||
14 | #define __ASM_SOC_OMAP54XX_H | ||
15 | |||
16 | /* | ||
17 | * Please place only base defines here and put the rest in device | ||
18 | * specific headers. | ||
19 | */ | ||
20 | #define L4_54XX_BASE 0x4a000000 | ||
21 | #define L4_WK_54XX_BASE 0x4ae00000 | ||
22 | #define L4_PER_54XX_BASE 0x48000000 | ||
23 | #define L3_54XX_BASE 0x44000000 | ||
24 | #define OMAP54XX_32KSYNCT_BASE 0x4ae04000 | ||
25 | #define OMAP54XX_CM_CORE_AON_BASE 0x4a004000 | ||
26 | #define OMAP54XX_CM_CORE_BASE 0x4a008000 | ||
27 | #define OMAP54XX_PRM_BASE 0x4ae06000 | ||
28 | #define OMAP54XX_PRCM_MPU_BASE 0x48243000 | ||
29 | #define OMAP54XX_SCM_BASE 0x4a002000 | ||
30 | #define OMAP54XX_CTRL_BASE 0x4a002800 | ||
31 | |||
32 | #endif /* __ASM_SOC_OMAP555554XX_H */ | ||
diff --git a/arch/arm/plat-omap/include/plat/omap730.h b/arch/arm/plat-omap/include/plat/omap730.h deleted file mode 100644 index 14272bc1a6fd..000000000000 --- a/arch/arm/plat-omap/include/plat/omap730.h +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* arch/arm/plat-omap/include/mach/omap730.h | ||
2 | * | ||
3 | * Hardware definitions for TI OMAP730 processor. | ||
4 | * | ||
5 | * Cleanup for Linux-2.6 by Dirk Behme <dirk.behme@de.bosch.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ASM_ARCH_OMAP730_H | ||
29 | #define __ASM_ARCH_OMAP730_H | ||
30 | |||
31 | /* | ||
32 | * ---------------------------------------------------------------------------- | ||
33 | * Base addresses | ||
34 | * ---------------------------------------------------------------------------- | ||
35 | */ | ||
36 | |||
37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
38 | |||
39 | #define OMAP730_DSP_BASE 0xE0000000 | ||
40 | #define OMAP730_DSP_SIZE 0x50000 | ||
41 | #define OMAP730_DSP_START 0xE0000000 | ||
42 | |||
43 | #define OMAP730_DSPREG_BASE 0xE1000000 | ||
44 | #define OMAP730_DSPREG_SIZE SZ_128K | ||
45 | #define OMAP730_DSPREG_START 0xE1000000 | ||
46 | |||
47 | /* | ||
48 | * ---------------------------------------------------------------------------- | ||
49 | * OMAP730 specific configuration registers | ||
50 | * ---------------------------------------------------------------------------- | ||
51 | */ | ||
52 | #define OMAP730_CONFIG_BASE 0xfffe1000 | ||
53 | #define OMAP730_IO_CONF_0 0xfffe1070 | ||
54 | #define OMAP730_IO_CONF_1 0xfffe1074 | ||
55 | #define OMAP730_IO_CONF_2 0xfffe1078 | ||
56 | #define OMAP730_IO_CONF_3 0xfffe107c | ||
57 | #define OMAP730_IO_CONF_4 0xfffe1080 | ||
58 | #define OMAP730_IO_CONF_5 0xfffe1084 | ||
59 | #define OMAP730_IO_CONF_6 0xfffe1088 | ||
60 | #define OMAP730_IO_CONF_7 0xfffe108c | ||
61 | #define OMAP730_IO_CONF_8 0xfffe1090 | ||
62 | #define OMAP730_IO_CONF_9 0xfffe1094 | ||
63 | #define OMAP730_IO_CONF_10 0xfffe1098 | ||
64 | #define OMAP730_IO_CONF_11 0xfffe109c | ||
65 | #define OMAP730_IO_CONF_12 0xfffe10a0 | ||
66 | #define OMAP730_IO_CONF_13 0xfffe10a4 | ||
67 | |||
68 | #define OMAP730_MODE_1 0xfffe1010 | ||
69 | #define OMAP730_MODE_2 0xfffe1014 | ||
70 | |||
71 | /* CSMI specials: in terms of base + offset */ | ||
72 | #define OMAP730_MODE2_OFFSET 0x14 | ||
73 | |||
74 | /* | ||
75 | * ---------------------------------------------------------------------------- | ||
76 | * OMAP730 traffic controller configuration registers | ||
77 | * ---------------------------------------------------------------------------- | ||
78 | */ | ||
79 | #define OMAP730_FLASH_CFG_0 0xfffecc10 | ||
80 | #define OMAP730_FLASH_ACFG_0 0xfffecc50 | ||
81 | #define OMAP730_FLASH_CFG_1 0xfffecc14 | ||
82 | #define OMAP730_FLASH_ACFG_1 0xfffecc54 | ||
83 | |||
84 | /* | ||
85 | * ---------------------------------------------------------------------------- | ||
86 | * OMAP730 DSP control registers | ||
87 | * ---------------------------------------------------------------------------- | ||
88 | */ | ||
89 | #define OMAP730_ICR_BASE 0xfffbb800 | ||
90 | #define OMAP730_DSP_M_CTL 0xfffbb804 | ||
91 | #define OMAP730_DSP_MMU_BASE 0xfffed200 | ||
92 | |||
93 | /* | ||
94 | * ---------------------------------------------------------------------------- | ||
95 | * OMAP730 PCC_UPLD configuration registers | ||
96 | * ---------------------------------------------------------------------------- | ||
97 | */ | ||
98 | #define OMAP730_PCC_UPLD_CTRL_BASE (0xfffe0900) | ||
99 | #define OMAP730_PCC_UPLD_CTRL (OMAP730_PCC_UPLD_CTRL_BASE + 0x00) | ||
100 | |||
101 | #endif /* __ASM_ARCH_OMAP730_H */ | ||
102 | |||
diff --git a/arch/arm/plat-omap/include/plat/omap850.h b/arch/arm/plat-omap/include/plat/omap850.h deleted file mode 100644 index c33f67981712..000000000000 --- a/arch/arm/plat-omap/include/plat/omap850.h +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* arch/arm/plat-omap/include/mach/omap850.h | ||
2 | * | ||
3 | * Hardware definitions for TI OMAP850 processor. | ||
4 | * | ||
5 | * Derived from omap730.h by Zebediah C. McClure <zmc@lurian.net> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ASM_ARCH_OMAP850_H | ||
29 | #define __ASM_ARCH_OMAP850_H | ||
30 | |||
31 | /* | ||
32 | * ---------------------------------------------------------------------------- | ||
33 | * Base addresses | ||
34 | * ---------------------------------------------------------------------------- | ||
35 | */ | ||
36 | |||
37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
38 | |||
39 | #define OMAP850_DSP_BASE 0xE0000000 | ||
40 | #define OMAP850_DSP_SIZE 0x50000 | ||
41 | #define OMAP850_DSP_START 0xE0000000 | ||
42 | |||
43 | #define OMAP850_DSPREG_BASE 0xE1000000 | ||
44 | #define OMAP850_DSPREG_SIZE SZ_128K | ||
45 | #define OMAP850_DSPREG_START 0xE1000000 | ||
46 | |||
47 | /* | ||
48 | * ---------------------------------------------------------------------------- | ||
49 | * OMAP850 specific configuration registers | ||
50 | * ---------------------------------------------------------------------------- | ||
51 | */ | ||
52 | #define OMAP850_CONFIG_BASE 0xfffe1000 | ||
53 | #define OMAP850_IO_CONF_0 0xfffe1070 | ||
54 | #define OMAP850_IO_CONF_1 0xfffe1074 | ||
55 | #define OMAP850_IO_CONF_2 0xfffe1078 | ||
56 | #define OMAP850_IO_CONF_3 0xfffe107c | ||
57 | #define OMAP850_IO_CONF_4 0xfffe1080 | ||
58 | #define OMAP850_IO_CONF_5 0xfffe1084 | ||
59 | #define OMAP850_IO_CONF_6 0xfffe1088 | ||
60 | #define OMAP850_IO_CONF_7 0xfffe108c | ||
61 | #define OMAP850_IO_CONF_8 0xfffe1090 | ||
62 | #define OMAP850_IO_CONF_9 0xfffe1094 | ||
63 | #define OMAP850_IO_CONF_10 0xfffe1098 | ||
64 | #define OMAP850_IO_CONF_11 0xfffe109c | ||
65 | #define OMAP850_IO_CONF_12 0xfffe10a0 | ||
66 | #define OMAP850_IO_CONF_13 0xfffe10a4 | ||
67 | |||
68 | #define OMAP850_MODE_1 0xfffe1010 | ||
69 | #define OMAP850_MODE_2 0xfffe1014 | ||
70 | |||
71 | /* CSMI specials: in terms of base + offset */ | ||
72 | #define OMAP850_MODE2_OFFSET 0x14 | ||
73 | |||
74 | /* | ||
75 | * ---------------------------------------------------------------------------- | ||
76 | * OMAP850 traffic controller configuration registers | ||
77 | * ---------------------------------------------------------------------------- | ||
78 | */ | ||
79 | #define OMAP850_FLASH_CFG_0 0xfffecc10 | ||
80 | #define OMAP850_FLASH_ACFG_0 0xfffecc50 | ||
81 | #define OMAP850_FLASH_CFG_1 0xfffecc14 | ||
82 | #define OMAP850_FLASH_ACFG_1 0xfffecc54 | ||
83 | |||
84 | /* | ||
85 | * ---------------------------------------------------------------------------- | ||
86 | * OMAP850 DSP control registers | ||
87 | * ---------------------------------------------------------------------------- | ||
88 | */ | ||
89 | #define OMAP850_ICR_BASE 0xfffbb800 | ||
90 | #define OMAP850_DSP_M_CTL 0xfffbb804 | ||
91 | #define OMAP850_DSP_MMU_BASE 0xfffed200 | ||
92 | |||
93 | /* | ||
94 | * ---------------------------------------------------------------------------- | ||
95 | * OMAP850 PCC_UPLD configuration registers | ||
96 | * ---------------------------------------------------------------------------- | ||
97 | */ | ||
98 | #define OMAP850_PCC_UPLD_CTRL_BASE (0xfffe0900) | ||
99 | #define OMAP850_PCC_UPLD_CTRL (OMAP850_PCC_UPLD_CTRL_BASE + 0x00) | ||
100 | |||
101 | #endif /* __ASM_ARCH_OMAP850_H */ | ||
102 | |||
diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index c835b7194ff5..6132972aff37 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h | |||
@@ -41,6 +41,7 @@ struct omap_device; | |||
41 | 41 | ||
42 | extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type1; | 42 | extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type1; |
43 | extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2; | 43 | extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2; |
44 | extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type3; | ||
44 | 45 | ||
45 | /* | 46 | /* |
46 | * OCP SYSCONFIG bit shifts/masks TYPE1. These are for IPs compliant | 47 | * OCP SYSCONFIG bit shifts/masks TYPE1. These are for IPs compliant |
@@ -69,6 +70,17 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2; | |||
69 | #define SYSC_TYPE2_SIDLEMODE_MASK (0x3 << SYSC_TYPE2_SIDLEMODE_SHIFT) | 70 | #define SYSC_TYPE2_SIDLEMODE_MASK (0x3 << SYSC_TYPE2_SIDLEMODE_SHIFT) |
70 | #define SYSC_TYPE2_MIDLEMODE_SHIFT 4 | 71 | #define SYSC_TYPE2_MIDLEMODE_SHIFT 4 |
71 | #define SYSC_TYPE2_MIDLEMODE_MASK (0x3 << SYSC_TYPE2_MIDLEMODE_SHIFT) | 72 | #define SYSC_TYPE2_MIDLEMODE_MASK (0x3 << SYSC_TYPE2_MIDLEMODE_SHIFT) |
73 | #define SYSC_TYPE2_DMADISABLE_SHIFT 16 | ||
74 | #define SYSC_TYPE2_DMADISABLE_MASK (0x1 << SYSC_TYPE2_DMADISABLE_SHIFT) | ||
75 | |||
76 | /* | ||
77 | * OCP SYSCONFIG bit shifts/masks TYPE3. | ||
78 | * This is applicable for some IPs present in AM33XX | ||
79 | */ | ||
80 | #define SYSC_TYPE3_SIDLEMODE_SHIFT 0 | ||
81 | #define SYSC_TYPE3_SIDLEMODE_MASK (0x3 << SYSC_TYPE3_SIDLEMODE_SHIFT) | ||
82 | #define SYSC_TYPE3_MIDLEMODE_SHIFT 2 | ||
83 | #define SYSC_TYPE3_MIDLEMODE_MASK (0x3 << SYSC_TYPE3_MIDLEMODE_SHIFT) | ||
72 | 84 | ||
73 | /* OCP SYSSTATUS bit shifts/masks */ | 85 | /* OCP SYSSTATUS bit shifts/masks */ |
74 | #define SYSS_RESETDONE_SHIFT 0 | 86 | #define SYSS_RESETDONE_SHIFT 0 |
@@ -283,6 +295,7 @@ struct omap_hwmod_ocp_if { | |||
283 | #define SYSS_HAS_RESET_STATUS (1 << 7) | 295 | #define SYSS_HAS_RESET_STATUS (1 << 7) |
284 | #define SYSC_NO_CACHE (1 << 8) /* XXX SW flag, belongs elsewhere */ | 296 | #define SYSC_NO_CACHE (1 << 8) /* XXX SW flag, belongs elsewhere */ |
285 | #define SYSC_HAS_RESET_STATUS (1 << 9) | 297 | #define SYSC_HAS_RESET_STATUS (1 << 9) |
298 | #define SYSC_HAS_DMADISABLE (1 << 10) | ||
286 | 299 | ||
287 | /* omap_hwmod_sysconfig.clockact flags */ | 300 | /* omap_hwmod_sysconfig.clockact flags */ |
288 | #define CLOCKACT_TEST_BOTH 0x0 | 301 | #define CLOCKACT_TEST_BOTH 0x0 |
@@ -298,6 +311,7 @@ struct omap_hwmod_ocp_if { | |||
298 | * @enwkup_shift: Offset of the enawakeup bit | 311 | * @enwkup_shift: Offset of the enawakeup bit |
299 | * @srst_shift: Offset of the softreset bit | 312 | * @srst_shift: Offset of the softreset bit |
300 | * @autoidle_shift: Offset of the autoidle bit | 313 | * @autoidle_shift: Offset of the autoidle bit |
314 | * @dmadisable_shift: Offset of the dmadisable bit | ||
301 | */ | 315 | */ |
302 | struct omap_hwmod_sysc_fields { | 316 | struct omap_hwmod_sysc_fields { |
303 | u8 midle_shift; | 317 | u8 midle_shift; |
@@ -306,6 +320,7 @@ struct omap_hwmod_sysc_fields { | |||
306 | u8 enwkup_shift; | 320 | u8 enwkup_shift; |
307 | u8 srst_shift; | 321 | u8 srst_shift; |
308 | u8 autoidle_shift; | 322 | u8 autoidle_shift; |
323 | u8 dmadisable_shift; | ||
309 | }; | 324 | }; |
310 | 325 | ||
311 | /** | 326 | /** |
@@ -374,11 +389,13 @@ struct omap_hwmod_omap2_prcm { | |||
374 | * struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data | 389 | * struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data |
375 | * @clkctrl_reg: PRCM address of the clock control register | 390 | * @clkctrl_reg: PRCM address of the clock control register |
376 | * @rstctrl_reg: address of the XXX_RSTCTRL register located in the PRM | 391 | * @rstctrl_reg: address of the XXX_RSTCTRL register located in the PRM |
392 | * @rstst_reg: (AM33XX only) address of the XXX_RSTST register in the PRM | ||
377 | * @submodule_wkdep_bit: bit shift of the WKDEP range | 393 | * @submodule_wkdep_bit: bit shift of the WKDEP range |
378 | */ | 394 | */ |
379 | struct omap_hwmod_omap4_prcm { | 395 | struct omap_hwmod_omap4_prcm { |
380 | u16 clkctrl_offs; | 396 | u16 clkctrl_offs; |
381 | u16 rstctrl_offs; | 397 | u16 rstctrl_offs; |
398 | u16 rstst_offs; | ||
382 | u16 context_offs; | 399 | u16 context_offs; |
383 | u8 submodule_wkdep_bit; | 400 | u8 submodule_wkdep_bit; |
384 | u8 modulemode; | 401 | u8 modulemode; |
@@ -629,6 +646,10 @@ int omap_hwmod_no_setup_reset(struct omap_hwmod *oh); | |||
629 | 646 | ||
630 | int omap_hwmod_pad_route_irq(struct omap_hwmod *oh, int pad_idx, int irq_idx); | 647 | int omap_hwmod_pad_route_irq(struct omap_hwmod *oh, int pad_idx, int irq_idx); |
631 | 648 | ||
649 | extern void __init omap_hwmod_init(void); | ||
650 | |||
651 | const char *omap_hwmod_get_main_clk(struct omap_hwmod *oh); | ||
652 | |||
632 | /* | 653 | /* |
633 | * Chip variant-specific hwmod init routines - XXX should be converted | 654 | * Chip variant-specific hwmod init routines - XXX should be converted |
634 | * to use initcalls once the initial boot ordering is straightened out | 655 | * to use initcalls once the initial boot ordering is straightened out |
diff --git a/arch/arm/plat-omap/include/plat/sdrc.h b/arch/arm/plat-omap/include/plat/sdrc.h index 9bb978ecd884..36d6a7666216 100644 --- a/arch/arm/plat-omap/include/plat/sdrc.h +++ b/arch/arm/plat-omap/include/plat/sdrc.h | |||
@@ -123,7 +123,7 @@ struct omap_sdrc_params { | |||
123 | u32 mr; | 123 | u32 mr; |
124 | }; | 124 | }; |
125 | 125 | ||
126 | #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) | 126 | #ifdef CONFIG_SOC_HAS_OMAP2_SDRC |
127 | void omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0, | 127 | void omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0, |
128 | struct omap_sdrc_params *sdrc_cs1); | 128 | struct omap_sdrc_params *sdrc_cs1); |
129 | #else | 129 | #else |
diff --git a/arch/arm/plat-omap/include/plat/serial.h b/arch/arm/plat-omap/include/plat/serial.h index b073e5f2b190..65fce44dce34 100644 --- a/arch/arm/plat-omap/include/plat/serial.h +++ b/arch/arm/plat-omap/include/plat/serial.h | |||
@@ -60,6 +60,17 @@ | |||
60 | /* AM3505/3517 UART4 */ | 60 | /* AM3505/3517 UART4 */ |
61 | #define AM35XX_UART4_BASE 0x4809E000 /* Only on AM3505/3517 */ | 61 | #define AM35XX_UART4_BASE 0x4809E000 /* Only on AM3505/3517 */ |
62 | 62 | ||
63 | /* AM33XX serial port */ | ||
64 | #define AM33XX_UART1_BASE 0x44E09000 | ||
65 | |||
66 | /* OMAP5 serial ports */ | ||
67 | #define OMAP5_UART1_BASE OMAP2_UART1_BASE | ||
68 | #define OMAP5_UART2_BASE OMAP2_UART2_BASE | ||
69 | #define OMAP5_UART3_BASE OMAP4_UART3_BASE | ||
70 | #define OMAP5_UART4_BASE OMAP4_UART4_BASE | ||
71 | #define OMAP5_UART5_BASE 0x48066000 | ||
72 | #define OMAP5_UART6_BASE 0x48068000 | ||
73 | |||
63 | /* External port on Zoom2/3 */ | 74 | /* External port on Zoom2/3 */ |
64 | #define ZOOM_UART_BASE 0x10000000 | 75 | #define ZOOM_UART_BASE 0x10000000 |
65 | #define ZOOM_UART_VIRT 0xfa400000 | 76 | #define ZOOM_UART_VIRT 0xfa400000 |
@@ -93,6 +104,9 @@ | |||
93 | #define TI81XXUART1 81 | 104 | #define TI81XXUART1 81 |
94 | #define TI81XXUART2 82 | 105 | #define TI81XXUART2 82 |
95 | #define TI81XXUART3 83 | 106 | #define TI81XXUART3 83 |
107 | #define AM33XXUART1 84 | ||
108 | #define OMAP5UART3 OMAP4UART3 | ||
109 | #define OMAP5UART4 OMAP4UART4 | ||
96 | #define ZOOM_UART 95 /* Only on zoom2/3 */ | 110 | #define ZOOM_UART 95 /* Only on zoom2/3 */ |
97 | 111 | ||
98 | /* This is only used by 8250.c for omap1510 */ | 112 | /* This is only used by 8250.c for omap1510 */ |
diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h index cc3f11ba7a99..b8d19a136781 100644 --- a/arch/arm/plat-omap/include/plat/uncompress.h +++ b/arch/arm/plat-omap/include/plat/uncompress.h | |||
@@ -95,6 +95,9 @@ static inline void flush(void) | |||
95 | _DEBUG_LL_ENTRY(mach, OMAP4_UART##p##_BASE, OMAP_PORT_SHIFT, \ | 95 | _DEBUG_LL_ENTRY(mach, OMAP4_UART##p##_BASE, OMAP_PORT_SHIFT, \ |
96 | OMAP4UART##p) | 96 | OMAP4UART##p) |
97 | 97 | ||
98 | #define DEBUG_LL_OMAP5(p, mach) \ | ||
99 | _DEBUG_LL_ENTRY(mach, OMAP5_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
100 | OMAP5UART##p) | ||
98 | /* Zoom2/3 shift is different for UART1 and external port */ | 101 | /* Zoom2/3 shift is different for UART1 and external port */ |
99 | #define DEBUG_LL_ZOOM(mach) \ | 102 | #define DEBUG_LL_ZOOM(mach) \ |
100 | _DEBUG_LL_ENTRY(mach, ZOOM_UART_BASE, ZOOM_PORT_SHIFT, ZOOM_UART) | 103 | _DEBUG_LL_ENTRY(mach, ZOOM_UART_BASE, ZOOM_PORT_SHIFT, ZOOM_UART) |
@@ -103,6 +106,10 @@ static inline void flush(void) | |||
103 | _DEBUG_LL_ENTRY(mach, TI81XX_UART##p##_BASE, OMAP_PORT_SHIFT, \ | 106 | _DEBUG_LL_ENTRY(mach, TI81XX_UART##p##_BASE, OMAP_PORT_SHIFT, \ |
104 | TI81XXUART##p) | 107 | TI81XXUART##p) |
105 | 108 | ||
109 | #define DEBUG_LL_AM33XX(p, mach) \ | ||
110 | _DEBUG_LL_ENTRY(mach, AM33XX_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
111 | AM33XXUART##p) | ||
112 | |||
106 | static inline void __arch_decomp_setup(unsigned long arch_id) | 113 | static inline void __arch_decomp_setup(unsigned long arch_id) |
107 | { | 114 | { |
108 | int port = 0; | 115 | int port = 0; |
@@ -173,6 +180,9 @@ static inline void __arch_decomp_setup(unsigned long arch_id) | |||
173 | DEBUG_LL_OMAP4(3, omap_4430sdp); | 180 | DEBUG_LL_OMAP4(3, omap_4430sdp); |
174 | DEBUG_LL_OMAP4(3, omap4_panda); | 181 | DEBUG_LL_OMAP4(3, omap4_panda); |
175 | 182 | ||
183 | /* omap5 based boards using UART3 */ | ||
184 | DEBUG_LL_OMAP5(3, omap5_sevm); | ||
185 | |||
176 | /* zoom2/3 external uart */ | 186 | /* zoom2/3 external uart */ |
177 | DEBUG_LL_ZOOM(omap_zoom2); | 187 | DEBUG_LL_ZOOM(omap_zoom2); |
178 | DEBUG_LL_ZOOM(omap_zoom3); | 188 | DEBUG_LL_ZOOM(omap_zoom3); |
@@ -183,6 +193,8 @@ static inline void __arch_decomp_setup(unsigned long arch_id) | |||
183 | /* TI8148 base boards using UART1 */ | 193 | /* TI8148 base boards using UART1 */ |
184 | DEBUG_LL_TI81XX(1, ti8148evm); | 194 | DEBUG_LL_TI81XX(1, ti8148evm); |
185 | 195 | ||
196 | /* AM33XX base boards using UART1 */ | ||
197 | DEBUG_LL_AM33XX(1, am335xevm); | ||
186 | } while (0); | 198 | } while (0); |
187 | } | 199 | } |
188 | 200 | ||
diff --git a/arch/arm/plat-omap/include/plat/usb.h b/arch/arm/plat-omap/include/plat/usb.h index 762eeb0626c1..548a4c8d63df 100644 --- a/arch/arm/plat-omap/include/plat/usb.h +++ b/arch/arm/plat-omap/include/plat/usb.h | |||
@@ -44,6 +44,8 @@ struct usbhs_omap_board_data { | |||
44 | struct regulator *regulator[OMAP3_HS_USB_PORTS]; | 44 | struct regulator *regulator[OMAP3_HS_USB_PORTS]; |
45 | }; | 45 | }; |
46 | 46 | ||
47 | #ifdef CONFIG_ARCH_OMAP2PLUS | ||
48 | |||
47 | struct ehci_hcd_omap_platform_data { | 49 | struct ehci_hcd_omap_platform_data { |
48 | enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS]; | 50 | enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS]; |
49 | int reset_gpio_port[OMAP3_HS_USB_PORTS]; | 51 | int reset_gpio_port[OMAP3_HS_USB_PORTS]; |
@@ -64,26 +66,6 @@ struct usbhs_omap_platform_data { | |||
64 | }; | 66 | }; |
65 | /*-------------------------------------------------------------------------*/ | 67 | /*-------------------------------------------------------------------------*/ |
66 | 68 | ||
67 | #define OMAP1_OTG_BASE 0xfffb0400 | ||
68 | #define OMAP1_UDC_BASE 0xfffb4000 | ||
69 | #define OMAP1_OHCI_BASE 0xfffba000 | ||
70 | |||
71 | #define OMAP2_OHCI_BASE 0x4805e000 | ||
72 | #define OMAP2_UDC_BASE 0x4805e200 | ||
73 | #define OMAP2_OTG_BASE 0x4805e300 | ||
74 | |||
75 | #ifdef CONFIG_ARCH_OMAP1 | ||
76 | |||
77 | #define OTG_BASE OMAP1_OTG_BASE | ||
78 | #define UDC_BASE OMAP1_UDC_BASE | ||
79 | #define OMAP_OHCI_BASE OMAP1_OHCI_BASE | ||
80 | |||
81 | #else | ||
82 | |||
83 | #define OTG_BASE OMAP2_OTG_BASE | ||
84 | #define UDC_BASE OMAP2_UDC_BASE | ||
85 | #define OMAP_OHCI_BASE OMAP2_OHCI_BASE | ||
86 | |||
87 | struct omap_musb_board_data { | 69 | struct omap_musb_board_data { |
88 | u8 interface_type; | 70 | u8 interface_type; |
89 | u8 mode; | 71 | u8 mode; |
@@ -107,44 +89,6 @@ extern int omap4430_phy_init(struct device *dev); | |||
107 | extern int omap4430_phy_exit(struct device *dev); | 89 | extern int omap4430_phy_exit(struct device *dev); |
108 | extern int omap4430_phy_suspend(struct device *dev, int suspend); | 90 | extern int omap4430_phy_suspend(struct device *dev, int suspend); |
109 | 91 | ||
110 | /* | ||
111 | * NOTE: Please update omap USB drivers to use ioremap + read/write | ||
112 | */ | ||
113 | |||
114 | #define OMAP2_L4_IO_OFFSET 0xb2000000 | ||
115 | #define OMAP2_L4_IO_ADDRESS(pa) IOMEM((pa) + OMAP2_L4_IO_OFFSET) | ||
116 | |||
117 | static inline u8 omap_readb(u32 pa) | ||
118 | { | ||
119 | return __raw_readb(OMAP2_L4_IO_ADDRESS(pa)); | ||
120 | } | ||
121 | |||
122 | static inline u16 omap_readw(u32 pa) | ||
123 | { | ||
124 | return __raw_readw(OMAP2_L4_IO_ADDRESS(pa)); | ||
125 | } | ||
126 | |||
127 | static inline u32 omap_readl(u32 pa) | ||
128 | { | ||
129 | return __raw_readl(OMAP2_L4_IO_ADDRESS(pa)); | ||
130 | } | ||
131 | |||
132 | static inline void omap_writeb(u8 v, u32 pa) | ||
133 | { | ||
134 | __raw_writeb(v, OMAP2_L4_IO_ADDRESS(pa)); | ||
135 | } | ||
136 | |||
137 | |||
138 | static inline void omap_writew(u16 v, u32 pa) | ||
139 | { | ||
140 | __raw_writew(v, OMAP2_L4_IO_ADDRESS(pa)); | ||
141 | } | ||
142 | |||
143 | static inline void omap_writel(u32 v, u32 pa) | ||
144 | { | ||
145 | __raw_writel(v, OMAP2_L4_IO_ADDRESS(pa)); | ||
146 | } | ||
147 | |||
148 | #endif | 92 | #endif |
149 | 93 | ||
150 | extern void am35x_musb_reset(void); | 94 | extern void am35x_musb_reset(void); |
@@ -153,142 +97,6 @@ extern void am35x_musb_clear_irq(void); | |||
153 | extern void am35x_set_mode(u8 musb_mode); | 97 | extern void am35x_set_mode(u8 musb_mode); |
154 | extern void ti81xx_musb_phy_power(u8 on); | 98 | extern void ti81xx_musb_phy_power(u8 on); |
155 | 99 | ||
156 | /* | ||
157 | * FIXME correct answer depends on hmc_mode, | ||
158 | * as does (on omap1) any nonzero value for config->otg port number | ||
159 | */ | ||
160 | #ifdef CONFIG_USB_GADGET_OMAP | ||
161 | #define is_usb0_device(config) 1 | ||
162 | #else | ||
163 | #define is_usb0_device(config) 0 | ||
164 | #endif | ||
165 | |||
166 | void omap_otg_init(struct omap_usb_config *config); | ||
167 | |||
168 | #if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) | ||
169 | void omap1_usb_init(struct omap_usb_config *pdata); | ||
170 | #else | ||
171 | static inline void omap1_usb_init(struct omap_usb_config *pdata) | ||
172 | { | ||
173 | } | ||
174 | #endif | ||
175 | |||
176 | #if defined(CONFIG_ARCH_OMAP_OTG) || defined(CONFIG_ARCH_OMAP_OTG_MODULE) | ||
177 | void omap2_usbfs_init(struct omap_usb_config *pdata); | ||
178 | #else | ||
179 | static inline void omap2_usbfs_init(struct omap_usb_config *pdata) | ||
180 | { | ||
181 | } | ||
182 | #endif | ||
183 | |||
184 | /*-------------------------------------------------------------------------*/ | ||
185 | |||
186 | /* | ||
187 | * OTG and transceiver registers, for OMAPs starting with ARM926 | ||
188 | */ | ||
189 | #define OTG_REV (OTG_BASE + 0x00) | ||
190 | #define OTG_SYSCON_1 (OTG_BASE + 0x04) | ||
191 | # define USB2_TRX_MODE(w) (((w)>>24)&0x07) | ||
192 | # define USB1_TRX_MODE(w) (((w)>>20)&0x07) | ||
193 | # define USB0_TRX_MODE(w) (((w)>>16)&0x07) | ||
194 | # define OTG_IDLE_EN (1 << 15) | ||
195 | # define HST_IDLE_EN (1 << 14) | ||
196 | # define DEV_IDLE_EN (1 << 13) | ||
197 | # define OTG_RESET_DONE (1 << 2) | ||
198 | # define OTG_SOFT_RESET (1 << 1) | ||
199 | #define OTG_SYSCON_2 (OTG_BASE + 0x08) | ||
200 | # define OTG_EN (1 << 31) | ||
201 | # define USBX_SYNCHRO (1 << 30) | ||
202 | # define OTG_MST16 (1 << 29) | ||
203 | # define SRP_GPDATA (1 << 28) | ||
204 | # define SRP_GPDVBUS (1 << 27) | ||
205 | # define SRP_GPUVBUS(w) (((w)>>24)&0x07) | ||
206 | # define A_WAIT_VRISE(w) (((w)>>20)&0x07) | ||
207 | # define B_ASE_BRST(w) (((w)>>16)&0x07) | ||
208 | # define SRP_DPW (1 << 14) | ||
209 | # define SRP_DATA (1 << 13) | ||
210 | # define SRP_VBUS (1 << 12) | ||
211 | # define OTG_PADEN (1 << 10) | ||
212 | # define HMC_PADEN (1 << 9) | ||
213 | # define UHOST_EN (1 << 8) | ||
214 | # define HMC_TLLSPEED (1 << 7) | ||
215 | # define HMC_TLLATTACH (1 << 6) | ||
216 | # define OTG_HMC(w) (((w)>>0)&0x3f) | ||
217 | #define OTG_CTRL (OTG_BASE + 0x0c) | ||
218 | # define OTG_USB2_EN (1 << 29) | ||
219 | # define OTG_USB2_DP (1 << 28) | ||
220 | # define OTG_USB2_DM (1 << 27) | ||
221 | # define OTG_USB1_EN (1 << 26) | ||
222 | # define OTG_USB1_DP (1 << 25) | ||
223 | # define OTG_USB1_DM (1 << 24) | ||
224 | # define OTG_USB0_EN (1 << 23) | ||
225 | # define OTG_USB0_DP (1 << 22) | ||
226 | # define OTG_USB0_DM (1 << 21) | ||
227 | # define OTG_ASESSVLD (1 << 20) | ||
228 | # define OTG_BSESSEND (1 << 19) | ||
229 | # define OTG_BSESSVLD (1 << 18) | ||
230 | # define OTG_VBUSVLD (1 << 17) | ||
231 | # define OTG_ID (1 << 16) | ||
232 | # define OTG_DRIVER_SEL (1 << 15) | ||
233 | # define OTG_A_SETB_HNPEN (1 << 12) | ||
234 | # define OTG_A_BUSREQ (1 << 11) | ||
235 | # define OTG_B_HNPEN (1 << 9) | ||
236 | # define OTG_B_BUSREQ (1 << 8) | ||
237 | # define OTG_BUSDROP (1 << 7) | ||
238 | # define OTG_PULLDOWN (1 << 5) | ||
239 | # define OTG_PULLUP (1 << 4) | ||
240 | # define OTG_DRV_VBUS (1 << 3) | ||
241 | # define OTG_PD_VBUS (1 << 2) | ||
242 | # define OTG_PU_VBUS (1 << 1) | ||
243 | # define OTG_PU_ID (1 << 0) | ||
244 | #define OTG_IRQ_EN (OTG_BASE + 0x10) /* 16-bit */ | ||
245 | # define DRIVER_SWITCH (1 << 15) | ||
246 | # define A_VBUS_ERR (1 << 13) | ||
247 | # define A_REQ_TMROUT (1 << 12) | ||
248 | # define A_SRP_DETECT (1 << 11) | ||
249 | # define B_HNP_FAIL (1 << 10) | ||
250 | # define B_SRP_TMROUT (1 << 9) | ||
251 | # define B_SRP_DONE (1 << 8) | ||
252 | # define B_SRP_STARTED (1 << 7) | ||
253 | # define OPRT_CHG (1 << 0) | ||
254 | #define OTG_IRQ_SRC (OTG_BASE + 0x14) /* 16-bit */ | ||
255 | // same bits as in IRQ_EN | ||
256 | #define OTG_OUTCTRL (OTG_BASE + 0x18) /* 16-bit */ | ||
257 | # define OTGVPD (1 << 14) | ||
258 | # define OTGVPU (1 << 13) | ||
259 | # define OTGPUID (1 << 12) | ||
260 | # define USB2VDR (1 << 10) | ||
261 | # define USB2PDEN (1 << 9) | ||
262 | # define USB2PUEN (1 << 8) | ||
263 | # define USB1VDR (1 << 6) | ||
264 | # define USB1PDEN (1 << 5) | ||
265 | # define USB1PUEN (1 << 4) | ||
266 | # define USB0VDR (1 << 2) | ||
267 | # define USB0PDEN (1 << 1) | ||
268 | # define USB0PUEN (1 << 0) | ||
269 | #define OTG_TEST (OTG_BASE + 0x20) /* 16-bit */ | ||
270 | #define OTG_VENDOR_CODE (OTG_BASE + 0xfc) /* 16-bit */ | ||
271 | |||
272 | /*-------------------------------------------------------------------------*/ | ||
273 | |||
274 | /* OMAP1 */ | ||
275 | #define USB_TRANSCEIVER_CTRL (0xfffe1000 + 0x0064) | ||
276 | # define CONF_USB2_UNI_R (1 << 8) | ||
277 | # define CONF_USB1_UNI_R (1 << 7) | ||
278 | # define CONF_USB_PORT0_R(x) (((x)>>4)&0x7) | ||
279 | # define CONF_USB0_ISOLATE_R (1 << 3) | ||
280 | # define CONF_USB_PWRDN_DM_R (1 << 2) | ||
281 | # define CONF_USB_PWRDN_DP_R (1 << 1) | ||
282 | |||
283 | /* OMAP2 */ | ||
284 | # define USB_UNIDIR 0x0 | ||
285 | # define USB_UNIDIR_TLL 0x1 | ||
286 | # define USB_BIDIR 0x2 | ||
287 | # define USB_BIDIR_TLL 0x3 | ||
288 | # define USBTXWRMODEI(port, x) ((x) << (22 - (port * 2))) | ||
289 | # define USBT2TLL5PI (1 << 17) | ||
290 | # define USB0PUENACTLOI (1 << 16) | ||
291 | # define USBSTANDBYCTRL (1 << 15) | ||
292 | /* AM35x */ | 100 | /* AM35x */ |
293 | /* USB 2.0 PHY Control */ | 101 | /* USB 2.0 PHY Control */ |
294 | #define CONF2_PHY_GPIOMODE (1 << 23) | 102 | #define CONF2_PHY_GPIOMODE (1 << 23) |
diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h index 0a6a482ec014..5be4d5def427 100644 --- a/arch/arm/plat-omap/include/plat/voltage.h +++ b/arch/arm/plat-omap/include/plat/voltage.h | |||
@@ -11,10 +11,29 @@ | |||
11 | #ifndef __ARCH_ARM_OMAP_VOLTAGE_H | 11 | #ifndef __ARCH_ARM_OMAP_VOLTAGE_H |
12 | #define __ARCH_ARM_OMAP_VOLTAGE_H | 12 | #define __ARCH_ARM_OMAP_VOLTAGE_H |
13 | 13 | ||
14 | /** | ||
15 | * struct omap_volt_data - Omap voltage specific data. | ||
16 | * @voltage_nominal: The possible voltage value in uV | ||
17 | * @sr_efuse_offs: The offset of the efuse register(from system | ||
18 | * control module base address) from where to read | ||
19 | * the n-target value for the smartreflex module. | ||
20 | * @sr_errminlimit: Error min limit value for smartreflex. This value | ||
21 | * differs at differnet opp and thus is linked | ||
22 | * with voltage. | ||
23 | * @vp_errorgain: Error gain value for the voltage processor. This | ||
24 | * field also differs according to the voltage/opp. | ||
25 | */ | ||
26 | struct omap_volt_data { | ||
27 | u32 volt_nominal; | ||
28 | u32 sr_efuse_offs; | ||
29 | u8 sr_errminlimit; | ||
30 | u8 vp_errgain; | ||
31 | }; | ||
14 | struct voltagedomain; | 32 | struct voltagedomain; |
15 | 33 | ||
16 | struct voltagedomain *voltdm_lookup(const char *name); | 34 | struct voltagedomain *voltdm_lookup(const char *name); |
17 | int voltdm_scale(struct voltagedomain *voltdm, unsigned long target_volt); | 35 | int voltdm_scale(struct voltagedomain *voltdm, unsigned long target_volt); |
18 | unsigned long voltdm_get_voltage(struct voltagedomain *voltdm); | 36 | unsigned long voltdm_get_voltage(struct voltagedomain *voltdm); |
19 | 37 | struct omap_volt_data *omap_voltage_get_voltdata(struct voltagedomain *voltdm, | |
38 | unsigned long volt); | ||
20 | #endif | 39 | #endif |
diff --git a/arch/arm/plat-omap/mailbox.c b/arch/arm/plat-omap/mailbox.c index ad32621aa52e..5e13c3884aa4 100644 --- a/arch/arm/plat-omap/mailbox.c +++ b/arch/arm/plat-omap/mailbox.c | |||
@@ -282,6 +282,8 @@ static int omap_mbox_startup(struct omap_mbox *mbox) | |||
282 | } | 282 | } |
283 | mbox->rxq = mq; | 283 | mbox->rxq = mq; |
284 | mq->mbox = mbox; | 284 | mq->mbox = mbox; |
285 | |||
286 | omap_mbox_enable_irq(mbox, IRQ_RX); | ||
285 | } | 287 | } |
286 | mutex_unlock(&mbox_configured_lock); | 288 | mutex_unlock(&mbox_configured_lock); |
287 | return 0; | 289 | return 0; |
@@ -305,6 +307,7 @@ static void omap_mbox_fini(struct omap_mbox *mbox) | |||
305 | mutex_lock(&mbox_configured_lock); | 307 | mutex_lock(&mbox_configured_lock); |
306 | 308 | ||
307 | if (!--mbox->use_count) { | 309 | if (!--mbox->use_count) { |
310 | omap_mbox_disable_irq(mbox, IRQ_RX); | ||
308 | free_irq(mbox->irq, mbox); | 311 | free_irq(mbox->irq, mbox); |
309 | tasklet_kill(&mbox->txq->tasklet); | 312 | tasklet_kill(&mbox->txq->tasklet); |
310 | flush_work_sync(&mbox->rxq->work); | 313 | flush_work_sync(&mbox->rxq->work); |
@@ -338,13 +341,15 @@ struct omap_mbox *omap_mbox_get(const char *name, struct notifier_block *nb) | |||
338 | if (!mbox) | 341 | if (!mbox) |
339 | return ERR_PTR(-ENOENT); | 342 | return ERR_PTR(-ENOENT); |
340 | 343 | ||
341 | ret = omap_mbox_startup(mbox); | ||
342 | if (ret) | ||
343 | return ERR_PTR(-ENODEV); | ||
344 | |||
345 | if (nb) | 344 | if (nb) |
346 | blocking_notifier_chain_register(&mbox->notifier, nb); | 345 | blocking_notifier_chain_register(&mbox->notifier, nb); |
347 | 346 | ||
347 | ret = omap_mbox_startup(mbox); | ||
348 | if (ret) { | ||
349 | blocking_notifier_chain_unregister(&mbox->notifier, nb); | ||
350 | return ERR_PTR(-ENODEV); | ||
351 | } | ||
352 | |||
348 | return mbox; | 353 | return mbox; |
349 | } | 354 | } |
350 | EXPORT_SYMBOL(omap_mbox_get); | 355 | EXPORT_SYMBOL(omap_mbox_get); |
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c index 477363c163ec..766181cb5c95 100644 --- a/arch/arm/plat-omap/sram.c +++ b/arch/arm/plat-omap/sram.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * Copyright (C) 2005 Nokia Corporation | 6 | * Copyright (C) 2005 Nokia Corporation |
7 | * Written by Tony Lindgren <tony@atomide.com> | 7 | * Written by Tony Lindgren <tony@atomide.com> |
8 | * | 8 | * |
9 | * Copyright (C) 2009 Texas Instruments | 9 | * Copyright (C) 2009-2012 Texas Instruments |
10 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | 10 | * Added OMAP4/5 support - Santosh Shilimkar <santosh.shilimkar@ti.com> |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
13 | * it under the terms of the GNU General Public License version 2 as | 13 | * it under the terms of the GNU General Public License version 2 as |
@@ -44,6 +44,7 @@ | |||
44 | #else | 44 | #else |
45 | #define OMAP4_SRAM_PUB_PA (OMAP4_SRAM_PA + 0x4000) | 45 | #define OMAP4_SRAM_PUB_PA (OMAP4_SRAM_PA + 0x4000) |
46 | #endif | 46 | #endif |
47 | #define OMAP5_SRAM_PA 0x40300000 | ||
47 | 48 | ||
48 | #if defined(CONFIG_ARCH_OMAP2PLUS) | 49 | #if defined(CONFIG_ARCH_OMAP2PLUS) |
49 | #define SRAM_BOOTLOADER_SZ 0x00 | 50 | #define SRAM_BOOTLOADER_SZ 0x00 |
@@ -85,7 +86,7 @@ static int is_sram_locked(void) | |||
85 | __raw_writel(0xCFDE, OMAP24XX_VA_READPERM0); /* all i-read */ | 86 | __raw_writel(0xCFDE, OMAP24XX_VA_READPERM0); /* all i-read */ |
86 | __raw_writel(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */ | 87 | __raw_writel(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */ |
87 | } | 88 | } |
88 | if (cpu_is_omap34xx() && !cpu_is_am33xx()) { | 89 | if (cpu_is_omap34xx()) { |
89 | __raw_writel(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */ | 90 | __raw_writel(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */ |
90 | __raw_writel(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */ | 91 | __raw_writel(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */ |
91 | __raw_writel(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */ | 92 | __raw_writel(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */ |
@@ -118,12 +119,15 @@ static void __init omap_detect_sram(void) | |||
118 | } else if (cpu_is_omap44xx()) { | 119 | } else if (cpu_is_omap44xx()) { |
119 | omap_sram_start = OMAP4_SRAM_PUB_PA; | 120 | omap_sram_start = OMAP4_SRAM_PUB_PA; |
120 | omap_sram_size = 0xa000; /* 40K */ | 121 | omap_sram_size = 0xa000; /* 40K */ |
122 | } else if (soc_is_omap54xx()) { | ||
123 | omap_sram_start = OMAP5_SRAM_PA; | ||
124 | omap_sram_size = SZ_128K; /* 128KB */ | ||
121 | } else { | 125 | } else { |
122 | omap_sram_start = OMAP2_SRAM_PUB_PA; | 126 | omap_sram_start = OMAP2_SRAM_PUB_PA; |
123 | omap_sram_size = 0x800; /* 2K */ | 127 | omap_sram_size = 0x800; /* 2K */ |
124 | } | 128 | } |
125 | } else { | 129 | } else { |
126 | if (cpu_is_am33xx()) { | 130 | if (soc_is_am33xx()) { |
127 | omap_sram_start = AM33XX_SRAM_PA; | 131 | omap_sram_start = AM33XX_SRAM_PA; |
128 | omap_sram_size = 0x10000; /* 64K */ | 132 | omap_sram_size = 0x10000; /* 64K */ |
129 | } else if (cpu_is_omap34xx()) { | 133 | } else if (cpu_is_omap34xx()) { |
@@ -132,6 +136,9 @@ static void __init omap_detect_sram(void) | |||
132 | } else if (cpu_is_omap44xx()) { | 136 | } else if (cpu_is_omap44xx()) { |
133 | omap_sram_start = OMAP4_SRAM_PA; | 137 | omap_sram_start = OMAP4_SRAM_PA; |
134 | omap_sram_size = 0xe000; /* 56K */ | 138 | omap_sram_size = 0xe000; /* 56K */ |
139 | } else if (soc_is_omap54xx()) { | ||
140 | omap_sram_start = OMAP5_SRAM_PA; | ||
141 | omap_sram_size = SZ_128K; /* 128KB */ | ||
135 | } else { | 142 | } else { |
136 | omap_sram_start = OMAP2_SRAM_PA; | 143 | omap_sram_start = OMAP2_SRAM_PA; |
137 | if (cpu_is_omap242x()) | 144 | if (cpu_is_omap242x()) |
@@ -386,7 +393,7 @@ int __init omap_sram_init(void) | |||
386 | omap242x_sram_init(); | 393 | omap242x_sram_init(); |
387 | else if (cpu_is_omap2430()) | 394 | else if (cpu_is_omap2430()) |
388 | omap243x_sram_init(); | 395 | omap243x_sram_init(); |
389 | else if (cpu_is_am33xx()) | 396 | else if (soc_is_am33xx()) |
390 | am33xx_sram_init(); | 397 | am33xx_sram_init(); |
391 | else if (cpu_is_omap34xx()) | 398 | else if (cpu_is_omap34xx()) |
392 | omap34xx_sram_init(); | 399 | omap34xx_sram_init(); |
diff --git a/arch/arm/plat-omap/usb.c b/arch/arm/plat-omap/usb.c deleted file mode 100644 index daa0327381b5..000000000000 --- a/arch/arm/plat-omap/usb.c +++ /dev/null | |||
@@ -1,145 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/plat-omap/usb.c -- platform level USB initialization | ||
3 | * | ||
4 | * Copyright (C) 2004 Texas Instruments, Inc. | ||
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 as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #undef DEBUG | ||
22 | |||
23 | #include <linux/module.h> | ||
24 | #include <linux/kernel.h> | ||
25 | #include <linux/init.h> | ||
26 | #include <linux/platform_device.h> | ||
27 | #include <linux/io.h> | ||
28 | |||
29 | #include <plat/usb.h> | ||
30 | #include <plat/board.h> | ||
31 | |||
32 | #include <mach/hardware.h> | ||
33 | |||
34 | #ifdef CONFIG_ARCH_OMAP_OTG | ||
35 | |||
36 | void __init | ||
37 | omap_otg_init(struct omap_usb_config *config) | ||
38 | { | ||
39 | u32 syscon; | ||
40 | int alt_pingroup = 0; | ||
41 | |||
42 | /* NOTE: no bus or clock setup (yet?) */ | ||
43 | |||
44 | syscon = omap_readl(OTG_SYSCON_1) & 0xffff; | ||
45 | if (!(syscon & OTG_RESET_DONE)) | ||
46 | pr_debug("USB resets not complete?\n"); | ||
47 | |||
48 | //omap_writew(0, OTG_IRQ_EN); | ||
49 | |||
50 | /* pin muxing and transceiver pinouts */ | ||
51 | if (config->pins[0] > 2) /* alt pingroup 2 */ | ||
52 | alt_pingroup = 1; | ||
53 | syscon |= config->usb0_init(config->pins[0], is_usb0_device(config)); | ||
54 | syscon |= config->usb1_init(config->pins[1]); | ||
55 | syscon |= config->usb2_init(config->pins[2], alt_pingroup); | ||
56 | pr_debug("OTG_SYSCON_1 = %08x\n", omap_readl(OTG_SYSCON_1)); | ||
57 | omap_writel(syscon, OTG_SYSCON_1); | ||
58 | |||
59 | syscon = config->hmc_mode; | ||
60 | syscon |= USBX_SYNCHRO | (4 << 16) /* B_ASE0_BRST */; | ||
61 | #ifdef CONFIG_USB_OTG | ||
62 | if (config->otg) | ||
63 | syscon |= OTG_EN; | ||
64 | #endif | ||
65 | if (cpu_class_is_omap1()) | ||
66 | pr_debug("USB_TRANSCEIVER_CTRL = %03x\n", | ||
67 | omap_readl(USB_TRANSCEIVER_CTRL)); | ||
68 | pr_debug("OTG_SYSCON_2 = %08x\n", omap_readl(OTG_SYSCON_2)); | ||
69 | omap_writel(syscon, OTG_SYSCON_2); | ||
70 | |||
71 | printk("USB: hmc %d", config->hmc_mode); | ||
72 | if (!alt_pingroup) | ||
73 | printk(", usb2 alt %d wires", config->pins[2]); | ||
74 | else if (config->pins[0]) | ||
75 | printk(", usb0 %d wires%s", config->pins[0], | ||
76 | is_usb0_device(config) ? " (dev)" : ""); | ||
77 | if (config->pins[1]) | ||
78 | printk(", usb1 %d wires", config->pins[1]); | ||
79 | if (!alt_pingroup && config->pins[2]) | ||
80 | printk(", usb2 %d wires", config->pins[2]); | ||
81 | if (config->otg) | ||
82 | printk(", Mini-AB on usb%d", config->otg - 1); | ||
83 | printk("\n"); | ||
84 | |||
85 | if (cpu_class_is_omap1()) { | ||
86 | u16 w; | ||
87 | |||
88 | /* leave USB clocks/controllers off until needed */ | ||
89 | w = omap_readw(ULPD_SOFT_REQ); | ||
90 | w &= ~SOFT_USB_CLK_REQ; | ||
91 | omap_writew(w, ULPD_SOFT_REQ); | ||
92 | |||
93 | w = omap_readw(ULPD_CLOCK_CTRL); | ||
94 | w &= ~USB_MCLK_EN; | ||
95 | w |= DIS_USB_PVCI_CLK; | ||
96 | omap_writew(w, ULPD_CLOCK_CTRL); | ||
97 | } | ||
98 | syscon = omap_readl(OTG_SYSCON_1); | ||
99 | syscon |= HST_IDLE_EN|DEV_IDLE_EN|OTG_IDLE_EN; | ||
100 | |||
101 | #ifdef CONFIG_USB_GADGET_OMAP | ||
102 | if (config->otg || config->register_dev) { | ||
103 | struct platform_device *udc_device = config->udc_device; | ||
104 | int status; | ||
105 | |||
106 | syscon &= ~DEV_IDLE_EN; | ||
107 | udc_device->dev.platform_data = config; | ||
108 | status = platform_device_register(udc_device); | ||
109 | if (status) | ||
110 | pr_debug("can't register UDC device, %d\n", status); | ||
111 | } | ||
112 | #endif | ||
113 | |||
114 | #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) | ||
115 | if (config->otg || config->register_host) { | ||
116 | struct platform_device *ohci_device = config->ohci_device; | ||
117 | int status; | ||
118 | |||
119 | syscon &= ~HST_IDLE_EN; | ||
120 | ohci_device->dev.platform_data = config; | ||
121 | status = platform_device_register(ohci_device); | ||
122 | if (status) | ||
123 | pr_debug("can't register OHCI device, %d\n", status); | ||
124 | } | ||
125 | #endif | ||
126 | |||
127 | #ifdef CONFIG_USB_OTG | ||
128 | if (config->otg) { | ||
129 | struct platform_device *otg_device = config->otg_device; | ||
130 | int status; | ||
131 | |||
132 | syscon &= ~OTG_IDLE_EN; | ||
133 | otg_device->dev.platform_data = config; | ||
134 | status = platform_device_register(otg_device); | ||
135 | if (status) | ||
136 | pr_debug("can't register OTG device, %d\n", status); | ||
137 | } | ||
138 | #endif | ||
139 | pr_debug("OTG_SYSCON_1 = %08x\n", omap_readl(OTG_SYSCON_1)); | ||
140 | omap_writel(syscon, OTG_SYSCON_1); | ||
141 | } | ||
142 | |||
143 | #else | ||
144 | void omap_otg_init(struct omap_usb_config *config) {} | ||
145 | #endif | ||