cc26b3b01b
Add minimal omap3430 support based on earlier patches from Syed Mohammed Khasim. Also merge in omap34xx SRAM support from Karthik Dasu and use consistent naming for sram init functions. Also do following changes that make 34xx support usable: - Remove unused sram.c functions for 34xx - Rename IRQ_SIR_IRQ to INTCPS_SIR_IRQ and define it locally in entry-macro.S - Update mach-omap2/io.c to support 2420, 2430, and 34xx - Also merge in 34xx GPMC changes to add fields wr_access and wr_data_mux_bus from Adrian Hunter - Remove memory initialization call omap2_init_memory() until until more generic memory initialization patches are posted. It's OK to rely on bootloader initialization until then. Signed-off-by: Syed Mohammed, Khasim <khasim@ti.com> Signed-off-by: Karthik Dasu<karthik-dp@ti.com> Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
180 lines
4.3 KiB
ArmAsm
180 lines
4.3 KiB
ArmAsm
/*
|
|
* linux/arch/arm/mach-omap3/sram.S
|
|
*
|
|
* Omap3 specific functions that need to be run in internal SRAM
|
|
*
|
|
* (C) Copyright 2007
|
|
* Texas Instruments Inc.
|
|
* Rajendra Nayak <rnayak@ti.com>
|
|
*
|
|
* (C) Copyright 2004
|
|
* Texas Instruments, <www.ti.com>
|
|
* Richard Woodruff <r-woodruff2@ti.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*/
|
|
#include <linux/linkage.h>
|
|
#include <asm/assembler.h>
|
|
#include <mach/hardware.h>
|
|
|
|
#include <mach/io.h>
|
|
|
|
#include "sdrc.h"
|
|
#include "cm.h"
|
|
|
|
.text
|
|
|
|
/*
|
|
* Change frequency of core dpll
|
|
* r0 = sdrc_rfr_ctrl r1 = sdrc_actim_ctrla r2 = sdrc_actim_ctrlb r3 = M2
|
|
*/
|
|
ENTRY(omap3_sram_configure_core_dpll)
|
|
stmfd sp!, {r1-r12, lr} @ store regs to stack
|
|
cmp r3, #0x2
|
|
blne configure_sdrc
|
|
cmp r3, #0x2
|
|
blne lock_dll
|
|
cmp r3, #0x1
|
|
blne unlock_dll
|
|
bl sdram_in_selfrefresh @ put the SDRAM in self refresh
|
|
bl configure_core_dpll
|
|
bl enable_sdrc
|
|
cmp r3, #0x1
|
|
blne wait_dll_unlock
|
|
cmp r3, #0x2
|
|
blne wait_dll_lock
|
|
cmp r3, #0x1
|
|
blne configure_sdrc
|
|
mov r0, #0 @ return value
|
|
ldmfd sp!, {r1-r12, pc} @ restore regs and return
|
|
unlock_dll:
|
|
ldr r4, omap3_sdrc_dlla_ctrl
|
|
ldr r5, [r4]
|
|
orr r5, r5, #0x4
|
|
str r5, [r4]
|
|
bx lr
|
|
lock_dll:
|
|
ldr r4, omap3_sdrc_dlla_ctrl
|
|
ldr r5, [r4]
|
|
bic r5, r5, #0x4
|
|
str r5, [r4]
|
|
bx lr
|
|
sdram_in_selfrefresh:
|
|
mov r5, #0x0 @ Move 0 to R5
|
|
mcr p15, 0, r5, c7, c10, 5 @ memory barrier
|
|
ldr r4, omap3_sdrc_power @ read the SDRC_POWER register
|
|
ldr r5, [r4] @ read the contents of SDRC_POWER
|
|
orr r5, r5, #0x40 @ enable self refresh on idle req
|
|
str r5, [r4] @ write back to SDRC_POWER register
|
|
ldr r4, omap3_cm_iclken1_core @ read the CM_ICLKEN1_CORE reg
|
|
ldr r5, [r4]
|
|
bic r5, r5, #0x2 @ disable iclk bit for SRDC
|
|
str r5, [r4]
|
|
wait_sdrc_idle:
|
|
ldr r4, omap3_cm_idlest1_core
|
|
ldr r5, [r4]
|
|
and r5, r5, #0x2 @ check for SDRC idle
|
|
cmp r5, #2
|
|
bne wait_sdrc_idle
|
|
bx lr
|
|
configure_core_dpll:
|
|
ldr r4, omap3_cm_clksel1_pll
|
|
ldr r5, [r4]
|
|
ldr r6, core_m2_mask_val @ modify m2 for core dpll
|
|
and r5, r5, r6
|
|
orr r5, r5, r3, lsl #0x1B @ r3 contains the M2 val
|
|
str r5, [r4]
|
|
mov r5, #0x800 @ wait for the clock to stabilise
|
|
cmp r3, #2
|
|
bne wait_clk_stable
|
|
bx lr
|
|
wait_clk_stable:
|
|
subs r5, r5, #1
|
|
bne wait_clk_stable
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
bx lr
|
|
enable_sdrc:
|
|
ldr r4, omap3_cm_iclken1_core
|
|
ldr r5, [r4]
|
|
orr r5, r5, #0x2 @ enable iclk bit for SDRC
|
|
str r5, [r4]
|
|
wait_sdrc_idle1:
|
|
ldr r4, omap3_cm_idlest1_core
|
|
ldr r5, [r4]
|
|
and r5, r5, #0x2
|
|
cmp r5, #0
|
|
bne wait_sdrc_idle1
|
|
ldr r4, omap3_sdrc_power
|
|
ldr r5, [r4]
|
|
bic r5, r5, #0x40
|
|
str r5, [r4]
|
|
bx lr
|
|
wait_dll_lock:
|
|
ldr r4, omap3_sdrc_dlla_status
|
|
ldr r5, [r4]
|
|
and r5, r5, #0x4
|
|
cmp r5, #0x4
|
|
bne wait_dll_lock
|
|
bx lr
|
|
wait_dll_unlock:
|
|
ldr r4, omap3_sdrc_dlla_status
|
|
ldr r5, [r4]
|
|
and r5, r5, #0x4
|
|
cmp r5, #0x0
|
|
bne wait_dll_unlock
|
|
bx lr
|
|
configure_sdrc:
|
|
ldr r4, omap3_sdrc_rfr_ctrl
|
|
str r0, [r4]
|
|
ldr r4, omap3_sdrc_actim_ctrla
|
|
str r1, [r4]
|
|
ldr r4, omap3_sdrc_actim_ctrlb
|
|
str r2, [r4]
|
|
bx lr
|
|
|
|
omap3_sdrc_power:
|
|
.word OMAP34XX_SDRC_REGADDR(SDRC_POWER)
|
|
omap3_cm_clksel1_pll:
|
|
.word OMAP34XX_CM_REGADDR(PLL_MOD, CM_CLKSEL1)
|
|
omap3_cm_idlest1_core:
|
|
.word OMAP34XX_CM_REGADDR(CORE_MOD, CM_IDLEST)
|
|
omap3_cm_iclken1_core:
|
|
.word OMAP34XX_CM_REGADDR(CORE_MOD, CM_ICLKEN1)
|
|
omap3_sdrc_rfr_ctrl:
|
|
.word OMAP34XX_SDRC_REGADDR(SDRC_RFR_CTRL_0)
|
|
omap3_sdrc_actim_ctrla:
|
|
.word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_0)
|
|
omap3_sdrc_actim_ctrlb:
|
|
.word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_0)
|
|
omap3_sdrc_dlla_status:
|
|
.word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS)
|
|
omap3_sdrc_dlla_ctrl:
|
|
.word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL)
|
|
core_m2_mask_val:
|
|
.word 0x07FFFFFF
|
|
|
|
ENTRY(omap3_sram_configure_core_dpll_sz)
|
|
.word . - omap3_sram_configure_core_dpll
|