123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /*
- * SMS/SDRC (SDRAM controller) common code for OMAP2/3
- *
- * Copyright (C) 2005, 2008 Texas Instruments Inc.
- * Copyright (C) 2005, 2008 Nokia Corporation
- *
- * Tony Lindgren <tony@atomide.com>
- * Paul Walmsley
- * 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 version 2 as
- * published by the Free Software Foundation.
- */
- #undef DEBUG
- #include <linux/module.h>
- #include <linux/kernel.h>
- #include <linux/device.h>
- #include <linux/list.h>
- #include <linux/errno.h>
- #include <linux/delay.h>
- #include <linux/clk.h>
- #include <linux/io.h>
- #include <mach/common.h>
- #include <mach/clock.h>
- #include <mach/sram.h>
- #include "prm.h"
- #include <mach/sdrc.h>
- #include "sdrc.h"
- static struct omap_sdrc_params *sdrc_init_params;
- void __iomem *omap2_sdrc_base;
- void __iomem *omap2_sms_base;
- /**
- * omap2_sdrc_get_params - return SDRC register values for a given clock rate
- * @r: SDRC clock rate (in Hz)
- *
- * Return pre-calculated values for the SDRC_ACTIM_CTRLA,
- * SDRC_ACTIM_CTRLB, SDRC_RFR_CTRL, and SDRC_MR registers, for a given
- * SDRC clock rate 'r'. These parameters control various timing
- * delays in the SDRAM controller that are expressed in terms of the
- * number of SDRC clock cycles to wait; hence the clock rate
- * dependency. Note that sdrc_init_params must be sorted rate
- * descending. Also assumes that both chip-selects use the same
- * timing parameters. Returns a struct omap_sdrc_params * upon
- * success, or NULL upon failure.
- */
- struct omap_sdrc_params *omap2_sdrc_get_params(unsigned long r)
- {
- struct omap_sdrc_params *sp;
- sp = sdrc_init_params;
- while (sp->rate != r)
- sp++;
- if (!sp->rate)
- return NULL;
- return sp;
- }
- void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals)
- {
- omap2_sdrc_base = omap2_globals->sdrc;
- omap2_sms_base = omap2_globals->sms;
- }
- /* turn on smart idle modes for SDRAM scheduler and controller */
- void __init omap2_sdrc_init(struct omap_sdrc_params *sp)
- {
- u32 l;
- l = sms_read_reg(SMS_SYSCONFIG);
- l &= ~(0x3 << 3);
- l |= (0x2 << 3);
- sms_write_reg(l, SMS_SYSCONFIG);
- l = sdrc_read_reg(SDRC_SYSCONFIG);
- l &= ~(0x3 << 3);
- l |= (0x2 << 3);
- sdrc_write_reg(l, SDRC_SYSCONFIG);
- sdrc_init_params = sp;
- }
|