RE: [RFC][PATCH] OMAP3: add support for 2 SDRAM chip selects (was: Re: Beagleboard rev C memory timings & suspend/resume)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




>-----Original Message-----
>From: ext Paul Walmsley [mailto:paul@xxxxxxxxx]
>Sent: 05 June, 2009 21:11
>To: Jean Pihet; Kristo Tero (Nokia-D/Tampere)
>Cc: Kevin Hilman; linux-omap
>Subject: Re: [RFC][PATCH] OMAP3: add support for 2 SDRAM chip
>selects (was: Re: Beagleboard rev C memory timings & suspend/resume)
>
>Hi Jean,
>
>On Fri, 5 Jun 2009, Jean Pihet wrote:
>
>> Here is the new patch that includes all the remarks and suggestion.
>> The description is here below.
>>
>> Some notes:
>> - all calls to omap2_init_common_hw have been adapted in the board
>> files. it looks like 2430SDP and Pandora board files are
>broken since
>> they use only one param. Can that be checked on those boards?
>> - it is assumed that RX51 only uses 1 CS. Is that correct?
>>
>> Can you review it and possibly merge?
>
>Looks great.
>
>Tero, does RX51 use two SDRC chipselects!

Yes, I'll take a look at this and post a patch on top of this. I did this for the earlier version already, but need to re-check this one.

-Tero

