This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM5728: IO delay settings

Part Number: AM5728
Other Parts Discussed in Thread: DRA752

Hi,

I have some questions regarding IO Delay of AM5728.

1) As you know,  IO Delay Recalibration sequence must be executed after AVS voltage adjusting. Does IO Delay Recalibration sequence adjust all IO pins of AM5728?

2) Can user confirm IO Delay recalibration is done correctly by seeing some registers?

3) At first step, IO Delay recalibration sequence is executed. At second step, IO delay setting is executed if Virtual or Manual IO timing mode is needed. Is my understanding right?

Please advise me.

I appreciate your quick reply.

Best regards,

Michi 

  • The AM57x team have been notified. They will respond here.
  • Hi Michi,

    1). No, it does not adjust all IO pins. U-boot performs IO delay recalibration only on the pads listed in the core_padconf_array_essential_<board> structure located in mux_data.h. See board/ti/am57xx/board.c:

      if (board_is_am572x_idk()) {

           pconf = core_padconf_array_essential_am572x_idk;

           pconf_sz = ARRAY_SIZE(core_padconf_array_essential_am572x_idk);

           iod = iodelay_cfg_array_am572x_idk;

           iod_sz = ARRAY_SIZE(iodelay_cfg_array_am572x_idk);

      } else if (board_is_am571x_idk()) {

           pconf = core_padconf_array_essential_am571x_idk;

           pconf_sz = ARRAY_SIZE(core_padconf_array_essential_am571x_idk);

           iod = iodelay_cfg_array_am571x_idk;

           iod_sz = ARRAY_SIZE(iodelay_cfg_array_am571x_idk);

      } else {

     /* Common for X15/GPEVM */

           pconf = core_padconf_array_essential_x15;

           pconf_sz = ARRAY_SIZE(core_padconf_array_essential_x15);

    /* There never was an SR1.0 X15.. So.. */

          if (omap_revision() == DRA752_ES1_1) {

                  iod = iodelay_cfg_array_x15_sr1_1;

                  iod_sz = ARRAY_SIZE(iodelay_cfg_array_x15_sr1_1);

           } else {

    /* Since full production should switch to SR2.0  */

                  iod = iodelay_cfg_array_x15_sr2_0;

                  iod_sz = ARRAY_SIZE(iodelay_cfg_array_x15_sr2_0);

          }

    }

    2). See Section 18.4.6.1.8 IO Delay Recalibration of AM572x TRM. You'll see that there are registers indicating the start of the io recalibration sequence & the completion of the io recalibration sequence. You can monitor those to see if the procedure have started/completed.

    3). Yes, your understanding is correct.  See Section 18.4.6.1.1 Pad Configuration Registers of the device TRM:

      "After POR, software must set the pad configuration registers to appropriate values depending on the desired device configuration. Configuration of the pad configuration registers is normally done as part of the IO delay recalibration sequence described in Section 18.4.6.1.8, IO Delay Recalibration"

    And the IO Delay Recalibration sequence is as follows:

      1. Complete the AVS voltage change on the VDD_CORE_L voltage domain and ensure voltage has stabilized to the new AVS target voltage

      2. Unlock the registers used

      3. Perform IO Delay Calibration

      4. Isolate the device IOs via the Isolation Sequence described in Section 18.4.6.1.7 Isolation Requirements

      5. Update the delay mechanism for each IO with new calibrated values

      6. Configure the pad configuration register (CTRL_CORE_PAD_x) for each IO with the desired MUXMODE, DELAYMODE, and MODESELECT settings.

      7. Configure all required Manual IO Timing Modes as described in Section 18.4.6.1.6, Manual IO Timing Modes

      8. De-isolate the device IOs via the de-isolation sequence described in Section 18.4.6.1.7 Isolation Requirements

      9. Relock the registers

    Hope this helps. 


    Best Regards, 
    Yordan

  • Dear Yordan-san,

    Thank you for your quick reply. It is very helpful.

    I would like to confirm regarding my question#1.

       > No, it does not adjust all IO pins. U-boot performs IO delay recalibration only on the pads listed in the core_padconf_array_essential_<board> structure located in mux_data.h. See board/ti/am57xx/board.c:

    Do you mean software must define the CORE PAD register for IO delay recalibration? I thought IO delay recalibration is harware feature of AM5728. So all IO pins are calibratted by automatic (by writing CONFIG_REG_0 [0] bit to 1).

    My customer 's OS is not Linux. So if the definition of CORE PAD register is needed before executing IO delay recalibration, do all IO pins that customer uses have to define by entry table like "pad_conf_entry core_padconf_array_essential_x15"?

    Please advise me again.

    I appreciate your quick reply.


    Best regards,

    Michi

  • Hi Michi,

    Do you mean software must define the CORE PAD register for IO delay recalibration? I thought IO delay recalibration is harware feature of AM5728. So all IO pins are calibratted by automatic (by writing CONFIG_REG_0 [0] bit to 1).


    Yes, software must define the device pads, which are initialized upon board boot-up. And then the Recalibration sequence is performed only for those pads. Moreover the recalibration sequence as defined in Section 18.4.6.1.8 IO Delay Recalibration should also be implemented by software. In u-boot this is done via recalibrate_iodelay().

    do all IO pins that customer uses have to define by entry table like "pad_conf_entry core_padconf_array_essential_x15"?

    Yes, they need to have some kind of pinmux settings... realizing it may deviate from the u-boot implementation, but they need to have something like this.

    Best Regards,
    Yordan
  • Dear Yordan-san,

    Thank you for your quick reply.

    I would like to confirm regarding the IO delay calibration sequence.

    IO Delay Recalibration sequence is as follows:

     1. Complete the AVS voltage change on the VDD_CORE_L voltage domain and ensure voltage has stabilized to the new AVS target voltage

     2. Unlock the registers used

     3. Perform IO Delay Calibration

     4. Isolate the device IOs via the Isolation Sequence described in Section 18.4.6.1.7 Isolation Requirements

     5. Update the delay mechanism for each IO with new calibrated values

     

    6. Configure the pad configuration register (CTRL_CORE_PAD_x) for each IO with the desired MUXMODE, DELAYMODE, and MODESELECT settings.

     7. Configure all required Manual IO Timing Modes as described in Section 18.4.6.1.6, Manual IO Timing Modes

     8. De-isolate the device IOs via the de-isolation sequence described in Section 18.4.6.1.7 Isolation Requirements

     9. Relock the registers

    Please see No.3

      3. Perform IO Delay Calibration


    This is IO delay calibration step. For executing this step,  "Configure the pad Configuration register" step is needed, I think.

    But this step is doen in No.6. Why? Should user have the entry table like "pad_conf_entry core_padconf_array_essential_x15" before No.3 execution?

    Please advise me again.

    Best regards,

    Michi

  • Dear Yordan-san,

    I would like to correct my previous question. Please see the below, and give me your advice again.

    The below is a part of IO Delay Recalibration sequence.

    3. Perform IO Delay Calibration ----------> I think the definition of pad configuration is not needed in this step. Is my understanding right?

    4. Isolate the device IOs via the Isolation Sequence

    5. Update the delay mechanism for each IO with new calibrated values:
    (a) Write 1 to register field CONFIG_REG_0[1] ROM_READ of the IODELAYCONFIG module to initiate a reload of calibrated delay values for all IOs. ----------> I think the delay value of all IOs is written with new calibrated values by writing 1 to CONFIG_REG_0[1]bit. In other words, IO delay calibration is executed to all IOs automatically. So In this step, the definition of pad configuration is not needed.  Is my understanding right?

    I appreciate your quick reply.

    Best regards,

    Michi

  • Hi Michi,

    Let me check this. I'll give you feedback later today.

    Best Regards,
    Yordan
  • Hi Michi,

    3. Perform IO Delay Calibration ----------> I think the definition of pad configuration is not needed in this step. Is my understanding right?
    5. Update the delay mechanism for each IO with new calibrated values:
    (a) Write 1 to register field CONFIG_REG_0[1] ROM_READ of the IODELAYCONFIG module to initiate a reload of calibrated delay values for all IOs. ----------> I think the delay value of all IOs is written with new calibrated values by writing 1 to CONFIG_REG_0[1]bit. In other words, IO delay calibration is executed to all IOs automatically. So In this step, the definition of pad configuration is not needed. Is my understanding right?

    Yes, your understanding is correct.

    You can always check the u-boot implementation in board/ti/am57xx/board.c :
    -> assign pointers & get the size of core_padconf_array_essential_<board> & iodelay_cfg_array_<board>
    -> __recalibrate_iodelay_start(); // implementation is in arch/arm/cpu/armv7/omap5/dra7xx_iodelay.c
             --> calibrate_iodelay((*ctrl)->iodelay_config_base);
             --> isolate_io(ISOLATE_IO);
             --> update_delay_mechanism((*ctrl)->iodelay_config_base);
    -> do_set_mux32((*ctrl)->control_padconf_core_base, pconf, pconf_sz);
    -> do_set_iodelay((*ctrl)->iodelay_config_base, iod, iod_sz);

    Best Regards,
    Yordan