sdrc.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*
  2. * SMS/SDRC (SDRAM controller) common code for OMAP2/3
  3. *
  4. * Copyright (C) 2005, 2008 Texas Instruments Inc.
  5. * Copyright (C) 2005, 2008 Nokia Corporation
  6. *
  7. * Tony Lindgren <tony@atomide.com>
  8. * Paul Walmsley
  9. * Richard Woodruff <r-woodruff2@ti.com>
  10. *
  11. * This program is free software; you can redistribute it and/or modify
  12. * it under the terms of the GNU General Public License version 2 as
  13. * published by the Free Software Foundation.
  14. */
  15. #undef DEBUG
  16. #include <linux/module.h>
  17. #include <linux/kernel.h>
  18. #include <linux/device.h>
  19. #include <linux/list.h>
  20. #include <linux/errno.h>
  21. #include <linux/delay.h>
  22. #include <linux/clk.h>
  23. #include <linux/io.h>
  24. #include <mach/common.h>
  25. #include <mach/clock.h>
  26. #include <mach/sram.h>
  27. #include "prm.h"
  28. #include <mach/sdrc.h>
  29. #include "sdrc.h"
  30. static struct omap_sdrc_params *sdrc_init_params;
  31. void __iomem *omap2_sdrc_base;
  32. void __iomem *omap2_sms_base;
  33. /**
  34. * omap2_sdrc_get_params - return SDRC register values for a given clock rate
  35. * @r: SDRC clock rate (in Hz)
  36. *
  37. * Return pre-calculated values for the SDRC_ACTIM_CTRLA,
  38. * SDRC_ACTIM_CTRLB, SDRC_RFR_CTRL, and SDRC_MR registers, for a given
  39. * SDRC clock rate 'r'. These parameters control various timing
  40. * delays in the SDRAM controller that are expressed in terms of the
  41. * number of SDRC clock cycles to wait; hence the clock rate
  42. * dependency. Note that sdrc_init_params must be sorted rate
  43. * descending. Also assumes that both chip-selects use the same
  44. * timing parameters. Returns a struct omap_sdrc_params * upon
  45. * success, or NULL upon failure.
  46. */
  47. struct omap_sdrc_params *omap2_sdrc_get_params(unsigned long r)
  48. {
  49. struct omap_sdrc_params *sp;
  50. sp = sdrc_init_params;
  51. while (sp->rate != r)
  52. sp++;
  53. if (!sp->rate)
  54. return NULL;
  55. return sp;
  56. }
  57. void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals)
  58. {
  59. omap2_sdrc_base = omap2_globals->sdrc;
  60. omap2_sms_base = omap2_globals->sms;
  61. }
  62. /* turn on smart idle modes for SDRAM scheduler and controller */
  63. void __init omap2_sdrc_init(struct omap_sdrc_params *sp)
  64. {
  65. u32 l;
  66. l = sms_read_reg(SMS_SYSCONFIG);
  67. l &= ~(0x3 << 3);
  68. l |= (0x2 << 3);
  69. sms_write_reg(l, SMS_SYSCONFIG);
  70. l = sdrc_read_reg(SDRC_SYSCONFIG);
  71. l &= ~(0x3 << 3);
  72. l |= (0x2 << 3);
  73. sdrc_write_reg(l, SDRC_SYSCONFIG);
  74. sdrc_init_params = sp;
  75. }