>
>Acked-by: Paul Walmsley <paul@xxxxxxxxx>
>
>
>>
>> Thanks & regards,
>> Jean
>>
>> --
>> From 097a640997b74638e0e7200ecd5834205204c956 Mon Sep 17
>00:00:00 2001
>> From: Jean Pihet <jpihet@xxxxxxxxxx>
>> Date: Fri, 5 Jun 2009 17:19:00 +0200
>> Subject: [PATCH] [PATCH] OMAP3: add support for 2 SDRAM chip selects
>>
>> Some boards (Beagle Cx, Overo) have 2 SDRAM parts connected to the
>> SDRC.
>>
>> This patch adds the following:
>> - ensure that the CKE signals mux settings are correct
>> - add a new argument of type omap_sdrc_params struct* to
>> omap2_init_common_hw and omap2_sdrc_init for the 2nd CS params
>> - adapted the OMAP boards files to the new prototype of
>> omap2_init_common_hw. Only Beagle and Overo are using the 2 CS'es
>> - adapt the sram sleep code to configure the SDRC for the 2nd CS
>>
>> Note: If the 2nd param to omap2_init_common_hw is NULL, then the
>> parameters are not programmed into the SDRC CS1 registers
>>
>> Tested on 3430 SDP and Beagleboard rev C2 and B5, with
>suspend/resume
>> and frequency changes (cpufreq).
>>
>> Thanks to Paul Walmsley and Kevin Hilman for the suggestions
>and code
>> reviews.
>>
>> Signed-off-by: Jean Pihet <jpihet@xxxxxxxxxx>
>> ---
>>  arch/arm/mach-omap2/board-2430sdp.c      |    2 +-
>>  arch/arm/mach-omap2/board-3430sdp.c      |    6 +-
>>  arch/arm/mach-omap2/board-apollon.c      |    2 +-
>>  arch/arm/mach-omap2/board-generic.c      |    2 +-
>>  arch/arm/mach-omap2/board-h4.c           |    2 +-
>>  arch/arm/mach-omap2/board-ldp.c          |    2 +-
>>  arch/arm/mach-omap2/board-n800.c         |    2 +-
>>  arch/arm/mach-omap2/board-omap2evm.c     |    2 +-
>>  arch/arm/mach-omap2/board-omap3beagle.c  |   11 ++-
>>  arch/arm/mach-omap2/board-omap3evm.c     |    6 +-
>>  arch/arm/mach-omap2/board-omap3pandora.c |    3 +-
>>  arch/arm/mach-omap2/board-overo.c        |    8 ++-
>>  arch/arm/mach-omap2/board-rx51.c         |    6 +-
>>  arch/arm/mach-omap2/clock34xx.c          |   37 ++++++--
>>  arch/arm/mach-omap2/io.c                 |    5 +-
>>  arch/arm/mach-omap2/mux.c                |    6 ++
>>  arch/arm/mach-omap2/sdrc.c               |   63 +++++++++-----
>>  arch/arm/mach-omap2/sram34xx.S           |  137
>> +++++++++++++++++++++++-------
>>  arch/arm/plat-omap/include/mach/io.h     |    3 +-
>>  arch/arm/plat-omap/include/mach/mux.h    |    4 +
>>  arch/arm/plat-omap/include/mach/sdrc.h   |    8 +-
>>  arch/arm/plat-omap/include/mach/sram.h   |   23 +++--
>>  arch/arm/plat-omap/sram.c                |   34 +++++---
>>  23 files changed, 266 insertions(+), 108 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/board-2430sdp.c
>> b/arch/arm/mach-omap2/board-2430sdp.c
>> index aa5df72..4cb7bc5 100644
>> --- a/arch/arm/mach-omap2/board-2430sdp.c
>> +++ b/arch/arm/mach-omap2/board-2430sdp.c
>> @@ -322,7 +322,7 @@ out:
>>
>>  static void __init omap_2430sdp_init_irq(void)  {
>> -    omap2_init_common_hw(NULL);
>> +    omap2_init_common_hw(NULL, NULL, NULL, NULL, NULL);
>>      omap_init_irq();
>>      omap_gpio_init();
>>      sdp2430_init_smc91x();
>> diff --git a/arch/arm/mach-omap2/board-3430sdp.c
>> b/arch/arm/mach-omap2/board-3430sdp.c
>> index 195b749..24e2728 100644
>> --- a/arch/arm/mach-omap2/board-3430sdp.c
>> +++ b/arch/arm/mach-omap2/board-3430sdp.c
>> @@ -302,8 +302,10 @@ static inline void __init
>> sdp3430_init_smc91x(void)
>>
>>  static void __init omap_3430sdp_init_irq(void)  {
>> -    omap2_init_common_hw(hyb18m512160af6_sdrc_params,
>omap3_mpu_rate_table,
>> -                         omap3_dsp_rate_table, omap3_l3_rate_table);
>> +    omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL,
>> +                         omap3_mpu_rate_table,
>> +                         omap3_dsp_rate_table,
>> +                         omap3_l3_rate_table);
>>      omap_init_irq();
>>      omap_gpio_init();
>>      sdp3430_init_smc91x();
>> diff --git a/arch/arm/mach-omap2/board-apollon.c
>> b/arch/arm/mach-omap2/board-apollon.c
>> index 2e24812..2dd1350 100644
>> --- a/arch/arm/mach-omap2/board-apollon.c
>> +++ b/arch/arm/mach-omap2/board-apollon.c
>> @@ -323,7 +323,7 @@ out:
>>
>>  static void __init omap_apollon_init_irq(void)  {
>> -    omap2_init_common_hw(NULL, NULL, NULL, NULL);
>> +    omap2_init_common_hw(NULL, NULL, NULL, NULL, NULL);
>>      omap_init_irq();
>>      omap_gpio_init();
>>      apollon_init_smc91x();
>> diff --git a/arch/arm/mach-omap2/board-generic.c
>> b/arch/arm/mach-omap2/board-generic.c
>> index be763a9..763329b 100644
>> --- a/arch/arm/mach-omap2/board-generic.c
>> +++ b/arch/arm/mach-omap2/board-generic.c
>> @@ -33,7 +33,7 @@
>>
>>  static void __init omap_generic_init_irq(void)  {
>> -    omap2_init_common_hw(NULL, NULL, NULL, NULL);
>> +    omap2_init_common_hw(NULL, NULL, NULL, NULL, NULL);
>>      omap_init_irq();
>>  }
>>
>> diff --git a/arch/arm/mach-omap2/board-h4.c
>> b/arch/arm/mach-omap2/board-h4.c index 8f54939..17c3599 100644
>> --- a/arch/arm/mach-omap2/board-h4.c
>> +++ b/arch/arm/mach-omap2/board-h4.c
>> @@ -348,7 +348,7 @@ static void __init h4_init_flash(void)
>>
>>  static void __init omap_h4_init_irq(void)  {
>> -    omap2_init_common_hw(NULL, NULL, NULL, NULL);
>> +    omap2_init_common_hw(NULL, NULL, NULL, NULL, NULL);
>>      omap_init_irq();
>>      omap_gpio_init();
>>      h4_init_flash();
>> diff --git a/arch/arm/mach-omap2/board-ldp.c
>> b/arch/arm/mach-omap2/board-ldp.c index 9f41dc9..b012806 100644
>> --- a/arch/arm/mach-omap2/board-ldp.c
>> +++ b/arch/arm/mach-omap2/board-ldp.c
>> @@ -344,7 +344,7 @@ static inline void __init ldp_init_smc911x(void)
>>
>>  static void __init omap_ldp_init_irq(void)  {
>> -    omap2_init_common_hw(NULL, NULL, NULL, NULL);
>> +    omap2_init_common_hw(NULL, NULL, NULL, NULL, NULL);
>>      omap_init_irq();
>>      omap_gpio_init();
>>      ldp_init_smc911x();
>> diff --git a/arch/arm/mach-omap2/board-n800.c
>> b/arch/arm/mach-omap2/board-n800.c
>> index ac7cf3f..ad53f4a 100644
>> --- a/arch/arm/mach-omap2/board-n800.c
>> +++ b/arch/arm/mach-omap2/board-n800.c
>> @@ -127,7 +127,7 @@ static struct lm8323_platform_data
>lm8323_pdata =
>> {
>>
>>  void __init nokia_n800_init_irq(void)  {
>> -    omap2_init_common_hw(NULL, NULL, NULL, NULL);
>> +    omap2_init_common_hw(NULL, NULL, NULL, NULL, NULL);
>>      omap_init_irq();
>>      omap_gpio_init();
>>
>> diff --git a/arch/arm/mach-omap2/board-omap2evm.c
>> b/arch/arm/mach-omap2/board-omap2evm.c
>> index 4fac1be..56a26d4 100644
>> --- a/arch/arm/mach-omap2/board-omap2evm.c
>> +++ b/arch/arm/mach-omap2/board-omap2evm.c
>> @@ -276,7 +276,7 @@ static struct twl4030_keypad_data
>omap2evm_kp_data
>> = {
>>
>>  static void __init omap2_evm_init_irq(void)  {
>> -    omap2_init_common_hw(NULL, NULL, NULL, NULL);
>> +    omap2_init_common_hw(NULL, NULL, NULL, NULL, NULL);
>>      omap_init_irq();
>>      omap_gpio_init();
>>      omap2evm_init_smc911x();
>> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c
>> b/arch/arm/mach-omap2/board-omap3beagle.c
>> index 7294dbf..872beb6 100644
>> --- a/arch/arm/mach-omap2/board-omap3beagle.c
>> +++ b/arch/arm/mach-omap2/board-omap3beagle.c
>> @@ -312,8 +312,11 @@ static int __init omap3_beagle_i2c_init(void)
>>
>>  static void __init omap3_beagle_init_irq(void)  {
>> -    omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
>omap3_mpu_rate_table,
>> -                         omap3_dsp_rate_table, omap3_l3_rate_table);
>> +    omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
>> +                         mt46h32m32lf6_sdrc_params,
>> +                         omap3_mpu_rate_table,
>> +                         omap3_dsp_rate_table,
>> +                         omap3_l3_rate_table);
>>      omap_init_irq();
>>      omap_gpio_init();
>>  }
>> @@ -441,6 +444,10 @@ static void __init omap3_beagle_init(void)
>>      usb_musb_init();
>>      usb_ehci_init();
>>      omap3beagle_flash_init();
>> +
>> +    /* Ensure SDRC pins are mux'd for self-refresh */
>> +    omap_cfg_reg(H16_34XX_SDRC_CKE0);
>> +    omap_cfg_reg(H17_34XX_SDRC_CKE1);
>>  }
>>
>>  static void __init omap3_beagle_map_io(void) diff --git
>> a/arch/arm/mach-omap2/board-omap3evm.c
>> b/arch/arm/mach-omap2/board-omap3evm.c
>> index f017f0d..3b9c96a 100644
>> --- a/arch/arm/mach-omap2/board-omap3evm.c
>> +++ b/arch/arm/mach-omap2/board-omap3evm.c
>> @@ -276,8 +276,10 @@ struct spi_board_info
>omap3evm_spi_board_info[] =
>> {
>>
>>  static void __init omap3_evm_init_irq(void)  {
>> -    omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
>omap3_mpu_rate_table,
>> -                         omap3_dsp_rate_table, omap3_l3_rate_table);
>> +    omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL,
>> +                         omap3_mpu_rate_table,
>> +                         omap3_dsp_rate_table,
>> +                         omap3_l3_rate_table);
>>      omap_init_irq();
>>      omap_gpio_init();
>>      omap3evm_init_smc911x();
>> diff --git a/arch/arm/mach-omap2/board-omap3pandora.c
>> b/arch/arm/mach-omap2/board-omap3pandora.c
>> index c67f62f..05ab99e 100644
>> --- a/arch/arm/mach-omap2/board-omap3pandora.c
>> +++ b/arch/arm/mach-omap2/board-omap3pandora.c
>> @@ -220,7 +220,8 @@ static int __init omap3pandora_i2c_init(void)
>>
>>  static void __init omap3pandora_init_irq(void)  {
>> -    omap2_init_common_hw(mt46h32m32lf6_sdrc_params);
>> +    omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL,
>> +                         NULL, NULL, NULL);
>>      omap_init_irq();
>>      omap_gpio_init();
>>  }
>> diff --git a/arch/arm/mach-omap2/board-overo.c
>> b/arch/arm/mach-omap2/board-overo.c
>> index 9eae608..2c6d2c5 100644
>> --- a/arch/arm/mach-omap2/board-overo.c
>> +++ b/arch/arm/mach-omap2/board-overo.c
>> @@ -355,7 +355,9 @@ static int __init overo_i2c_init(void)
>>
>>  static void __init overo_init_irq(void)  {
>> -    omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL,
>NULL, NULL);
>> +    omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
>> +                         mt46h32m32lf6_sdrc_params,
>> +                         NULL, NULL, NULL);
>>      omap_init_irq();
>>      omap_gpio_init();
>>  }
>> @@ -391,6 +393,10 @@ static void __init overo_init(void)
>>      overo_init_smsc911x();
>>      overo_ads7846_init();
>>
>> +    /* Ensure SDRC pins are mux'd for self-refresh */
>> +    omap_cfg_reg(H16_34XX_SDRC_CKE0);
>> +    omap_cfg_reg(H17_34XX_SDRC_CKE1);
>> +
>>      if ((gpio_request(OVERO_GPIO_W2W_NRESET,
>>                        "OVERO_GPIO_W2W_NRESET") == 0) &&
>>          (gpio_direction_output(OVERO_GPIO_W2W_NRESET, 1) ==
>0)) { diff
>> --git a/arch/arm/mach-omap2/board-rx51.c
>> b/arch/arm/mach-omap2/board-rx51.c
>> index 09035b0..d48459f 100644
>> --- a/arch/arm/mach-omap2/board-rx51.c
>> +++ b/arch/arm/mach-omap2/board-rx51.c
>> @@ -64,8 +64,10 @@ static struct omap_board_config_kernel
>> rx51_config[] = {
>>
>>  static void __init rx51_init_irq(void)  {
>> -    omap2_init_common_hw(rx51_get_sdram_timings(),
>omap3_mpu_rate_table,
>> -                         omap3_dsp_rate_table, omap3_l3_rate_table);
>> +    omap2_init_common_hw(rx51_get_sdram_timings(), NULL,
>> +                         omap3_mpu_rate_table,
>> +                         omap3_dsp_rate_table,
>> +                         omap3_l3_rate_table);
>>      omap_init_irq();
>>      omap_gpio_init();
>>  }
>> diff --git a/arch/arm/mach-omap2/clock34xx.c
>> b/arch/arm/mach-omap2/clock34xx.c index 3cee6b4..f262787 100644
>> --- a/arch/arm/mach-omap2/clock34xx.c
>> +++ b/arch/arm/mach-omap2/clock34xx.c
>> @@ -478,7 +478,9 @@ static int
>omap3_core_dpll_m2_set_rate(struct clk
>> *clk, unsigned long rate)
>>      u32 unlock_dll = 0;
>>      u32 c;
>>      unsigned long validrate, sdrcrate, mpurate;
>> -    struct omap_sdrc_params *sp;
>> +    struct omap_sdrc_params *sdrc_cs0;
>> +    struct omap_sdrc_params *sdrc_cs1;
>> +    int ret;
>>
>>      if (!clk || !rate)
>>              return -EINVAL;
>> @@ -496,8 +498,8 @@ static int
>omap3_core_dpll_m2_set_rate(struct clk
>> *clk, unsigned long rate)
>>      else
>>              sdrcrate >>= ((clk->rate / rate) >> 1);
>>
>> -    sp = omap2_sdrc_get_params(sdrcrate);
>> -    if (!sp)
>> +    ret = omap2_sdrc_get_params(sdrcrate, &sdrc_cs0, &sdrc_cs1);
>> +    if (ret)
>>              return -EINVAL;
>>
>>      if (sdrcrate < MIN_SDRC_DLL_LOCK_FREQ) { @@ -518,12 +520,29 @@
>> static int omap3_core_dpll_m2_set_rate(struct clk *clk,
>unsigned long
>> rate)
>>
>>      pr_debug("clock: changing CORE DPLL rate from %lu to
>%lu\n", clk->rate,
>>               validrate);
>> -    pr_debug("clock: SDRC timing params used: %08x %08x %08x\n",
>> -             sp->rfr_ctrl, sp->actim_ctrla, sp->actim_ctrlb);
>> -
>> -    omap3_configure_core_dpll(sp->rfr_ctrl, sp->actim_ctrla,
>> -                              sp->actim_ctrlb, new_div,
>unlock_dll, c,
>> -                              sp->mr, rate > clk->rate);
>> +    pr_debug("clock: SDRC CS0 timing params used:"
>> +             " RFR %08x CTRLA %08x CTRLB %08x MR %08x\n",
>> +             sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,
>> +             sdrc_cs0->actim_ctrlb, sdrc_cs0->mr);
>> +    if (sdrc_cs1)
>> +            pr_debug("clock: SDRC CS1 timing params used: "
>> +             " RFR %08x CTRLA %08x CTRLB %08x MR %08x\n",
>> +             sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla,
>> +             sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);
>> +
>> +    if (sdrc_cs1)
>> +            omap3_configure_core_dpll(
>> +                              new_div, unlock_dll, c, rate
>> clk->rate,
>> +                              sdrc_cs0->rfr_ctrl,
>sdrc_cs0->actim_ctrla,
>> +                              sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,
>> +                              sdrc_cs1->rfr_ctrl,
>sdrc_cs1->actim_ctrla,
>> +                              sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);
>> +    else
>> +            omap3_configure_core_dpll(
>> +                              new_div, unlock_dll, c, rate
>> clk->rate,
>> +                              sdrc_cs0->rfr_ctrl,
>sdrc_cs0->actim_ctrla,
>> +                              sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,
>> +                              0, 0, 0, 0);
>>
>>      return 0;
>>  }
>> diff --git a/arch/arm/mach-omap2/io.c
>b/arch/arm/mach-omap2/io.c index
>> 6fb6c29..aa000b4 100644
>> --- a/arch/arm/mach-omap2/io.c
>> +++ b/arch/arm/mach-omap2/io.c
>> @@ -231,7 +231,8 @@ static int __init
>_omap2_init_reprogram_sdrc(void)
>>      return v;
>>  }
>>
>> -void __init omap2_init_common_hw(struct omap_sdrc_params *sp,
>> +void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
>> +                             struct omap_sdrc_params *sdrc_cs1,
>>                               struct omap_opp *mpu_opps,
>>                               struct omap_opp *dsp_opps,
>>                               struct omap_opp *l3_opps)
>> @@ -244,7 +245,7 @@ void __init omap2_init_common_hw(struct
>> omap_sdrc_params *sp,
>>      omapdev_init(omapdevs);
>>      omap2_clk_init();
>>      omap_pm_if_init();
>> -    omap2_sdrc_init(sp);
>> +    omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
>>
>>      _omap2_init_reprogram_sdrc();
>>
>> diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
>> index 026c4fc..43d6b92 100644
>> --- a/arch/arm/mach-omap2/mux.c
>> +++ b/arch/arm/mach-omap2/mux.c
>> @@ -486,6 +486,12 @@ MUX_CFG_34XX("H19_34XX_GPIO164_OUT", 0x19c,
>>              OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
>> MUX_CFG_34XX("J25_34XX_GPIO170", 0x1c6,
>>              OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT)
>> +
>> +/* OMAP3 SDRC CKE signals to SDR/DDR ram chips */
>> +MUX_CFG_34XX("H16_34XX_SDRC_CKE0", 0x262,
>> +            OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
>> +MUX_CFG_34XX("H17_34XX_SDRC_CKE1", 0x264,
>> +            OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
>>  };
>>
>>  #define OMAP34XX_PINS_SZ    ARRAY_SIZE(omap34xx_pins)
>> diff --git a/arch/arm/mach-omap2/sdrc.c b/arch/arm/mach-omap2/sdrc.c
>> index c832d83..b42f5ae 100644
>> --- a/arch/arm/mach-omap2/sdrc.c
>> +++ b/arch/arm/mach-omap2/sdrc.c
>> @@ -32,7 +32,7 @@
>>  #include <mach/sdrc.h>
>>  #include "sdrc.h"
>>
>> -static struct omap_sdrc_params *sdrc_init_params;
>> +static struct omap_sdrc_params *sdrc_init_params_cs0,
>> +*sdrc_init_params_cs1;
>>
>>  void __iomem *omap2_sdrc_base;
>>  void __iomem *omap2_sms_base;
>> @@ -71,33 +71,49 @@ void omap2_sms_restore_context(void)
>>  /**
>>   * omap2_sdrc_get_params - return SDRC register values for
>a given clock rate
>>   * @r: SDRC clock rate (in Hz)
>> + * @sdrc_cs0: chip select 0 ram timings **
>> + * @sdrc_cs1: chip select 1 ram timings **
>>   *
>>   * 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.
>> + *  SDRC_ACTIM_CTRLB, SDRC_RFR_CTRL and SDRC_MR registers in
>> + sdrc_cs[01]
>> + *  structs,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.
>> + *
>> + * Supports 2 different timing parameters for both chip selects.
>> + *
>> + * Note 1: the sdrc_init_params_cs[01] must be sorted rate
>descending.
>> + * Note 2: If sdrc_init_params_cs_1 is not NULL it must be of same
>> + size
>> + *  as sdrc_init_params_cs_0.
>> + *
>> + * Fills in the struct omap_sdrc_params * for each chip select.
>> + * Returns 0 upon success or -1 upon failure.
>>   */
>> -struct omap_sdrc_params *omap2_sdrc_get_params(unsigned long r)
>> +int omap2_sdrc_get_params(unsigned long r,
>> +                      struct omap_sdrc_params **sdrc_cs0,
>> +                      struct omap_sdrc_params **sdrc_cs1)
>>  {
>> -    struct omap_sdrc_params *sp;
>> +    struct omap_sdrc_params *sp0, *sp1;
>>
>> -    if (!sdrc_init_params)
>> -            return NULL;
>> +    if (!sdrc_init_params_cs0)
>> +            return -1;
>>
>> -    sp = sdrc_init_params;
>> +    sp0 = sdrc_init_params_cs0;
>> +    sp1 = sdrc_init_params_cs1;
>>
>> -    while (sp->rate && sp->rate != r)
>> -            sp++;
>> +    while (sp0->rate && sp0->rate != r) {
>> +            sp0++;
>> +            if (sdrc_init_params_cs1)
>> +                    sp1++;
>> +    }
>>
>> -    if (!sp->rate)
>> -            return NULL;
>> +    if (!sp0->rate)
>> +            return -1;
>>
>> -    return sp;
>> +    *sdrc_cs0 = sp0;
>> +    *sdrc_cs1 = sp1;
>> +    return 0;
>>  }
>>
>>
>> @@ -109,13 +125,15 @@ void __init omap2_set_globals_sdrc(struct
>> omap_globals
>> *omap2_globals)
>>
>>  /**
>>   * omap2_sdrc_init - initialize SMS, SDRC devices on boot
>> - * @sp: pointer to a null-terminated list of struct omap_sdrc_params
>> + * @sdrc_cs[01]: pointers to a null-terminated list of struct
>> omap_sdrc_params
>> + *  Support for 2 chip selects timings
>>   *
>>   * Turn on smart idle modes for SDRAM scheduler and controller.
>>   * Program a known-good configuration for the SDRC to deal
>with buggy
>>   * bootloaders.
>>   */
>> -void __init omap2_sdrc_init(struct omap_sdrc_params *sp)
>> +void __init omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
>> +                        struct omap_sdrc_params *sdrc_cs1)
>>  {
>>      u32 l;
>>
>> @@ -129,7 +147,8 @@ void __init omap2_sdrc_init(struct
>omap_sdrc_params *sp)
>>      l |= (0x2 << 3);
>>      sdrc_write_reg(l, SDRC_SYSCONFIG);
>>
>> -    sdrc_init_params = sp;
>> +    sdrc_init_params_cs0 = sdrc_cs0;
>> +    sdrc_init_params_cs1 = sdrc_cs1;
>>
>>      /* XXX Enable SRFRONIDLEREQ here also? */
>>      l = (1 << SDRC_POWER_EXTCLKDIS_SHIFT) | diff --git
>> a/arch/arm/mach-omap2/sram34xx.S b/arch/arm/mach-omap2/sram34xx.S
>> index f41f8d9..3aef744 100644
>> --- a/arch/arm/mach-omap2/sram34xx.S
>> +++ b/arch/arm/mach-omap2/sram34xx.S
>> @@ -36,7 +36,7 @@
>>
>>      .text
>>
>> -/* r4 parameters */
>> +/* r1 parameters */
>>  #define SDRC_NO_UNLOCK_DLL          0x0
>>  #define SDRC_UNLOCK_DLL                     0x1
>>
>> @@ -71,40 +71,71 @@
>>
>>  /*
>>   * omap3_sram_configure_core_dpll - change DPLL3 M2 divider
>> - * r0 = new SDRC_RFR_CTRL register contents
>> - * r1 = new SDRC_ACTIM_CTRLA register contents
>> - * r2 = new SDRC_ACTIM_CTRLB register contents
>> - * r3 = new M2 divider setting (only 1 and 2 supported right now)
>> - * r4 = unlock SDRC DLL? (1 = yes, 0 = no).  Only unlock DLL for
>> + *
>> + * Params passed in registers:
>> + *  r0 = new M2 divider setting (only 1 and 2 supported right now)
>> + *  r1 = unlock SDRC DLL? (1 = yes, 0 = no).  Only unlock DLL for
>>   *      SDRC rates < 83MHz
>> - * r5 = number of MPU cycles to wait for SDRC to stabilize after
>> + *  r2 = number of MPU cycles to wait for SDRC to stabilize after
>>   *      reprogramming the SDRC when switching to a slower MPU speed
>> - * r6 = new SDRC_MR_0 register value
>> - * r7 = increasing SDRC rate? (1 = yes, 0 = no)
>> + *  r3 = increasing SDRC rate? (1 = yes, 0 = no)
>> + *
>> + * Params passed via the stack. The needed params will be copied in
>> + SRAM
>> + *  before use by the code in SRAM (SDRAM is not accessible during
>> + SDRC
>> + *  reconfiguration):
>> + *  new SDRC_RFR_CTRL_0 register contents
>> + *  new SDRC_ACTIM_CTRL_A_0 register contents
>> + *  new SDRC_ACTIM_CTRL_B_0 register contents
>> + *  new SDRC_MR_0 register value
>> + *  new SDRC_RFR_CTRL_1 register contents
>> + *  new SDRC_ACTIM_CTRL_A_1 register contents
>> + *  new SDRC_ACTIM_CTRL_B_1 register contents
>> + *  new SDRC_MR_1 register value
>>   *
>> + * If the param SDRC_RFR_CTRL_1 is 0, the parameters
>> + *  are not programmed into the SDRC CS1 registers
>>   */
>>  ENTRY(omap3_sram_configure_core_dpll)
>>      stmfd   sp!, {r1-r12, lr}       @ store regs to stack
>> -    ldr     r4, [sp, #52]           @ pull extra args off the stack
>> -    ldr     r5, [sp, #56]           @ load extra args from the stack
>> -    ldr     r6, [sp, #60]           @ load extra args from the stack
>> -    ldr     r7, [sp, #64]           @ load extra args from the stack
>> +
>> +                                    @ pull the extra args
>off the stack
>> +                                    @  and store them in SRAM
>> +    ldr     r4, [sp, #52]
>> +    str     r4, omap_sdrc_rfr_ctrl_0_val
>> +    ldr     r4, [sp, #56]
>> +    str     r4, omap_sdrc_actim_ctrl_a_0_val
>> +    ldr     r4, [sp, #60]
>> +    str     r4, omap_sdrc_actim_ctrl_b_0_val
>> +    ldr     r4, [sp, #64]
>> +    str     r4, omap_sdrc_mr_0_val
>> +    ldr     r4, [sp, #68]
>> +    str     r4, omap_sdrc_rfr_ctrl_1_val
>> +    cmp     r4, #0                  @ if SDRC_RFR_CTRL_1 is 0,
>> +    beq     skip_cs1_params         @  do not use cs1 params
>> +    ldr     r4, [sp, #72]
>> +    str     r4, omap_sdrc_actim_ctrl_a_1_val
>> +    ldr     r4, [sp, #76]
>> +    str     r4, omap_sdrc_actim_ctrl_b_1_val
>> +    ldr     r4, [sp, #80]
>> +    str     r4, omap_sdrc_mr_1_val
>> +skip_cs1_params:
>>      dsb                             @ flush buffered writes
>to interconnect
>> -    cmp     r7, #1                  @ if increasing SDRC clk rate,
>> +
>> +    cmp     r3, #1                  @ if increasing SDRC clk rate,
>>      bleq    configure_sdrc          @ program the SDRC regs
>early (for RFR)
>> -    cmp     r4, #SDRC_UNLOCK_DLL    @ set the intended DLL state
>> +    cmp     r1, #SDRC_UNLOCK_DLL    @ set the intended DLL state
>>      bleq    unlock_dll
>>      blne    lock_dll
>>      bl      sdram_in_selfrefresh    @ put SDRAM in self
>refresh, idle SDRC
>>      bl      configure_core_dpll     @ change the DPLL3 M2 divider
>>      bl      enable_sdrc             @ take SDRC out of idle
>> -    cmp     r4, #SDRC_UNLOCK_DLL    @ wait for DLL status to change
>> +    cmp     r1, #SDRC_UNLOCK_DLL    @ wait for DLL status to change
>>      bleq    wait_dll_unlock
>>      blne    wait_dll_lock
>> -    cmp     r7, #1                  @ if increasing SDRC clk rate,
>> +    cmp     r3, #1                  @ if increasing SDRC clk rate,
>>      beq     return_to_sdram         @ return to SDRAM code,
>otherwise,
>>      bl      configure_sdrc          @ reprogram SDRC regs now
>> -    mov     r12, r5
>> +    mov     r12, r2
>>      bl      wait_clk_stable         @ wait for SDRC to stabilize
>>  return_to_sdram:
>>      isb                             @ prevent speculative
>exec past here
>> @@ -149,7 +180,7 @@ configure_core_dpll:
>>      ldr     r12, [r11]
>>      ldr     r10, core_m2_mask_val   @ modify m2 for core dpll
>>      and     r12, r12, r10
>> -    orr     r12, r12, r3, lsl #CORE_DPLL_CLKOUT_DIV_SHIFT
>> +    orr     r12, r12, r0, lsl #CORE_DPLL_CLKOUT_DIV_SHIFT
>>      str     r12, [r11]
>>      ldr     r12, [r11]              @ posted-write barrier for CM
>>      bx      lr
>> @@ -187,15 +218,34 @@ wait_dll_unlock:
>>      bne     wait_dll_unlock
>>      bx      lr
>>  configure_sdrc:
>> -    ldr     r11, omap3_sdrc_rfr_ctrl
>> -    str     r0, [r11]
>> -    ldr     r11, omap3_sdrc_actim_ctrla
>> -    str     r1, [r11]
>> -    ldr     r11, omap3_sdrc_actim_ctrlb
>> -    str     r2, [r11]
>> +    ldr     r12, omap_sdrc_rfr_ctrl_0_val   @ fetch value from SRAM
>> +    ldr     r11, omap3_sdrc_rfr_ctrl_0      @ fetch addr from SRAM
>> +    str     r12, [r11]                      @ store
>> +    ldr     r12, omap_sdrc_actim_ctrl_a_0_val
>> +    ldr     r11, omap3_sdrc_actim_ctrl_a_0
>> +    str     r12, [r11]
>> +    ldr     r12, omap_sdrc_actim_ctrl_b_0_val
>> +    ldr     r11, omap3_sdrc_actim_ctrl_b_0
>> +    str     r12, [r11]
>> +    ldr     r12, omap_sdrc_mr_0_val
>>      ldr     r11, omap3_sdrc_mr_0
>> -    str     r6, [r11]
>> -    ldr     r6, [r11]               @ posted-write barrier for SDRC
>> +    str     r12, [r11]
>> +    ldr     r12, omap_sdrc_rfr_ctrl_1_val
>> +    cmp     r12, #0                 @ if SDRC_RFR_CTRL_1 is 0,
>> +    beq     skip_cs1_prog           @  do not program cs1 params
>> +    ldr     r11, omap3_sdrc_rfr_ctrl_1
>> +    str     r12, [r11]
>> +    ldr     r12, omap_sdrc_actim_ctrl_a_1_val
>> +    ldr     r11, omap3_sdrc_actim_ctrl_a_1
>> +    str     r12, [r11]
>> +    ldr     r12, omap_sdrc_actim_ctrl_b_1_val
>> +    ldr     r11, omap3_sdrc_actim_ctrl_b_1
>> +    str     r12, [r11]
>> +    ldr     r12, omap_sdrc_mr_1_val
>> +    ldr     r11, omap3_sdrc_mr_1
>> +    str     r12, [r11]
>> +skip_cs1_prog:
>> +    ldr     r12, [r11]              @ posted-write barrier for SDRC
>>      bx      lr
>>
>>  omap3_sdrc_power:
>> @@ -206,14 +256,40 @@ 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:
>> +
>> +omap3_sdrc_rfr_ctrl_0:
>>      .word OMAP34XX_SDRC_REGADDR(SDRC_RFR_CTRL_0)
>> -omap3_sdrc_actim_ctrla:
>> +omap3_sdrc_rfr_ctrl_1:
>> +    .word OMAP34XX_SDRC_REGADDR(SDRC_RFR_CTRL_1)
>> +omap3_sdrc_actim_ctrl_a_0:
>>      .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_0)
>> -omap3_sdrc_actim_ctrlb:
>> +omap3_sdrc_actim_ctrl_a_1:
>> +    .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_1)
>> +omap3_sdrc_actim_ctrl_b_0:
>>      .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_0)
>> +omap3_sdrc_actim_ctrl_b_1:
>> +    .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_1)
>>  omap3_sdrc_mr_0:
>>      .word OMAP34XX_SDRC_REGADDR(SDRC_MR_0)
>> +omap3_sdrc_mr_1:
>> +    .word OMAP34XX_SDRC_REGADDR(SDRC_MR_1)
>> +omap_sdrc_rfr_ctrl_0_val:
>> +    .word 0xDEADBEEF
>> +omap_sdrc_rfr_ctrl_1_val:
>> +    .word 0xDEADBEEF
>> +omap_sdrc_actim_ctrl_a_0_val:
>> +    .word 0xDEADBEEF
>> +omap_sdrc_actim_ctrl_a_1_val:
>> +    .word 0xDEADBEEF
>> +omap_sdrc_actim_ctrl_b_0_val:
>> +    .word 0xDEADBEEF
>> +omap_sdrc_actim_ctrl_b_1_val:
>> +    .word 0xDEADBEEF
>> +omap_sdrc_mr_0_val:
>> +    .word 0xDEADBEEF
>> +omap_sdrc_mr_1_val:
>> +    .word 0xDEADBEEF
>> +
>>  omap3_sdrc_dlla_status:
>>      .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS)
>>  omap3_sdrc_dlla_ctrl:
>> @@ -223,3 +299,4 @@ core_m2_mask_val:
>>
>>  ENTRY(omap3_sram_configure_core_dpll_sz)
>>      .word   . - omap3_sram_configure_core_dpll
>> +
>> diff --git a/arch/arm/plat-omap/include/mach/io.h
>> b/arch/arm/plat-omap/include/mach/io.h
>> index 54c159b..d4c78b4 100644
>> --- a/arch/arm/plat-omap/include/mach/io.h
>> +++ b/arch/arm/plat-omap/include/mach/io.h
>> @@ -192,7 +192,8 @@ extern void omap1_map_common_io(void);  extern
>> void omap1_init_common_hw(void);
>>
>>  extern void omap2_map_common_io(void); -extern void
>> omap2_init_common_hw(struct omap_sdrc_params *sp,
>> +extern void omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
>> +                             struct omap_sdrc_params *sdrc_cs1,
>>                               struct omap_opp *mpu_opps,
>>                               struct omap_opp *dsp_opps,
>>                               struct omap_opp *l3_opps);
>> diff --git a/arch/arm/plat-omap/include/mach/mux.h
>> b/arch/arm/plat-omap/include/mach/mux.h
>> index f7e298a..7368aba 100644
>> --- a/arch/arm/plat-omap/include/mach/mux.h
>> +++ b/arch/arm/plat-omap/include/mach/mux.h
>> @@ -803,6 +803,10 @@ enum omap34xx_index {
>>      AE5_34XX_GPIO143,
>>      H19_34XX_GPIO164_OUT,
>>      J25_34XX_GPIO170,
>> +
>> +    /* OMAP3 SDRC CKE signals to SDR/DDR ram chips */
>> +    H16_34XX_SDRC_CKE0,
>> +    H17_34XX_SDRC_CKE1,
>>  };
>>
>>  struct omap_mux_cfg {
>> diff --git a/arch/arm/plat-omap/include/mach/sdrc.h
>> b/arch/arm/plat-omap/include/mach/sdrc.h
>> index a678bc8..7e22143 100644
>> --- a/arch/arm/plat-omap/include/mach/sdrc.h
>> +++ b/arch/arm/plat-omap/include/mach/sdrc.h
>> @@ -114,9 +114,11 @@ struct omap_sdrc_params {
>>
>>  void omap2_sms_save_context(void);
>>  void omap2_sms_restore_context(void); -void __init
>> omap2_sdrc_init(struct omap_sdrc_params *); -struct omap_sdrc_params
>> *omap2_sdrc_get_params(unsigned long r);
>> -
>> +void __init omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
>> +                        struct omap_sdrc_params *sdrc_cs1); int
>> +omap2_sdrc_get_params(unsigned long r,
>> +                      struct omap_sdrc_params **sdrc_cs0,
>> +                      struct omap_sdrc_params **sdrc_cs1);
>>  #ifdef CONFIG_ARCH_OMAP2
>>
>>  struct memory_timings {
>> diff --git a/arch/arm/plat-omap/include/mach/sram.h
>> b/arch/arm/plat-omap/include/mach/sram.h
>> index ad0a600..98906ea 100644
>> --- a/arch/arm/plat-omap/include/mach/sram.h
>> +++ b/arch/arm/plat-omap/include/mach/sram.h
>> @@ -21,11 +21,13 @@ extern void omap2_sram_reprogram_sdrc(u32
>> perf_level, u32 dll_val,
>>                                    u32 mem_type);
>>  extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int
>> bypass);
>>
>> -extern u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl,
>> -                                 u32 sdrc_actim_ctrla,
>> -                                 u32 sdrc_actim_ctrlb, u32 m2,
>> -                                 u32 unlock_dll, u32 f, u32 sdrc_mr,
>> -                                 u32 inc);
>> +extern u32 omap3_configure_core_dpll(
>> +                    u32 m2, u32 unlock_dll, u32 f, u32 inc,
>> +                    u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
>> +                    u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
>> +                    u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
>> +                    u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
>> +
>>  extern void omap3_sram_restore_context(void);
>>
>>  /* Do not use these */
>> @@ -61,11 +63,12 @@ extern void omap243x_sram_reprogram_sdrc(u32
>> perf_level,
>> u32 dll_val,
>>  extern unsigned long omap243x_sram_reprogram_sdrc_sz;
>>
>>
>> -extern u32 omap3_sram_configure_core_dpll(u32 sdrc_rfr_ctrl,
>> -                                      u32 sdrc_actim_ctrla,
>> -                                      u32 sdrc_actim_ctrlb, u32 m2,
>> -                                      u32 unlock_dll, u32
>f, u32 sdrc_mr,
>> -                                      u32 inc);
>> +extern u32 omap3_sram_configure_core_dpll(
>> +                    u32 m2, u32 unlock_dll, u32 f, u32 inc,
>> +                    u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
>> +                    u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
>> +                    u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
>> +                    u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
>>  extern unsigned long omap3_sram_configure_core_dpll_sz;
>>
>>  #ifdef CONFIG_PM
>> diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c
>> index a2e60e7..517f45b 100644
>> --- a/arch/arm/plat-omap/sram.c
>> +++ b/arch/arm/plat-omap/sram.c
>> @@ -368,23 +368,29 @@ static inline int omap243x_sram_init(void)
>>
>>  #ifdef CONFIG_ARCH_OMAP3
>>
>> -static u32 (*_omap3_sram_configure_core_dpll)(u32 sdrc_rfr_ctrl,
>> -                                          u32 sdrc_actim_ctrla,
>> -                                          u32 sdrc_actim_ctrlb,
>> -                                          u32 m2, u32 unlock_dll,
>> -                                          u32 f, u32
>sdrc_mr, u32 inc);
>> -u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, u32
>sdrc_actim_ctrla,
>> -                          u32 sdrc_actim_ctrlb, u32 m2, u32
>unlock_dll,
>> -                          u32 f, u32 sdrc_mr, u32 inc)
>> - {
>> +static u32 (*_omap3_sram_configure_core_dpll)(
>> +                            u32 m2, u32 unlock_dll, u32 f, u32 inc,
>> +                            u32 sdrc_rfr_ctrl_0, u32
>sdrc_actim_ctrl_a_0,
>> +                            u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
>> +                            u32 sdrc_rfr_ctrl_1, u32
>sdrc_actim_ctrl_a_1,
>> +                            u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
>> +
>> +u32 omap3_configure_core_dpll(u32 m2, u32 unlock_dll, u32
>f, u32 inc,
>> +                          u32 sdrc_rfr_ctrl_0, u32
>sdrc_actim_ctrl_a_0,
>> +                          u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
>> +                          u32 sdrc_rfr_ctrl_1, u32
>sdrc_actim_ctrl_a_1,
>> +                          u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1) {
>>      if (!_omap3_sram_configure_core_dpll)
>>              omap_sram_error();
>>
>> -    return _omap3_sram_configure_core_dpll(sdrc_rfr_ctrl,
>> -                                           sdrc_actim_ctrla,
>> -                                           sdrc_actim_ctrlb, m2,
>> -                                           unlock_dll, f,
>sdrc_mr, inc);
>> - }
>> +    return _omap3_sram_configure_core_dpll(
>> +                            m2, unlock_dll, f, inc,
>> +                            sdrc_rfr_ctrl_0, sdrc_actim_ctrl_a_0,
>> +                            sdrc_actim_ctrl_b_0, sdrc_mr_0,
>> +                            sdrc_rfr_ctrl_1, sdrc_actim_ctrl_a_1,
>> +                            sdrc_actim_ctrl_b_1, sdrc_mr_1);
>> +}
>>
>>  #ifdef CONFIG_PM
>>  void omap3_sram_restore_context(void)
>> --
>> 1.6.2.5.168.g3823
>>
>>
>>
>> On Wednesday 03 June 2009 01:40:13 Paul Walmsley wrote:
>> > Hi Jean,
>> >
>> > a minor request: it is easier to comment on these patches if they
>> > are included inline in the E-mail message, rather than attached.
>> > That way code comments can be inlined in the reply.
>> >
>> > On Tue, 26 May 2009, Jean Pihet wrote:
>> > > Here is a patch for the SDRC 2nd CS support. It applies
>on top of
>> > > the current pm branch.
>> >
>> > Thanks for doing this work.
>> >
>> > > I have some questions:
>> > > - Is it OK to copy the micron sdram params file to a new
>file with
>> > > the 2 CSes params? One could use a unique file with
>#ifdef SDRC_SUPPORT_2_CSES.
>> >
>> > Is it possible for the SDRAM parameter files to remain unchanged,
>> > and to simply pass two struct omap_sdrc_params * to
>> > omap2_init_common_hw() and then to omap2_sdrc_init()?  Boards with
>> > only CS0 in use should pass NULL for the second omap_sdrc_params *.
>> >
>> > So something like this (I realize the PM branch has additional
>> > parameters here also):
>> >
>> > void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
>> >                                  struct omap_sdrc_params *sdrc_cs1)
>> >
>> > Then:
>> >
>> > void __init omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
>> >                             struct omap_sdrc_params *sdrc_cs1)
>> >
>> > I would prefer that approach.
>> >
>> > It would also be good to avoid changing the SDRC CS1 parameters in
>> > the SRAM code if the board does not use CS1.  Maybe pass in a flag
>> > that indicates whether CS1 is in use, and if not, avoid
>programming
>> > those registers?  The (admittedly minor) overhead of
>loading the CS1
>> > registers off the stack would be nice to avoid also.
>> >
>> > > - Does the RX51 board have 2 sdram parts? If so I need to update
>> > > the board file as well.
>> >
>> > Probably best if someone from Nokia handles this.
>> >
>> >
>> > - Paul
>>
>>
>
>
>- Paul
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux