/******************************************************************************
*
* Copyright (C) 2015 Xilinx, Inc.  All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/****************************************************************************/
/**
*
* @file psu_init.c
*
* This file is automatically generated
*
*****************************************************************************/

#include <xil_io.h>
#include <sleep.h>
#include "psu_init.h"
#define    DPLL_CFG_LOCK_DLY        63
#define    DPLL_CFG_LOCK_CNT        625
#define    DPLL_CFG_LFHF            3
#define    DPLL_CFG_CP              3
#define    DPLL_CFG_RES             2

static int mask_pollOnValue(u32 add, u32 mask, u32 value);

static int mask_poll(u32 add, u32 mask);

static void mask_delay(u32 delay);

static u32 mask_read(u32 add, u32 mask);

static void dpll_prog(int ddr_pll_fbdiv, int d_lock_dly,
	int d_lock_cnt, int d_lfhf, int d_cp, int d_res);

static
void PSU_Mask_Write(unsigned long offset, unsigned long mask,
	unsigned long val)
{
	unsigned long RegVal = 0x0;

	RegVal = Xil_In32(offset);
	RegVal &= ~(mask);
	RegVal |= (val & mask);
	Xil_Out32(offset, RegVal);
}

	void prog_reg(unsigned long addr, unsigned long mask,
	unsigned long shift, unsigned long value) {
	    int rdata = 0;

	    rdata  = Xil_In32(addr);
	    rdata  = rdata & (~mask);
	    rdata  = rdata | (value << shift);
	    Xil_Out32(addr, rdata);
	    }

unsigned long psu_pll_init_data(void)
{
    /*
    * RPLL INIT
    */
    /*
    * Register : RPLL_CFG @ 0XFF5E0034

    * PLL loop filter resistor control
    *  PSU_CRL_APB_RPLL_CFG_RES                                    0xc

    * PLL charge pump control
    *  PSU_CRL_APB_RPLL_CFG_CP                                     0x3

    * PLL loop filter high frequency capacitor control
    *  PSU_CRL_APB_RPLL_CFG_LFHF                                   0x3

    * Lock circuit counter setting
    *  PSU_CRL_APB_RPLL_CFG_LOCK_CNT                               0x339

    * Lock circuit configuration settings for lock windowsize
    *  PSU_CRL_APB_RPLL_CFG_LOCK_DLY                               0x3f

    * Helper data. Values are to be looked up in a table from Data Sheet
    * (OFFSET, MASK, VALUE)      (0XFF5E0034, 0xFE7FEDEFU ,0x7E672C6CU)
    */
	PSU_Mask_Write(CRL_APB_RPLL_CFG_OFFSET, 0xFE7FEDEFU, 0x7E672C6CU);
/*##################################################################### */

    /*
    * UPDATE FB_DIV
    */
    /*
    * Register : RPLL_CTRL @ 0XFF5E0030

    * Mux select for determining which clock feeds this PLL. 0XX pss_ref_clk i
    * s the source 100 video clk is the source 101 pss_alt_ref_clk is the sour
    * ce 110 aux_refclk[X] is the source 111 gt_crx_ref_clk is the source
    *  PSU_CRL_APB_RPLL_CTRL_PRE_SRC                               0x0

    * The integer portion of the feedback divider to the PLL
    *  PSU_CRL_APB_RPLL_CTRL_FBDIV                                 0x2d

    * This turns on the divide by 2 that is inside of the PLL. This does not c
    * hange the VCO frequency, just the output frequency
    *  PSU_CRL_APB_RPLL_CTRL_DIV2                                  0x1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0030, 0x00717F00U ,0x00012D00U)
    */
	PSU_Mask_Write(CRL_APB_RPLL_CTRL_OFFSET, 0x00717F00U, 0x00012D00U);
/*##################################################################### */

    /*
    * BY PASS PLL
    */
    /*
    * Register : RPLL_CTRL @ 0XFF5E0030

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRL_APB_RPLL_CTRL_BYPASS                                1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0030, 0x00000008U ,0x00000008U)
    */
	PSU_Mask_Write(CRL_APB_RPLL_CTRL_OFFSET, 0x00000008U, 0x00000008U);
/*##################################################################### */

    /*
    * ASSERT RESET
    */
    /*
    * Register : RPLL_CTRL @ 0XFF5E0030

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRL_APB_RPLL_CTRL_RESET                                 1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0030, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(CRL_APB_RPLL_CTRL_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * DEASSERT RESET
    */
    /*
    * Register : RPLL_CTRL @ 0XFF5E0030

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRL_APB_RPLL_CTRL_RESET                                 0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0030, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RPLL_CTRL_OFFSET, 0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * CHECK PLL STATUS
    */
    /*
    * Register : PLL_STATUS @ 0XFF5E0040

    * RPLL is locked
    *  PSU_CRL_APB_PLL_STATUS_RPLL_LOCK                            1
    * (OFFSET, MASK, VALUE)      (0XFF5E0040, 0x00000002U ,0x00000002U)
		*/
	mask_poll(CRL_APB_PLL_STATUS_OFFSET, 0x00000002U);

/*##################################################################### */

    /*
    * REMOVE PLL BY PASS
    */
    /*
    * Register : RPLL_CTRL @ 0XFF5E0030

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRL_APB_RPLL_CTRL_BYPASS                                0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0030, 0x00000008U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RPLL_CTRL_OFFSET, 0x00000008U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : RPLL_TO_FPD_CTRL @ 0XFF5E0048

    * Divisor value for this clock.
    *  PSU_CRL_APB_RPLL_TO_FPD_CTRL_DIVISOR0                       0x2

    * Control for a clock that will be generated in the LPD, but used in the F
    * PD as a clock source for the peripheral clock muxes.
    * (OFFSET, MASK, VALUE)      (0XFF5E0048, 0x00003F00U ,0x00000200U)
    */
	PSU_Mask_Write(CRL_APB_RPLL_TO_FPD_CTRL_OFFSET,
		0x00003F00U, 0x00000200U);
/*##################################################################### */

    /*
    * RPLL FRAC CFG
    */
    /*
    * IOPLL INIT
    */
    /*
    * Register : IOPLL_CFG @ 0XFF5E0024

    * PLL loop filter resistor control
    *  PSU_CRL_APB_IOPLL_CFG_RES                                   0x2

    * PLL charge pump control
    *  PSU_CRL_APB_IOPLL_CFG_CP                                    0x4

    * PLL loop filter high frequency capacitor control
    *  PSU_CRL_APB_IOPLL_CFG_LFHF                                  0x3

    * Lock circuit counter setting
    *  PSU_CRL_APB_IOPLL_CFG_LOCK_CNT                              0x258

    * Lock circuit configuration settings for lock windowsize
    *  PSU_CRL_APB_IOPLL_CFG_LOCK_DLY                              0x3f

    * Helper data. Values are to be looked up in a table from Data Sheet
    * (OFFSET, MASK, VALUE)      (0XFF5E0024, 0xFE7FEDEFU ,0x7E4B0C82U)
    */
	PSU_Mask_Write(CRL_APB_IOPLL_CFG_OFFSET, 0xFE7FEDEFU, 0x7E4B0C82U);
/*##################################################################### */

    /*
    * UPDATE FB_DIV
    */
    /*
    * Register : IOPLL_CTRL @ 0XFF5E0020

    * Mux select for determining which clock feeds this PLL. 0XX pss_ref_clk i
    * s the source 100 video clk is the source 101 pss_alt_ref_clk is the sour
    * ce 110 aux_refclk[X] is the source 111 gt_crx_ref_clk is the source
    *  PSU_CRL_APB_IOPLL_CTRL_PRE_SRC                              0x0

    * The integer portion of the feedback divider to the PLL
    *  PSU_CRL_APB_IOPLL_CTRL_FBDIV                                0x5a

    * This turns on the divide by 2 that is inside of the PLL. This does not c
    * hange the VCO frequency, just the output frequency
    *  PSU_CRL_APB_IOPLL_CTRL_DIV2                                 0x1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0020, 0x00717F00U ,0x00015A00U)
    */
	PSU_Mask_Write(CRL_APB_IOPLL_CTRL_OFFSET, 0x00717F00U, 0x00015A00U);
/*##################################################################### */

    /*
    * BY PASS PLL
    */
    /*
    * Register : IOPLL_CTRL @ 0XFF5E0020

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRL_APB_IOPLL_CTRL_BYPASS                               1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0020, 0x00000008U ,0x00000008U)
    */
	PSU_Mask_Write(CRL_APB_IOPLL_CTRL_OFFSET, 0x00000008U, 0x00000008U);
/*##################################################################### */

    /*
    * ASSERT RESET
    */
    /*
    * Register : IOPLL_CTRL @ 0XFF5E0020

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRL_APB_IOPLL_CTRL_RESET                                1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0020, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(CRL_APB_IOPLL_CTRL_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * DEASSERT RESET
    */
    /*
    * Register : IOPLL_CTRL @ 0XFF5E0020

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRL_APB_IOPLL_CTRL_RESET                                0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0020, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_IOPLL_CTRL_OFFSET, 0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * CHECK PLL STATUS
    */
    /*
    * Register : PLL_STATUS @ 0XFF5E0040

    * IOPLL is locked
    *  PSU_CRL_APB_PLL_STATUS_IOPLL_LOCK                           1
    * (OFFSET, MASK, VALUE)      (0XFF5E0040, 0x00000001U ,0x00000001U)
		*/
	mask_poll(CRL_APB_PLL_STATUS_OFFSET, 0x00000001U);

/*##################################################################### */

    /*
    * REMOVE PLL BY PASS
    */
    /*
    * Register : IOPLL_CTRL @ 0XFF5E0020

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRL_APB_IOPLL_CTRL_BYPASS                               0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFF5E0020, 0x00000008U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_IOPLL_CTRL_OFFSET, 0x00000008U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : IOPLL_TO_FPD_CTRL @ 0XFF5E0044

    * Divisor value for this clock.
    *  PSU_CRL_APB_IOPLL_TO_FPD_CTRL_DIVISOR0                      0x3

    * Control for a clock that will be generated in the LPD, but used in the F
    * PD as a clock source for the peripheral clock muxes.
    * (OFFSET, MASK, VALUE)      (0XFF5E0044, 0x00003F00U ,0x00000300U)
    */
	PSU_Mask_Write(CRL_APB_IOPLL_TO_FPD_CTRL_OFFSET,
		0x00003F00U, 0x00000300U);
/*##################################################################### */

    /*
    * IOPLL FRAC CFG
    */
    /*
    * APU_PLL INIT
    */
    /*
    * Register : APLL_CFG @ 0XFD1A0024

    * PLL loop filter resistor control
    *  PSU_CRF_APB_APLL_CFG_RES                                    0x2

    * PLL charge pump control
    *  PSU_CRF_APB_APLL_CFG_CP                                     0x3

    * PLL loop filter high frequency capacitor control
    *  PSU_CRF_APB_APLL_CFG_LFHF                                   0x3

    * Lock circuit counter setting
    *  PSU_CRF_APB_APLL_CFG_LOCK_CNT                               0x258

    * Lock circuit configuration settings for lock windowsize
    *  PSU_CRF_APB_APLL_CFG_LOCK_DLY                               0x3f

    * Helper data. Values are to be looked up in a table from Data Sheet
    * (OFFSET, MASK, VALUE)      (0XFD1A0024, 0xFE7FEDEFU ,0x7E4B0C62U)
    */
	PSU_Mask_Write(CRF_APB_APLL_CFG_OFFSET, 0xFE7FEDEFU, 0x7E4B0C62U);
/*##################################################################### */

    /*
    * UPDATE FB_DIV
    */
    /*
    * Register : APLL_CTRL @ 0XFD1A0020

    * Mux select for determining which clock feeds this PLL. 0XX pss_ref_clk i
    * s the source 100 video clk is the source 101 pss_alt_ref_clk is the sour
    * ce 110 aux_refclk[X] is the source 111 gt_crx_ref_clk is the source
    *  PSU_CRF_APB_APLL_CTRL_PRE_SRC                               0x0

    * The integer portion of the feedback divider to the PLL
    *  PSU_CRF_APB_APLL_CTRL_FBDIV                                 0x48

    * This turns on the divide by 2 that is inside of the PLL. This does not c
    * hange the VCO frequency, just the output frequency
    *  PSU_CRF_APB_APLL_CTRL_DIV2                                  0x1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0020, 0x00717F00U ,0x00014800U)
    */
	PSU_Mask_Write(CRF_APB_APLL_CTRL_OFFSET, 0x00717F00U, 0x00014800U);
/*##################################################################### */

    /*
    * BY PASS PLL
    */
    /*
    * Register : APLL_CTRL @ 0XFD1A0020

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRF_APB_APLL_CTRL_BYPASS                                1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0020, 0x00000008U ,0x00000008U)
    */
	PSU_Mask_Write(CRF_APB_APLL_CTRL_OFFSET, 0x00000008U, 0x00000008U);
/*##################################################################### */

    /*
    * ASSERT RESET
    */
    /*
    * Register : APLL_CTRL @ 0XFD1A0020

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRF_APB_APLL_CTRL_RESET                                 1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0020, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(CRF_APB_APLL_CTRL_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * DEASSERT RESET
    */
    /*
    * Register : APLL_CTRL @ 0XFD1A0020

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRF_APB_APLL_CTRL_RESET                                 0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0020, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_APLL_CTRL_OFFSET, 0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * CHECK PLL STATUS
    */
    /*
    * Register : PLL_STATUS @ 0XFD1A0044

    * APLL is locked
    *  PSU_CRF_APB_PLL_STATUS_APLL_LOCK                            1
    * (OFFSET, MASK, VALUE)      (0XFD1A0044, 0x00000001U ,0x00000001U)
		*/
	mask_poll(CRF_APB_PLL_STATUS_OFFSET, 0x00000001U);

/*##################################################################### */

    /*
    * REMOVE PLL BY PASS
    */
    /*
    * Register : APLL_CTRL @ 0XFD1A0020

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRF_APB_APLL_CTRL_BYPASS                                0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0020, 0x00000008U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_APLL_CTRL_OFFSET, 0x00000008U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : APLL_TO_LPD_CTRL @ 0XFD1A0048

    * Divisor value for this clock.
    *  PSU_CRF_APB_APLL_TO_LPD_CTRL_DIVISOR0                       0x3

    * Control for a clock that will be generated in the FPD, but used in the L
    * PD as a clock source for the peripheral clock muxes.
    * (OFFSET, MASK, VALUE)      (0XFD1A0048, 0x00003F00U ,0x00000300U)
    */
	PSU_Mask_Write(CRF_APB_APLL_TO_LPD_CTRL_OFFSET,
		0x00003F00U, 0x00000300U);
/*##################################################################### */

    /*
    * APLL FRAC CFG
    */
    /*
    * DDR_PLL INIT
    */
    /*
    * Register : DPLL_CFG @ 0XFD1A0030

    * PLL loop filter resistor control
    *  PSU_CRF_APB_DPLL_CFG_RES                                    0x2

    * PLL charge pump control
    *  PSU_CRF_APB_DPLL_CFG_CP                                     0x3

    * PLL loop filter high frequency capacitor control
    *  PSU_CRF_APB_DPLL_CFG_LFHF                                   0x3

    * Lock circuit counter setting
    *  PSU_CRF_APB_DPLL_CFG_LOCK_CNT                               0x258

    * Lock circuit configuration settings for lock windowsize
    *  PSU_CRF_APB_DPLL_CFG_LOCK_DLY                               0x3f

    * Helper data. Values are to be looked up in a table from Data Sheet
    * (OFFSET, MASK, VALUE)      (0XFD1A0030, 0xFE7FEDEFU ,0x7E4B0C62U)
    */
	PSU_Mask_Write(CRF_APB_DPLL_CFG_OFFSET, 0xFE7FEDEFU, 0x7E4B0C62U);
/*##################################################################### */

    /*
    * UPDATE FB_DIV
    */
    /*
    * Register : DPLL_CTRL @ 0XFD1A002C

    * Mux select for determining which clock feeds this PLL. 0XX pss_ref_clk i
    * s the source 100 video clk is the source 101 pss_alt_ref_clk is the sour
    * ce 110 aux_refclk[X] is the source 111 gt_crx_ref_clk is the source
    *  PSU_CRF_APB_DPLL_CTRL_PRE_SRC                               0x0

    * The integer portion of the feedback divider to the PLL
    *  PSU_CRF_APB_DPLL_CTRL_FBDIV                                 0x40

    * This turns on the divide by 2 that is inside of the PLL. This does not c
    * hange the VCO frequency, just the output frequency
    *  PSU_CRF_APB_DPLL_CTRL_DIV2                                  0x1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A002C, 0x00717F00U ,0x00014000U)
    */
	PSU_Mask_Write(CRF_APB_DPLL_CTRL_OFFSET, 0x00717F00U, 0x00014000U);
/*##################################################################### */

    /*
    * BY PASS PLL
    */
    /*
    * Register : DPLL_CTRL @ 0XFD1A002C

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRF_APB_DPLL_CTRL_BYPASS                                1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A002C, 0x00000008U ,0x00000008U)
    */
	PSU_Mask_Write(CRF_APB_DPLL_CTRL_OFFSET, 0x00000008U, 0x00000008U);
/*##################################################################### */

    /*
    * ASSERT RESET
    */
    /*
    * Register : DPLL_CTRL @ 0XFD1A002C

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRF_APB_DPLL_CTRL_RESET                                 1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A002C, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(CRF_APB_DPLL_CTRL_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * DEASSERT RESET
    */
    /*
    * Register : DPLL_CTRL @ 0XFD1A002C

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRF_APB_DPLL_CTRL_RESET                                 0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A002C, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_DPLL_CTRL_OFFSET, 0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * CHECK PLL STATUS
    */
    /*
    * Register : PLL_STATUS @ 0XFD1A0044

    * DPLL is locked
    *  PSU_CRF_APB_PLL_STATUS_DPLL_LOCK                            1
    * (OFFSET, MASK, VALUE)      (0XFD1A0044, 0x00000002U ,0x00000002U)
		*/
	mask_poll(CRF_APB_PLL_STATUS_OFFSET, 0x00000002U);

/*##################################################################### */

    /*
    * REMOVE PLL BY PASS
    */
    /*
    * Register : DPLL_CTRL @ 0XFD1A002C

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRF_APB_DPLL_CTRL_BYPASS                                0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A002C, 0x00000008U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_DPLL_CTRL_OFFSET, 0x00000008U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DPLL_TO_LPD_CTRL @ 0XFD1A004C

    * Divisor value for this clock.
    *  PSU_CRF_APB_DPLL_TO_LPD_CTRL_DIVISOR0                       0x2

    * Control for a clock that will be generated in the FPD, but used in the L
    * PD as a clock source for the peripheral clock muxes.
    * (OFFSET, MASK, VALUE)      (0XFD1A004C, 0x00003F00U ,0x00000200U)
    */
	PSU_Mask_Write(CRF_APB_DPLL_TO_LPD_CTRL_OFFSET,
		0x00003F00U, 0x00000200U);
/*##################################################################### */

    /*
    * DPLL FRAC CFG
    */
    /*
    * VIDEO_PLL INIT
    */
    /*
    * Register : VPLL_CFG @ 0XFD1A003C

    * PLL loop filter resistor control
    *  PSU_CRF_APB_VPLL_CFG_RES                                    0x2

    * PLL charge pump control
    *  PSU_CRF_APB_VPLL_CFG_CP                                     0x4

    * PLL loop filter high frequency capacitor control
    *  PSU_CRF_APB_VPLL_CFG_LFHF                                   0x3

    * Lock circuit counter setting
    *  PSU_CRF_APB_VPLL_CFG_LOCK_CNT                               0x258

    * Lock circuit configuration settings for lock windowsize
    *  PSU_CRF_APB_VPLL_CFG_LOCK_DLY                               0x3f

    * Helper data. Values are to be looked up in a table from Data Sheet
    * (OFFSET, MASK, VALUE)      (0XFD1A003C, 0xFE7FEDEFU ,0x7E4B0C82U)
    */
	PSU_Mask_Write(CRF_APB_VPLL_CFG_OFFSET, 0xFE7FEDEFU, 0x7E4B0C82U);
/*##################################################################### */

    /*
    * UPDATE FB_DIV
    */
    /*
    * Register : VPLL_CTRL @ 0XFD1A0038

    * Mux select for determining which clock feeds this PLL. 0XX pss_ref_clk i
    * s the source 100 video clk is the source 101 pss_alt_ref_clk is the sour
    * ce 110 aux_refclk[X] is the source 111 gt_crx_ref_clk is the source
    *  PSU_CRF_APB_VPLL_CTRL_PRE_SRC                               0x0

    * The integer portion of the feedback divider to the PLL
    *  PSU_CRF_APB_VPLL_CTRL_FBDIV                                 0x5a

    * This turns on the divide by 2 that is inside of the PLL. This does not c
    * hange the VCO frequency, just the output frequency
    *  PSU_CRF_APB_VPLL_CTRL_DIV2                                  0x1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0038, 0x00717F00U ,0x00015A00U)
    */
	PSU_Mask_Write(CRF_APB_VPLL_CTRL_OFFSET, 0x00717F00U, 0x00015A00U);
/*##################################################################### */

    /*
    * BY PASS PLL
    */
    /*
    * Register : VPLL_CTRL @ 0XFD1A0038

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRF_APB_VPLL_CTRL_BYPASS                                1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0038, 0x00000008U ,0x00000008U)
    */
	PSU_Mask_Write(CRF_APB_VPLL_CTRL_OFFSET, 0x00000008U, 0x00000008U);
/*##################################################################### */

    /*
    * ASSERT RESET
    */
    /*
    * Register : VPLL_CTRL @ 0XFD1A0038

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRF_APB_VPLL_CTRL_RESET                                 1

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0038, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(CRF_APB_VPLL_CTRL_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * DEASSERT RESET
    */
    /*
    * Register : VPLL_CTRL @ 0XFD1A0038

    * Asserts Reset to the PLL. When asserting reset, the PLL must already be
    * in BYPASS.
    *  PSU_CRF_APB_VPLL_CTRL_RESET                                 0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0038, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_VPLL_CTRL_OFFSET, 0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * CHECK PLL STATUS
    */
    /*
    * Register : PLL_STATUS @ 0XFD1A0044

    * VPLL is locked
    *  PSU_CRF_APB_PLL_STATUS_VPLL_LOCK                            1
    * (OFFSET, MASK, VALUE)      (0XFD1A0044, 0x00000004U ,0x00000004U)
		*/
	mask_poll(CRF_APB_PLL_STATUS_OFFSET, 0x00000004U);

/*##################################################################### */

    /*
    * REMOVE PLL BY PASS
    */
    /*
    * Register : VPLL_CTRL @ 0XFD1A0038

    * Bypasses the PLL clock. The usable clock will be determined from the POS
    * T_SRC field. (This signal may only be toggled after 4 cycles of the old
    * clock and 4 cycles of the new clock. This is not usually an issue, but d
    * esigners must be aware.)
    *  PSU_CRF_APB_VPLL_CTRL_BYPASS                                0

    * PLL Basic Control
    * (OFFSET, MASK, VALUE)      (0XFD1A0038, 0x00000008U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_VPLL_CTRL_OFFSET, 0x00000008U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : VPLL_TO_LPD_CTRL @ 0XFD1A0050

    * Divisor value for this clock.
    *  PSU_CRF_APB_VPLL_TO_LPD_CTRL_DIVISOR0                       0x3

    * Control for a clock that will be generated in the FPD, but used in the L
    * PD as a clock source for the peripheral clock muxes.
    * (OFFSET, MASK, VALUE)      (0XFD1A0050, 0x00003F00U ,0x00000300U)
    */
	PSU_Mask_Write(CRF_APB_VPLL_TO_LPD_CTRL_OFFSET,
		0x00003F00U, 0x00000300U);
/*##################################################################### */

    /*
    * VIDEO FRAC CFG
    */

	return 1;
}
unsigned long psu_clock_init_data(void)
{
    /*
    * CLOCK CONTROL SLCR REGISTER
    */
    /*
    * Register : GEM3_REF_CTRL @ 0XFF5E005C

    * Clock active for the RX channel
    *  PSU_CRL_APB_GEM3_REF_CTRL_RX_CLKACT                         0x1

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_GEM3_REF_CTRL_CLKACT                            0x1

    * 6 bit divider
    *  PSU_CRL_APB_GEM3_REF_CTRL_DIVISOR1                          0x1

    * 6 bit divider
    *  PSU_CRL_APB_GEM3_REF_CTRL_DIVISOR0                          0xc

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_GEM3_REF_CTRL_SRCSEL                            0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E005C, 0x063F3F07U ,0x06010C00U)
    */
	PSU_Mask_Write(CRL_APB_GEM3_REF_CTRL_OFFSET,
		0x063F3F07U, 0x06010C00U);
/*##################################################################### */

    /*
    * Register : GEM_TSU_REF_CTRL @ 0XFF5E0100

    * 6 bit divider
    *  PSU_CRL_APB_GEM_TSU_REF_CTRL_DIVISOR0                       0x6

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_GEM_TSU_REF_CTRL_SRCSEL                         0x0

    * 6 bit divider
    *  PSU_CRL_APB_GEM_TSU_REF_CTRL_DIVISOR1                       0x1

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_GEM_TSU_REF_CTRL_CLKACT                         0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0100, 0x013F3F07U ,0x01010600U)
    */
	PSU_Mask_Write(CRL_APB_GEM_TSU_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010600U);
/*##################################################################### */

    /*
    * Register : USB0_BUS_REF_CTRL @ 0XFF5E0060

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_USB0_BUS_REF_CTRL_CLKACT                        0x1

    * 6 bit divider
    *  PSU_CRL_APB_USB0_BUS_REF_CTRL_DIVISOR1                      0x1

    * 6 bit divider
    *  PSU_CRL_APB_USB0_BUS_REF_CTRL_DIVISOR0                      0x6

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_USB0_BUS_REF_CTRL_SRCSEL                        0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0060, 0x023F3F07U ,0x02010600U)
    */
	PSU_Mask_Write(CRL_APB_USB0_BUS_REF_CTRL_OFFSET,
		0x023F3F07U, 0x02010600U);
/*##################################################################### */

    /*
    * Register : USB3_DUAL_REF_CTRL @ 0XFF5E004C

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_USB3_DUAL_REF_CTRL_CLKACT                       0x1

    * 6 bit divider
    *  PSU_CRL_APB_USB3_DUAL_REF_CTRL_DIVISOR1                     0x3

    * 6 bit divider
    *  PSU_CRL_APB_USB3_DUAL_REF_CTRL_DIVISOR0                     0x19

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL. (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_USB3_DUAL_REF_CTRL_SRCSEL                       0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E004C, 0x023F3F07U ,0x02031900U)
    */
	PSU_Mask_Write(CRL_APB_USB3_DUAL_REF_CTRL_OFFSET,
		0x023F3F07U, 0x02031900U);
/*##################################################################### */

    /*
    * Register : QSPI_REF_CTRL @ 0XFF5E0068

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_QSPI_REF_CTRL_CLKACT                            0x1

    * 6 bit divider
    *  PSU_CRL_APB_QSPI_REF_CTRL_DIVISOR1                          0x1

    * 6 bit divider
    *  PSU_CRL_APB_QSPI_REF_CTRL_DIVISOR0                          0xc

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_QSPI_REF_CTRL_SRCSEL                            0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0068, 0x013F3F07U ,0x01010C00U)
    */
	PSU_Mask_Write(CRL_APB_QSPI_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010C00U);
/*##################################################################### */

    /*
    * Register : SDIO1_REF_CTRL @ 0XFF5E0070

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_SDIO1_REF_CTRL_CLKACT                           0x1

    * 6 bit divider
    *  PSU_CRL_APB_SDIO1_REF_CTRL_DIVISOR1                         0x1

    * 6 bit divider
    *  PSU_CRL_APB_SDIO1_REF_CTRL_DIVISOR0                         0x8

    * 000 = IOPLL; 010 = RPLL; 011 = VPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_SDIO1_REF_CTRL_SRCSEL                           0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0070, 0x013F3F07U ,0x01010800U)
    */
	PSU_Mask_Write(CRL_APB_SDIO1_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010800U);
/*##################################################################### */

    /*
    * Register : SDIO_CLK_CTRL @ 0XFF18030C

    * MIO pad selection for sdio1_rx_clk (feedback clock from the PAD) 0: MIO
    * [51] 1: MIO [76]
    *  PSU_IOU_SLCR_SDIO_CLK_CTRL_SDIO1_RX_SRC_SEL                 0

    * SoC Debug Clock Control
    * (OFFSET, MASK, VALUE)      (0XFF18030C, 0x00020000U ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_SDIO_CLK_CTRL_OFFSET,
		0x00020000U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : UART0_REF_CTRL @ 0XFF5E0074

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_UART0_REF_CTRL_CLKACT                           0x1

    * 6 bit divider
    *  PSU_CRL_APB_UART0_REF_CTRL_DIVISOR1                         0x1

    * 6 bit divider
    *  PSU_CRL_APB_UART0_REF_CTRL_DIVISOR0                         0xf

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_UART0_REF_CTRL_SRCSEL                           0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0074, 0x013F3F07U ,0x01010F00U)
    */
	PSU_Mask_Write(CRL_APB_UART0_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010F00U);
/*##################################################################### */

    /*
    * Register : UART1_REF_CTRL @ 0XFF5E0078

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_UART1_REF_CTRL_CLKACT                           0x1

    * 6 bit divider
    *  PSU_CRL_APB_UART1_REF_CTRL_DIVISOR1                         0x1

    * 6 bit divider
    *  PSU_CRL_APB_UART1_REF_CTRL_DIVISOR0                         0xf

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_UART1_REF_CTRL_SRCSEL                           0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0078, 0x013F3F07U ,0x01010F00U)
    */
	PSU_Mask_Write(CRL_APB_UART1_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010F00U);
/*##################################################################### */

    /*
    * Register : I2C0_REF_CTRL @ 0XFF5E0120

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_I2C0_REF_CTRL_CLKACT                            0x1

    * 6 bit divider
    *  PSU_CRL_APB_I2C0_REF_CTRL_DIVISOR1                          0x1

    * 6 bit divider
    *  PSU_CRL_APB_I2C0_REF_CTRL_DIVISOR0                          0xf

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_I2C0_REF_CTRL_SRCSEL                            0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0120, 0x013F3F07U ,0x01010F00U)
    */
	PSU_Mask_Write(CRL_APB_I2C0_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010F00U);
/*##################################################################### */

    /*
    * Register : I2C1_REF_CTRL @ 0XFF5E0124

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_I2C1_REF_CTRL_CLKACT                            0x1

    * 6 bit divider
    *  PSU_CRL_APB_I2C1_REF_CTRL_DIVISOR1                          0x1

    * 6 bit divider
    *  PSU_CRL_APB_I2C1_REF_CTRL_DIVISOR0                          0xf

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_I2C1_REF_CTRL_SRCSEL                            0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0124, 0x013F3F07U ,0x01010F00U)
    */
	PSU_Mask_Write(CRL_APB_I2C1_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010F00U);
/*##################################################################### */

    /*
    * Register : CAN1_REF_CTRL @ 0XFF5E0088

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_CAN1_REF_CTRL_CLKACT                            0x1

    * 6 bit divider
    *  PSU_CRL_APB_CAN1_REF_CTRL_DIVISOR1                          0x1

    * 6 bit divider
    *  PSU_CRL_APB_CAN1_REF_CTRL_DIVISOR0                          0xf

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_CAN1_REF_CTRL_SRCSEL                            0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0088, 0x013F3F07U ,0x01010F00U)
    */
	PSU_Mask_Write(CRL_APB_CAN1_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010F00U);
/*##################################################################### */

    /*
    * Register : CPU_R5_CTRL @ 0XFF5E0090

    * Turing this off will shut down the OCM, some parts of the APM, and preve
    * nt transactions going from the FPD to the LPD and could lead to system h
    * ang
    *  PSU_CRL_APB_CPU_R5_CTRL_CLKACT                              0x1

    * 6 bit divider
    *  PSU_CRL_APB_CPU_R5_CTRL_DIVISOR0                            0x3

    * 000 = RPLL; 010 = IOPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_CPU_R5_CTRL_SRCSEL                              0x2

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0090, 0x01003F07U ,0x01000302U)
    */
	PSU_Mask_Write(CRL_APB_CPU_R5_CTRL_OFFSET, 0x01003F07U, 0x01000302U);
/*##################################################################### */

    /*
    * Register : IOU_SWITCH_CTRL @ 0XFF5E009C

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_IOU_SWITCH_CTRL_CLKACT                          0x1

    * 6 bit divider
    *  PSU_CRL_APB_IOU_SWITCH_CTRL_DIVISOR0                        0x6

    * 000 = RPLL; 010 = IOPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_IOU_SWITCH_CTRL_SRCSEL                          0x2

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E009C, 0x01003F07U ,0x01000602U)
    */
	PSU_Mask_Write(CRL_APB_IOU_SWITCH_CTRL_OFFSET,
		0x01003F07U, 0x01000602U);
/*##################################################################### */

    /*
    * Register : PCAP_CTRL @ 0XFF5E00A4

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_PCAP_CTRL_CLKACT                                0x1

    * 6 bit divider
    *  PSU_CRL_APB_PCAP_CTRL_DIVISOR0                              0x8

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_PCAP_CTRL_SRCSEL                                0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E00A4, 0x01003F07U ,0x01000800U)
    */
	PSU_Mask_Write(CRL_APB_PCAP_CTRL_OFFSET, 0x01003F07U, 0x01000800U);
/*##################################################################### */

    /*
    * Register : LPD_SWITCH_CTRL @ 0XFF5E00A8

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_LPD_SWITCH_CTRL_CLKACT                          0x1

    * 6 bit divider
    *  PSU_CRL_APB_LPD_SWITCH_CTRL_DIVISOR0                        0x3

    * 000 = RPLL; 010 = IOPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_LPD_SWITCH_CTRL_SRCSEL                          0x2

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E00A8, 0x01003F07U ,0x01000302U)
    */
	PSU_Mask_Write(CRL_APB_LPD_SWITCH_CTRL_OFFSET,
		0x01003F07U, 0x01000302U);
/*##################################################################### */

    /*
    * Register : LPD_LSBUS_CTRL @ 0XFF5E00AC

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_LPD_LSBUS_CTRL_CLKACT                           0x1

    * 6 bit divider
    *  PSU_CRL_APB_LPD_LSBUS_CTRL_DIVISOR0                         0xf

    * 000 = RPLL; 010 = IOPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_LPD_LSBUS_CTRL_SRCSEL                           0x2

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E00AC, 0x01003F07U ,0x01000F02U)
    */
	PSU_Mask_Write(CRL_APB_LPD_LSBUS_CTRL_OFFSET,
		0x01003F07U, 0x01000F02U);
/*##################################################################### */

    /*
    * Register : DBG_LPD_CTRL @ 0XFF5E00B0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_DBG_LPD_CTRL_CLKACT                             0x1

    * 6 bit divider
    *  PSU_CRL_APB_DBG_LPD_CTRL_DIVISOR0                           0x6

    * 000 = RPLL; 010 = IOPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_DBG_LPD_CTRL_SRCSEL                             0x2

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E00B0, 0x01003F07U ,0x01000602U)
    */
	PSU_Mask_Write(CRL_APB_DBG_LPD_CTRL_OFFSET,
		0x01003F07U, 0x01000602U);
/*##################################################################### */

    /*
    * Register : ADMA_REF_CTRL @ 0XFF5E00B8

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_ADMA_REF_CTRL_CLKACT                            0x1

    * 6 bit divider
    *  PSU_CRL_APB_ADMA_REF_CTRL_DIVISOR0                          0x3

    * 000 = RPLL; 010 = IOPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_ADMA_REF_CTRL_SRCSEL                            0x2

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E00B8, 0x01003F07U ,0x01000302U)
    */
	PSU_Mask_Write(CRL_APB_ADMA_REF_CTRL_OFFSET,
		0x01003F07U, 0x01000302U);
/*##################################################################### */

    /*
    * Register : PL0_REF_CTRL @ 0XFF5E00C0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_PL0_REF_CTRL_CLKACT                             0x1

    * 6 bit divider
    *  PSU_CRL_APB_PL0_REF_CTRL_DIVISOR1                           0x1

    * 6 bit divider
    *  PSU_CRL_APB_PL0_REF_CTRL_DIVISOR0                           0xf

    * 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_PL0_REF_CTRL_SRCSEL                             0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E00C0, 0x013F3F07U ,0x01010F00U)
    */
	PSU_Mask_Write(CRL_APB_PL0_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010F00U);
/*##################################################################### */

    /*
    * Register : AMS_REF_CTRL @ 0XFF5E0108

    * 6 bit divider
    *  PSU_CRL_APB_AMS_REF_CTRL_DIVISOR1                           0x1

    * 6 bit divider
    *  PSU_CRL_APB_AMS_REF_CTRL_DIVISOR0                           0x1e

    * 000 = RPLL; 010 = IOPLL; 011 = DPLL; (This signal may only be toggled af
    * ter 4 cycles of the old clock and 4 cycles of the new clock. This is not
    *  usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_AMS_REF_CTRL_SRCSEL                             0x2

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_AMS_REF_CTRL_CLKACT                             0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0108, 0x013F3F07U ,0x01011E02U)
    */
	PSU_Mask_Write(CRL_APB_AMS_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01011E02U);
/*##################################################################### */

    /*
    * Register : DLL_REF_CTRL @ 0XFF5E0104

    * 000 = IOPLL; 001 = RPLL; (This signal may only be toggled after 4 cycles
    *  of the old clock and 4 cycles of the new clock. This is not usually an
    * issue, but designers must be aware.)
    *  PSU_CRL_APB_DLL_REF_CTRL_SRCSEL                             0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0104, 0x00000007U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_DLL_REF_CTRL_OFFSET,
		0x00000007U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : TIMESTAMP_REF_CTRL @ 0XFF5E0128

    * 6 bit divider
    *  PSU_CRL_APB_TIMESTAMP_REF_CTRL_DIVISOR0                     0xf

    * 1XX = pss_ref_clk; 000 = IOPLL; 010 = RPLL; 011 = DPLL; (This signal may
    *  only be toggled after 4 cycles of the old clock and 4 cycles of the new
    *  clock. This is not usually an issue, but designers must be aware.)
    *  PSU_CRL_APB_TIMESTAMP_REF_CTRL_SRCSEL                       0x0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRL_APB_TIMESTAMP_REF_CTRL_CLKACT                       0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFF5E0128, 0x01003F07U ,0x01000F00U)
    */
	PSU_Mask_Write(CRL_APB_TIMESTAMP_REF_CTRL_OFFSET,
		0x01003F07U, 0x01000F00U);
/*##################################################################### */

    /*
    * Register : SATA_REF_CTRL @ 0XFD1A00A0

    * 000 = IOPLL_TO_FPD; 010 = APLL; 011 = DPLL; (This signal may only be tog
    * gled after 4 cycles of the old clock and 4 cycles of the new clock. This
    *  is not usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_SATA_REF_CTRL_SRCSEL                            0x0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_SATA_REF_CTRL_CLKACT                            0x1

    * 6 bit divider
    *  PSU_CRF_APB_SATA_REF_CTRL_DIVISOR0                          0x2

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A00A0, 0x01003F07U ,0x01000200U)
    */
	PSU_Mask_Write(CRF_APB_SATA_REF_CTRL_OFFSET,
		0x01003F07U, 0x01000200U);
/*##################################################################### */

    /*
    * Register : PCIE_REF_CTRL @ 0XFD1A00B4

    * 000 = IOPLL_TO_FPD; 010 = RPLL_TO_FPD; 011 = DPLL; (This signal may only
    *  be toggled after 4 cycles of the old clock and 4 cycles of the new cloc
    * k. This is not usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_PCIE_REF_CTRL_SRCSEL                            0x0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_PCIE_REF_CTRL_CLKACT                            0x1

    * 6 bit divider
    *  PSU_CRF_APB_PCIE_REF_CTRL_DIVISOR0                          0x2

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A00B4, 0x01003F07U ,0x01000200U)
    */
	PSU_Mask_Write(CRF_APB_PCIE_REF_CTRL_OFFSET,
		0x01003F07U, 0x01000200U);
/*##################################################################### */

    /*
    * Register : DP_VIDEO_REF_CTRL @ 0XFD1A0070

    * 6 bit divider
    *  PSU_CRF_APB_DP_VIDEO_REF_CTRL_DIVISOR1                      0x1

    * 6 bit divider
    *  PSU_CRF_APB_DP_VIDEO_REF_CTRL_DIVISOR0                      0x5

    * 000 = VPLL; 010 = DPLL; 011 = RPLL_TO_FPD - might be using extra mux; (T
    * his signal may only be toggled after 4 cycles of the old clock and 4 cyc
    * les of the new clock. This is not usually an issue, but designers must b
    * e aware.)
    *  PSU_CRF_APB_DP_VIDEO_REF_CTRL_SRCSEL                        0x0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_DP_VIDEO_REF_CTRL_CLKACT                        0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A0070, 0x013F3F07U ,0x01010500U)
    */
	PSU_Mask_Write(CRF_APB_DP_VIDEO_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010500U);
/*##################################################################### */

    /*
    * Register : DP_AUDIO_REF_CTRL @ 0XFD1A0074

    * 6 bit divider
    *  PSU_CRF_APB_DP_AUDIO_REF_CTRL_DIVISOR1                      0x1

    * 6 bit divider
    *  PSU_CRF_APB_DP_AUDIO_REF_CTRL_DIVISOR0                      0xf

    * 000 = VPLL; 010 = DPLL; 011 = RPLL_TO_FPD - might be using extra mux; (T
    * his signal may only be toggled after 4 cycles of the old clock and 4 cyc
    * les of the new clock. This is not usually an issue, but designers must b
    * e aware.)
    *  PSU_CRF_APB_DP_AUDIO_REF_CTRL_SRCSEL                        0x3

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_DP_AUDIO_REF_CTRL_CLKACT                        0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A0074, 0x013F3F07U ,0x01010F03U)
    */
	PSU_Mask_Write(CRF_APB_DP_AUDIO_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010F03U);
/*##################################################################### */

    /*
    * Register : DP_STC_REF_CTRL @ 0XFD1A007C

    * 6 bit divider
    *  PSU_CRF_APB_DP_STC_REF_CTRL_DIVISOR1                        0x1

    * 6 bit divider
    *  PSU_CRF_APB_DP_STC_REF_CTRL_DIVISOR0                        0xe

    * 000 = VPLL; 010 = DPLL; 011 = RPLL_TO_FPD; (This signal may only be togg
    * led after 4 cycles of the old clock and 4 cycles of the new clock. This
    * is not usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_DP_STC_REF_CTRL_SRCSEL                          0x3

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_DP_STC_REF_CTRL_CLKACT                          0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A007C, 0x013F3F07U ,0x01010E03U)
    */
	PSU_Mask_Write(CRF_APB_DP_STC_REF_CTRL_OFFSET,
		0x013F3F07U, 0x01010E03U);
/*##################################################################### */

    /*
    * Register : ACPU_CTRL @ 0XFD1A0060

    * 6 bit divider
    *  PSU_CRF_APB_ACPU_CTRL_DIVISOR0                              0x1

    * 000 = APLL; 010 = DPLL; 011 = VPLL; (This signal may only be toggled aft
    * er 4 cycles of the old clock and 4 cycles of the new clock. This is not
    * usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_ACPU_CTRL_SRCSEL                                0x0

    * Clock active signal. Switch to 0 to disable the clock. For the half spee
    * d APU Clock
    *  PSU_CRF_APB_ACPU_CTRL_CLKACT_HALF                           0x1

    * Clock active signal. Switch to 0 to disable the clock. For the full spee
    * d ACPUX Clock. This will shut off the high speed clock to the entire APU
    *  PSU_CRF_APB_ACPU_CTRL_CLKACT_FULL                           0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A0060, 0x03003F07U ,0x03000100U)
    */
	PSU_Mask_Write(CRF_APB_ACPU_CTRL_OFFSET, 0x03003F07U, 0x03000100U);
/*##################################################################### */

    /*
    * Register : DBG_FPD_CTRL @ 0XFD1A0068

    * 6 bit divider
    *  PSU_CRF_APB_DBG_FPD_CTRL_DIVISOR0                           0x2

    * 000 = IOPLL_TO_FPD; 010 = DPLL; 011 = APLL; (This signal may only be tog
    * gled after 4 cycles of the old clock and 4 cycles of the new clock. This
    *  is not usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_DBG_FPD_CTRL_SRCSEL                             0x0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_DBG_FPD_CTRL_CLKACT                             0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A0068, 0x01003F07U ,0x01000200U)
    */
	PSU_Mask_Write(CRF_APB_DBG_FPD_CTRL_OFFSET,
		0x01003F07U, 0x01000200U);
/*##################################################################### */

    /*
    * Register : DDR_CTRL @ 0XFD1A0080

    * 6 bit divider
    *  PSU_CRF_APB_DDR_CTRL_DIVISOR0                               0x2

    * 000 = DPLL; 001 = VPLL; (This signal may only be toggled after 4 cycles
    * of the old clock and 4 cycles of the new clock. This is not usually an i
    * ssue, but designers must be aware.)
    *  PSU_CRF_APB_DDR_CTRL_SRCSEL                                 0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A0080, 0x00003F07U ,0x00000200U)
    */
	PSU_Mask_Write(CRF_APB_DDR_CTRL_OFFSET, 0x00003F07U, 0x00000200U);
/*##################################################################### */

    /*
    * Register : GPU_REF_CTRL @ 0XFD1A0084

    * 6 bit divider
    *  PSU_CRF_APB_GPU_REF_CTRL_DIVISOR0                           0x1

    * 000 = IOPLL_TO_FPD; 010 = VPLL; 011 = DPLL; (This signal may only be tog
    * gled after 4 cycles of the old clock and 4 cycles of the new clock. This
    *  is not usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_GPU_REF_CTRL_SRCSEL                             0x0

    * Clock active signal. Switch to 0 to disable the clock, which will stop c
    * lock for GPU (and both Pixel Processors).
    *  PSU_CRF_APB_GPU_REF_CTRL_CLKACT                             0x1

    * Clock active signal for Pixel Processor. Switch to 0 to disable the cloc
    * k only to this Pixel Processor
    *  PSU_CRF_APB_GPU_REF_CTRL_PP0_CLKACT                         0x1

    * Clock active signal for Pixel Processor. Switch to 0 to disable the cloc
    * k only to this Pixel Processor
    *  PSU_CRF_APB_GPU_REF_CTRL_PP1_CLKACT                         0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A0084, 0x07003F07U ,0x07000100U)
    */
	PSU_Mask_Write(CRF_APB_GPU_REF_CTRL_OFFSET,
		0x07003F07U, 0x07000100U);
/*##################################################################### */

    /*
    * Register : GDMA_REF_CTRL @ 0XFD1A00B8

    * 6 bit divider
    *  PSU_CRF_APB_GDMA_REF_CTRL_DIVISOR0                          0x2

    * 000 = APLL; 010 = VPLL; 011 = DPLL; (This signal may only be toggled aft
    * er 4 cycles of the old clock and 4 cycles of the new clock. This is not
    * usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_GDMA_REF_CTRL_SRCSEL                            0x0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_GDMA_REF_CTRL_CLKACT                            0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A00B8, 0x01003F07U ,0x01000200U)
    */
	PSU_Mask_Write(CRF_APB_GDMA_REF_CTRL_OFFSET,
		0x01003F07U, 0x01000200U);
/*##################################################################### */

    /*
    * Register : DPDMA_REF_CTRL @ 0XFD1A00BC

    * 6 bit divider
    *  PSU_CRF_APB_DPDMA_REF_CTRL_DIVISOR0                         0x2

    * 000 = APLL; 010 = VPLL; 011 = DPLL; (This signal may only be toggled aft
    * er 4 cycles of the old clock and 4 cycles of the new clock. This is not
    * usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_DPDMA_REF_CTRL_SRCSEL                           0x0

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_DPDMA_REF_CTRL_CLKACT                           0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A00BC, 0x01003F07U ,0x01000200U)
    */
	PSU_Mask_Write(CRF_APB_DPDMA_REF_CTRL_OFFSET,
		0x01003F07U, 0x01000200U);
/*##################################################################### */

    /*
    * Register : TOPSW_MAIN_CTRL @ 0XFD1A00C0

    * 6 bit divider
    *  PSU_CRF_APB_TOPSW_MAIN_CTRL_DIVISOR0                        0x2

    * 000 = APLL; 010 = VPLL; 011 = DPLL; (This signal may only be toggled aft
    * er 4 cycles of the old clock and 4 cycles of the new clock. This is not
    * usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_TOPSW_MAIN_CTRL_SRCSEL                          0x3

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_TOPSW_MAIN_CTRL_CLKACT                          0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A00C0, 0x01003F07U ,0x01000203U)
    */
	PSU_Mask_Write(CRF_APB_TOPSW_MAIN_CTRL_OFFSET,
		0x01003F07U, 0x01000203U);
/*##################################################################### */

    /*
    * Register : TOPSW_LSBUS_CTRL @ 0XFD1A00C4

    * 6 bit divider
    *  PSU_CRF_APB_TOPSW_LSBUS_CTRL_DIVISOR0                       0x5

    * 000 = APLL; 010 = IOPLL_TO_FPD; 011 = DPLL; (This signal may only be tog
    * gled after 4 cycles of the old clock and 4 cycles of the new clock. This
    *  is not usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_TOPSW_LSBUS_CTRL_SRCSEL                         0x2

    * Clock active signal. Switch to 0 to disable the clock
    *  PSU_CRF_APB_TOPSW_LSBUS_CTRL_CLKACT                         0x1

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A00C4, 0x01003F07U ,0x01000502U)
    */
	PSU_Mask_Write(CRF_APB_TOPSW_LSBUS_CTRL_OFFSET,
		0x01003F07U, 0x01000502U);
/*##################################################################### */

    /*
    * Register : DBG_TSTMP_CTRL @ 0XFD1A00F8

    * 6 bit divider
    *  PSU_CRF_APB_DBG_TSTMP_CTRL_DIVISOR0                         0x2

    * 000 = IOPLL_TO_FPD; 010 = DPLL; 011 = APLL; (This signal may only be tog
    * gled after 4 cycles of the old clock and 4 cycles of the new clock. This
    *  is not usually an issue, but designers must be aware.)
    *  PSU_CRF_APB_DBG_TSTMP_CTRL_SRCSEL                           0x0

    * This register controls this reference clock
    * (OFFSET, MASK, VALUE)      (0XFD1A00F8, 0x00003F07U ,0x00000200U)
    */
	PSU_Mask_Write(CRF_APB_DBG_TSTMP_CTRL_OFFSET,
		0x00003F07U, 0x00000200U);
/*##################################################################### */

    /*
    * Register : IOU_TTC_APB_CLK @ 0XFF180380

    * 00" = Select the APB switch clock for the APB interface of TTC0'01" = Se
    * lect the PLL ref clock for the APB interface of TTC0'10" = Select the R5
    *  clock for the APB interface of TTC0
    *  PSU_IOU_SLCR_IOU_TTC_APB_CLK_TTC0_SEL                       0

    * 00" = Select the APB switch clock for the APB interface of TTC1'01" = Se
    * lect the PLL ref clock for the APB interface of TTC1'10" = Select the R5
    *  clock for the APB interface of TTC1
    *  PSU_IOU_SLCR_IOU_TTC_APB_CLK_TTC1_SEL                       0

    * 00" = Select the APB switch clock for the APB interface of TTC2'01" = Se
    * lect the PLL ref clock for the APB interface of TTC2'10" = Select the R5
    *  clock for the APB interface of TTC2
    *  PSU_IOU_SLCR_IOU_TTC_APB_CLK_TTC2_SEL                       0

    * 00" = Select the APB switch clock for the APB interface of TTC3'01" = Se
    * lect the PLL ref clock for the APB interface of TTC3'10" = Select the R5
    *  clock for the APB interface of TTC3
    *  PSU_IOU_SLCR_IOU_TTC_APB_CLK_TTC3_SEL                       0

    * TTC APB clock select
    * (OFFSET, MASK, VALUE)      (0XFF180380, 0x000000FFU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_IOU_TTC_APB_CLK_OFFSET,
		0x000000FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : WDT_CLK_SEL @ 0XFD610100

    * System watchdog timer clock source selection: 0: Internal APB clock 1: E
    * xternal (PL clock via EMIO or Pinout clock via MIO)
    *  PSU_FPD_SLCR_WDT_CLK_SEL_SELECT                             0

    * SWDT clock source select
    * (OFFSET, MASK, VALUE)      (0XFD610100, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(FPD_SLCR_WDT_CLK_SEL_OFFSET,
		0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : WDT_CLK_SEL @ 0XFF180300

    * System watchdog timer clock source selection: 0: internal clock APB cloc
    * k 1: external clock from PL via EMIO, or from pinout via MIO
    *  PSU_IOU_SLCR_WDT_CLK_SEL_SELECT                             0

    * SWDT clock source select
    * (OFFSET, MASK, VALUE)      (0XFF180300, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_WDT_CLK_SEL_OFFSET,
		0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : CSUPMU_WDT_CLK_SEL @ 0XFF410050

    * System watchdog timer clock source selection: 0: internal clock APB cloc
    * k 1: external clock pss_ref_clk
    *  PSU_LPD_SLCR_CSUPMU_WDT_CLK_SEL_SELECT                      0

    * SWDT clock source select
    * (OFFSET, MASK, VALUE)      (0XFF410050, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(LPD_SLCR_CSUPMU_WDT_CLK_SEL_OFFSET,
		0x00000001U, 0x00000000U);
/*##################################################################### */


	return 1;
}
unsigned long psu_ddr_init_data(void)
{
    /*
    * DDR INITIALIZATION
    */
    /*
    * DDR CONTROLLER RESET
    */
    /*
    * Register : RST_DDR_SS @ 0XFD1A0108

    * DDR block level reset inside of the DDR Sub System
    *  PSU_CRF_APB_RST_DDR_SS_DDR_RESET                            0X1

    * DDR sub system block level reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0108, 0x00000008U ,0x00000008U)
    */
	PSU_Mask_Write(CRF_APB_RST_DDR_SS_OFFSET, 0x00000008U, 0x00000008U);
/*##################################################################### */

    /*
    * Register : MSTR @ 0XFD070000

    * Indicates the configuration of the device used in the system. - 00 - x4
    * device - 01 - x8 device - 10 - x16 device - 11 - x32 device
    *  PSU_DDRC_MSTR_DEVICE_CONFIG                                 0x1

    * Choose which registers are used. - 0 - Original registers - 1 - Shadow r
    * egisters
    *  PSU_DDRC_MSTR_FREQUENCY_MODE                                0x0

    * Only present for multi-rank configurations. Each bit represents one rank
    * . For two-rank configurations, only bits[25:24] are present. - 1 - popul
    * ated - 0 - unpopulated LSB is the lowest rank number. For 2 ranks follow
    * ing combinations are legal: - 01 - One rank - 11 - Two ranks - Others -
    * Reserved. For 4 ranks following combinations are legal: - 0001 - One ran
    * k - 0011 - Two ranks - 1111 - Four ranks
    *  PSU_DDRC_MSTR_ACTIVE_RANKS                                  0x1

    * SDRAM burst length used: - 0001 - Burst length of 2 (only supported for
    * mDDR) - 0010 - Burst length of 4 - 0100 - Burst length of 8 - 1000 - Bur
    * st length of 16 (only supported for mDDR, LPDDR2, and LPDDR4) All other
    * values are reserved. This controls the burst size used to access the SDR
    * AM. This must match the burst length mode register setting in the SDRAM.
    *  (For BC4/8 on-the-fly mode of DDR3 and DDR4, set this field to 0x0100)
    * Burst length of 2 is not supported with AXI ports when MEMC_BURST_LENGTH
    *  is 8. Burst length of 2 is only supported with MEMC_FREQ_RATIO = 1
    *  PSU_DDRC_MSTR_BURST_RDWR                                    0x4

    * Set to 1 when the uMCTL2 and DRAM has to be put in DLL-off mode for low
    * frequency operation. Set to 0 to put uMCTL2 and DRAM in DLL-on mode for
    * normal frequency operation. If DDR4 CRC/parity retry is enabled (CRCPARC
    * TL1.crc_parity_retry_enable = 1), dll_off_mode is not supported, and thi
    * s bit must be set to '0'.
    *  PSU_DDRC_MSTR_DLL_OFF_MODE                                  0x0

    * Selects proportion of DQ bus width that is used by the SDRAM - 00 - Full
    *  DQ bus width to SDRAM - 01 - Half DQ bus width to SDRAM - 10 - Quarter
    * DQ bus width to SDRAM - 11 - Reserved. Note that half bus width mode is
    * only supported when the SDRAM bus width is a multiple of 16, and quarter
    *  bus width mode is only supported when the SDRAM bus width is a multiple
    *  of 32 and the configuration parameter MEMC_QBUS_SUPPORT is set. Bus wid
    * th refers to DQ bus width (excluding any ECC width).
    *  PSU_DDRC_MSTR_DATA_BUS_WIDTH                                0x0

    * 1 indicates put the DRAM in geardown mode (2N) and 0 indicates put the D
    * RAM in normal mode (1N). This register can be changed, only when the Con
    * troller is in self-refresh mode. This signal must be set the same value
    * as MR3 bit A3. Note: Geardown mode is not supported if the configuration
    *  parameter MEMC_CMD_RTN2IDLE is set
    *  PSU_DDRC_MSTR_GEARDOWN_MODE                                 0x0

    * If 1, then uMCTL2 uses 2T timing. Otherwise, uses 1T timing. In 2T timin
    * g, all command signals (except chip select) are held for 2 clocks on the
    *  SDRAM bus. Chip select is asserted on the second cycle of the command N
    * ote: 2T timing is not supported in LPDDR2/LPDDR3/LPDDR4 mode Note: 2T ti
    * ming is not supported if the configuration parameter MEMC_CMD_RTN2IDLE i
    * s set Note: 2T timing is not supported in DDR4 geardown mode.
    *  PSU_DDRC_MSTR_EN_2T_TIMING_MODE                             0x0

    * When set, enable burst-chop in DDR3/DDR4. Burst Chop for Reads is exerci
    * sed only in HIF configurations (UMCTL2_INCL_ARB not set) and if in full
    * bus width mode (MSTR.data_bus_width = 00). Burst Chop for Writes is exer
    * cised only if Partial Writes enabled (UMCTL2_PARTIAL_WR=1) and if CRC is
    *  disabled (CRCPARCTL1.crc_enable = 0). If DDR4 CRC/parity retry is enabl
    * ed (CRCPARCTL1.crc_parity_retry_enable = 1), burst chop is not supported
    * , and this bit must be set to '0'
    *  PSU_DDRC_MSTR_BURSTCHOP                                     0x0

    * Select LPDDR4 SDRAM - 1 - LPDDR4 SDRAM device in use. - 0 - non-LPDDR4 d
    * evice in use Present only in designs configured to support LPDDR4.
    *  PSU_DDRC_MSTR_LPDDR4                                        0x0

    * Select DDR4 SDRAM - 1 - DDR4 SDRAM device in use. - 0 - non-DDR4 device
    * in use Present only in designs configured to support DDR4.
    *  PSU_DDRC_MSTR_DDR4                                          0x1

    * Select LPDDR3 SDRAM - 1 - LPDDR3 SDRAM device in use. - 0 - non-LPDDR3 d
    * evice in use Present only in designs configured to support LPDDR3.
    *  PSU_DDRC_MSTR_LPDDR3                                        0x0

    * Select LPDDR2 SDRAM - 1 - LPDDR2 SDRAM device in use. - 0 - non-LPDDR2 d
    * evice in use Present only in designs configured to support LPDDR2.
    *  PSU_DDRC_MSTR_LPDDR2                                        0x0

    * Select DDR3 SDRAM - 1 - DDR3 SDRAM device in use - 0 - non-DDR3 SDRAM de
    * vice in use Only present in designs that support DDR3.
    *  PSU_DDRC_MSTR_DDR3                                          0x0

    * Master Register
    * (OFFSET, MASK, VALUE)      (0XFD070000, 0xE30FBE3DU ,0x41040010U)
    */
	PSU_Mask_Write(DDRC_MSTR_OFFSET, 0xE30FBE3DU, 0x41040010U);
/*##################################################################### */

    /*
    * Register : MRCTRL0 @ 0XFD070010

    * Setting this register bit to 1 triggers a mode register read or write op
    * eration. When the MR operation is complete, the uMCTL2 automatically cle
    * ars this bit. The other register fields of this register must be written
    *  in a separate APB transaction, before setting this mr_wr bit. It is rec
    * ommended NOT to set this signal if in Init, Deep power-down or MPSM oper
    * ating modes.
    *  PSU_DDRC_MRCTRL0_MR_WR                                      0x0

    * Address of the mode register that is to be written to. - 0000 - MR0 - 00
    * 01 - MR1 - 0010 - MR2 - 0011 - MR3 - 0100 - MR4 - 0101 - MR5 - 0110 - MR
    * 6 - 0111 - MR7 Don't Care for LPDDR2/LPDDR3/LPDDR4 (see MRCTRL1.mr_data
    * for mode register addressing in LPDDR2/LPDDR3/LPDDR4) This signal is als
    * o used for writing to control words of RDIMMs. In that case, it correspo
    * nds to the bank address bits sent to the RDIMM In case of DDR4, the bit[
    * 3:2] corresponds to the bank group bits. Therefore, the bit[3] as well a
    * s the bit[2:0] must be set to an appropriate value which is considered b
    * oth the Address Mirroring of UDIMMs/RDIMMs and the Output Inversion of R
    * DIMMs.
    *  PSU_DDRC_MRCTRL0_MR_ADDR                                    0x0

    * Controls which rank is accessed by MRCTRL0.mr_wr. Normally, it is desire
    * d to access all ranks, so all bits should be set to 1. However, for mult
    * i-rank UDIMMs/RDIMMs which implement address mirroring, it may be necess
    * ary to access ranks individually. Examples (assume uMCTL2 is configured
    * for 4 ranks): - 0x1 - select rank 0 only - 0x2 - select rank 1 only - 0x
    * 5 - select ranks 0 and 2 - 0xA - select ranks 1 and 3 - 0xF - select ran
    * ks 0, 1, 2 and 3
    *  PSU_DDRC_MRCTRL0_MR_RANK                                    0x3

    * Indicates whether Software intervention is allowed via MRCTRL0/MRCTRL1 b
    * efore automatic SDRAM initialization routine or not. For DDR4, this bit
    * can be used to initialize the DDR4 RCD (MR7) before automatic SDRAM init
    * ialization. For LPDDR4, this bit can be used to program additional mode
    * registers before automatic SDRAM initialization if necessary. Note: This
    *  must be cleared to 0 after completing Software operation. Otherwise, SD
    * RAM initialization routine will not re-start. - 0 - Software interventio
    * n is not allowed - 1 - Software intervention is allowed
    *  PSU_DDRC_MRCTRL0_SW_INIT_INT                                0x0

    * Indicates whether the mode register operation is MRS in PDA mode or not
    * - 0 - MRS - 1 - MRS in Per DRAM Addressability mode
    *  PSU_DDRC_MRCTRL0_PDA_EN                                     0x0

    * Indicates whether the mode register operation is MRS or WR/RD for MPR (o
    * nly supported for DDR4) - 0 - MRS - 1 - WR/RD for MPR
    *  PSU_DDRC_MRCTRL0_MPR_EN                                     0x0

    * Indicates whether the mode register operation is read or write. Only use
    * d for LPDDR2/LPDDR3/LPDDR4/DDR4. - 0 - Write - 1 - Read
    *  PSU_DDRC_MRCTRL0_MR_TYPE                                    0x0

    * Mode Register Read/Write Control Register 0. Note: Do not enable more th
    * an one of the following fields simultaneously: - sw_init_int - pda_en -
    * mpr_en
    * (OFFSET, MASK, VALUE)      (0XFD070010, 0x8000F03FU ,0x00000030U)
    */
	PSU_Mask_Write(DDRC_MRCTRL0_OFFSET, 0x8000F03FU, 0x00000030U);
/*##################################################################### */

    /*
    * Register : DERATEEN @ 0XFD070020

    * Derate value of tRC for LPDDR4 - 0 - Derating uses +1. - 1 - Derating us
    * es +2. - 2 - Derating uses +3. - 3 - Derating uses +4. Present only in d
    * esigns configured to support LPDDR4. The required number of cycles for d
    * erating can be determined by dividing 3.75ns by the core_ddrc_core_clk p
    * eriod, and rounding up the next integer.
    *  PSU_DDRC_DERATEEN_RC_DERATE_VALUE                           0x2

    * Derate byte Present only in designs configured to support LPDDR2/LPDDR3/
    * LPDDR4 Indicates which byte of the MRR data is used for derating. The ma
    * ximum valid value depends on MEMC_DRAM_TOTAL_DATA_WIDTH.
    *  PSU_DDRC_DERATEEN_DERATE_BYTE                               0x0

    * Derate value - 0 - Derating uses +1. - 1 - Derating uses +2. Present onl
    * y in designs configured to support LPDDR2/LPDDR3/LPDDR4 Set to 0 for all
    *  LPDDR2 speed grades as derating value of +1.875 ns is less than a core_
    * ddrc_core_clk period. Can be 0 or 1 for LPDDR3/LPDDR4, depending if +1.8
    * 75 ns is less than a core_ddrc_core_clk period or not.
    *  PSU_DDRC_DERATEEN_DERATE_VALUE                              0x0

    * Enables derating - 0 - Timing parameter derating is disabled - 1 - Timin
    * g parameter derating is enabled using MR4 read value. Present only in de
    * signs configured to support LPDDR2/LPDDR3/LPDDR4 This field must be set
    * to '0' for non-LPDDR2/LPDDR3/LPDDR4 mode.
    *  PSU_DDRC_DERATEEN_DERATE_ENABLE                             0x0

    * Temperature Derate Enable Register
    * (OFFSET, MASK, VALUE)      (0XFD070020, 0x000003F3U ,0x00000200U)
    */
	PSU_Mask_Write(DDRC_DERATEEN_OFFSET, 0x000003F3U, 0x00000200U);
/*##################################################################### */

    /*
    * Register : DERATEINT @ 0XFD070024

    * Interval between two MR4 reads, used to derate the timing parameters. Pr
    * esent only in designs configured to support LPDDR2/LPDDR3/LPDDR4. This r
    * egister must not be set to zero
    *  PSU_DDRC_DERATEINT_MR4_READ_INTERVAL                        0x800000

    * Temperature Derate Interval Register
    * (OFFSET, MASK, VALUE)      (0XFD070024, 0xFFFFFFFFU ,0x00800000U)
    */
	PSU_Mask_Write(DDRC_DERATEINT_OFFSET, 0xFFFFFFFFU, 0x00800000U);
/*##################################################################### */

    /*
    * Register : PWRCTL @ 0XFD070030

    * Self refresh state is an intermediate state to enter to Self refresh pow
    * er down state or exit Self refresh power down state for LPDDR4. This reg
    * ister controls transition from the Self refresh state. - 1 - Prohibit tr
    * ansition from Self refresh state - 0 - Allow transition from Self refres
    * h state
    *  PSU_DDRC_PWRCTL_STAY_IN_SELFREF                             0x0

    * A value of 1 to this register causes system to move to Self Refresh stat
    * e immediately, as long as it is not in INIT or DPD/MPSM operating_mode.
    * This is referred to as Software Entry/Exit to Self Refresh. - 1 - Softwa
    * re Entry to Self Refresh - 0 - Software Exit from Self Refresh
    *  PSU_DDRC_PWRCTL_SELFREF_SW                                  0x0

    * When this is 1, the uMCTL2 puts the SDRAM into maximum power saving mode
    *  when the transaction store is empty. This register must be reset to '0'
    *  to bring uMCTL2 out of maximum power saving mode. Present only in desig
    * ns configured to support DDR4. For non-DDR4, this register should not be
    *  set to 1. Note that MPSM is not supported when using a DWC DDR PHY, if
    * the PHY parameter DWC_AC_CS_USE is disabled, as the MPSM exit sequence r
    * equires the chip-select signal to toggle. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_PWRCTL_MPSM_EN                                     0x0

    * Enable the assertion of dfi_dram_clk_disable whenever a clock is not req
    * uired by the SDRAM. If set to 0, dfi_dram_clk_disable is never asserted.
    *  Assertion of dfi_dram_clk_disable is as follows: In DDR2/DDR3, can only
    *  be asserted in Self Refresh. In DDR4, can be asserted in following: - i
    * n Self Refresh. - in Maximum Power Saving Mode In mDDR/LPDDR2/LPDDR3, ca
    * n be asserted in following: - in Self Refresh - in Power Down - in Deep
    * Power Down - during Normal operation (Clock Stop) In LPDDR4, can be asse
    * rted in following: - in Self Refresh Power Down - in Power Down - during
    *  Normal operation (Clock Stop)
    *  PSU_DDRC_PWRCTL_EN_DFI_DRAM_CLK_DISABLE                     0x0

    * When this is 1, uMCTL2 puts the SDRAM into deep power-down mode when the
    *  transaction store is empty. This register must be reset to '0' to bring
    *  uMCTL2 out of deep power-down mode. Controller performs automatic SDRAM
    *  initialization on deep power-down exit. Present only in designs configu
    * red to support mDDR or LPDDR2 or LPDDR3. For non-mDDR/non-LPDDR2/non-LPD
    * DR3, this register should not be set to 1. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_PWRCTL_DEEPPOWERDOWN_EN                            0x0

    * If true then the uMCTL2 goes into power-down after a programmable number
    *  of cycles 'maximum idle clocks before power down' (PWRTMG.powerdown_to_
    * x32). This register bit may be re-programmed during the course of normal
    *  operation.
    *  PSU_DDRC_PWRCTL_POWERDOWN_EN                                0x0

    * If true then the uMCTL2 puts the SDRAM into Self Refresh after a program
    * mable number of cycles 'maximum idle clocks before Self Refresh (PWRTMG.
    * selfref_to_x32)'. This register bit may be re-programmed during the cour
    * se of normal operation.
    *  PSU_DDRC_PWRCTL_SELFREF_EN                                  0x0

    * Low Power Control Register
    * (OFFSET, MASK, VALUE)      (0XFD070030, 0x0000007FU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_PWRCTL_OFFSET, 0x0000007FU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : PWRTMG @ 0XFD070034

    * After this many clocks of NOP or deselect the uMCTL2 automatically puts
    * the SDRAM into Self Refresh. This must be enabled in the PWRCTL.selfref_
    * en. Unit: Multiples of 32 clocks. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_PWRTMG_SELFREF_TO_X32                              0x40

    * Minimum deep power-down time. For mDDR, value from the JEDEC specificati
    * on is 0 as mDDR exits from deep power-down mode immediately after PWRCTL
    * .deeppowerdown_en is de-asserted. For LPDDR2/LPDDR3, value from the JEDE
    * C specification is 500us. Unit: Multiples of 4096 clocks. Present only i
    * n designs configured to support mDDR, LPDDR2 or LPDDR3. FOR PERFORMANCE
    * ONLY.
    *  PSU_DDRC_PWRTMG_T_DPD_X4096                                 0x84

    * After this many clocks of NOP or deselect the uMCTL2 automatically puts
    * the SDRAM into power-down. This must be enabled in the PWRCTL.powerdown_
    * en. Unit: Multiples of 32 clocks FOR PERFORMANCE ONLY.
    *  PSU_DDRC_PWRTMG_POWERDOWN_TO_X32                            0x10

    * Low Power Timing Register
    * (OFFSET, MASK, VALUE)      (0XFD070034, 0x00FFFF1FU ,0x00408410U)
    */
	PSU_Mask_Write(DDRC_PWRTMG_OFFSET, 0x00FFFF1FU, 0x00408410U);
/*##################################################################### */

    /*
    * Register : RFSHCTL0 @ 0XFD070050

    * Threshold value in number of clock cycles before the critical refresh or
    *  page timer expires. A critical refresh is to be issued before this thre
    * shold is reached. It is recommended that this not be changed from the de
    * fault value, currently shown as 0x2. It must always be less than interna
    * lly used t_rfc_nom_x32. Note that, in LPDDR2/LPDDR3/LPDDR4, internally u
    * sed t_rfc_nom_x32 may be equal to RFSHTMG.t_rfc_nom_x32>>2 if derating i
    * s enabled (DERATEEN.derate_enable=1). Otherwise, internally used t_rfc_n
    * om_x32 will be equal to RFSHTMG.t_rfc_nom_x32. Unit: Multiples of 32 clo
    * cks.
    *  PSU_DDRC_RFSHCTL0_REFRESH_MARGIN                            0x2

    * If the refresh timer (tRFCnom, also known as tREFI) has expired at least
    *  once, but it has not expired (RFSHCTL0.refresh_burst+1) times yet, then
    *  a speculative refresh may be performed. A speculative refresh is a refr
    * esh performed at a time when refresh would be useful, but before it is a
    * bsolutely required. When the SDRAM bus is idle for a period of time dete
    * rmined by this RFSHCTL0.refresh_to_x32 and the refresh timer has expired
    *  at least once since the last refresh, then a speculative refresh is per
    * formed. Speculative refreshes continues successively until there are no
    * refreshes pending or until new reads or writes are issued to the uMCTL2.
    *  FOR PERFORMANCE ONLY.
    *  PSU_DDRC_RFSHCTL0_REFRESH_TO_X32                            0x10

    * The programmed value + 1 is the number of refresh timeouts that is allow
    * ed to accumulate before traffic is blocked and the refreshes are forced
    * to execute. Closing pages to perform a refresh is a one-time penalty tha
    * t must be paid for each group of refreshes. Therefore, performing refres
    * hes in a burst reduces the per-refresh penalty of these page closings. H
    * igher numbers for RFSHCTL.refresh_burst slightly increases utilization;
    * lower numbers decreases the worst-case latency associated with refreshes
    * . - 0 - single refresh - 1 - burst-of-2 refresh - 7 - burst-of-8 refresh
    *  For information on burst refresh feature refer to section 3.9 of DDR2 J
    * EDEC specification - JESD79-2F.pdf. For DDR2/3, the refresh is always pe
    * r-rank and not per-bank. The rank refresh can be accumulated over 8*tREF
    * I cycles using the burst refresh feature. In DDR4 mode, according to Fin
    * e Granularity feature, 8 refreshes can be postponed in 1X mode, 16 refre
    * shes in 2X mode and 32 refreshes in 4X mode. If using PHY-initiated upda
    * tes, care must be taken in the setting of RFSHCTL0.refresh_burst, to ens
    * ure that tRFCmax is not violated due to a PHY-initiated update occurring
    *  shortly before a refresh burst was due. In this situation, the refresh
    * burst will be delayed until the PHY-initiated update is complete.
    *  PSU_DDRC_RFSHCTL0_REFRESH_BURST                             0x0

    * - 1 - Per bank refresh; - 0 - All bank refresh. Per bank refresh allows
    * traffic to flow to other banks. Per bank refresh is not supported by all
    *  LPDDR2 devices but should be supported by all LPDDR3/LPDDR4 devices. Pr
    * esent only in designs configured to support LPDDR2/LPDDR3/LPDDR4
    *  PSU_DDRC_RFSHCTL0_PER_BANK_REFRESH                          0x0

    * Refresh Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070050, 0x00F1F1F4U ,0x00210000U)
    */
	PSU_Mask_Write(DDRC_RFSHCTL0_OFFSET, 0x00F1F1F4U, 0x00210000U);
/*##################################################################### */

    /*
    * Register : RFSHCTL1 @ 0XFD070054

    * Refresh timer start for rank 1 (only present in multi-rank configuration
    * s). This is useful in staggering the refreshes to multiple ranks to help
    *  traffic to proceed. This is explained in Refresh Controls section of ar
    * chitecture chapter. Unit: Multiples of 32 clocks. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_RFSHCTL1_REFRESH_TIMER1_START_VALUE_X32            0x0

    * Refresh timer start for rank 0 (only present in multi-rank configuration
    * s). This is useful in staggering the refreshes to multiple ranks to help
    *  traffic to proceed. This is explained in Refresh Controls section of ar
    * chitecture chapter. Unit: Multiples of 32 clocks. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_RFSHCTL1_REFRESH_TIMER0_START_VALUE_X32            0x0

    * Refresh Control Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070054, 0x0FFF0FFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_RFSHCTL1_OFFSET, 0x0FFF0FFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : RFSHCTL3 @ 0XFD070060

    * Fine Granularity Refresh Mode - 000 - Fixed 1x (Normal mode) - 001 - Fix
    * ed 2x - 010 - Fixed 4x - 101 - Enable on the fly 2x (not supported) - 11
    * 0 - Enable on the fly 4x (not supported) - Everything else - reserved No
    * te: The on-the-fly modes is not supported in this version of the uMCTL2.
    *  Note: This must be set up while the Controller is in reset or while the
    *  Controller is in self-refresh mode. Changing this during normal operati
    * on is not allowed. Making this a dynamic register will be supported in f
    * uture version of the uMCTL2.
    *  PSU_DDRC_RFSHCTL3_REFRESH_MODE                              0x0

    * Toggle this signal (either from 0 to 1 or from 1 to 0) to indicate that
    * the refresh register(s) have been updated. The value is automatically up
    * dated when exiting reset, so it does not need to be toggled initially.
    *  PSU_DDRC_RFSHCTL3_REFRESH_UPDATE_LEVEL                      0x0

    * When '1', disable auto-refresh generated by the uMCTL2. When auto-refres
    * h is disabled, the SoC core must generate refreshes using the registers
    * reg_ddrc_rank0_refresh, reg_ddrc_rank1_refresh, reg_ddrc_rank2_refresh a
    * nd reg_ddrc_rank3_refresh. When dis_auto_refresh transitions from 0 to 1
    * , any pending refreshes are immediately scheduled by the uMCTL2. If DDR4
    *  CRC/parity retry is enabled (CRCPARCTL1.crc_parity_retry_enable = 1), d
    * isable auto-refresh is not supported, and this bit must be set to '0'. T
    * his register field is changeable on the fly.
    *  PSU_DDRC_RFSHCTL3_DIS_AUTO_REFRESH                          0x1

    * Refresh Control Register 3
    * (OFFSET, MASK, VALUE)      (0XFD070060, 0x00000073U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_RFSHCTL3_OFFSET, 0x00000073U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : RFSHTMG @ 0XFD070064

    * tREFI: Average time interval between refreshes per rank (Specification:
    * 7.8us for DDR2, DDR3 and DDR4. See JEDEC specification for mDDR, LPDDR2,
    *  LPDDR3 and LPDDR4). For LPDDR2/LPDDR3/LPDDR4: - if using all-bank refre
    * shes (RFSHCTL0.per_bank_refresh = 0), this register should be set to tRE
    * FIab - if using per-bank refreshes (RFSHCTL0.per_bank_refresh = 1), this
    *  register should be set to tREFIpb For configurations with MEMC_FREQ_RAT
    * IO=2, program this to (tREFI/2), no rounding up. In DDR4 mode, tREFI val
    * ue is different depending on the refresh mode. The user should program t
    * he appropriate value from the spec based on the value programmed in the
    * refresh mode register. Note that RFSHTMG.t_rfc_nom_x32 * 32 must be grea
    * ter than RFSHTMG.t_rfc_min, and RFSHTMG.t_rfc_nom_x32 must be greater th
    * an 0x1. Unit: Multiples of 32 clocks.
    *  PSU_DDRC_RFSHTMG_T_RFC_NOM_X32                              0x81

    * Used only when LPDDR3 memory type is connected. Should only be changed w
    * hen uMCTL2 is in reset. Specifies whether to use the tREFBW parameter (r
    * equired by some LPDDR3 devices which comply with earlier versions of the
    *  LPDDR3 JEDEC specification) or not: - 0 - tREFBW parameter not used - 1
    *  - tREFBW parameter used
    *  PSU_DDRC_RFSHTMG_LPDDR3_TREFBW_EN                           0x1

    * tRFC (min): Minimum time from refresh to refresh or activate. For MEMC_F
    * REQ_RATIO=1 configurations, t_rfc_min should be set to RoundUp(tRFCmin/t
    * CK). For MEMC_FREQ_RATIO=2 configurations, t_rfc_min should be set to Ro
    * undUp(RoundUp(tRFCmin/tCK)/2). In LPDDR2/LPDDR3/LPDDR4 mode: - if using
    * all-bank refreshes, the tRFCmin value in the above equations is equal to
    *  tRFCab - if using per-bank refreshes, the tRFCmin value in the above eq
    * uations is equal to tRFCpb In DDR4 mode, the tRFCmin value in the above
    * equations is different depending on the refresh mode (fixed 1X,2X,4X) an
    * d the device density. The user should program the appropriate value from
    *  the spec based on the 'refresh_mode' and the device density that is use
    * d. Unit: Clocks.
    *  PSU_DDRC_RFSHTMG_T_RFC_MIN                                  0x8b

    * Refresh Timing Register
    * (OFFSET, MASK, VALUE)      (0XFD070064, 0x0FFF83FFU ,0x0081808BU)
    */
	PSU_Mask_Write(DDRC_RFSHTMG_OFFSET, 0x0FFF83FFU, 0x0081808BU);
/*##################################################################### */

    /*
    * Register : ECCCFG0 @ 0XFD070070

    * Disable ECC scrubs. Valid only when ECCCFG0.ecc_mode = 3'b100 and MEMC_U
    * SE_RMW is defined
    *  PSU_DDRC_ECCCFG0_DIS_SCRUB                                  0x1

    * ECC mode indicator - 000 - ECC disabled - 100 - ECC enabled - SEC/DED ov
    * er 1 beat - all other settings are reserved for future use
    *  PSU_DDRC_ECCCFG0_ECC_MODE                                   0x0

    * ECC Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070070, 0x00000017U ,0x00000010U)
    */
	PSU_Mask_Write(DDRC_ECCCFG0_OFFSET, 0x00000017U, 0x00000010U);
/*##################################################################### */

    /*
    * Register : ECCCFG1 @ 0XFD070074

    * Selects whether to poison 1 or 2 bits - if 0 -> 2-bit (uncorrectable) da
    * ta poisoning, if 1 -> 1-bit (correctable) data poisoning, if ECCCFG1.dat
    * a_poison_en=1
    *  PSU_DDRC_ECCCFG1_DATA_POISON_BIT                            0x0

    * Enable ECC data poisoning - introduces ECC errors on writes to address s
    * pecified by the ECCPOISONADDR0/1 registers
    *  PSU_DDRC_ECCCFG1_DATA_POISON_EN                             0x0

    * ECC Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070074, 0x00000003U ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_ECCCFG1_OFFSET, 0x00000003U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : CRCPARCTL1 @ 0XFD0700C4

    * The maximum number of DFI PHY clock cycles allowed from the assertion of
    *  the dfi_rddata_en signal to the assertion of each of the corresponding
    * bits of the dfi_rddata_valid signal. This corresponds to the DFI timing
    * parameter tphy_rdlat. Refer to PHY specification for correct value. This
    *  value it only used for detecting read data timeout when DDR4 retry is e
    * nabled by CRCPARCTL1.crc_parity_retry_enable=1. Maximum supported value:
    *  - 1:1 Frequency mode : DFITMG0.dfi_t_rddata_en + CRCPARCTL1.dfi_t_phy_r
    * dlat < 'd114 - 1:2 Frequency mode ANDAND DFITMG0.dfi_rddata_use_sdr == 1
    *  : CRCPARCTL1.dfi_t_phy_rdlat < 64 - 1:2 Frequency mode ANDAND DFITMG0.d
    * fi_rddata_use_sdr == 0 : DFITMG0.dfi_t_rddata_en + CRCPARCTL1.dfi_t_phy_
    * rdlat < 'd114 Unit: DFI Clocks
    *  PSU_DDRC_CRCPARCTL1_DFI_T_PHY_RDLAT                         0x10

    * After a Parity or CRC error is flagged on dfi_alert_n signal, the softwa
    * re has an option to read the mode registers in the DRAM before the hardw
    * are begins the retry process - 1: Wait for software to read/write the mo
    * de registers before hardware begins the retry. After software is done wi
    * th its operations, it will clear the alert interrupt register bit - 0: H
    * ardware can begin the retry right away after the dfi_alert_n pulse goes
    * away. The value on this register is valid only when retry is enabled (PA
    * RCTRL.crc_parity_retry_enable = 1) If this register is set to 1 and if t
    * he software doesn't clear the interrupt register after handling the pari
    * ty/CRC error, then the hardware will not begin the retry process and the
    *  system will hang. In the case of Parity/CRC error, there are two possib
    * ilities when the software doesn't reset MR5[4] to 0. - (i) If 'Persisten
    * t parity' mode register bit is NOT set: the commands sent during retry a
    * nd normal operation are executed without parity checking. The value in t
    * he Parity error log register MPR Page 1 is valid. - (ii) If 'Persistent
    * parity' mode register bit is SET: Parity checking is done for commands s
    * ent during retry and normal operation. If multiple errors occur before M
    * R5[4] is cleared, the error log in MPR Page 1 should be treated as 'Don'
    * t care'.
    *  PSU_DDRC_CRCPARCTL1_ALERT_WAIT_FOR_SW                       0x1

    * - 1: Enable command retry mechanism in case of C/A Parity or CRC error -
    *  0: Disable command retry mechanism when C/A Parity or CRC features are
    * enabled. Note that retry functionality is not supported if burst chop is
    *  enabled (MSTR.burstchop = 1) and/or disable auto-refresh is enabled (RF
    * SHCTL3.dis_auto_refresh = 1)
    *  PSU_DDRC_CRCPARCTL1_CRC_PARITY_RETRY_ENABLE                 0x0

    * CRC Calculation setting register - 1: CRC includes DM signal - 0: CRC no
    * t includes DM signal Present only in designs configured to support DDR4.
    *  PSU_DDRC_CRCPARCTL1_CRC_INC_DM                              0x0

    * CRC enable Register - 1: Enable generation of CRC - 0: Disable generatio
    * n of CRC The setting of this register should match the CRC mode register
    *  setting in the DRAM.
    *  PSU_DDRC_CRCPARCTL1_CRC_ENABLE                              0x0

    * C/A Parity enable register - 1: Enable generation of C/A parity and dete
    * ction of C/A parity error - 0: Disable generation of C/A parity and disa
    * ble detection of C/A parity error If RCD's parity error detection or SDR
    * AM's parity detection is enabled, this register should be 1.
    *  PSU_DDRC_CRCPARCTL1_PARITY_ENABLE                           0x0

    * CRC Parity Control Register1
    * (OFFSET, MASK, VALUE)      (0XFD0700C4, 0x3F000391U ,0x10000200U)
    */
	PSU_Mask_Write(DDRC_CRCPARCTL1_OFFSET, 0x3F000391U, 0x10000200U);
/*##################################################################### */

    /*
    * Register : CRCPARCTL2 @ 0XFD0700C8

    * Value from the DRAM spec indicating the maximum width of the dfi_alert_n
    *  pulse when a parity error occurs. Recommended values: - tPAR_ALERT_PW.M
    * AX For configurations with MEMC_FREQ_RATIO=2, program this to tPAR_ALERT
    * _PW.MAX/2 and round up to next integer value. Values of 0, 1 and 2 are i
    * llegal. This value must be greater than CRCPARCTL2.t_crc_alert_pw_max.
    *  PSU_DDRC_CRCPARCTL2_T_PAR_ALERT_PW_MAX                      0x40

    * Value from the DRAM spec indicating the maximum width of the dfi_alert_n
    *  pulse when a CRC error occurs. Recommended values: - tCRC_ALERT_PW.MAX
    * For configurations with MEMC_FREQ_RATIO=2, program this to tCRC_ALERT_PW
    * .MAX/2 and round up to next integer value. Values of 0, 1 and 2 are ille
    * gal. This value must be less than CRCPARCTL2.t_par_alert_pw_max.
    *  PSU_DDRC_CRCPARCTL2_T_CRC_ALERT_PW_MAX                      0x5

    * Indicates the maximum duration in number of DRAM clock cycles for which
    * a command should be held in the Command Retry FIFO before it is popped o
    * ut. Every location in the Command Retry FIFO has an associated down coun
    * ting timer that will use this register as the start value. The down coun
    * ting starts when a command is loaded into the FIFO. The timer counts dow
    * n every 4 DRAM cycles. When the counter reaches zero, the entry is poppe
    * d from the FIFO. All the counters are frozen, if a C/A Parity or CRC err
    * or occurs before the counter reaches zero. The counter is reset to 0, af
    * ter all the commands in the FIFO are retried. Recommended(minimum) value
    * s: - Only C/A Parity is enabled. RoundUp((PHY Command Latency(DRAM CLK)
    * + CAL + RDIMM delay + tPAR_ALERT_ON.max + tPAR_UNKNOWN + PHY Alert Laten
    * cy(DRAM CLK) + board delay) / 4) + 2 - Both C/A Parity and CRC is enable
    * d/ Only CRC is enabled. RoundUp((PHY Command Latency(DRAM CLK) + CAL + R
    * DIMM delay + WL + 5(BL10)+ tCRC_ALERT.max + PHY Alert Latency(DRAM CLK)
    * + board delay) / 4) + 2 Note 1: All value (e.g. tPAR_ALERT_ON) should be
    *  in terms of DRAM Clock and round up Note 2: Board delay(Command/Alert_n
    * ) should be considered. Note 3: Use the worst case(longer) value for PHY
    *  Latencies/Board delay Note 4: The Recommended values are minimum value
    * to be set. For mode detail, See 'Calculation of FIFO Depth' section. Max
    *  value can be set to this register is defined below: - MEMC_BURST_LENGTH
    *  == 16 Full bus Mode (CRC=OFF) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-2
    *  Full bus Mode (CRC=ON) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-3 Half b
    * us Mode (CRC=OFF) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-4 Half bus Mod
    * e (CRC=ON) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-6 Quarter bus Mode (C
    * RC=OFF) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-8 Quarter bus Mode (CRC=
    * ON) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-12 - MEMC_BURST_LENGTH != 16
    *  Full bus Mode (CRC=OFF) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-1 Full
    * bus Mode (CRC=ON) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-2 Half bus Mod
    * e (CRC=OFF) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-2 Half bus Mode (CRC
    * =ON) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-3 Quarter bus Mode (CRC=OFF
    * ) Max value = UMCTL2_RETRY_CMD_FIFO_DEPTH-4 Quarter bus Mode (CRC=ON) Ma
    * x value = UMCTL2_RETRY_CMD_FIFO_DEPTH-6 Values of 0, 1 and 2 are illegal
    * .
    *  PSU_DDRC_CRCPARCTL2_RETRY_FIFO_MAX_HOLD_TIMER_X4            0x1f

    * CRC Parity Control Register2
    * (OFFSET, MASK, VALUE)      (0XFD0700C8, 0x01FF1F3FU ,0x0040051FU)
    */
	PSU_Mask_Write(DDRC_CRCPARCTL2_OFFSET, 0x01FF1F3FU, 0x0040051FU);
/*##################################################################### */

    /*
    * Register : INIT0 @ 0XFD0700D0

    * If lower bit is enabled the SDRAM initialization routine is skipped. The
    *  upper bit decides what state the controller starts up in when reset is
    * removed - 00 - SDRAM Intialization routine is run after power-up - 01 -
    * SDRAM Intialization routine is skipped after power-up. Controller starts
    *  up in Normal Mode - 11 - SDRAM Intialization routine is skipped after p
    * ower-up. Controller starts up in Self-refresh Mode - 10 - SDRAM Intializ
    * ation routine is run after power-up. Note: The only 2'b00 is supported f
    * or LPDDR4 in this version of the uMCTL2.
    *  PSU_DDRC_INIT0_SKIP_DRAM_INIT                               0x0

    * Cycles to wait after driving CKE high to start the SDRAM initialization
    * sequence. Unit: 1024 clocks. DDR2 typically requires a 400 ns delay, req
    * uiring this value to be programmed to 2 at all clock speeds. LPDDR2/LPDD
    * R3 typically requires this to be programmed for a delay of 200 us. LPDDR
    * 4 typically requires this to be programmed for a delay of 2 us. For conf
    * igurations with MEMC_FREQ_RATIO=2, program this to JEDEC spec value divi
    * ded by 2, and round it up to next integer value.
    *  PSU_DDRC_INIT0_POST_CKE_X1024                               0x2

    * Cycles to wait after reset before driving CKE high to start the SDRAM in
    * itialization sequence. Unit: 1024 clock cycles. DDR2 specifications typi
    * cally require this to be programmed for a delay of >= 200 us. LPDDR2/LPD
    * DR3: tINIT1 of 100 ns (min) LPDDR4: tINIT3 of 2 ms (min) For configurati
    * ons with MEMC_FREQ_RATIO=2, program this to JEDEC spec value divided by
    * 2, and round it up to next integer value.
    *  PSU_DDRC_INIT0_PRE_CKE_X1024                                0x106

    * SDRAM Initialization Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0700D0, 0xC3FF0FFFU ,0x00020106U)
    */
	PSU_Mask_Write(DDRC_INIT0_OFFSET, 0xC3FF0FFFU, 0x00020106U);
/*##################################################################### */

    /*
    * Register : INIT1 @ 0XFD0700D4

    * Number of cycles to assert SDRAM reset signal during init sequence. This
    *  is only present for designs supporting DDR3, DDR4 or LPDDR4 devices. Fo
    * r use with a DDR PHY, this should be set to a minimum of 1
    *  PSU_DDRC_INIT1_DRAM_RSTN_X1024                              0x2

    * Cycles to wait after completing the SDRAM initialization sequence before
    *  starting the dynamic scheduler. Unit: Counts of a global timer that pul
    * ses every 32 clock cycles. There is no known specific requirement for th
    * is; it may be set to zero.
    *  PSU_DDRC_INIT1_FINAL_WAIT_X32                               0x0

    * Wait period before driving the OCD complete command to SDRAM. Unit: Coun
    * ts of a global timer that pulses every 32 clock cycles. There is no know
    * n specific requirement for this; it may be set to zero.
    *  PSU_DDRC_INIT1_PRE_OCD_X32                                  0x0

    * SDRAM Initialization Register 1
    * (OFFSET, MASK, VALUE)      (0XFD0700D4, 0x01FF7F0FU ,0x00020000U)
    */
	PSU_Mask_Write(DDRC_INIT1_OFFSET, 0x01FF7F0FU, 0x00020000U);
/*##################################################################### */

    /*
    * Register : INIT2 @ 0XFD0700D8

    * Idle time after the reset command, tINIT4. Present only in designs confi
    * gured to support LPDDR2. Unit: 32 clock cycles.
    *  PSU_DDRC_INIT2_IDLE_AFTER_RESET_X32                         0x23

    * Time to wait after the first CKE high, tINIT2. Present only in designs c
    * onfigured to support LPDDR2/LPDDR3. Unit: 1 clock cycle. LPDDR2/LPDDR3 t
    * ypically requires 5 x tCK delay.
    *  PSU_DDRC_INIT2_MIN_STABLE_CLOCK_X1                          0x5

    * SDRAM Initialization Register 2
    * (OFFSET, MASK, VALUE)      (0XFD0700D8, 0x0000FF0FU ,0x00002305U)
    */
	PSU_Mask_Write(DDRC_INIT2_OFFSET, 0x0000FF0FU, 0x00002305U);
/*##################################################################### */

    /*
    * Register : INIT3 @ 0XFD0700DC

    * DDR2: Value to write to MR register. Bit 8 is for DLL and the setting he
    * re is ignored. The uMCTL2 sets this bit appropriately. DDR3/DDR4: Value
    * loaded into MR0 register. mDDR: Value to write to MR register. LPDDR2/LP
    * DDR3/LPDDR4 - Value to write to MR1 register
    *  PSU_DDRC_INIT3_MR                                           0x730

    * DDR2: Value to write to EMR register. Bits 9:7 are for OCD and the setti
    * ng in this register is ignored. The uMCTL2 sets those bits appropriately
    * . DDR3/DDR4: Value to write to MR1 register Set bit 7 to 0. If PHY-evalu
    * ation mode training is enabled, this bit is set appropriately by the uMC
    * TL2 during write leveling. mDDR: Value to write to EMR register. LPDDR2/
    * LPDDR3/LPDDR4 - Value to write to MR2 register
    *  PSU_DDRC_INIT3_EMR                                          0x301

    * SDRAM Initialization Register 3
    * (OFFSET, MASK, VALUE)      (0XFD0700DC, 0xFFFFFFFFU ,0x07300301U)
    */
	PSU_Mask_Write(DDRC_INIT3_OFFSET, 0xFFFFFFFFU, 0x07300301U);
/*##################################################################### */

    /*
    * Register : INIT4 @ 0XFD0700E0

    * DDR2: Value to write to EMR2 register. DDR3/DDR4: Value to write to MR2
    * register LPDDR2/LPDDR3/LPDDR4: Value to write to MR3 register mDDR: Unus
    * ed
    *  PSU_DDRC_INIT4_EMR2                                         0x20

    * DDR2: Value to write to EMR3 register. DDR3/DDR4: Value to write to MR3
    * register mDDR/LPDDR2/LPDDR3: Unused LPDDR4: Value to write to MR13 regis
    * ter
    *  PSU_DDRC_INIT4_EMR3                                         0x200

    * SDRAM Initialization Register 4
    * (OFFSET, MASK, VALUE)      (0XFD0700E0, 0xFFFFFFFFU ,0x00200200U)
    */
	PSU_Mask_Write(DDRC_INIT4_OFFSET, 0xFFFFFFFFU, 0x00200200U);
/*##################################################################### */

    /*
    * Register : INIT5 @ 0XFD0700E4

    * ZQ initial calibration, tZQINIT. Present only in designs configured to s
    * upport DDR3 or DDR4 or LPDDR2/LPDDR3. Unit: 32 clock cycles. DDR3 typica
    * lly requires 512 clocks. DDR4 requires 1024 clocks. LPDDR2/LPDDR3 requir
    * es 1 us.
    *  PSU_DDRC_INIT5_DEV_ZQINIT_X32                               0x21

    * Maximum duration of the auto initialization, tINIT5. Present only in des
    * igns configured to support LPDDR2/LPDDR3. LPDDR2/LPDDR3 typically requir
    * es 10 us.
    *  PSU_DDRC_INIT5_MAX_AUTO_INIT_X1024                          0x4

    * SDRAM Initialization Register 5
    * (OFFSET, MASK, VALUE)      (0XFD0700E4, 0x00FF03FFU ,0x00210004U)
    */
	PSU_Mask_Write(DDRC_INIT5_OFFSET, 0x00FF03FFU, 0x00210004U);
/*##################################################################### */

    /*
    * Register : INIT6 @ 0XFD0700E8

    * DDR4- Value to be loaded into SDRAM MR4 registers. Used in DDR4 designs
    * only.
    *  PSU_DDRC_INIT6_MR4                                          0x0

    * DDR4- Value to be loaded into SDRAM MR5 registers. Used in DDR4 designs
    * only.
    *  PSU_DDRC_INIT6_MR5                                          0x6c0

    * SDRAM Initialization Register 6
    * (OFFSET, MASK, VALUE)      (0XFD0700E8, 0xFFFFFFFFU ,0x000006C0U)
    */
	PSU_Mask_Write(DDRC_INIT6_OFFSET, 0xFFFFFFFFU, 0x000006C0U);
/*##################################################################### */

    /*
    * Register : INIT7 @ 0XFD0700EC

    * DDR4- Value to be loaded into SDRAM MR6 registers. Used in DDR4 designs
    * only.
    *  PSU_DDRC_INIT7_MR6                                          0x819

    * SDRAM Initialization Register 7
    * (OFFSET, MASK, VALUE)      (0XFD0700EC, 0xFFFF0000U ,0x08190000U)
    */
	PSU_Mask_Write(DDRC_INIT7_OFFSET, 0xFFFF0000U, 0x08190000U);
/*##################################################################### */

    /*
    * Register : DIMMCTL @ 0XFD0700F0

    * Disabling Address Mirroring for BG bits. When this is set to 1, BG0 and
    * BG1 are NOT swapped even if Address Mirroring is enabled. This will be r
    * equired for DDR4 DIMMs with x16 devices. - 1 - BG0 and BG1 are NOT swapp
    * ed. - 0 - BG0 and BG1 are swapped if address mirroring is enabled.
    *  PSU_DDRC_DIMMCTL_DIMM_DIS_BG_MIRRORING                      0x0

    * Enable for BG1 bit of MRS command. BG1 bit of the mode register address
    * is specified as RFU (Reserved for Future Use) and must be programmed to
    * 0 during MRS. In case where DRAMs which do not have BG1 are attached and
    *  both the CA parity and the Output Inversion are enabled, this must be s
    * et to 0, so that the calculation of CA parity will not include BG1 bit.
    * Note: This has no effect on the address of any other memory accesses, or
    *  of software-driven mode register accesses. If address mirroring is enab
    * led, this is applied to BG1 of even ranks and BG0 of odd ranks. - 1 - En
    * abled - 0 - Disabled
    *  PSU_DDRC_DIMMCTL_MRS_BG1_EN                                 0x1

    * Enable for A17 bit of MRS command. A17 bit of the mode register address
    * is specified as RFU (Reserved for Future Use) and must be programmed to
    * 0 during MRS. In case where DRAMs which do not have A17 are attached and
    *  the Output Inversion are enabled, this must be set to 0, so that the ca
    * lculation of CA parity will not include A17 bit. Note: This has no effec
    * t on the address of any other memory accesses, or of software-driven mod
    * e register accesses. - 1 - Enabled - 0 - Disabled
    *  PSU_DDRC_DIMMCTL_MRS_A17_EN                                 0x0

    * Output Inversion Enable (for DDR4 RDIMM implementations only). DDR4 RDIM
    * M implements the Output Inversion feature by default, which means that t
    * he following address, bank address and bank group bits of B-side DRAMs a
    * re inverted: A3-A9, A11, A13, A17, BA0-BA1, BG0-BG1. Setting this bit en
    * sures that, for mode register accesses generated by the uMCTL2 during th
    * e automatic initialization routine and enabling of a particular DDR4 fea
    * ture, separate A-side and B-side mode register accesses are generated. F
    * or B-side mode register accesses, these bits are inverted within the uMC
    * TL2 to compensate for this RDIMM inversion. Note: This has no effect on
    * the address of any other memory accesses, or of software-driven mode reg
    * ister accesses. - 1 - Implement output inversion for B-side DRAMs. - 0 -
    *  Do not implement output inversion for B-side DRAMs.
    *  PSU_DDRC_DIMMCTL_DIMM_OUTPUT_INV_EN                         0x0

    * Address Mirroring Enable (for multi-rank UDIMM implementations and multi
    * -rank DDR4 RDIMM implementations). Some UDIMMs and DDR4 RDIMMs implement
    *  address mirroring for odd ranks, which means that the following address
    * , bank address and bank group bits are swapped: (A3, A4), (A5, A6), (A7,
    *  A8), (BA0, BA1) and also (A11, A13), (BG0, BG1) for the DDR4. Setting t
    * his bit ensures that, for mode register accesses during the automatic in
    * itialization routine, these bits are swapped within the uMCTL2 to compen
    * sate for this UDIMM/RDIMM swapping. In addition to the automatic initial
    * ization routine, in case of DDR4 UDIMM/RDIMM, they are swapped during th
    * e automatic MRS access to enable/disable of a particular DDR4 feature. N
    * ote: This has no effect on the address of any other memory accesses, or
    * of software-driven mode register accesses. This is not supported for mDD
    * R, LPDDR2, LPDDR3 or LPDDR4 SDRAMs. Note: In case of x16 DDR4 DIMMs, BG1
    *  output of MRS for the odd ranks is same as BG0 because BG1 is invalid,
    * hence dimm_dis_bg_mirroring register must be set to 1. - 1 - For odd ran
    * ks, implement address mirroring for MRS commands to during initializatio
    * n and for any automatic DDR4 MRS commands (to be used if UDIMM/RDIMM imp
    * lements address mirroring) - 0 - Do not implement address mirroring
    *  PSU_DDRC_DIMMCTL_DIMM_ADDR_MIRR_EN                          0x0

    * Staggering enable for multi-rank accesses (for multi-rank UDIMM and RDIM
    * M implementations only). This is not supported for mDDR, LPDDR2, LPDDR3
    * or LPDDR4 SDRAMs. Note: Even if this bit is set it does not take care of
    *  software driven MR commands (via MRCTRL0/MRCTRL1), where software is re
    * sponsible to send them to seperate ranks as appropriate. - 1 - (DDR4) Se
    * nd MRS commands to each ranks seperately - 1 - (non-DDR4) Send all comma
    * nds to even and odd ranks seperately - 0 - Do not stagger accesses
    *  PSU_DDRC_DIMMCTL_DIMM_STAGGER_CS_EN                         0x0

    * DIMM Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0700F0, 0x0000003FU ,0x00000010U)
    */
	PSU_Mask_Write(DDRC_DIMMCTL_OFFSET, 0x0000003FU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : RANKCTL @ 0XFD0700F4

    * Only present for multi-rank configurations. Indicates the number of cloc
    * ks of gap in data responses when performing consecutive writes to differ
    * ent ranks. This is used to switch the delays in the PHY to match the ran
    * k requirements. This value should consider both PHY requirement and ODT
    * requirement. - PHY requirement: tphy_wrcsgap + 1 (see PHY databook for v
    * alue of tphy_wrcsgap) If CRC feature is enabled, should be increased by
    * 1. If write preamble is set to 2tCK(DDR4/LPDDR4 only), should be increas
    * ed by 1. If write postamble is set to 1.5tCK(LPDDR4 only), should be inc
    * reased by 1. - ODT requirement: The value programmed in this register ta
    * kes care of the ODT switch off timing requirement when switching ranks d
    * uring writes. For LPDDR4, the requirement is ODTLoff - ODTLon - BL/2 + 1
    *  For configurations with MEMC_FREQ_RATIO=1, program this to the larger o
    * f PHY requirement or ODT requirement. For configurations with MEMC_FREQ_
    * RATIO=2, program this to the larger value divided by two and round it up
    *  to the next integer.
    *  PSU_DDRC_RANKCTL_DIFF_RANK_WR_GAP                           0x6

    * Only present for multi-rank configurations. Indicates the number of cloc
    * ks of gap in data responses when performing consecutive reads to differe
    * nt ranks. This is used to switch the delays in the PHY to match the rank
    *  requirements. This value should consider both PHY requirement and ODT r
    * equirement. - PHY requirement: tphy_rdcsgap + 1 (see PHY databook for va
    * lue of tphy_rdcsgap) If read preamble is set to 2tCK(DDR4/LPDDR4 only),
    * should be increased by 1. If read postamble is set to 1.5tCK(LPDDR4 only
    * ), should be increased by 1. - ODT requirement: The value programmed in
    * this register takes care of the ODT switch off timing requirement when s
    * witching ranks during reads. For configurations with MEMC_FREQ_RATIO=1,
    * program this to the larger of PHY requirement or ODT requirement. For co
    * nfigurations with MEMC_FREQ_RATIO=2, program this to the larger value di
    * vided by two and round it up to the next integer.
    *  PSU_DDRC_RANKCTL_DIFF_RANK_RD_GAP                           0x6

    * Only present for multi-rank configurations. Background: Reads to the sam
    * e rank can be performed back-to-back. Reads to different ranks require a
    * dditional gap dictated by the register RANKCTL.diff_rank_rd_gap. This is
    *  to avoid possible data bus contention as well as to give PHY enough tim
    * e to switch the delay when changing ranks. The uMCTL2 arbitrates for bus
    *  access on a cycle-by-cycle basis; therefore after a read is scheduled,
    * there are few clock cycles (determined by the value on RANKCTL.diff_rank
    * _rd_gap register) in which only reads from the same rank are eligible to
    *  be scheduled. This prevents reads from other ranks from having fair acc
    * ess to the data bus. This parameter represents the maximum number of rea
    * ds that can be scheduled consecutively to the same rank. After this numb
    * er is reached, a delay equal to RANKCTL.diff_rank_rd_gap is inserted by
    * the scheduler to allow all ranks a fair opportunity to be scheduled. Hig
    * her numbers increase bandwidth utilization, lower numbers increase fairn
    * ess. This feature can be DISABLED by setting this register to 0. When se
    * t to 0, the Controller will stay on the same rank as long as commands ar
    * e available for it. Minimum programmable value is 0 (feature disabled) a
    * nd maximum programmable value is 0xF. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_RANKCTL_MAX_RANK_RD                                0xf

    * Rank Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0700F4, 0x00000FFFU ,0x0000066FU)
    */
	PSU_Mask_Write(DDRC_RANKCTL_OFFSET, 0x00000FFFU, 0x0000066FU);
/*##################################################################### */

    /*
    * Register : DRAMTMG0 @ 0XFD070100

    * Minimum time between write and precharge to same bank. Unit: Clocks Spec
    * ifications: WL + BL/2 + tWR = approximately 8 cycles + 15 ns = 14 clocks
    *  @400MHz and less for lower frequencies where: - WL = write latency - BL
    *  = burst length. This must match the value programmed in the BL bit of t
    * he mode register to the SDRAM. BST (burst terminate) is not supported at
    *  present. - tWR = Write recovery time. This comes directly from the SDRA
    * M specification. Add one extra cycle for LPDDR2/LPDDR3/LPDDR4 for this p
    * arameter. For configurations with MEMC_FREQ_RATIO=2, 1T mode, divide the
    *  above value by 2. No rounding up. For configurations with MEMC_FREQ_RAT
    * IO=2, 2T mode or LPDDR4 mode, divide the above value by 2 and round it u
    * p to the next integer value.
    *  PSU_DDRC_DRAMTMG0_WR2PRE                                    0x11

    * tFAW Valid only when 8 or more banks(or banks x bank groups) are present
    * . In 8-bank design, at most 4 banks must be activated in a rolling windo
    * w of tFAW cycles. For configurations with MEMC_FREQ_RATIO=2, program thi
    * s to (tFAW/2) and round up to next integer value. In a 4-bank design, se
    * t this register to 0x1 independent of the MEMC_FREQ_RATIO configuration.
    *  Unit: Clocks
    *  PSU_DDRC_DRAMTMG0_T_FAW                                     0x10

    * tRAS(max): Maximum time between activate and precharge to same bank. Thi
    * s is the maximum time that a page can be kept open Minimum value of this
    *  register is 1. Zero is invalid. For configurations with MEMC_FREQ_RATIO
    * =2, program this to (tRAS(max)-1)/2. No rounding up. Unit: Multiples of
    * 1024 clocks.
    *  PSU_DDRC_DRAMTMG0_T_RAS_MAX                                 0x24

    * tRAS(min): Minimum time between activate and precharge to the same bank.
    *  For configurations with MEMC_FREQ_RATIO=2, 1T mode, program this to tRA
    * S(min)/2. No rounding up. For configurations with MEMC_FREQ_RATIO=2, 2T
    * mode or LPDDR4 mode, program this to (tRAS(min)/2) and round it up to th
    * e next integer value. Unit: Clocks
    *  PSU_DDRC_DRAMTMG0_T_RAS_MIN                                 0x12

    * SDRAM Timing Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070100, 0x7F3F7F3FU ,0x11102412U)
    */
	PSU_Mask_Write(DDRC_DRAMTMG0_OFFSET, 0x7F3F7F3FU, 0x11102412U);
/*##################################################################### */

    /*
    * Register : DRAMTMG1 @ 0XFD070104

    * tXP: Minimum time after power-down exit to any operation. For DDR3, this
    *  should be programmed to tXPDLL if slow powerdown exit is selected in MR
    * 0[12]. If C/A parity for DDR4 is used, set to (tXP+PL) instead. For conf
    * igurations with MEMC_FREQ_RATIO=2, program this to (tXP/2) and round it
    * up to the next integer value. Units: Clocks
    *  PSU_DDRC_DRAMTMG1_T_XP                                      0x4

    * tRTP: Minimum time from read to precharge of same bank. - DDR2: tAL + BL
    * /2 + max(tRTP, 2) - 2 - DDR3: tAL + max (tRTP, 4) - DDR4: Max of followi
    * ng two equations: tAL + max (tRTP, 4) or, RL + BL/2 - tRP. - mDDR: BL/2
    * - LPDDR2: Depends on if it's LPDDR2-S2 or LPDDR2-S4: LPDDR2-S2: BL/2 + t
    * RTP - 1. LPDDR2-S4: BL/2 + max(tRTP,2) - 2. - LPDDR3: BL/2 + max(tRTP,4)
    *  - 4 - LPDDR4: BL/2 + max(tRTP,8) - 8 For configurations with MEMC_FREQ_
    * RATIO=2, 1T mode, divide the above value by 2. No rounding up. For confi
    * gurations with MEMC_FREQ_RATIO=2, 2T mode or LPDDR4 mode, divide the abo
    * ve value by 2 and round it up to the next integer value. Unit: Clocks.
    *  PSU_DDRC_DRAMTMG1_RD2PRE                                    0x4

    * tRC: Minimum time between activates to same bank. For configurations wit
    * h MEMC_FREQ_RATIO=2, program this to (tRC/2) and round up to next intege
    * r value. Unit: Clocks.
    *  PSU_DDRC_DRAMTMG1_T_RC                                      0x1a

    * SDRAM Timing Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070104, 0x001F1F7FU ,0x0004041AU)
    */
	PSU_Mask_Write(DDRC_DRAMTMG1_OFFSET, 0x001F1F7FU, 0x0004041AU);
/*##################################################################### */

    /*
    * Register : DRAMTMG2 @ 0XFD070108

    * Set to WL Time from write command to write data on SDRAM interface. This
    *  must be set to WL. For mDDR, it should normally be set to 1. Note that,
    *  depending on the PHY, if using RDIMM, it may be necessary to use a valu
    * e of WL + 1 to compensate for the extra cycle of latency through the RDI
    * MM For configurations with MEMC_FREQ_RATIO=2, divide the value calculate
    * d using the above equation by 2, and round it up to next integer. This r
    * egister field is not required for DDR2 and DDR3 (except if MEMC_TRAINING
    *  is set), as the DFI read and write latencies defined in DFITMG0 and DFI
    * TMG1 are sufficient for those protocols Unit: clocks
    *  PSU_DDRC_DRAMTMG2_WRITE_LATENCY                             0x7

    * Set to RL Time from read command to read data on SDRAM interface. This m
    * ust be set to RL. Note that, depending on the PHY, if using RDIMM, it ma
    * t be necessary to use a value of RL + 1 to compensate for the extra cycl
    * e of latency through the RDIMM For configurations with MEMC_FREQ_RATIO=2
    * , divide the value calculated using the above equation by 2, and round i
    * t up to next integer. This register field is not required for DDR2 and D
    * DR3 (except if MEMC_TRAINING is set), as the DFI read and write latencie
    * s defined in DFITMG0 and DFITMG1 are sufficient for those protocols Unit
    * : clocks
    *  PSU_DDRC_DRAMTMG2_READ_LATENCY                              0x8

    * DDR2/3/mDDR: RL + BL/2 + 2 - WL DDR4: RL + BL/2 + 1 + WR_PREAMBLE - WL L
    * PDDR2/LPDDR3: RL + BL/2 + RU(tDQSCKmax/tCK) + 1 - WL LPDDR4(DQ ODT is Di
    * sabled): RL + BL/2 + RU(tDQSCKmax/tCK) + WR_PREAMBLE + RD_POSTAMBLE - WL
    *  LPDDR4(DQ ODT is Enabled) : RL + BL/2 + RU(tDQSCKmax/tCK) + RD_POSTAMBL
    * E - ODTLon - RU(tODTon(min)/tCK) Minimum time from read command to write
    *  command. Include time for bus turnaround and all per-bank, per-rank, an
    * d global constraints. Unit: Clocks. Where: - WL = write latency - BL = b
    * urst length. This must match the value programmed in the BL bit of the m
    * ode register to the SDRAM - RL = read latency = CAS latency - WR_PREAMBL
    * E = write preamble. This is unique to DDR4 and LPDDR4. - RD_POSTAMBLE =
    * read postamble. This is unique to LPDDR4. For LPDDR2/LPDDR3/LPDDR4, if d
    * erating is enabled (DERATEEN.derate_enable=1), derated tDQSCKmax should
    * be used. For configurations with MEMC_FREQ_RATIO=2, divide the value cal
    * culated using the above equation by 2, and round it up to next integer.
    *  PSU_DDRC_DRAMTMG2_RD2WR                                     0x6

    * DDR4: CWL + PL + BL/2 + tWTR_L Others: CWL + BL/2 + tWTR In DDR4, minimu
    * m time from write command to read command for same bank group. In others
    * , minimum time from write command to read command. Includes time for bus
    *  turnaround, recovery times, and all per-bank, per-rank, and global cons
    * traints. Unit: Clocks. Where: - CWL = CAS write latency - PL = Parity la
    * tency - BL = burst length. This must match the value programmed in the B
    * L bit of the mode register to the SDRAM - tWTR_L = internal write to rea
    * d command delay for same bank group. This comes directly from the SDRAM
    * specification. - tWTR = internal write to read command delay. This comes
    *  directly from the SDRAM specification. Add one extra cycle for LPDDR2/L
    * PDDR3/LPDDR4 operation. For configurations with MEMC_FREQ_RATIO=2, divid
    * e the value calculated using the above equation by 2, and round it up to
    *  next integer.
    *  PSU_DDRC_DRAMTMG2_WR2RD                                     0xd

    * SDRAM Timing Register 2
    * (OFFSET, MASK, VALUE)      (0XFD070108, 0x3F3F3F3FU ,0x0708060DU)
    */
	PSU_Mask_Write(DDRC_DRAMTMG2_OFFSET, 0x3F3F3F3FU, 0x0708060DU);
/*##################################################################### */

    /*
    * Register : DRAMTMG3 @ 0XFD07010C

    * Time to wait after a mode register write or read (MRW or MRR). Present o
    * nly in designs configured to support LPDDR2, LPDDR3 or LPDDR4. LPDDR2 ty
    * pically requires value of 5. LPDDR3 typically requires value of 10. LPDD
    * R4: Set this to the larger of tMRW and tMRWCKEL. For LPDDR2, this regist
    * er is used for the time from a MRW/MRR to all other commands. For LDPDR3
    * , this register is used for the time from a MRW/MRR to a MRW/MRR.
    *  PSU_DDRC_DRAMTMG3_T_MRW                                     0x5

    * tMRD: Cycles to wait after a mode register write or read. Depending on t
    * he connected SDRAM, tMRD represents: DDR2/mDDR: Time from MRS to any com
    * mand DDR3/4: Time from MRS to MRS command LPDDR2: not used LPDDR3/4: Tim
    * e from MRS to non-MRS command For configurations with MEMC_FREQ_RATIO=2,
    *  program this to (tMRD/2) and round it up to the next integer value. If
    * C/A parity for DDR4 is used, set to tMRD_PAR(tMOD+PL) instead.
    *  PSU_DDRC_DRAMTMG3_T_MRD                                     0x4

    * tMOD: Parameter used only in DDR3 and DDR4. Cycles between load mode com
    * mand and following non-load mode command. If C/A parity for DDR4 is used
    * , set to tMOD_PAR(tMOD+PL) instead. Set to tMOD if MEMC_FREQ_RATIO=1, or
    *  tMOD/2 (rounded up to next integer) if MEMC_FREQ_RATIO=2. Note that if
    * using RDIMM, depending on the PHY, it may be necessary to use a value of
    *  tMOD + 1 or (tMOD + 1)/2 to compensate for the extra cycle of latency a
    * pplied to mode register writes by the RDIMM chip.
    *  PSU_DDRC_DRAMTMG3_T_MOD                                     0xc

    * SDRAM Timing Register 3
    * (OFFSET, MASK, VALUE)      (0XFD07010C, 0x3FF3F3FFU ,0x0050400CU)
    */
	PSU_Mask_Write(DDRC_DRAMTMG3_OFFSET, 0x3FF3F3FFU, 0x0050400CU);
/*##################################################################### */

    /*
    * Register : DRAMTMG4 @ 0XFD070110

    * tRCD - tAL: Minimum time from activate to read or write command to same
    * bank. For configurations with MEMC_FREQ_RATIO=2, program this to ((tRCD
    * - tAL)/2) and round it up to the next integer value. Minimum value allow
    * ed for this register is 1, which implies minimum (tRCD - tAL) value to b
    * e 2 in configurations with MEMC_FREQ_RATIO=2. Unit: Clocks.
    *  PSU_DDRC_DRAMTMG4_T_RCD                                     0x8

    * DDR4: tCCD_L: This is the minimum time between two reads or two writes f
    * or same bank group. Others: tCCD: This is the minimum time between two r
    * eads or two writes. For configurations with MEMC_FREQ_RATIO=2, program t
    * his to (tCCD_L/2 or tCCD/2) and round it up to the next integer value. U
    * nit: clocks.
    *  PSU_DDRC_DRAMTMG4_T_CCD                                     0x3

    * DDR4: tRRD_L: Minimum time between activates from bank 'a' to bank 'b' f
    * or same bank group. Others: tRRD: Minimum time between activates from ba
    * nk 'a' to bank 'b'For configurations with MEMC_FREQ_RATIO=2, program thi
    * s to (tRRD_L/2 or tRRD/2) and round it up to the next integer value. Uni
    * t: Clocks.
    *  PSU_DDRC_DRAMTMG4_T_RRD                                     0x3

    * tRP: Minimum time from precharge to activate of same bank. For MEMC_FREQ
    * _RATIO=1 configurations, t_rp should be set to RoundUp(tRP/tCK). For MEM
    * C_FREQ_RATIO=2 configurations, t_rp should be set to RoundDown(RoundUp(t
    * RP/tCK)/2) + 1. For MEMC_FREQ_RATIO=2 configurations in LPDDR4, t_rp sho
    * uld be set to RoundUp(RoundUp(tRP/tCK)/2). Unit: Clocks.
    *  PSU_DDRC_DRAMTMG4_T_RP                                      0x9

    * SDRAM Timing Register 4
    * (OFFSET, MASK, VALUE)      (0XFD070110, 0x1F0F0F1FU ,0x08030309U)
    */
	PSU_Mask_Write(DDRC_DRAMTMG4_OFFSET, 0x1F0F0F1FU, 0x08030309U);
/*##################################################################### */

    /*
    * Register : DRAMTMG5 @ 0XFD070114

    * This is the time before Self Refresh Exit that CK is maintained as a val
    * id clock before issuing SRX. Specifies the clock stable time before SRX.
    *  Recommended settings: - mDDR: 1 - LPDDR2: 2 - LPDDR3: 2 - LPDDR4: tCKCK
    * EH - DDR2: 1 - DDR3: tCKSRX - DDR4: tCKSRX For configurations with MEMC_
    * FREQ_RATIO=2, program this to recommended value divided by two and round
    *  it up to next integer.
    *  PSU_DDRC_DRAMTMG5_T_CKSRX                                   0x6

    * This is the time after Self Refresh Down Entry that CK is maintained as
    * a valid clock. Specifies the clock disable delay after SRE. Recommended
    * settings: - mDDR: 0 - LPDDR2: 2 - LPDDR3: 2 - LPDDR4: tCKCKEL - DDR2: 1
    * - DDR3: max (10 ns, 5 tCK) - DDR4: max (10 ns, 5 tCK) For configurations
    *  with MEMC_FREQ_RATIO=2, program this to recommended value divided by tw
    * o and round it up to next integer.
    *  PSU_DDRC_DRAMTMG5_T_CKSRE                                   0x6

    * Minimum CKE low width for Self refresh or Self refresh power down entry
    * to exit timing in memory clock cycles. Recommended settings: - mDDR: tRF
    * C - LPDDR2: tCKESR - LPDDR3: tCKESR - LPDDR4: max(tCKELPD, tSR) - DDR2:
    * tCKE - DDR3: tCKE + 1 - DDR4: tCKE + 1 For configurations with MEMC_FREQ
    * _RATIO=2, program this to recommended value divided by two and round it
    * up to next integer.
    *  PSU_DDRC_DRAMTMG5_T_CKESR                                   0x4

    * Minimum number of cycles of CKE HIGH/LOW during power-down and self refr
    * esh. - LPDDR2/LPDDR3 mode: Set this to the larger of tCKE or tCKESR - LP
    * DDR4 mode: Set this to the larger of tCKE, tCKELPD or tSR. - Non-LPDDR2/
    * non-LPDDR3/non-LPDDR4 designs: Set this to tCKE value. For configuration
    * s with MEMC_FREQ_RATIO=2, program this to (value described above)/2 and
    * round it up to the next integer value. Unit: Clocks.
    *  PSU_DDRC_DRAMTMG5_T_CKE                                     0x3

    * SDRAM Timing Register 5
    * (OFFSET, MASK, VALUE)      (0XFD070114, 0x0F0F3F1FU ,0x06060403U)
    */
	PSU_Mask_Write(DDRC_DRAMTMG5_OFFSET, 0x0F0F3F1FU, 0x06060403U);
/*##################################################################### */

    /*
    * Register : DRAMTMG6 @ 0XFD070118

    * This is the time after Deep Power Down Entry that CK is maintained as a
    * valid clock. Specifies the clock disable delay after DPDE. Recommended s
    * ettings: - mDDR: 0 - LPDDR2: 2 - LPDDR3: 2 For configurations with MEMC_
    * FREQ_RATIO=2, program this to recommended value divided by two and round
    *  it up to next integer. This is only present for designs supporting mDDR
    *  or LPDDR2/LPDDR3 devices.
    *  PSU_DDRC_DRAMTMG6_T_CKDPDE                                  0x1

    * This is the time before Deep Power Down Exit that CK is maintained as a
    * valid clock before issuing DPDX. Specifies the clock stable time before
    * DPDX. Recommended settings: - mDDR: 1 - LPDDR2: 2 - LPDDR3: 2 For config
    * urations with MEMC_FREQ_RATIO=2, program this to recommended value divid
    * ed by two and round it up to next integer. This is only present for desi
    * gns supporting mDDR or LPDDR2 devices.
    *  PSU_DDRC_DRAMTMG6_T_CKDPDX                                  0x1

    * This is the time before Clock Stop Exit that CK is maintained as a valid
    *  clock before issuing Clock Stop Exit. Specifies the clock stable time b
    * efore next command after Clock Stop Exit. Recommended settings: - mDDR:
    * 1 - LPDDR2: tXP + 2 - LPDDR3: tXP + 2 - LPDDR4: tXP + 2 For configuratio
    * ns with MEMC_FREQ_RATIO=2, program this to recommended value divided by
    * two and round it up to next integer. This is only present for designs su
    * pporting mDDR or LPDDR2/LPDDR3/LPDDR4 devices.
    *  PSU_DDRC_DRAMTMG6_T_CKCSX                                   0x4

    * SDRAM Timing Register 6
    * (OFFSET, MASK, VALUE)      (0XFD070118, 0x0F0F000FU ,0x01010004U)
    */
	PSU_Mask_Write(DDRC_DRAMTMG6_OFFSET, 0x0F0F000FU, 0x01010004U);
/*##################################################################### */

    /*
    * Register : DRAMTMG7 @ 0XFD07011C

    * This is the time after Power Down Entry that CK is maintained as a valid
    *  clock. Specifies the clock disable delay after PDE. Recommended setting
    * s: - mDDR: 0 - LPDDR2: 2 - LPDDR3: 2 - LPDDR4: tCKCKEL For configuration
    * s with MEMC_FREQ_RATIO=2, program this to recommended value divided by t
    * wo and round it up to next integer. This is only present for designs sup
    * porting mDDR or LPDDR2/LPDDR3/LPDDR4 devices.
    *  PSU_DDRC_DRAMTMG7_T_CKPDE                                   0x6

    * This is the time before Power Down Exit that CK is maintained as a valid
    *  clock before issuing PDX. Specifies the clock stable time before PDX. R
    * ecommended settings: - mDDR: 0 - LPDDR2: 2 - LPDDR3: 2 - LPDDR4: 2 For c
    * onfigurations with MEMC_FREQ_RATIO=2, program this to recommended value
    * divided by two and round it up to next integer. This is only present for
    *  designs supporting mDDR or LPDDR2/LPDDR3/LPDDR4 devices.
    *  PSU_DDRC_DRAMTMG7_T_CKPDX                                   0x6

    * SDRAM Timing Register 7
    * (OFFSET, MASK, VALUE)      (0XFD07011C, 0x00000F0FU ,0x00000606U)
    */
	PSU_Mask_Write(DDRC_DRAMTMG7_OFFSET, 0x00000F0FU, 0x00000606U);
/*##################################################################### */

    /*
    * Register : DRAMTMG8 @ 0XFD070120

    * tXS_FAST: Exit Self Refresh to ZQCL, ZQCS and MRS (only CL, WR, RTP and
    * Geardown mode). For configurations with MEMC_FREQ_RATIO=2, program this
    * to the above value divided by 2 and round up to next integer value. Unit
    * : Multiples of 32 clocks. Note: This is applicable to only ZQCL/ZQCS com
    * mands. Note: Ensure this is less than or equal to t_xs_x32.
    *  PSU_DDRC_DRAMTMG8_T_XS_FAST_X32                             0x3

    * tXS_ABORT: Exit Self Refresh to commands not requiring a locked DLL in S
    * elf Refresh Abort. For configurations with MEMC_FREQ_RATIO=2, program th
    * is to the above value divided by 2 and round up to next integer value. U
    * nit: Multiples of 32 clocks. Note: Ensure this is less than or equal to
    * t_xs_x32.
    *  PSU_DDRC_DRAMTMG8_T_XS_ABORT_X32                            0x3

    * tXSDLL: Exit Self Refresh to commands requiring a locked DLL. For config
    * urations with MEMC_FREQ_RATIO=2, program this to the above value divided
    *  by 2 and round up to next integer value. Unit: Multiples of 32 clocks.
    * Note: Used only for DDR2, DDR3 and DDR4 SDRAMs.
    *  PSU_DDRC_DRAMTMG8_T_XS_DLL_X32                              0xd

    * tXS: Exit Self Refresh to commands not requiring a locked DLL. For confi
    * gurations with MEMC_FREQ_RATIO=2, program this to the above value divide
    * d by 2 and round up to next integer value. Unit: Multiples of 32 clocks.
    *  Note: Used only for DDR2, DDR3 and DDR4 SDRAMs.
    *  PSU_DDRC_DRAMTMG8_T_XS_X32                                  0x6

    * SDRAM Timing Register 8
    * (OFFSET, MASK, VALUE)      (0XFD070120, 0x7F7F7F7FU ,0x03030D06U)
    */
	PSU_Mask_Write(DDRC_DRAMTMG8_OFFSET, 0x7F7F7F7FU, 0x03030D06U);
/*##################################################################### */

    /*
    * Register : DRAMTMG9 @ 0XFD070124

    * DDR4 Write preamble mode - 0: 1tCK preamble - 1: 2tCK preamble Present o
    * nly with MEMC_FREQ_RATIO=2
    *  PSU_DDRC_DRAMTMG9_DDR4_WR_PREAMBLE                          0x0

    * tCCD_S: This is the minimum time between two reads or two writes for dif
    * ferent bank group. For bank switching (from bank 'a' to bank 'b'), the m
    * inimum time is this value + 1. For configurations with MEMC_FREQ_RATIO=2
    * , program this to (tCCD_S/2) and round it up to the next integer value.
    * Present only in designs configured to support DDR4. Unit: clocks.
    *  PSU_DDRC_DRAMTMG9_T_CCD_S                                   0x2

    * tRRD_S: Minimum time between activates from bank 'a' to bank 'b' for dif
    * ferent bank group. For configurations with MEMC_FREQ_RATIO=2, program th
    * is to (tRRD_S/2) and round it up to the next integer value. Present only
    *  in designs configured to support DDR4. Unit: Clocks.
    *  PSU_DDRC_DRAMTMG9_T_RRD_S                                   0x2

    * CWL + PL + BL/2 + tWTR_S Minimum time from write command to read command
    *  for different bank group. Includes time for bus turnaround, recovery ti
    * mes, and all per-bank, per-rank, and global constraints. Present only in
    *  designs configured to support DDR4. Unit: Clocks. Where: - CWL = CAS wr
    * ite latency - PL = Parity latency - BL = burst length. This must match t
    * he value programmed in the BL bit of the mode register to the SDRAM - tW
    * TR_S = internal write to read command delay for different bank group. Th
    * is comes directly from the SDRAM specification. For configurations with
    * MEMC_FREQ_RATIO=2, divide the value calculated using the above equation
    * by 2, and round it up to next integer.
    *  PSU_DDRC_DRAMTMG9_WR2RD_S                                   0xb

    * SDRAM Timing Register 9
    * (OFFSET, MASK, VALUE)      (0XFD070124, 0x40070F3FU ,0x0002020BU)
    */
	PSU_Mask_Write(DDRC_DRAMTMG9_OFFSET, 0x40070F3FU, 0x0002020BU);
/*##################################################################### */

    /*
    * Register : DRAMTMG11 @ 0XFD07012C

    * tXMPDLL: This is the minimum Exit MPSM to commands requiring a locked DL
    * L. For configurations with MEMC_FREQ_RATIO=2, program this to (tXMPDLL/2
    * ) and round it up to the next integer value. Present only in designs con
    * figured to support DDR4. Unit: Multiples of 32 clocks.
    *  PSU_DDRC_DRAMTMG11_POST_MPSM_GAP_X32                        0x70

    * tMPX_LH: This is the minimum CS_n Low hold time to CKE rising edge. For
    * configurations with MEMC_FREQ_RATIO=2, program this to RoundUp(tMPX_LH/2
    * )+1. Present only in designs configured to support DDR4. Unit: clocks.
    *  PSU_DDRC_DRAMTMG11_T_MPX_LH                                 0x7

    * tMPX_S: Minimum time CS setup time to CKE. For configurations with MEMC_
    * FREQ_RATIO=2, program this to (tMPX_S/2) and round it up to the next int
    * eger value. Present only in designs configured to support DDR4. Unit: Cl
    * ocks.
    *  PSU_DDRC_DRAMTMG11_T_MPX_S                                  0x1

    * tCKMPE: Minimum valid clock requirement after MPSM entry. Present only i
    * n designs configured to support DDR4. Unit: Clocks. For configurations w
    * ith MEMC_FREQ_RATIO=2, divide the value calculated using the above equat
    * ion by 2, and round it up to next integer.
    *  PSU_DDRC_DRAMTMG11_T_CKMPE                                  0xe

    * SDRAM Timing Register 11
    * (OFFSET, MASK, VALUE)      (0XFD07012C, 0x7F1F031FU ,0x7007010EU)
    */
	PSU_Mask_Write(DDRC_DRAMTMG11_OFFSET, 0x7F1F031FU, 0x7007010EU);
/*##################################################################### */

    /*
    * Register : DRAMTMG12 @ 0XFD070130

    * tCMDCKE: Delay from valid command to CKE input LOW. Set this to the larg
    * er of tESCKE or tCMDCKE For configurations with MEMC_FREQ_RATIO=2, progr
    * am this to (max(tESCKE, tCMDCKE)/2) and round it up to next integer valu
    * e.
    *  PSU_DDRC_DRAMTMG12_T_CMDCKE                                 0x2

    * tCKEHCMD: Valid command requirement after CKE input HIGH. For configurat
    * ions with MEMC_FREQ_RATIO=2, program this to (tCKEHCMD/2) and round it u
    * p to next integer value.
    *  PSU_DDRC_DRAMTMG12_T_CKEHCMD                                0x6

    * tMRD_PDA: This is the Mode Register Set command cycle time in PDA mode.
    * For configurations with MEMC_FREQ_RATIO=2, program this to (tMRD_PDA/2)
    * and round it up to next integer value.
    *  PSU_DDRC_DRAMTMG12_T_MRD_PDA                                0x8

    * SDRAM Timing Register 12
    * (OFFSET, MASK, VALUE)      (0XFD070130, 0x00030F1FU ,0x00020608U)
    */
	PSU_Mask_Write(DDRC_DRAMTMG12_OFFSET, 0x00030F1FU, 0x00020608U);
/*##################################################################### */

    /*
    * Register : ZQCTL0 @ 0XFD070180

    * - 1 - Disable uMCTL2 generation of ZQCS/MPC(ZQ calibration) command. Reg
    * ister DBGCMD.zq_calib_short can be used instead to issue ZQ calibration
    * request from APB module. - 0 - Internally generate ZQCS/MPC(ZQ calibrati
    * on) commands based on ZQCTL1.t_zq_short_interval_x1024. This is only pre
    * sent for designs supporting DDR3/DDR4 or LPDDR2/LPDDR3/LPDDR4 devices.
    *  PSU_DDRC_ZQCTL0_DIS_AUTO_ZQ                                 0x1

    * - 1 - Disable issuing of ZQCL/MPC(ZQ calibration) command at Self-Refres
    * h/SR-Powerdown exit. Only applicable when run in DDR3 or DDR4 or LPDDR2
    * or LPDDR3 or LPDDR4 mode. - 0 - Enable issuing of ZQCL/MPC(ZQ calibratio
    * n) command at Self-Refresh/SR-Powerdown exit. Only applicable when run i
    * n DDR3 or DDR4 or LPDDR2 or LPDDR3 or LPDDR4 mode. This is only present
    * for designs supporting DDR3/DDR4 or LPDDR2/LPDDR3/LPDDR4 devices.
    *  PSU_DDRC_ZQCTL0_DIS_SRX_ZQCL                                0x0

    * - 1 - Denotes that ZQ resistor is shared between ranks. Means ZQinit/ZQC
    * L/ZQCS/MPC(ZQ calibration) commands are sent to one rank at a time with
    * tZQinit/tZQCL/tZQCS/tZQCAL/tZQLAT timing met between commands so that co
    * mmands to different ranks do not overlap. - 0 - ZQ resistor is not share
    * d. This is only present for designs supporting DDR3/DDR4 or LPDDR2/LPDDR
    * 3/LPDDR4 devices.
    *  PSU_DDRC_ZQCTL0_ZQ_RESISTOR_SHARED                          0x0

    * - 1 - Disable issuing of ZQCL command at Maximum Power Saving Mode exit.
    *  Only applicable when run in DDR4 mode. - 0 - Enable issuing of ZQCL com
    * mand at Maximum Power Saving Mode exit. Only applicable when run in DDR4
    *  mode. This is only present for designs supporting DDR4 devices.
    *  PSU_DDRC_ZQCTL0_DIS_MPSMX_ZQCL                              0x0

    * tZQoper for DDR3/DDR4, tZQCL for LPDDR2/LPDDR3, tZQCAL for LPDDR4: Numbe
    * r of cycles of NOP required after a ZQCL (ZQ calibration long)/MPC(ZQ St
    * art) command is issued to SDRAM. For configurations with MEMC_FREQ_RATIO
    * =2: DDR3/DDR4: program this to tZQoper/2 and round it up to the next int
    * eger value. LPDDR2/LPDDR3: program this to tZQCL/2 and round it up to th
    * e next integer value. LPDDR4: program this to tZQCAL/2 and round it up t
    * o the next integer value. Unit: Clock cycles. This is only present for d
    * esigns supporting DDR3/DDR4 or LPDDR2/LPDDR3/LPDDR4 devices.
    *  PSU_DDRC_ZQCTL0_T_ZQ_LONG_NOP                               0x100

    * tZQCS for DDR3/DD4/LPDDR2/LPDDR3, tZQLAT for LPDDR4: Number of cycles of
    *  NOP required after a ZQCS (ZQ calibration short)/MPC(ZQ Latch) command
    * is issued to SDRAM. For configurations with MEMC_FREQ_RATIO=2, program t
    * his to tZQCS/2 and round it up to the next integer value. Unit: Clock cy
    * cles. This is only present for designs supporting DDR3/DDR4 or LPDDR2/LP
    * DDR3/LPDDR4 devices.
    *  PSU_DDRC_ZQCTL0_T_ZQ_SHORT_NOP                              0x40

    * ZQ Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070180, 0xF7FF03FFU ,0x81000040U)
    */
	PSU_Mask_Write(DDRC_ZQCTL0_OFFSET, 0xF7FF03FFU, 0x81000040U);
/*##################################################################### */

    /*
    * Register : ZQCTL1 @ 0XFD070184

    * tZQReset: Number of cycles of NOP required after a ZQReset (ZQ calibrati
    * on Reset) command is issued to SDRAM. For configurations with MEMC_FREQ_
    * RATIO=2, program this to tZQReset/2 and round it up to the next integer
    * value. Unit: Clock cycles. This is only present for designs supporting L
    * PDDR2/LPDDR3/LPDDR4 devices.
    *  PSU_DDRC_ZQCTL1_T_ZQ_RESET_NOP                              0x20

    * Average interval to wait between automatically issuing ZQCS (ZQ calibrat
    * ion short)/MPC(ZQ calibration) commands to DDR3/DDR4/LPDDR2/LPDDR3/LPDDR
    * 4 devices. Meaningless, if ZQCTL0.dis_auto_zq=1. Unit: 1024 clock cycles
    * . This is only present for designs supporting DDR3/DDR4 or LPDDR2/LPDDR3
    * /LPDDR4 devices.
    *  PSU_DDRC_ZQCTL1_T_ZQ_SHORT_INTERVAL_X1024                   0x196dc

    * ZQ Control Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070184, 0x3FFFFFFFU ,0x020196DCU)
    */
	PSU_Mask_Write(DDRC_ZQCTL1_OFFSET, 0x3FFFFFFFU, 0x020196DCU);
/*##################################################################### */

    /*
    * Register : DFITMG0 @ 0XFD070190

    * Specifies the number of DFI clock cycles after an assertion or de-assert
    * ion of the DFI control signals that the control signals at the PHY-DRAM
    * interface reflect the assertion or de-assertion. If the DFI clock and th
    * e memory clock are not phase-aligned, this timing parameter should be ro
    * unded up to the next integer value. Note that if using RDIMM, it is nece
    * ssary to increment this parameter by RDIMM's extra cycle of latency in t
    * erms of DFI clock.
    *  PSU_DDRC_DFITMG0_DFI_T_CTRL_DELAY                           0x4

    * Defines whether dfi_rddata_en/dfi_rddata/dfi_rddata_valid is generated u
    * sing HDR or SDR values Selects whether value in DFITMG0.dfi_t_rddata_en
    * is in terms of SDR or HDR clock cycles: - 0 in terms of HDR clock cycles
    *  - 1 in terms of SDR clock cycles Refer to PHY specification for correct
    *  value.
    *  PSU_DDRC_DFITMG0_DFI_RDDATA_USE_SDR                         0x1

    * Time from the assertion of a read command on the DFI interface to the as
    * sertion of the dfi_rddata_en signal. Refer to PHY specification for corr
    * ect value. This corresponds to the DFI parameter trddata_en. Note that,
    * depending on the PHY, if using RDIMM, it may be necessary to use the val
    * ue (CL + 1) in the calculation of trddata_en. This is to compensate for
    * the extra cycle of latency through the RDIMM. Unit: Clocks
    *  PSU_DDRC_DFITMG0_DFI_T_RDDATA_EN                            0xb

    * Defines whether dfi_wrdata_en/dfi_wrdata/dfi_wrdata_mask is generated us
    * ing HDR or SDR values Selects whether value in DFITMG0.dfi_tphy_wrlat is
    *  in terms of SDR or HDR clock cycles Selects whether value in DFITMG0.df
    * i_tphy_wrdata is in terms of SDR or HDR clock cycles - 0 in terms of HDR
    *  clock cycles - 1 in terms of SDR clock cycles Refer to PHY specificatio
    * n for correct value.
    *  PSU_DDRC_DFITMG0_DFI_WRDATA_USE_SDR                         0x1

    * Specifies the number of clock cycles between when dfi_wrdata_en is asser
    * ted to when the associated write data is driven on the dfi_wrdata signal
    * . This corresponds to the DFI timing parameter tphy_wrdata. Refer to PHY
    *  specification for correct value. Note, max supported value is 8. Unit:
    * Clocks
    *  PSU_DDRC_DFITMG0_DFI_TPHY_WRDATA                            0x2

    * Write latency Number of clocks from the write command to write data enab
    * le (dfi_wrdata_en). This corresponds to the DFI timing parameter tphy_wr
    * lat. Refer to PHY specification for correct value.Note that, depending o
    * n the PHY, if using RDIMM, it may be necessary to use the value (CL + 1)
    *  in the calculation of tphy_wrlat. This is to compensate for the extra c
    * ycle of latency through the RDIMM.
    *  PSU_DDRC_DFITMG0_DFI_TPHY_WRLAT                             0xb

    * DFI Timing Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070190, 0x1FBFBF3FU ,0x048B820BU)
    */
	PSU_Mask_Write(DDRC_DFITMG0_OFFSET, 0x1FBFBF3FU, 0x048B820BU);
/*##################################################################### */

    /*
    * Register : DFITMG1 @ 0XFD070194

    * Specifies the number of DFI PHY clocks between when the dfi_cs signal is
    *  asserted and when the associated command is driven. This field is used
    * for CAL mode, should be set to '0' or the value which matches the CAL mo
    * de register setting in the DRAM. If the PHY can add the latency for CAL
    * mode, this should be set to '0'. Valid Range: 0, 3, 4, 5, 6, and 8
    *  PSU_DDRC_DFITMG1_DFI_T_CMD_LAT                              0x0

    * Specifies the number of DFI PHY clocks between when the dfi_cs signal is
    *  asserted and when the associated dfi_parity_in signal is driven.
    *  PSU_DDRC_DFITMG1_DFI_T_PARIN_LAT                            0x0

    * Specifies the number of DFI clocks between when the dfi_wrdata_en signal
    *  is asserted and when the corresponding write data transfer is completed
    *  on the DRAM bus. This corresponds to the DFI timing parameter twrdata_d
    * elay. Refer to PHY specification for correct value. For DFI 3.0 PHY, set
    *  to twrdata_delay, a new timing parameter introduced in DFI 3.0. For DFI
    *  2.1 PHY, set to tphy_wrdata + (delay of DFI write data to the DRAM). Va
    * lue to be programmed is in terms of DFI clocks, not PHY clocks. In FREQ_
    * RATIO=2, divide PHY's value by 2 and round up to next integer. If using
    * DFITMG0.dfi_wrdata_use_sdr=1, add 1 to the value. Unit: Clocks
    *  PSU_DDRC_DFITMG1_DFI_T_WRDATA_DELAY                         0x3

    * Specifies the number of DFI clock cycles from the assertion of the dfi_d
    * ram_clk_disable signal on the DFI until the clock to the DRAM memory dev
    * ices, at the PHY-DRAM boundary, maintains a low value. If the DFI clock
    * and the memory clock are not phase aligned, this timing parameter should
    *  be rounded up to the next integer value.
    *  PSU_DDRC_DFITMG1_DFI_T_DRAM_CLK_DISABLE                     0x3

    * Specifies the number of DFI clock cycles from the de-assertion of the df
    * i_dram_clk_disable signal on the DFI until the first valid rising edge o
    * f the clock to the DRAM memory devices, at the PHY-DRAM boundary. If the
    *  DFI clock and the memory clock are not phase aligned, this timing param
    * eter should be rounded up to the next integer value.
    *  PSU_DDRC_DFITMG1_DFI_T_DRAM_CLK_ENABLE                      0x4

    * DFI Timing Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070194, 0xF31F0F0FU ,0x00030304U)
    */
	PSU_Mask_Write(DDRC_DFITMG1_OFFSET, 0xF31F0F0FU, 0x00030304U);
/*##################################################################### */

    /*
    * Register : DFILPCFG0 @ 0XFD070198

    * Setting for DFI's tlp_resp time. Same value is used for both Power Down,
    *  Self Refresh, Deep Power Down and Maximum Power Saving modes. DFI 2.1 s
    * pecification onwards, recommends using a fixed value of 7 always.
    *  PSU_DDRC_DFILPCFG0_DFI_TLP_RESP                             0x7

    * Value to drive on dfi_lp_wakeup signal when Deep Power Down mode is ente
    * red. Determines the DFI's tlp_wakeup time: - 0x0 - 16 cycles - 0x1 - 32
    * cycles - 0x2 - 64 cycles - 0x3 - 128 cycles - 0x4 - 256 cycles - 0x5 - 5
    * 12 cycles - 0x6 - 1024 cycles - 0x7 - 2048 cycles - 0x8 - 4096 cycles -
    * 0x9 - 8192 cycles - 0xA - 16384 cycles - 0xB - 32768 cycles - 0xC - 6553
    * 6 cycles - 0xD - 131072 cycles - 0xE - 262144 cycles - 0xF - Unlimited T
    * his is only present for designs supporting mDDR or LPDDR2/LPDDR3 devices
    * .
    *  PSU_DDRC_DFILPCFG0_DFI_LP_WAKEUP_DPD                        0x0

    * Enables DFI Low Power interface handshaking during Deep Power Down Entry
    * /Exit. - 0 - Disabled - 1 - Enabled This is only present for designs sup
    * porting mDDR or LPDDR2/LPDDR3 devices.
    *  PSU_DDRC_DFILPCFG0_DFI_LP_EN_DPD                            0x0

    * Value to drive on dfi_lp_wakeup signal when Self Refresh mode is entered
    * . Determines the DFI's tlp_wakeup time: - 0x0 - 16 cycles - 0x1 - 32 cyc
    * les - 0x2 - 64 cycles - 0x3 - 128 cycles - 0x4 - 256 cycles - 0x5 - 512
    * cycles - 0x6 - 1024 cycles - 0x7 - 2048 cycles - 0x8 - 4096 cycles - 0x9
    *  - 8192 cycles - 0xA - 16384 cycles - 0xB - 32768 cycles - 0xC - 65536 c
    * ycles - 0xD - 131072 cycles - 0xE - 262144 cycles - 0xF - Unlimited
    *  PSU_DDRC_DFILPCFG0_DFI_LP_WAKEUP_SR                         0x0

    * Enables DFI Low Power interface handshaking during Self Refresh Entry/Ex
    * it. - 0 - Disabled - 1 - Enabled
    *  PSU_DDRC_DFILPCFG0_DFI_LP_EN_SR                             0x1

    * Value to drive on dfi_lp_wakeup signal when Power Down mode is entered.
    * Determines the DFI's tlp_wakeup time: - 0x0 - 16 cycles - 0x1 - 32 cycle
    * s - 0x2 - 64 cycles - 0x3 - 128 cycles - 0x4 - 256 cycles - 0x5 - 512 cy
    * cles - 0x6 - 1024 cycles - 0x7 - 2048 cycles - 0x8 - 4096 cycles - 0x9 -
    *  8192 cycles - 0xA - 16384 cycles - 0xB - 32768 cycles - 0xC - 65536 cyc
    * les - 0xD - 131072 cycles - 0xE - 262144 cycles - 0xF - Unlimited
    *  PSU_DDRC_DFILPCFG0_DFI_LP_WAKEUP_PD                         0x0

    * Enables DFI Low Power interface handshaking during Power Down Entry/Exit
    * . - 0 - Disabled - 1 - Enabled
    *  PSU_DDRC_DFILPCFG0_DFI_LP_EN_PD                             0x1

    * DFI Low Power Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070198, 0x0FF1F1F1U ,0x07000101U)
    */
	PSU_Mask_Write(DDRC_DFILPCFG0_OFFSET, 0x0FF1F1F1U, 0x07000101U);
/*##################################################################### */

    /*
    * Register : DFILPCFG1 @ 0XFD07019C

    * Value to drive on dfi_lp_wakeup signal when Maximum Power Saving Mode is
    *  entered. Determines the DFI's tlp_wakeup time: - 0x0 - 16 cycles - 0x1
    * - 32 cycles - 0x2 - 64 cycles - 0x3 - 128 cycles - 0x4 - 256 cycles - 0x
    * 5 - 512 cycles - 0x6 - 1024 cycles - 0x7 - 2048 cycles - 0x8 - 4096 cycl
    * es - 0x9 - 8192 cycles - 0xA - 16384 cycles - 0xB - 32768 cycles - 0xC -
    *  65536 cycles - 0xD - 131072 cycles - 0xE - 262144 cycles - 0xF - Unlimi
    * ted This is only present for designs supporting DDR4 devices.
    *  PSU_DDRC_DFILPCFG1_DFI_LP_WAKEUP_MPSM                       0x2

    * Enables DFI Low Power interface handshaking during Maximum Power Saving
    * Mode Entry/Exit. - 0 - Disabled - 1 - Enabled This is only present for d
    * esigns supporting DDR4 devices.
    *  PSU_DDRC_DFILPCFG1_DFI_LP_EN_MPSM                           0x1

    * DFI Low Power Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD07019C, 0x000000F1U ,0x00000021U)
    */
	PSU_Mask_Write(DDRC_DFILPCFG1_OFFSET, 0x000000F1U, 0x00000021U);
/*##################################################################### */

    /*
    * Register : DFIUPD0 @ 0XFD0701A0

    * When '1', disable the automatic dfi_ctrlupd_req generation by the uMCTL2
    * . The core must issue the dfi_ctrlupd_req signal using register reg_ddrc
    * _ctrlupd. When '0', uMCTL2 issues dfi_ctrlupd_req periodically.
    *  PSU_DDRC_DFIUPD0_DIS_AUTO_CTRLUPD                           0x0

    * When '1', disable the automatic dfi_ctrlupd_req generation by the uMCTL2
    *  following a self-refresh exit. The core must issue the dfi_ctrlupd_req
    * signal using register reg_ddrc_ctrlupd. When '0', uMCTL2 issues a dfi_ct
    * rlupd_req after exiting self-refresh.
    *  PSU_DDRC_DFIUPD0_DIS_AUTO_CTRLUPD_SRX                       0x0

    * Specifies the maximum number of clock cycles that the dfi_ctrlupd_req si
    * gnal can assert. Lowest value to assign to this variable is 0x40. Unit:
    * Clocks
    *  PSU_DDRC_DFIUPD0_DFI_T_CTRLUP_MAX                           0x40

    * Specifies the minimum number of clock cycles that the dfi_ctrlupd_req si
    * gnal must be asserted. The uMCTL2 expects the PHY to respond within this
    *  time. If the PHY does not respond, the uMCTL2 will de-assert dfi_ctrlup
    * d_req after dfi_t_ctrlup_min + 2 cycles. Lowest value to assign to this
    * variable is 0x3. Unit: Clocks
    *  PSU_DDRC_DFIUPD0_DFI_T_CTRLUP_MIN                           0x3

    * DFI Update Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0701A0, 0xC3FF03FFU ,0x00400003U)
    */
	PSU_Mask_Write(DDRC_DFIUPD0_OFFSET, 0xC3FF03FFU, 0x00400003U);
/*##################################################################### */

    /*
    * Register : DFIUPD1 @ 0XFD0701A4

    * This is the minimum amount of time between uMCTL2 initiated DFI update r
    * equests (which is executed whenever the uMCTL2 is idle). Set this number
    *  higher to reduce the frequency of update requests, which can have a sma
    * ll impact on the latency of the first read request when the uMCTL2 is id
    * le. Unit: 1024 clocks
    *  PSU_DDRC_DFIUPD1_DFI_T_CTRLUPD_INTERVAL_MIN_X1024           0x41

    * This is the maximum amount of time between uMCTL2 initiated DFI update r
    * equests. This timer resets with each update request; when the timer expi
    * res dfi_ctrlupd_req is sent and traffic is blocked until the dfi_ctrlupd
    * _ackx is received. PHY can use this idle time to recalibrate the delay l
    * ines to the DLLs. The DFI controller update is also used to reset PHY FI
    * FO pointers in case of data capture errors. Updates are required to main
    * tain calibration over PVT, but frequent updates may impact performance.
    * Note: Value programmed for DFIUPD1.dfi_t_ctrlupd_interval_max_x1024 must
    *  be greater than DFIUPD1.dfi_t_ctrlupd_interval_min_x1024. Unit: 1024 cl
    * ocks
    *  PSU_DDRC_DFIUPD1_DFI_T_CTRLUPD_INTERVAL_MAX_X1024           0xe1

    * DFI Update Register 1
    * (OFFSET, MASK, VALUE)      (0XFD0701A4, 0x00FF00FFU ,0x004100E1U)
    */
	PSU_Mask_Write(DDRC_DFIUPD1_OFFSET, 0x00FF00FFU, 0x004100E1U);
/*##################################################################### */

    /*
    * Register : DFIMISC @ 0XFD0701B0

    * Defines polarity of dfi_wrdata_cs and dfi_rddata_cs signals. - 0: Signal
    * s are active low - 1: Signals are active high
    *  PSU_DDRC_DFIMISC_DFI_DATA_CS_POLARITY                       0x0

    * DBI implemented in DDRC or PHY. - 0 - DDRC implements DBI functionality.
    *  - 1 - PHY implements DBI functionality. Present only in designs configu
    * red to support DDR4 and LPDDR4.
    *  PSU_DDRC_DFIMISC_PHY_DBI_MODE                               0x0

    * PHY initialization complete enable signal. When asserted the dfi_init_co
    * mplete signal can be used to trigger SDRAM initialisation
    *  PSU_DDRC_DFIMISC_DFI_INIT_COMPLETE_EN                       0x0

    * DFI Miscellaneous Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0701B0, 0x00000007U ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_DFIMISC_OFFSET, 0x00000007U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DFITMG2 @ 0XFD0701B4

    * >Number of clocks between when a read command is sent on the DFI control
    *  interface and when the associated dfi_rddata_cs signal is asserted. Thi
    * s corresponds to the DFI timing parameter tphy_rdcslat. Refer to PHY spe
    * cification for correct value.
    *  PSU_DDRC_DFITMG2_DFI_TPHY_RDCSLAT                           0x9

    * Number of clocks between when a write command is sent on the DFI control
    *  interface and when the associated dfi_wrdata_cs signal is asserted. Thi
    * s corresponds to the DFI timing parameter tphy_wrcslat. Refer to PHY spe
    * cification for correct value.
    *  PSU_DDRC_DFITMG2_DFI_TPHY_WRCSLAT                           0x6

    * DFI Timing Register 2
    * (OFFSET, MASK, VALUE)      (0XFD0701B4, 0x00003F3FU ,0x00000906U)
    */
	PSU_Mask_Write(DDRC_DFITMG2_OFFSET, 0x00003F3FU, 0x00000906U);
/*##################################################################### */

    /*
    * Register : DBICTL @ 0XFD0701C0

    * Read DBI enable signal in DDRC. - 0 - Read DBI is disabled. - 1 - Read D
    * BI is enabled. This signal must be set the same value as DRAM's mode reg
    * ister. - DDR4: MR5 bit A12. When x4 devices are used, this signal must b
    * e set to 0. - LPDDR4: MR3[6]
    *  PSU_DDRC_DBICTL_RD_DBI_EN                                   0x0

    * Write DBI enable signal in DDRC. - 0 - Write DBI is disabled. - 1 - Writ
    * e DBI is enabled. This signal must be set the same value as DRAM's mode
    * register. - DDR4: MR5 bit A11. When x4 devices are used, this signal mus
    * t be set to 0. - LPDDR4: MR3[7]
    *  PSU_DDRC_DBICTL_WR_DBI_EN                                   0x0

    * DM enable signal in DDRC. - 0 - DM is disabled. - 1 - DM is enabled. Thi
    * s signal must be set the same logical value as DRAM's mode register. - D
    * DR4: Set this to same value as MR5 bit A10. When x4 devices are used, th
    * is signal must be set to 0. - LPDDR4: Set this to inverted value of MR13
    * [5] which is opposite polarity from this signal
    *  PSU_DDRC_DBICTL_DM_EN                                       0x1

    * DM/DBI Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0701C0, 0x00000007U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_DBICTL_OFFSET, 0x00000007U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : ADDRMAP0 @ 0XFD070200

    * Selects the HIF address bit used as rank address bit 0. Valid Range: 0 t
    * o 27, and 31 Internal Base: 6 The selected HIF address bit is determined
    *  by adding the internal base to the value of this field. If set to 31, r
    * ank address bit 0 is set to 0.
    *  PSU_DDRC_ADDRMAP0_ADDRMAP_CS_BIT0                           0x1f

    * Address Map Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070200, 0x0000001FU ,0x0000001FU)
    */
	PSU_Mask_Write(DDRC_ADDRMAP0_OFFSET, 0x0000001FU, 0x0000001FU);
/*##################################################################### */

    /*
    * Register : ADDRMAP1 @ 0XFD070204

    * Selects the HIF address bit used as bank address bit 2. Valid Range: 0 t
    * o 29 and 31 Internal Base: 4 The selected HIF address bit is determined
    * by adding the internal base to the value of this field. If set to 31, ba
    * nk address bit 2 is set to 0.
    *  PSU_DDRC_ADDRMAP1_ADDRMAP_BANK_B2                           0x1f

    * Selects the HIF address bits used as bank address bit 1. Valid Range: 0
    * to 30 Internal Base: 3 The selected HIF address bit for each of the bank
    *  address bits is determined by adding the internal base to the value of
    * this field.
    *  PSU_DDRC_ADDRMAP1_ADDRMAP_BANK_B1                           0xa

    * Selects the HIF address bits used as bank address bit 0. Valid Range: 0
    * to 30 Internal Base: 2 The selected HIF address bit for each of the bank
    *  address bits is determined by adding the internal base to the value of
    * this field.
    *  PSU_DDRC_ADDRMAP1_ADDRMAP_BANK_B0                           0xa

    * Address Map Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070204, 0x001F1F1FU ,0x001F0A0AU)
    */
	PSU_Mask_Write(DDRC_ADDRMAP1_OFFSET, 0x001F1F1FU, 0x001F0A0AU);
/*##################################################################### */

    /*
    * Register : ADDRMAP2 @ 0XFD070208

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 5. - Half bus width mode: Selects the HIF address bit used as colu
    * mn address bit 6. - Quarter bus width mode: Selects the HIF address bit
    * used as column address bit 7 . Valid Range: 0 to 7, and 15 Internal Base
    * : 5 The selected HIF address bit is determined by adding the internal ba
    * se to the value of this field. If set to 15, this column address bit is
    * set to 0.
    *  PSU_DDRC_ADDRMAP2_ADDRMAP_COL_B5                            0x0

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 4. - Half bus width mode: Selects the HIF address bit used as colu
    * mn address bit 5. - Quarter bus width mode: Selects the HIF address bit
    * used as column address bit 6. Valid Range: 0 to 7, and 15 Internal Base:
    *  4 The selected HIF address bit is determined by adding the internal bas
    * e to the value of this field. If set to 15, this column address bit is s
    * et to 0.
    *  PSU_DDRC_ADDRMAP2_ADDRMAP_COL_B4                            0x0

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 3. - Half bus width mode: Selects the HIF address bit used as colu
    * mn address bit 4. - Quarter bus width mode: Selects the HIF address bit
    * used as column address bit 5. Valid Range: 0 to 7 Internal Base: 3 The s
    * elected HIF address bit is determined by adding the internal base to the
    *  value of this field. Note, if UMCTL2_INCL_ARB=1 and MEMC_BURST_LENGTH=1
    * 6, it is required to program this to 0, hence register does not exist in
    *  this case.
    *  PSU_DDRC_ADDRMAP2_ADDRMAP_COL_B3                            0x0

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 2. - Half bus width mode: Selects the HIF address bit used as colu
    * mn address bit 3. - Quarter bus width mode: Selects the HIF address bit
    * used as column address bit 4. Valid Range: 0 to 7 Internal Base: 2 The s
    * elected HIF address bit is determined by adding the internal base to the
    *  value of this field. Note, if UMCTL2_INCL_ARB=1 and MEMC_BURST_LENGTH=8
    *  or 16, it is required to program this to 0.
    *  PSU_DDRC_ADDRMAP2_ADDRMAP_COL_B2                            0x0

    * Address Map Register 2
    * (OFFSET, MASK, VALUE)      (0XFD070208, 0x0F0F0F0FU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_ADDRMAP2_OFFSET, 0x0F0F0F0FU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ADDRMAP3 @ 0XFD07020C

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 9. - Half bus width mode: Selects the HIF address bit used as colu
    * mn address bit 11 (10 in LPDDR2/LPDDR3 mode). - Quarter bus width mode:
    * Selects the HIF address bit used as column address bit 13 (11 in LPDDR2/
    * LPDDR3 mode). Valid Range: 0 to 7, and 15 Internal Base: 9 The selected
    * HIF address bit is determined by adding the internal base to the value o
    * f this field. If set to 15, this column address bit is set to 0. Note: P
    * er JEDEC DDR2/3/mDDR specification, column address bit 10 is reserved fo
    * r indicating auto-precharge, and hence no source address bit can be mapp
    * ed to column address bit 10. In LPDDR2/LPDDR3, there is a dedicated bit
    * for auto-precharge in the CA bus and hence column bit 10 is used.
    *  PSU_DDRC_ADDRMAP3_ADDRMAP_COL_B9                            0x0

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 8. - Half bus width mode: Selects the HIF address bit used as colu
    * mn address bit 9. - Quarter bus width mode: Selects the HIF address bit
    * used as column address bit 11 (10 in LPDDR2/LPDDR3 mode). Valid Range: 0
    *  to 7, and 15 Internal Base: 8 The selected HIF address bit is determine
    * d by adding the internal base to the value of this field. If set to 15,
    * this column address bit is set to 0. Note: Per JEDEC DDR2/3/mDDR specifi
    * cation, column address bit 10 is reserved for indicating auto-precharge,
    *  and hence no source address bit can be mapped to column address bit 10.
    *  In LPDDR2/LPDDR3, there is a dedicated bit for auto-precharge in the CA
    *  bus and hence column bit 10 is used.
    *  PSU_DDRC_ADDRMAP3_ADDRMAP_COL_B8                            0x0

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 7. - Half bus width mode: Selects the HIF address bit used as colu
    * mn address bit 8. - Quarter bus width mode: Selects the HIF address bit
    * used as column address bit 9. Valid Range: 0 to 7, and 15 Internal Base:
    *  7 The selected HIF address bit is determined by adding the internal bas
    * e to the value of this field. If set to 15, this column address bit is s
    * et to 0.
    *  PSU_DDRC_ADDRMAP3_ADDRMAP_COL_B7                            0x0

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 6. - Half bus width mode: Selects the HIF address bit used as colu
    * mn address bit 7. - Quarter bus width mode: Selects the HIF address bit
    * used as column address bit 8. Valid Range: 0 to 7, and 15 Internal Base:
    *  6 The selected HIF address bit is determined by adding the internal bas
    * e to the value of this field. If set to 15, this column address bit is s
    * et to 0.
    *  PSU_DDRC_ADDRMAP3_ADDRMAP_COL_B6                            0x0

    * Address Map Register 3
    * (OFFSET, MASK, VALUE)      (0XFD07020C, 0x0F0F0F0FU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_ADDRMAP3_OFFSET, 0x0F0F0F0FU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ADDRMAP4 @ 0XFD070210

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 13 (11 in LPDDR2/LPDDR3 mode). - Half bus width mode: Unused. To m
    * ake it unused, this should be tied to 4'hF. - Quarter bus width mode: Un
    * used. To make it unused, this must be tied to 4'hF. Valid Range: 0 to 7,
    *  and 15 Internal Base: 11 The selected HIF address bit is determined by
    * adding the internal base to the value of this field. If set to 15, this
    * column address bit is set to 0. Note: Per JEDEC DDR2/3/mDDR specificatio
    * n, column address bit 10 is reserved for indicating auto-precharge, and
    * hence no source address bit can be mapped to column address bit 10. In L
    * PDDR2/LPDDR3, there is a dedicated bit for auto-precharge in the CA bus
    * and hence column bit 10 is used.
    *  PSU_DDRC_ADDRMAP4_ADDRMAP_COL_B11                           0xf

    * - Full bus width mode: Selects the HIF address bit used as column addres
    * s bit 11 (10 in LPDDR2/LPDDR3 mode). - Half bus width mode: Selects the
    * HIF address bit used as column address bit 13 (11 in LPDDR2/LPDDR3 mode)
    * . - Quarter bus width mode: UNUSED. To make it unused, this must be tied
    *  to 4'hF. Valid Range: 0 to 7, and 15 Internal Base: 10 The selected HIF
    *  address bit is determined by adding the internal base to the value of t
    * his field. If set to 15, this column address bit is set to 0. Note: Per
    * JEDEC DDR2/3/mDDR specification, column address bit 10 is reserved for i
    * ndicating auto-precharge, and hence no source address bit can be mapped
    * to column address bit 10. In LPDDR2/LPDDR3, there is a dedicated bit for
    *  auto-precharge in the CA bus and hence column bit 10 is used.
    *  PSU_DDRC_ADDRMAP4_ADDRMAP_COL_B10                           0xf

    * Address Map Register 4
    * (OFFSET, MASK, VALUE)      (0XFD070210, 0x00000F0FU ,0x00000F0FU)
    */
	PSU_Mask_Write(DDRC_ADDRMAP4_OFFSET, 0x00000F0FU, 0x00000F0FU);
/*##################################################################### */

    /*
    * Register : ADDRMAP5 @ 0XFD070214

    * Selects the HIF address bit used as row address bit 11. Valid Range: 0 t
    * o 11, and 15 Internal Base: 17 The selected HIF address bit is determine
    * d by adding the internal base to the value of this field. If set to 15,
    * row address bit 11 is set to 0.
    *  PSU_DDRC_ADDRMAP5_ADDRMAP_ROW_B11                           0x8

    * Selects the HIF address bits used as row address bits 2 to 10. Valid Ran
    * ge: 0 to 11, and 15 Internal Base: 8 (for row address bit 2), 9 (for row
    *  address bit 3), 10 (for row address bit 4) etc increasing to 16 (for ro
    * w address bit 10) The selected HIF address bit for each of the row addre
    * ss bits is determined by adding the internal base to the value of this f
    * ield. When value 15 is used the values of row address bits 2 to 10 are d
    * efined by registers ADDRMAP9, ADDRMAP10, ADDRMAP11.
    *  PSU_DDRC_ADDRMAP5_ADDRMAP_ROW_B2_10                         0xf

    * Selects the HIF address bits used as row address bit 1. Valid Range: 0 t
    * o 11 Internal Base: 7 The selected HIF address bit for each of the row a
    * ddress bits is determined by adding the internal base to the value of th
    * is field.
    *  PSU_DDRC_ADDRMAP5_ADDRMAP_ROW_B1                            0x8

    * Selects the HIF address bits used as row address bit 0. Valid Range: 0 t
    * o 11 Internal Base: 6 The selected HIF address bit for each of the row a
    * ddress bits is determined by adding the internal base to the value of th
    * is field.
    *  PSU_DDRC_ADDRMAP5_ADDRMAP_ROW_B0                            0x8

    * Address Map Register 5
    * (OFFSET, MASK, VALUE)      (0XFD070214, 0x0F0F0F0FU ,0x080F0808U)
    */
	PSU_Mask_Write(DDRC_ADDRMAP5_OFFSET, 0x0F0F0F0FU, 0x080F0808U);
/*##################################################################### */

    /*
    * Register : ADDRMAP6 @ 0XFD070218

    * Set this to 1 if there is an LPDDR3 SDRAM 6Gb or 12Gb device in use. - 1
    *  - LPDDR3 SDRAM 6Gb/12Gb device in use. Every address having row[14:13]=
    * =2'b11 is considered as invalid - 0 - non-LPDDR3 6Gb/12Gb device in use.
    *  All addresses are valid Present only in designs configured to support L
    * PDDR3.
    *  PSU_DDRC_ADDRMAP6_LPDDR3_6GB_12GB                           0x0

    * Selects the HIF address bit used as row address bit 15. Valid Range: 0 t
    * o 11, and 15 Internal Base: 21 The selected HIF address bit is determine
    * d by adding the internal base to the value of this field. If set to 15,
    * row address bit 15 is set to 0.
    *  PSU_DDRC_ADDRMAP6_ADDRMAP_ROW_B15                           0xf

    * Selects the HIF address bit used as row address bit 14. Valid Range: 0 t
    * o 11, and 15 Internal Base: 20 The selected HIF address bit is determine
    * d by adding the internal base to the value of this field. If set to 15,
    * row address bit 14 is set to 0.
    *  PSU_DDRC_ADDRMAP6_ADDRMAP_ROW_B14                           0x8

    * Selects the HIF address bit used as row address bit 13. Valid Range: 0 t
    * o 11, and 15 Internal Base: 19 The selected HIF address bit is determine
    * d by adding the internal base to the value of this field. If set to 15,
    * row address bit 13 is set to 0.
    *  PSU_DDRC_ADDRMAP6_ADDRMAP_ROW_B13                           0x8

    * Selects the HIF address bit used as row address bit 12. Valid Range: 0 t
    * o 11, and 15 Internal Base: 18 The selected HIF address bit is determine
    * d by adding the internal base to the value of this field. If set to 15,
    * row address bit 12 is set to 0.
    *  PSU_DDRC_ADDRMAP6_ADDRMAP_ROW_B12                           0x8

    * Address Map Register 6
    * (OFFSET, MASK, VALUE)      (0XFD070218, 0x8F0F0F0FU ,0x0F080808U)
    */
	PSU_Mask_Write(DDRC_ADDRMAP6_OFFSET, 0x8F0F0F0FU, 0x0F080808U);
/*##################################################################### */

    /*
    * Register : ADDRMAP7 @ 0XFD07021C

    * Selects the HIF address bit used as row address bit 17. Valid Range: 0 t
    * o 10, and 15 Internal Base: 23 The selected HIF address bit is determine
    * d by adding the internal base to the value of this field. If set to 15,
    * row address bit 17 is set to 0.
    *  PSU_DDRC_ADDRMAP7_ADDRMAP_ROW_B17                           0xf

    * Selects the HIF address bit used as row address bit 16. Valid Range: 0 t
    * o 11, and 15 Internal Base: 22 The selected HIF address bit is determine
    * d by adding the internal base to the value of this field. If set to 15,
    * row address bit 16 is set to 0.
    *  PSU_DDRC_ADDRMAP7_ADDRMAP_ROW_B16                           0xf

    * Address Map Register 7
    * (OFFSET, MASK, VALUE)      (0XFD07021C, 0x00000F0FU ,0x00000F0FU)
    */
	PSU_Mask_Write(DDRC_ADDRMAP7_OFFSET, 0x00000F0FU, 0x00000F0FU);
/*##################################################################### */

    /*
    * Register : ADDRMAP8 @ 0XFD070220

    * Selects the HIF address bits used as bank group address bit 1. Valid Ran
    * ge: 0 to 30, and 31 Internal Base: 3 The selected HIF address bit for ea
    * ch of the bank group address bits is determined by adding the internal b
    * ase to the value of this field. If set to 31, bank group address bit 1 i
    * s set to 0.
    *  PSU_DDRC_ADDRMAP8_ADDRMAP_BG_B1                             0x8

    * Selects the HIF address bits used as bank group address bit 0. Valid Ran
    * ge: 0 to 30 Internal Base: 2 The selected HIF address bit for each of th
    * e bank group address bits is determined by adding the internal base to t
    * he value of this field.
    *  PSU_DDRC_ADDRMAP8_ADDRMAP_BG_B0                             0x8

    * Address Map Register 8
    * (OFFSET, MASK, VALUE)      (0XFD070220, 0x00001F1FU ,0x00000808U)
    */
	PSU_Mask_Write(DDRC_ADDRMAP8_OFFSET, 0x00001F1FU, 0x00000808U);
/*##################################################################### */

    /*
    * Register : ADDRMAP9 @ 0XFD070224

    * Selects the HIF address bits used as row address bit 5. Valid Range: 0 t
    * o 11 Internal Base: 11 The selected HIF address bit for each of the row
    * address bits is determined by adding the internal base to the value of t
    * his field. This register field is used only when ADDRMAP5.addrmap_row_b2
    * _10 is set to value 15.
    *  PSU_DDRC_ADDRMAP9_ADDRMAP_ROW_B5                            0x8

    * Selects the HIF address bits used as row address bit 4. Valid Range: 0 t
    * o 11 Internal Base: 10 The selected HIF address bit for each of the row
    * address bits is determined by adding the internal base to the value of t
    * his field. This register field is used only when ADDRMAP5.addrmap_row_b2
    * _10 is set to value 15.
    *  PSU_DDRC_ADDRMAP9_ADDRMAP_ROW_B4                            0x8

    * Selects the HIF address bits used as row address bit 3. Valid Range: 0 t
    * o 11 Internal Base: 9 The selected HIF address bit for each of the row a
    * ddress bits is determined by adding the internal base to the value of th
    * is field. This register field is used only when ADDRMAP5.addrmap_row_b2_
    * 10 is set to value 15.
    *  PSU_DDRC_ADDRMAP9_ADDRMAP_ROW_B3                            0x8

    * Selects the HIF address bits used as row address bit 2. Valid Range: 0 t
    * o 11 Internal Base: 8 The selected HIF address bit for each of the row a
    * ddress bits is determined by adding the internal base to the value of th
    * is field. This register field is used only when ADDRMAP5.addrmap_row_b2_
    * 10 is set to value 15.
    *  PSU_DDRC_ADDRMAP9_ADDRMAP_ROW_B2                            0x8

    * Address Map Register 9
    * (OFFSET, MASK, VALUE)      (0XFD070224, 0x0F0F0F0FU ,0x08080808U)
    */
	PSU_Mask_Write(DDRC_ADDRMAP9_OFFSET, 0x0F0F0F0FU, 0x08080808U);
/*##################################################################### */

    /*
    * Register : ADDRMAP10 @ 0XFD070228

    * Selects the HIF address bits used as row address bit 9. Valid Range: 0 t
    * o 11 Internal Base: 15 The selected HIF address bit for each of the row
    * address bits is determined by adding the internal base to the value of t
    * his field. This register field is used only when ADDRMAP5.addrmap_row_b2
    * _10 is set to value 15.
    *  PSU_DDRC_ADDRMAP10_ADDRMAP_ROW_B9                           0x8

    * Selects the HIF address bits used as row address bit 8. Valid Range: 0 t
    * o 11 Internal Base: 14 The selected HIF address bit for each of the row
    * address bits is determined by adding the internal base to the value of t
    * his field. This register field is used only when ADDRMAP5.addrmap_row_b2
    * _10 is set to value 15.
    *  PSU_DDRC_ADDRMAP10_ADDRMAP_ROW_B8                           0x8

    * Selects the HIF address bits used as row address bit 7. Valid Range: 0 t
    * o 11 Internal Base: 13 The selected HIF address bit for each of the row
    * address bits is determined by adding the internal base to the value of t
    * his field. This register field is used only when ADDRMAP5.addrmap_row_b2
    * _10 is set to value 15.
    *  PSU_DDRC_ADDRMAP10_ADDRMAP_ROW_B7                           0x8

    * Selects the HIF address bits used as row address bit 6. Valid Range: 0 t
    * o 11 Internal Base: 12 The selected HIF address bit for each of the row
    * address bits is determined by adding the internal base to the value of t
    * his field. This register field is used only when ADDRMAP5.addrmap_row_b2
    * _10 is set to value 15.
    *  PSU_DDRC_ADDRMAP10_ADDRMAP_ROW_B6                           0x8

    * Address Map Register 10
    * (OFFSET, MASK, VALUE)      (0XFD070228, 0x0F0F0F0FU ,0x08080808U)
    */
	PSU_Mask_Write(DDRC_ADDRMAP10_OFFSET, 0x0F0F0F0FU, 0x08080808U);
/*##################################################################### */

    /*
    * Register : ADDRMAP11 @ 0XFD07022C

    * Selects the HIF address bits used as row address bit 10. Valid Range: 0
    * to 11 Internal Base: 16 The selected HIF address bit for each of the row
    *  address bits is determined by adding the internal base to the value of
    * this field. This register field is used only when ADDRMAP5.addrmap_row_b
    * 2_10 is set to value 15.
    *  PSU_DDRC_ADDRMAP11_ADDRMAP_ROW_B10                          0x8

    * Address Map Register 11
    * (OFFSET, MASK, VALUE)      (0XFD07022C, 0x0000000FU ,0x00000008U)
    */
	PSU_Mask_Write(DDRC_ADDRMAP11_OFFSET, 0x0000000FU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : ODTCFG @ 0XFD070240

    * Cycles to hold ODT for a write command. The minimum supported value is 2
    * . Recommended values: DDR2: - BL8: 0x5 (DDR2-400/533/667), 0x6 (DDR2-800
    * ), 0x7 (DDR2-1066) - BL4: 0x3 (DDR2-400/533/667), 0x4 (DDR2-800), 0x5 (D
    * DR2-1066) DDR3: - BL8: 0x6 DDR4: - BL8: 5 + WR_PREAMBLE + CRC_MODE WR_PR
    * EAMBLE = 1 (1tCK write preamble), 2 (2tCK write preamble) CRC_MODE = 0 (
    * not CRC mode), 1 (CRC mode) LPDDR3: - BL8: 7 + RU(tODTon(max)/tCK)
    *  PSU_DDRC_ODTCFG_WR_ODT_HOLD                                 0x6

    * The delay, in clock cycles, from issuing a write command to setting ODT
    * values associated with that command. ODT setting must remain constant fo
    * r the entire time that DQS is driven by the uMCTL2. Recommended values:
    * DDR2: - CWL + AL - 3 (DDR2-400/533/667), CWL + AL - 4 (DDR2-800), CWL +
    * AL - 5 (DDR2-1066) If (CWL + AL - 3 < 0), uMCTL2 does not support ODT fo
    * r write operation. DDR3: - 0x0 DDR4: - DFITMG1.dfi_t_cmd_lat (to adjust
    * for CAL mode) LPDDR3: - WL - 1 - RU(tODTon(max)/tCK))
    *  PSU_DDRC_ODTCFG_WR_ODT_DELAY                                0x0

    * Cycles to hold ODT for a read command. The minimum supported value is 2.
    *  Recommended values: DDR2: - BL8: 0x6 (not DDR2-1066), 0x7 (DDR2-1066) -
    *  BL4: 0x4 (not DDR2-1066), 0x5 (DDR2-1066) DDR3: - BL8 - 0x6 DDR4: - BL8
    * : 5 + RD_PREAMBLE RD_PREAMBLE = 1 (1tCK write preamble), 2 (2tCK write p
    * reamble) LPDDR3: - BL8: 5 + RU(tDQSCK(max)/tCK) - RD(tDQSCK(min)/tCK) +
    * RU(tODTon(max)/tCK)
    *  PSU_DDRC_ODTCFG_RD_ODT_HOLD                                 0x6

    * The delay, in clock cycles, from issuing a read command to setting ODT v
    * alues associated with that command. ODT setting must remain constant for
    *  the entire time that DQS is driven by the uMCTL2. Recommended values: D
    * DR2: - CL + AL - 4 (not DDR2-1066), CL + AL - 5 (DDR2-1066) If (CL + AL
    * - 4 < 0), uMCTL2 does not support ODT for read operation. DDR3: - CL - C
    * WL DDR4: - CL - CWL - RD_PREAMBLE + WR_PREAMBLE + DFITMG1.dfi_t_cmd_lat
    * (to adjust for CAL mode) WR_PREAMBLE = 1 (1tCK write preamble), 2 (2tCK
    * write preamble) RD_PREAMBLE = 1 (1tCK write preamble), 2 (2tCK write pre
    * amble) If (CL - CWL - RD_PREAMBLE + WR_PREAMBLE) < 0, uMCTL2 does not su
    * pport ODT for read operation. LPDDR3: - RL + RD(tDQSCK(min)/tCK) - 1 - R
    * U(tODTon(max)/tCK)
    *  PSU_DDRC_ODTCFG_RD_ODT_DELAY                                0x0

    * ODT Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD070240, 0x0F1F0F7CU ,0x06000600U)
    */
	PSU_Mask_Write(DDRC_ODTCFG_OFFSET, 0x0F1F0F7CU, 0x06000600U);
/*##################################################################### */

    /*
    * Register : ODTMAP @ 0XFD070244

    * Indicates which remote ODTs must be turned on during a read from rank 1.
    *  Each rank has a remote ODT (in the SDRAM) which can be turned on by set
    * ting the appropriate bit here. Rank 0 is controlled by the LSB; rank 1 i
    * s controlled by bit next to the LSB, etc. For each rank, set its bit to
    * 1 to enable its ODT. Present only in configurations that have 2 or more
    * ranks
    *  PSU_DDRC_ODTMAP_RANK1_RD_ODT                                0x0

    * Indicates which remote ODTs must be turned on during a write to rank 1.
    * Each rank has a remote ODT (in the SDRAM) which can be turned on by sett
    * ing the appropriate bit here. Rank 0 is controlled by the LSB; rank 1 is
    *  controlled by bit next to the LSB, etc. For each rank, set its bit to 1
    *  to enable its ODT. Present only in configurations that have 2 or more r
    * anks
    *  PSU_DDRC_ODTMAP_RANK1_WR_ODT                                0x0

    * Indicates which remote ODTs must be turned on during a read from rank 0.
    *  Each rank has a remote ODT (in the SDRAM) which can be turned on by set
    * ting the appropriate bit here. Rank 0 is controlled by the LSB; rank 1 i
    * s controlled by bit next to the LSB, etc. For each rank, set its bit to
    * 1 to enable its ODT.
    *  PSU_DDRC_ODTMAP_RANK0_RD_ODT                                0x0

    * Indicates which remote ODTs must be turned on during a write to rank 0.
    * Each rank has a remote ODT (in the SDRAM) which can be turned on by sett
    * ing the appropriate bit here. Rank 0 is controlled by the LSB; rank 1 is
    *  controlled by bit next to the LSB, etc. For each rank, set its bit to 1
    *  to enable its ODT.
    *  PSU_DDRC_ODTMAP_RANK0_WR_ODT                                0x1

    * ODT/Rank Map Register
    * (OFFSET, MASK, VALUE)      (0XFD070244, 0x00003333U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_ODTMAP_OFFSET, 0x00003333U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : SCHED @ 0XFD070250

    * When the preferred transaction store is empty for these many clock cycle
    * s, switch to the alternate transaction store if it is non-empty. The rea
    * d transaction store (both high and low priority) is the default preferre
    * d transaction store and the write transaction store is the alternative s
    * tore. When prefer write over read is set this is reversed. 0x0 is a lega
    * l value for this register. When set to 0x0, the transaction store switch
    * ing will happen immediately when the switching conditions become true. F
    * OR PERFORMANCE ONLY
    *  PSU_DDRC_SCHED_RDWR_IDLE_GAP                                0x1

    * UNUSED
    *  PSU_DDRC_SCHED_GO2CRITICAL_HYSTERESIS                       0x0

    * Number of entries in the low priority transaction store is this value +
    * 1. (MEMC_NO_OF_ENTRY - (SCHED.lpr_num_entries + 1)) is the number of ent
    * ries available for the high priority transaction store. Setting this to
    * maximum value allocates all entries to low priority transaction store. S
    * etting this to 0 allocates 1 entry to low priority transaction store and
    *  the rest to high priority transaction store. Note: In ECC configuration
    * s, the numbers of write and low priority read credits issued is one less
    *  than in the non-ECC case. One entry each is reserved in the write and l
    * ow-priority read CAMs for storing the RMW requests arising out of single
    *  bit error correction RMW operation.
    *  PSU_DDRC_SCHED_LPR_NUM_ENTRIES                              0x20

    * If true, bank is kept open only while there are page hit transactions av
    * ailable in the CAM to that bank. The last read or write command in the C
    * AM with a bank and page hit will be executed with auto-precharge if SCHE
    * D1.pageclose_timer=0. Even if this register set to 1 and SCHED1.pageclos
    * e_timer is set to 0, explicit precharge (and not auto-precharge) may be
    * issued in some cases where there is a mode switch between Write and Read
    *  or between LPR and HPR. The Read and Write commands that are executed a
    * s part of the ECC scrub requests are also executed without auto-precharg
    * e. If false, the bank remains open until there is a need to close it (to
    *  open a different page, or for page timeout or refresh timeout) - also k
    * nown as open page policy. The open page policy can be overridden by sett
    * ing the per-command-autopre bit on the HIF interface (hif_cmd_autopre).
    * The pageclose feature provids a midway between Open and Close page polic
    * ies. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_SCHED_PAGECLOSE                                    0x0

    * If set then the bank selector prefers writes over reads. FOR DEBUG ONLY.
    *  PSU_DDRC_SCHED_PREFER_WRITE                                 0x0

    * Active low signal. When asserted ('0'), all incoming transactions are fo
    * rced to low priority. This implies that all High Priority Read (HPR) and
    *  Variable Priority Read commands (VPR) will be treated as Low Priority R
    * ead (LPR) commands. On the write side, all Variable Priority Write (VPW)
    *  commands will be treated as Normal Priority Write (NPW) commands. Forci
    * ng the incoming transactions to low priority implicitly turns off Bypass
    *  path for read commands. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_SCHED_FORCE_LOW_PRI_N                              0x1

    * Scheduler Control Register
    * (OFFSET, MASK, VALUE)      (0XFD070250, 0x7FFF3F07U ,0x01002001U)
    */
	PSU_Mask_Write(DDRC_SCHED_OFFSET, 0x7FFF3F07U, 0x01002001U);
/*##################################################################### */

    /*
    * Register : PERFLPR1 @ 0XFD070264

    * Number of transactions that are serviced once the LPR queue goes critica
    * l is the smaller of: - (a) This number - (b) Number of transactions avai
    * lable. Unit: Transaction. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_PERFLPR1_LPR_XACT_RUN_LENGTH                       0x8

    * Number of clocks that the LPR queue can be starved before it goes critic
    * al. The minimum valid functional value for this register is 0x1. Program
    * ming it to 0x0 will disable the starvation functionality; during normal
    * operation, this function should not be disabled as it will cause excessi
    * ve latencies. Unit: Clock cycles. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_PERFLPR1_LPR_MAX_STARVE                            0x40

    * Low Priority Read CAM Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070264, 0xFF00FFFFU ,0x08000040U)
    */
	PSU_Mask_Write(DDRC_PERFLPR1_OFFSET, 0xFF00FFFFU, 0x08000040U);
/*##################################################################### */

    /*
    * Register : PERFWR1 @ 0XFD07026C

    * Number of transactions that are serviced once the WR queue goes critical
    *  is the smaller of: - (a) This number - (b) Number of transactions avail
    * able. Unit: Transaction. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_PERFWR1_W_XACT_RUN_LENGTH                          0x8

    * Number of clocks that the WR queue can be starved before it goes critica
    * l. The minimum valid functional value for this register is 0x1. Programm
    * ing it to 0x0 will disable the starvation functionality; during normal o
    * peration, this function should not be disabled as it will cause excessiv
    * e latencies. Unit: Clock cycles. FOR PERFORMANCE ONLY.
    *  PSU_DDRC_PERFWR1_W_MAX_STARVE                               0x40

    * Write CAM Register 1
    * (OFFSET, MASK, VALUE)      (0XFD07026C, 0xFF00FFFFU ,0x08000040U)
    */
	PSU_Mask_Write(DDRC_PERFWR1_OFFSET, 0xFF00FFFFU, 0x08000040U);
/*##################################################################### */

    /*
    * Register : DQMAP0 @ 0XFD070280

    * DQ nibble map for DQ bits [12-15] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP0_DQ_NIBBLE_MAP_12_15                         0x0

    * DQ nibble map for DQ bits [8-11] Present only in designs configured to s
    * upport DDR4.
    *  PSU_DDRC_DQMAP0_DQ_NIBBLE_MAP_8_11                          0x0

    * DQ nibble map for DQ bits [4-7] Present only in designs configured to su
    * pport DDR4.
    *  PSU_DDRC_DQMAP0_DQ_NIBBLE_MAP_4_7                           0x0

    * DQ nibble map for DQ bits [0-3] Present only in designs configured to su
    * pport DDR4.
    *  PSU_DDRC_DQMAP0_DQ_NIBBLE_MAP_0_3                           0x0

    * DQ Map Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070280, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_DQMAP0_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DQMAP1 @ 0XFD070284

    * DQ nibble map for DQ bits [28-31] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP1_DQ_NIBBLE_MAP_28_31                         0x0

    * DQ nibble map for DQ bits [24-27] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP1_DQ_NIBBLE_MAP_24_27                         0x0

    * DQ nibble map for DQ bits [20-23] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP1_DQ_NIBBLE_MAP_20_23                         0x0

    * DQ nibble map for DQ bits [16-19] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP1_DQ_NIBBLE_MAP_16_19                         0x0

    * DQ Map Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070284, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_DQMAP1_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DQMAP2 @ 0XFD070288

    * DQ nibble map for DQ bits [44-47] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP2_DQ_NIBBLE_MAP_44_47                         0x0

    * DQ nibble map for DQ bits [40-43] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP2_DQ_NIBBLE_MAP_40_43                         0x0

    * DQ nibble map for DQ bits [36-39] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP2_DQ_NIBBLE_MAP_36_39                         0x0

    * DQ nibble map for DQ bits [32-35] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP2_DQ_NIBBLE_MAP_32_35                         0x0

    * DQ Map Register 2
    * (OFFSET, MASK, VALUE)      (0XFD070288, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_DQMAP2_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DQMAP3 @ 0XFD07028C

    * DQ nibble map for DQ bits [60-63] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP3_DQ_NIBBLE_MAP_60_63                         0x0

    * DQ nibble map for DQ bits [56-59] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP3_DQ_NIBBLE_MAP_56_59                         0x0

    * DQ nibble map for DQ bits [52-55] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP3_DQ_NIBBLE_MAP_52_55                         0x0

    * DQ nibble map for DQ bits [48-51] Present only in designs configured to
    * support DDR4.
    *  PSU_DDRC_DQMAP3_DQ_NIBBLE_MAP_48_51                         0x0

    * DQ Map Register 3
    * (OFFSET, MASK, VALUE)      (0XFD07028C, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_DQMAP3_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DQMAP4 @ 0XFD070290

    * DQ nibble map for DIMM ECC check bits [4-7] Present only in designs conf
    * igured to support DDR4.
    *  PSU_DDRC_DQMAP4_DQ_NIBBLE_MAP_CB_4_7                        0x0

    * DQ nibble map for DIMM ECC check bits [0-3] Present only in designs conf
    * igured to support DDR4.
    *  PSU_DDRC_DQMAP4_DQ_NIBBLE_MAP_CB_0_3                        0x0

    * DQ Map Register 4
    * (OFFSET, MASK, VALUE)      (0XFD070290, 0x0000FFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_DQMAP4_OFFSET, 0x0000FFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DQMAP5 @ 0XFD070294

    * All even ranks have the same DQ mapping controled by DQMAP0-4 register a
    * s rank 0. This register provides DQ swap function for all odd ranks to s
    * upport CRC feature. rank based DQ swapping is: swap bit 0 with 1, swap b
    * it 2 with 3, swap bit 4 with 5 and swap bit 6 with 7. 1: Disable rank ba
    * sed DQ swapping 0: Enable rank based DQ swapping Present only in designs
    *  configured to support DDR4.
    *  PSU_DDRC_DQMAP5_DIS_DQ_RANK_SWAP                            0x1

    * DQ Map Register 5
    * (OFFSET, MASK, VALUE)      (0XFD070294, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_DQMAP5_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : DBG0 @ 0XFD070300

    * When this is set to '0', auto-precharge is disabled for the flushed comm
    * and in a collision case. Collision cases are write followed by read to s
    * ame address, read followed by write to same address, or write followed b
    * y write to same address with DBG0.dis_wc bit = 1 (where same address com
    * parisons exclude the two address bits representing critical word). FOR D
    * EBUG ONLY.
    *  PSU_DDRC_DBG0_DIS_COLLISION_PAGE_OPT                        0x0

    * When 1, disable write combine. FOR DEBUG ONLY
    *  PSU_DDRC_DBG0_DIS_WC                                        0x0

    * Debug Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070300, 0x00000011U ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_DBG0_OFFSET, 0x00000011U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DBGCMD @ 0XFD07030C

    * Setting this register bit to 1 allows refresh and ZQCS commands to be tr
    * iggered from hardware via the IOs ext_*. If set to 1, the fields DBGCMD.
    * zq_calib_short and DBGCMD.rank*_refresh have no function, and are ignore
    * d by the uMCTL2 logic. Setting this register bit to 0 allows refresh and
    *  ZQCS to be triggered from software, via the fields DBGCMD.zq_calib_shor
    * t and DBGCMD.rank*_refresh. If set to 0, the hardware pins ext_* have no
    *  function, and are ignored by the uMCTL2 logic. This register is static,
    *  and may only be changed when the DDRC reset signal, core_ddrc_rstn, is
    * asserted (0).
    *  PSU_DDRC_DBGCMD_HW_REF_ZQ_EN                                0x0

    * Setting this register bit to 1 indicates to the uMCTL2 to issue a dfi_ct
    * rlupd_req to the PHY. When this request is stored in the uMCTL2, the bit
    *  is automatically cleared. This operation must only be performed when DF
    * IUPD0.dis_auto_ctrlupd=1.
    *  PSU_DDRC_DBGCMD_CTRLUPD                                     0x0

    * Setting this register bit to 1 indicates to the uMCTL2 to issue a ZQCS (
    * ZQ calibration short)/MPC(ZQ calibration) command to the SDRAM. When thi
    * s request is stored in the uMCTL2, the bit is automatically cleared. Thi
    * s operation can be performed only when ZQCTL0.dis_auto_zq=1. It is recom
    * mended NOT to set this register bit if in Init operating mode. This regi
    * ster bit is ignored when in Self-Refresh(except LPDDR4) and SR-Powerdown
    * (LPDDR4) and Deep power-down operating modes and Maximum Power Saving Mo
    * de.
    *  PSU_DDRC_DBGCMD_ZQ_CALIB_SHORT                              0x0

    * Setting this register bit to 1 indicates to the uMCTL2 to issue a refres
    * h to rank 1. Writing to this bit causes DBGSTAT.rank1_refresh_busy to be
    *  set. When DBGSTAT.rank1_refresh_busy is cleared, the command has been s
    * tored in uMCTL2. This operation can be performed only when RFSHCTL3.dis_
    * auto_refresh=1. It is recommended NOT to set this register bit if in Ini
    * t or Deep power-down operating modes or Maximum Power Saving Mode.
    *  PSU_DDRC_DBGCMD_RANK1_REFRESH                               0x0

    * Setting this register bit to 1 indicates to the uMCTL2 to issue a refres
    * h to rank 0. Writing to this bit causes DBGSTAT.rank0_refresh_busy to be
    *  set. When DBGSTAT.rank0_refresh_busy is cleared, the command has been s
    * tored in uMCTL2. This operation can be performed only when RFSHCTL3.dis_
    * auto_refresh=1. It is recommended NOT to set this register bit if in Ini
    * t or Deep power-down operating modes or Maximum Power Saving Mode.
    *  PSU_DDRC_DBGCMD_RANK0_REFRESH                               0x0

    * Command Debug Register
    * (OFFSET, MASK, VALUE)      (0XFD07030C, 0x80000033U ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_DBGCMD_OFFSET, 0x80000033U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : SWCTL @ 0XFD070320

    * Enable quasi-dynamic register programming outside reset. Program registe
    * r to 0 to enable quasi-dynamic programming. Set back register to 1 once
    * programming is done.
    *  PSU_DDRC_SWCTL_SW_DONE                                      0x0

    * Software register programming control enable
    * (OFFSET, MASK, VALUE)      (0XFD070320, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_SWCTL_OFFSET, 0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : PCCFG @ 0XFD070400

    * Burst length expansion mode. By default (i.e. bl_exp_mode==0) XPI expand
    * s every AXI burst into multiple HIF commands, using the memory burst len
    * gth as a unit. If set to 1, then XPI will use half of the memory burst l
    * ength as a unit. This applies to both reads and writes. When MSTR.data_b
    * us_width==00, setting bl_exp_mode to 1 has no effect. This can be used i
    * n cases where Partial Writes is enabled (UMCTL2_PARTIAL_WR=1) and DBG0.d
    * is_wc=1, in order to avoid or minimize t_ccd_l penalty in DDR4 and t_ccd
    * _mw penalty in LPDDR4. Note that if DBICTL.reg_ddrc_dm_en=0, functionali
    * ty is not supported in the following cases: - UMCTL2_PARTIAL_WR=0 - UMCT
    * L2_PARTIAL_WR=1, MSTR.reg_ddrc_data_bus_width=01, MEMC_BURST_LENGTH=8 an
    * d MSTR.reg_ddrc_burst_rdwr=1000 (LPDDR4 only) - UMCTL2_PARTIAL_WR=1, MST
    * R.reg_ddrc_data_bus_width=01, MEMC_BURST_LENGTH=4 and MSTR.reg_ddrc_burs
    * t_rdwr=0100 (DDR4 only), with either MSTR.reg_ddrc_burstchop=0 or CRCPAR
    * CTL1.reg_ddrc_crc_enable=1 Functionality is also not supported if Shared
    * -AC is enabled
    *  PSU_DDRC_PCCFG_BL_EXP_MODE                                  0x0

    * Page match four limit. If set to 1, limits the number of consecutive sam
    * e page DDRC transactions that can be granted by the Port Arbiter to four
    *  when Page Match feature is enabled. If set to 0, there is no limit impo
    * sed on number of consecutive same page DDRC transactions.
    *  PSU_DDRC_PCCFG_PAGEMATCH_LIMIT                              0x0

    * If set to 1 (enabled), sets co_gs_go2critical_wr and co_gs_go2critical_l
    * pr/co_gs_go2critical_hpr signals going to DDRC based on urgent input (aw
    * urgent, arurgent) coming from AXI master. If set to 0 (disabled), co_gs_
    * go2critical_wr and co_gs_go2critical_lpr/co_gs_go2critical_hpr signals a
    * t DDRC are driven to 1b'0.
    *  PSU_DDRC_PCCFG_GO2CRITICAL_EN                               0x1

    * Port Common Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD070400, 0x00000111U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_PCCFG_OFFSET, 0x00000111U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : PCFGR_0 @ 0XFD070404

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGR_0_RD_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (arurgent). When ena
    * bled and arurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_lpr/co_gs_go2critical_hpr signal to DD
    * RC is asserted if enabled in PCCFG.go2critical_en register. Note that ar
    * urgent signal can be asserted anytime and as long as required which is i
    * ndependent of address handshaking (it is not associated with any particu
    * lar command).
    *  PSU_DDRC_PCFGR_0_RD_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the read channel of the port.
    *  PSU_DDRC_PCFGR_0_RD_PORT_AGING_EN                           0x0

    * Determines the initial load value of read aging counters. These counters
    *  will be parallel loaded after reset, or after each grant to the corresp
    * onding port. The aging counters down-count every clock cycle where the p
    * ort is requesting but not granted. The higher significant 5-bits of the
    * read aging counter sets the priority of the read channel of a given port
    * . Port's priority will increase as the higher significant 5-bits of the
    * counter starts to decrease. When the aging counter becomes 0, the corres
    * ponding port channel will have the highest priority level (timeout condi
    * tion - Priority0). For multi-port configurations, the aging counters can
    * not be used to set port priorities when external dynamic priority inputs
    *  (arqos) are enabled (timeout is still applicable). For single port conf
    * igurations, the aging counters are only used when they timeout (become 0
    * ) to force read-write direction switching. In this case, external dynami
    * c priority input, arqos (for reads only) can still be used to set the DD
    * RC read priority (2 priority levels: low priority read - LPR, high prior
    * ity read - HPR) on a command by command basis. Note: The two LSBs of thi
    * s register field are tied internally to 2'b00.
    *  PSU_DDRC_PCFGR_0_RD_PORT_PRIORITY                           0xf

    * Port n Configuration Read Register
    * (OFFSET, MASK, VALUE)      (0XFD070404, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGR_0_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCFGW_0 @ 0XFD070408

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGW_0_WR_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (awurgent). When ena
    * bled and awurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_wr signal to DDRC is asserted if enabl
    * ed in PCCFG.go2critical_en register. Note that awurgent signal can be as
    * serted anytime and as long as required which is independent of address h
    * andshaking (it is not associated with any particular command).
    *  PSU_DDRC_PCFGW_0_WR_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the write channel of the port.
    *  PSU_DDRC_PCFGW_0_WR_PORT_AGING_EN                           0x0

    * Determines the initial load value of write aging counters. These counter
    * s will be parallel loaded after reset, or after each grant to the corres
    * ponding port. The aging counters down-count every clock cycle where the
    * port is requesting but not granted. The higher significant 5-bits of the
    *  write aging counter sets the initial priority of the write channel of a
    *  given port. Port's priority will increase as the higher significant 5-b
    * its of the counter starts to decrease. When the aging counter becomes 0,
    *  the corresponding port channel will have the highest priority level. Fo
    * r multi-port configurations, the aging counters cannot be used to set po
    * rt priorities when external dynamic priority inputs (awqos) are enabled
    * (timeout is still applicable). For single port configurations, the aging
    *  counters are only used when they timeout (become 0) to force read-write
    *  direction switching. Note: The two LSBs of this register field are tied
    *  internally to 2'b00.
    *  PSU_DDRC_PCFGW_0_WR_PORT_PRIORITY                           0xf

    * Port n Configuration Write Register
    * (OFFSET, MASK, VALUE)      (0XFD070408, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGW_0_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCTRL_0 @ 0XFD070490

    * Enables port n.
    *  PSU_DDRC_PCTRL_0_PORT_EN                                    0x1

    * Port n Control Register
    * (OFFSET, MASK, VALUE)      (0XFD070490, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_PCTRL_0_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : PCFGQOS0_0 @ 0XFD070494

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0 : LPR, 1: VPR, 2: HPR. For dual address queue configurations, region1
    *  maps to the blue address queue. In this case, valid values are 0: LPR a
    * nd 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tra
    * ffic class of region 1 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_0_RQOS_MAP_REGION1                        0x2

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: LPR, 1: VPR, 2: HPR. For dual address queue configurations, region 0
    *  maps to the blue address queue. In this case, valid values are: 0: LPR
    * and 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tr
    * affic class of region0 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_0_RQOS_MAP_REGION0                        0x0

    * Separation level1 indicating the end of region0 mapping; start of region
    * 0 is 0. Possible values for level1 are 0 to 13 (for dual RAQ) or 0 to 14
    *  (for single RAQ) which corresponds to arqos. Note that for PA, arqos va
    * lues are used directly as port priorities, where the higher the value co
    * rresponds to higher port priority. All of the map_level* registers must
    * be set to distinct values.
    *  PSU_DDRC_PCFGQOS0_0_RQOS_MAP_LEVEL1                         0xb

    * Port n Read QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070494, 0x0033000FU ,0x0020000BU)
    */
	PSU_Mask_Write(DDRC_PCFGQOS0_0_OFFSET, 0x0033000FU, 0x0020000BU);
/*##################################################################### */

    /*
    * Register : PCFGQOS1_0 @ 0XFD070498

    * Specifies the timeout value for transactions mapped to the red address q
    * ueue.
    *  PSU_DDRC_PCFGQOS1_0_RQOS_MAP_TIMEOUTR                       0x0

    * Specifies the timeout value for transactions mapped to the blue address
    * queue.
    *  PSU_DDRC_PCFGQOS1_0_RQOS_MAP_TIMEOUTB                       0x0

    * Port n Read QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070498, 0x07FF07FFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_PCFGQOS1_0_OFFSET, 0x07FF07FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : PCFGR_1 @ 0XFD0704B4

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGR_1_RD_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (arurgent). When ena
    * bled and arurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_lpr/co_gs_go2critical_hpr signal to DD
    * RC is asserted if enabled in PCCFG.go2critical_en register. Note that ar
    * urgent signal can be asserted anytime and as long as required which is i
    * ndependent of address handshaking (it is not associated with any particu
    * lar command).
    *  PSU_DDRC_PCFGR_1_RD_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the read channel of the port.
    *  PSU_DDRC_PCFGR_1_RD_PORT_AGING_EN                           0x0

    * Determines the initial load value of read aging counters. These counters
    *  will be parallel loaded after reset, or after each grant to the corresp
    * onding port. The aging counters down-count every clock cycle where the p
    * ort is requesting but not granted. The higher significant 5-bits of the
    * read aging counter sets the priority of the read channel of a given port
    * . Port's priority will increase as the higher significant 5-bits of the
    * counter starts to decrease. When the aging counter becomes 0, the corres
    * ponding port channel will have the highest priority level (timeout condi
    * tion - Priority0). For multi-port configurations, the aging counters can
    * not be used to set port priorities when external dynamic priority inputs
    *  (arqos) are enabled (timeout is still applicable). For single port conf
    * igurations, the aging counters are only used when they timeout (become 0
    * ) to force read-write direction switching. In this case, external dynami
    * c priority input, arqos (for reads only) can still be used to set the DD
    * RC read priority (2 priority levels: low priority read - LPR, high prior
    * ity read - HPR) on a command by command basis. Note: The two LSBs of thi
    * s register field are tied internally to 2'b00.
    *  PSU_DDRC_PCFGR_1_RD_PORT_PRIORITY                           0xf

    * Port n Configuration Read Register
    * (OFFSET, MASK, VALUE)      (0XFD0704B4, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGR_1_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCFGW_1 @ 0XFD0704B8

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGW_1_WR_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (awurgent). When ena
    * bled and awurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_wr signal to DDRC is asserted if enabl
    * ed in PCCFG.go2critical_en register. Note that awurgent signal can be as
    * serted anytime and as long as required which is independent of address h
    * andshaking (it is not associated with any particular command).
    *  PSU_DDRC_PCFGW_1_WR_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the write channel of the port.
    *  PSU_DDRC_PCFGW_1_WR_PORT_AGING_EN                           0x0

    * Determines the initial load value of write aging counters. These counter
    * s will be parallel loaded after reset, or after each grant to the corres
    * ponding port. The aging counters down-count every clock cycle where the
    * port is requesting but not granted. The higher significant 5-bits of the
    *  write aging counter sets the initial priority of the write channel of a
    *  given port. Port's priority will increase as the higher significant 5-b
    * its of the counter starts to decrease. When the aging counter becomes 0,
    *  the corresponding port channel will have the highest priority level. Fo
    * r multi-port configurations, the aging counters cannot be used to set po
    * rt priorities when external dynamic priority inputs (awqos) are enabled
    * (timeout is still applicable). For single port configurations, the aging
    *  counters are only used when they timeout (become 0) to force read-write
    *  direction switching. Note: The two LSBs of this register field are tied
    *  internally to 2'b00.
    *  PSU_DDRC_PCFGW_1_WR_PORT_PRIORITY                           0xf

    * Port n Configuration Write Register
    * (OFFSET, MASK, VALUE)      (0XFD0704B8, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGW_1_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCTRL_1 @ 0XFD070540

    * Enables port n.
    *  PSU_DDRC_PCTRL_1_PORT_EN                                    0x1

    * Port n Control Register
    * (OFFSET, MASK, VALUE)      (0XFD070540, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_PCTRL_1_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : PCFGQOS0_1 @ 0XFD070544

    * This bitfield indicates the traffic class of region2. For dual address q
    * ueue configurations, region2 maps to the red address queue. Valid values
    *  are 1: VPR and 2: HPR only. When VPR support is disabled (UMCTL2_VPR_EN
    *  = 0) and traffic class of region2 is set to 1 (VPR), VPR traffic is ali
    * ased to LPR traffic.
    *  PSU_DDRC_PCFGQOS0_1_RQOS_MAP_REGION2                        0x2

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0 : LPR, 1: VPR, 2: HPR. For dual address queue configurations, region1
    *  maps to the blue address queue. In this case, valid values are 0: LPR a
    * nd 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tra
    * ffic class of region 1 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_1_RQOS_MAP_REGION1                        0x0

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: LPR, 1: VPR, 2: HPR. For dual address queue configurations, region 0
    *  maps to the blue address queue. In this case, valid values are: 0: LPR
    * and 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tr
    * affic class of region0 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_1_RQOS_MAP_REGION0                        0x0

    * Separation level2 indicating the end of region1 mapping; start of region
    * 1 is (level1 + 1). Possible values for level2 are (level1 + 1) to 14 whi
    * ch corresponds to arqos. Region2 starts from (level2 + 1) up to 15. Note
    *  that for PA, arqos values are used directly as port priorities, where t
    * he higher the value corresponds to higher port priority. All of the map_
    * level* registers must be set to distinct values.
    *  PSU_DDRC_PCFGQOS0_1_RQOS_MAP_LEVEL2                         0xb

    * Separation level1 indicating the end of region0 mapping; start of region
    * 0 is 0. Possible values for level1 are 0 to 13 (for dual RAQ) or 0 to 14
    *  (for single RAQ) which corresponds to arqos. Note that for PA, arqos va
    * lues are used directly as port priorities, where the higher the value co
    * rresponds to higher port priority. All of the map_level* registers must
    * be set to distinct values.
    *  PSU_DDRC_PCFGQOS0_1_RQOS_MAP_LEVEL1                         0x3

    * Port n Read QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070544, 0x03330F0FU ,0x02000B03U)
    */
	PSU_Mask_Write(DDRC_PCFGQOS0_1_OFFSET, 0x03330F0FU, 0x02000B03U);
/*##################################################################### */

    /*
    * Register : PCFGQOS1_1 @ 0XFD070548

    * Specifies the timeout value for transactions mapped to the red address q
    * ueue.
    *  PSU_DDRC_PCFGQOS1_1_RQOS_MAP_TIMEOUTR                       0x0

    * Specifies the timeout value for transactions mapped to the blue address
    * queue.
    *  PSU_DDRC_PCFGQOS1_1_RQOS_MAP_TIMEOUTB                       0x0

    * Port n Read QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070548, 0x07FF07FFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_PCFGQOS1_1_OFFSET, 0x07FF07FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : PCFGR_2 @ 0XFD070564

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGR_2_RD_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (arurgent). When ena
    * bled and arurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_lpr/co_gs_go2critical_hpr signal to DD
    * RC is asserted if enabled in PCCFG.go2critical_en register. Note that ar
    * urgent signal can be asserted anytime and as long as required which is i
    * ndependent of address handshaking (it is not associated with any particu
    * lar command).
    *  PSU_DDRC_PCFGR_2_RD_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the read channel of the port.
    *  PSU_DDRC_PCFGR_2_RD_PORT_AGING_EN                           0x0

    * Determines the initial load value of read aging counters. These counters
    *  will be parallel loaded after reset, or after each grant to the corresp
    * onding port. The aging counters down-count every clock cycle where the p
    * ort is requesting but not granted. The higher significant 5-bits of the
    * read aging counter sets the priority of the read channel of a given port
    * . Port's priority will increase as the higher significant 5-bits of the
    * counter starts to decrease. When the aging counter becomes 0, the corres
    * ponding port channel will have the highest priority level (timeout condi
    * tion - Priority0). For multi-port configurations, the aging counters can
    * not be used to set port priorities when external dynamic priority inputs
    *  (arqos) are enabled (timeout is still applicable). For single port conf
    * igurations, the aging counters are only used when they timeout (become 0
    * ) to force read-write direction switching. In this case, external dynami
    * c priority input, arqos (for reads only) can still be used to set the DD
    * RC read priority (2 priority levels: low priority read - LPR, high prior
    * ity read - HPR) on a command by command basis. Note: The two LSBs of thi
    * s register field are tied internally to 2'b00.
    *  PSU_DDRC_PCFGR_2_RD_PORT_PRIORITY                           0xf

    * Port n Configuration Read Register
    * (OFFSET, MASK, VALUE)      (0XFD070564, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGR_2_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCFGW_2 @ 0XFD070568

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGW_2_WR_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (awurgent). When ena
    * bled and awurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_wr signal to DDRC is asserted if enabl
    * ed in PCCFG.go2critical_en register. Note that awurgent signal can be as
    * serted anytime and as long as required which is independent of address h
    * andshaking (it is not associated with any particular command).
    *  PSU_DDRC_PCFGW_2_WR_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the write channel of the port.
    *  PSU_DDRC_PCFGW_2_WR_PORT_AGING_EN                           0x0

    * Determines the initial load value of write aging counters. These counter
    * s will be parallel loaded after reset, or after each grant to the corres
    * ponding port. The aging counters down-count every clock cycle where the
    * port is requesting but not granted. The higher significant 5-bits of the
    *  write aging counter sets the initial priority of the write channel of a
    *  given port. Port's priority will increase as the higher significant 5-b
    * its of the counter starts to decrease. When the aging counter becomes 0,
    *  the corresponding port channel will have the highest priority level. Fo
    * r multi-port configurations, the aging counters cannot be used to set po
    * rt priorities when external dynamic priority inputs (awqos) are enabled
    * (timeout is still applicable). For single port configurations, the aging
    *  counters are only used when they timeout (become 0) to force read-write
    *  direction switching. Note: The two LSBs of this register field are tied
    *  internally to 2'b00.
    *  PSU_DDRC_PCFGW_2_WR_PORT_PRIORITY                           0xf

    * Port n Configuration Write Register
    * (OFFSET, MASK, VALUE)      (0XFD070568, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGW_2_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCTRL_2 @ 0XFD0705F0

    * Enables port n.
    *  PSU_DDRC_PCTRL_2_PORT_EN                                    0x1

    * Port n Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0705F0, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_PCTRL_2_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : PCFGQOS0_2 @ 0XFD0705F4

    * This bitfield indicates the traffic class of region2. For dual address q
    * ueue configurations, region2 maps to the red address queue. Valid values
    *  are 1: VPR and 2: HPR only. When VPR support is disabled (UMCTL2_VPR_EN
    *  = 0) and traffic class of region2 is set to 1 (VPR), VPR traffic is ali
    * ased to LPR traffic.
    *  PSU_DDRC_PCFGQOS0_2_RQOS_MAP_REGION2                        0x2

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0 : LPR, 1: VPR, 2: HPR. For dual address queue configurations, region1
    *  maps to the blue address queue. In this case, valid values are 0: LPR a
    * nd 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tra
    * ffic class of region 1 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_2_RQOS_MAP_REGION1                        0x0

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: LPR, 1: VPR, 2: HPR. For dual address queue configurations, region 0
    *  maps to the blue address queue. In this case, valid values are: 0: LPR
    * and 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tr
    * affic class of region0 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_2_RQOS_MAP_REGION0                        0x0

    * Separation level2 indicating the end of region1 mapping; start of region
    * 1 is (level1 + 1). Possible values for level2 are (level1 + 1) to 14 whi
    * ch corresponds to arqos. Region2 starts from (level2 + 1) up to 15. Note
    *  that for PA, arqos values are used directly as port priorities, where t
    * he higher the value corresponds to higher port priority. All of the map_
    * level* registers must be set to distinct values.
    *  PSU_DDRC_PCFGQOS0_2_RQOS_MAP_LEVEL2                         0xb

    * Separation level1 indicating the end of region0 mapping; start of region
    * 0 is 0. Possible values for level1 are 0 to 13 (for dual RAQ) or 0 to 14
    *  (for single RAQ) which corresponds to arqos. Note that for PA, arqos va
    * lues are used directly as port priorities, where the higher the value co
    * rresponds to higher port priority. All of the map_level* registers must
    * be set to distinct values.
    *  PSU_DDRC_PCFGQOS0_2_RQOS_MAP_LEVEL1                         0x3

    * Port n Read QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0705F4, 0x03330F0FU ,0x02000B03U)
    */
	PSU_Mask_Write(DDRC_PCFGQOS0_2_OFFSET, 0x03330F0FU, 0x02000B03U);
/*##################################################################### */

    /*
    * Register : PCFGQOS1_2 @ 0XFD0705F8

    * Specifies the timeout value for transactions mapped to the red address q
    * ueue.
    *  PSU_DDRC_PCFGQOS1_2_RQOS_MAP_TIMEOUTR                       0x0

    * Specifies the timeout value for transactions mapped to the blue address
    * queue.
    *  PSU_DDRC_PCFGQOS1_2_RQOS_MAP_TIMEOUTB                       0x0

    * Port n Read QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD0705F8, 0x07FF07FFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_PCFGQOS1_2_OFFSET, 0x07FF07FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : PCFGR_3 @ 0XFD070614

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGR_3_RD_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (arurgent). When ena
    * bled and arurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_lpr/co_gs_go2critical_hpr signal to DD
    * RC is asserted if enabled in PCCFG.go2critical_en register. Note that ar
    * urgent signal can be asserted anytime and as long as required which is i
    * ndependent of address handshaking (it is not associated with any particu
    * lar command).
    *  PSU_DDRC_PCFGR_3_RD_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the read channel of the port.
    *  PSU_DDRC_PCFGR_3_RD_PORT_AGING_EN                           0x0

    * Determines the initial load value of read aging counters. These counters
    *  will be parallel loaded after reset, or after each grant to the corresp
    * onding port. The aging counters down-count every clock cycle where the p
    * ort is requesting but not granted. The higher significant 5-bits of the
    * read aging counter sets the priority of the read channel of a given port
    * . Port's priority will increase as the higher significant 5-bits of the
    * counter starts to decrease. When the aging counter becomes 0, the corres
    * ponding port channel will have the highest priority level (timeout condi
    * tion - Priority0). For multi-port configurations, the aging counters can
    * not be used to set port priorities when external dynamic priority inputs
    *  (arqos) are enabled (timeout is still applicable). For single port conf
    * igurations, the aging counters are only used when they timeout (become 0
    * ) to force read-write direction switching. In this case, external dynami
    * c priority input, arqos (for reads only) can still be used to set the DD
    * RC read priority (2 priority levels: low priority read - LPR, high prior
    * ity read - HPR) on a command by command basis. Note: The two LSBs of thi
    * s register field are tied internally to 2'b00.
    *  PSU_DDRC_PCFGR_3_RD_PORT_PRIORITY                           0xf

    * Port n Configuration Read Register
    * (OFFSET, MASK, VALUE)      (0XFD070614, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGR_3_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCFGW_3 @ 0XFD070618

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGW_3_WR_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (awurgent). When ena
    * bled and awurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_wr signal to DDRC is asserted if enabl
    * ed in PCCFG.go2critical_en register. Note that awurgent signal can be as
    * serted anytime and as long as required which is independent of address h
    * andshaking (it is not associated with any particular command).
    *  PSU_DDRC_PCFGW_3_WR_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the write channel of the port.
    *  PSU_DDRC_PCFGW_3_WR_PORT_AGING_EN                           0x0

    * Determines the initial load value of write aging counters. These counter
    * s will be parallel loaded after reset, or after each grant to the corres
    * ponding port. The aging counters down-count every clock cycle where the
    * port is requesting but not granted. The higher significant 5-bits of the
    *  write aging counter sets the initial priority of the write channel of a
    *  given port. Port's priority will increase as the higher significant 5-b
    * its of the counter starts to decrease. When the aging counter becomes 0,
    *  the corresponding port channel will have the highest priority level. Fo
    * r multi-port configurations, the aging counters cannot be used to set po
    * rt priorities when external dynamic priority inputs (awqos) are enabled
    * (timeout is still applicable). For single port configurations, the aging
    *  counters are only used when they timeout (become 0) to force read-write
    *  direction switching. Note: The two LSBs of this register field are tied
    *  internally to 2'b00.
    *  PSU_DDRC_PCFGW_3_WR_PORT_PRIORITY                           0xf

    * Port n Configuration Write Register
    * (OFFSET, MASK, VALUE)      (0XFD070618, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGW_3_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCTRL_3 @ 0XFD0706A0

    * Enables port n.
    *  PSU_DDRC_PCTRL_3_PORT_EN                                    0x1

    * Port n Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0706A0, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_PCTRL_3_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : PCFGQOS0_3 @ 0XFD0706A4

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0 : LPR, 1: VPR, 2: HPR. For dual address queue configurations, region1
    *  maps to the blue address queue. In this case, valid values are 0: LPR a
    * nd 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tra
    * ffic class of region 1 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_3_RQOS_MAP_REGION1                        0x1

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: LPR, 1: VPR, 2: HPR. For dual address queue configurations, region 0
    *  maps to the blue address queue. In this case, valid values are: 0: LPR
    * and 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tr
    * affic class of region0 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_3_RQOS_MAP_REGION0                        0x0

    * Separation level1 indicating the end of region0 mapping; start of region
    * 0 is 0. Possible values for level1 are 0 to 13 (for dual RAQ) or 0 to 14
    *  (for single RAQ) which corresponds to arqos. Note that for PA, arqos va
    * lues are used directly as port priorities, where the higher the value co
    * rresponds to higher port priority. All of the map_level* registers must
    * be set to distinct values.
    *  PSU_DDRC_PCFGQOS0_3_RQOS_MAP_LEVEL1                         0x3

    * Port n Read QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0706A4, 0x0033000FU ,0x00100003U)
    */
	PSU_Mask_Write(DDRC_PCFGQOS0_3_OFFSET, 0x0033000FU, 0x00100003U);
/*##################################################################### */

    /*
    * Register : PCFGQOS1_3 @ 0XFD0706A8

    * Specifies the timeout value for transactions mapped to the red address q
    * ueue.
    *  PSU_DDRC_PCFGQOS1_3_RQOS_MAP_TIMEOUTR                       0x0

    * Specifies the timeout value for transactions mapped to the blue address
    * queue.
    *  PSU_DDRC_PCFGQOS1_3_RQOS_MAP_TIMEOUTB                       0x4f

    * Port n Read QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD0706A8, 0x07FF07FFU ,0x0000004FU)
    */
	PSU_Mask_Write(DDRC_PCFGQOS1_3_OFFSET, 0x07FF07FFU, 0x0000004FU);
/*##################################################################### */

    /*
    * Register : PCFGWQOS0_3 @ 0XFD0706AC

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0: NPW, 1: VPW. When VPW support is disabled (UMCTL2_VPW_EN = 0) and tr
    * affic class of region 1 is set to 1 (VPW), VPW traffic is aliased to LPW
    *  traffic.
    *  PSU_DDRC_PCFGWQOS0_3_WQOS_MAP_REGION1                       0x1

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: NPW, 1: VPW. When VPW support is disabled (UMCTL2_VPW_EN = 0) and tr
    * affic class of region0 is set to 1 (VPW), VPW traffic is aliased to NPW
    * traffic.
    *  PSU_DDRC_PCFGWQOS0_3_WQOS_MAP_REGION0                       0x0

    * Separation level indicating the end of region0 mapping; start of region0
    *  is 0. Possible values for level1 are 0 to 14 which corresponds to awqos
    * . Note that for PA, awqos values are used directly as port priorities, w
    * here the higher the value corresponds to higher port priority.
    *  PSU_DDRC_PCFGWQOS0_3_WQOS_MAP_LEVEL                         0x3

    * Port n Write QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0706AC, 0x0033000FU ,0x00100003U)
    */
	PSU_Mask_Write(DDRC_PCFGWQOS0_3_OFFSET, 0x0033000FU, 0x00100003U);
/*##################################################################### */

    /*
    * Register : PCFGWQOS1_3 @ 0XFD0706B0

    * Specifies the timeout value for write transactions.
    *  PSU_DDRC_PCFGWQOS1_3_WQOS_MAP_TIMEOUT                       0x4f

    * Port n Write QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD0706B0, 0x000007FFU ,0x0000004FU)
    */
	PSU_Mask_Write(DDRC_PCFGWQOS1_3_OFFSET, 0x000007FFU, 0x0000004FU);
/*##################################################################### */

    /*
    * Register : PCFGR_4 @ 0XFD0706C4

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGR_4_RD_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (arurgent). When ena
    * bled and arurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_lpr/co_gs_go2critical_hpr signal to DD
    * RC is asserted if enabled in PCCFG.go2critical_en register. Note that ar
    * urgent signal can be asserted anytime and as long as required which is i
    * ndependent of address handshaking (it is not associated with any particu
    * lar command).
    *  PSU_DDRC_PCFGR_4_RD_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the read channel of the port.
    *  PSU_DDRC_PCFGR_4_RD_PORT_AGING_EN                           0x0

    * Determines the initial load value of read aging counters. These counters
    *  will be parallel loaded after reset, or after each grant to the corresp
    * onding port. The aging counters down-count every clock cycle where the p
    * ort is requesting but not granted. The higher significant 5-bits of the
    * read aging counter sets the priority of the read channel of a given port
    * . Port's priority will increase as the higher significant 5-bits of the
    * counter starts to decrease. When the aging counter becomes 0, the corres
    * ponding port channel will have the highest priority level (timeout condi
    * tion - Priority0). For multi-port configurations, the aging counters can
    * not be used to set port priorities when external dynamic priority inputs
    *  (arqos) are enabled (timeout is still applicable). For single port conf
    * igurations, the aging counters are only used when they timeout (become 0
    * ) to force read-write direction switching. In this case, external dynami
    * c priority input, arqos (for reads only) can still be used to set the DD
    * RC read priority (2 priority levels: low priority read - LPR, high prior
    * ity read - HPR) on a command by command basis. Note: The two LSBs of thi
    * s register field are tied internally to 2'b00.
    *  PSU_DDRC_PCFGR_4_RD_PORT_PRIORITY                           0xf

    * Port n Configuration Read Register
    * (OFFSET, MASK, VALUE)      (0XFD0706C4, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGR_4_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCFGW_4 @ 0XFD0706C8

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGW_4_WR_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (awurgent). When ena
    * bled and awurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_wr signal to DDRC is asserted if enabl
    * ed in PCCFG.go2critical_en register. Note that awurgent signal can be as
    * serted anytime and as long as required which is independent of address h
    * andshaking (it is not associated with any particular command).
    *  PSU_DDRC_PCFGW_4_WR_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the write channel of the port.
    *  PSU_DDRC_PCFGW_4_WR_PORT_AGING_EN                           0x0

    * Determines the initial load value of write aging counters. These counter
    * s will be parallel loaded after reset, or after each grant to the corres
    * ponding port. The aging counters down-count every clock cycle where the
    * port is requesting but not granted. The higher significant 5-bits of the
    *  write aging counter sets the initial priority of the write channel of a
    *  given port. Port's priority will increase as the higher significant 5-b
    * its of the counter starts to decrease. When the aging counter becomes 0,
    *  the corresponding port channel will have the highest priority level. Fo
    * r multi-port configurations, the aging counters cannot be used to set po
    * rt priorities when external dynamic priority inputs (awqos) are enabled
    * (timeout is still applicable). For single port configurations, the aging
    *  counters are only used when they timeout (become 0) to force read-write
    *  direction switching. Note: The two LSBs of this register field are tied
    *  internally to 2'b00.
    *  PSU_DDRC_PCFGW_4_WR_PORT_PRIORITY                           0xf

    * Port n Configuration Write Register
    * (OFFSET, MASK, VALUE)      (0XFD0706C8, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGW_4_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCTRL_4 @ 0XFD070750

    * Enables port n.
    *  PSU_DDRC_PCTRL_4_PORT_EN                                    0x1

    * Port n Control Register
    * (OFFSET, MASK, VALUE)      (0XFD070750, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_PCTRL_4_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : PCFGQOS0_4 @ 0XFD070754

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0 : LPR, 1: VPR, 2: HPR. For dual address queue configurations, region1
    *  maps to the blue address queue. In this case, valid values are 0: LPR a
    * nd 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tra
    * ffic class of region 1 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_4_RQOS_MAP_REGION1                        0x1

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: LPR, 1: VPR, 2: HPR. For dual address queue configurations, region 0
    *  maps to the blue address queue. In this case, valid values are: 0: LPR
    * and 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tr
    * affic class of region0 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_4_RQOS_MAP_REGION0                        0x0

    * Separation level1 indicating the end of region0 mapping; start of region
    * 0 is 0. Possible values for level1 are 0 to 13 (for dual RAQ) or 0 to 14
    *  (for single RAQ) which corresponds to arqos. Note that for PA, arqos va
    * lues are used directly as port priorities, where the higher the value co
    * rresponds to higher port priority. All of the map_level* registers must
    * be set to distinct values.
    *  PSU_DDRC_PCFGQOS0_4_RQOS_MAP_LEVEL1                         0x3

    * Port n Read QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070754, 0x0033000FU ,0x00100003U)
    */
	PSU_Mask_Write(DDRC_PCFGQOS0_4_OFFSET, 0x0033000FU, 0x00100003U);
/*##################################################################### */

    /*
    * Register : PCFGQOS1_4 @ 0XFD070758

    * Specifies the timeout value for transactions mapped to the red address q
    * ueue.
    *  PSU_DDRC_PCFGQOS1_4_RQOS_MAP_TIMEOUTR                       0x0

    * Specifies the timeout value for transactions mapped to the blue address
    * queue.
    *  PSU_DDRC_PCFGQOS1_4_RQOS_MAP_TIMEOUTB                       0x4f

    * Port n Read QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070758, 0x07FF07FFU ,0x0000004FU)
    */
	PSU_Mask_Write(DDRC_PCFGQOS1_4_OFFSET, 0x07FF07FFU, 0x0000004FU);
/*##################################################################### */

    /*
    * Register : PCFGWQOS0_4 @ 0XFD07075C

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0: NPW, 1: VPW. When VPW support is disabled (UMCTL2_VPW_EN = 0) and tr
    * affic class of region 1 is set to 1 (VPW), VPW traffic is aliased to LPW
    *  traffic.
    *  PSU_DDRC_PCFGWQOS0_4_WQOS_MAP_REGION1                       0x1

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: NPW, 1: VPW. When VPW support is disabled (UMCTL2_VPW_EN = 0) and tr
    * affic class of region0 is set to 1 (VPW), VPW traffic is aliased to NPW
    * traffic.
    *  PSU_DDRC_PCFGWQOS0_4_WQOS_MAP_REGION0                       0x0

    * Separation level indicating the end of region0 mapping; start of region0
    *  is 0. Possible values for level1 are 0 to 14 which corresponds to awqos
    * . Note that for PA, awqos values are used directly as port priorities, w
    * here the higher the value corresponds to higher port priority.
    *  PSU_DDRC_PCFGWQOS0_4_WQOS_MAP_LEVEL                         0x3

    * Port n Write QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD07075C, 0x0033000FU ,0x00100003U)
    */
	PSU_Mask_Write(DDRC_PCFGWQOS0_4_OFFSET, 0x0033000FU, 0x00100003U);
/*##################################################################### */

    /*
    * Register : PCFGWQOS1_4 @ 0XFD070760

    * Specifies the timeout value for write transactions.
    *  PSU_DDRC_PCFGWQOS1_4_WQOS_MAP_TIMEOUT                       0x4f

    * Port n Write QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070760, 0x000007FFU ,0x0000004FU)
    */
	PSU_Mask_Write(DDRC_PCFGWQOS1_4_OFFSET, 0x000007FFU, 0x0000004FU);
/*##################################################################### */

    /*
    * Register : PCFGR_5 @ 0XFD070774

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGR_5_RD_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (arurgent). When ena
    * bled and arurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_lpr/co_gs_go2critical_hpr signal to DD
    * RC is asserted if enabled in PCCFG.go2critical_en register. Note that ar
    * urgent signal can be asserted anytime and as long as required which is i
    * ndependent of address handshaking (it is not associated with any particu
    * lar command).
    *  PSU_DDRC_PCFGR_5_RD_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the read channel of the port.
    *  PSU_DDRC_PCFGR_5_RD_PORT_AGING_EN                           0x0

    * Determines the initial load value of read aging counters. These counters
    *  will be parallel loaded after reset, or after each grant to the corresp
    * onding port. The aging counters down-count every clock cycle where the p
    * ort is requesting but not granted. The higher significant 5-bits of the
    * read aging counter sets the priority of the read channel of a given port
    * . Port's priority will increase as the higher significant 5-bits of the
    * counter starts to decrease. When the aging counter becomes 0, the corres
    * ponding port channel will have the highest priority level (timeout condi
    * tion - Priority0). For multi-port configurations, the aging counters can
    * not be used to set port priorities when external dynamic priority inputs
    *  (arqos) are enabled (timeout is still applicable). For single port conf
    * igurations, the aging counters are only used when they timeout (become 0
    * ) to force read-write direction switching. In this case, external dynami
    * c priority input, arqos (for reads only) can still be used to set the DD
    * RC read priority (2 priority levels: low priority read - LPR, high prior
    * ity read - HPR) on a command by command basis. Note: The two LSBs of thi
    * s register field are tied internally to 2'b00.
    *  PSU_DDRC_PCFGR_5_RD_PORT_PRIORITY                           0xf

    * Port n Configuration Read Register
    * (OFFSET, MASK, VALUE)      (0XFD070774, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGR_5_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCFGW_5 @ 0XFD070778

    * If set to 1, enables the Page Match feature. If enabled, once a requesti
    * ng port is granted, the port is continued to be granted if the following
    *  immediate commands are to the same memory page (same bank and same row)
    * . See also related PCCFG.pagematch_limit register.
    *  PSU_DDRC_PCFGW_5_WR_PORT_PAGEMATCH_EN                       0x0

    * If set to 1, enables the AXI urgent sideband signal (awurgent). When ena
    * bled and awurgent is asserted by the master, that port becomes the highe
    * st priority and co_gs_go2critical_wr signal to DDRC is asserted if enabl
    * ed in PCCFG.go2critical_en register. Note that awurgent signal can be as
    * serted anytime and as long as required which is independent of address h
    * andshaking (it is not associated with any particular command).
    *  PSU_DDRC_PCFGW_5_WR_PORT_URGENT_EN                          0x1

    * If set to 1, enables aging function for the write channel of the port.
    *  PSU_DDRC_PCFGW_5_WR_PORT_AGING_EN                           0x0

    * Determines the initial load value of write aging counters. These counter
    * s will be parallel loaded after reset, or after each grant to the corres
    * ponding port. The aging counters down-count every clock cycle where the
    * port is requesting but not granted. The higher significant 5-bits of the
    *  write aging counter sets the initial priority of the write channel of a
    *  given port. Port's priority will increase as the higher significant 5-b
    * its of the counter starts to decrease. When the aging counter becomes 0,
    *  the corresponding port channel will have the highest priority level. Fo
    * r multi-port configurations, the aging counters cannot be used to set po
    * rt priorities when external dynamic priority inputs (awqos) are enabled
    * (timeout is still applicable). For single port configurations, the aging
    *  counters are only used when they timeout (become 0) to force read-write
    *  direction switching. Note: The two LSBs of this register field are tied
    *  internally to 2'b00.
    *  PSU_DDRC_PCFGW_5_WR_PORT_PRIORITY                           0xf

    * Port n Configuration Write Register
    * (OFFSET, MASK, VALUE)      (0XFD070778, 0x000073FFU ,0x0000200FU)
    */
	PSU_Mask_Write(DDRC_PCFGW_5_OFFSET, 0x000073FFU, 0x0000200FU);
/*##################################################################### */

    /*
    * Register : PCTRL_5 @ 0XFD070800

    * Enables port n.
    *  PSU_DDRC_PCTRL_5_PORT_EN                                    0x1

    * Port n Control Register
    * (OFFSET, MASK, VALUE)      (0XFD070800, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(DDRC_PCTRL_5_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : PCFGQOS0_5 @ 0XFD070804

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0 : LPR, 1: VPR, 2: HPR. For dual address queue configurations, region1
    *  maps to the blue address queue. In this case, valid values are 0: LPR a
    * nd 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tra
    * ffic class of region 1 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_5_RQOS_MAP_REGION1                        0x1

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: LPR, 1: VPR, 2: HPR. For dual address queue configurations, region 0
    *  maps to the blue address queue. In this case, valid values are: 0: LPR
    * and 1: VPR only. When VPR support is disabled (UMCTL2_VPR_EN = 0) and tr
    * affic class of region0 is set to 1 (VPR), VPR traffic is aliased to LPR
    * traffic.
    *  PSU_DDRC_PCFGQOS0_5_RQOS_MAP_REGION0                        0x0

    * Separation level1 indicating the end of region0 mapping; start of region
    * 0 is 0. Possible values for level1 are 0 to 13 (for dual RAQ) or 0 to 14
    *  (for single RAQ) which corresponds to arqos. Note that for PA, arqos va
    * lues are used directly as port priorities, where the higher the value co
    * rresponds to higher port priority. All of the map_level* registers must
    * be set to distinct values.
    *  PSU_DDRC_PCFGQOS0_5_RQOS_MAP_LEVEL1                         0x3

    * Port n Read QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD070804, 0x0033000FU ,0x00100003U)
    */
	PSU_Mask_Write(DDRC_PCFGQOS0_5_OFFSET, 0x0033000FU, 0x00100003U);
/*##################################################################### */

    /*
    * Register : PCFGQOS1_5 @ 0XFD070808

    * Specifies the timeout value for transactions mapped to the red address q
    * ueue.
    *  PSU_DDRC_PCFGQOS1_5_RQOS_MAP_TIMEOUTR                       0x0

    * Specifies the timeout value for transactions mapped to the blue address
    * queue.
    *  PSU_DDRC_PCFGQOS1_5_RQOS_MAP_TIMEOUTB                       0x4f

    * Port n Read QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070808, 0x07FF07FFU ,0x0000004FU)
    */
	PSU_Mask_Write(DDRC_PCFGQOS1_5_OFFSET, 0x07FF07FFU, 0x0000004FU);
/*##################################################################### */

    /*
    * Register : PCFGWQOS0_5 @ 0XFD07080C

    * This bitfield indicates the traffic class of region 1. Valid values are:
    *  0: NPW, 1: VPW. When VPW support is disabled (UMCTL2_VPW_EN = 0) and tr
    * affic class of region 1 is set to 1 (VPW), VPW traffic is aliased to LPW
    *  traffic.
    *  PSU_DDRC_PCFGWQOS0_5_WQOS_MAP_REGION1                       0x1

    * This bitfield indicates the traffic class of region 0. Valid values are:
    *  0: NPW, 1: VPW. When VPW support is disabled (UMCTL2_VPW_EN = 0) and tr
    * affic class of region0 is set to 1 (VPW), VPW traffic is aliased to NPW
    * traffic.
    *  PSU_DDRC_PCFGWQOS0_5_WQOS_MAP_REGION0                       0x0

    * Separation level indicating the end of region0 mapping; start of region0
    *  is 0. Possible values for level1 are 0 to 14 which corresponds to awqos
    * . Note that for PA, awqos values are used directly as port priorities, w
    * here the higher the value corresponds to higher port priority.
    *  PSU_DDRC_PCFGWQOS0_5_WQOS_MAP_LEVEL                         0x3

    * Port n Write QoS Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD07080C, 0x0033000FU ,0x00100003U)
    */
	PSU_Mask_Write(DDRC_PCFGWQOS0_5_OFFSET, 0x0033000FU, 0x00100003U);
/*##################################################################### */

    /*
    * Register : PCFGWQOS1_5 @ 0XFD070810

    * Specifies the timeout value for write transactions.
    *  PSU_DDRC_PCFGWQOS1_5_WQOS_MAP_TIMEOUT                       0x4f

    * Port n Write QoS Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD070810, 0x000007FFU ,0x0000004FU)
    */
	PSU_Mask_Write(DDRC_PCFGWQOS1_5_OFFSET, 0x000007FFU, 0x0000004FU);
/*##################################################################### */

    /*
    * Register : SARBASE0 @ 0XFD070F04

    * Base address for address region n specified as awaddr[UMCTL2_A_ADDRW-1:x
    * ] and araddr[UMCTL2_A_ADDRW-1:x] where x is determined by the minimum bl
    * ock size parameter UMCTL2_SARMINSIZE: (x=log2(block size)).
    *  PSU_DDRC_SARBASE0_BASE_ADDR                                 0x0

    * SAR Base Address Register n
    * (OFFSET, MASK, VALUE)      (0XFD070F04, 0x000001FFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_SARBASE0_OFFSET, 0x000001FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : SARSIZE0 @ 0XFD070F08

    * Number of blocks for address region n. This register determines the tota
    * l size of the region in multiples of minimum block size as specified by
    * the hardware parameter UMCTL2_SARMINSIZE. The register value is encoded
    * as number of blocks = nblocks + 1. For example, if register is programme
    * d to 0, region will have 1 block.
    *  PSU_DDRC_SARSIZE0_NBLOCKS                                   0x0

    * SAR Size Register n
    * (OFFSET, MASK, VALUE)      (0XFD070F08, 0x000000FFU ,0x00000000U)
    */
	PSU_Mask_Write(DDRC_SARSIZE0_OFFSET, 0x000000FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : SARBASE1 @ 0XFD070F0C

    * Base address for address region n specified as awaddr[UMCTL2_A_ADDRW-1:x
    * ] and araddr[UMCTL2_A_ADDRW-1:x] where x is determined by the minimum bl
    * ock size parameter UMCTL2_SARMINSIZE: (x=log2(block size)).
    *  PSU_DDRC_SARBASE1_BASE_ADDR                                 0x10

    * SAR Base Address Register n
    * (OFFSET, MASK, VALUE)      (0XFD070F0C, 0x000001FFU ,0x00000010U)
    */
	PSU_Mask_Write(DDRC_SARBASE1_OFFSET, 0x000001FFU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : SARSIZE1 @ 0XFD070F10

    * Number of blocks for address region n. This register determines the tota
    * l size of the region in multiples of minimum block size as specified by
    * the hardware parameter UMCTL2_SARMINSIZE. The register value is encoded
    * as number of blocks = nblocks + 1. For example, if register is programme
    * d to 0, region will have 1 block.
    *  PSU_DDRC_SARSIZE1_NBLOCKS                                   0xf

    * SAR Size Register n
    * (OFFSET, MASK, VALUE)      (0XFD070F10, 0x000000FFU ,0x0000000FU)
    */
	PSU_Mask_Write(DDRC_SARSIZE1_OFFSET, 0x000000FFU, 0x0000000FU);
/*##################################################################### */

    /*
    * Register : DFITMG0_SHADOW @ 0XFD072190

    * Specifies the number of DFI clock cycles after an assertion or de-assert
    * ion of the DFI control signals that the control signals at the PHY-DRAM
    * interface reflect the assertion or de-assertion. If the DFI clock and th
    * e memory clock are not phase-aligned, this timing parameter should be ro
    * unded up to the next integer value. Note that if using RDIMM, it is nece
    * ssary to increment this parameter by RDIMM's extra cycle of latency in t
    * erms of DFI clock.
    *  PSU_DDRC_DFITMG0_SHADOW_DFI_T_CTRL_DELAY                    0x7

    * Defines whether dfi_rddata_en/dfi_rddata/dfi_rddata_valid is generated u
    * sing HDR or SDR values Selects whether value in DFITMG0.dfi_t_rddata_en
    * is in terms of SDR or HDR clock cycles: - 0 in terms of HDR clock cycles
    *  - 1 in terms of SDR clock cycles Refer to PHY specification for correct
    *  value.
    *  PSU_DDRC_DFITMG0_SHADOW_DFI_RDDATA_USE_SDR                  0x1

    * Time from the assertion of a read command on the DFI interface to the as
    * sertion of the dfi_rddata_en signal. Refer to PHY specification for corr
    * ect value. This corresponds to the DFI parameter trddata_en. Note that,
    * depending on the PHY, if using RDIMM, it may be necessary to use the val
    * ue (CL + 1) in the calculation of trddata_en. This is to compensate for
    * the extra cycle of latency through the RDIMM. Unit: Clocks
    *  PSU_DDRC_DFITMG0_SHADOW_DFI_T_RDDATA_EN                     0x2

    * Defines whether dfi_wrdata_en/dfi_wrdata/dfi_wrdata_mask is generated us
    * ing HDR or SDR values Selects whether value in DFITMG0.dfi_tphy_wrlat is
    *  in terms of SDR or HDR clock cycles Selects whether value in DFITMG0.df
    * i_tphy_wrdata is in terms of SDR or HDR clock cycles - 0 in terms of HDR
    *  clock cycles - 1 in terms of SDR clock cycles Refer to PHY specificatio
    * n for correct value.
    *  PSU_DDRC_DFITMG0_SHADOW_DFI_WRDATA_USE_SDR                  0x1

    * Specifies the number of clock cycles between when dfi_wrdata_en is asser
    * ted to when the associated write data is driven on the dfi_wrdata signal
    * . This corresponds to the DFI timing parameter tphy_wrdata. Refer to PHY
    *  specification for correct value. Note, max supported value is 8. Unit:
    * Clocks
    *  PSU_DDRC_DFITMG0_SHADOW_DFI_TPHY_WRDATA                     0x0

    * Write latency Number of clocks from the write command to write data enab
    * le (dfi_wrdata_en). This corresponds to the DFI timing parameter tphy_wr
    * lat. Refer to PHY specification for correct value.Note that, depending o
    * n the PHY, if using RDIMM, it may be necessary to use the value (CL + 1)
    *  in the calculation of tphy_wrlat. This is to compensate for the extra c
    * ycle of latency through the RDIMM.
    *  PSU_DDRC_DFITMG0_SHADOW_DFI_TPHY_WRLAT                      0x2

    * DFI Timing Shadow Register 0
    * (OFFSET, MASK, VALUE)      (0XFD072190, 0x1FBFBF3FU ,0x07828002U)
    */
	PSU_Mask_Write(DDRC_DFITMG0_SHADOW_OFFSET, 0x1FBFBF3FU, 0x07828002U);
/*##################################################################### */

    /*
    * DDR CONTROLLER RESET
    */
    /*
    * Register : RST_DDR_SS @ 0XFD1A0108

    * DDR block level reset inside of the DDR Sub System
    *  PSU_CRF_APB_RST_DDR_SS_DDR_RESET                            0X0

    * APM block level reset inside of the DDR Sub System
    *  PSU_CRF_APB_RST_DDR_SS_APM_RESET                            0X0

    * DDR sub system block level reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0108, 0x0000000CU ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_RST_DDR_SS_OFFSET, 0x0000000CU, 0x00000000U);
/*##################################################################### */

    /*
    * DDR PHY
    */
    /*
    * Register : PGCR0 @ 0XFD080010

    * Address Copy
    *  PSU_DDR_PHY_PGCR0_ADCP                                      0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_PGCR0_RESERVED_30_27                            0x0

    * PHY FIFO Reset
    *  PSU_DDR_PHY_PGCR0_PHYFRST                                   0x1

    * Oscillator Mode Address/Command Delay Line Select
    *  PSU_DDR_PHY_PGCR0_OSCACDL                                   0x3

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_PGCR0_RESERVED_23_19                            0x0

    * Digital Test Output Select
    *  PSU_DDR_PHY_PGCR0_DTOSEL                                    0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_PGCR0_RESERVED_13                               0x0

    * Oscillator Mode Division
    *  PSU_DDR_PHY_PGCR0_OSCDIV                                    0xf

    * Oscillator Enable
    *  PSU_DDR_PHY_PGCR0_OSCEN                                     0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_PGCR0_RESERVED_7_0                              0x0

    * PHY General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080010, 0xFFFFFFFFU ,0x07001E00U)
    */
	PSU_Mask_Write(DDR_PHY_PGCR0_OFFSET, 0xFFFFFFFFU, 0x07001E00U);
/*##################################################################### */

    /*
    * Register : PGCR2 @ 0XFD080018

    * Clear Training Status Registers
    *  PSU_DDR_PHY_PGCR2_CLRTSTAT                                  0x0

    * Clear Impedance Calibration
    *  PSU_DDR_PHY_PGCR2_CLRZCAL                                   0x0

    * Clear Parity Error
    *  PSU_DDR_PHY_PGCR2_CLRPERR                                   0x0

    * Initialization Complete Pin Configuration
    *  PSU_DDR_PHY_PGCR2_ICPC                                      0x0

    * Data Training PUB Mode Exit Timer
    *  PSU_DDR_PHY_PGCR2_DTPMXTMR                                  0xf

    * Initialization Bypass
    *  PSU_DDR_PHY_PGCR2_INITFSMBYP                                0x0

    * PLL FSM Bypass
    *  PSU_DDR_PHY_PGCR2_PLLFSMBYP                                 0x0

    * Refresh Period
    *  PSU_DDR_PHY_PGCR2_TREFPRD                                   0x10010

    * PHY General Configuration Register 2
    * (OFFSET, MASK, VALUE)      (0XFD080018, 0xFFFFFFFFU ,0x00F10010U)
    */
	PSU_Mask_Write(DDR_PHY_PGCR2_OFFSET, 0xFFFFFFFFU, 0x00F10010U);
/*##################################################################### */

    /*
    * Register : PGCR3 @ 0XFD08001C

    * CKN Enable
    *  PSU_DDR_PHY_PGCR3_CKNEN                                     0x55

    * CK Enable
    *  PSU_DDR_PHY_PGCR3_CKEN                                      0xaa

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_PGCR3_RESERVED_15                               0x0

    * Enable Clock Gating for AC [0] ctl_rd_clk
    *  PSU_DDR_PHY_PGCR3_GATEACRDCLK                               0x2

    * Enable Clock Gating for AC [0] ddr_clk
    *  PSU_DDR_PHY_PGCR3_GATEACDDRCLK                              0x2

    * Enable Clock Gating for AC [0] ctl_clk
    *  PSU_DDR_PHY_PGCR3_GATEACCTLCLK                              0x2

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_PGCR3_RESERVED_8                                0x0

    * Controls DDL Bypass Modes
    *  PSU_DDR_PHY_PGCR3_DDLBYPMODE                                0x2

    * IO Loop-Back Select
    *  PSU_DDR_PHY_PGCR3_IOLB                                      0x0

    * AC Receive FIFO Read Mode
    *  PSU_DDR_PHY_PGCR3_RDMODE                                    0x0

    * Read FIFO Reset Disable
    *  PSU_DDR_PHY_PGCR3_DISRST                                    0x0

    * Clock Level when Clock Gating
    *  PSU_DDR_PHY_PGCR3_CLKLEVEL                                  0x0

    * PHY General Configuration Register 3
    * (OFFSET, MASK, VALUE)      (0XFD08001C, 0xFFFFFFFFU ,0x55AA5480U)
    */
	PSU_Mask_Write(DDR_PHY_PGCR3_OFFSET, 0xFFFFFFFFU, 0x55AA5480U);
/*##################################################################### */

    /*
    * Register : PGCR5 @ 0XFD080024

    * Frequency B Ratio Term
    *  PSU_DDR_PHY_PGCR5_FRQBT                                     0x1

    * Frequency A Ratio Term
    *  PSU_DDR_PHY_PGCR5_FRQAT                                     0x1

    * DFI Disconnect Time Period
    *  PSU_DDR_PHY_PGCR5_DISCNPERIOD                               0x0

    * Receiver bias core side control
    *  PSU_DDR_PHY_PGCR5_VREF_RBCTRL                               0xf

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_PGCR5_RESERVED_3                                0x0

    * Internal VREF generator REFSEL ragne select
    *  PSU_DDR_PHY_PGCR5_DXREFISELRANGE                            0x1

    * DDL Page Read Write select
    *  PSU_DDR_PHY_PGCR5_DDLPGACT                                  0x0

    * DDL Page Read Write select
    *  PSU_DDR_PHY_PGCR5_DDLPGRW                                   0x0

    * PHY General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080024, 0xFFFFFFFFU ,0x010100F4U)
    */
	PSU_Mask_Write(DDR_PHY_PGCR5_OFFSET, 0xFFFFFFFFU, 0x010100F4U);
/*##################################################################### */

    /*
    * Register : PTR0 @ 0XFD080040

    * PLL Power-Down Time
    *  PSU_DDR_PHY_PTR0_TPLLPD                                     0x56

    * PLL Gear Shift Time
    *  PSU_DDR_PHY_PTR0_TPLLGS                                     0x2155

    * PHY Reset Time
    *  PSU_DDR_PHY_PTR0_TPHYRST                                    0x10

    * PHY Timing Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080040, 0xFFFFFFFFU ,0x0AC85550U)
    */
	PSU_Mask_Write(DDR_PHY_PTR0_OFFSET, 0xFFFFFFFFU, 0x0AC85550U);
/*##################################################################### */

    /*
    * Register : PTR1 @ 0XFD080044

    * PLL Lock Time
    *  PSU_DDR_PHY_PTR1_TPLLLOCK                                   0x4141

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_PTR1_RESERVED_15_13                             0x0

    * PLL Reset Time
    *  PSU_DDR_PHY_PTR1_TPLLRST                                    0xaff

    * PHY Timing Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080044, 0xFFFFFFFFU ,0x41410AFFU)
    */
	PSU_Mask_Write(DDR_PHY_PTR1_OFFSET, 0xFFFFFFFFU, 0x41410AFFU);
/*##################################################################### */

    /*
    * Register : PLLCR0 @ 0XFD080068

    * PLL Bypass
    *  PSU_DDR_PHY_PLLCR0_PLLBYP                                   0x0

    * PLL Reset
    *  PSU_DDR_PHY_PLLCR0_PLLRST                                   0x0

    * PLL Power Down
    *  PSU_DDR_PHY_PLLCR0_PLLPD                                    0x0

    * Reference Stop Mode
    *  PSU_DDR_PHY_PLLCR0_RSTOPM                                   0x0

    * PLL Frequency Select
    *  PSU_DDR_PHY_PLLCR0_FRQSEL                                   0x1

    * Relock Mode
    *  PSU_DDR_PHY_PLLCR0_RLOCKM                                   0x0

    * Charge Pump Proportional Current Control
    *  PSU_DDR_PHY_PLLCR0_CPPC                                     0x8

    * Charge Pump Integrating Current Control
    *  PSU_DDR_PHY_PLLCR0_CPIC                                     0x0

    * Gear Shift
    *  PSU_DDR_PHY_PLLCR0_GSHIFT                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_PLLCR0_RESERVED_11_9                            0x0

    * Analog Test Enable
    *  PSU_DDR_PHY_PLLCR0_ATOEN                                    0x0

    * Analog Test Control
    *  PSU_DDR_PHY_PLLCR0_ATC                                      0x0

    * Digital Test Control
    *  PSU_DDR_PHY_PLLCR0_DTC                                      0x0

    * PLL Control Register 0 (Type B PLL Only)
    * (OFFSET, MASK, VALUE)      (0XFD080068, 0xFFFFFFFFU ,0x01100000U)
    */
	PSU_Mask_Write(DDR_PHY_PLLCR0_OFFSET, 0xFFFFFFFFU, 0x01100000U);
/*##################################################################### */

    /*
    * Register : DSGCR @ 0XFD080090

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DSGCR_RESERVED_31_28                            0x0

    * When RDBI enabled, this bit is used to select RDBI CL calculation, if it
    *  is 1b1, calculation will use RDBICL, otherwise use default calculation.
    *  PSU_DDR_PHY_DSGCR_RDBICLSEL                                 0x0

    * When RDBI enabled, if RDBICLSEL is asserted, RDBI CL adjust using this v
    * alue.
    *  PSU_DDR_PHY_DSGCR_RDBICL                                    0x2

    * PHY Impedance Update Enable
    *  PSU_DDR_PHY_DSGCR_PHYZUEN                                   0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DSGCR_RESERVED_22                               0x0

    * SDRAM Reset Output Enable
    *  PSU_DDR_PHY_DSGCR_RSTOE                                     0x1

    * Single Data Rate Mode
    *  PSU_DDR_PHY_DSGCR_SDRMODE                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DSGCR_RESERVED_18                               0x0

    * ATO Analog Test Enable
    *  PSU_DDR_PHY_DSGCR_ATOAE                                     0x0

    * DTO Output Enable
    *  PSU_DDR_PHY_DSGCR_DTOOE                                     0x0

    * DTO I/O Mode
    *  PSU_DDR_PHY_DSGCR_DTOIOM                                    0x0

    * DTO Power Down Receiver
    *  PSU_DDR_PHY_DSGCR_DTOPDR                                    0x1

    * Reserved. Return zeroes on reads
    *  PSU_DDR_PHY_DSGCR_RESERVED_13                               0x0

    * DTO On-Die Termination
    *  PSU_DDR_PHY_DSGCR_DTOODT                                    0x0

    * PHY Update Acknowledge Delay
    *  PSU_DDR_PHY_DSGCR_PUAD                                      0x5

    * Controller Update Acknowledge Enable
    *  PSU_DDR_PHY_DSGCR_CUAEN                                     0x1

    * Reserved. Return zeroes on reads
    *  PSU_DDR_PHY_DSGCR_RESERVED_4_3                              0x0

    * Controller Impedance Update Enable
    *  PSU_DDR_PHY_DSGCR_CTLZUEN                                   0x0

    * Reserved. Return zeroes on reads
    *  PSU_DDR_PHY_DSGCR_RESERVED_1                                0x0

    * PHY Update Request Enable
    *  PSU_DDR_PHY_DSGCR_PUREN                                     0x1

    * DDR System General Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD080090, 0xFFFFFFFFU ,0x02A04161U)
    */
	PSU_Mask_Write(DDR_PHY_DSGCR_OFFSET, 0xFFFFFFFFU, 0x02A04161U);
/*##################################################################### */

    /*
    * Register : GPR0 @ 0XFD0800C0

    * General Purpose Register 0
    *  PSU_DDR_PHY_GPR0_GPR0                                       0xd3

    * General Purpose Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0800C0, 0xFFFFFFFFU ,0x000000D3U)
    */
	PSU_Mask_Write(DDR_PHY_GPR0_OFFSET, 0xFFFFFFFFU, 0x000000D3U);
/*##################################################################### */

    /*
    * Register : DCR @ 0XFD080100

    * DDR4 Gear Down Timing.
    *  PSU_DDR_PHY_DCR_GEARDN                                      0x0

    * Un-used Bank Group
    *  PSU_DDR_PHY_DCR_UBG                                         0x0

    * Un-buffered DIMM Address Mirroring
    *  PSU_DDR_PHY_DCR_UDIMM                                       0x0

    * DDR 2T Timing
    *  PSU_DDR_PHY_DCR_DDR2T                                       0x0

    * No Simultaneous Rank Access
    *  PSU_DDR_PHY_DCR_NOSRA                                       0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DCR_RESERVED_26_18                              0x0

    * Byte Mask
    *  PSU_DDR_PHY_DCR_BYTEMASK                                    0x1

    * DDR Type
    *  PSU_DDR_PHY_DCR_DDRTYPE                                     0x0

    * Multi-Purpose Register (MPR) DQ (DDR3 Only)
    *  PSU_DDR_PHY_DCR_MPRDQ                                       0x0

    * Primary DQ (DDR3 Only)
    *  PSU_DDR_PHY_DCR_PDQ                                         0x0

    * DDR 8-Bank
    *  PSU_DDR_PHY_DCR_DDR8BNK                                     0x1

    * DDR Mode
    *  PSU_DDR_PHY_DCR_DDRMD                                       0x4

    * DRAM Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD080100, 0xFFFFFFFFU ,0x0800040CU)
    */
	PSU_Mask_Write(DDR_PHY_DCR_OFFSET, 0xFFFFFFFFU, 0x0800040CU);
/*##################################################################### */

    /*
    * Register : DTPR0 @ 0XFD080110

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR0_RESERVED_31_29                            0x0

    * Activate to activate command delay (different banks)
    *  PSU_DDR_PHY_DTPR0_TRRD                                      0x6

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR0_RESERVED_23                               0x0

    * Activate to precharge command delay
    *  PSU_DDR_PHY_DTPR0_TRAS                                      0x24

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR0_RESERVED_15                               0x0

    * Precharge command period
    *  PSU_DDR_PHY_DTPR0_TRP                                       0xf

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR0_RESERVED_7_5                              0x0

    * Internal read to precharge command delay
    *  PSU_DDR_PHY_DTPR0_TRTP                                      0x8

    * DRAM Timing Parameters Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080110, 0xFFFFFFFFU ,0x06240F08U)
    */
	PSU_Mask_Write(DDR_PHY_DTPR0_OFFSET, 0xFFFFFFFFU, 0x06240F08U);
/*##################################################################### */

    /*
    * Register : DTPR1 @ 0XFD080114

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR1_RESERVED_31                               0x0

    * Minimum delay from when write leveling mode is programmed to the first D
    * QS/DQS# rising edge.
    *  PSU_DDR_PHY_DTPR1_TWLMRD                                    0x28

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR1_RESERVED_23                               0x0

    * 4-bank activate period
    *  PSU_DDR_PHY_DTPR1_TFAW                                      0x20

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR1_RESERVED_15_11                            0x0

    * Load mode update delay (DDR4 and DDR3 only)
    *  PSU_DDR_PHY_DTPR1_TMOD                                      0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR1_RESERVED_7_5                              0x0

    * Load mode cycle time
    *  PSU_DDR_PHY_DTPR1_TMRD                                      0x8

    * DRAM Timing Parameters Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080114, 0xFFFFFFFFU ,0x28200008U)
    */
	PSU_Mask_Write(DDR_PHY_DTPR1_OFFSET, 0xFFFFFFFFU, 0x28200008U);
/*##################################################################### */

    /*
    * Register : DTPR2 @ 0XFD080118

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR2_RESERVED_31_29                            0x0

    * Read to Write command delay. Valid values are
    *  PSU_DDR_PHY_DTPR2_TRTW                                      0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR2_RESERVED_27_25                            0x0

    * Read to ODT delay (DDR3 only)
    *  PSU_DDR_PHY_DTPR2_TRTODT                                    0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR2_RESERVED_23_20                            0x0

    * CKE minimum pulse width
    *  PSU_DDR_PHY_DTPR2_TCKE                                      0x7

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR2_RESERVED_15_10                            0x0

    * Self refresh exit delay
    *  PSU_DDR_PHY_DTPR2_TXS                                       0x300

    * DRAM Timing Parameters Register 2
    * (OFFSET, MASK, VALUE)      (0XFD080118, 0xFFFFFFFFU ,0x00070300U)
    */
	PSU_Mask_Write(DDR_PHY_DTPR2_OFFSET, 0xFFFFFFFFU, 0x00070300U);
/*##################################################################### */

    /*
    * Register : DTPR3 @ 0XFD08011C

    * ODT turn-off delay extension
    *  PSU_DDR_PHY_DTPR3_TOFDX                                     0x4

    * Read to read and write to write command delay
    *  PSU_DDR_PHY_DTPR3_TCCD                                      0x0

    * DLL locking time
    *  PSU_DDR_PHY_DTPR3_TDLLK                                     0x300

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR3_RESERVED_15_12                            0x0

    * Maximum DQS output access time from CK/CK# (LPDDR2/3 only)
    *  PSU_DDR_PHY_DTPR3_TDQSCKMAX                                 0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR3_RESERVED_7_3                              0x0

    * DQS output access time from CK/CK# (LPDDR2/3 only)
    *  PSU_DDR_PHY_DTPR3_TDQSCK                                    0x0

    * DRAM Timing Parameters Register 3
    * (OFFSET, MASK, VALUE)      (0XFD08011C, 0xFFFFFFFFU ,0x83000800U)
    */
	PSU_Mask_Write(DDR_PHY_DTPR3_OFFSET, 0xFFFFFFFFU, 0x83000800U);
/*##################################################################### */

    /*
    * Register : DTPR4 @ 0XFD080120

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR4_RESERVED_31_30                            0x0

    * ODT turn-on/turn-off delays (DDR2 only)
    *  PSU_DDR_PHY_DTPR4_TAOND_TAOFD                               0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR4_RESERVED_27_26                            0x0

    * Refresh-to-Refresh
    *  PSU_DDR_PHY_DTPR4_TRFC                                      0x116

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR4_RESERVED_15_14                            0x0

    * Write leveling output delay
    *  PSU_DDR_PHY_DTPR4_TWLO                                      0x2b

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR4_RESERVED_7_5                              0x0

    * Power down exit delay
    *  PSU_DDR_PHY_DTPR4_TXP                                       0x7

    * DRAM Timing Parameters Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080120, 0xFFFFFFFFU ,0x01162B07U)
    */
	PSU_Mask_Write(DDR_PHY_DTPR4_OFFSET, 0xFFFFFFFFU, 0x01162B07U);
/*##################################################################### */

    /*
    * Register : DTPR5 @ 0XFD080124

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR5_RESERVED_31_24                            0x0

    * Activate to activate command delay (same bank)
    *  PSU_DDR_PHY_DTPR5_TRC                                       0x33

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR5_RESERVED_15                               0x0

    * Activate to read or write delay
    *  PSU_DDR_PHY_DTPR5_TRCD                                      0xf

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR5_RESERVED_7_5                              0x0

    * Internal write to read command delay
    *  PSU_DDR_PHY_DTPR5_TWTR                                      0x8

    * DRAM Timing Parameters Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080124, 0xFFFFFFFFU ,0x00330F08U)
    */
	PSU_Mask_Write(DDR_PHY_DTPR5_OFFSET, 0xFFFFFFFFU, 0x00330F08U);
/*##################################################################### */

    /*
    * Register : DTPR6 @ 0XFD080128

    * PUB Write Latency Enable
    *  PSU_DDR_PHY_DTPR6_PUBWLEN                                   0x0

    * PUB Read Latency Enable
    *  PSU_DDR_PHY_DTPR6_PUBRLEN                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR6_RESERVED_29_14                            0x0

    * Write Latency
    *  PSU_DDR_PHY_DTPR6_PUBWL                                     0xe

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTPR6_RESERVED_7_6                              0x0

    * Read Latency
    *  PSU_DDR_PHY_DTPR6_PUBRL                                     0xf

    * DRAM Timing Parameters Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080128, 0xFFFFFFFFU ,0x00000E0FU)
    */
	PSU_Mask_Write(DDR_PHY_DTPR6_OFFSET, 0xFFFFFFFFU, 0x00000E0FU);
/*##################################################################### */

    /*
    * Register : RDIMMGCR0 @ 0XFD080140

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR0_RESERVED_31                           0x0

    * RDMIMM Quad CS Enable
    *  PSU_DDR_PHY_RDIMMGCR0_QCSEN                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR0_RESERVED_29_28                        0x0

    * RDIMM Outputs I/O Mode
    *  PSU_DDR_PHY_RDIMMGCR0_RDIMMIOM                              0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR0_RESERVED_26_24                        0x0

    * ERROUT# Output Enable
    *  PSU_DDR_PHY_RDIMMGCR0_ERROUTOE                              0x0

    * ERROUT# I/O Mode
    *  PSU_DDR_PHY_RDIMMGCR0_ERROUTIOM                             0x1

    * ERROUT# Power Down Receiver
    *  PSU_DDR_PHY_RDIMMGCR0_ERROUTPDR                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR0_RESERVED_20                           0x0

    * ERROUT# On-Die Termination
    *  PSU_DDR_PHY_RDIMMGCR0_ERROUTODT                             0x0

    * Load Reduced DIMM
    *  PSU_DDR_PHY_RDIMMGCR0_LRDIMM                                0x0

    * PAR_IN I/O Mode
    *  PSU_DDR_PHY_RDIMMGCR0_PARINIOM                              0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR0_RESERVED_16_8                         0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR0_RNKMRREN_RSVD                         0x0

    * Rank Mirror Enable.
    *  PSU_DDR_PHY_RDIMMGCR0_RNKMRREN                              0x2

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR0_RESERVED_3                            0x0

    * Stop on Parity Error
    *  PSU_DDR_PHY_RDIMMGCR0_SOPERR                                0x0

    * Parity Error No Registering
    *  PSU_DDR_PHY_RDIMMGCR0_ERRNOREG                              0x0

    * Registered DIMM
    *  PSU_DDR_PHY_RDIMMGCR0_RDIMM                                 0x0

    * RDIMM General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080140, 0xFFFFFFFFU ,0x08400020U)
    */
	PSU_Mask_Write(DDR_PHY_RDIMMGCR0_OFFSET, 0xFFFFFFFFU, 0x08400020U);
/*##################################################################### */

    /*
    * Register : RDIMMGCR1 @ 0XFD080144

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR1_RESERVED_31_29                        0x0

    * Address [17] B-side Inversion Disable
    *  PSU_DDR_PHY_RDIMMGCR1_A17BID                                0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR1_RESERVED_27                           0x0

    * Command word to command word programming delay
    *  PSU_DDR_PHY_RDIMMGCR1_TBCMRD_L2                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR1_RESERVED_23                           0x0

    * Command word to command word programming delay
    *  PSU_DDR_PHY_RDIMMGCR1_TBCMRD_L                              0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR1_RESERVED_19                           0x0

    * Command word to command word programming delay
    *  PSU_DDR_PHY_RDIMMGCR1_TBCMRD                                0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RDIMMGCR1_RESERVED_15_14                        0x0

    * Stabilization time
    *  PSU_DDR_PHY_RDIMMGCR1_TBCSTAB                               0xc80

    * RDIMM General Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080144, 0xFFFFFFFFU ,0x00000C80U)
    */
	PSU_Mask_Write(DDR_PHY_RDIMMGCR1_OFFSET, 0xFFFFFFFFU, 0x00000C80U);
/*##################################################################### */

    /*
    * Register : RDIMMCR0 @ 0XFD080150

    * DDR4/DDR3 Control Word 7
    *  PSU_DDR_PHY_RDIMMCR0_RC7                                    0x0

    * DDR4 Control Word 6 (Comman space Control Word) / DDR3 Reserved
    *  PSU_DDR_PHY_RDIMMCR0_RC6                                    0x0

    * DDR4/DDR3 Control Word 5 (CK Driver Characteristics Control Word)
    *  PSU_DDR_PHY_RDIMMCR0_RC5                                    0x0

    * DDR4 Control Word 4 (ODT and CKE Signals Driver Characteristics Control
    * Word) / DDR3 Control Word 4 (Control Signals Driver Characteristics Cont
    * rol Word)
    *  PSU_DDR_PHY_RDIMMCR0_RC4                                    0x0

    * DDR4 Control Word 3 (CA and CS Signals Driver Characteristics Control Wo
    * rd) / DDR3 Control Word 3 (Command/Address Signals Driver Characteristri
    * cs Control Word)
    *  PSU_DDR_PHY_RDIMMCR0_RC3                                    0x0

    * DDR4 Control Word 2 (Timing and IBT Control Word) / DDR3 Control Word 2
    * (Timing Control Word)
    *  PSU_DDR_PHY_RDIMMCR0_RC2                                    0x0

    * DDR4/DDR3 Control Word 1 (Clock Driver Enable Control Word)
    *  PSU_DDR_PHY_RDIMMCR0_RC1                                    0x0

    * DDR4/DDR3 Control Word 0 (Global Features Control Word)
    *  PSU_DDR_PHY_RDIMMCR0_RC0                                    0x0

    * RDIMM Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080150, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_RDIMMCR0_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : RDIMMCR1 @ 0XFD080154

    * Control Word 15
    *  PSU_DDR_PHY_RDIMMCR1_RC15                                   0x0

    * DDR4 Control Word 14 (Parity Control Word) / DDR3 Reserved
    *  PSU_DDR_PHY_RDIMMCR1_RC14                                   0x0

    * DDR4 Control Word 13 (DIMM Configuration Control Word) / DDR3 Reserved
    *  PSU_DDR_PHY_RDIMMCR1_RC13                                   0x0

    * DDR4 Control Word 12 (Training Control Word) / DDR3 Reserved
    *  PSU_DDR_PHY_RDIMMCR1_RC12                                   0x0

    * DDR4 Control Word 11 (Operating Voltage VDD and VREFCA Source Control Wo
    * rd) / DDR3 Control Word 11 (Operation Voltage VDD Control Word)
    *  PSU_DDR_PHY_RDIMMCR1_RC11                                   0x0

    * DDR4/DDR3 Control Word 10 (RDIMM Operating Speed Control Word)
    *  PSU_DDR_PHY_RDIMMCR1_RC10                                   0x2

    * DDR4/DDR3 Control Word 9 (Power Saving Settings Control Word)
    *  PSU_DDR_PHY_RDIMMCR1_RC9                                    0x0

    * DDR4 Control Word 8 (Input/Output Configuration Control Word) / DDR3 Con
    * trol Word 8 (Additional Input Bus Termination Setting Control Word)
    *  PSU_DDR_PHY_RDIMMCR1_RC8                                    0x0

    * RDIMM Control Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080154, 0xFFFFFFFFU ,0x00000200U)
    */
	PSU_Mask_Write(DDR_PHY_RDIMMCR1_OFFSET, 0xFFFFFFFFU, 0x00000200U);
/*##################################################################### */

    /*
    * Register : MR0 @ 0XFD080180

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR0_RESERVED_31_8                               0x6

    * CA Terminating Rank
    *  PSU_DDR_PHY_MR0_CATR                                        0x0

    * Reserved. These are JEDEC reserved bits and are recommended by JEDEC to
    * be programmed to 0x0.
    *  PSU_DDR_PHY_MR0_RSVD_6_5                                    0x1

    * Built-in Self-Test for RZQ
    *  PSU_DDR_PHY_MR0_RZQI                                        0x2

    * Reserved. These are JEDEC reserved bits and are recommended by JEDEC to
    * be programmed to 0x0.
    *  PSU_DDR_PHY_MR0_RSVD_2_0                                    0x0

    * LPDDR4 Mode Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080180, 0xFFFFFFFFU ,0x00000630U)
    */
	PSU_Mask_Write(DDR_PHY_MR0_OFFSET, 0xFFFFFFFFU, 0x00000630U);
/*##################################################################### */

    /*
    * Register : MR1 @ 0XFD080184

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR1_RESERVED_31_8                               0x3

    * Read Postamble Length
    *  PSU_DDR_PHY_MR1_RDPST                                       0x0

    * Write-recovery for auto-precharge command
    *  PSU_DDR_PHY_MR1_NWR                                         0x0

    * Read Preamble Length
    *  PSU_DDR_PHY_MR1_RDPRE                                       0x0

    * Write Preamble Length
    *  PSU_DDR_PHY_MR1_WRPRE                                       0x0

    * Burst Length
    *  PSU_DDR_PHY_MR1_BL                                          0x1

    * LPDDR4 Mode Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080184, 0xFFFFFFFFU ,0x00000301U)
    */
	PSU_Mask_Write(DDR_PHY_MR1_OFFSET, 0xFFFFFFFFU, 0x00000301U);
/*##################################################################### */

    /*
    * Register : MR2 @ 0XFD080188

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR2_RESERVED_31_8                               0x0

    * Write Leveling
    *  PSU_DDR_PHY_MR2_WRL                                         0x0

    * Write Latency Set
    *  PSU_DDR_PHY_MR2_WLS                                         0x0

    * Write Latency
    *  PSU_DDR_PHY_MR2_WL                                          0x4

    * Read Latency
    *  PSU_DDR_PHY_MR2_RL                                          0x0

    * LPDDR4 Mode Register 2
    * (OFFSET, MASK, VALUE)      (0XFD080188, 0xFFFFFFFFU ,0x00000020U)
    */
	PSU_Mask_Write(DDR_PHY_MR2_OFFSET, 0xFFFFFFFFU, 0x00000020U);
/*##################################################################### */

    /*
    * Register : MR3 @ 0XFD08018C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR3_RESERVED_31_8                               0x2

    * DBI-Write Enable
    *  PSU_DDR_PHY_MR3_DBIWR                                       0x0

    * DBI-Read Enable
    *  PSU_DDR_PHY_MR3_DBIRD                                       0x0

    * Pull-down Drive Strength
    *  PSU_DDR_PHY_MR3_PDDS                                        0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR3_RSVD                                        0x0

    * Write Postamble Length
    *  PSU_DDR_PHY_MR3_WRPST                                       0x0

    * Pull-up Calibration Point
    *  PSU_DDR_PHY_MR3_PUCAL                                       0x0

    * LPDDR4 Mode Register 3
    * (OFFSET, MASK, VALUE)      (0XFD08018C, 0xFFFFFFFFU ,0x00000200U)
    */
	PSU_Mask_Write(DDR_PHY_MR3_OFFSET, 0xFFFFFFFFU, 0x00000200U);
/*##################################################################### */

    /*
    * Register : MR4 @ 0XFD080190

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR4_RESERVED_31_16                              0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR4_RSVD_15_13                                  0x0

    * Write Preamble
    *  PSU_DDR_PHY_MR4_WRP                                         0x0

    * Read Preamble
    *  PSU_DDR_PHY_MR4_RDP                                         0x0

    * Read Preamble Training Mode
    *  PSU_DDR_PHY_MR4_RPTM                                        0x0

    * Self Refresh Abort
    *  PSU_DDR_PHY_MR4_SRA                                         0x0

    * CS to Command Latency Mode
    *  PSU_DDR_PHY_MR4_CS2CMDL                                     0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR4_RSVD1                                       0x0

    * Internal VREF Monitor
    *  PSU_DDR_PHY_MR4_IVM                                         0x0

    * Temperature Controlled Refresh Mode
    *  PSU_DDR_PHY_MR4_TCRM                                        0x0

    * Temperature Controlled Refresh Range
    *  PSU_DDR_PHY_MR4_TCRR                                        0x0

    * Maximum Power Down Mode
    *  PSU_DDR_PHY_MR4_MPDM                                        0x0

    * This is a JEDEC reserved bit and is recommended by JEDEC to be programme
    * d to 0x0.
    *  PSU_DDR_PHY_MR4_RSVD_0                                      0x0

    * DDR4 Mode Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080190, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_MR4_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MR5 @ 0XFD080194

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR5_RESERVED_31_16                              0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR5_RSVD                                        0x0

    * Read DBI
    *  PSU_DDR_PHY_MR5_RDBI                                        0x0

    * Write DBI
    *  PSU_DDR_PHY_MR5_WDBI                                        0x0

    * Data Mask
    *  PSU_DDR_PHY_MR5_DM                                          0x1

    * CA Parity Persistent Error
    *  PSU_DDR_PHY_MR5_CAPPE                                       0x1

    * RTT_PARK
    *  PSU_DDR_PHY_MR5_RTTPARK                                     0x3

    * ODT Input Buffer during Power Down mode
    *  PSU_DDR_PHY_MR5_ODTIBPD                                     0x0

    * C/A Parity Error Status
    *  PSU_DDR_PHY_MR5_CAPES                                       0x0

    * CRC Error Clear
    *  PSU_DDR_PHY_MR5_CRCEC                                       0x0

    * C/A Parity Latency Mode
    *  PSU_DDR_PHY_MR5_CAPM                                        0x0

    * DDR4 Mode Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080194, 0xFFFFFFFFU ,0x000006C0U)
    */
	PSU_Mask_Write(DDR_PHY_MR5_OFFSET, 0xFFFFFFFFU, 0x000006C0U);
/*##################################################################### */

    /*
    * Register : MR6 @ 0XFD080198

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR6_RESERVED_31_16                              0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR6_RSVD_15_13                                  0x0

    * CAS_n to CAS_n command delay for same bank group (tCCD_L)
    *  PSU_DDR_PHY_MR6_TCCDL                                       0x2

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR6_RSVD_9_8                                    0x0

    * VrefDQ Training Enable
    *  PSU_DDR_PHY_MR6_VDDQTEN                                     0x0

    * VrefDQ Training Range
    *  PSU_DDR_PHY_MR6_VDQTRG                                      0x0

    * VrefDQ Training Values
    *  PSU_DDR_PHY_MR6_VDQTVAL                                     0x19

    * DDR4 Mode Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080198, 0xFFFFFFFFU ,0x00000819U)
    */
	PSU_Mask_Write(DDR_PHY_MR6_OFFSET, 0xFFFFFFFFU, 0x00000819U);
/*##################################################################### */

    /*
    * Register : MR11 @ 0XFD0801AC

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR11_RESERVED_31_8                              0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR11_RSVD                                       0x0

    * Power Down Control
    *  PSU_DDR_PHY_MR11_PDCTL                                      0x0

    * DQ Bus Receiver On-Die-Termination
    *  PSU_DDR_PHY_MR11_DQODT                                      0x0

    * LPDDR4 Mode Register 11
    * (OFFSET, MASK, VALUE)      (0XFD0801AC, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_MR11_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MR12 @ 0XFD0801B0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR12_RESERVED_31_8                              0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR12_RSVD                                       0x0

    * VREF_CA Range Select.
    *  PSU_DDR_PHY_MR12_VR_CA                                      0x1

    * Controls the VREF(ca) levels for Frequency-Set-Point[1:0].
    *  PSU_DDR_PHY_MR12_VREF_CA                                    0xd

    * LPDDR4 Mode Register 12
    * (OFFSET, MASK, VALUE)      (0XFD0801B0, 0xFFFFFFFFU ,0x0000004DU)
    */
	PSU_Mask_Write(DDR_PHY_MR12_OFFSET, 0xFFFFFFFFU, 0x0000004DU);
/*##################################################################### */

    /*
    * Register : MR13 @ 0XFD0801B4

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR13_RESERVED_31_8                              0x0

    * Frequency Set Point Operation Mode
    *  PSU_DDR_PHY_MR13_FSPOP                                      0x0

    * Frequency Set Point Write Enable
    *  PSU_DDR_PHY_MR13_FSPWR                                      0x0

    * Data Mask Enable
    *  PSU_DDR_PHY_MR13_DMD                                        0x0

    * Refresh Rate Option
    *  PSU_DDR_PHY_MR13_RRO                                        0x0

    * VREF Current Generator
    *  PSU_DDR_PHY_MR13_VRCG                                       0x1

    * VREF Output
    *  PSU_DDR_PHY_MR13_VRO                                        0x0

    * Read Preamble Training Mode
    *  PSU_DDR_PHY_MR13_RPT                                        0x0

    * Command Bus Training
    *  PSU_DDR_PHY_MR13_CBT                                        0x0

    * LPDDR4 Mode Register 13
    * (OFFSET, MASK, VALUE)      (0XFD0801B4, 0xFFFFFFFFU ,0x00000008U)
    */
	PSU_Mask_Write(DDR_PHY_MR13_OFFSET, 0xFFFFFFFFU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : MR14 @ 0XFD0801B8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR14_RESERVED_31_8                              0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR14_RSVD                                       0x0

    * VREFDQ Range Selects.
    *  PSU_DDR_PHY_MR14_VR_DQ                                      0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR14_VREF_DQ                                    0xd

    * LPDDR4 Mode Register 14
    * (OFFSET, MASK, VALUE)      (0XFD0801B8, 0xFFFFFFFFU ,0x0000004DU)
    */
	PSU_Mask_Write(DDR_PHY_MR14_OFFSET, 0xFFFFFFFFU, 0x0000004DU);
/*##################################################################### */

    /*
    * Register : MR22 @ 0XFD0801D8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_MR22_RESERVED_31_8                              0x0

    * These are JEDEC reserved bits and are recommended by JEDEC to be program
    * med to 0x0.
    *  PSU_DDR_PHY_MR22_RSVD                                       0x0

    * CA ODT termination disable.
    *  PSU_DDR_PHY_MR22_ODTD_CA                                    0x0

    * ODT CS override.
    *  PSU_DDR_PHY_MR22_ODTE_CS                                    0x0

    * ODT CK override.
    *  PSU_DDR_PHY_MR22_ODTE_CK                                    0x0

    * Controller ODT value for VOH calibration.
    *  PSU_DDR_PHY_MR22_CODT                                       0x0

    * LPDDR4 Mode Register 22
    * (OFFSET, MASK, VALUE)      (0XFD0801D8, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_MR22_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DTCR0 @ 0XFD080200

    * Refresh During Training
    *  PSU_DDR_PHY_DTCR0_RFSHDT                                    0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTCR0_RESERVED_27_26                            0x0

    * Data Training Debug Rank Select
    *  PSU_DDR_PHY_DTCR0_DTDRS                                     0x0

    * Data Training with Early/Extended Gate
    *  PSU_DDR_PHY_DTCR0_DTEXG                                     0x0

    * Data Training Extended Write DQS
    *  PSU_DDR_PHY_DTCR0_DTEXD                                     0x0

    * Data Training Debug Step
    *  PSU_DDR_PHY_DTCR0_DTDSTP                                    0x0

    * Data Training Debug Enable
    *  PSU_DDR_PHY_DTCR0_DTDEN                                     0x0

    * Data Training Debug Byte Select
    *  PSU_DDR_PHY_DTCR0_DTDBS                                     0x0

    * Data Training read DBI deskewing configuration
    *  PSU_DDR_PHY_DTCR0_DTRDBITR                                  0x2

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTCR0_RESERVED_13                               0x0

    * Data Training Write Bit Deskew Data Mask
    *  PSU_DDR_PHY_DTCR0_DTWBDDM                                   0x1

    * Refreshes Issued During Entry to Training
    *  PSU_DDR_PHY_DTCR0_RFSHEN                                    0x1

    * Data Training Compare Data
    *  PSU_DDR_PHY_DTCR0_DTCMPD                                    0x1

    * Data Training Using MPR
    *  PSU_DDR_PHY_DTCR0_DTMPR                                     0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTCR0_RESERVED_5_4                              0x0

    * Data Training Repeat Number
    *  PSU_DDR_PHY_DTCR0_DTRPTN                                    0x7

    * Data Training Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080200, 0xFFFFFFFFU ,0x800091C7U)
    */
	PSU_Mask_Write(DDR_PHY_DTCR0_OFFSET, 0xFFFFFFFFU, 0x800091C7U);
/*##################################################################### */

    /*
    * Register : DTCR1 @ 0XFD080204

    * Rank Enable.
    *  PSU_DDR_PHY_DTCR1_RANKEN_RSVD                               0x0

    * Rank Enable.
    *  PSU_DDR_PHY_DTCR1_RANKEN                                    0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTCR1_RESERVED_15_14                            0x0

    * Data Training Rank
    *  PSU_DDR_PHY_DTCR1_DTRANK                                    0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTCR1_RESERVED_11                               0x0

    * Read Leveling Gate Sampling Difference
    *  PSU_DDR_PHY_DTCR1_RDLVLGDIFF                                0x2

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTCR1_RESERVED_7                                0x0

    * Read Leveling Gate Shift
    *  PSU_DDR_PHY_DTCR1_RDLVLGS                                   0x3

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DTCR1_RESERVED_3                                0x0

    * Read Preamble Training enable
    *  PSU_DDR_PHY_DTCR1_RDPRMVL_TRN                               0x1

    * Read Leveling Enable
    *  PSU_DDR_PHY_DTCR1_RDLVLEN                                   0x1

    * Basic Gate Training Enable
    *  PSU_DDR_PHY_DTCR1_BSTEN                                     0x0

    * Data Training Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080204, 0xFFFFFFFFU ,0x00010236U)
    */
	PSU_Mask_Write(DDR_PHY_DTCR1_OFFSET, 0xFFFFFFFFU, 0x00010236U);
/*##################################################################### */

    /*
    * Register : CATR0 @ 0XFD080240

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_CATR0_RESERVED_31_21                            0x0

    * Minimum time (in terms of number of dram clocks) between two consectuve
    * CA calibration command
    *  PSU_DDR_PHY_CATR0_CACD                                      0x14

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_CATR0_RESERVED_15_13                            0x0

    * Minimum time (in terms of number of dram clocks) PUB should wait before
    * sampling the CA response after Calibration command has been sent to the
    * memory
    *  PSU_DDR_PHY_CATR0_CAADR                                     0x10

    * CA_1 Response Byte Lane 1
    *  PSU_DDR_PHY_CATR0_CA1BYTE1                                  0x5

    * CA_1 Response Byte Lane 0
    *  PSU_DDR_PHY_CATR0_CA1BYTE0                                  0x4

    * CA Training Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080240, 0xFFFFFFFFU ,0x00141054U)
    */
	PSU_Mask_Write(DDR_PHY_CATR0_OFFSET, 0xFFFFFFFFU, 0x00141054U);
/*##################################################################### */

    /*
    * Register : DQSDR0 @ 0XFD080250

    * Number of delay taps by which the DQS gate LCDL will be updated when DQS
    *  drift is detected
    *  PSU_DDR_PHY_DQSDR0_DFTDLY                                   0x0

    * Drift Impedance Update
    *  PSU_DDR_PHY_DQSDR0_DFTZQUP                                  0x0

    * Drift DDL Update
    *  PSU_DDR_PHY_DQSDR0_DFTDDLUP                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DQSDR0_RESERVED_25_22                           0x0

    * Drift Read Spacing
    *  PSU_DDR_PHY_DQSDR0_DFTRDSPC                                 0x0

    * Drift Back-to-Back Reads
    *  PSU_DDR_PHY_DQSDR0_DFTB2BRD                                 0x8

    * Drift Idle Reads
    *  PSU_DDR_PHY_DQSDR0_DFTIDLRD                                 0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DQSDR0_RESERVED_11_8                            0x0

    * Gate Pulse Enable
    *  PSU_DDR_PHY_DQSDR0_DFTGPULSE                                0x0

    * DQS Drift Update Mode
    *  PSU_DDR_PHY_DQSDR0_DFTUPMODE                                0x0

    * DQS Drift Detection Mode
    *  PSU_DDR_PHY_DQSDR0_DFTDTMODE                                0x0

    * DQS Drift Detection Enable
    *  PSU_DDR_PHY_DQSDR0_DFTDTEN                                  0x0

    * DQS Drift Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080250, 0xFFFFFFFFU ,0x00088000U)
    */
	PSU_Mask_Write(DDR_PHY_DQSDR0_OFFSET, 0xFFFFFFFFU, 0x00088000U);
/*##################################################################### */

    /*
    * Register : BISTLSR @ 0XFD080414

    * LFSR seed for pseudo-random BIST patterns
    *  PSU_DDR_PHY_BISTLSR_SEED                                    0x12341000

    * BIST LFSR Seed Register
    * (OFFSET, MASK, VALUE)      (0XFD080414, 0xFFFFFFFFU ,0x12341000U)
    */
	PSU_Mask_Write(DDR_PHY_BISTLSR_OFFSET, 0xFFFFFFFFU, 0x12341000U);
/*##################################################################### */

    /*
    * Register : RIOCR5 @ 0XFD0804F4

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_RIOCR5_RESERVED_31_16                           0x0

    * Reserved. Return zeros on reads.
    *  PSU_DDR_PHY_RIOCR5_ODTOEMODE_RSVD                           0x0

    * SDRAM On-die Termination Output Enable (OE) Mode Selection.
    *  PSU_DDR_PHY_RIOCR5_ODTOEMODE                                0x5

    * Rank I/O Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD0804F4, 0xFFFFFFFFU ,0x00000005U)
    */
	PSU_Mask_Write(DDR_PHY_RIOCR5_OFFSET, 0xFFFFFFFFU, 0x00000005U);
/*##################################################################### */

    /*
    * Register : ACIOCR0 @ 0XFD080500

    * Address/Command Slew Rate (D3F I/O Only)
    *  PSU_DDR_PHY_ACIOCR0_ACSR                                    0x0

    * SDRAM Reset I/O Mode
    *  PSU_DDR_PHY_ACIOCR0_RSTIOM                                  0x1

    * SDRAM Reset Power Down Receiver
    *  PSU_DDR_PHY_ACIOCR0_RSTPDR                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACIOCR0_RESERVED_27                             0x0

    * SDRAM Reset On-Die Termination
    *  PSU_DDR_PHY_ACIOCR0_RSTODT                                  0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACIOCR0_RESERVED_25_10                          0x0

    * CK Duty Cycle Correction
    *  PSU_DDR_PHY_ACIOCR0_CKDCC                                   0x0

    * AC Power Down Receiver Mode
    *  PSU_DDR_PHY_ACIOCR0_ACPDRMODE                               0x2

    * AC On-die Termination Mode
    *  PSU_DDR_PHY_ACIOCR0_ACODTMODE                               0x2

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACIOCR0_RESERVED_1                              0x0

    * Control delayed or non-delayed clock to CS_N/ODT?CKE AC slices.
    *  PSU_DDR_PHY_ACIOCR0_ACRANKCLKSEL                            0x0

    * AC I/O Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080500, 0xFFFFFFFFU ,0x30000028U)
    */
	PSU_Mask_Write(DDR_PHY_ACIOCR0_OFFSET, 0xFFFFFFFFU, 0x30000028U);
/*##################################################################### */

    /*
    * Register : ACIOCR2 @ 0XFD080508

    * Clock gating for glue logic inside CLKGEN and glue logic inside CONTROL
    * slice
    *  PSU_DDR_PHY_ACIOCR2_CLKGENCLKGATE                           0x0

    * Clock gating for Output Enable D slices [0]
    *  PSU_DDR_PHY_ACIOCR2_ACOECLKGATE0                            0x0

    * Clock gating for Power Down Receiver D slices [0]
    *  PSU_DDR_PHY_ACIOCR2_ACPDRCLKGATE0                           0x0

    * Clock gating for Termination Enable D slices [0]
    *  PSU_DDR_PHY_ACIOCR2_ACTECLKGATE0                            0x0

    * Clock gating for CK# D slices [1:0]
    *  PSU_DDR_PHY_ACIOCR2_CKNCLKGATE0                             0x2

    * Clock gating for CK D slices [1:0]
    *  PSU_DDR_PHY_ACIOCR2_CKCLKGATE0                              0x2

    * Clock gating for AC D slices [23:0]
    *  PSU_DDR_PHY_ACIOCR2_ACCLKGATE0                              0x0

    * AC I/O Configuration Register 2
    * (OFFSET, MASK, VALUE)      (0XFD080508, 0xFFFFFFFFU ,0x0A000000U)
    */
	PSU_Mask_Write(DDR_PHY_ACIOCR2_OFFSET, 0xFFFFFFFFU, 0x0A000000U);
/*##################################################################### */

    /*
    * Register : ACIOCR3 @ 0XFD08050C

    * SDRAM Parity Output Enable (OE) Mode Selection
    *  PSU_DDR_PHY_ACIOCR3_PAROEMODE                               0x0

    * SDRAM Bank Group Output Enable (OE) Mode Selection
    *  PSU_DDR_PHY_ACIOCR3_BGOEMODE                                0x0

    * SDRAM Bank Address Output Enable (OE) Mode Selection
    *  PSU_DDR_PHY_ACIOCR3_BAOEMODE                                0x0

    * SDRAM A[17] Output Enable (OE) Mode Selection
    *  PSU_DDR_PHY_ACIOCR3_A17OEMODE                               0x0

    * SDRAM A[16] / RAS_n Output Enable (OE) Mode Selection
    *  PSU_DDR_PHY_ACIOCR3_A16OEMODE                               0x0

    * SDRAM ACT_n Output Enable (OE) Mode Selection (DDR4 only)
    *  PSU_DDR_PHY_ACIOCR3_ACTOEMODE                               0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACIOCR3_RESERVED_15_8                           0x0

    * Reserved. Return zeros on reads.
    *  PSU_DDR_PHY_ACIOCR3_CKOEMODE_RSVD                           0x0

    * SDRAM CK Output Enable (OE) Mode Selection.
    *  PSU_DDR_PHY_ACIOCR3_CKOEMODE                                0x9

    * AC I/O Configuration Register 3
    * (OFFSET, MASK, VALUE)      (0XFD08050C, 0xFFFFFFFFU ,0x00000009U)
    */
	PSU_Mask_Write(DDR_PHY_ACIOCR3_OFFSET, 0xFFFFFFFFU, 0x00000009U);
/*##################################################################### */

    /*
    * Register : ACIOCR4 @ 0XFD080510

    * Clock gating for AC LB slices and loopback read valid slices
    *  PSU_DDR_PHY_ACIOCR4_LBCLKGATE                               0x0

    * Clock gating for Output Enable D slices [1]
    *  PSU_DDR_PHY_ACIOCR4_ACOECLKGATE1                            0x0

    * Clock gating for Power Down Receiver D slices [1]
    *  PSU_DDR_PHY_ACIOCR4_ACPDRCLKGATE1                           0x0

    * Clock gating for Termination Enable D slices [1]
    *  PSU_DDR_PHY_ACIOCR4_ACTECLKGATE1                            0x0

    * Clock gating for CK# D slices [3:2]
    *  PSU_DDR_PHY_ACIOCR4_CKNCLKGATE1                             0x2

    * Clock gating for CK D slices [3:2]
    *  PSU_DDR_PHY_ACIOCR4_CKCLKGATE1                              0x2

    * Clock gating for AC D slices [47:24]
    *  PSU_DDR_PHY_ACIOCR4_ACCLKGATE1                              0x0

    * AC I/O Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080510, 0xFFFFFFFFU ,0x0A000000U)
    */
	PSU_Mask_Write(DDR_PHY_ACIOCR4_OFFSET, 0xFFFFFFFFU, 0x0A000000U);
/*##################################################################### */

    /*
    * Register : IOVCR0 @ 0XFD080520

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_IOVCR0_RESERVED_31_29                           0x0

    * Address/command lane VREF Pad Enable
    *  PSU_DDR_PHY_IOVCR0_ACREFPEN                                 0x0

    * Address/command lane Internal VREF Enable
    *  PSU_DDR_PHY_IOVCR0_ACREFEEN                                 0x0

    * Address/command lane Single-End VREF Enable
    *  PSU_DDR_PHY_IOVCR0_ACREFSEN                                 0x1

    * Address/command lane Internal VREF Enable
    *  PSU_DDR_PHY_IOVCR0_ACREFIEN                                 0x1

    * External VREF generato REFSEL range select
    *  PSU_DDR_PHY_IOVCR0_ACREFESELRANGE                           0x0

    * Address/command lane External VREF Select
    *  PSU_DDR_PHY_IOVCR0_ACREFESEL                                0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_IOVCR0_ACREFSSELRANGE                           0x1

    * Address/command lane Single-End VREF Select
    *  PSU_DDR_PHY_IOVCR0_ACREFSSEL                                0x30

    * Internal VREF generator REFSEL ragne select
    *  PSU_DDR_PHY_IOVCR0_ACVREFISELRANGE                          0x1

    * REFSEL Control for internal AC IOs
    *  PSU_DDR_PHY_IOVCR0_ACVREFISEL                               0x4e

    * IO VREF Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080520, 0xFFFFFFFFU ,0x0300B0CEU)
    */
	PSU_Mask_Write(DDR_PHY_IOVCR0_OFFSET, 0xFFFFFFFFU, 0x0300B0CEU);
/*##################################################################### */

    /*
    * Register : VTCR0 @ 0XFD080528

    * Number of ctl_clk required to meet (> 150ns) timing requirements during
    * DRAM DQ VREF training
    *  PSU_DDR_PHY_VTCR0_TVREF                                     0x7

    * DRM DQ VREF training Enable
    *  PSU_DDR_PHY_VTCR0_DVEN                                      0x1

    * Per Device Addressability Enable
    *  PSU_DDR_PHY_VTCR0_PDAEN                                     0x1

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_VTCR0_RESERVED_26                               0x0

    * VREF Word Count
    *  PSU_DDR_PHY_VTCR0_VWCR                                      0x4

    * DRAM DQ VREF step size used during DRAM VREF training
    *  PSU_DDR_PHY_VTCR0_DVSS                                      0x0

    * Maximum VREF limit value used during DRAM VREF training
    *  PSU_DDR_PHY_VTCR0_DVMAX                                     0x32

    * Minimum VREF limit value used during DRAM VREF training
    *  PSU_DDR_PHY_VTCR0_DVMIN                                     0x0

    * Initial DRAM DQ VREF value used during DRAM VREF training
    *  PSU_DDR_PHY_VTCR0_DVINIT                                    0x19

    * VREF Training Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080528, 0xFFFFFFFFU ,0xF9032019U)
    */
	PSU_Mask_Write(DDR_PHY_VTCR0_OFFSET, 0xFFFFFFFFU, 0xF9032019U);
/*##################################################################### */

    /*
    * Register : VTCR1 @ 0XFD08052C

    * Host VREF step size used during VREF training. The register value of N i
    * ndicates step size of (N+1)
    *  PSU_DDR_PHY_VTCR1_HVSS                                      0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_VTCR1_RESERVED_27                               0x0

    * Maximum VREF limit value used during DRAM VREF training.
    *  PSU_DDR_PHY_VTCR1_HVMAX                                     0x7f

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_VTCR1_RESERVED_19                               0x0

    * Minimum VREF limit value used during DRAM VREF training.
    *  PSU_DDR_PHY_VTCR1_HVMIN                                     0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_VTCR1_RESERVED_11                               0x0

    * Static Host Vref Rank Value
    *  PSU_DDR_PHY_VTCR1_SHRNK                                     0x0

    * Static Host Vref Rank Enable
    *  PSU_DDR_PHY_VTCR1_SHREN                                     0x1

    * Number of ctl_clk required to meet (> 200ns) VREF Settling timing requir
    * ements during Host IO VREF training
    *  PSU_DDR_PHY_VTCR1_TVREFIO                                   0x7

    * Eye LCDL Offset value for VREF training
    *  PSU_DDR_PHY_VTCR1_EOFF                                      0x0

    * Number of LCDL Eye points for which VREF training is repeated
    *  PSU_DDR_PHY_VTCR1_ENUM                                      0x0

    * HOST (IO) internal VREF training Enable
    *  PSU_DDR_PHY_VTCR1_HVEN                                      0x1

    * Host IO Type Control
    *  PSU_DDR_PHY_VTCR1_HVIO                                      0x1

    * VREF Training Control Register 1
    * (OFFSET, MASK, VALUE)      (0XFD08052C, 0xFFFFFFFFU ,0x07F001E3U)
    */
	PSU_Mask_Write(DDR_PHY_VTCR1_OFFSET, 0xFFFFFFFFU, 0x07F001E3U);
/*##################################################################### */

    /*
    * Register : ACBDLR1 @ 0XFD080544

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR1_RESERVED_31_30                          0x0

    * Delay select for the BDL on Parity.
    *  PSU_DDR_PHY_ACBDLR1_PARBD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR1_RESERVED_23_22                          0x0

    * Delay select for the BDL on Address A[16]. In DDR3 mode this pin is conn
    * ected to WE.
    *  PSU_DDR_PHY_ACBDLR1_A16BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR1_RESERVED_15_14                          0x0

    * Delay select for the BDL on Address A[17]. When not in DDR4 modemode thi
    * s pin is connected to CAS.
    *  PSU_DDR_PHY_ACBDLR1_A17BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR1_RESERVED_7_6                            0x0

    * Delay select for the BDL on ACTN.
    *  PSU_DDR_PHY_ACBDLR1_ACTBD                                   0x0

    * AC Bit Delay Line Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080544, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_ACBDLR1_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ACBDLR2 @ 0XFD080548

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR2_RESERVED_31_30                          0x0

    * Delay select for the BDL on BG[1].
    *  PSU_DDR_PHY_ACBDLR2_BG1BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR2_RESERVED_23_22                          0x0

    * Delay select for the BDL on BG[0].
    *  PSU_DDR_PHY_ACBDLR2_BG0BD                                   0x0

    * Reser.ved Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR2_RESERVED_15_14                          0x0

    * Delay select for the BDL on BA[1].
    *  PSU_DDR_PHY_ACBDLR2_BA1BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR2_RESERVED_7_6                            0x0

    * Delay select for the BDL on BA[0].
    *  PSU_DDR_PHY_ACBDLR2_BA0BD                                   0x0

    * AC Bit Delay Line Register 2
    * (OFFSET, MASK, VALUE)      (0XFD080548, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_ACBDLR2_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ACBDLR6 @ 0XFD080558

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR6_RESERVED_31_30                          0x0

    * Delay select for the BDL on Address A[3].
    *  PSU_DDR_PHY_ACBDLR6_A03BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR6_RESERVED_23_22                          0x0

    * Delay select for the BDL on Address A[2].
    *  PSU_DDR_PHY_ACBDLR6_A02BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR6_RESERVED_15_14                          0x0

    * Delay select for the BDL on Address A[1].
    *  PSU_DDR_PHY_ACBDLR6_A01BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR6_RESERVED_7_6                            0x0

    * Delay select for the BDL on Address A[0].
    *  PSU_DDR_PHY_ACBDLR6_A00BD                                   0x0

    * AC Bit Delay Line Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080558, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_ACBDLR6_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ACBDLR7 @ 0XFD08055C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR7_RESERVED_31_30                          0x0

    * Delay select for the BDL on Address A[7].
    *  PSU_DDR_PHY_ACBDLR7_A07BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR7_RESERVED_23_22                          0x0

    * Delay select for the BDL on Address A[6].
    *  PSU_DDR_PHY_ACBDLR7_A06BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR7_RESERVED_15_14                          0x0

    * Delay select for the BDL on Address A[5].
    *  PSU_DDR_PHY_ACBDLR7_A05BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR7_RESERVED_7_6                            0x0

    * Delay select for the BDL on Address A[4].
    *  PSU_DDR_PHY_ACBDLR7_A04BD                                   0x0

    * AC Bit Delay Line Register 7
    * (OFFSET, MASK, VALUE)      (0XFD08055C, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_ACBDLR7_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ACBDLR8 @ 0XFD080560

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR8_RESERVED_31_30                          0x0

    * Delay select for the BDL on Address A[11].
    *  PSU_DDR_PHY_ACBDLR8_A11BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR8_RESERVED_23_22                          0x0

    * Delay select for the BDL on Address A[10].
    *  PSU_DDR_PHY_ACBDLR8_A10BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR8_RESERVED_15_14                          0x0

    * Delay select for the BDL on Address A[9].
    *  PSU_DDR_PHY_ACBDLR8_A09BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR8_RESERVED_7_6                            0x0

    * Delay select for the BDL on Address A[8].
    *  PSU_DDR_PHY_ACBDLR8_A08BD                                   0x0

    * AC Bit Delay Line Register 8
    * (OFFSET, MASK, VALUE)      (0XFD080560, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_ACBDLR8_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ACBDLR9 @ 0XFD080564

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR9_RESERVED_31_30                          0x0

    * Delay select for the BDL on Address A[15].
    *  PSU_DDR_PHY_ACBDLR9_A15BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR9_RESERVED_23_22                          0x0

    * Delay select for the BDL on Address A[14].
    *  PSU_DDR_PHY_ACBDLR9_A14BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR9_RESERVED_15_14                          0x0

    * Delay select for the BDL on Address A[13].
    *  PSU_DDR_PHY_ACBDLR9_A13BD                                   0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ACBDLR9_RESERVED_7_6                            0x0

    * Delay select for the BDL on Address A[12].
    *  PSU_DDR_PHY_ACBDLR9_A12BD                                   0x0

    * AC Bit Delay Line Register 9
    * (OFFSET, MASK, VALUE)      (0XFD080564, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(DDR_PHY_ACBDLR9_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ZQCR @ 0XFD080680

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_ZQCR_RESERVED_31_26                             0x0

    * ZQ VREF Range
    *  PSU_DDR_PHY_ZQCR_ZQREFISELRANGE                             0x0

    * Programmable Wait for Frequency B
    *  PSU_DDR_PHY_ZQCR_PGWAIT_FRQB                                0x11

    * Programmable Wait for Frequency A
    *  PSU_DDR_PHY_ZQCR_PGWAIT_FRQA                                0x15

    * ZQ VREF Pad Enable
    *  PSU_DDR_PHY_ZQCR_ZQREFPEN                                   0x0

    * ZQ Internal VREF Enable
    *  PSU_DDR_PHY_ZQCR_ZQREFIEN                                   0x1

    * Choice of termination mode
    *  PSU_DDR_PHY_ZQCR_ODT_MODE                                   0x1

    * Force ZCAL VT update
    *  PSU_DDR_PHY_ZQCR_FORCE_ZCAL_VT_UPDATE                       0x0

    * IO VT Drift Limit
    *  PSU_DDR_PHY_ZQCR_IODLMT                                     0x2

    * Averaging algorithm enable, if set, enables averaging algorithm
    *  PSU_DDR_PHY_ZQCR_AVGEN                                      0x1

    * Maximum number of averaging rounds to be used by averaging algorithm
    *  PSU_DDR_PHY_ZQCR_AVGMAX                                     0x2

    * ZQ Calibration Type
    *  PSU_DDR_PHY_ZQCR_ZCALT                                      0x0

    * ZQ Power Down
    *  PSU_DDR_PHY_ZQCR_ZQPD                                       0x0

    * ZQ Impedance Control Register
    * (OFFSET, MASK, VALUE)      (0XFD080680, 0xFFFFFFFFU ,0x008AAA58U)
    */
	PSU_Mask_Write(DDR_PHY_ZQCR_OFFSET, 0xFFFFFFFFU, 0x008AAA58U);
/*##################################################################### */

    /*
    * Register : ZQ0PR0 @ 0XFD080684

    * Pull-down drive strength ZCTRL over-ride enable
    *  PSU_DDR_PHY_ZQ0PR0_PD_DRV_ZDEN                              0x0

    * Pull-up drive strength ZCTRL over-ride enable
    *  PSU_DDR_PHY_ZQ0PR0_PU_DRV_ZDEN                              0x0

    * Pull-down termination ZCTRL over-ride enable
    *  PSU_DDR_PHY_ZQ0PR0_PD_ODT_ZDEN                              0x0

    * Pull-up termination ZCTRL over-ride enable
    *  PSU_DDR_PHY_ZQ0PR0_PU_ODT_ZDEN                              0x0

    * Calibration segment bypass
    *  PSU_DDR_PHY_ZQ0PR0_ZSEGBYP                                  0x0

    * VREF latch mode controls the mode in which the ZLE pin of the PVREF cell
    *  is driven by the PUB
    *  PSU_DDR_PHY_ZQ0PR0_ZLE_MODE                                 0x0

    * Termination adjustment
    *  PSU_DDR_PHY_ZQ0PR0_ODT_ADJUST                               0x0

    * Pulldown drive strength adjustment
    *  PSU_DDR_PHY_ZQ0PR0_PD_DRV_ADJUST                            0x0

    * Pullup drive strength adjustment
    *  PSU_DDR_PHY_ZQ0PR0_PU_DRV_ADJUST                            0x0

    * DRAM Impedance Divide Ratio
    *  PSU_DDR_PHY_ZQ0PR0_ZPROG_DRAM_ODT                           0x7

    * HOST Impedance Divide Ratio
    *  PSU_DDR_PHY_ZQ0PR0_ZPROG_HOST_ODT                           0x9

    * Impedance Divide Ratio (pulldown drive calibration during asymmetric dri
    * ve strength calibration)
    *  PSU_DDR_PHY_ZQ0PR0_ZPROG_ASYM_DRV_PD                        0xd

    * Impedance Divide Ratio (pullup drive calibration during asymmetric drive
    *  strength calibration)
    *  PSU_DDR_PHY_ZQ0PR0_ZPROG_ASYM_DRV_PU                        0xd

    * ZQ n Impedance Control Program Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080684, 0xFFFFFFFFU ,0x000079DDU)
    */
	PSU_Mask_Write(DDR_PHY_ZQ0PR0_OFFSET, 0xFFFFFFFFU, 0x000079DDU);
/*##################################################################### */

    /*
    * Register : ZQ0OR0 @ 0XFD080694

    * Reserved. Return zeros on reads.
    *  PSU_DDR_PHY_ZQ0OR0_RESERVED_31_26                           0x0

    * Override value for the pull-up output impedance
    *  PSU_DDR_PHY_ZQ0OR0_ZDATA_PU_DRV_OVRD                        0x1e1

    * Reserved. Return zeros on reads.
    *  PSU_DDR_PHY_ZQ0OR0_RESERVED_15_10                           0x0

    * Override value for the pull-down output impedance
    *  PSU_DDR_PHY_ZQ0OR0_ZDATA_PD_DRV_OVRD                        0x210

    * ZQ n Impedance Control Override Data Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080694, 0xFFFFFFFFU ,0x01E10210U)
    */
	PSU_Mask_Write(DDR_PHY_ZQ0OR0_OFFSET, 0xFFFFFFFFU, 0x01E10210U);
/*##################################################################### */

    /*
    * Register : ZQ0OR1 @ 0XFD080698

    * Reserved. Return zeros on reads.
    *  PSU_DDR_PHY_ZQ0OR1_RESERVED_31_26                           0x0

    * Override value for the pull-up termination
    *  PSU_DDR_PHY_ZQ0OR1_ZDATA_PU_ODT_OVRD                        0x1e1

    * Reserved. Return zeros on reads.
    *  PSU_DDR_PHY_ZQ0OR1_RESERVED_15_10                           0x0

    * Override value for the pull-down termination
    *  PSU_DDR_PHY_ZQ0OR1_ZDATA_PD_ODT_OVRD                        0x0

    * ZQ n Impedance Control Override Data Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080698, 0xFFFFFFFFU ,0x01E10000U)
    */
	PSU_Mask_Write(DDR_PHY_ZQ0OR1_OFFSET, 0xFFFFFFFFU, 0x01E10000U);
/*##################################################################### */

    /*
    * Register : ZQ1PR0 @ 0XFD0806A4

    * Pull-down drive strength ZCTRL over-ride enable
    *  PSU_DDR_PHY_ZQ1PR0_PD_DRV_ZDEN                              0x0

    * Pull-up drive strength ZCTRL over-ride enable
    *  PSU_DDR_PHY_ZQ1PR0_PU_DRV_ZDEN                              0x0

    * Pull-down termination ZCTRL over-ride enable
    *  PSU_DDR_PHY_ZQ1PR0_PD_ODT_ZDEN                              0x0

    * Pull-up termination ZCTRL over-ride enable
    *  PSU_DDR_PHY_ZQ1PR0_PU_ODT_ZDEN                              0x0

    * Calibration segment bypass
    *  PSU_DDR_PHY_ZQ1PR0_ZSEGBYP                                  0x0

    * VREF latch mode controls the mode in which the ZLE pin of the PVREF cell
    *  is driven by the PUB
    *  PSU_DDR_PHY_ZQ1PR0_ZLE_MODE                                 0x0

    * Termination adjustment
    *  PSU_DDR_PHY_ZQ1PR0_ODT_ADJUST                               0x0

    * Pulldown drive strength adjustment
    *  PSU_DDR_PHY_ZQ1PR0_PD_DRV_ADJUST                            0x1

    * Pullup drive strength adjustment
    *  PSU_DDR_PHY_ZQ1PR0_PU_DRV_ADJUST                            0x0

    * DRAM Impedance Divide Ratio
    *  PSU_DDR_PHY_ZQ1PR0_ZPROG_DRAM_ODT                           0x7

    * HOST Impedance Divide Ratio
    *  PSU_DDR_PHY_ZQ1PR0_ZPROG_HOST_ODT                           0xb

    * Impedance Divide Ratio (pulldown drive calibration during asymmetric dri
    * ve strength calibration)
    *  PSU_DDR_PHY_ZQ1PR0_ZPROG_ASYM_DRV_PD                        0xd

    * Impedance Divide Ratio (pullup drive calibration during asymmetric drive
    *  strength calibration)
    *  PSU_DDR_PHY_ZQ1PR0_ZPROG_ASYM_DRV_PU                        0xb

    * ZQ n Impedance Control Program Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0806A4, 0xFFFFFFFFU ,0x00087BDBU)
    */
	PSU_Mask_Write(DDR_PHY_ZQ1PR0_OFFSET, 0xFFFFFFFFU, 0x00087BDBU);
/*##################################################################### */

    /*
    * Register : DX0GCR0 @ 0XFD080700

    * Calibration Bypass
    *  PSU_DDR_PHY_DX0GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX0GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX0GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX0GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX0GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX0GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX0GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX0GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX0GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX0GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX0GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX0GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX0GCR0_DQSGPDR                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX0GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX0GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX0GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX0GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080700, 0xFFFFFFFFU ,0x40800604U)
    */
	PSU_Mask_Write(DDR_PHY_DX0GCR0_OFFSET, 0xFFFFFFFFU, 0x40800604U);
/*##################################################################### */

    /*
    * Register : DX0GCR4 @ 0XFD080710

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX0GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX0GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX0GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX0GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX0GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX0GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX0GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX0GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX0GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX0GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080710, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX0GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX0GCR5 @ 0XFD080714

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX0GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX0GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX0GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX0GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080714, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX0GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX0GCR6 @ 0XFD080718

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX0GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX0GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX0GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX0GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX0GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080718, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX0GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX1GCR0 @ 0XFD080800

    * Calibration Bypass
    *  PSU_DDR_PHY_DX1GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX1GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX1GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX1GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX1GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX1GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX1GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX1GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX1GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX1GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX1GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX1GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX1GCR0_DQSGPDR                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX1GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX1GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX1GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX1GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080800, 0xFFFFFFFFU ,0x40800604U)
    */
	PSU_Mask_Write(DDR_PHY_DX1GCR0_OFFSET, 0xFFFFFFFFU, 0x40800604U);
/*##################################################################### */

    /*
    * Register : DX1GCR4 @ 0XFD080810

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX1GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX1GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX1GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX1GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX1GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX1GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX1GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX1GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX1GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX1GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080810, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX1GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX1GCR5 @ 0XFD080814

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX1GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX1GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX1GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX1GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080814, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX1GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX1GCR6 @ 0XFD080818

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX1GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX1GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX1GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX1GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX1GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080818, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX1GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX2GCR0 @ 0XFD080900

    * Calibration Bypass
    *  PSU_DDR_PHY_DX2GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX2GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX2GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX2GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX2GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX2GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX2GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX2GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX2GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX2GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX2GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX2GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX2GCR0_DQSGPDR                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX2GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX2GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX2GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX2GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080900, 0xFFFFFFFFU ,0x40800604U)
    */
	PSU_Mask_Write(DDR_PHY_DX2GCR0_OFFSET, 0xFFFFFFFFU, 0x40800604U);
/*##################################################################### */

    /*
    * Register : DX2GCR1 @ 0XFD080904

    * Enables the PDR mode for DQ[7:0]
    *  PSU_DDR_PHY_DX2GCR1_DXPDRMODE                               0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_DX2GCR1_RESERVED_15                             0x0

    * Select the delayed or non-delayed read data strobe #
    *  PSU_DDR_PHY_DX2GCR1_QSNSEL                                  0x1

    * Select the delayed or non-delayed read data strobe
    *  PSU_DDR_PHY_DX2GCR1_QSSEL                                   0x1

    * Enables Read Data Strobe in a byte lane
    *  PSU_DDR_PHY_DX2GCR1_OEEN                                    0x1

    * Enables PDR in a byte lane
    *  PSU_DDR_PHY_DX2GCR1_PDREN                                   0x1

    * Enables ODT/TE in a byte lane
    *  PSU_DDR_PHY_DX2GCR1_TEEN                                    0x1

    * Enables Write Data strobe in a byte lane
    *  PSU_DDR_PHY_DX2GCR1_DSEN                                    0x1

    * Enables DM pin in a byte lane
    *  PSU_DDR_PHY_DX2GCR1_DMEN                                    0x1

    * Enables DQ corresponding to each bit in a byte
    *  PSU_DDR_PHY_DX2GCR1_DQEN                                    0xff

    * DATX8 n General Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080904, 0xFFFFFFFFU ,0x00007FFFU)
    */
	PSU_Mask_Write(DDR_PHY_DX2GCR1_OFFSET, 0xFFFFFFFFU, 0x00007FFFU);
/*##################################################################### */

    /*
    * Register : DX2GCR4 @ 0XFD080910

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX2GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX2GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX2GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX2GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX2GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX2GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX2GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX2GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX2GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX2GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080910, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX2GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX2GCR5 @ 0XFD080914

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX2GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX2GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX2GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX2GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080914, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX2GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX2GCR6 @ 0XFD080918

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX2GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX2GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX2GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX2GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX2GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080918, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX2GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX3GCR0 @ 0XFD080A00

    * Calibration Bypass
    *  PSU_DDR_PHY_DX3GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX3GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX3GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX3GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX3GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX3GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX3GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX3GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX3GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX3GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX3GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX3GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX3GCR0_DQSGPDR                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX3GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX3GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX3GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX3GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080A00, 0xFFFFFFFFU ,0x40800604U)
    */
	PSU_Mask_Write(DDR_PHY_DX3GCR0_OFFSET, 0xFFFFFFFFU, 0x40800604U);
/*##################################################################### */

    /*
    * Register : DX3GCR1 @ 0XFD080A04

    * Enables the PDR mode for DQ[7:0]
    *  PSU_DDR_PHY_DX3GCR1_DXPDRMODE                               0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_DX3GCR1_RESERVED_15                             0x0

    * Select the delayed or non-delayed read data strobe #
    *  PSU_DDR_PHY_DX3GCR1_QSNSEL                                  0x1

    * Select the delayed or non-delayed read data strobe
    *  PSU_DDR_PHY_DX3GCR1_QSSEL                                   0x1

    * Enables Read Data Strobe in a byte lane
    *  PSU_DDR_PHY_DX3GCR1_OEEN                                    0x1

    * Enables PDR in a byte lane
    *  PSU_DDR_PHY_DX3GCR1_PDREN                                   0x1

    * Enables ODT/TE in a byte lane
    *  PSU_DDR_PHY_DX3GCR1_TEEN                                    0x1

    * Enables Write Data strobe in a byte lane
    *  PSU_DDR_PHY_DX3GCR1_DSEN                                    0x1

    * Enables DM pin in a byte lane
    *  PSU_DDR_PHY_DX3GCR1_DMEN                                    0x1

    * Enables DQ corresponding to each bit in a byte
    *  PSU_DDR_PHY_DX3GCR1_DQEN                                    0xff

    * DATX8 n General Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080A04, 0xFFFFFFFFU ,0x00007FFFU)
    */
	PSU_Mask_Write(DDR_PHY_DX3GCR1_OFFSET, 0xFFFFFFFFU, 0x00007FFFU);
/*##################################################################### */

    /*
    * Register : DX3GCR4 @ 0XFD080A10

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX3GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX3GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX3GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX3GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX3GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX3GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX3GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX3GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX3GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX3GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080A10, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX3GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX3GCR5 @ 0XFD080A14

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX3GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX3GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX3GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX3GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080A14, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX3GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX3GCR6 @ 0XFD080A18

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX3GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX3GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX3GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX3GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX3GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080A18, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX3GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX4GCR0 @ 0XFD080B00

    * Calibration Bypass
    *  PSU_DDR_PHY_DX4GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX4GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX4GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX4GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX4GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX4GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX4GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX4GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX4GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX4GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX4GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX4GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX4GCR0_DQSGPDR                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX4GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX4GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX4GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX4GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080B00, 0xFFFFFFFFU ,0x40800604U)
    */
	PSU_Mask_Write(DDR_PHY_DX4GCR0_OFFSET, 0xFFFFFFFFU, 0x40800604U);
/*##################################################################### */

    /*
    * Register : DX4GCR1 @ 0XFD080B04

    * Enables the PDR mode for DQ[7:0]
    *  PSU_DDR_PHY_DX4GCR1_DXPDRMODE                               0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_DX4GCR1_RESERVED_15                             0x0

    * Select the delayed or non-delayed read data strobe #
    *  PSU_DDR_PHY_DX4GCR1_QSNSEL                                  0x1

    * Select the delayed or non-delayed read data strobe
    *  PSU_DDR_PHY_DX4GCR1_QSSEL                                   0x1

    * Enables Read Data Strobe in a byte lane
    *  PSU_DDR_PHY_DX4GCR1_OEEN                                    0x1

    * Enables PDR in a byte lane
    *  PSU_DDR_PHY_DX4GCR1_PDREN                                   0x1

    * Enables ODT/TE in a byte lane
    *  PSU_DDR_PHY_DX4GCR1_TEEN                                    0x1

    * Enables Write Data strobe in a byte lane
    *  PSU_DDR_PHY_DX4GCR1_DSEN                                    0x1

    * Enables DM pin in a byte lane
    *  PSU_DDR_PHY_DX4GCR1_DMEN                                    0x1

    * Enables DQ corresponding to each bit in a byte
    *  PSU_DDR_PHY_DX4GCR1_DQEN                                    0xff

    * DATX8 n General Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080B04, 0xFFFFFFFFU ,0x00007FFFU)
    */
	PSU_Mask_Write(DDR_PHY_DX4GCR1_OFFSET, 0xFFFFFFFFU, 0x00007FFFU);
/*##################################################################### */

    /*
    * Register : DX4GCR4 @ 0XFD080B10

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX4GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX4GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX4GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX4GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX4GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX4GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX4GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX4GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX4GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX4GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080B10, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX4GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX4GCR5 @ 0XFD080B14

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX4GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX4GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX4GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX4GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080B14, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX4GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX4GCR6 @ 0XFD080B18

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX4GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX4GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX4GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX4GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX4GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080B18, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX4GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX5GCR0 @ 0XFD080C00

    * Calibration Bypass
    *  PSU_DDR_PHY_DX5GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX5GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX5GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX5GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX5GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX5GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX5GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX5GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX5GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX5GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX5GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX5GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX5GCR0_DQSGPDR                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX5GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX5GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX5GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX5GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080C00, 0xFFFFFFFFU ,0x40800604U)
    */
	PSU_Mask_Write(DDR_PHY_DX5GCR0_OFFSET, 0xFFFFFFFFU, 0x40800604U);
/*##################################################################### */

    /*
    * Register : DX5GCR1 @ 0XFD080C04

    * Enables the PDR mode for DQ[7:0]
    *  PSU_DDR_PHY_DX5GCR1_DXPDRMODE                               0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_DX5GCR1_RESERVED_15                             0x0

    * Select the delayed or non-delayed read data strobe #
    *  PSU_DDR_PHY_DX5GCR1_QSNSEL                                  0x1

    * Select the delayed or non-delayed read data strobe
    *  PSU_DDR_PHY_DX5GCR1_QSSEL                                   0x1

    * Enables Read Data Strobe in a byte lane
    *  PSU_DDR_PHY_DX5GCR1_OEEN                                    0x1

    * Enables PDR in a byte lane
    *  PSU_DDR_PHY_DX5GCR1_PDREN                                   0x1

    * Enables ODT/TE in a byte lane
    *  PSU_DDR_PHY_DX5GCR1_TEEN                                    0x1

    * Enables Write Data strobe in a byte lane
    *  PSU_DDR_PHY_DX5GCR1_DSEN                                    0x1

    * Enables DM pin in a byte lane
    *  PSU_DDR_PHY_DX5GCR1_DMEN                                    0x1

    * Enables DQ corresponding to each bit in a byte
    *  PSU_DDR_PHY_DX5GCR1_DQEN                                    0xff

    * DATX8 n General Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080C04, 0xFFFFFFFFU ,0x00007FFFU)
    */
	PSU_Mask_Write(DDR_PHY_DX5GCR1_OFFSET, 0xFFFFFFFFU, 0x00007FFFU);
/*##################################################################### */

    /*
    * Register : DX5GCR4 @ 0XFD080C10

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX5GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX5GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX5GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX5GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX5GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX5GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX5GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX5GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX5GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX5GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080C10, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX5GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX5GCR5 @ 0XFD080C14

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX5GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX5GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX5GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX5GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080C14, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX5GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX5GCR6 @ 0XFD080C18

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX5GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX5GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX5GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX5GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX5GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080C18, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX5GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX6GCR0 @ 0XFD080D00

    * Calibration Bypass
    *  PSU_DDR_PHY_DX6GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX6GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX6GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX6GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX6GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX6GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX6GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX6GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX6GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX6GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX6GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX6GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX6GCR0_DQSGPDR                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX6GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX6GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX6GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX6GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080D00, 0xFFFFFFFFU ,0x40800604U)
    */
	PSU_Mask_Write(DDR_PHY_DX6GCR0_OFFSET, 0xFFFFFFFFU, 0x40800604U);
/*##################################################################### */

    /*
    * Register : DX6GCR1 @ 0XFD080D04

    * Enables the PDR mode for DQ[7:0]
    *  PSU_DDR_PHY_DX6GCR1_DXPDRMODE                               0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_DX6GCR1_RESERVED_15                             0x0

    * Select the delayed or non-delayed read data strobe #
    *  PSU_DDR_PHY_DX6GCR1_QSNSEL                                  0x1

    * Select the delayed or non-delayed read data strobe
    *  PSU_DDR_PHY_DX6GCR1_QSSEL                                   0x1

    * Enables Read Data Strobe in a byte lane
    *  PSU_DDR_PHY_DX6GCR1_OEEN                                    0x1

    * Enables PDR in a byte lane
    *  PSU_DDR_PHY_DX6GCR1_PDREN                                   0x1

    * Enables ODT/TE in a byte lane
    *  PSU_DDR_PHY_DX6GCR1_TEEN                                    0x1

    * Enables Write Data strobe in a byte lane
    *  PSU_DDR_PHY_DX6GCR1_DSEN                                    0x1

    * Enables DM pin in a byte lane
    *  PSU_DDR_PHY_DX6GCR1_DMEN                                    0x1

    * Enables DQ corresponding to each bit in a byte
    *  PSU_DDR_PHY_DX6GCR1_DQEN                                    0xff

    * DATX8 n General Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080D04, 0xFFFFFFFFU ,0x00007FFFU)
    */
	PSU_Mask_Write(DDR_PHY_DX6GCR1_OFFSET, 0xFFFFFFFFU, 0x00007FFFU);
/*##################################################################### */

    /*
    * Register : DX6GCR4 @ 0XFD080D10

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX6GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX6GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX6GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX6GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX6GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX6GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX6GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX6GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX6GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX6GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080D10, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX6GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX6GCR5 @ 0XFD080D14

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX6GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX6GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX6GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX6GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080D14, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX6GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX6GCR6 @ 0XFD080D18

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX6GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX6GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX6GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX6GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX6GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080D18, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX6GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX7GCR0 @ 0XFD080E00

    * Calibration Bypass
    *  PSU_DDR_PHY_DX7GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX7GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX7GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX7GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX7GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX7GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX7GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX7GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX7GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX7GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX7GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX7GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX7GCR0_DQSGPDR                                 0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX7GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX7GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX7GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX7GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080E00, 0xFFFFFFFFU ,0x40800604U)
    */
	PSU_Mask_Write(DDR_PHY_DX7GCR0_OFFSET, 0xFFFFFFFFU, 0x40800604U);
/*##################################################################### */

    /*
    * Register : DX7GCR1 @ 0XFD080E04

    * Enables the PDR mode for DQ[7:0]
    *  PSU_DDR_PHY_DX7GCR1_DXPDRMODE                               0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_DX7GCR1_RESERVED_15                             0x0

    * Select the delayed or non-delayed read data strobe #
    *  PSU_DDR_PHY_DX7GCR1_QSNSEL                                  0x1

    * Select the delayed or non-delayed read data strobe
    *  PSU_DDR_PHY_DX7GCR1_QSSEL                                   0x1

    * Enables Read Data Strobe in a byte lane
    *  PSU_DDR_PHY_DX7GCR1_OEEN                                    0x1

    * Enables PDR in a byte lane
    *  PSU_DDR_PHY_DX7GCR1_PDREN                                   0x1

    * Enables ODT/TE in a byte lane
    *  PSU_DDR_PHY_DX7GCR1_TEEN                                    0x1

    * Enables Write Data strobe in a byte lane
    *  PSU_DDR_PHY_DX7GCR1_DSEN                                    0x1

    * Enables DM pin in a byte lane
    *  PSU_DDR_PHY_DX7GCR1_DMEN                                    0x1

    * Enables DQ corresponding to each bit in a byte
    *  PSU_DDR_PHY_DX7GCR1_DQEN                                    0xff

    * DATX8 n General Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080E04, 0xFFFFFFFFU ,0x00007FFFU)
    */
	PSU_Mask_Write(DDR_PHY_DX7GCR1_OFFSET, 0xFFFFFFFFU, 0x00007FFFU);
/*##################################################################### */

    /*
    * Register : DX7GCR4 @ 0XFD080E10

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX7GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX7GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX7GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX7GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX7GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX7GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX7GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX7GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX7GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX7GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080E10, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX7GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX7GCR5 @ 0XFD080E14

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX7GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX7GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX7GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX7GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080E14, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX7GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX7GCR6 @ 0XFD080E18

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX7GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX7GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX7GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX7GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX7GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080E18, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX7GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX8GCR0 @ 0XFD080F00

    * Calibration Bypass
    *  PSU_DDR_PHY_DX8GCR0_CALBYP                                  0x0

    * Master Delay Line Enable
    *  PSU_DDR_PHY_DX8GCR0_MDLEN                                   0x1

    * Configurable ODT(TE) Phase Shift
    *  PSU_DDR_PHY_DX8GCR0_CODTSHFT                                0x0

    * DQS Duty Cycle Correction
    *  PSU_DDR_PHY_DX8GCR0_DQSDCC                                  0x0

    * Number of Cycles ( in terms of ctl_clk) to generate ctl_dx_get_static_rd
    *  input for the respective bypte lane of the PHY
    *  PSU_DDR_PHY_DX8GCR0_RDDLY                                   0x8

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8GCR0_RESERVED_19_14                          0x0

    * DQSNSE Power Down Receiver
    *  PSU_DDR_PHY_DX8GCR0_DQSNSEPDR                               0x0

    * DQSSE Power Down Receiver
    *  PSU_DDR_PHY_DX8GCR0_DQSSEPDR                                0x0

    * RTT On Additive Latency
    *  PSU_DDR_PHY_DX8GCR0_RTTOAL                                  0x0

    * RTT Output Hold
    *  PSU_DDR_PHY_DX8GCR0_RTTOH                                   0x3

    * Configurable PDR Phase Shift
    *  PSU_DDR_PHY_DX8GCR0_CPDRSHFT                                0x0

    * DQSR Power Down
    *  PSU_DDR_PHY_DX8GCR0_DQSRPD                                  0x0

    * DQSG Power Down Receiver
    *  PSU_DDR_PHY_DX8GCR0_DQSGPDR                                 0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8GCR0_RESERVED_4                              0x0

    * DQSG On-Die Termination
    *  PSU_DDR_PHY_DX8GCR0_DQSGODT                                 0x0

    * DQSG Output Enable
    *  PSU_DDR_PHY_DX8GCR0_DQSGOE                                  0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8GCR0_RESERVED_1_0                            0x0

    * DATX8 n General Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD080F00, 0xFFFFFFFFU ,0x40800624U)
    */
	PSU_Mask_Write(DDR_PHY_DX8GCR0_OFFSET, 0xFFFFFFFFU, 0x40800624U);
/*##################################################################### */

    /*
    * Register : DX8GCR1 @ 0XFD080F04

    * Enables the PDR mode for DQ[7:0]
    *  PSU_DDR_PHY_DX8GCR1_DXPDRMODE                               0x0

    * Reserved. Returns zeroes on reads.
    *  PSU_DDR_PHY_DX8GCR1_RESERVED_15                             0x0

    * Select the delayed or non-delayed read data strobe #
    *  PSU_DDR_PHY_DX8GCR1_QSNSEL                                  0x1

    * Select the delayed or non-delayed read data strobe
    *  PSU_DDR_PHY_DX8GCR1_QSSEL                                   0x1

    * Enables Read Data Strobe in a byte lane
    *  PSU_DDR_PHY_DX8GCR1_OEEN                                    0x1

    * Enables PDR in a byte lane
    *  PSU_DDR_PHY_DX8GCR1_PDREN                                   0x1

    * Enables ODT/TE in a byte lane
    *  PSU_DDR_PHY_DX8GCR1_TEEN                                    0x1

    * Enables Write Data strobe in a byte lane
    *  PSU_DDR_PHY_DX8GCR1_DSEN                                    0x1

    * Enables DM pin in a byte lane
    *  PSU_DDR_PHY_DX8GCR1_DMEN                                    0x1

    * Enables DQ corresponding to each bit in a byte
    *  PSU_DDR_PHY_DX8GCR1_DQEN                                    0x0

    * DATX8 n General Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD080F04, 0xFFFFFFFFU ,0x00007F00U)
    */
	PSU_Mask_Write(DDR_PHY_DX8GCR1_OFFSET, 0xFFFFFFFFU, 0x00007F00U);
/*##################################################################### */

    /*
    * Register : DX8GCR4 @ 0XFD080F10

    * Byte lane VREF IOM (Used only by D4MU IOs)
    *  PSU_DDR_PHY_DX8GCR4_RESERVED_31_29                          0x0

    * Byte Lane VREF Pad Enable
    *  PSU_DDR_PHY_DX8GCR4_DXREFPEN                                0x0

    * Byte Lane Internal VREF Enable
    *  PSU_DDR_PHY_DX8GCR4_DXREFEEN                                0x3

    * Byte Lane Single-End VREF Enable
    *  PSU_DDR_PHY_DX8GCR4_DXREFSEN                                0x1

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR4_RESERVED_24                             0x0

    * External VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX8GCR4_DXREFESELRANGE                          0x0

    * Byte Lane External VREF Select
    *  PSU_DDR_PHY_DX8GCR4_DXREFESEL                               0x0

    * Single ended VREF generator REFSEL range select
    *  PSU_DDR_PHY_DX8GCR4_DXREFSSELRANGE                          0x1

    * Byte Lane Single-End VREF Select
    *  PSU_DDR_PHY_DX8GCR4_DXREFSSEL                               0x30

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR4_RESERVED_7_6                            0x0

    * VREF Enable control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX8GCR4_DXREFIEN                                0xf

    * VRMON control for DQ IO (Single Ended) buffers of a byte lane.
    *  PSU_DDR_PHY_DX8GCR4_DXREFIMON                               0x0

    * DATX8 n General Configuration Register 4
    * (OFFSET, MASK, VALUE)      (0XFD080F10, 0xFFFFFFFFU ,0x0E00B03CU)
    */
	PSU_Mask_Write(DDR_PHY_DX8GCR4_OFFSET, 0xFFFFFFFFU, 0x0E00B03CU);
/*##################################################################### */

    /*
    * Register : DX8GCR5 @ 0XFD080F14

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR5_RESERVED_31                             0x0

    * Byte Lane internal VREF Select for Rank 3
    *  PSU_DDR_PHY_DX8GCR5_DXREFISELR3                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR5_RESERVED_23                             0x0

    * Byte Lane internal VREF Select for Rank 2
    *  PSU_DDR_PHY_DX8GCR5_DXREFISELR2                             0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR5_RESERVED_15                             0x0

    * Byte Lane internal VREF Select for Rank 1
    *  PSU_DDR_PHY_DX8GCR5_DXREFISELR1                             0x55

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR5_RESERVED_7                              0x0

    * Byte Lane internal VREF Select for Rank 0
    *  PSU_DDR_PHY_DX8GCR5_DXREFISELR0                             0x55

    * DATX8 n General Configuration Register 5
    * (OFFSET, MASK, VALUE)      (0XFD080F14, 0xFFFFFFFFU ,0x09095555U)
    */
	PSU_Mask_Write(DDR_PHY_DX8GCR5_OFFSET, 0xFFFFFFFFU, 0x09095555U);
/*##################################################################### */

    /*
    * Register : DX8GCR6 @ 0XFD080F18

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR6_RESERVED_31_30                          0x0

    * DRAM DQ VREF Select for Rank3
    *  PSU_DDR_PHY_DX8GCR6_DXDQVREFR3                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR6_RESERVED_23_22                          0x0

    * DRAM DQ VREF Select for Rank2
    *  PSU_DDR_PHY_DX8GCR6_DXDQVREFR2                              0x9

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR6_RESERVED_15_14                          0x0

    * DRAM DQ VREF Select for Rank1
    *  PSU_DDR_PHY_DX8GCR6_DXDQVREFR1                              0x2b

    * Reserved. Returns zeros on reads.
    *  PSU_DDR_PHY_DX8GCR6_RESERVED_7_6                            0x0

    * DRAM DQ VREF Select for Rank0
    *  PSU_DDR_PHY_DX8GCR6_DXDQVREFR0                              0x2b

    * DATX8 n General Configuration Register 6
    * (OFFSET, MASK, VALUE)      (0XFD080F18, 0xFFFFFFFFU ,0x09092B2BU)
    */
	PSU_Mask_Write(DDR_PHY_DX8GCR6_OFFSET, 0xFFFFFFFFU, 0x09092B2BU);
/*##################################################################### */

    /*
    * Register : DX8SL0OSC @ 0XFD081400

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0OSC_RESERVED_31_30                        0x0

    * Enable Clock Gating for DX ddr_clk
    *  PSU_DDR_PHY_DX8SL0OSC_GATEDXRDCLK                           0x2

    * Enable Clock Gating for DX ctl_rd_clk
    *  PSU_DDR_PHY_DX8SL0OSC_GATEDXDDRCLK                          0x2

    * Enable Clock Gating for DX ctl_clk
    *  PSU_DDR_PHY_DX8SL0OSC_GATEDXCTLCLK                          0x2

    * Selects the level to which clocks will be stalled when clock gating is e
    * nabled.
    *  PSU_DDR_PHY_DX8SL0OSC_CLKLEVEL                              0x0

    * Loopback Mode
    *  PSU_DDR_PHY_DX8SL0OSC_LBMODE                                0x0

    * Load GSDQS LCDL with 2x the calibrated GSDQSPRD value
    *  PSU_DDR_PHY_DX8SL0OSC_LBGSDQS                               0x0

    * Loopback DQS Gating
    *  PSU_DDR_PHY_DX8SL0OSC_LBGDQS                                0x0

    * Loopback DQS Shift
    *  PSU_DDR_PHY_DX8SL0OSC_LBDQSS                                0x0

    * PHY High-Speed Reset
    *  PSU_DDR_PHY_DX8SL0OSC_PHYHRST                               0x1

    * PHY FIFO Reset
    *  PSU_DDR_PHY_DX8SL0OSC_PHYFRST                               0x1

    * Delay Line Test Start
    *  PSU_DDR_PHY_DX8SL0OSC_DLTST                                 0x0

    * Delay Line Test Mode
    *  PSU_DDR_PHY_DX8SL0OSC_DLTMODE                               0x0

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL0OSC_RESERVED_12_11                        0x3

    * Oscillator Mode Write-Data Delay Line Select
    *  PSU_DDR_PHY_DX8SL0OSC_OSCWDDL                               0x3

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL0OSC_RESERVED_8_7                          0x3

    * Oscillator Mode Write-Leveling Delay Line Select
    *  PSU_DDR_PHY_DX8SL0OSC_OSCWDL                                0x3

    * Oscillator Mode Division
    *  PSU_DDR_PHY_DX8SL0OSC_OSCDIV                                0xf

    * Oscillator Enable
    *  PSU_DDR_PHY_DX8SL0OSC_OSCEN                                 0x0

    * DATX8 0-1 Oscillator, Delay Line Test, PHY FIFO and High Speed Reset, Lo
    * opback, and Gated Clock Control Register
    * (OFFSET, MASK, VALUE)      (0XFD081400, 0xFFFFFFFFU ,0x2A019FFEU)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL0OSC_OFFSET, 0xFFFFFFFFU, 0x2A019FFEU);
/*##################################################################### */

    /*
    * Register : DX8SL0PLLCR0 @ 0XFD081404

    * PLL Bypass
    *  PSU_DDR_PHY_DX8SL0PLLCR0_PLLBYP                             0x0

    * PLL Reset
    *  PSU_DDR_PHY_DX8SL0PLLCR0_PLLRST                             0x0

    * PLL Power Down
    *  PSU_DDR_PHY_DX8SL0PLLCR0_PLLPD                              0x0

    * Reference Stop Mode
    *  PSU_DDR_PHY_DX8SL0PLLCR0_RSTOPM                             0x0

    * PLL Frequency Select
    *  PSU_DDR_PHY_DX8SL0PLLCR0_FRQSEL                             0x1

    * Relock Mode
    *  PSU_DDR_PHY_DX8SL0PLLCR0_RLOCKM                             0x0

    * Charge Pump Proportional Current Control
    *  PSU_DDR_PHY_DX8SL0PLLCR0_CPPC                               0x8

    * Charge Pump Integrating Current Control
    *  PSU_DDR_PHY_DX8SL0PLLCR0_CPIC                               0x0

    * Gear Shift
    *  PSU_DDR_PHY_DX8SL0PLLCR0_GSHIFT                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0PLLCR0_RESERVED_11_9                      0x0

    * Analog Test Enable (ATOEN)
    *  PSU_DDR_PHY_DX8SL0PLLCR0_ATOEN                              0x0

    * Analog Test Control
    *  PSU_DDR_PHY_DX8SL0PLLCR0_ATC                                0x0

    * Digital Test Control
    *  PSU_DDR_PHY_DX8SL0PLLCR0_DTC                                0x0

    * DAXT8 0-1 PLL Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD081404, 0xFFFFFFFFU ,0x01100000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL0PLLCR0_OFFSET,
		0xFFFFFFFFU, 0x01100000U);
/*##################################################################### */

    /*
    * Register : DX8SL0DQSCTL @ 0XFD08141C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0DQSCTL_RESERVED_31_25                     0x0

    * Read Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL0DQSCTL_RRRMODE                            0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0DQSCTL_RESERVED_23_22                     0x0

    * Write Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL0DQSCTL_WRRMODE                            0x1

    * DQS Gate Extension
    *  PSU_DDR_PHY_DX8SL0DQSCTL_DQSGX                              0x0

    * Low Power PLL Power Down
    *  PSU_DDR_PHY_DX8SL0DQSCTL_LPPLLPD                            0x1

    * Low Power I/O Power Down
    *  PSU_DDR_PHY_DX8SL0DQSCTL_LPIOPD                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0DQSCTL_RESERVED_16_15                     0x0

    * QS Counter Enable
    *  PSU_DDR_PHY_DX8SL0DQSCTL_QSCNTEN                            0x1

    * Unused DQ I/O Mode
    *  PSU_DDR_PHY_DX8SL0DQSCTL_UDQIOM                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0DQSCTL_RESERVED_12_10                     0x0

    * Data Slew Rate
    *  PSU_DDR_PHY_DX8SL0DQSCTL_DXSR                               0x3

    * DQS_N Resistor
    *  PSU_DDR_PHY_DX8SL0DQSCTL_DQSNRES                            0x0

    * DQS Resistor
    *  PSU_DDR_PHY_DX8SL0DQSCTL_DQSRES                             0x0

    * DATX8 0-1 DQS Control Register
    * (OFFSET, MASK, VALUE)      (0XFD08141C, 0xFFFFFFFFU ,0x01264300U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL0DQSCTL_OFFSET,
		0xFFFFFFFFU, 0x01264300U);
/*##################################################################### */

    /*
    * Register : DX8SL0DXCTL2 @ 0XFD08142C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0DXCTL2_RESERVED_31_24                     0x0

    * Configurable Read Data Enable
    *  PSU_DDR_PHY_DX8SL0DXCTL2_CRDEN                              0x0

    * OX Extension during Post-amble
    *  PSU_DDR_PHY_DX8SL0DXCTL2_POSOEX                             0x0

    * OE Extension during Pre-amble
    *  PSU_DDR_PHY_DX8SL0DXCTL2_PREOEX                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0DXCTL2_RESERVED_17                        0x0

    * I/O Assisted Gate Select
    *  PSU_DDR_PHY_DX8SL0DXCTL2_IOAG                               0x0

    * I/O Loopback Select
    *  PSU_DDR_PHY_DX8SL0DXCTL2_IOLB                               0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0DXCTL2_RESERVED_14_13                     0x0

    * Low Power Wakeup Threshold
    *  PSU_DDR_PHY_DX8SL0DXCTL2_LPWAKEUP_THRSH                     0xc

    * Read Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL0DXCTL2_RDBI                               0x0

    * Write Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL0DXCTL2_WDBI                               0x0

    * PUB Read FIFO Bypass
    *  PSU_DDR_PHY_DX8SL0DXCTL2_PRFBYP                             0x0

    * DATX8 Receive FIFO Read Mode
    *  PSU_DDR_PHY_DX8SL0DXCTL2_RDMODE                             0x0

    * Disables the Read FIFO Reset
    *  PSU_DDR_PHY_DX8SL0DXCTL2_DISRST                             0x0

    * Read DQS Gate I/O Loopback
    *  PSU_DDR_PHY_DX8SL0DXCTL2_DQSGLB                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0DXCTL2_RESERVED_0                         0x0

    * DATX8 0-1 DX Control Register 2
    * (OFFSET, MASK, VALUE)      (0XFD08142C, 0xFFFFFFFFU ,0x00041800U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL0DXCTL2_OFFSET,
		0xFFFFFFFFU, 0x00041800U);
/*##################################################################### */

    /*
    * Register : DX8SL0IOCR @ 0XFD081430

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL0IOCR_RESERVED_31                          0x0

    * PVREF_DAC REFSEL range select
    *  PSU_DDR_PHY_DX8SL0IOCR_DXDACRANGE                           0x7

    * IOM bits for PVREF, PVREF_DAC and PVREFE cells in DX IO ring
    *  PSU_DDR_PHY_DX8SL0IOCR_DXVREFIOM                            0x0

    * DX IO Mode
    *  PSU_DDR_PHY_DX8SL0IOCR_DXIOM                                0x2

    * DX IO Transmitter Mode
    *  PSU_DDR_PHY_DX8SL0IOCR_DXTXM                                0x0

    * DX IO Receiver Mode
    *  PSU_DDR_PHY_DX8SL0IOCR_DXRXM                                0x0

    * DATX8 0-1 I/O Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD081430, 0xFFFFFFFFU ,0x70800000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL0IOCR_OFFSET, 0xFFFFFFFFU, 0x70800000U);
/*##################################################################### */

    /*
    * Register : DX8SL1OSC @ 0XFD081440

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1OSC_RESERVED_31_30                        0x0

    * Enable Clock Gating for DX ddr_clk
    *  PSU_DDR_PHY_DX8SL1OSC_GATEDXRDCLK                           0x2

    * Enable Clock Gating for DX ctl_rd_clk
    *  PSU_DDR_PHY_DX8SL1OSC_GATEDXDDRCLK                          0x2

    * Enable Clock Gating for DX ctl_clk
    *  PSU_DDR_PHY_DX8SL1OSC_GATEDXCTLCLK                          0x2

    * Selects the level to which clocks will be stalled when clock gating is e
    * nabled.
    *  PSU_DDR_PHY_DX8SL1OSC_CLKLEVEL                              0x0

    * Loopback Mode
    *  PSU_DDR_PHY_DX8SL1OSC_LBMODE                                0x0

    * Load GSDQS LCDL with 2x the calibrated GSDQSPRD value
    *  PSU_DDR_PHY_DX8SL1OSC_LBGSDQS                               0x0

    * Loopback DQS Gating
    *  PSU_DDR_PHY_DX8SL1OSC_LBGDQS                                0x0

    * Loopback DQS Shift
    *  PSU_DDR_PHY_DX8SL1OSC_LBDQSS                                0x0

    * PHY High-Speed Reset
    *  PSU_DDR_PHY_DX8SL1OSC_PHYHRST                               0x1

    * PHY FIFO Reset
    *  PSU_DDR_PHY_DX8SL1OSC_PHYFRST                               0x1

    * Delay Line Test Start
    *  PSU_DDR_PHY_DX8SL1OSC_DLTST                                 0x0

    * Delay Line Test Mode
    *  PSU_DDR_PHY_DX8SL1OSC_DLTMODE                               0x0

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL1OSC_RESERVED_12_11                        0x3

    * Oscillator Mode Write-Data Delay Line Select
    *  PSU_DDR_PHY_DX8SL1OSC_OSCWDDL                               0x3

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL1OSC_RESERVED_8_7                          0x3

    * Oscillator Mode Write-Leveling Delay Line Select
    *  PSU_DDR_PHY_DX8SL1OSC_OSCWDL                                0x3

    * Oscillator Mode Division
    *  PSU_DDR_PHY_DX8SL1OSC_OSCDIV                                0xf

    * Oscillator Enable
    *  PSU_DDR_PHY_DX8SL1OSC_OSCEN                                 0x0

    * DATX8 0-1 Oscillator, Delay Line Test, PHY FIFO and High Speed Reset, Lo
    * opback, and Gated Clock Control Register
    * (OFFSET, MASK, VALUE)      (0XFD081440, 0xFFFFFFFFU ,0x2A019FFEU)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL1OSC_OFFSET, 0xFFFFFFFFU, 0x2A019FFEU);
/*##################################################################### */

    /*
    * Register : DX8SL1PLLCR0 @ 0XFD081444

    * PLL Bypass
    *  PSU_DDR_PHY_DX8SL1PLLCR0_PLLBYP                             0x0

    * PLL Reset
    *  PSU_DDR_PHY_DX8SL1PLLCR0_PLLRST                             0x0

    * PLL Power Down
    *  PSU_DDR_PHY_DX8SL1PLLCR0_PLLPD                              0x0

    * Reference Stop Mode
    *  PSU_DDR_PHY_DX8SL1PLLCR0_RSTOPM                             0x0

    * PLL Frequency Select
    *  PSU_DDR_PHY_DX8SL1PLLCR0_FRQSEL                             0x1

    * Relock Mode
    *  PSU_DDR_PHY_DX8SL1PLLCR0_RLOCKM                             0x0

    * Charge Pump Proportional Current Control
    *  PSU_DDR_PHY_DX8SL1PLLCR0_CPPC                               0x8

    * Charge Pump Integrating Current Control
    *  PSU_DDR_PHY_DX8SL1PLLCR0_CPIC                               0x0

    * Gear Shift
    *  PSU_DDR_PHY_DX8SL1PLLCR0_GSHIFT                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1PLLCR0_RESERVED_11_9                      0x0

    * Analog Test Enable (ATOEN)
    *  PSU_DDR_PHY_DX8SL1PLLCR0_ATOEN                              0x0

    * Analog Test Control
    *  PSU_DDR_PHY_DX8SL1PLLCR0_ATC                                0x0

    * Digital Test Control
    *  PSU_DDR_PHY_DX8SL1PLLCR0_DTC                                0x0

    * DAXT8 0-1 PLL Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD081444, 0xFFFFFFFFU ,0x01100000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL1PLLCR0_OFFSET,
		0xFFFFFFFFU, 0x01100000U);
/*##################################################################### */

    /*
    * Register : DX8SL1DQSCTL @ 0XFD08145C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1DQSCTL_RESERVED_31_25                     0x0

    * Read Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL1DQSCTL_RRRMODE                            0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1DQSCTL_RESERVED_23_22                     0x0

    * Write Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL1DQSCTL_WRRMODE                            0x1

    * DQS Gate Extension
    *  PSU_DDR_PHY_DX8SL1DQSCTL_DQSGX                              0x0

    * Low Power PLL Power Down
    *  PSU_DDR_PHY_DX8SL1DQSCTL_LPPLLPD                            0x1

    * Low Power I/O Power Down
    *  PSU_DDR_PHY_DX8SL1DQSCTL_LPIOPD                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1DQSCTL_RESERVED_16_15                     0x0

    * QS Counter Enable
    *  PSU_DDR_PHY_DX8SL1DQSCTL_QSCNTEN                            0x1

    * Unused DQ I/O Mode
    *  PSU_DDR_PHY_DX8SL1DQSCTL_UDQIOM                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1DQSCTL_RESERVED_12_10                     0x0

    * Data Slew Rate
    *  PSU_DDR_PHY_DX8SL1DQSCTL_DXSR                               0x3

    * DQS_N Resistor
    *  PSU_DDR_PHY_DX8SL1DQSCTL_DQSNRES                            0x0

    * DQS Resistor
    *  PSU_DDR_PHY_DX8SL1DQSCTL_DQSRES                             0x0

    * DATX8 0-1 DQS Control Register
    * (OFFSET, MASK, VALUE)      (0XFD08145C, 0xFFFFFFFFU ,0x01264300U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL1DQSCTL_OFFSET,
		0xFFFFFFFFU, 0x01264300U);
/*##################################################################### */

    /*
    * Register : DX8SL1DXCTL2 @ 0XFD08146C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1DXCTL2_RESERVED_31_24                     0x0

    * Configurable Read Data Enable
    *  PSU_DDR_PHY_DX8SL1DXCTL2_CRDEN                              0x0

    * OX Extension during Post-amble
    *  PSU_DDR_PHY_DX8SL1DXCTL2_POSOEX                             0x0

    * OE Extension during Pre-amble
    *  PSU_DDR_PHY_DX8SL1DXCTL2_PREOEX                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1DXCTL2_RESERVED_17                        0x0

    * I/O Assisted Gate Select
    *  PSU_DDR_PHY_DX8SL1DXCTL2_IOAG                               0x0

    * I/O Loopback Select
    *  PSU_DDR_PHY_DX8SL1DXCTL2_IOLB                               0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1DXCTL2_RESERVED_14_13                     0x0

    * Low Power Wakeup Threshold
    *  PSU_DDR_PHY_DX8SL1DXCTL2_LPWAKEUP_THRSH                     0xc

    * Read Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL1DXCTL2_RDBI                               0x0

    * Write Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL1DXCTL2_WDBI                               0x0

    * PUB Read FIFO Bypass
    *  PSU_DDR_PHY_DX8SL1DXCTL2_PRFBYP                             0x0

    * DATX8 Receive FIFO Read Mode
    *  PSU_DDR_PHY_DX8SL1DXCTL2_RDMODE                             0x0

    * Disables the Read FIFO Reset
    *  PSU_DDR_PHY_DX8SL1DXCTL2_DISRST                             0x0

    * Read DQS Gate I/O Loopback
    *  PSU_DDR_PHY_DX8SL1DXCTL2_DQSGLB                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1DXCTL2_RESERVED_0                         0x0

    * DATX8 0-1 DX Control Register 2
    * (OFFSET, MASK, VALUE)      (0XFD08146C, 0xFFFFFFFFU ,0x00041800U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL1DXCTL2_OFFSET,
		0xFFFFFFFFU, 0x00041800U);
/*##################################################################### */

    /*
    * Register : DX8SL1IOCR @ 0XFD081470

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL1IOCR_RESERVED_31                          0x0

    * PVREF_DAC REFSEL range select
    *  PSU_DDR_PHY_DX8SL1IOCR_DXDACRANGE                           0x7

    * IOM bits for PVREF, PVREF_DAC and PVREFE cells in DX IO ring
    *  PSU_DDR_PHY_DX8SL1IOCR_DXVREFIOM                            0x0

    * DX IO Mode
    *  PSU_DDR_PHY_DX8SL1IOCR_DXIOM                                0x2

    * DX IO Transmitter Mode
    *  PSU_DDR_PHY_DX8SL1IOCR_DXTXM                                0x0

    * DX IO Receiver Mode
    *  PSU_DDR_PHY_DX8SL1IOCR_DXRXM                                0x0

    * DATX8 0-1 I/O Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD081470, 0xFFFFFFFFU ,0x70800000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL1IOCR_OFFSET, 0xFFFFFFFFU, 0x70800000U);
/*##################################################################### */

    /*
    * Register : DX8SL2OSC @ 0XFD081480

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2OSC_RESERVED_31_30                        0x0

    * Enable Clock Gating for DX ddr_clk
    *  PSU_DDR_PHY_DX8SL2OSC_GATEDXRDCLK                           0x2

    * Enable Clock Gating for DX ctl_rd_clk
    *  PSU_DDR_PHY_DX8SL2OSC_GATEDXDDRCLK                          0x2

    * Enable Clock Gating for DX ctl_clk
    *  PSU_DDR_PHY_DX8SL2OSC_GATEDXCTLCLK                          0x2

    * Selects the level to which clocks will be stalled when clock gating is e
    * nabled.
    *  PSU_DDR_PHY_DX8SL2OSC_CLKLEVEL                              0x0

    * Loopback Mode
    *  PSU_DDR_PHY_DX8SL2OSC_LBMODE                                0x0

    * Load GSDQS LCDL with 2x the calibrated GSDQSPRD value
    *  PSU_DDR_PHY_DX8SL2OSC_LBGSDQS                               0x0

    * Loopback DQS Gating
    *  PSU_DDR_PHY_DX8SL2OSC_LBGDQS                                0x0

    * Loopback DQS Shift
    *  PSU_DDR_PHY_DX8SL2OSC_LBDQSS                                0x0

    * PHY High-Speed Reset
    *  PSU_DDR_PHY_DX8SL2OSC_PHYHRST                               0x1

    * PHY FIFO Reset
    *  PSU_DDR_PHY_DX8SL2OSC_PHYFRST                               0x1

    * Delay Line Test Start
    *  PSU_DDR_PHY_DX8SL2OSC_DLTST                                 0x0

    * Delay Line Test Mode
    *  PSU_DDR_PHY_DX8SL2OSC_DLTMODE                               0x0

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL2OSC_RESERVED_12_11                        0x3

    * Oscillator Mode Write-Data Delay Line Select
    *  PSU_DDR_PHY_DX8SL2OSC_OSCWDDL                               0x3

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL2OSC_RESERVED_8_7                          0x3

    * Oscillator Mode Write-Leveling Delay Line Select
    *  PSU_DDR_PHY_DX8SL2OSC_OSCWDL                                0x3

    * Oscillator Mode Division
    *  PSU_DDR_PHY_DX8SL2OSC_OSCDIV                                0xf

    * Oscillator Enable
    *  PSU_DDR_PHY_DX8SL2OSC_OSCEN                                 0x0

    * DATX8 0-1 Oscillator, Delay Line Test, PHY FIFO and High Speed Reset, Lo
    * opback, and Gated Clock Control Register
    * (OFFSET, MASK, VALUE)      (0XFD081480, 0xFFFFFFFFU ,0x2A019FFEU)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL2OSC_OFFSET, 0xFFFFFFFFU, 0x2A019FFEU);
/*##################################################################### */

    /*
    * Register : DX8SL2PLLCR0 @ 0XFD081484

    * PLL Bypass
    *  PSU_DDR_PHY_DX8SL2PLLCR0_PLLBYP                             0x0

    * PLL Reset
    *  PSU_DDR_PHY_DX8SL2PLLCR0_PLLRST                             0x0

    * PLL Power Down
    *  PSU_DDR_PHY_DX8SL2PLLCR0_PLLPD                              0x0

    * Reference Stop Mode
    *  PSU_DDR_PHY_DX8SL2PLLCR0_RSTOPM                             0x0

    * PLL Frequency Select
    *  PSU_DDR_PHY_DX8SL2PLLCR0_FRQSEL                             0x1

    * Relock Mode
    *  PSU_DDR_PHY_DX8SL2PLLCR0_RLOCKM                             0x0

    * Charge Pump Proportional Current Control
    *  PSU_DDR_PHY_DX8SL2PLLCR0_CPPC                               0x8

    * Charge Pump Integrating Current Control
    *  PSU_DDR_PHY_DX8SL2PLLCR0_CPIC                               0x0

    * Gear Shift
    *  PSU_DDR_PHY_DX8SL2PLLCR0_GSHIFT                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2PLLCR0_RESERVED_11_9                      0x0

    * Analog Test Enable (ATOEN)
    *  PSU_DDR_PHY_DX8SL2PLLCR0_ATOEN                              0x0

    * Analog Test Control
    *  PSU_DDR_PHY_DX8SL2PLLCR0_ATC                                0x0

    * Digital Test Control
    *  PSU_DDR_PHY_DX8SL2PLLCR0_DTC                                0x0

    * DAXT8 0-1 PLL Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD081484, 0xFFFFFFFFU ,0x01100000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL2PLLCR0_OFFSET,
		0xFFFFFFFFU, 0x01100000U);
/*##################################################################### */

    /*
    * Register : DX8SL2DQSCTL @ 0XFD08149C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2DQSCTL_RESERVED_31_25                     0x0

    * Read Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL2DQSCTL_RRRMODE                            0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2DQSCTL_RESERVED_23_22                     0x0

    * Write Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL2DQSCTL_WRRMODE                            0x1

    * DQS Gate Extension
    *  PSU_DDR_PHY_DX8SL2DQSCTL_DQSGX                              0x0

    * Low Power PLL Power Down
    *  PSU_DDR_PHY_DX8SL2DQSCTL_LPPLLPD                            0x1

    * Low Power I/O Power Down
    *  PSU_DDR_PHY_DX8SL2DQSCTL_LPIOPD                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2DQSCTL_RESERVED_16_15                     0x0

    * QS Counter Enable
    *  PSU_DDR_PHY_DX8SL2DQSCTL_QSCNTEN                            0x1

    * Unused DQ I/O Mode
    *  PSU_DDR_PHY_DX8SL2DQSCTL_UDQIOM                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2DQSCTL_RESERVED_12_10                     0x0

    * Data Slew Rate
    *  PSU_DDR_PHY_DX8SL2DQSCTL_DXSR                               0x3

    * DQS_N Resistor
    *  PSU_DDR_PHY_DX8SL2DQSCTL_DQSNRES                            0x0

    * DQS Resistor
    *  PSU_DDR_PHY_DX8SL2DQSCTL_DQSRES                             0x0

    * DATX8 0-1 DQS Control Register
    * (OFFSET, MASK, VALUE)      (0XFD08149C, 0xFFFFFFFFU ,0x01264300U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL2DQSCTL_OFFSET,
		0xFFFFFFFFU, 0x01264300U);
/*##################################################################### */

    /*
    * Register : DX8SL2DXCTL2 @ 0XFD0814AC

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2DXCTL2_RESERVED_31_24                     0x0

    * Configurable Read Data Enable
    *  PSU_DDR_PHY_DX8SL2DXCTL2_CRDEN                              0x0

    * OX Extension during Post-amble
    *  PSU_DDR_PHY_DX8SL2DXCTL2_POSOEX                             0x0

    * OE Extension during Pre-amble
    *  PSU_DDR_PHY_DX8SL2DXCTL2_PREOEX                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2DXCTL2_RESERVED_17                        0x0

    * I/O Assisted Gate Select
    *  PSU_DDR_PHY_DX8SL2DXCTL2_IOAG                               0x0

    * I/O Loopback Select
    *  PSU_DDR_PHY_DX8SL2DXCTL2_IOLB                               0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2DXCTL2_RESERVED_14_13                     0x0

    * Low Power Wakeup Threshold
    *  PSU_DDR_PHY_DX8SL2DXCTL2_LPWAKEUP_THRSH                     0xc

    * Read Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL2DXCTL2_RDBI                               0x0

    * Write Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL2DXCTL2_WDBI                               0x0

    * PUB Read FIFO Bypass
    *  PSU_DDR_PHY_DX8SL2DXCTL2_PRFBYP                             0x0

    * DATX8 Receive FIFO Read Mode
    *  PSU_DDR_PHY_DX8SL2DXCTL2_RDMODE                             0x0

    * Disables the Read FIFO Reset
    *  PSU_DDR_PHY_DX8SL2DXCTL2_DISRST                             0x0

    * Read DQS Gate I/O Loopback
    *  PSU_DDR_PHY_DX8SL2DXCTL2_DQSGLB                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2DXCTL2_RESERVED_0                         0x0

    * DATX8 0-1 DX Control Register 2
    * (OFFSET, MASK, VALUE)      (0XFD0814AC, 0xFFFFFFFFU ,0x00041800U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL2DXCTL2_OFFSET,
		0xFFFFFFFFU, 0x00041800U);
/*##################################################################### */

    /*
    * Register : DX8SL2IOCR @ 0XFD0814B0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL2IOCR_RESERVED_31                          0x0

    * PVREF_DAC REFSEL range select
    *  PSU_DDR_PHY_DX8SL2IOCR_DXDACRANGE                           0x7

    * IOM bits for PVREF, PVREF_DAC and PVREFE cells in DX IO ring
    *  PSU_DDR_PHY_DX8SL2IOCR_DXVREFIOM                            0x0

    * DX IO Mode
    *  PSU_DDR_PHY_DX8SL2IOCR_DXIOM                                0x2

    * DX IO Transmitter Mode
    *  PSU_DDR_PHY_DX8SL2IOCR_DXTXM                                0x0

    * DX IO Receiver Mode
    *  PSU_DDR_PHY_DX8SL2IOCR_DXRXM                                0x0

    * DATX8 0-1 I/O Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD0814B0, 0xFFFFFFFFU ,0x70800000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL2IOCR_OFFSET, 0xFFFFFFFFU, 0x70800000U);
/*##################################################################### */

    /*
    * Register : DX8SL3OSC @ 0XFD0814C0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3OSC_RESERVED_31_30                        0x0

    * Enable Clock Gating for DX ddr_clk
    *  PSU_DDR_PHY_DX8SL3OSC_GATEDXRDCLK                           0x2

    * Enable Clock Gating for DX ctl_rd_clk
    *  PSU_DDR_PHY_DX8SL3OSC_GATEDXDDRCLK                          0x2

    * Enable Clock Gating for DX ctl_clk
    *  PSU_DDR_PHY_DX8SL3OSC_GATEDXCTLCLK                          0x2

    * Selects the level to which clocks will be stalled when clock gating is e
    * nabled.
    *  PSU_DDR_PHY_DX8SL3OSC_CLKLEVEL                              0x0

    * Loopback Mode
    *  PSU_DDR_PHY_DX8SL3OSC_LBMODE                                0x0

    * Load GSDQS LCDL with 2x the calibrated GSDQSPRD value
    *  PSU_DDR_PHY_DX8SL3OSC_LBGSDQS                               0x0

    * Loopback DQS Gating
    *  PSU_DDR_PHY_DX8SL3OSC_LBGDQS                                0x0

    * Loopback DQS Shift
    *  PSU_DDR_PHY_DX8SL3OSC_LBDQSS                                0x0

    * PHY High-Speed Reset
    *  PSU_DDR_PHY_DX8SL3OSC_PHYHRST                               0x1

    * PHY FIFO Reset
    *  PSU_DDR_PHY_DX8SL3OSC_PHYFRST                               0x1

    * Delay Line Test Start
    *  PSU_DDR_PHY_DX8SL3OSC_DLTST                                 0x0

    * Delay Line Test Mode
    *  PSU_DDR_PHY_DX8SL3OSC_DLTMODE                               0x0

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL3OSC_RESERVED_12_11                        0x3

    * Oscillator Mode Write-Data Delay Line Select
    *  PSU_DDR_PHY_DX8SL3OSC_OSCWDDL                               0x3

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL3OSC_RESERVED_8_7                          0x3

    * Oscillator Mode Write-Leveling Delay Line Select
    *  PSU_DDR_PHY_DX8SL3OSC_OSCWDL                                0x3

    * Oscillator Mode Division
    *  PSU_DDR_PHY_DX8SL3OSC_OSCDIV                                0xf

    * Oscillator Enable
    *  PSU_DDR_PHY_DX8SL3OSC_OSCEN                                 0x0

    * DATX8 0-1 Oscillator, Delay Line Test, PHY FIFO and High Speed Reset, Lo
    * opback, and Gated Clock Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0814C0, 0xFFFFFFFFU ,0x2A019FFEU)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL3OSC_OFFSET, 0xFFFFFFFFU, 0x2A019FFEU);
/*##################################################################### */

    /*
    * Register : DX8SL3PLLCR0 @ 0XFD0814C4

    * PLL Bypass
    *  PSU_DDR_PHY_DX8SL3PLLCR0_PLLBYP                             0x0

    * PLL Reset
    *  PSU_DDR_PHY_DX8SL3PLLCR0_PLLRST                             0x0

    * PLL Power Down
    *  PSU_DDR_PHY_DX8SL3PLLCR0_PLLPD                              0x0

    * Reference Stop Mode
    *  PSU_DDR_PHY_DX8SL3PLLCR0_RSTOPM                             0x0

    * PLL Frequency Select
    *  PSU_DDR_PHY_DX8SL3PLLCR0_FRQSEL                             0x1

    * Relock Mode
    *  PSU_DDR_PHY_DX8SL3PLLCR0_RLOCKM                             0x0

    * Charge Pump Proportional Current Control
    *  PSU_DDR_PHY_DX8SL3PLLCR0_CPPC                               0x8

    * Charge Pump Integrating Current Control
    *  PSU_DDR_PHY_DX8SL3PLLCR0_CPIC                               0x0

    * Gear Shift
    *  PSU_DDR_PHY_DX8SL3PLLCR0_GSHIFT                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3PLLCR0_RESERVED_11_9                      0x0

    * Analog Test Enable (ATOEN)
    *  PSU_DDR_PHY_DX8SL3PLLCR0_ATOEN                              0x0

    * Analog Test Control
    *  PSU_DDR_PHY_DX8SL3PLLCR0_ATC                                0x0

    * Digital Test Control
    *  PSU_DDR_PHY_DX8SL3PLLCR0_DTC                                0x0

    * DAXT8 0-1 PLL Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0814C4, 0xFFFFFFFFU ,0x01100000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL3PLLCR0_OFFSET,
		0xFFFFFFFFU, 0x01100000U);
/*##################################################################### */

    /*
    * Register : DX8SL3DQSCTL @ 0XFD0814DC

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3DQSCTL_RESERVED_31_25                     0x0

    * Read Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL3DQSCTL_RRRMODE                            0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3DQSCTL_RESERVED_23_22                     0x0

    * Write Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL3DQSCTL_WRRMODE                            0x1

    * DQS Gate Extension
    *  PSU_DDR_PHY_DX8SL3DQSCTL_DQSGX                              0x0

    * Low Power PLL Power Down
    *  PSU_DDR_PHY_DX8SL3DQSCTL_LPPLLPD                            0x1

    * Low Power I/O Power Down
    *  PSU_DDR_PHY_DX8SL3DQSCTL_LPIOPD                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3DQSCTL_RESERVED_16_15                     0x0

    * QS Counter Enable
    *  PSU_DDR_PHY_DX8SL3DQSCTL_QSCNTEN                            0x1

    * Unused DQ I/O Mode
    *  PSU_DDR_PHY_DX8SL3DQSCTL_UDQIOM                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3DQSCTL_RESERVED_12_10                     0x0

    * Data Slew Rate
    *  PSU_DDR_PHY_DX8SL3DQSCTL_DXSR                               0x3

    * DQS_N Resistor
    *  PSU_DDR_PHY_DX8SL3DQSCTL_DQSNRES                            0x0

    * DQS Resistor
    *  PSU_DDR_PHY_DX8SL3DQSCTL_DQSRES                             0x0

    * DATX8 0-1 DQS Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0814DC, 0xFFFFFFFFU ,0x01264300U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL3DQSCTL_OFFSET,
		0xFFFFFFFFU, 0x01264300U);
/*##################################################################### */

    /*
    * Register : DX8SL3DXCTL2 @ 0XFD0814EC

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3DXCTL2_RESERVED_31_24                     0x0

    * Configurable Read Data Enable
    *  PSU_DDR_PHY_DX8SL3DXCTL2_CRDEN                              0x0

    * OX Extension during Post-amble
    *  PSU_DDR_PHY_DX8SL3DXCTL2_POSOEX                             0x0

    * OE Extension during Pre-amble
    *  PSU_DDR_PHY_DX8SL3DXCTL2_PREOEX                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3DXCTL2_RESERVED_17                        0x0

    * I/O Assisted Gate Select
    *  PSU_DDR_PHY_DX8SL3DXCTL2_IOAG                               0x0

    * I/O Loopback Select
    *  PSU_DDR_PHY_DX8SL3DXCTL2_IOLB                               0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3DXCTL2_RESERVED_14_13                     0x0

    * Low Power Wakeup Threshold
    *  PSU_DDR_PHY_DX8SL3DXCTL2_LPWAKEUP_THRSH                     0xc

    * Read Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL3DXCTL2_RDBI                               0x0

    * Write Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL3DXCTL2_WDBI                               0x0

    * PUB Read FIFO Bypass
    *  PSU_DDR_PHY_DX8SL3DXCTL2_PRFBYP                             0x0

    * DATX8 Receive FIFO Read Mode
    *  PSU_DDR_PHY_DX8SL3DXCTL2_RDMODE                             0x0

    * Disables the Read FIFO Reset
    *  PSU_DDR_PHY_DX8SL3DXCTL2_DISRST                             0x0

    * Read DQS Gate I/O Loopback
    *  PSU_DDR_PHY_DX8SL3DXCTL2_DQSGLB                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3DXCTL2_RESERVED_0                         0x0

    * DATX8 0-1 DX Control Register 2
    * (OFFSET, MASK, VALUE)      (0XFD0814EC, 0xFFFFFFFFU ,0x00041800U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL3DXCTL2_OFFSET,
		0xFFFFFFFFU, 0x00041800U);
/*##################################################################### */

    /*
    * Register : DX8SL3IOCR @ 0XFD0814F0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL3IOCR_RESERVED_31                          0x0

    * PVREF_DAC REFSEL range select
    *  PSU_DDR_PHY_DX8SL3IOCR_DXDACRANGE                           0x7

    * IOM bits for PVREF, PVREF_DAC and PVREFE cells in DX IO ring
    *  PSU_DDR_PHY_DX8SL3IOCR_DXVREFIOM                            0x0

    * DX IO Mode
    *  PSU_DDR_PHY_DX8SL3IOCR_DXIOM                                0x2

    * DX IO Transmitter Mode
    *  PSU_DDR_PHY_DX8SL3IOCR_DXTXM                                0x0

    * DX IO Receiver Mode
    *  PSU_DDR_PHY_DX8SL3IOCR_DXRXM                                0x0

    * DATX8 0-1 I/O Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD0814F0, 0xFFFFFFFFU ,0x70800000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL3IOCR_OFFSET, 0xFFFFFFFFU, 0x70800000U);
/*##################################################################### */

    /*
    * Register : DX8SL4OSC @ 0XFD081500

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4OSC_RESERVED_31_30                        0x0

    * Enable Clock Gating for DX ddr_clk
    *  PSU_DDR_PHY_DX8SL4OSC_GATEDXRDCLK                           0x2

    * Enable Clock Gating for DX ctl_rd_clk
    *  PSU_DDR_PHY_DX8SL4OSC_GATEDXDDRCLK                          0x2

    * Enable Clock Gating for DX ctl_clk
    *  PSU_DDR_PHY_DX8SL4OSC_GATEDXCTLCLK                          0x2

    * Selects the level to which clocks will be stalled when clock gating is e
    * nabled.
    *  PSU_DDR_PHY_DX8SL4OSC_CLKLEVEL                              0x0

    * Loopback Mode
    *  PSU_DDR_PHY_DX8SL4OSC_LBMODE                                0x0

    * Load GSDQS LCDL with 2x the calibrated GSDQSPRD value
    *  PSU_DDR_PHY_DX8SL4OSC_LBGSDQS                               0x0

    * Loopback DQS Gating
    *  PSU_DDR_PHY_DX8SL4OSC_LBGDQS                                0x0

    * Loopback DQS Shift
    *  PSU_DDR_PHY_DX8SL4OSC_LBDQSS                                0x0

    * PHY High-Speed Reset
    *  PSU_DDR_PHY_DX8SL4OSC_PHYHRST                               0x1

    * PHY FIFO Reset
    *  PSU_DDR_PHY_DX8SL4OSC_PHYFRST                               0x1

    * Delay Line Test Start
    *  PSU_DDR_PHY_DX8SL4OSC_DLTST                                 0x0

    * Delay Line Test Mode
    *  PSU_DDR_PHY_DX8SL4OSC_DLTMODE                               0x0

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL4OSC_RESERVED_12_11                        0x3

    * Oscillator Mode Write-Data Delay Line Select
    *  PSU_DDR_PHY_DX8SL4OSC_OSCWDDL                               0x3

    * Reserved. Caution, do not write to this register field.
    *  PSU_DDR_PHY_DX8SL4OSC_RESERVED_8_7                          0x3

    * Oscillator Mode Write-Leveling Delay Line Select
    *  PSU_DDR_PHY_DX8SL4OSC_OSCWDL                                0x3

    * Oscillator Mode Division
    *  PSU_DDR_PHY_DX8SL4OSC_OSCDIV                                0xf

    * Oscillator Enable
    *  PSU_DDR_PHY_DX8SL4OSC_OSCEN                                 0x0

    * DATX8 0-1 Oscillator, Delay Line Test, PHY FIFO and High Speed Reset, Lo
    * opback, and Gated Clock Control Register
    * (OFFSET, MASK, VALUE)      (0XFD081500, 0xFFFFFFFFU ,0x2A019FFEU)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL4OSC_OFFSET, 0xFFFFFFFFU, 0x2A019FFEU);
/*##################################################################### */

    /*
    * Register : DX8SL4PLLCR0 @ 0XFD081504

    * PLL Bypass
    *  PSU_DDR_PHY_DX8SL4PLLCR0_PLLBYP                             0x0

    * PLL Reset
    *  PSU_DDR_PHY_DX8SL4PLLCR0_PLLRST                             0x0

    * PLL Power Down
    *  PSU_DDR_PHY_DX8SL4PLLCR0_PLLPD                              0x0

    * Reference Stop Mode
    *  PSU_DDR_PHY_DX8SL4PLLCR0_RSTOPM                             0x0

    * PLL Frequency Select
    *  PSU_DDR_PHY_DX8SL4PLLCR0_FRQSEL                             0x1

    * Relock Mode
    *  PSU_DDR_PHY_DX8SL4PLLCR0_RLOCKM                             0x0

    * Charge Pump Proportional Current Control
    *  PSU_DDR_PHY_DX8SL4PLLCR0_CPPC                               0x8

    * Charge Pump Integrating Current Control
    *  PSU_DDR_PHY_DX8SL4PLLCR0_CPIC                               0x0

    * Gear Shift
    *  PSU_DDR_PHY_DX8SL4PLLCR0_GSHIFT                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4PLLCR0_RESERVED_11_9                      0x0

    * Analog Test Enable (ATOEN)
    *  PSU_DDR_PHY_DX8SL4PLLCR0_ATOEN                              0x0

    * Analog Test Control
    *  PSU_DDR_PHY_DX8SL4PLLCR0_ATC                                0x0

    * Digital Test Control
    *  PSU_DDR_PHY_DX8SL4PLLCR0_DTC                                0x0

    * DAXT8 0-1 PLL Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD081504, 0xFFFFFFFFU ,0x01100000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL4PLLCR0_OFFSET,
		0xFFFFFFFFU, 0x01100000U);
/*##################################################################### */

    /*
    * Register : DX8SL4DQSCTL @ 0XFD08151C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4DQSCTL_RESERVED_31_25                     0x0

    * Read Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL4DQSCTL_RRRMODE                            0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4DQSCTL_RESERVED_23_22                     0x0

    * Write Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SL4DQSCTL_WRRMODE                            0x1

    * DQS Gate Extension
    *  PSU_DDR_PHY_DX8SL4DQSCTL_DQSGX                              0x0

    * Low Power PLL Power Down
    *  PSU_DDR_PHY_DX8SL4DQSCTL_LPPLLPD                            0x1

    * Low Power I/O Power Down
    *  PSU_DDR_PHY_DX8SL4DQSCTL_LPIOPD                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4DQSCTL_RESERVED_16_15                     0x0

    * QS Counter Enable
    *  PSU_DDR_PHY_DX8SL4DQSCTL_QSCNTEN                            0x1

    * Unused DQ I/O Mode
    *  PSU_DDR_PHY_DX8SL4DQSCTL_UDQIOM                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4DQSCTL_RESERVED_12_10                     0x0

    * Data Slew Rate
    *  PSU_DDR_PHY_DX8SL4DQSCTL_DXSR                               0x3

    * DQS_N Resistor
    *  PSU_DDR_PHY_DX8SL4DQSCTL_DQSNRES                            0x0

    * DQS Resistor
    *  PSU_DDR_PHY_DX8SL4DQSCTL_DQSRES                             0x0

    * DATX8 0-1 DQS Control Register
    * (OFFSET, MASK, VALUE)      (0XFD08151C, 0xFFFFFFFFU ,0x01264300U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL4DQSCTL_OFFSET,
		0xFFFFFFFFU, 0x01264300U);
/*##################################################################### */

    /*
    * Register : DX8SL4DXCTL2 @ 0XFD08152C

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4DXCTL2_RESERVED_31_24                     0x0

    * Configurable Read Data Enable
    *  PSU_DDR_PHY_DX8SL4DXCTL2_CRDEN                              0x0

    * OX Extension during Post-amble
    *  PSU_DDR_PHY_DX8SL4DXCTL2_POSOEX                             0x0

    * OE Extension during Pre-amble
    *  PSU_DDR_PHY_DX8SL4DXCTL2_PREOEX                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4DXCTL2_RESERVED_17                        0x0

    * I/O Assisted Gate Select
    *  PSU_DDR_PHY_DX8SL4DXCTL2_IOAG                               0x0

    * I/O Loopback Select
    *  PSU_DDR_PHY_DX8SL4DXCTL2_IOLB                               0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4DXCTL2_RESERVED_14_13                     0x0

    * Low Power Wakeup Threshold
    *  PSU_DDR_PHY_DX8SL4DXCTL2_LPWAKEUP_THRSH                     0xc

    * Read Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL4DXCTL2_RDBI                               0x0

    * Write Data Bus Inversion Enable
    *  PSU_DDR_PHY_DX8SL4DXCTL2_WDBI                               0x0

    * PUB Read FIFO Bypass
    *  PSU_DDR_PHY_DX8SL4DXCTL2_PRFBYP                             0x0

    * DATX8 Receive FIFO Read Mode
    *  PSU_DDR_PHY_DX8SL4DXCTL2_RDMODE                             0x0

    * Disables the Read FIFO Reset
    *  PSU_DDR_PHY_DX8SL4DXCTL2_DISRST                             0x0

    * Read DQS Gate I/O Loopback
    *  PSU_DDR_PHY_DX8SL4DXCTL2_DQSGLB                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4DXCTL2_RESERVED_0                         0x0

    * DATX8 0-1 DX Control Register 2
    * (OFFSET, MASK, VALUE)      (0XFD08152C, 0xFFFFFFFFU ,0x00041800U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL4DXCTL2_OFFSET,
		0xFFFFFFFFU, 0x00041800U);
/*##################################################################### */

    /*
    * Register : DX8SL4IOCR @ 0XFD081530

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SL4IOCR_RESERVED_31                          0x0

    * PVREF_DAC REFSEL range select
    *  PSU_DDR_PHY_DX8SL4IOCR_DXDACRANGE                           0x7

    * IOM bits for PVREF, PVREF_DAC and PVREFE cells in DX IO ring
    *  PSU_DDR_PHY_DX8SL4IOCR_DXVREFIOM                            0x0

    * DX IO Mode
    *  PSU_DDR_PHY_DX8SL4IOCR_DXIOM                                0x2

    * DX IO Transmitter Mode
    *  PSU_DDR_PHY_DX8SL4IOCR_DXTXM                                0x0

    * DX IO Receiver Mode
    *  PSU_DDR_PHY_DX8SL4IOCR_DXRXM                                0x0

    * DATX8 0-1 I/O Configuration Register
    * (OFFSET, MASK, VALUE)      (0XFD081530, 0xFFFFFFFFU ,0x70800000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SL4IOCR_OFFSET, 0xFFFFFFFFU, 0x70800000U);
/*##################################################################### */

    /*
    * Register : DX8SLbPLLCR0 @ 0XFD0817C4

    * PLL Bypass
    *  PSU_DDR_PHY_DX8SLBPLLCR0_PLLBYP                             0x0

    * PLL Reset
    *  PSU_DDR_PHY_DX8SLBPLLCR0_PLLRST                             0x0

    * PLL Power Down
    *  PSU_DDR_PHY_DX8SLBPLLCR0_PLLPD                              0x0

    * Reference Stop Mode
    *  PSU_DDR_PHY_DX8SLBPLLCR0_RSTOPM                             0x0

    * PLL Frequency Select
    *  PSU_DDR_PHY_DX8SLBPLLCR0_FRQSEL                             0x1

    * Relock Mode
    *  PSU_DDR_PHY_DX8SLBPLLCR0_RLOCKM                             0x0

    * Charge Pump Proportional Current Control
    *  PSU_DDR_PHY_DX8SLBPLLCR0_CPPC                               0x8

    * Charge Pump Integrating Current Control
    *  PSU_DDR_PHY_DX8SLBPLLCR0_CPIC                               0x0

    * Gear Shift
    *  PSU_DDR_PHY_DX8SLBPLLCR0_GSHIFT                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SLBPLLCR0_RESERVED_11_9                      0x0

    * Analog Test Enable (ATOEN)
    *  PSU_DDR_PHY_DX8SLBPLLCR0_ATOEN                              0x0

    * Analog Test Control
    *  PSU_DDR_PHY_DX8SLBPLLCR0_ATC                                0x0

    * Digital Test Control
    *  PSU_DDR_PHY_DX8SLBPLLCR0_DTC                                0x0

    * DAXT8 0-8 PLL Control Register 0
    * (OFFSET, MASK, VALUE)      (0XFD0817C4, 0xFFFFFFFFU ,0x01100000U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SLBPLLCR0_OFFSET,
		0xFFFFFFFFU, 0x01100000U);
/*##################################################################### */

    /*
    * Register : DX8SLbDQSCTL @ 0XFD0817DC

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SLBDQSCTL_RESERVED_31_25                     0x0

    * Read Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SLBDQSCTL_RRRMODE                            0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SLBDQSCTL_RESERVED_23_22                     0x0

    * Write Path Rise-to-Rise Mode
    *  PSU_DDR_PHY_DX8SLBDQSCTL_WRRMODE                            0x1

    * DQS Gate Extension
    *  PSU_DDR_PHY_DX8SLBDQSCTL_DQSGX                              0x0

    * Low Power PLL Power Down
    *  PSU_DDR_PHY_DX8SLBDQSCTL_LPPLLPD                            0x1

    * Low Power I/O Power Down
    *  PSU_DDR_PHY_DX8SLBDQSCTL_LPIOPD                             0x1

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SLBDQSCTL_RESERVED_16_15                     0x0

    * QS Counter Enable
    *  PSU_DDR_PHY_DX8SLBDQSCTL_QSCNTEN                            0x1

    * Unused DQ I/O Mode
    *  PSU_DDR_PHY_DX8SLBDQSCTL_UDQIOM                             0x0

    * Reserved. Return zeroes on reads.
    *  PSU_DDR_PHY_DX8SLBDQSCTL_RESERVED_12_10                     0x0

    * Data Slew Rate
    *  PSU_DDR_PHY_DX8SLBDQSCTL_DXSR                               0x3

    * DQS# Resistor
    *  PSU_DDR_PHY_DX8SLBDQSCTL_DQSNRES                            0xc

    * DQS Resistor
    *  PSU_DDR_PHY_DX8SLBDQSCTL_DQSRES                             0x4

    * DATX8 0-8 DQS Control Register
    * (OFFSET, MASK, VALUE)      (0XFD0817DC, 0xFFFFFFFFU ,0x012643C4U)
    */
	PSU_Mask_Write(DDR_PHY_DX8SLBDQSCTL_OFFSET,
		0xFFFFFFFFU, 0x012643C4U);
/*##################################################################### */


	return 1;
}
unsigned long psu_ddr_qos_init_data(void)
{

	return 1;
}
unsigned long psu_mio_init_data(void)
{
    /*
    * MIO PROGRAMMING
    */
    /*
    * Register : MIO_PIN_0 @ 0XFF180000

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Output, qspi_sclk_out-
    *  (QSPI Clock)
    *  PSU_IOU_SLCR_MIO_PIN_0_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_0_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[0]- (Test Scan Port) = test_scan, Output, test_scan_out[0
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_0_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[0]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[0]- (GPIO bank 0) 1= can1, Output, can1_phy
    * _tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i2c
    * 1, Output, i2c1_scl_out- (SCL signal) 3= pjtag, Input, pjtag_tck- (PJTAG
    *  TCK) 4= spi0, Input, spi0_sclk_in- (SPI Clock) 4= spi0, Output, spi0_sc
    * lk_out- (SPI Clock) 5= ttc3, Input, ttc3_clk_in- (TTC Clock) 6= ua1, Out
    * put, ua1_txd- (UART transmitter serial output) 7= trace, Output, trace_c
    * lk- (Trace Port Clock)
    *  PSU_IOU_SLCR_MIO_PIN_0_L3_SEL                               0

    * Configures MIO Pin 0 peripheral interface mapping. S
    * (OFFSET, MASK, VALUE)      (0XFF180000, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_0_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_1 @ 0XFF180004

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Input, qspi_mi_mi1- (Q
    * SPI Databus) 1= qspi, Output, qspi_so_mo1- (QSPI Databus)
    *  PSU_IOU_SLCR_MIO_PIN_1_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_1_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[1]- (Test Scan Port) = test_scan, Output, test_scan_out[1
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_1_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[1]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[1]- (GPIO bank 0) 1= can1, Input, can1_phy_
    * rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2c1
    * , Output, i2c1_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tdi- (PJTAG
    * TDI) 4= spi0, Output, spi0_n_ss_out[2]- (SPI Master Selects) 5= ttc3, Ou
    * tput, ttc3_wave_out- (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART
    * receiver serial input) 7= trace, Output, trace_ctl- (Trace Port Control
    * Signal)
    *  PSU_IOU_SLCR_MIO_PIN_1_L3_SEL                               0

    * Configures MIO Pin 1 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180004, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_1_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_2 @ 0XFF180008

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Input, qspi_mi2- (QSPI
    *  Databus) 1= qspi, Output, qspi_mo2- (QSPI Databus)
    *  PSU_IOU_SLCR_MIO_PIN_2_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_2_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[2]- (Test Scan Port) = test_scan, Output, test_scan_out[2
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_2_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[2]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[2]- (GPIO bank 0) 1= can0, Input, can0_phy_
    * rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2c0
    * , Output, i2c0_scl_out- (SCL signal) 3= pjtag, Output, pjtag_tdo- (PJTAG
    *  TDO) 4= spi0, Output, spi0_n_ss_out[1]- (SPI Master Selects) 5= ttc2, I
    * nput, ttc2_clk_in- (TTC Clock) 6= ua0, Input, ua0_rxd- (UART receiver se
    * rial input) 7= trace, Output, tracedq[0]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_2_L3_SEL                               0

    * Configures MIO Pin 2 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180008, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_2_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_3 @ 0XFF18000C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Input, qspi_mi3- (QSPI
    *  Databus) 1= qspi, Output, qspi_mo3- (QSPI Databus)
    *  PSU_IOU_SLCR_MIO_PIN_3_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_3_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[3]- (Test Scan Port) = test_scan, Output, test_scan_out[3
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_3_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[3]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[3]- (GPIO bank 0) 1= can0, Output, can0_phy
    * _tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i2c
    * 0, Output, i2c0_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tms- (PJTAG
    *  TMS) 4= spi0, Input, spi0_n_ss_in- (SPI Master Selects) 4= spi0, Output
    * , spi0_n_ss_out[0]- (SPI Master Selects) 5= ttc2, Output, ttc2_wave_out-
    *  (TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter serial
    * output) 7= trace, Output, tracedq[1]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_3_L3_SEL                               0

    * Configures MIO Pin 3 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18000C, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_3_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_4 @ 0XFF180010

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Output, qspi_mo_mo0- (
    * QSPI Databus) 1= qspi, Input, qspi_si_mi0- (QSPI Databus)
    *  PSU_IOU_SLCR_MIO_PIN_4_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_4_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[4]- (Test Scan Port) = test_scan, Output, test_scan_out[4
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_4_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[4]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[4]- (GPIO bank 0) 1= can1, Output, can1_phy
    * _tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i2c
    * 1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (Wa
    * tch Dog Timer Input clock) 4= spi0, Input, spi0_mi- (MISO signal) 4= spi
    * 0, Output, spi0_so- (MISO signal) 5= ttc1, Input, ttc1_clk_in- (TTC Cloc
    * k) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7= trace, O
    * utput, tracedq[2]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_4_L3_SEL                               0

    * Configures MIO Pin 4 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180010, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_4_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_5 @ 0XFF180014

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Output, qspi_n_ss_out-
    *  (QSPI Slave Select)
    *  PSU_IOU_SLCR_MIO_PIN_5_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_5_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[5]- (Test Scan Port) = test_scan, Output, test_scan_out[5
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_5_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[5]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[5]- (GPIO bank 0) 1= can1, Input, can1_phy_
    * rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2c1
    * , Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out- (W
    * atch Dog Timer Output clock) 4= spi0, Output, spi0_mo- (MOSI signal) 4=
    * spi0, Input, spi0_si- (MOSI signal) 5= ttc1, Output, ttc1_wave_out- (TTC
    *  Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial input) 7=
    *  trace, Output, tracedq[3]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_5_L3_SEL                               0

    * Configures MIO Pin 5 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180014, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_5_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_6 @ 0XFF180018

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Output, qspi_clk_for_l
    * pbk- (QSPI Clock to be fed-back)
    *  PSU_IOU_SLCR_MIO_PIN_6_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_6_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[6]- (Test Scan Port) = test_scan, Output, test_scan_out[6
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_6_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[6]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[6]- (GPIO bank 0) 1= can0, Input, can0_phy_
    * rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2c0
    * , Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (Wat
    * ch Dog Timer Input clock) 4= spi1, Input, spi1_sclk_in- (SPI Clock) 4= s
    * pi1, Output, spi1_sclk_out- (SPI Clock) 5= ttc0, Input, ttc0_clk_in- (TT
    * C Clock) 6= ua0, Input, ua0_rxd- (UART receiver serial input) 7= trace,
    * Output, tracedq[4]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_6_L3_SEL                               0

    * Configures MIO Pin 6 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180018, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_6_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_7 @ 0XFF18001C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Output, qspi_n_ss_out_
    * upper- (QSPI Slave Select upper)
    *  PSU_IOU_SLCR_MIO_PIN_7_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_7_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[7]- (Test Scan Port) = test_scan, Output, test_scan_out[7
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_7_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[7]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[7]- (GPIO bank 0) 1= can0, Output, can0_phy
    * _tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i2c
    * 0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out- (
    * Watch Dog Timer Output clock) 4= spi1, Output, spi1_n_ss_out[2]- (SPI Ma
    * ster Selects) 5= ttc0, Output, ttc0_wave_out- (TTC Waveform Clock) 6= ua
    * 0, Output, ua0_txd- (UART transmitter serial output) 7= trace, Output, t
    * racedq[5]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_7_L3_SEL                               0

    * Configures MIO Pin 7 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18001C, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_7_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_8 @ 0XFF180020

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Input, qspi_mi_upper[0
    * ]- (QSPI Upper Databus) 1= qspi, Output, qspi_mo_upper[0]- (QSPI Upper D
    * atabus)
    *  PSU_IOU_SLCR_MIO_PIN_8_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_8_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[8]- (Test Scan Port) = test_scan, Output, test_scan_out[8
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_8_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[8]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[8]- (GPIO bank 0) 1= can1, Output, can1_phy
    * _tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i2c
    * 1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (Wa
    * tch Dog Timer Input clock) 4= spi1, Output, spi1_n_ss_out[1]- (SPI Maste
    * r Selects) 5= ttc3, Input, ttc3_clk_in- (TTC Clock) 6= ua1, Output, ua1_
    * txd- (UART transmitter serial output) 7= trace, Output, tracedq[6]- (Tra
    * ce Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_8_L3_SEL                               0

    * Configures MIO Pin 8 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180020, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_8_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_9 @ 0XFF180024

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Input, qspi_mi_upper[1
    * ]- (QSPI Upper Databus) 1= qspi, Output, qspi_mo_upper[1]- (QSPI Upper D
    * atabus)
    *  PSU_IOU_SLCR_MIO_PIN_9_L0_SEL                               1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Output, nfc_ce[1]- (NA
    * ND chip enable)
    *  PSU_IOU_SLCR_MIO_PIN_9_L1_SEL                               0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[9]- (Test Scan Port) = test_scan, Output, test_scan_out[9
    * ]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_9_L2_SEL                               0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[9]- (GPIO bank 0) 0= g
    * pio0, Output, gpio_0_pin_out[9]- (GPIO bank 0) 1= can1, Input, can1_phy_
    * rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2c1
    * , Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out- (W
    * atch Dog Timer Output clock) 4= spi1, Input, spi1_n_ss_in- (SPI Master S
    * elects) 4= spi1, Output, spi1_n_ss_out[0]- (SPI Master Selects) 5= ttc3,
    *  Output, ttc3_wave_out- (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (UA
    * RT receiver serial input) 7= trace, Output, tracedq[7]- (Trace Port Data
    * bus)
    *  PSU_IOU_SLCR_MIO_PIN_9_L3_SEL                               0

    * Configures MIO Pin 9 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180024, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_9_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_10 @ 0XFF180028

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Input, qspi_mi_upper[2
    * ]- (QSPI Upper Databus) 1= qspi, Output, qspi_mo_upper[2]- (QSPI Upper D
    * atabus)
    *  PSU_IOU_SLCR_MIO_PIN_10_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_rb_n[0]- (N
    * AND Ready/Busy)
    *  PSU_IOU_SLCR_MIO_PIN_10_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[10]- (Test Scan Port) = test_scan, Output, test_scan_out[
    * 10]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_10_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[10]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[10]- (GPIO bank 0) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi1, Input, spi1_mi- (MISO signal) 4= sp
    * i1, Output, spi1_so- (MISO signal) 5= ttc2, Input, ttc2_clk_in- (TTC Clo
    * ck) 6= ua0, Input, ua0_rxd- (UART receiver serial input) 7= trace, Outpu
    * t, tracedq[8]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_10_L3_SEL                              0

    * Configures MIO Pin 10 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180028, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_10_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_11 @ 0XFF18002C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Input, qspi_mi_upper[3
    * ]- (QSPI Upper Databus) 1= qspi, Output, qspi_mo_upper[3]- (QSPI Upper D
    * atabus)
    *  PSU_IOU_SLCR_MIO_PIN_11_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_rb_n[1]- (N
    * AND Ready/Busy)
    *  PSU_IOU_SLCR_MIO_PIN_11_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[11]- (Test Scan Port) = test_scan, Output, test_scan_out[
    * 11]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_11_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[11]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[11]- (GPIO bank 0) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi1, Output, spi1_mo- (MOSI signal)
    * 4= spi1, Input, spi1_si- (MOSI signal) 5= ttc2, Output, ttc2_wave_out- (
    * TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter serial ou
    * tput) 7= trace, Output, tracedq[9]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_11_L3_SEL                              0

    * Configures MIO Pin 11 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18002C, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_11_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_12 @ 0XFF180030

    * Level 0 Mux Select 0= Level 1 Mux Output 1= qspi, Output, qspi_sclk_out_
    * upper- (QSPI Upper Clock)
    *  PSU_IOU_SLCR_MIO_PIN_12_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dqs_in- (NA
    * ND Strobe) 1= nand, Output, nfc_dqs_out- (NAND Strobe)
    *  PSU_IOU_SLCR_MIO_PIN_12_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= test_scan, Input
    * , test_scan_in[12]- (Test Scan Port) = test_scan, Output, test_scan_out[
    * 12]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_12_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[12]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[12]- (GPIO bank 0) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= pjtag, Input, pjtag_tck- (PJT
    * AG TCK) 4= spi0, Input, spi0_sclk_in- (SPI Clock) 4= spi0, Output, spi0_
    * sclk_out- (SPI Clock) 5= ttc1, Input, ttc1_clk_in- (TTC Clock) 6= ua1, O
    * utput, ua1_txd- (UART transmitter serial output) 7= trace, Output, trace
    * dq[10]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_12_L3_SEL                              0

    * Configures MIO Pin 12 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180030, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_12_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_13 @ 0XFF180034

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_13_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Output, nfc_ce[0]- (NA
    * ND chip enable)
    *  PSU_IOU_SLCR_MIO_PIN_13_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[0]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[0]- (8-bit Data bus) 2= t
    * est_scan, Input, test_scan_in[13]- (Test Scan Port) = test_scan, Output,
    *  test_scan_out[13]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_13_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[13]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[13]- (GPIO bank 0) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tdi- (PJTA
    * G TDI) 4= spi0, Output, spi0_n_ss_out[2]- (SPI Master Selects) 5= ttc1,
    * Output, ttc1_wave_out- (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (UAR
    * T receiver serial input) 7= trace, Output, tracedq[11]- (Trace Port Data
    * bus)
    *  PSU_IOU_SLCR_MIO_PIN_13_L3_SEL                              0

    * Configures MIO Pin 13 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180034, 0x000000FEU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_13_OFFSET, 0x000000FEU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_14 @ 0XFF180038

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_14_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Output, nfc_cle- (NAND
    *  Command Latch Enable)
    *  PSU_IOU_SLCR_MIO_PIN_14_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[1]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[1]- (8-bit Data bus) 2= t
    * est_scan, Input, test_scan_in[14]- (Test Scan Port) = test_scan, Output,
    *  test_scan_out[14]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_14_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[14]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[14]- (GPIO bank 0) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= pjtag, Output, pjtag_tdo- (PJT
    * AG TDO) 4= spi0, Output, spi0_n_ss_out[1]- (SPI Master Selects) 5= ttc0,
    *  Input, ttc0_clk_in- (TTC Clock) 6= ua0, Input, ua0_rxd- (UART receiver
    * serial input) 7= trace, Output, tracedq[12]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_14_L3_SEL                              2

    * Configures MIO Pin 14 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180038, 0x000000FEU ,0x00000040U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_14_OFFSET, 0x000000FEU, 0x00000040U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_15 @ 0XFF18003C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_15_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Output, nfc_ale- (NAND
    *  Address Latch Enable)
    *  PSU_IOU_SLCR_MIO_PIN_15_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[2]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[2]- (8-bit Data bus) 2= t
    * est_scan, Input, test_scan_in[15]- (Test Scan Port) = test_scan, Output,
    *  test_scan_out[15]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_15_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[15]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[15]- (GPIO bank 0) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tms- (PJT
    * AG TMS) 4= spi0, Input, spi0_n_ss_in- (SPI Master Selects) 4= spi0, Outp
    * ut, spi0_n_ss_out[0]- (SPI Master Selects) 5= ttc0, Output, ttc0_wave_ou
    * t- (TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter seria
    * l output) 7= trace, Output, tracedq[13]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_15_L3_SEL                              2

    * Configures MIO Pin 15 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18003C, 0x000000FEU ,0x00000040U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_15_OFFSET, 0x000000FEU, 0x00000040U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_16 @ 0XFF180040

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_16_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dq_in[0]- (
    * NAND Data Bus) 1= nand, Output, nfc_dq_out[0]- (NAND Data Bus)
    *  PSU_IOU_SLCR_MIO_PIN_16_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[3]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[3]- (8-bit Data bus) 2= t
    * est_scan, Input, test_scan_in[16]- (Test Scan Port) = test_scan, Output,
    *  test_scan_out[16]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_16_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[16]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[16]- (GPIO bank 0) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= spi0, Input, spi0_mi- (MISO signal) 4= s
    * pi0, Output, spi0_so- (MISO signal) 5= ttc3, Input, ttc3_clk_in- (TTC Cl
    * ock) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7= trace,
    *  Output, tracedq[14]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_16_L3_SEL                              2

    * Configures MIO Pin 16 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180040, 0x000000FEU ,0x00000040U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_16_OFFSET, 0x000000FEU, 0x00000040U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_17 @ 0XFF180044

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_17_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dq_in[1]- (
    * NAND Data Bus) 1= nand, Output, nfc_dq_out[1]- (NAND Data Bus)
    *  PSU_IOU_SLCR_MIO_PIN_17_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[4]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[4]- (8-bit Data bus) 2= t
    * est_scan, Input, test_scan_in[17]- (Test Scan Port) = test_scan, Output,
    *  test_scan_out[17]- (Test Scan Port) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_17_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[17]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[17]- (GPIO bank 0) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= spi0, Output, spi0_mo- (MOSI signal) 4
    * = spi0, Input, spi0_si- (MOSI signal) 5= ttc3, Output, ttc3_wave_out- (T
    * TC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial input)
    * 7= trace, Output, tracedq[15]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_17_L3_SEL                              2

    * Configures MIO Pin 17 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180044, 0x000000FEU ,0x00000040U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_17_OFFSET, 0x000000FEU, 0x00000040U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_18 @ 0XFF180048

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_18_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dq_in[2]- (
    * NAND Data Bus) 1= nand, Output, nfc_dq_out[2]- (NAND Data Bus)
    *  PSU_IOU_SLCR_MIO_PIN_18_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[5]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[5]- (8-bit Data bus) 2= t
    * est_scan, Input, test_scan_in[18]- (Test Scan Port) = test_scan, Output,
    *  test_scan_out[18]- (Test Scan Port) 3= csu, Input, csu_ext_tamper- (CSU
    *  Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_18_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[18]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[18]- (GPIO bank 0) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi1, Input, spi1_mi- (MISO signal) 4= sp
    * i1, Output, spi1_so- (MISO signal) 5= ttc2, Input, ttc2_clk_in- (TTC Clo
    * ck) 6= ua0, Input, ua0_rxd- (UART receiver serial input) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_18_L3_SEL                              6

    * Configures MIO Pin 18 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180048, 0x000000FEU ,0x000000C0U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_18_OFFSET, 0x000000FEU, 0x000000C0U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_19 @ 0XFF18004C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_19_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dq_in[3]- (
    * NAND Data Bus) 1= nand, Output, nfc_dq_out[3]- (NAND Data Bus)
    *  PSU_IOU_SLCR_MIO_PIN_19_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[6]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[6]- (8-bit Data bus) 2= t
    * est_scan, Input, test_scan_in[19]- (Test Scan Port) = test_scan, Output,
    *  test_scan_out[19]- (Test Scan Port) 3= csu, Input, csu_ext_tamper- (CSU
    *  Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_19_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[19]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[19]- (GPIO bank 0) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi1, Output, spi1_n_ss_out[2]- (SPI
    * Master Selects) 5= ttc2, Output, ttc2_wave_out- (TTC Waveform Clock) 6=
    * ua0, Output, ua0_txd- (UART transmitter serial output) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_19_L3_SEL                              6

    * Configures MIO Pin 19 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18004C, 0x000000FEU ,0x000000C0U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_19_OFFSET, 0x000000FEU, 0x000000C0U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_20 @ 0XFF180050

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_20_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dq_in[4]- (
    * NAND Data Bus) 1= nand, Output, nfc_dq_out[4]- (NAND Data Bus)
    *  PSU_IOU_SLCR_MIO_PIN_20_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[7]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[7]- (8-bit Data bus) 2= t
    * est_scan, Input, test_scan_in[20]- (Test Scan Port) = test_scan, Output,
    *  test_scan_out[20]- (Test Scan Port) 3= csu, Input, csu_ext_tamper- (CSU
    *  Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_20_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[20]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[20]- (GPIO bank 0) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= spi1, Output, spi1_n_ss_out[1]- (SPI Mas
    * ter Selects) 5= ttc1, Input, ttc1_clk_in- (TTC Clock) 6= ua1, Output, ua
    * 1_txd- (UART transmitter serial output) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_20_L3_SEL                              6

    * Configures MIO Pin 20 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180050, 0x000000FEU ,0x000000C0U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_20_OFFSET, 0x000000FEU, 0x000000C0U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_21 @ 0XFF180054

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_21_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dq_in[5]- (
    * NAND Data Bus) 1= nand, Output, nfc_dq_out[5]- (NAND Data Bus)
    *  PSU_IOU_SLCR_MIO_PIN_21_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_cmd_in- (Com
    * mand Indicator) = sd0, Output, sdio0_cmd_out- (Command Indicator) 2= tes
    * t_scan, Input, test_scan_in[21]- (Test Scan Port) = test_scan, Output, t
    * est_scan_out[21]- (Test Scan Port) 3= csu, Input, csu_ext_tamper- (CSU E
    * xt Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_21_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[21]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[21]- (GPIO bank 0) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= spi1, Input, spi1_n_ss_in- (SPI Master
    *  Selects) 4= spi1, Output, spi1_n_ss_out[0]- (SPI Master Selects) 5= ttc
    * 1, Output, ttc1_wave_out- (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (
    * UART receiver serial input) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_21_L3_SEL                              6

    * Configures MIO Pin 21 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180054, 0x000000FEU ,0x000000C0U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_21_OFFSET, 0x000000FEU, 0x000000C0U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_22 @ 0XFF180058

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_22_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Output, nfc_we_b- (NAN
    * D Write Enable)
    *  PSU_IOU_SLCR_MIO_PIN_22_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Output, sdio0_clk_out-
    * (SDSDIO clock) 2= test_scan, Input, test_scan_in[22]- (Test Scan Port) =
    *  test_scan, Output, test_scan_out[22]- (Test Scan Port) 3= csu, Input, c
    * su_ext_tamper- (CSU Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_22_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[22]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[22]- (GPIO bank 0) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi1, Input, spi1_sclk_in- (SPI Clock) 4=
    *  spi1, Output, spi1_sclk_out- (SPI Clock) 5= ttc0, Input, ttc0_clk_in- (
    * TTC Clock) 6= ua0, Input, ua0_rxd- (UART receiver serial input) 7= Not U
    * sed
    *  PSU_IOU_SLCR_MIO_PIN_22_L3_SEL                              0

    * Configures MIO Pin 22 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180058, 0x000000FEU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_22_OFFSET, 0x000000FEU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_23 @ 0XFF18005C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_23_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dq_in[6]- (
    * NAND Data Bus) 1= nand, Output, nfc_dq_out[6]- (NAND Data Bus)
    *  PSU_IOU_SLCR_MIO_PIN_23_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Output, sdio0_bus_pow-
    * (SD card bus power) 2= test_scan, Input, test_scan_in[23]- (Test Scan Po
    * rt) = test_scan, Output, test_scan_out[23]- (Test Scan Port) 3= csu, Inp
    * ut, csu_ext_tamper- (CSU Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_23_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[23]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[23]- (GPIO bank 0) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi1, Output, spi1_mo- (MOSI signal)
    * 4= spi1, Input, spi1_si- (MOSI signal) 5= ttc0, Output, ttc0_wave_out- (
    * TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter serial ou
    * tput) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_23_L3_SEL                              0

    * Configures MIO Pin 23 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18005C, 0x000000FEU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_23_OFFSET, 0x000000FEU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_24 @ 0XFF180060

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_24_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dq_in[7]- (
    * NAND Data Bus) 1= nand, Output, nfc_dq_out[7]- (NAND Data Bus)
    *  PSU_IOU_SLCR_MIO_PIN_24_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sdio0_cd_n- (SD
    * card detect from connector) 2= test_scan, Input, test_scan_in[24]- (Test
    *  Scan Port) = test_scan, Output, test_scan_out[24]- (Test Scan Port) 3=
    * csu, Input, csu_ext_tamper- (CSU Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_24_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[24]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[24]- (GPIO bank 0) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= Not Used 5= ttc3, Input, ttc3_clk_in- (T
    * TC Clock) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7= N
    * ot Used
    *  PSU_IOU_SLCR_MIO_PIN_24_L3_SEL                              1

    * Configures MIO Pin 24 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180060, 0x000000FEU ,0x00000020U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_24_OFFSET, 0x000000FEU, 0x00000020U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_25 @ 0XFF180064

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_25_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Output, nfc_re_n- (NAN
    * D Read Enable)
    *  PSU_IOU_SLCR_MIO_PIN_25_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sdio0_wp- (SD ca
    * rd write protect from connector) 2= test_scan, Input, test_scan_in[25]-
    * (Test Scan Port) = test_scan, Output, test_scan_out[25]- (Test Scan Port
    * ) 3= csu, Input, csu_ext_tamper- (CSU Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_25_L2_SEL                              0

    * Level 3 Mux Select 0= gpio0, Input, gpio_0_pin_in[25]- (GPIO bank 0) 0=
    * gpio0, Output, gpio_0_pin_out[25]- (GPIO bank 0) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= Not Used 5= ttc3, Output, ttc3_wave_ou
    * t- (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial in
    * put) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_25_L3_SEL                              1

    * Configures MIO Pin 25 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180064, 0x000000FEU ,0x00000020U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_25_OFFSET, 0x000000FEU, 0x00000020U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_26 @ 0XFF180068

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Output, gem0_rgmii_tx_
    * clk- (TX RGMII clock)
    *  PSU_IOU_SLCR_MIO_PIN_26_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Output, nfc_ce[1]- (NA
    * ND chip enable)
    *  PSU_IOU_SLCR_MIO_PIN_26_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Input, pmu_gpi[0]- (PMU
    *  GPI) 2= test_scan, Input, test_scan_in[26]- (Test Scan Port) = test_sca
    * n, Output, test_scan_out[26]- (Test Scan Port) 3= csu, Input, csu_ext_ta
    * mper- (CSU Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_26_L2_SEL                              0

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[0]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[0]- (GPIO bank 1) 1= can0, Input, can0_phy_
    * rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2c0
    * , Output, i2c0_scl_out- (SCL signal) 3= pjtag, Input, pjtag_tck- (PJTAG
    * TCK) 4= spi0, Input, spi0_sclk_in- (SPI Clock) 4= spi0, Output, spi0_scl
    * k_out- (SPI Clock) 5= ttc2, Input, ttc2_clk_in- (TTC Clock) 6= ua0, Inpu
    * t, ua0_rxd- (UART receiver serial input) 7= trace, Output, tracedq[4]- (
    * Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_26_L3_SEL                              0

    * Configures MIO Pin 26 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180068, 0x000000FEU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_26_OFFSET, 0x000000FEU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_27 @ 0XFF18006C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Output, gem0_rgmii_txd
    * [0]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_27_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_rb_n[0]- (N
    * AND Ready/Busy)
    *  PSU_IOU_SLCR_MIO_PIN_27_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Input, pmu_gpi[1]- (PMU
    *  GPI) 2= test_scan, Input, test_scan_in[27]- (Test Scan Port) = test_sca
    * n, Output, test_scan_out[27]- (Test Scan Port) 3= dpaux, Input, dp_aux_d
    * ata_in- (Dp Aux Data) = dpaux, Output, dp_aux_data_out- (Dp Aux Data)
    *  PSU_IOU_SLCR_MIO_PIN_27_L2_SEL                              3

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[1]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[1]- (GPIO bank 1) 1= can0, Output, can0_phy
    * _tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i2c
    * 0, Output, i2c0_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tdi- (PJTAG
    *  TDI) 4= spi0, Output, spi0_n_ss_out[2]- (SPI Master Selects) 5= ttc2, O
    * utput, ttc2_wave_out- (TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UAR
    * T transmitter serial output) 7= trace, Output, tracedq[5]- (Trace Port D
    * atabus)
    *  PSU_IOU_SLCR_MIO_PIN_27_L3_SEL                              0

    * Configures MIO Pin 27 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18006C, 0x000000FEU ,0x00000018U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_27_OFFSET, 0x000000FEU, 0x00000018U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_28 @ 0XFF180070

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Output, gem0_rgmii_txd
    * [1]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_28_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_rb_n[1]- (N
    * AND Ready/Busy)
    *  PSU_IOU_SLCR_MIO_PIN_28_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Input, pmu_gpi[2]- (PMU
    *  GPI) 2= test_scan, Input, test_scan_in[28]- (Test Scan Port) = test_sca
    * n, Output, test_scan_out[28]- (Test Scan Port) 3= dpaux, Input, dp_hot_p
    * lug_detect- (Dp Aux Hot Plug)
    *  PSU_IOU_SLCR_MIO_PIN_28_L2_SEL                              3

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[2]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[2]- (GPIO bank 1) 1= can1, Output, can1_phy
    * _tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i2c
    * 1, Output, i2c1_scl_out- (SCL signal) 3= pjtag, Output, pjtag_tdo- (PJTA
    * G TDO) 4= spi0, Output, spi0_n_ss_out[1]- (SPI Master Selects) 5= ttc1,
    * Input, ttc1_clk_in- (TTC Clock) 6= ua1, Output, ua1_txd- (UART transmitt
    * er serial output) 7= trace, Output, tracedq[6]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_28_L3_SEL                              0

    * Configures MIO Pin 28 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180070, 0x000000FEU ,0x00000018U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_28_OFFSET, 0x000000FEU, 0x00000018U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_29 @ 0XFF180074

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Output, gem0_rgmii_txd
    * [2]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_29_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= pcie, Input, pcie_reset_n- (
    * PCIE Reset signal)
    *  PSU_IOU_SLCR_MIO_PIN_29_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Input, pmu_gpi[3]- (PMU
    *  GPI) 2= test_scan, Input, test_scan_in[29]- (Test Scan Port) = test_sca
    * n, Output, test_scan_out[29]- (Test Scan Port) 3= dpaux, Input, dp_aux_d
    * ata_in- (Dp Aux Data) = dpaux, Output, dp_aux_data_out- (Dp Aux Data)
    *  PSU_IOU_SLCR_MIO_PIN_29_L2_SEL                              3

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[3]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[3]- (GPIO bank 1) 1= can1, Input, can1_phy_
    * rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2c1
    * , Output, i2c1_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tms- (PJTAG
    * TMS) 4= spi0, Input, spi0_n_ss_in- (SPI Master Selects) 4= spi0, Output,
    *  spi0_n_ss_out[0]- (SPI Master Selects) 5= ttc1, Output, ttc1_wave_out-
    * (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial input
    * ) 7= trace, Output, tracedq[7]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_29_L3_SEL                              0

    * Configures MIO Pin 29 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180074, 0x000000FEU ,0x00000018U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_29_OFFSET, 0x000000FEU, 0x00000018U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_30 @ 0XFF180078

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Output, gem0_rgmii_txd
    * [3]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_30_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= pcie, Input, pcie_reset_n- (
    * PCIE Reset signal)
    *  PSU_IOU_SLCR_MIO_PIN_30_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Input, pmu_gpi[4]- (PMU
    *  GPI) 2= test_scan, Input, test_scan_in[30]- (Test Scan Port) = test_sca
    * n, Output, test_scan_out[30]- (Test Scan Port) 3= dpaux, Input, dp_hot_p
    * lug_detect- (Dp Aux Hot Plug)
    *  PSU_IOU_SLCR_MIO_PIN_30_L2_SEL                              3

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[4]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[4]- (GPIO bank 1) 1= can0, Input, can0_phy_
    * rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2c0
    * , Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (Wat
    * ch Dog Timer Input clock) 4= spi0, Input, spi0_mi- (MISO signal) 4= spi0
    * , Output, spi0_so- (MISO signal) 5= ttc0, Input, ttc0_clk_in- (TTC Clock
    * ) 6= ua0, Input, ua0_rxd- (UART receiver serial input) 7= trace, Output,
    *  tracedq[8]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_30_L3_SEL                              0

    * Configures MIO Pin 30 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180078, 0x000000FEU ,0x00000018U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_30_OFFSET, 0x000000FEU, 0x00000018U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_31 @ 0XFF18007C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Output, gem0_rgmii_tx_
    * ctl- (TX RGMII control)
    *  PSU_IOU_SLCR_MIO_PIN_31_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= pcie, Input, pcie_reset_n- (
    * PCIE Reset signal)
    *  PSU_IOU_SLCR_MIO_PIN_31_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Input, pmu_gpi[5]- (PMU
    *  GPI) 2= test_scan, Input, test_scan_in[31]- (Test Scan Port) = test_sca
    * n, Output, test_scan_out[31]- (Test Scan Port) 3= csu, Input, csu_ext_ta
    * mper- (CSU Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_31_L2_SEL                              0

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[5]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[5]- (GPIO bank 1) 1= can0, Output, can0_phy
    * _tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i2c
    * 0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out- (
    * Watch Dog Timer Output clock) 4= spi0, Output, spi0_mo- (MOSI signal) 4=
    *  spi0, Input, spi0_si- (MOSI signal) 5= ttc0, Output, ttc0_wave_out- (TT
    * C Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter serial outp
    * ut) 7= trace, Output, tracedq[9]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_31_L3_SEL                              0

    * Configures MIO Pin 31 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18007C, 0x000000FEU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_31_OFFSET, 0x000000FEU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_32 @ 0XFF180080

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Input, gem0_rgmii_rx_c
    * lk- (RX RGMII clock)
    *  PSU_IOU_SLCR_MIO_PIN_32_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= nand, Input, nfc_dqs_in- (NA
    * ND Strobe) 1= nand, Output, nfc_dqs_out- (NAND Strobe)
    *  PSU_IOU_SLCR_MIO_PIN_32_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Output, pmu_gpo[0]- (PM
    * U GPI) 2= test_scan, Input, test_scan_in[32]- (Test Scan Port) = test_sc
    * an, Output, test_scan_out[32]- (Test Scan Port) 3= csu, Input, csu_ext_t
    * amper- (CSU Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_32_L2_SEL                              1

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[6]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[6]- (GPIO bank 1) 1= can1, Output, can1_phy
    * _tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i2c
    * 1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (Wa
    * tch Dog Timer Input clock) 4= spi1, Input, spi1_sclk_in- (SPI Clock) 4=
    * spi1, Output, spi1_sclk_out- (SPI Clock) 5= ttc3, Input, ttc3_clk_in- (T
    * TC Clock) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7= t
    * race, Output, tracedq[10]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_32_L3_SEL                              0

    * Configures MIO Pin 32 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180080, 0x000000FEU ,0x00000008U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_32_OFFSET, 0x000000FEU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_33 @ 0XFF180084

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Input, gem0_rgmii_rxd[
    * 0]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_33_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= pcie, Input, pcie_reset_n- (
    * PCIE Reset signal)
    *  PSU_IOU_SLCR_MIO_PIN_33_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Output, pmu_gpo[1]- (PM
    * U GPI) 2= test_scan, Input, test_scan_in[33]- (Test Scan Port) = test_sc
    * an, Output, test_scan_out[33]- (Test Scan Port) 3= csu, Input, csu_ext_t
    * amper- (CSU Ext Tamper)
    *  PSU_IOU_SLCR_MIO_PIN_33_L2_SEL                              1

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[7]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[7]- (GPIO bank 1) 1= can1, Input, can1_phy_
    * rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2c1
    * , Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out- (W
    * atch Dog Timer Output clock) 4= spi1, Output, spi1_n_ss_out[2]- (SPI Mas
    * ter Selects) 5= ttc3, Output, ttc3_wave_out- (TTC Waveform Clock) 6= ua1
    * , Input, ua1_rxd- (UART receiver serial input) 7= trace, Output, tracedq
    * [11]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_33_L3_SEL                              0

    * Configures MIO Pin 33 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180084, 0x000000FEU ,0x00000008U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_33_OFFSET, 0x000000FEU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_34 @ 0XFF180088

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Input, gem0_rgmii_rxd[
    * 1]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_34_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= pcie, Input, pcie_reset_n- (
    * PCIE Reset signal)
    *  PSU_IOU_SLCR_MIO_PIN_34_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Output, pmu_gpo[2]- (PM
    * U GPI) 2= test_scan, Input, test_scan_in[34]- (Test Scan Port) = test_sc
    * an, Output, test_scan_out[34]- (Test Scan Port) 3= dpaux, Input, dp_aux_
    * data_in- (Dp Aux Data) = dpaux, Output, dp_aux_data_out- (Dp Aux Data)
    *  PSU_IOU_SLCR_MIO_PIN_34_L2_SEL                              1

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[8]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[8]- (GPIO bank 1) 1= can0, Input, can0_phy_
    * rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2c0
    * , Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (Wat
    * ch Dog Timer Input clock) 4= spi1, Output, spi1_n_ss_out[1]- (SPI Master
    *  Selects) 5= ttc2, Input, ttc2_clk_in- (TTC Clock) 6= ua0, Input, ua0_rx
    * d- (UART receiver serial input) 7= trace, Output, tracedq[12]- (Trace Po
    * rt Databus)
    *  PSU_IOU_SLCR_MIO_PIN_34_L3_SEL                              0

    * Configures MIO Pin 34 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180088, 0x000000FEU ,0x00000008U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_34_OFFSET, 0x000000FEU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_35 @ 0XFF18008C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Input, gem0_rgmii_rxd[
    * 2]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_35_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= pcie, Input, pcie_reset_n- (
    * PCIE Reset signal)
    *  PSU_IOU_SLCR_MIO_PIN_35_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Output, pmu_gpo[3]- (PM
    * U GPI) 2= test_scan, Input, test_scan_in[35]- (Test Scan Port) = test_sc
    * an, Output, test_scan_out[35]- (Test Scan Port) 3= dpaux, Input, dp_hot_
    * plug_detect- (Dp Aux Hot Plug)
    *  PSU_IOU_SLCR_MIO_PIN_35_L2_SEL                              1

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[9]- (GPIO bank 1) 0= g
    * pio1, Output, gpio_1_pin_out[9]- (GPIO bank 1) 1= can0, Output, can0_phy
    * _tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i2c
    * 0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out- (
    * Watch Dog Timer Output clock) 4= spi1, Input, spi1_n_ss_in- (SPI Master
    * Selects) 4= spi1, Output, spi1_n_ss_out[0]- (SPI Master Selects) 5= ttc2
    * , Output, ttc2_wave_out- (TTC Waveform Clock) 6= ua0, Output, ua0_txd- (
    * UART transmitter serial output) 7= trace, Output, tracedq[13]- (Trace Po
    * rt Databus)
    *  PSU_IOU_SLCR_MIO_PIN_35_L3_SEL                              0

    * Configures MIO Pin 35 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18008C, 0x000000FEU ,0x00000008U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_35_OFFSET, 0x000000FEU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_36 @ 0XFF180090

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Input, gem0_rgmii_rxd[
    * 3]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_36_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= pcie, Input, pcie_reset_n- (
    * PCIE Reset signal)
    *  PSU_IOU_SLCR_MIO_PIN_36_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Output, pmu_gpo[4]- (PM
    * U GPI) 2= test_scan, Input, test_scan_in[36]- (Test Scan Port) = test_sc
    * an, Output, test_scan_out[36]- (Test Scan Port) 3= dpaux, Input, dp_aux_
    * data_in- (Dp Aux Data) = dpaux, Output, dp_aux_data_out- (Dp Aux Data)
    *  PSU_IOU_SLCR_MIO_PIN_36_L2_SEL                              1

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[10]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[10]- (GPIO bank 1) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= spi1, Input, spi1_mi- (MISO signal) 4= s
    * pi1, Output, spi1_so- (MISO signal) 5= ttc1, Input, ttc1_clk_in- (TTC Cl
    * ock) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7= trace,
    *  Output, tracedq[14]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_36_L3_SEL                              0

    * Configures MIO Pin 36 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180090, 0x000000FEU ,0x00000008U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_36_OFFSET, 0x000000FEU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_37 @ 0XFF180094

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem0, Input, gem0_rgmii_rx_c
    * tl- (RX RGMII control )
    *  PSU_IOU_SLCR_MIO_PIN_37_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= pcie, Input, pcie_reset_n- (
    * PCIE Reset signal)
    *  PSU_IOU_SLCR_MIO_PIN_37_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= pmu, Output, pmu_gpo[5]- (PM
    * U GPI) 2= test_scan, Input, test_scan_in[37]- (Test Scan Port) = test_sc
    * an, Output, test_scan_out[37]- (Test Scan Port) 3= dpaux, Input, dp_hot_
    * plug_detect- (Dp Aux Hot Plug)
    *  PSU_IOU_SLCR_MIO_PIN_37_L2_SEL                              1

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[11]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[11]- (GPIO bank 1) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= spi1, Output, spi1_mo- (MOSI signal) 4
    * = spi1, Input, spi1_si- (MOSI signal) 5= ttc1, Output, ttc1_wave_out- (T
    * TC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial input)
    * 7= trace, Output, tracedq[15]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_37_L3_SEL                              0

    * Configures MIO Pin 37 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180094, 0x000000FEU ,0x00000008U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_37_OFFSET, 0x000000FEU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_38 @ 0XFF180098

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Output, gem1_rgmii_tx_
    * clk- (TX RGMII clock)
    *  PSU_IOU_SLCR_MIO_PIN_38_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_38_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Output, sdio0_clk_out-
    * (SDSDIO clock) 2= Not Used 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_38_L2_SEL                              0

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[12]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[12]- (GPIO bank 1) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= pjtag, Input, pjtag_tck- (PJTA
    * G TCK) 4= spi0, Input, spi0_sclk_in- (SPI Clock) 4= spi0, Output, spi0_s
    * clk_out- (SPI Clock) 5= ttc0, Input, ttc0_clk_in- (TTC Clock) 6= ua0, In
    * put, ua0_rxd- (UART receiver serial input) 7= trace, Output, trace_clk-
    * (Trace Port Clock)
    *  PSU_IOU_SLCR_MIO_PIN_38_L3_SEL                              0

    * Configures MIO Pin 38 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180098, 0x000000FEU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_38_OFFSET, 0x000000FEU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_39 @ 0XFF18009C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Output, gem1_rgmii_txd
    * [0]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_39_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_39_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sdio0_cd_n- (SD
    * card detect from connector) 2= sd1, Input, sd1_data_in[4]- (8-bit Data b
    * us) = sd1, Output, sdio1_data_out[4]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_39_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[13]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[13]- (GPIO bank 1) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tdi- (PJT
    * AG TDI) 4= spi0, Output, spi0_n_ss_out[2]- (SPI Master Selects) 5= ttc0,
    *  Output, ttc0_wave_out- (TTC Waveform Clock) 6= ua0, Output, ua0_txd- (U
    * ART transmitter serial output) 7= trace, Output, trace_ctl- (Trace Port
    * Control Signal)
    *  PSU_IOU_SLCR_MIO_PIN_39_L3_SEL                              0

    * Configures MIO Pin 39 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18009C, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_39_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_40 @ 0XFF1800A0

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Output, gem1_rgmii_txd
    * [1]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_40_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_40_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_cmd_in- (Com
    * mand Indicator) = sd0, Output, sdio0_cmd_out- (Command Indicator) 2= sd1
    * , Input, sd1_data_in[5]- (8-bit Data bus) = sd1, Output, sdio1_data_out[
    * 5]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_40_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[14]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[14]- (GPIO bank 1) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= pjtag, Output, pjtag_tdo- (PJ
    * TAG TDO) 4= spi0, Output, spi0_n_ss_out[1]- (SPI Master Selects) 5= ttc3
    * , Input, ttc3_clk_in- (TTC Clock) 6= ua1, Output, ua1_txd- (UART transmi
    * tter serial output) 7= trace, Output, tracedq[0]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_40_L3_SEL                              0

    * Configures MIO Pin 40 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800A0, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_40_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_41 @ 0XFF1800A4

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Output, gem1_rgmii_txd
    * [2]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_41_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_41_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[0]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[0]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[6]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[6]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_41_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[15]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[15]- (GPIO bank 1) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tms- (PJTA
    * G TMS) 4= spi0, Input, spi0_n_ss_in- (SPI Master Selects) 4= spi0, Outpu
    * t, spi0_n_ss_out[0]- (SPI Master Selects) 5= ttc3, Output, ttc3_wave_out
    * - (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial inp
    * ut) 7= trace, Output, tracedq[1]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_41_L3_SEL                              0

    * Configures MIO Pin 41 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800A4, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_41_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_42 @ 0XFF1800A8

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Output, gem1_rgmii_txd
    * [3]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_42_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_42_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[1]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[1]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[7]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[7]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_42_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[16]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[16]- (GPIO bank 1) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi0, Input, spi0_mi- (MISO signal) 4= sp
    * i0, Output, spi0_so- (MISO signal) 5= ttc2, Input, ttc2_clk_in- (TTC Clo
    * ck) 6= ua0, Input, ua0_rxd- (UART receiver serial input) 7= trace, Outpu
    * t, tracedq[2]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_42_L3_SEL                              0

    * Configures MIO Pin 42 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800A8, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_42_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_43 @ 0XFF1800AC

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Output, gem1_rgmii_tx_
    * ctl- (TX RGMII control)
    *  PSU_IOU_SLCR_MIO_PIN_43_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_43_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[2]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[2]- (8-bit Data bus) 2= s
    * d1, Output, sdio1_bus_pow- (SD card bus power) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_43_L2_SEL                              0

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[17]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[17]- (GPIO bank 1) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi0, Output, spi0_mo- (MOSI signal)
    * 4= spi0, Input, spi0_si- (MOSI signal) 5= ttc2, Output, ttc2_wave_out- (
    * TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter serial ou
    * tput) 7= trace, Output, tracedq[3]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_43_L3_SEL                              0

    * Configures MIO Pin 43 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800AC, 0x000000FEU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_43_OFFSET, 0x000000FEU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_44 @ 0XFF1800B0

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Input, gem1_rgmii_rx_c
    * lk- (RX RGMII clock)
    *  PSU_IOU_SLCR_MIO_PIN_44_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_44_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[3]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[3]- (8-bit Data bus) 2= s
    * d1, Input, sdio1_wp- (SD card write protect from connector) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_44_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[18]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[18]- (GPIO bank 1) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= spi1, Input, spi1_sclk_in- (SPI Clock) 4
    * = spi1, Output, spi1_sclk_out- (SPI Clock) 5= ttc1, Input, ttc1_clk_in-
    * (TTC Clock) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7=
    *  Not Used
    *  PSU_IOU_SLCR_MIO_PIN_44_L3_SEL                              0

    * Configures MIO Pin 44 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800B0, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_44_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_45 @ 0XFF1800B4

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Input, gem1_rgmii_rxd[
    * 0]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_45_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_45_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[4]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[4]- (8-bit Data bus) 2= s
    * d1, Input, sdio1_cd_n- (SD card detect from connector) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_45_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[19]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[19]- (GPIO bank 1) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= spi1, Output, spi1_n_ss_out[2]- (SPI M
    * aster Selects) 5= ttc1, Output, ttc1_wave_out- (TTC Waveform Clock) 6= u
    * a1, Input, ua1_rxd- (UART receiver serial input) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_45_L3_SEL                              0

    * Configures MIO Pin 45 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800B4, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_45_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_46 @ 0XFF1800B8

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Input, gem1_rgmii_rxd[
    * 1]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_46_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_46_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[5]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[5]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[0]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[0]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_46_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[20]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[20]- (GPIO bank 1) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi1, Output, spi1_n_ss_out[1]- (SPI Mast
    * er Selects) 5= ttc0, Input, ttc0_clk_in- (TTC Clock) 6= ua0, Input, ua0_
    * rxd- (UART receiver serial input) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_46_L3_SEL                              0

    * Configures MIO Pin 46 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800B8, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_46_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_47 @ 0XFF1800BC

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Input, gem1_rgmii_rxd[
    * 2]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_47_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_47_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[6]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[6]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[1]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[1]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_47_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[21]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[21]- (GPIO bank 1) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi1, Input, spi1_n_ss_in- (SPI Maste
    * r Selects) 4= spi1, Output, spi1_n_ss_out[0]- (SPI Master Selects) 5= tt
    * c0, Output, ttc0_wave_out- (TTC Waveform Clock) 6= ua0, Output, ua0_txd-
    *  (UART transmitter serial output) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_47_L3_SEL                              0

    * Configures MIO Pin 47 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800BC, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_47_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_48 @ 0XFF1800C0

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Input, gem1_rgmii_rxd[
    * 3]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_48_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_48_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[7]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[7]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[2]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[2]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_48_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[22]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[22]- (GPIO bank 1) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= spi1, Input, spi1_mi- (MISO signal) 4= s
    * pi1, Output, spi1_so- (MISO signal) 5= ttc3, Input, ttc3_clk_in- (TTC Cl
    * ock) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7= Not Us
    * ed
    *  PSU_IOU_SLCR_MIO_PIN_48_L3_SEL                              0

    * Configures MIO Pin 48 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800C0, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_48_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_49 @ 0XFF1800C4

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem1, Input, gem1_rgmii_rx_c
    * tl- (RX RGMII control )
    *  PSU_IOU_SLCR_MIO_PIN_49_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_49_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Output, sdio0_bus_pow-
    * (SD card bus power) 2= sd1, Input, sd1_data_in[3]- (8-bit Data bus) = sd
    * 1, Output, sdio1_data_out[3]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_49_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[23]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[23]- (GPIO bank 1) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= spi1, Output, spi1_mo- (MOSI signal) 4
    * = spi1, Input, spi1_si- (MOSI signal) 5= ttc3, Output, ttc3_wave_out- (T
    * TC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial input)
    * 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_49_L3_SEL                              0

    * Configures MIO Pin 49 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800C4, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_49_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_50 @ 0XFF1800C8

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem_tsu, Input, gem_tsu_clk-
    *  (TSU clock)
    *  PSU_IOU_SLCR_MIO_PIN_50_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_50_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sdio0_wp- (SD ca
    * rd write protect from connector) 2= sd1, Input, sd1_cmd_in- (Command Ind
    * icator) = sd1, Output, sdio1_cmd_out- (Command Indicator) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_50_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[24]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[24]- (GPIO bank 1) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= mdio1, Output, gem1_mdc- (MDIO Clock) 5=
    * ttc2, Input, ttc2_clk_in- (TTC Clock) 6= ua0, Input, ua0_rxd- (UART rece
    * iver serial input) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_50_L3_SEL                              0

    * Configures MIO Pin 50 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800C8, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_50_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_51 @ 0XFF1800CC

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem_tsu, Input, gem_tsu_clk-
    *  (TSU clock)
    *  PSU_IOU_SLCR_MIO_PIN_51_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_51_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= sd1, Output, sdi
    * o1_clk_out- (SDSDIO clock) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_51_L2_SEL                              2

    * Level 3 Mux Select 0= gpio1, Input, gpio_1_pin_in[25]- (GPIO bank 1) 0=
    * gpio1, Output, gpio_1_pin_out[25]- (GPIO bank 1) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= mdio1, Input, gem1_mdio_in- (MDIO Dat
    * a) 4= mdio1, Output, gem1_mdio_out- (MDIO Data) 5= ttc2, Output, ttc2_wa
    * ve_out- (TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter
    * serial output) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_51_L3_SEL                              0

    * Configures MIO Pin 51 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800CC, 0x000000FEU ,0x00000010U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_51_OFFSET, 0x000000FEU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_52 @ 0XFF1800D0

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Output, gem2_rgmii_tx_
    * clk- (TX RGMII clock)
    *  PSU_IOU_SLCR_MIO_PIN_52_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_clk_i
    * n- (ULPI Clock)
    *  PSU_IOU_SLCR_MIO_PIN_52_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_52_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[0]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[0]- (GPIO bank 2) 1= can1, Output, can1_phy
    * _tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i2c
    * 1, Output, i2c1_scl_out- (SCL signal) 3= pjtag, Input, pjtag_tck- (PJTAG
    *  TCK) 4= spi0, Input, spi0_sclk_in- (SPI Clock) 4= spi0, Output, spi0_sc
    * lk_out- (SPI Clock) 5= ttc1, Input, ttc1_clk_in- (TTC Clock) 6= ua1, Out
    * put, ua1_txd- (UART transmitter serial output) 7= trace, Output, trace_c
    * lk- (Trace Port Clock)
    *  PSU_IOU_SLCR_MIO_PIN_52_L3_SEL                              0

    * Configures MIO Pin 52 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800D0, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_52_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_53 @ 0XFF1800D4

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Output, gem2_rgmii_txd
    * [0]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_53_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_dir-
    * (Data bus direction control)
    *  PSU_IOU_SLCR_MIO_PIN_53_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_53_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[1]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[1]- (GPIO bank 2) 1= can1, Input, can1_phy_
    * rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2c1
    * , Output, i2c1_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tdi- (PJTAG
    * TDI) 4= spi0, Output, spi0_n_ss_out[2]- (SPI Master Selects) 5= ttc1, Ou
    * tput, ttc1_wave_out- (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART
    * receiver serial input) 7= trace, Output, trace_ctl- (Trace Port Control
    * Signal)
    *  PSU_IOU_SLCR_MIO_PIN_53_L3_SEL                              0

    * Configures MIO Pin 53 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800D4, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_53_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_54 @ 0XFF1800D8

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Output, gem2_rgmii_txd
    * [1]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_54_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_rx_da
    * ta[2]- (ULPI data bus) 1= usb0, Output, usb0_ulpi_tx_data[2]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_54_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_54_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[2]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[2]- (GPIO bank 2) 1= can0, Input, can0_phy_
    * rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2c0
    * , Output, i2c0_scl_out- (SCL signal) 3= pjtag, Output, pjtag_tdo- (PJTAG
    *  TDO) 4= spi0, Output, spi0_n_ss_out[1]- (SPI Master Selects) 5= ttc0, I
    * nput, ttc0_clk_in- (TTC Clock) 6= ua0, Input, ua0_rxd- (UART receiver se
    * rial input) 7= trace, Output, tracedq[0]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_54_L3_SEL                              0

    * Configures MIO Pin 54 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800D8, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_54_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_55 @ 0XFF1800DC

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Output, gem2_rgmii_txd
    * [2]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_55_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_nxt-
    * (Data flow control signal from the PHY)
    *  PSU_IOU_SLCR_MIO_PIN_55_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_55_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[3]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[3]- (GPIO bank 2) 1= can0, Output, can0_phy
    * _tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i2c
    * 0, Output, i2c0_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tms- (PJTAG
    *  TMS) 4= spi0, Input, spi0_n_ss_in- (SPI Master Selects) 4= spi0, Output
    * , spi0_n_ss_out[0]- (SPI Master Selects) 5= ttc0, Output, ttc0_wave_out-
    *  (TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter serial
    * output) 7= trace, Output, tracedq[1]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_55_L3_SEL                              0

    * Configures MIO Pin 55 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800DC, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_55_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_56 @ 0XFF1800E0

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Output, gem2_rgmii_txd
    * [3]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_56_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_rx_da
    * ta[0]- (ULPI data bus) 1= usb0, Output, usb0_ulpi_tx_data[0]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_56_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_56_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[4]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[4]- (GPIO bank 2) 1= can1, Output, can1_phy
    * _tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i2c
    * 1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (Wa
    * tch Dog Timer Input clock) 4= spi0, Input, spi0_mi- (MISO signal) 4= spi
    * 0, Output, spi0_so- (MISO signal) 5= ttc3, Input, ttc3_clk_in- (TTC Cloc
    * k) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7= trace, O
    * utput, tracedq[2]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_56_L3_SEL                              0

    * Configures MIO Pin 56 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800E0, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_56_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_57 @ 0XFF1800E4

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Output, gem2_rgmii_tx_
    * ctl- (TX RGMII control)
    *  PSU_IOU_SLCR_MIO_PIN_57_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_rx_da
    * ta[1]- (ULPI data bus) 1= usb0, Output, usb0_ulpi_tx_data[1]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_57_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_57_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[5]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[5]- (GPIO bank 2) 1= can1, Input, can1_phy_
    * rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2c1
    * , Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out- (W
    * atch Dog Timer Output clock) 4= spi0, Output, spi0_mo- (MOSI signal) 4=
    * spi0, Input, spi0_si- (MOSI signal) 5= ttc3, Output, ttc3_wave_out- (TTC
    *  Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial input) 7=
    *  trace, Output, tracedq[3]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_57_L3_SEL                              0

    * Configures MIO Pin 57 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800E4, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_57_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_58 @ 0XFF1800E8

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Input, gem2_rgmii_rx_c
    * lk- (RX RGMII clock)
    *  PSU_IOU_SLCR_MIO_PIN_58_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Output, usb0_ulpi_stp-
    *  (Asserted to end or interrupt transfers)
    *  PSU_IOU_SLCR_MIO_PIN_58_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_58_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[6]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[6]- (GPIO bank 2) 1= can0, Input, can0_phy_
    * rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2c0
    * , Output, i2c0_scl_out- (SCL signal) 3= pjtag, Input, pjtag_tck- (PJTAG
    * TCK) 4= spi1, Input, spi1_sclk_in- (SPI Clock) 4= spi1, Output, spi1_scl
    * k_out- (SPI Clock) 5= ttc2, Input, ttc2_clk_in- (TTC Clock) 6= ua0, Inpu
    * t, ua0_rxd- (UART receiver serial input) 7= trace, Output, tracedq[4]- (
    * Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_58_L3_SEL                              0

    * Configures MIO Pin 58 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800E8, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_58_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_59 @ 0XFF1800EC

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Input, gem2_rgmii_rxd[
    * 0]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_59_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_rx_da
    * ta[3]- (ULPI data bus) 1= usb0, Output, usb0_ulpi_tx_data[3]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_59_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_59_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[7]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[7]- (GPIO bank 2) 1= can0, Output, can0_phy
    * _tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i2c
    * 0, Output, i2c0_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tdi- (PJTAG
    *  TDI) 4= spi1, Output, spi1_n_ss_out[2]- (SPI Master Selects) 5= ttc2, O
    * utput, ttc2_wave_out- (TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UAR
    * T transmitter serial output) 7= trace, Output, tracedq[5]- (Trace Port D
    * atabus)
    *  PSU_IOU_SLCR_MIO_PIN_59_L3_SEL                              0

    * Configures MIO Pin 59 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800EC, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_59_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_60 @ 0XFF1800F0

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Input, gem2_rgmii_rxd[
    * 1]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_60_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_rx_da
    * ta[4]- (ULPI data bus) 1= usb0, Output, usb0_ulpi_tx_data[4]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_60_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_60_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[8]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[8]- (GPIO bank 2) 1= can1, Output, can1_phy
    * _tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i2c
    * 1, Output, i2c1_scl_out- (SCL signal) 3= pjtag, Output, pjtag_tdo- (PJTA
    * G TDO) 4= spi1, Output, spi1_n_ss_out[1]- (SPI Master Selects) 5= ttc1,
    * Input, ttc1_clk_in- (TTC Clock) 6= ua1, Output, ua1_txd- (UART transmitt
    * er serial output) 7= trace, Output, tracedq[6]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_60_L3_SEL                              0

    * Configures MIO Pin 60 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800F0, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_60_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_61 @ 0XFF1800F4

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Input, gem2_rgmii_rxd[
    * 2]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_61_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_rx_da
    * ta[5]- (ULPI data bus) 1= usb0, Output, usb0_ulpi_tx_data[5]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_61_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_61_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[9]- (GPIO bank 2) 0= g
    * pio2, Output, gpio_2_pin_out[9]- (GPIO bank 2) 1= can1, Input, can1_phy_
    * rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2c1
    * , Output, i2c1_sda_out- (SDA signal) 3= pjtag, Input, pjtag_tms- (PJTAG
    * TMS) 4= spi1, Input, spi1_n_ss_in- (SPI Master Selects) 4= spi1, Output,
    *  spi1_n_ss_out[0]- (SPI Master Selects) 5= ttc1, Output, ttc1_wave_out-
    * (TTC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial input
    * ) 7= trace, Output, tracedq[7]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_61_L3_SEL                              0

    * Configures MIO Pin 61 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800F4, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_61_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_62 @ 0XFF1800F8

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Input, gem2_rgmii_rxd[
    * 3]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_62_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_rx_da
    * ta[6]- (ULPI data bus) 1= usb0, Output, usb0_ulpi_tx_data[6]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_62_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_62_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[10]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[10]- (GPIO bank 2) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi1, Input, spi1_mi- (MISO signal) 4= sp
    * i1, Output, spi1_so- (MISO signal) 5= ttc0, Input, ttc0_clk_in- (TTC Clo
    * ck) 6= ua0, Input, ua0_rxd- (UART receiver serial input) 7= trace, Outpu
    * t, tracedq[8]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_62_L3_SEL                              0

    * Configures MIO Pin 62 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800F8, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_62_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_63 @ 0XFF1800FC

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem2, Input, gem2_rgmii_rx_c
    * tl- (RX RGMII control )
    *  PSU_IOU_SLCR_MIO_PIN_63_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb0, Input, usb0_ulpi_rx_da
    * ta[7]- (ULPI data bus) 1= usb0, Output, usb0_ulpi_tx_data[7]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_63_L1_SEL                              1

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= Not Used 3= Not
    * Used
    *  PSU_IOU_SLCR_MIO_PIN_63_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[11]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[11]- (GPIO bank 2) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi1, Output, spi1_mo- (MOSI signal)
    * 4= spi1, Input, spi1_si- (MOSI signal) 5= ttc0, Output, ttc0_wave_out- (
    * TTC Waveform Clock) 6= ua0, Output, ua0_txd- (UART transmitter serial ou
    * tput) 7= trace, Output, tracedq[9]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_63_L3_SEL                              0

    * Configures MIO Pin 63 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF1800FC, 0x000000FEU ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_63_OFFSET, 0x000000FEU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_64 @ 0XFF180100

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Output, gem3_rgmii_tx_
    * clk- (TX RGMII clock)
    *  PSU_IOU_SLCR_MIO_PIN_64_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_clk_i
    * n- (ULPI Clock)
    *  PSU_IOU_SLCR_MIO_PIN_64_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Output, sdio0_clk_out-
    * (SDSDIO clock) 2= Not Used 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_64_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[12]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[12]- (GPIO bank 2) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= spi0, Input, spi0_sclk_in- (SPI Clock) 4
    * = spi0, Output, spi0_sclk_out- (SPI Clock) 5= ttc3, Input, ttc3_clk_in-
    * (TTC Clock) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7=
    *  trace, Output, tracedq[10]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_64_L3_SEL                              0

    * Configures MIO Pin 64 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180100, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_64_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_65 @ 0XFF180104

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Output, gem3_rgmii_txd
    * [0]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_65_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_dir-
    * (Data bus direction control)
    *  PSU_IOU_SLCR_MIO_PIN_65_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sdio0_cd_n- (SD
    * card detect from connector) 2= Not Used 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_65_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[13]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[13]- (GPIO bank 2) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= spi0, Output, spi0_n_ss_out[2]- (SPI M
    * aster Selects) 5= ttc3, Output, ttc3_wave_out- (TTC Waveform Clock) 6= u
    * a1, Input, ua1_rxd- (UART receiver serial input) 7= trace, Output, trace
    * dq[11]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_65_L3_SEL                              0

    * Configures MIO Pin 65 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180104, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_65_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_66 @ 0XFF180108

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Output, gem3_rgmii_txd
    * [1]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_66_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_rx_da
    * ta[2]- (ULPI data bus) 1= usb1, Output, usb1_ulpi_tx_data[2]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_66_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_cmd_in- (Com
    * mand Indicator) = sd0, Output, sdio0_cmd_out- (Command Indicator) 2= Not
    *  Used 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_66_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[14]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[14]- (GPIO bank 2) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi0, Output, spi0_n_ss_out[1]- (SPI Mast
    * er Selects) 5= ttc2, Input, ttc2_clk_in- (TTC Clock) 6= ua0, Input, ua0_
    * rxd- (UART receiver serial input) 7= trace, Output, tracedq[12]- (Trace
    * Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_66_L3_SEL                              0

    * Configures MIO Pin 66 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180108, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_66_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_67 @ 0XFF18010C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Output, gem3_rgmii_txd
    * [2]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_67_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_nxt-
    * (Data flow control signal from the PHY)
    *  PSU_IOU_SLCR_MIO_PIN_67_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[0]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[0]- (8-bit Data bus) 2= N
    * ot Used 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_67_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[15]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[15]- (GPIO bank 2) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi0, Input, spi0_n_ss_in- (SPI Maste
    * r Selects) 4= spi0, Output, spi0_n_ss_out[0]- (SPI Master Selects) 5= tt
    * c2, Output, ttc2_wave_out- (TTC Waveform Clock) 6= ua0, Output, ua0_txd-
    *  (UART transmitter serial output) 7= trace, Output, tracedq[13]- (Trace
    * Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_67_L3_SEL                              0

    * Configures MIO Pin 67 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18010C, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_67_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_68 @ 0XFF180110

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Output, gem3_rgmii_txd
    * [3]- (TX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_68_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_rx_da
    * ta[0]- (ULPI data bus) 1= usb1, Output, usb1_ulpi_tx_data[0]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_68_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[1]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[1]- (8-bit Data bus) 2= N
    * ot Used 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_68_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[16]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[16]- (GPIO bank 2) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= spi0, Input, spi0_mi- (MISO signal) 4= s
    * pi0, Output, spi0_so- (MISO signal) 5= ttc1, Input, ttc1_clk_in- (TTC Cl
    * ock) 6= ua1, Output, ua1_txd- (UART transmitter serial output) 7= trace,
    *  Output, tracedq[14]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_68_L3_SEL                              0

    * Configures MIO Pin 68 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180110, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_68_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_69 @ 0XFF180114

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Output, gem3_rgmii_tx_
    * ctl- (TX RGMII control)
    *  PSU_IOU_SLCR_MIO_PIN_69_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_rx_da
    * ta[1]- (ULPI data bus) 1= usb1, Output, usb1_ulpi_tx_data[1]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_69_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[2]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[2]- (8-bit Data bus) 2= s
    * d1, Input, sdio1_wp- (SD card write protect from connector) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_69_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[17]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[17]- (GPIO bank 2) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= spi0, Output, spi0_mo- (MOSI signal) 4
    * = spi0, Input, spi0_si- (MOSI signal) 5= ttc1, Output, ttc1_wave_out- (T
    * TC Waveform Clock) 6= ua1, Input, ua1_rxd- (UART receiver serial input)
    * 7= trace, Output, tracedq[15]- (Trace Port Databus)
    *  PSU_IOU_SLCR_MIO_PIN_69_L3_SEL                              0

    * Configures MIO Pin 69 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180114, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_69_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_70 @ 0XFF180118

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Input, gem3_rgmii_rx_c
    * lk- (RX RGMII clock)
    *  PSU_IOU_SLCR_MIO_PIN_70_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Output, usb1_ulpi_stp-
    *  (Asserted to end or interrupt transfers)
    *  PSU_IOU_SLCR_MIO_PIN_70_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[3]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[3]- (8-bit Data bus) 2= s
    * d1, Output, sdio1_bus_pow- (SD card bus power) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_70_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[18]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[18]- (GPIO bank 2) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi1, Input, spi1_sclk_in- (SPI Clock) 4=
    *  spi1, Output, spi1_sclk_out- (SPI Clock) 5= ttc0, Input, ttc0_clk_in- (
    * TTC Clock) 6= ua0, Input, ua0_rxd- (UART receiver serial input) 7= Not U
    * sed
    *  PSU_IOU_SLCR_MIO_PIN_70_L3_SEL                              0

    * Configures MIO Pin 70 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180118, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_70_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_71 @ 0XFF18011C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Input, gem3_rgmii_rxd[
    * 0]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_71_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_rx_da
    * ta[3]- (ULPI data bus) 1= usb1, Output, usb1_ulpi_tx_data[3]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_71_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[4]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[4]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[0]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[0]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_71_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[19]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[19]- (GPIO bank 2) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi1, Output, spi1_n_ss_out[2]- (SPI
    * Master Selects) 5= ttc0, Output, ttc0_wave_out- (TTC Waveform Clock) 6=
    * ua0, Output, ua0_txd- (UART transmitter serial output) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_71_L3_SEL                              0

    * Configures MIO Pin 71 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18011C, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_71_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_72 @ 0XFF180120

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Input, gem3_rgmii_rxd[
    * 1]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_72_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_rx_da
    * ta[4]- (ULPI data bus) 1= usb1, Output, usb1_ulpi_tx_data[4]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_72_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[5]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[5]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[1]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[1]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_72_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[20]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[20]- (GPIO bank 2) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= swdt1, Input, swdt1_clk_in- (
    * Watch Dog Timer Input clock) 4= spi1, Output, spi1_n_ss_out[1]- (SPI Mas
    * ter Selects) 5= Not Used 6= ua1, Output, ua1_txd- (UART transmitter seri
    * al output) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_72_L3_SEL                              0

    * Configures MIO Pin 72 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180120, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_72_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_73 @ 0XFF180124

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Input, gem3_rgmii_rxd[
    * 2]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_73_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_rx_da
    * ta[5]- (ULPI data bus) 1= usb1, Output, usb1_ulpi_tx_data[5]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_73_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[6]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[6]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[2]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[2]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_73_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[21]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[21]- (GPIO bank 2) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= swdt1, Output, swdt1_rst_out-
    * (Watch Dog Timer Output clock) 4= spi1, Input, spi1_n_ss_in- (SPI Master
    *  Selects) 4= spi1, Output, spi1_n_ss_out[0]- (SPI Master Selects) 5= Not
    *  Used 6= ua1, Input, ua1_rxd- (UART receiver serial input) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_73_L3_SEL                              0

    * Configures MIO Pin 73 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180124, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_73_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_74 @ 0XFF180128

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Input, gem3_rgmii_rxd[
    * 3]- (RX RGMII data)
    *  PSU_IOU_SLCR_MIO_PIN_74_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_rx_da
    * ta[6]- (ULPI data bus) 1= usb1, Output, usb1_ulpi_tx_data[6]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_74_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sd0_data_in[7]-
    * (8-bit Data bus) = sd0, Output, sdio0_data_out[7]- (8-bit Data bus) 2= s
    * d1, Input, sd1_data_in[3]- (8-bit Data bus) = sd1, Output, sdio1_data_ou
    * t[3]- (8-bit Data bus) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_74_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[22]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[22]- (GPIO bank 2) 1= can0, Input, can0_ph
    * y_rx- (Can RX signal) 2= i2c0, Input, i2c0_scl_input- (SCL signal) 2= i2
    * c0, Output, i2c0_scl_out- (SCL signal) 3= swdt0, Input, swdt0_clk_in- (W
    * atch Dog Timer Input clock) 4= spi1, Input, spi1_mi- (MISO signal) 4= sp
    * i1, Output, spi1_so- (MISO signal) 5= Not Used 6= ua0, Input, ua0_rxd- (
    * UART receiver serial input) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_74_L3_SEL                              0

    * Configures MIO Pin 74 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180128, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_74_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_75 @ 0XFF18012C

    * Level 0 Mux Select 0= Level 1 Mux Output 1= gem3, Input, gem3_rgmii_rx_c
    * tl- (RX RGMII control )
    *  PSU_IOU_SLCR_MIO_PIN_75_L0_SEL                              1

    * Level 1 Mux Select 0= Level 2 Mux Output 1= usb1, Input, usb1_ulpi_rx_da
    * ta[7]- (ULPI data bus) 1= usb1, Output, usb1_ulpi_tx_data[7]- (ULPI data
    *  bus)
    *  PSU_IOU_SLCR_MIO_PIN_75_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Output, sdio0_bus_pow-
    * (SD card bus power) 2= sd1, Input, sd1_cmd_in- (Command Indicator) = sd1
    * , Output, sdio1_cmd_out- (Command Indicator) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_75_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[23]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[23]- (GPIO bank 2) 1= can0, Output, can0_p
    * hy_tx- (Can TX signal) 2= i2c0, Input, i2c0_sda_input- (SDA signal) 2= i
    * 2c0, Output, i2c0_sda_out- (SDA signal) 3= swdt0, Output, swdt0_rst_out-
    *  (Watch Dog Timer Output clock) 4= spi1, Output, spi1_mo- (MOSI signal)
    * 4= spi1, Input, spi1_si- (MOSI signal) 5= Not Used 6= ua0, Output, ua0_t
    * xd- (UART transmitter serial output) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_75_L3_SEL                              0

    * Configures MIO Pin 75 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF18012C, 0x000000FEU ,0x00000002U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_75_OFFSET, 0x000000FEU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_76 @ 0XFF180130

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_76_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_76_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= sd0, Input, sdio0_wp- (SD ca
    * rd write protect from connector) 2= sd1, Output, sdio1_clk_out- (SDSDIO
    * clock) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_76_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[24]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[24]- (GPIO bank 2) 1= can1, Output, can1_p
    * hy_tx- (Can TX signal) 2= i2c1, Input, i2c1_scl_input- (SCL signal) 2= i
    * 2c1, Output, i2c1_scl_out- (SCL signal) 3= mdio0, Output, gem0_mdc- (MDI
    * O Clock) 4= mdio1, Output, gem1_mdc- (MDIO Clock) 5= mdio2, Output, gem2
    * _mdc- (MDIO Clock) 6= mdio3, Output, gem3_mdc- (MDIO Clock) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_76_L3_SEL                              6

    * Configures MIO Pin 76 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180130, 0x000000FEU ,0x000000C0U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_76_OFFSET, 0x000000FEU, 0x000000C0U);
/*##################################################################### */

    /*
    * Register : MIO_PIN_77 @ 0XFF180134

    * Level 0 Mux Select 0= Level 1 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_77_L0_SEL                              0

    * Level 1 Mux Select 0= Level 2 Mux Output 1= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_77_L1_SEL                              0

    * Level 2 Mux Select 0= Level 3 Mux Output 1= Not Used 2= sd1, Input, sdio
    * 1_cd_n- (SD card detect from connector) 3= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_77_L2_SEL                              0

    * Level 3 Mux Select 0= gpio2, Input, gpio_2_pin_in[25]- (GPIO bank 2) 0=
    * gpio2, Output, gpio_2_pin_out[25]- (GPIO bank 2) 1= can1, Input, can1_ph
    * y_rx- (Can RX signal) 2= i2c1, Input, i2c1_sda_input- (SDA signal) 2= i2
    * c1, Output, i2c1_sda_out- (SDA signal) 3= mdio0, Input, gem0_mdio_in- (M
    * DIO Data) 3= mdio0, Output, gem0_mdio_out- (MDIO Data) 4= mdio1, Input,
    * gem1_mdio_in- (MDIO Data) 4= mdio1, Output, gem1_mdio_out- (MDIO Data) 5
    * = mdio2, Input, gem2_mdio_in- (MDIO Data) 5= mdio2, Output, gem2_mdio_ou
    * t- (MDIO Data) 6= mdio3, Input, gem3_mdio_in- (MDIO Data) 6= mdio3, Outp
    * ut, gem3_mdio_out- (MDIO Data) 7= Not Used
    *  PSU_IOU_SLCR_MIO_PIN_77_L3_SEL                              6

    * Configures MIO Pin 77 peripheral interface mapping
    * (OFFSET, MASK, VALUE)      (0XFF180134, 0x000000FEU ,0x000000C0U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_PIN_77_OFFSET, 0x000000FEU, 0x000000C0U);
/*##################################################################### */

    /*
    * Register : MIO_MST_TRI0 @ 0XFF180204

    * Master Tri-state Enable for pin 0, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_00_TRI                        0

    * Master Tri-state Enable for pin 1, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_01_TRI                        0

    * Master Tri-state Enable for pin 2, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_02_TRI                        0

    * Master Tri-state Enable for pin 3, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_03_TRI                        0

    * Master Tri-state Enable for pin 4, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_04_TRI                        0

    * Master Tri-state Enable for pin 5, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_05_TRI                        0

    * Master Tri-state Enable for pin 6, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_06_TRI                        0

    * Master Tri-state Enable for pin 7, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_07_TRI                        0

    * Master Tri-state Enable for pin 8, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_08_TRI                        0

    * Master Tri-state Enable for pin 9, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_09_TRI                        0

    * Master Tri-state Enable for pin 10, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_10_TRI                        0

    * Master Tri-state Enable for pin 11, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_11_TRI                        0

    * Master Tri-state Enable for pin 12, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_12_TRI                        0

    * Master Tri-state Enable for pin 13, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_13_TRI                        0

    * Master Tri-state Enable for pin 14, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_14_TRI                        0

    * Master Tri-state Enable for pin 15, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_15_TRI                        0

    * Master Tri-state Enable for pin 16, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_16_TRI                        0

    * Master Tri-state Enable for pin 17, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_17_TRI                        0

    * Master Tri-state Enable for pin 18, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_18_TRI                        1

    * Master Tri-state Enable for pin 19, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_19_TRI                        0

    * Master Tri-state Enable for pin 20, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_20_TRI                        0

    * Master Tri-state Enable for pin 21, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_21_TRI                        1

    * Master Tri-state Enable for pin 22, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_22_TRI                        0

    * Master Tri-state Enable for pin 23, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_23_TRI                        0

    * Master Tri-state Enable for pin 24, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_24_TRI                        0

    * Master Tri-state Enable for pin 25, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_25_TRI                        1

    * Master Tri-state Enable for pin 26, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_26_TRI                        0

    * Master Tri-state Enable for pin 27, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_27_TRI                        0

    * Master Tri-state Enable for pin 28, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_28_TRI                        1

    * Master Tri-state Enable for pin 29, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_29_TRI                        0

    * Master Tri-state Enable for pin 30, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_30_TRI                        1

    * Master Tri-state Enable for pin 31, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI0_PIN_31_TRI                        0

    * MIO pin Tri-state Enables, 31:0
    * (OFFSET, MASK, VALUE)      (0XFF180204, 0xFFFFFFFFU ,0x52240000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_MST_TRI0_OFFSET,
		0xFFFFFFFFU, 0x52240000U);
/*##################################################################### */

    /*
    * Register : MIO_MST_TRI1 @ 0XFF180208

    * Master Tri-state Enable for pin 32, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_32_TRI                        0

    * Master Tri-state Enable for pin 33, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_33_TRI                        0

    * Master Tri-state Enable for pin 34, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_34_TRI                        0

    * Master Tri-state Enable for pin 35, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_35_TRI                        0

    * Master Tri-state Enable for pin 36, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_36_TRI                        0

    * Master Tri-state Enable for pin 37, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_37_TRI                        0

    * Master Tri-state Enable for pin 38, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_38_TRI                        0

    * Master Tri-state Enable for pin 39, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_39_TRI                        0

    * Master Tri-state Enable for pin 40, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_40_TRI                        0

    * Master Tri-state Enable for pin 41, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_41_TRI                        0

    * Master Tri-state Enable for pin 42, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_42_TRI                        0

    * Master Tri-state Enable for pin 43, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_43_TRI                        0

    * Master Tri-state Enable for pin 44, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_44_TRI                        1

    * Master Tri-state Enable for pin 45, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_45_TRI                        1

    * Master Tri-state Enable for pin 46, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_46_TRI                        0

    * Master Tri-state Enable for pin 47, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_47_TRI                        0

    * Master Tri-state Enable for pin 48, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_48_TRI                        0

    * Master Tri-state Enable for pin 49, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_49_TRI                        0

    * Master Tri-state Enable for pin 50, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_50_TRI                        0

    * Master Tri-state Enable for pin 51, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_51_TRI                        0

    * Master Tri-state Enable for pin 52, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_52_TRI                        1

    * Master Tri-state Enable for pin 53, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_53_TRI                        1

    * Master Tri-state Enable for pin 54, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_54_TRI                        0

    * Master Tri-state Enable for pin 55, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_55_TRI                        1

    * Master Tri-state Enable for pin 56, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_56_TRI                        0

    * Master Tri-state Enable for pin 57, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_57_TRI                        0

    * Master Tri-state Enable for pin 58, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_58_TRI                        0

    * Master Tri-state Enable for pin 59, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_59_TRI                        0

    * Master Tri-state Enable for pin 60, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_60_TRI                        0

    * Master Tri-state Enable for pin 61, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_61_TRI                        0

    * Master Tri-state Enable for pin 62, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_62_TRI                        0

    * Master Tri-state Enable for pin 63, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI1_PIN_63_TRI                        0

    * MIO pin Tri-state Enables, 63:32
    * (OFFSET, MASK, VALUE)      (0XFF180208, 0xFFFFFFFFU ,0x00B03000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_MST_TRI1_OFFSET,
		0xFFFFFFFFU, 0x00B03000U);
/*##################################################################### */

    /*
    * Register : MIO_MST_TRI2 @ 0XFF18020C

    * Master Tri-state Enable for pin 64, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_64_TRI                        0

    * Master Tri-state Enable for pin 65, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_65_TRI                        0

    * Master Tri-state Enable for pin 66, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_66_TRI                        0

    * Master Tri-state Enable for pin 67, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_67_TRI                        0

    * Master Tri-state Enable for pin 68, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_68_TRI                        0

    * Master Tri-state Enable for pin 69, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_69_TRI                        0

    * Master Tri-state Enable for pin 70, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_70_TRI                        1

    * Master Tri-state Enable for pin 71, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_71_TRI                        1

    * Master Tri-state Enable for pin 72, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_72_TRI                        1

    * Master Tri-state Enable for pin 73, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_73_TRI                        1

    * Master Tri-state Enable for pin 74, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_74_TRI                        1

    * Master Tri-state Enable for pin 75, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_75_TRI                        1

    * Master Tri-state Enable for pin 76, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_76_TRI                        0

    * Master Tri-state Enable for pin 77, active high
    *  PSU_IOU_SLCR_MIO_MST_TRI2_PIN_77_TRI                        0

    * MIO pin Tri-state Enables, 77:64
    * (OFFSET, MASK, VALUE)      (0XFF18020C, 0x00003FFFU ,0x00000FC0U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_MST_TRI2_OFFSET,
		0x00003FFFU, 0x00000FC0U);
/*##################################################################### */

    /*
    * Register : bank0_ctrl0 @ 0XFF180138

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_0                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_1                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_2                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_3                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_4                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_5                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_6                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_7                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_8                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_9                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_10                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_11                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_12                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_13                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_14                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_15                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_16                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_17                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_18                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_19                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_20                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_21                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_22                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_23                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_24                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL0_DRIVE0_BIT_25                      1

    * Drive0 control to MIO Bank 0 - control MIO[25:0]
    * (OFFSET, MASK, VALUE)      (0XFF180138, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK0_CTRL0_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank0_ctrl1 @ 0XFF18013C

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_0                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_1                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_2                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_3                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_4                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_5                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_6                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_7                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_8                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_9                       1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_10                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_11                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_12                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_13                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_14                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_15                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_16                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_17                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_18                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_19                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_20                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_21                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_22                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_23                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_24                      1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL1_DRIVE1_BIT_25                      1

    * Drive1 control to MIO Bank 0 - control MIO[25:0]
    * (OFFSET, MASK, VALUE)      (0XFF18013C, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK0_CTRL1_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank0_ctrl3 @ 0XFF180140

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_0               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_1               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_2               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_3               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_4               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_5               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_6               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_7               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_8               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_9               0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_10              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_11              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_12              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_13              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_14              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_15              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_16              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_17              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_18              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_19              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_20              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_21              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_22              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_23              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_24              0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL3_SCHMITT_CMOS_N_BIT_25              0

    * Selects either Schmitt or CMOS input for MIO Bank 0 - control MIO[25:0]
    * (OFFSET, MASK, VALUE)      (0XFF180140, 0x03FFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_BANK0_CTRL3_OFFSET,
		0x03FFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : bank0_ctrl4 @ 0XFF180144

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_0              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_1              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_2              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_3              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_4              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_5              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_6              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_7              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_8              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_9              1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_10             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_11             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_12             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_13             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_14             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_15             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_16             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_17             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_18             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_19             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_20             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_21             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_22             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_23             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_24             1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL4_PULL_HIGH_LOW_N_BIT_25             1

    * When mio_bank0_pull_enable is set, this selects pull up or pull down for
    *  MIO Bank 0 - control MIO[25:0]
    * (OFFSET, MASK, VALUE)      (0XFF180144, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK0_CTRL4_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank0_ctrl5 @ 0XFF180148

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_0                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_1                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_2                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_3                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_4                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_5                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_6                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_7                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_8                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_9                  1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_10                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_11                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_12                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_13                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_14                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_15                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_16                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_17                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_18                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_19                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_20                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_21                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_22                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_23                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_24                 1

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL5_PULL_ENABLE_BIT_25                 1

    * When set, this enables mio_bank0_pullupdown to selects pull up or pull d
    * own for MIO Bank 0 - control MIO[25:0]
    * (OFFSET, MASK, VALUE)      (0XFF180148, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK0_CTRL5_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank0_ctrl6 @ 0XFF18014C

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_0             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_1             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_2             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_3             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_4             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_5             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_6             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_7             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_8             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_9             0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_10            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_11            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_12            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_13            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_14            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_15            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_16            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_17            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_18            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_19            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_20            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_21            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_22            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_23            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_24            0

    * Each bit applies to a single IO. Bit 0 for MIO[0].
    *  PSU_IOU_SLCR_BANK0_CTRL6_SLOW_FAST_SLEW_N_BIT_25            0

    * Slew rate control to MIO Bank 0 - control MIO[25:0]
    * (OFFSET, MASK, VALUE)      (0XFF18014C, 0x03FFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_BANK0_CTRL6_OFFSET,
		0x03FFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : bank1_ctrl0 @ 0XFF180154

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_0                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_1                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_2                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_3                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_4                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_5                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_6                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_7                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_8                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_9                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_10                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_11                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_12                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_13                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_14                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_15                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_16                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_17                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_18                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_19                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_20                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_21                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_22                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_23                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_24                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL0_DRIVE0_BIT_25                      1

    * Drive0 control to MIO Bank 1 - control MIO[51:26]
    * (OFFSET, MASK, VALUE)      (0XFF180154, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK1_CTRL0_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank1_ctrl1 @ 0XFF180158

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_0                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_1                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_2                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_3                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_4                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_5                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_6                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_7                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_8                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_9                       1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_10                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_11                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_12                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_13                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_14                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_15                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_16                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_17                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_18                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_19                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_20                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_21                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_22                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_23                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_24                      1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL1_DRIVE1_BIT_25                      1

    * Drive1 control to MIO Bank 1 - control MIO[51:26]
    * (OFFSET, MASK, VALUE)      (0XFF180158, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK1_CTRL1_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank1_ctrl3 @ 0XFF18015C

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_0               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_1               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_2               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_3               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_4               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_5               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_6               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_7               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_8               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_9               0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_10              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_11              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_12              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_13              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_14              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_15              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_16              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_17              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_18              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_19              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_20              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_21              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_22              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_23              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_24              0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL3_SCHMITT_CMOS_N_BIT_25              0

    * Selects either Schmitt or CMOS input for MIO Bank 1 - control MIO[51:26]
    * (OFFSET, MASK, VALUE)      (0XFF18015C, 0x03FFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_BANK1_CTRL3_OFFSET,
		0x03FFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : bank1_ctrl4 @ 0XFF180160

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_0              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_1              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_2              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_3              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_4              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_5              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_6              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_7              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_8              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_9              1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_10             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_11             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_12             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_13             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_14             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_15             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_16             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_17             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_18             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_19             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_20             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_21             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_22             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_23             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_24             1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL4_PULL_HIGH_LOW_N_BIT_25             1

    * When mio_bank1_pull_enable is set, this selects pull up or pull down for
    *  MIO Bank 1 - control MIO[51:26]
    * (OFFSET, MASK, VALUE)      (0XFF180160, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK1_CTRL4_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank1_ctrl5 @ 0XFF180164

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_0                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_1                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_2                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_3                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_4                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_5                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_6                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_7                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_8                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_9                  1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_10                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_11                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_12                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_13                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_14                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_15                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_16                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_17                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_18                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_19                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_20                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_21                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_22                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_23                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_24                 1

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL5_PULL_ENABLE_BIT_25                 1

    * When set, this enables mio_bank1_pullupdown to selects pull up or pull d
    * own for MIO Bank 1 - control MIO[51:26]
    * (OFFSET, MASK, VALUE)      (0XFF180164, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK1_CTRL5_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank1_ctrl6 @ 0XFF180168

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_0             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_1             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_2             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_3             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_4             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_5             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_6             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_7             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_8             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_9             0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_10            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_11            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_12            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_13            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_14            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_15            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_16            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_17            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_18            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_19            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_20            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_21            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_22            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_23            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_24            0

    * Each bit applies to a single IO. Bit 0 for MIO[26].
    *  PSU_IOU_SLCR_BANK1_CTRL6_SLOW_FAST_SLEW_N_BIT_25            0

    * Slew rate control to MIO Bank 1 - control MIO[51:26]
    * (OFFSET, MASK, VALUE)      (0XFF180168, 0x03FFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_BANK1_CTRL6_OFFSET,
		0x03FFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : bank2_ctrl0 @ 0XFF180170

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_0                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_1                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_2                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_3                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_4                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_5                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_6                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_7                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_8                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_9                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_10                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_11                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_12                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_13                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_14                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_15                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_16                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_17                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_18                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_19                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_20                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_21                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_22                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_23                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_24                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL0_DRIVE0_BIT_25                      1

    * Drive0 control to MIO Bank 2 - control MIO[77:52]
    * (OFFSET, MASK, VALUE)      (0XFF180170, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK2_CTRL0_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank2_ctrl1 @ 0XFF180174

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_0                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_1                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_2                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_3                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_4                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_5                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_6                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_7                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_8                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_9                       1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_10                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_11                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_12                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_13                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_14                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_15                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_16                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_17                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_18                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_19                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_20                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_21                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_22                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_23                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_24                      1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL1_DRIVE1_BIT_25                      1

    * Drive1 control to MIO Bank 2 - control MIO[77:52]
    * (OFFSET, MASK, VALUE)      (0XFF180174, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK2_CTRL1_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank2_ctrl3 @ 0XFF180178

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_0               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_1               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_2               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_3               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_4               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_5               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_6               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_7               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_8               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_9               0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_10              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_11              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_12              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_13              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_14              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_15              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_16              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_17              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_18              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_19              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_20              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_21              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_22              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_23              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_24              0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL3_SCHMITT_CMOS_N_BIT_25              0

    * Selects either Schmitt or CMOS input for MIO Bank 2 - control MIO[77:52]
    * (OFFSET, MASK, VALUE)      (0XFF180178, 0x03FFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_BANK2_CTRL3_OFFSET,
		0x03FFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : bank2_ctrl4 @ 0XFF18017C

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_0              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_1              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_2              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_3              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_4              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_5              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_6              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_7              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_8              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_9              1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_10             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_11             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_12             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_13             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_14             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_15             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_16             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_17             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_18             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_19             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_20             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_21             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_22             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_23             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_24             1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL4_PULL_HIGH_LOW_N_BIT_25             1

    * When mio_bank2_pull_enable is set, this selects pull up or pull down for
    *  MIO Bank 2 - control MIO[77:52]
    * (OFFSET, MASK, VALUE)      (0XFF18017C, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK2_CTRL4_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank2_ctrl5 @ 0XFF180180

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_0                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_1                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_2                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_3                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_4                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_5                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_6                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_7                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_8                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_9                  1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_10                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_11                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_12                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_13                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_14                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_15                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_16                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_17                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_18                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_19                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_20                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_21                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_22                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_23                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_24                 1

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL5_PULL_ENABLE_BIT_25                 1

    * When set, this enables mio_bank2_pullupdown to selects pull up or pull d
    * own for MIO Bank 2 - control MIO[77:52]
    * (OFFSET, MASK, VALUE)      (0XFF180180, 0x03FFFFFFU ,0x03FFFFFFU)
    */
	PSU_Mask_Write(IOU_SLCR_BANK2_CTRL5_OFFSET,
		0x03FFFFFFU, 0x03FFFFFFU);
/*##################################################################### */

    /*
    * Register : bank2_ctrl6 @ 0XFF180184

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_0             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_1             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_2             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_3             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_4             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_5             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_6             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_7             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_8             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_9             0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_10            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_11            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_12            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_13            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_14            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_15            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_16            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_17            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_18            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_19            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_20            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_21            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_22            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_23            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_24            0

    * Each bit applies to a single IO. Bit 0 for MIO[52].
    *  PSU_IOU_SLCR_BANK2_CTRL6_SLOW_FAST_SLEW_N_BIT_25            0

    * Slew rate control to MIO Bank 2 - control MIO[77:52]
    * (OFFSET, MASK, VALUE)      (0XFF180184, 0x03FFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_BANK2_CTRL6_OFFSET,
		0x03FFFFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * LOOPBACK
    */
    /*
    * Register : MIO_LOOPBACK @ 0XFF180200

    * I2C Loopback Control. 0 = Connect I2C inputs according to MIO mapping. 1
    *  = Loop I2C 0 outputs to I2C 1 inputs, and I2C 1 outputs to I2C 0 inputs
    * .
    *  PSU_IOU_SLCR_MIO_LOOPBACK_I2C0_LOOP_I2C1                    0

    * CAN Loopback Control. 0 = Connect CAN inputs according to MIO mapping. 1
    *  = Loop CAN 0 Tx to CAN 1 Rx, and CAN 1 Tx to CAN 0 Rx.
    *  PSU_IOU_SLCR_MIO_LOOPBACK_CAN0_LOOP_CAN1                    0

    * UART Loopback Control. 0 = Connect UART inputs according to MIO mapping.
    *  1 = Loop UART 0 outputs to UART 1 inputs, and UART 1 outputs to UART 0
    * inputs. RXD/TXD cross-connected. RTS/CTS cross-connected. DSR, DTR, DCD
    * and RI not used.
    *  PSU_IOU_SLCR_MIO_LOOPBACK_UA0_LOOP_UA1                      0

    * SPI Loopback Control. 0 = Connect SPI inputs according to MIO mapping. 1
    *  = Loop SPI 0 outputs to SPI 1 inputs, and SPI 1 outputs to SPI 0 inputs
    * . The other SPI core will appear on the LS Slave Select.
    *  PSU_IOU_SLCR_MIO_LOOPBACK_SPI0_LOOP_SPI1                    0

    * Loopback function within MIO
    * (OFFSET, MASK, VALUE)      (0XFF180200, 0x0000000FU ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_MIO_LOOPBACK_OFFSET,
		0x0000000FU, 0x00000000U);
/*##################################################################### */


	return 1;
}
unsigned long psu_peripherals_init_data(void)
{
    /*
    * COHERENCY
    */
    /*
    * FPD RESET
    */
    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * PCIE config reset
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_CFG_RESET                      0

    * PCIE control block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_CTRL_RESET                     0

    * PCIE bridge block level reset (AXI interface)
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_BRIDGE_RESET                   0

    * Display Port block level reset (includes DPDMA)
    *  PSU_CRF_APB_RST_FPD_TOP_DP_RESET                            0

    * FPD WDT reset
    *  PSU_CRF_APB_RST_FPD_TOP_SWDT_RESET                          0

    * GDMA block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_GDMA_RESET                          0

    * Pixel Processor (submodule of GPU) block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_GPU_PP0_RESET                       0

    * Pixel Processor (submodule of GPU) block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_GPU_PP1_RESET                       0

    * GPU block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_GPU_RESET                           0

    * GT block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_GT_RESET                            0

    * Sata block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_SATA_RESET                          0

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x000F807EU ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x000F807EU, 0x00000000U);
/*##################################################################### */

    /*
    * RESET BLOCKS
    */
    /*
    * TIMESTAMP
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_TIMESTAMP_RESET                    0

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_IOU_CC_RESET                       0

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_ADMA_RESET                         0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x001A0000U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x001A0000U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : RST_LPD_TOP @ 0XFF5E023C

    * Reset entire full power domain.
    *  PSU_CRL_APB_RST_LPD_TOP_FPD_RESET                           0

    * LPD SWDT
    *  PSU_CRL_APB_RST_LPD_TOP_LPD_SWDT_RESET                      0

    * Sysmonitor reset
    *  PSU_CRL_APB_RST_LPD_TOP_SYSMON_RESET                        0

    * Real Time Clock reset
    *  PSU_CRL_APB_RST_LPD_TOP_RTC_RESET                           0

    * APM reset
    *  PSU_CRL_APB_RST_LPD_TOP_APM_RESET                           0

    * IPI reset
    *  PSU_CRL_APB_RST_LPD_TOP_IPI_RESET                           0

    * reset entire RPU power island
    *  PSU_CRL_APB_RST_LPD_TOP_RPU_PGE_RESET                       0

    * reset ocm
    *  PSU_CRL_APB_RST_LPD_TOP_OCM_RESET                           0

    * Software control register for the LPD block.
    * (OFFSET, MASK, VALUE)      (0XFF5E023C, 0x0093C018U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_TOP_OFFSET, 0x0093C018U, 0x00000000U);
/*##################################################################### */

    /*
    * ENET
    */
    /*
    * Register : RST_LPD_IOU0 @ 0XFF5E0230

    * GEM 3 reset
    *  PSU_CRL_APB_RST_LPD_IOU0_GEM3_RESET                         0

    * Software controlled reset for the GEMs
    * (OFFSET, MASK, VALUE)      (0XFF5E0230, 0x00000008U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU0_OFFSET,
		0x00000008U, 0x00000000U);
/*##################################################################### */

    /*
    * QSPI
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_QSPI_RESET                         0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * QSPI TAP DELAY
    */
    /*
    * Register : IOU_TAPDLY_BYPASS @ 0XFF180390

    * 0: Do not by pass the tap delays on the Rx clock signal of LQSPI 1: Bypa
    * ss the Tap delay on the Rx clock signal of LQSPI
    *  PSU_IOU_SLCR_IOU_TAPDLY_BYPASS_LQSPI_RX                     1

    * IOU tap delay bypass for the LQSPI and NAND controllers
    * (OFFSET, MASK, VALUE)      (0XFF180390, 0x00000004U ,0x00000004U)
    */
	PSU_Mask_Write(IOU_SLCR_IOU_TAPDLY_BYPASS_OFFSET,
		0x00000004U, 0x00000004U);
/*##################################################################### */

    /*
    * NAND
    */
    /*
    * USB
    */
    /*
    * Register : RST_LPD_TOP @ 0XFF5E023C

    * USB 0 reset for control registers
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_APB_RESET                      0

    * USB 0 sleep circuit reset
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_HIBERRESET                     0

    * USB 0 reset
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_CORERESET                      0

    * Software control register for the LPD block.
    * (OFFSET, MASK, VALUE)      (0XFF5E023C, 0x00000540U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_TOP_OFFSET, 0x00000540U, 0x00000000U);
/*##################################################################### */

    /*
    * USB0 PIPE POWER PRESENT
    */
    /*
    * Register : fpd_power_prsnt @ 0XFF9D0080

    * This bit is used to choose between PIPE power present and 1'b1
    *  PSU_USB3_0_FPD_POWER_PRSNT_OPTION                           0X1

    * fpd_power_prsnt
    * (OFFSET, MASK, VALUE)      (0XFF9D0080, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(USB3_0_FPD_POWER_PRSNT_OFFSET,
		0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : fpd_pipe_clk @ 0XFF9D007C

    * This bit is used to choose between PIPE clock coming from SerDes and the
    *  suspend clk
    *  PSU_USB3_0_FPD_PIPE_CLK_OPTION                              0x0

    * fpd_pipe_clk
    * (OFFSET, MASK, VALUE)      (0XFF9D007C, 0x00000001U ,0x00000000U)
    */
	PSU_Mask_Write(USB3_0_FPD_PIPE_CLK_OFFSET, 0x00000001U, 0x00000000U);
/*##################################################################### */

    /*
    * SD
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_SDIO1_RESET                        0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x00000040U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x00000040U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : CTRL_REG_SD @ 0XFF180310

    * SD or eMMC selection on SDIO1 0: SD enabled 1: eMMC enabled
    *  PSU_IOU_SLCR_CTRL_REG_SD_SD1_EMMC_SEL                       0

    * SD eMMC selection
    * (OFFSET, MASK, VALUE)      (0XFF180310, 0x00008000U ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_CTRL_REG_SD_OFFSET,
		0x00008000U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : SD_CONFIG_REG2 @ 0XFF180320

    * Should be set based on the final product usage 00 - Removable SCard Slot
    *  01 - Embedded Slot for One Device 10 - Shared Bus Slot 11 - Reserved
    *  PSU_IOU_SLCR_SD_CONFIG_REG2_SD1_SLOTTYPE                    0

    * 1.8V Support 1: 1.8V supported 0: 1.8V not supported support
    *  PSU_IOU_SLCR_SD_CONFIG_REG2_SD1_1P8V                        1

    * 3.0V Support 1: 3.0V supported 0: 3.0V not supported support
    *  PSU_IOU_SLCR_SD_CONFIG_REG2_SD1_3P0V                        0

    * 3.3V Support 1: 3.3V supported 0: 3.3V not supported support
    *  PSU_IOU_SLCR_SD_CONFIG_REG2_SD1_3P3V                        1

    * SD Config Register 2
    * (OFFSET, MASK, VALUE)      (0XFF180320, 0x33800000U ,0x02800000U)
    */
	PSU_Mask_Write(IOU_SLCR_SD_CONFIG_REG2_OFFSET,
		0x33800000U, 0x02800000U);
/*##################################################################### */

    /*
    * SD1 BASE CLOCK
    */
    /*
    * Register : SD_CONFIG_REG1 @ 0XFF18031C

    * Base Clock Frequency for SD Clock. This is the frequency of the xin_clk.
    *  PSU_IOU_SLCR_SD_CONFIG_REG1_SD1_BASECLK                     0xc8

    * Configures the Number of Taps (Phases) of the rxclk_in that is supported
    * .
    *  PSU_IOU_SLCR_SD_CONFIG_REG1_SD1_TUNIGCOUNT                  0x28

    * SD Config Register 1
    * (OFFSET, MASK, VALUE)      (0XFF18031C, 0x7FFE0000U ,0x64500000U)
    */
	PSU_Mask_Write(IOU_SLCR_SD_CONFIG_REG1_OFFSET,
		0x7FFE0000U, 0x64500000U);
/*##################################################################### */

    /*
    * Register : SD_DLL_CTRL @ 0XFF180358

    * Reserved.
    *  PSU_IOU_SLCR_SD_DLL_CTRL_RESERVED                           1

    * SDIO status register
    * (OFFSET, MASK, VALUE)      (0XFF180358, 0x00000008U ,0x00000008U)
    */
	PSU_Mask_Write(IOU_SLCR_SD_DLL_CTRL_OFFSET,
		0x00000008U, 0x00000008U);
/*##################################################################### */

    /*
    * SD1 RETUNER
    */
    /*
    * Register : SD_CONFIG_REG3 @ 0XFF180324

    * This is the Timer Count for Re-Tuning Timer for Re-Tuning Mode 1 to 3. S
    * etting to 4'b0 disables Re-Tuning Timer. 0h - Get information via other
    * source 1h = 1 seconds 2h = 2 seconds 3h = 4 seconds 4h = 8 seconds -- n
    * = 2(n-1) seconds -- Bh = 1024 seconds Fh - Ch = Reserved
    *  PSU_IOU_SLCR_SD_CONFIG_REG3_SD1_RETUNETMR                   0X0

    * SD Config Register 3
    * (OFFSET, MASK, VALUE)      (0XFF180324, 0x03C00000U ,0x00000000U)
    */
	PSU_Mask_Write(IOU_SLCR_SD_CONFIG_REG3_OFFSET,
		0x03C00000U, 0x00000000U);
/*##################################################################### */

    /*
    * CAN
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_CAN1_RESET                         0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x00000100U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x00000100U, 0x00000000U);
/*##################################################################### */

    /*
    * I2C
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_I2C0_RESET                         0

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_I2C1_RESET                         0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x00000600U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x00000600U, 0x00000000U);
/*##################################################################### */

    /*
    * SWDT
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_SWDT_RESET                         0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x00008000U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x00008000U, 0x00000000U);
/*##################################################################### */

    /*
    * SPI
    */
    /*
    * TTC
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_TTC0_RESET                         0

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_TTC1_RESET                         0

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_TTC2_RESET                         0

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_TTC3_RESET                         0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x00007800U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x00007800U, 0x00000000U);
/*##################################################################### */

    /*
    * UART
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_UART0_RESET                        0

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_UART1_RESET                        0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x00000006U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x00000006U, 0x00000000U);
/*##################################################################### */

    /*
    * UART BAUD RATE
    */
    /*
    * Register : Baud_rate_divider_reg0 @ 0XFF000034

    * Baud rate divider value: 0 - 3: ignored 4 - 255: Baud rate
    *  PSU_UART0_BAUD_RATE_DIVIDER_REG0_BDIV                       0x5

    * Baud Rate Divider Register
    * (OFFSET, MASK, VALUE)      (0XFF000034, 0x000000FFU ,0x00000005U)
    */
	PSU_Mask_Write(UART0_BAUD_RATE_DIVIDER_REG0_OFFSET,
		0x000000FFU, 0x00000005U);
/*##################################################################### */

    /*
    * Register : Baud_rate_gen_reg0 @ 0XFF000018

    * Baud Rate Clock Divisor Value: 0: Disables baud_sample 1: Clock divisor
    * bypass (baud_sample = sel_clk) 2 - 65535: baud_sample
    *  PSU_UART0_BAUD_RATE_GEN_REG0_CD                             0x8f

    * Baud Rate Generator Register.
    * (OFFSET, MASK, VALUE)      (0XFF000018, 0x0000FFFFU ,0x0000008FU)
    */
	PSU_Mask_Write(UART0_BAUD_RATE_GEN_REG0_OFFSET,
		0x0000FFFFU, 0x0000008FU);
/*##################################################################### */

    /*
    * Register : Control_reg0 @ 0XFF000000

    * Stop transmitter break: 0: no affect 1: stop transmission of the break a
    * fter a minimum of one character length and transmit a high level during
    * 12 bit periods. It can be set regardless of the value of STTBRK.
    *  PSU_UART0_CONTROL_REG0_STPBRK                               0x0

    * Start transmitter break: 0: no affect 1: start to transmit a break after
    *  the characters currently present in the FIFO and the transmit shift reg
    * ister have been transmitted. It can only be set if STPBRK (Stop transmit
    * ter break) is not high.
    *  PSU_UART0_CONTROL_REG0_STTBRK                               0x0

    * Restart receiver timeout counter: 1: receiver timeout counter is restart
    * ed. This bit is self clearing once the restart has completed.
    *  PSU_UART0_CONTROL_REG0_RSTTO                                0x0

    * Transmit disable: 0: enable transmitter 1: disable transmitter
    *  PSU_UART0_CONTROL_REG0_TXDIS                                0x0

    * Transmit enable: 0: disable transmitter 1: enable transmitter, provided
    * the TXDIS field is set to 0.
    *  PSU_UART0_CONTROL_REG0_TXEN                                 0x1

    * Receive disable: 0: enable 1: disable, regardless of the value of RXEN
    *  PSU_UART0_CONTROL_REG0_RXDIS                                0x0

    * Receive enable: 0: disable 1: enable When set to one, the receiver logic
    *  is enabled, provided the RXDIS field is set to zero.
    *  PSU_UART0_CONTROL_REG0_RXEN                                 0x1

    * Software reset for Tx data path: 0: no affect 1: transmitter logic is re
    * set and all pending transmitter data is discarded This bit is self clear
    * ing once the reset has completed.
    *  PSU_UART0_CONTROL_REG0_TXRES                                0x1

    * Software reset for Rx data path: 0: no affect 1: receiver logic is reset
    *  and all pending receiver data is discarded. This bit is self clearing o
    * nce the reset has completed.
    *  PSU_UART0_CONTROL_REG0_RXRES                                0x1

    * UART Control Register
    * (OFFSET, MASK, VALUE)      (0XFF000000, 0x000001FFU ,0x00000017U)
    */
	PSU_Mask_Write(UART0_CONTROL_REG0_OFFSET, 0x000001FFU, 0x00000017U);
/*##################################################################### */

    /*
    * Register : mode_reg0 @ 0XFF000004

    * Channel mode: Defines the mode of operation of the UART. 00: normal 01:
    * automatic echo 10: local loopback 11: remote loopback
    *  PSU_UART0_MODE_REG0_CHMODE                                  0x0

    * Number of stop bits: Defines the number of stop bits to detect on receiv
    * e and to generate on transmit. 00: 1 stop bit 01: 1.5 stop bits 10: 2 st
    * op bits 11: reserved
    *  PSU_UART0_MODE_REG0_NBSTOP                                  0x0

    * Parity type select: Defines the expected parity to check on receive and
    * the parity to generate on transmit. 000: even parity 001: odd parity 010
    * : forced to 0 parity (space) 011: forced to 1 parity (mark) 1xx: no pari
    * ty
    *  PSU_UART0_MODE_REG0_PAR                                     0x4

    * Character length select: Defines the number of bits in each character. 1
    * 1: 6 bits 10: 7 bits 0x: 8 bits
    *  PSU_UART0_MODE_REG0_CHRL                                    0x0

    * Clock source select: This field defines whether a pre-scalar of 8 is app
    * lied to the baud rate generator input clock. 0: clock source is uart_ref
    * _clk 1: clock source is uart_ref_clk/8
    *  PSU_UART0_MODE_REG0_CLKS                                    0x0

    * UART Mode Register
    * (OFFSET, MASK, VALUE)      (0XFF000004, 0x000003FFU ,0x00000020U)
    */
	PSU_Mask_Write(UART0_MODE_REG0_OFFSET, 0x000003FFU, 0x00000020U);
/*##################################################################### */

    /*
    * Register : Baud_rate_divider_reg0 @ 0XFF010034

    * Baud rate divider value: 0 - 3: ignored 4 - 255: Baud rate
    *  PSU_UART1_BAUD_RATE_DIVIDER_REG0_BDIV                       0x5

    * Baud Rate Divider Register
    * (OFFSET, MASK, VALUE)      (0XFF010034, 0x000000FFU ,0x00000005U)
    */
	PSU_Mask_Write(UART1_BAUD_RATE_DIVIDER_REG0_OFFSET,
		0x000000FFU, 0x00000005U);
/*##################################################################### */

    /*
    * Register : Baud_rate_gen_reg0 @ 0XFF010018

    * Baud Rate Clock Divisor Value: 0: Disables baud_sample 1: Clock divisor
    * bypass (baud_sample = sel_clk) 2 - 65535: baud_sample
    *  PSU_UART1_BAUD_RATE_GEN_REG0_CD                             0x8f

    * Baud Rate Generator Register.
    * (OFFSET, MASK, VALUE)      (0XFF010018, 0x0000FFFFU ,0x0000008FU)
    */
	PSU_Mask_Write(UART1_BAUD_RATE_GEN_REG0_OFFSET,
		0x0000FFFFU, 0x0000008FU);
/*##################################################################### */

    /*
    * Register : Control_reg0 @ 0XFF010000

    * Stop transmitter break: 0: no affect 1: stop transmission of the break a
    * fter a minimum of one character length and transmit a high level during
    * 12 bit periods. It can be set regardless of the value of STTBRK.
    *  PSU_UART1_CONTROL_REG0_STPBRK                               0x0

    * Start transmitter break: 0: no affect 1: start to transmit a break after
    *  the characters currently present in the FIFO and the transmit shift reg
    * ister have been transmitted. It can only be set if STPBRK (Stop transmit
    * ter break) is not high.
    *  PSU_UART1_CONTROL_REG0_STTBRK                               0x0

    * Restart receiver timeout counter: 1: receiver timeout counter is restart
    * ed. This bit is self clearing once the restart has completed.
    *  PSU_UART1_CONTROL_REG0_RSTTO                                0x0

    * Transmit disable: 0: enable transmitter 1: disable transmitter
    *  PSU_UART1_CONTROL_REG0_TXDIS                                0x0

    * Transmit enable: 0: disable transmitter 1: enable transmitter, provided
    * the TXDIS field is set to 0.
    *  PSU_UART1_CONTROL_REG0_TXEN                                 0x1

    * Receive disable: 0: enable 1: disable, regardless of the value of RXEN
    *  PSU_UART1_CONTROL_REG0_RXDIS                                0x0

    * Receive enable: 0: disable 1: enable When set to one, the receiver logic
    *  is enabled, provided the RXDIS field is set to zero.
    *  PSU_UART1_CONTROL_REG0_RXEN                                 0x1

    * Software reset for Tx data path: 0: no affect 1: transmitter logic is re
    * set and all pending transmitter data is discarded This bit is self clear
    * ing once the reset has completed.
    *  PSU_UART1_CONTROL_REG0_TXRES                                0x1

    * Software reset for Rx data path: 0: no affect 1: receiver logic is reset
    *  and all pending receiver data is discarded. This bit is self clearing o
    * nce the reset has completed.
    *  PSU_UART1_CONTROL_REG0_RXRES                                0x1

    * UART Control Register
    * (OFFSET, MASK, VALUE)      (0XFF010000, 0x000001FFU ,0x00000017U)
    */
	PSU_Mask_Write(UART1_CONTROL_REG0_OFFSET, 0x000001FFU, 0x00000017U);
/*##################################################################### */

    /*
    * Register : mode_reg0 @ 0XFF010004

    * Channel mode: Defines the mode of operation of the UART. 00: normal 01:
    * automatic echo 10: local loopback 11: remote loopback
    *  PSU_UART1_MODE_REG0_CHMODE                                  0x0

    * Number of stop bits: Defines the number of stop bits to detect on receiv
    * e and to generate on transmit. 00: 1 stop bit 01: 1.5 stop bits 10: 2 st
    * op bits 11: reserved
    *  PSU_UART1_MODE_REG0_NBSTOP                                  0x0

    * Parity type select: Defines the expected parity to check on receive and
    * the parity to generate on transmit. 000: even parity 001: odd parity 010
    * : forced to 0 parity (space) 011: forced to 1 parity (mark) 1xx: no pari
    * ty
    *  PSU_UART1_MODE_REG0_PAR                                     0x4

    * Character length select: Defines the number of bits in each character. 1
    * 1: 6 bits 10: 7 bits 0x: 8 bits
    *  PSU_UART1_MODE_REG0_CHRL                                    0x0

    * Clock source select: This field defines whether a pre-scalar of 8 is app
    * lied to the baud rate generator input clock. 0: clock source is uart_ref
    * _clk 1: clock source is uart_ref_clk/8
    *  PSU_UART1_MODE_REG0_CLKS                                    0x0

    * UART Mode Register
    * (OFFSET, MASK, VALUE)      (0XFF010004, 0x000003FFU ,0x00000020U)
    */
	PSU_Mask_Write(UART1_MODE_REG0_OFFSET, 0x000003FFU, 0x00000020U);
/*##################################################################### */

    /*
    * GPIO
    */
    /*
    * Register : RST_LPD_IOU2 @ 0XFF5E0238

    * Block level reset
    *  PSU_CRL_APB_RST_LPD_IOU2_GPIO_RESET                         0

    * Software control register for the IOU block. Each bit will cause a singl
    * erperipheral or part of the peripheral to be reset.
    * (OFFSET, MASK, VALUE)      (0XFF5E0238, 0x00040000U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU2_OFFSET,
		0x00040000U, 0x00000000U);
/*##################################################################### */

    /*
    * ADMA TZ
    */
    /*
    * Register : slcr_adma @ 0XFF4B0024

    * TrustZone Classification for ADMA
    *  PSU_LPD_SLCR_SECURE_SLCR_ADMA_TZ                            0XFF

    * RPU TrustZone settings
    * (OFFSET, MASK, VALUE)      (0XFF4B0024, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(LPD_SLCR_SECURE_SLCR_ADMA_OFFSET,
		0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * CSU TAMPERING
    */
    /*
    * CSU TAMPER STATUS
    */
    /*
    * Register : tamper_status @ 0XFFCA5000

    * CSU regsiter
    *  PSU_CSU_TAMPER_STATUS_TAMPER_0                              0

    * External MIO
    *  PSU_CSU_TAMPER_STATUS_TAMPER_1                              0

    * JTAG toggle detect
    *  PSU_CSU_TAMPER_STATUS_TAMPER_2                              0

    * PL SEU error
    *  PSU_CSU_TAMPER_STATUS_TAMPER_3                              0

    * AMS over temperature alarm for LPD
    *  PSU_CSU_TAMPER_STATUS_TAMPER_4                              0

    * AMS over temperature alarm for APU
    *  PSU_CSU_TAMPER_STATUS_TAMPER_5                              0

    * AMS voltage alarm for VCCPINT_FPD
    *  PSU_CSU_TAMPER_STATUS_TAMPER_6                              0

    * AMS voltage alarm for VCCPINT_LPD
    *  PSU_CSU_TAMPER_STATUS_TAMPER_7                              0

    * AMS voltage alarm for VCCPAUX
    *  PSU_CSU_TAMPER_STATUS_TAMPER_8                              0

    * AMS voltage alarm for DDRPHY
    *  PSU_CSU_TAMPER_STATUS_TAMPER_9                              0

    * AMS voltage alarm for PSIO bank 0/1/2
    *  PSU_CSU_TAMPER_STATUS_TAMPER_10                             0

    * AMS voltage alarm for PSIO bank 3 (dedicated pins)
    *  PSU_CSU_TAMPER_STATUS_TAMPER_11                             0

    * AMS voltaage alarm for GT
    *  PSU_CSU_TAMPER_STATUS_TAMPER_12                             0

    * Tamper Response Status
    * (OFFSET, MASK, VALUE)      (0XFFCA5000, 0x00001FFFU ,0x00000000U)
    */
	PSU_Mask_Write(CSU_TAMPER_STATUS_OFFSET, 0x00001FFFU, 0x00000000U);
/*##################################################################### */

    /*
    * CSU TAMPER RESPONSE
    */
    /*
    * CPU QOS DEFAULT
    */
    /*
    * Register : ACE_CTRL @ 0XFD5C0060

    * Set ACE outgoing AWQOS value
    *  PSU_APU_ACE_CTRL_AWQOS                                      0X0

    * Set ACE outgoing ARQOS value
    *  PSU_APU_ACE_CTRL_ARQOS                                      0X0

    * ACE Control Register
    * (OFFSET, MASK, VALUE)      (0XFD5C0060, 0x000F000FU ,0x00000000U)
    */
	PSU_Mask_Write(APU_ACE_CTRL_OFFSET, 0x000F000FU, 0x00000000U);
/*##################################################################### */

    /*
    * ENABLES RTC SWITCH TO BATTERY WHEN VCC_PSAUX IS NOT AVAILABLE
    */
    /*
    * Register : CONTROL @ 0XFFA60040

    * Enables the RTC. By writing a 0 to this bit, RTC will be powered off and
    *  the only module that potentially draws current from the battery will be
    *  BBRAM. The value read through this bit does not necessarily reflect whe
    * ther RTC is enabled or not. It is expected that RTC is enabled every tim
    * e it is being configured. If RTC is not used in the design, FSBL will di
    * sable it by writing a 0 to this bit.
    *  PSU_RTC_CONTROL_BATTERY_DISABLE                             0X1

    * This register controls various functionalities within the RTC
    * (OFFSET, MASK, VALUE)      (0XFFA60040, 0x80000000U ,0x80000000U)
    */
	PSU_Mask_Write(RTC_CONTROL_OFFSET, 0x80000000U, 0x80000000U);
/*##################################################################### */

    /*
    * TIMESTAMP COUNTER
    */
    /*
    * Register : base_frequency_ID_register @ 0XFF260020

    * Frequency in number of ticks per second. Valid range from 10 MHz to 100
    * MHz.
    *  PSU_IOU_SCNTRS_BASE_FREQUENCY_ID_REGISTER_FREQ              0x5f5b9f0

    * Program this register to match the clock frequency of the timestamp gene
    * rator, in ticks per second. For example, for a 50 MHz clock, program 0x0
    * 2FAF080. This register is not accessible to the read-only programming in
    * terface.
    * (OFFSET, MASK, VALUE)      (0XFF260020, 0xFFFFFFFFU ,0x05F5B9F0U)
    */
	PSU_Mask_Write(IOU_SCNTRS_BASE_FREQUENCY_ID_REGISTER_OFFSET,
		0xFFFFFFFFU, 0x05F5B9F0U);
/*##################################################################### */

    /*
    * Register : counter_control_register @ 0XFF260000

    * Enable 0: The counter is disabled and not incrementing. 1: The counter i
    * s enabled and is incrementing.
    *  PSU_IOU_SCNTRS_COUNTER_CONTROL_REGISTER_EN                  0x1

    * Controls the counter increments. This register is not accessible to the
    * read-only programming interface.
    * (OFFSET, MASK, VALUE)      (0XFF260000, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(IOU_SCNTRS_COUNTER_CONTROL_REGISTER_OFFSET,
		0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * TTC SRC SELECT
    */
    /*
    * PCIE GPIO RESET
    */
    /*
    * PCIE RESET
    */
    /*
    * DIR MODE BANK 0
    */
    /*
    * DIR MODE BANK 1
    */
    /*
    * Register : DIRM_1 @ 0XFF0A0244

    * Operation is the same as DIRM_0[DIRECTION_0]
    *  PSU_GPIO_DIRM_1_DIRECTION_1                                 0x20

    * Direction mode (GPIO Bank1, MIO)
    * (OFFSET, MASK, VALUE)      (0XFF0A0244, 0x03FFFFFFU ,0x00000020U)
    */
	PSU_Mask_Write(GPIO_DIRM_1_OFFSET, 0x03FFFFFFU, 0x00000020U);
/*##################################################################### */

    /*
    * DIR MODE BANK 2
    */
    /*
    * OUTPUT ENABLE BANK 0
    */
    /*
    * OUTPUT ENABLE BANK 1
    */
    /*
    * Register : OEN_1 @ 0XFF0A0248

    * Operation is the same as OEN_0[OP_ENABLE_0]
    *  PSU_GPIO_OEN_1_OP_ENABLE_1                                  0x20

    * Output enable (GPIO Bank1, MIO)
    * (OFFSET, MASK, VALUE)      (0XFF0A0248, 0x03FFFFFFU ,0x00000020U)
    */
	PSU_Mask_Write(GPIO_OEN_1_OFFSET, 0x03FFFFFFU, 0x00000020U);
/*##################################################################### */

    /*
    * OUTPUT ENABLE BANK 2
    */
    /*
    * MASK_DATA_0_LSW LOW BANK [15:0]
    */
    /*
    * MASK_DATA_0_MSW LOW BANK [25:16]
    */
    /*
    * MASK_DATA_1_LSW LOW BANK [41:26]
    */
    /*
    * Register : MASK_DATA_1_LSW @ 0XFF0A0008

    * Operation is the same as MASK_DATA_0_LSW[MASK_0_LSW]
    *  PSU_GPIO_MASK_DATA_1_LSW_MASK_1_LSW                         0xffdf

    * Operation is the same as MASK_DATA_0_LSW[DATA_0_LSW]
    *  PSU_GPIO_MASK_DATA_1_LSW_DATA_1_LSW                         0x20

    * Maskable Output Data (GPIO Bank1, MIO, Lower 16bits)
    * (OFFSET, MASK, VALUE)      (0XFF0A0008, 0xFFFFFFFFU ,0xFFDF0020U)
    */
	PSU_Mask_Write(GPIO_MASK_DATA_1_LSW_OFFSET,
		0xFFFFFFFFU, 0xFFDF0020U);
/*##################################################################### */

    /*
    * MASK_DATA_1_MSW HIGH BANK [51:42]
    */
    /*
    * MASK_DATA_1_LSW HIGH BANK [67:52]
    */
    /*
    * MASK_DATA_1_LSW HIGH BANK [77:68]
    */
    /*
    * ADD 1 MS DELAY
    */
		mask_delay(1);

/*##################################################################### */

    /*
    * MASK_DATA_0_LSW LOW BANK [15:0]
    */
    /*
    * MASK_DATA_0_MSW LOW BANK [25:16]
    */
    /*
    * MASK_DATA_1_LSW LOW BANK [41:26]
    */
    /*
    * Register : MASK_DATA_1_LSW @ 0XFF0A0008

    * Operation is the same as MASK_DATA_0_LSW[MASK_0_LSW]
    *  PSU_GPIO_MASK_DATA_1_LSW_MASK_1_LSW                         0xffdf

    * Operation is the same as MASK_DATA_0_LSW[DATA_0_LSW]
    *  PSU_GPIO_MASK_DATA_1_LSW_DATA_1_LSW                         0x0

    * Maskable Output Data (GPIO Bank1, MIO, Lower 16bits)
    * (OFFSET, MASK, VALUE)      (0XFF0A0008, 0xFFFFFFFFU ,0xFFDF0000U)
    */
	PSU_Mask_Write(GPIO_MASK_DATA_1_LSW_OFFSET,
		0xFFFFFFFFU, 0xFFDF0000U);
/*##################################################################### */

    /*
    * MASK_DATA_1_MSW HIGH BANK [51:42]
    */
    /*
    * MASK_DATA_1_LSW HIGH BANK [67:52]
    */
    /*
    * MASK_DATA_1_LSW HIGH BANK [77:68]
    */
    /*
    * ADD 5 MS DELAY
    */
		mask_delay(5);

/*##################################################################### */


	return 1;
}
unsigned long psu_post_config_data(void)
{
    /*
    * POST_CONFIG
    */

	return 1;
}
unsigned long psu_peripherals_powerdwn_data(void)
{
    /*
    * POWER DOWN REQUEST INTERRUPT ENABLE
    */
    /*
    * POWER DOWN TRIGGER
    */

	return 1;
}
unsigned long psu_lpd_xppu_data(void)
{
    /*
    * MASTER ID LIST
    */
    /*
    * APERTURE PERMISIION LIST
    */
    /*
    * APERTURE NAME: UART0, START ADDRESS: FF000000, END ADDRESS: FF00FFFF
    */
    /*
    * APERTURE NAME: UART1, START ADDRESS: FF010000, END ADDRESS: FF01FFFF
    */
    /*
    * APERTURE NAME: I2C0, START ADDRESS: FF020000, END ADDRESS: FF02FFFF
    */
    /*
    * APERTURE NAME: I2C1, START ADDRESS: FF030000, END ADDRESS: FF03FFFF
    */
    /*
    * APERTURE NAME: SPI0, START ADDRESS: FF040000, END ADDRESS: FF04FFFF
    */
    /*
    * APERTURE NAME: SPI1, START ADDRESS: FF050000, END ADDRESS: FF05FFFF
    */
    /*
    * APERTURE NAME: CAN0, START ADDRESS: FF060000, END ADDRESS: FF06FFFF
    */
    /*
    * APERTURE NAME: CAN1, START ADDRESS: FF070000, END ADDRESS: FF07FFFF
    */
    /*
    * APERTURE NAME: RPU_UNUSED_12, START ADDRESS: FF080000, END ADDRESS: FF09
    * FFFF
    */
    /*
    * APERTURE NAME: RPU_UNUSED_12, START ADDRESS: FF080000, END ADDRESS: FF09
    * FFFF
    */
    /*
    * APERTURE NAME: GPIO, START ADDRESS: FF0A0000, END ADDRESS: FF0AFFFF
    */
    /*
    * APERTURE NAME: GEM0, START ADDRESS: FF0B0000, END ADDRESS: FF0BFFFF
    */
    /*
    * APERTURE NAME: GEM1, START ADDRESS: FF0C0000, END ADDRESS: FF0CFFFF
    */
    /*
    * APERTURE NAME: GEM2, START ADDRESS: FF0D0000, END ADDRESS: FF0DFFFF
    */
    /*
    * APERTURE NAME: GEM3, START ADDRESS: FF0E0000, END ADDRESS: FF0EFFFF
    */
    /*
    * APERTURE NAME: QSPI, START ADDRESS: FF0F0000, END ADDRESS: FF0FFFFF
    */
    /*
    * APERTURE NAME: NAND, START ADDRESS: FF100000, END ADDRESS: FF10FFFF
    */
    /*
    * APERTURE NAME: TTC0, START ADDRESS: FF110000, END ADDRESS: FF11FFFF
    */
    /*
    * APERTURE NAME: TTC1, START ADDRESS: FF120000, END ADDRESS: FF12FFFF
    */
    /*
    * APERTURE NAME: TTC2, START ADDRESS: FF130000, END ADDRESS: FF13FFFF
    */
    /*
    * APERTURE NAME: TTC3, START ADDRESS: FF140000, END ADDRESS: FF14FFFF
    */
    /*
    * APERTURE NAME: SWDT, START ADDRESS: FF150000, END ADDRESS: FF15FFFF
    */
    /*
    * APERTURE NAME: SD0, START ADDRESS: FF160000, END ADDRESS: FF16FFFF
    */
    /*
    * APERTURE NAME: SD1, START ADDRESS: FF170000, END ADDRESS: FF17FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SLCR, START ADDRESS: FF180000, END ADDRESS: FF23FFFF
    */
    /*
    * APERTURE NAME: IOU_SECURE_SLCR, START ADDRESS: FF240000, END ADDRESS: FF
    * 24FFFF
    */
    /*
    * APERTURE NAME: IOU_SCNTR, START ADDRESS: FF250000, END ADDRESS: FF25FFFF
    */
    /*
    * APERTURE NAME: IOU_SCNTRS, START ADDRESS: FF260000, END ADDRESS: FF26FFF
    * F
    */
    /*
    * APERTURE NAME: RPU_UNUSED_11, START ADDRESS: FF270000, END ADDRESS: FF2A
    * FFFF
    */
    /*
    * APERTURE NAME: RPU_UNUSED_11, START ADDRESS: FF270000, END ADDRESS: FF2A
    * FFFF
    */
    /*
    * APERTURE NAME: RPU_UNUSED_11, START ADDRESS: FF270000, END ADDRESS: FF2A
    * FFFF
    */
    /*
    * APERTURE NAME: RPU_UNUSED_11, START ADDRESS: FF270000, END ADDRESS: FF2A
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_14, START ADDRESS: FF2B0000, END ADDRESS: FF2F
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_14, START ADDRESS: FF2B0000, END ADDRESS: FF2F
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_14, START ADDRESS: FF2B0000, END ADDRESS: FF2F
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_14, START ADDRESS: FF2B0000, END ADDRESS: FF2F
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_14, START ADDRESS: FF2B0000, END ADDRESS: FF2F
    * FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_CTRL, START ADDRESS: FF380000, END ADDRESS: FF3FFFFF
    */
    /*
    * APERTURE NAME: IPI_CTRL, START ADDRESS: FF380000, END ADDRESS: FF3FFFFF
    */
    /*
    * APERTURE NAME: IPI_CTRL, START ADDRESS: FF380000, END ADDRESS: FF3FFFFF
    */
    /*
    * APERTURE NAME: IPI_CTRL, START ADDRESS: FF380000, END ADDRESS: FF3FFFFF
    */
    /*
    * APERTURE NAME: IPI_CTRL, START ADDRESS: FF380000, END ADDRESS: FF3FFFFF
    */
    /*
    * APERTURE NAME: IPI_CTRL, START ADDRESS: FF380000, END ADDRESS: FF3FFFFF
    */
    /*
    * APERTURE NAME: IPI_CTRL, START ADDRESS: FF380000, END ADDRESS: FF3FFFFF
    */
    /*
    * APERTURE NAME: IPI_CTRL, START ADDRESS: FF380000, END ADDRESS: FF3FFFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_1, START ADDRESS: FF400000, END ADDRESS: FF40F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR, START ADDRESS: FF410000, END ADDRESS: FF4AFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR_SECURE, START ADDRESS: FF4B0000, END ADDRESS: FF
    * 4DFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR_SECURE, START ADDRESS: FF4B0000, END ADDRESS: FF
    * 4DFFFF
    */
    /*
    * APERTURE NAME: LPD_SLCR_SECURE, START ADDRESS: FF4B0000, END ADDRESS: FF
    * 4DFFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_2, START ADDRESS: FF4E0000, END ADDRESS: FF5DF
    * FFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: CRL_APB, START ADDRESS: FF5E0000, END ADDRESS: FF85FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_3, START ADDRESS: FF860000, END ADDRESS: FF95F
    * FFF
    */
    /*
    * APERTURE NAME: OCM_SLCR, START ADDRESS: FF960000, END ADDRESS: FF96FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_4, START ADDRESS: FF970000, END ADDRESS: FF97F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_XPPU, START ADDRESS: FF980000, END ADDRESS: FF99FFFF
    */
    /*
    * APERTURE NAME: RPU, START ADDRESS: FF9A0000, END ADDRESS: FF9AFFFF
    */
    /*
    * APERTURE NAME: AFIFM6, START ADDRESS: FF9B0000, END ADDRESS: FF9BFFFF
    */
    /*
    * APERTURE NAME: LPD_XPPU_SINK, START ADDRESS: FF9C0000, END ADDRESS: FF9C
    * FFFF
    */
    /*
    * APERTURE NAME: USB3_0, START ADDRESS: FF9D0000, END ADDRESS: FF9DFFFF
    */
    /*
    * APERTURE NAME: USB3_1, START ADDRESS: FF9E0000, END ADDRESS: FF9EFFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_5, START ADDRESS: FF9F0000, END ADDRESS: FF9FF
    * FFF
    */
    /*
    * APERTURE NAME: APM0, START ADDRESS: FFA00000, END ADDRESS: FFA0FFFF
    */
    /*
    * APERTURE NAME: APM1, START ADDRESS: FFA10000, END ADDRESS: FFA1FFFF
    */
    /*
    * APERTURE NAME: APM_INTC_IOU, START ADDRESS: FFA20000, END ADDRESS: FFA2F
    * FFF
    */
    /*
    * APERTURE NAME: APM_FPD_LPD, START ADDRESS: FFA30000, END ADDRESS: FFA3FF
    * FF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_6, START ADDRESS: FFA40000, END ADDRESS: FFA4F
    * FFF
    */
    /*
    * APERTURE NAME: AMS, START ADDRESS: FFA50000, END ADDRESS: FFA5FFFF
    */
    /*
    * APERTURE NAME: RTC, START ADDRESS: FFA60000, END ADDRESS: FFA6FFFF
    */
    /*
    * APERTURE NAME: OCM_XMPU_CFG, START ADDRESS: FFA70000, END ADDRESS: FFA7F
    * FFF
    */
    /*
    * APERTURE NAME: ADMA_0, START ADDRESS: FFA80000, END ADDRESS: FFA8FFFF
    */
    /*
    * APERTURE NAME: ADMA_1, START ADDRESS: FFA90000, END ADDRESS: FFA9FFFF
    */
    /*
    * APERTURE NAME: ADMA_2, START ADDRESS: FFAA0000, END ADDRESS: FFAAFFFF
    */
    /*
    * APERTURE NAME: ADMA_3, START ADDRESS: FFAB0000, END ADDRESS: FFABFFFF
    */
    /*
    * APERTURE NAME: ADMA_4, START ADDRESS: FFAC0000, END ADDRESS: FFACFFFF
    */
    /*
    * APERTURE NAME: ADMA_5, START ADDRESS: FFAD0000, END ADDRESS: FFADFFFF
    */
    /*
    * APERTURE NAME: ADMA_6, START ADDRESS: FFAE0000, END ADDRESS: FFAEFFFF
    */
    /*
    * APERTURE NAME: ADMA_7, START ADDRESS: FFAF0000, END ADDRESS: FFAFFFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_7, START ADDRESS: FFB00000, END ADDRESS: FFBFF
    * FFF
    */
    /*
    * APERTURE NAME: CSU_ROM, START ADDRESS: FFC00000, END ADDRESS: FFC1FFFF
    */
    /*
    * APERTURE NAME: CSU_ROM, START ADDRESS: FFC00000, END ADDRESS: FFC1FFFF
    */
    /*
    * APERTURE NAME: CSU_LOCAL, START ADDRESS: FFC20000, END ADDRESS: FFC2FFFF
    */
    /*
    * APERTURE NAME: PUF, START ADDRESS: FFC30000, END ADDRESS: FFC3FFFF
    */
    /*
    * APERTURE NAME: CSU_RAM, START ADDRESS: FFC40000, END ADDRESS: FFC5FFFF
    */
    /*
    * APERTURE NAME: CSU_RAM, START ADDRESS: FFC40000, END ADDRESS: FFC5FFFF
    */
    /*
    * APERTURE NAME: CSU_IOMODULE, START ADDRESS: FFC60000, END ADDRESS: FFC7F
    * FFF
    */
    /*
    * APERTURE NAME: CSU_IOMODULE, START ADDRESS: FFC60000, END ADDRESS: FFC7F
    * FFF
    */
    /*
    * APERTURE NAME: CSUDMA, START ADDRESS: FFC80000, END ADDRESS: FFC9FFFF
    */
    /*
    * APERTURE NAME: CSUDMA, START ADDRESS: FFC80000, END ADDRESS: FFC9FFFF
    */
    /*
    * APERTURE NAME: CSU, START ADDRESS: FFCA0000, END ADDRESS: FFCAFFFF
    */
    /*
    * APERTURE NAME: CSU_WDT, START ADDRESS: FFCB0000, END ADDRESS: FFCBFFFF
    */
    /*
    * APERTURE NAME: EFUSE, START ADDRESS: FFCC0000, END ADDRESS: FFCCFFFF
    */
    /*
    * APERTURE NAME: BBRAM, START ADDRESS: FFCD0000, END ADDRESS: FFCDFFFF
    */
    /*
    * APERTURE NAME: RSA_CORE, START ADDRESS: FFCE0000, END ADDRESS: FFCEFFFF
    */
    /*
    * APERTURE NAME: MBISTJTAG, START ADDRESS: FFCF0000, END ADDRESS: FFCFFFFF
    */
    /*
    * APERTURE NAME: PMU_ROM, START ADDRESS: FFD00000, END ADDRESS: FFD3FFFF
    */
    /*
    * APERTURE NAME: PMU_ROM, START ADDRESS: FFD00000, END ADDRESS: FFD3FFFF
    */
    /*
    * APERTURE NAME: PMU_ROM, START ADDRESS: FFD00000, END ADDRESS: FFD3FFFF
    */
    /*
    * APERTURE NAME: PMU_ROM, START ADDRESS: FFD00000, END ADDRESS: FFD3FFFF
    */
    /*
    * APERTURE NAME: PMU_IOMODULE, START ADDRESS: FFD40000, END ADDRESS: FFD5F
    * FFF
    */
    /*
    * APERTURE NAME: PMU_IOMODULE, START ADDRESS: FFD40000, END ADDRESS: FFD5F
    * FFF
    */
    /*
    * APERTURE NAME: PMU_LOCAL, START ADDRESS: FFD60000, END ADDRESS: FFD7FFFF
    */
    /*
    * APERTURE NAME: PMU_LOCAL, START ADDRESS: FFD60000, END ADDRESS: FFD7FFFF
    */
    /*
    * APERTURE NAME: PMU_GLOBAL, START ADDRESS: FFD80000, END ADDRESS: FFDBFFF
    * F
    */
    /*
    * APERTURE NAME: PMU_GLOBAL, START ADDRESS: FFD80000, END ADDRESS: FFDBFFF
    * F
    */
    /*
    * APERTURE NAME: PMU_GLOBAL, START ADDRESS: FFD80000, END ADDRESS: FFDBFFF
    * F
    */
    /*
    * APERTURE NAME: PMU_GLOBAL, START ADDRESS: FFD80000, END ADDRESS: FFDBFFF
    * F
    */
    /*
    * APERTURE NAME: PMU_RAM, START ADDRESS: FFDC0000, END ADDRESS: FFDFFFFF
    */
    /*
    * APERTURE NAME: PMU_RAM, START ADDRESS: FFDC0000, END ADDRESS: FFDFFFFF
    */
    /*
    * APERTURE NAME: PMU_RAM, START ADDRESS: FFDC0000, END ADDRESS: FFDFFFFF
    */
    /*
    * APERTURE NAME: PMU_RAM, START ADDRESS: FFDC0000, END ADDRESS: FFDFFFFF
    */
    /*
    * APERTURE NAME: R5_0_ATCM, START ADDRESS: FFE00000, END ADDRESS: FFE0FFFF
    */
    /*
    * APERTURE NAME: R5_0_ATCM_LOCKSTEP, START ADDRESS: FFE10000, END ADDRESS:
    *  FFE1FFFF
    */
    /*
    * APERTURE NAME: R5_0_BTCM, START ADDRESS: FFE20000, END ADDRESS: FFE2FFFF
    */
    /*
    * APERTURE NAME: R5_0_BTCM_LOCKSTEP, START ADDRESS: FFE30000, END ADDRESS:
    *  FFE3FFFF
    */
    /*
    * APERTURE NAME: R5_0_INSTRUCTION_CACHE, START ADDRESS: FFE40000, END ADDR
    * ESS: FFE4FFFF
    */
    /*
    * APERTURE NAME: R5_0_DATA_CACHE, START ADDRESS: FFE50000, END ADDRESS: FF
    * E5FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_8, START ADDRESS: FFE60000, END ADDRESS: FFE8F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_8, START ADDRESS: FFE60000, END ADDRESS: FFE8F
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_8, START ADDRESS: FFE60000, END ADDRESS: FFE8F
    * FFF
    */
    /*
    * APERTURE NAME: R5_1_ATCM_, START ADDRESS: FFE90000, END ADDRESS: FFE9FFF
    * F
    */
    /*
    * APERTURE NAME: RPU_UNUSED_10, START ADDRESS: FFEA0000, END ADDRESS: FFEA
    * FFFF
    */
    /*
    * APERTURE NAME: R5_1_BTCM_, START ADDRESS: FFEB0000, END ADDRESS: FFEBFFF
    * F
    */
    /*
    * APERTURE NAME: R5_1_INSTRUCTION_CACHE, START ADDRESS: FFEC0000, END ADDR
    * ESS: FFECFFFF
    */
    /*
    * APERTURE NAME: R5_1_DATA_CACHE, START ADDRESS: FFED0000, END ADDRESS: FF
    * EDFFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_9, START ADDRESS: FFEE0000, END ADDRESS: FFFBF
    * FFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_15, START ADDRESS: FFFD0000, END ADDRESS: FFFF
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_15, START ADDRESS: FFFD0000, END ADDRESS: FFFF
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_15, START ADDRESS: FFFD0000, END ADDRESS: FFFF
    * FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_1, START ADDRESS: FF310000, END ADDRESS: FF31FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_2, START ADDRESS: FF320000, END ADDRESS: FF32FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_0, START ADDRESS: FF300000, END ADDRESS: FF30FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_7, START ADDRESS: FF340000, END ADDRESS: FF34FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_8, START ADDRESS: FF350000, END ADDRESS: FF35FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_9, START ADDRESS: FF360000, END ADDRESS: FF36FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_10, START ADDRESS: FF370000, END ADDRESS: FF37FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IPI_PMU, START ADDRESS: FF330000, END ADDRESS: FF33FFFF
    */
    /*
    * APERTURE NAME: IOU_GPV, START ADDRESS: FE000000, END ADDRESS: FE0FFFFF
    */
    /*
    * APERTURE NAME: LPD_GPV, START ADDRESS: FE100000, END ADDRESS: FE1FFFFF
    */
    /*
    * APERTURE NAME: USB3_0_XHCI, START ADDRESS: FE200000, END ADDRESS: FE2FFF
    * FF
    */
    /*
    * APERTURE NAME: USB3_1_XHCI, START ADDRESS: FE300000, END ADDRESS: FE3FFF
    * FF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_13, START ADDRESS: FE400000, END ADDRESS: FE7F
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_13, START ADDRESS: FE400000, END ADDRESS: FE7F
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_13, START ADDRESS: FE400000, END ADDRESS: FE7F
    * FFFF
    */
    /*
    * APERTURE NAME: LPD_UNUSED_13, START ADDRESS: FE400000, END ADDRESS: FE7F
    * FFFF
    */
    /*
    * APERTURE NAME: CORESIGHT, START ADDRESS: FE800000, END ADDRESS: FEFFFFFF
    */
    /*
    * APERTURE NAME: CORESIGHT, START ADDRESS: FE800000, END ADDRESS: FEFFFFFF
    */
    /*
    * APERTURE NAME: CORESIGHT, START ADDRESS: FE800000, END ADDRESS: FEFFFFFF
    */
    /*
    * APERTURE NAME: CORESIGHT, START ADDRESS: FE800000, END ADDRESS: FEFFFFFF
    */
    /*
    * APERTURE NAME: CORESIGHT, START ADDRESS: FE800000, END ADDRESS: FEFFFFFF
    */
    /*
    * APERTURE NAME: CORESIGHT, START ADDRESS: FE800000, END ADDRESS: FEFFFFFF
    */
    /*
    * APERTURE NAME: CORESIGHT, START ADDRESS: FE800000, END ADDRESS: FEFFFFFF
    */
    /*
    * APERTURE NAME: CORESIGHT, START ADDRESS: FE800000, END ADDRESS: FEFFFFFF
    */
    /*
    * APERTURE NAME: QSPI_LINEAR_ADDRESS, START ADDRESS: C0000000, END ADDRESS
    * : DFFFFFFF
    */
    /*
    * XPPU CONTROL
    */

	return 1;
}
unsigned long psu_ddr_xmpu0_data(void)
{
    /*
    * DDR XMPU0
    */

	return 1;
}
unsigned long psu_ddr_xmpu1_data(void)
{
    /*
    * DDR XMPU1
    */

	return 1;
}
unsigned long psu_ddr_xmpu2_data(void)
{
    /*
    * DDR XMPU2
    */

	return 1;
}
unsigned long psu_ddr_xmpu3_data(void)
{
    /*
    * DDR XMPU3
    */

	return 1;
}
unsigned long psu_ddr_xmpu4_data(void)
{
    /*
    * DDR XMPU4
    */

	return 1;
}
unsigned long psu_ddr_xmpu5_data(void)
{
    /*
    * DDR XMPU5
    */

	return 1;
}
unsigned long psu_ocm_xmpu_data(void)
{
    /*
    * OCM XMPU
    */

	return 1;
}
unsigned long psu_fpd_xmpu_data(void)
{
    /*
    * FPD XMPU
    */

	return 1;
}
unsigned long psu_protection_lock_data(void)
{
    /*
    * LOCKING PROTECTION MODULE
    */
    /*
    * XPPU LOCK
    */
    /*
    * APERTURE NAME: LPD_XPPU, START ADDRESS: FF980000, END ADDRESS: FF99FFFF
    */
    /*
    * XMPU LOCK
    */
    /*
    * LOCK OCM XMPU ONLY IF IT IS NOT PROTECTED BY ANY MASTER
    */
    /*
    * LOCK FPD XMPU ONLY IF IT IS NOT PROTECTED BY ANY MASTER
    */
    /*
    * LOCK DDR XMPU ONLY IF IT IS NOT PROTECTED BY ANY MASTER
    */
    /*
    * LOCK DDR XMPU ONLY IF IT IS NOT PROTECTED BY ANY MASTER
    */
    /*
    * LOCK DDR XMPU ONLY IF IT IS NOT PROTECTED BY ANY MASTER
    */
    /*
    * LOCK DDR XMPU ONLY IF IT IS NOT PROTECTED BY ANY MASTER
    */
    /*
    * LOCK DDR XMPU ONLY IF IT IS NOT PROTECTED BY ANY MASTER
    */
    /*
    * LOCK DDR XMPU ONLY IF IT IS NOT PROTECTED BY ANY MASTER
    */

	return 1;
}
unsigned long psu_apply_master_tz(void)
{
    /*
    * RPU
    */
    /*
    * DP TZ
    */
    /*
    * Register : slcr_dpdma @ 0XFD690040

    * TrustZone classification for DisplayPort DMA
    *  PSU_FPD_SLCR_SECURE_SLCR_DPDMA_TZ                           1

    * DPDMA TrustZone Settings
    * (OFFSET, MASK, VALUE)      (0XFD690040, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(FPD_SLCR_SECURE_SLCR_DPDMA_OFFSET,
		0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * SATA TZ
    */
    /*
    * PCIE TZ
    */
    /*
    * Register : slcr_pcie @ 0XFD690030

    * TrustZone classification for DMA Channel 0
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_0                      1

    * TrustZone classification for DMA Channel 1
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_1                      1

    * TrustZone classification for DMA Channel 2
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_2                      1

    * TrustZone classification for DMA Channel 3
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_3                      1

    * TrustZone classification for Ingress Address Translation 0
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_0                  1

    * TrustZone classification for Ingress Address Translation 1
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_1                  1

    * TrustZone classification for Ingress Address Translation 2
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_2                  1

    * TrustZone classification for Ingress Address Translation 3
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_3                  1

    * TrustZone classification for Ingress Address Translation 4
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_4                  1

    * TrustZone classification for Ingress Address Translation 5
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_5                  1

    * TrustZone classification for Ingress Address Translation 6
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_6                  1

    * TrustZone classification for Ingress Address Translation 7
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_7                  1

    * TrustZone classification for Egress Address Translation 0
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_0                   1

    * TrustZone classification for Egress Address Translation 1
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_1                   1

    * TrustZone classification for Egress Address Translation 2
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_2                   1

    * TrustZone classification for Egress Address Translation 3
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_3                   1

    * TrustZone classification for Egress Address Translation 4
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_4                   1

    * TrustZone classification for Egress Address Translation 5
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_5                   1

    * TrustZone classification for Egress Address Translation 6
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_6                   1

    * TrustZone classification for Egress Address Translation 7
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_7                   1

    * TrustZone classification for DMA Registers
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_REGS                   1

    * TrustZone classification for MSIx Table
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_MSIX_TABLE                 1

    * TrustZone classification for MSIx PBA
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_MSIX_PBA                   1

    * TrustZone classification for ECAM
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_ECAM                       1

    * TrustZone classification for Bridge Common Registers
    *  PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_BRIDGE_REGS                1

    * PCIe TrustZone settings. This register may only be modified during bootu
    * p (while PCIe block is disabled)
    * (OFFSET, MASK, VALUE)      (0XFD690030, 0x01FFFFFFU ,0x01FFFFFFU)
    */
	PSU_Mask_Write(FPD_SLCR_SECURE_SLCR_PCIE_OFFSET,
		0x01FFFFFFU, 0x01FFFFFFU);
/*##################################################################### */

    /*
    * USB TZ
    */
    /*
    * Register : slcr_usb @ 0XFF4B0034

    * TrustZone Classification for USB3_0
    *  PSU_LPD_SLCR_SECURE_SLCR_USB_TZ_USB3_0                      1

    * TrustZone Classification for USB3_1
    *  PSU_LPD_SLCR_SECURE_SLCR_USB_TZ_USB3_1                      1

    * USB3 TrustZone settings
    * (OFFSET, MASK, VALUE)      (0XFF4B0034, 0x00000003U ,0x00000003U)
    */
	PSU_Mask_Write(LPD_SLCR_SECURE_SLCR_USB_OFFSET,
		0x00000003U, 0x00000003U);
/*##################################################################### */

    /*
    * SD TZ
    */
    /*
    * Register : IOU_AXI_RPRTCN @ 0XFF240004

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_SD0_AXI_ARPROT           2

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_SD1_AXI_ARPROT           2

    * AXI read protection type selection
    * (OFFSET, MASK, VALUE)      (0XFF240004, 0x003F0000U ,0x00120000U)
    */
	PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_RPRTCN_OFFSET,
		0x003F0000U, 0x00120000U);
/*##################################################################### */

    /*
    * Register : IOU_AXI_WPRTCN @ 0XFF240000

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_SD0_AXI_AWPROT           2

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_SD1_AXI_AWPROT           2

    * AXI write protection type selection
    * (OFFSET, MASK, VALUE)      (0XFF240000, 0x003F0000U ,0x00120000U)
    */
	PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_WPRTCN_OFFSET,
		0x003F0000U, 0x00120000U);
/*##################################################################### */

    /*
    * GEM TZ
    */
    /*
    * Register : IOU_AXI_RPRTCN @ 0XFF240004

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_GEM0_AXI_ARPROT          2

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_GEM1_AXI_ARPROT          2

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_GEM2_AXI_ARPROT          2

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_GEM3_AXI_ARPROT          2

    * AXI read protection type selection
    * (OFFSET, MASK, VALUE)      (0XFF240004, 0x00000FFFU ,0x00000492U)
    */
	PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_RPRTCN_OFFSET,
		0x00000FFFU, 0x00000492U);
/*##################################################################### */

    /*
    * Register : IOU_AXI_WPRTCN @ 0XFF240000

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_GEM0_AXI_AWPROT          2

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_GEM1_AXI_AWPROT          2

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_GEM2_AXI_AWPROT          2

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_GEM3_AXI_AWPROT          2

    * AXI write protection type selection
    * (OFFSET, MASK, VALUE)      (0XFF240000, 0x00000FFFU ,0x00000492U)
    */
	PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_WPRTCN_OFFSET,
		0x00000FFFU, 0x00000492U);
/*##################################################################### */

    /*
    * QSPI TZ
    */
    /*
    * Register : IOU_AXI_WPRTCN @ 0XFF240000

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_QSPI_AXI_AWPROT          2

    * AXI write protection type selection
    * (OFFSET, MASK, VALUE)      (0XFF240000, 0x0E000000U ,0x04000000U)
    */
	PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_WPRTCN_OFFSET,
		0x0E000000U, 0x04000000U);
/*##################################################################### */

    /*
    * NAND TZ
    */
    /*
    * Register : IOU_AXI_RPRTCN @ 0XFF240004

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_NAND_AXI_ARPROT          2

    * AXI read protection type selection
    * (OFFSET, MASK, VALUE)      (0XFF240004, 0x01C00000U ,0x00800000U)
    */
	PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_RPRTCN_OFFSET,
		0x01C00000U, 0x00800000U);
/*##################################################################### */

    /*
    * Register : IOU_AXI_WPRTCN @ 0XFF240000

    * AXI protection [0] = '0' : Normal access [0] = '1' : Previleged access [
    * 1] = '0' : Secure access [1] = '1' : No secure access [2] = '0' : Data a
    * ccess [2] = '1'' : Instruction access
    *  PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_NAND_AXI_AWPROT          2

    * AXI write protection type selection
    * (OFFSET, MASK, VALUE)      (0XFF240000, 0x01C00000U ,0x00800000U)
    */
	PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_WPRTCN_OFFSET,
		0x01C00000U, 0x00800000U);
/*##################################################################### */

    /*
    * DMA TZ
    */
    /*
    * Register : slcr_adma @ 0XFF4B0024

    * TrustZone Classification for ADMA
    *  PSU_LPD_SLCR_SECURE_SLCR_ADMA_TZ                            0xFF

    * RPU TrustZone settings
    * (OFFSET, MASK, VALUE)      (0XFF4B0024, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(LPD_SLCR_SECURE_SLCR_ADMA_OFFSET,
		0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : slcr_gdma @ 0XFD690050

    * TrustZone Classification for GDMA
    *  PSU_FPD_SLCR_SECURE_SLCR_GDMA_TZ                            0xFF

    * GDMA Trustzone Settings
    * (OFFSET, MASK, VALUE)      (0XFD690050, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(FPD_SLCR_SECURE_SLCR_GDMA_OFFSET,
		0x000000FFU, 0x000000FFU);
/*##################################################################### */


	return 1;
}
unsigned long psu_serdes_init_data(void)
{
    /*
    * SERDES INITIALIZATION
    */
    /*
    * GT REFERENCE CLOCK SOURCE SELECTION
    */
    /*
    * Register : PLL_REF_SEL0 @ 0XFD410000

    * PLL0 Reference Selection. 0x0 - 5MHz, 0x1 - 9.6MHz, 0x2 - 10MHz, 0x3 - 1
    * 2MHz, 0x4 - 13MHz, 0x5 - 19.2MHz, 0x6 - 20MHz, 0x7 - 24MHz, 0x8 - 26MHz,
    *  0x9 - 27MHz, 0xA - 38.4MHz, 0xB - 40MHz, 0xC - 52MHz, 0xD - 100MHz, 0xE
    *  - 108MHz, 0xF - 125MHz, 0x10 - 135MHz, 0x11 - 150 MHz. 0x12 to 0x1F - R
    * eserved
    *  PSU_SERDES_PLL_REF_SEL0_PLLREFSEL0                          0xD

    * PLL0 Reference Selection Register
    * (OFFSET, MASK, VALUE)      (0XFD410000, 0x0000001FU ,0x0000000DU)
    */
	PSU_Mask_Write(SERDES_PLL_REF_SEL0_OFFSET, 0x0000001FU, 0x0000000DU);
/*##################################################################### */

    /*
    * Register : PLL_REF_SEL1 @ 0XFD410004

    * PLL1 Reference Selection. 0x0 - 5MHz, 0x1 - 9.6MHz, 0x2 - 10MHz, 0x3 - 1
    * 2MHz, 0x4 - 13MHz, 0x5 - 19.2MHz, 0x6 - 20MHz, 0x7 - 24MHz, 0x8 - 26MHz,
    *  0x9 - 27MHz, 0xA - 38.4MHz, 0xB - 40MHz, 0xC - 52MHz, 0xD - 100MHz, 0xE
    *  - 108MHz, 0xF - 125MHz, 0x10 - 135MHz, 0x11 - 150 MHz. 0x12 to 0x1F - R
    * eserved
    *  PSU_SERDES_PLL_REF_SEL1_PLLREFSEL1                          0x9

    * PLL1 Reference Selection Register
    * (OFFSET, MASK, VALUE)      (0XFD410004, 0x0000001FU ,0x00000009U)
    */
	PSU_Mask_Write(SERDES_PLL_REF_SEL1_OFFSET, 0x0000001FU, 0x00000009U);
/*##################################################################### */

    /*
    * Register : PLL_REF_SEL2 @ 0XFD410008

    * PLL2 Reference Selection. 0x0 - 5MHz, 0x1 - 9.6MHz, 0x2 - 10MHz, 0x3 - 1
    * 2MHz, 0x4 - 13MHz, 0x5 - 19.2MHz, 0x6 - 20MHz, 0x7 - 24MHz, 0x8 - 26MHz,
    *  0x9 - 27MHz, 0xA - 38.4MHz, 0xB - 40MHz, 0xC - 52MHz, 0xD - 100MHz, 0xE
    *  - 108MHz, 0xF - 125MHz, 0x10 - 135MHz, 0x11 - 150 MHz. 0x12 to 0x1F - R
    * eserved
    *  PSU_SERDES_PLL_REF_SEL2_PLLREFSEL2                          0x8

    * PLL2 Reference Selection Register
    * (OFFSET, MASK, VALUE)      (0XFD410008, 0x0000001FU ,0x00000008U)
    */
	PSU_Mask_Write(SERDES_PLL_REF_SEL2_OFFSET, 0x0000001FU, 0x00000008U);
/*##################################################################### */

    /*
    * Register : PLL_REF_SEL3 @ 0XFD41000C

    * PLL3 Reference Selection. 0x0 - 5MHz, 0x1 - 9.6MHz, 0x2 - 10MHz, 0x3 - 1
    * 2MHz, 0x4 - 13MHz, 0x5 - 19.2MHz, 0x6 - 20MHz, 0x7 - 24MHz, 0x8 - 26MHz,
    *  0x9 - 27MHz, 0xA - 38.4MHz, 0xB - 40MHz, 0xC - 52MHz, 0xD - 100MHz, 0xE
    *  - 108MHz, 0xF - 125MHz, 0x10 - 135MHz, 0x11 - 150 MHz. 0x12 to 0x1F - R
    * eserved
    *  PSU_SERDES_PLL_REF_SEL3_PLLREFSEL3                          0xF

    * PLL3 Reference Selection Register
    * (OFFSET, MASK, VALUE)      (0XFD41000C, 0x0000001FU ,0x0000000FU)
    */
	PSU_Mask_Write(SERDES_PLL_REF_SEL3_OFFSET, 0x0000001FU, 0x0000000FU);
/*##################################################################### */

    /*
    * GT REFERENCE CLOCK FREQUENCY SELECTION
    */
    /*
    * Register : L0_L0_REF_CLK_SEL @ 0XFD402860

    * Sel of lane 0 ref clock local mux. Set to 1 to select lane 0 slicer outp
    * ut. Set to 0 to select lane0 ref clock mux output.
    *  PSU_SERDES_L0_L0_REF_CLK_SEL_L0_REF_CLK_LCL_SEL             0x1

    * Lane0 Ref Clock Selection Register
    * (OFFSET, MASK, VALUE)      (0XFD402860, 0x00000080U ,0x00000080U)
    */
	PSU_Mask_Write(SERDES_L0_L0_REF_CLK_SEL_OFFSET,
		0x00000080U, 0x00000080U);
/*##################################################################### */

    /*
    * Register : L0_L1_REF_CLK_SEL @ 0XFD402864

    * Sel of lane 1 ref clock local mux. Set to 1 to select lane 1 slicer outp
    * ut. Set to 0 to select lane1 ref clock mux output.
    *  PSU_SERDES_L0_L1_REF_CLK_SEL_L1_REF_CLK_LCL_SEL             0x0

    * Bit 3 of lane 1 ref clock mux one hot sel. Set to 1 to select lane 3 sli
    * cer output from ref clock network
    *  PSU_SERDES_L0_L1_REF_CLK_SEL_L1_REF_CLK_SEL_3               0x1

    * Lane1 Ref Clock Selection Register
    * (OFFSET, MASK, VALUE)      (0XFD402864, 0x00000088U ,0x00000008U)
    */
	PSU_Mask_Write(SERDES_L0_L1_REF_CLK_SEL_OFFSET,
		0x00000088U, 0x00000008U);
/*##################################################################### */

    /*
    * Register : L0_L2_REF_CLK_SEL @ 0XFD402868

    * Sel of lane 2 ref clock local mux. Set to 1 to select lane 1 slicer outp
    * ut. Set to 0 to select lane2 ref clock mux output.
    *  PSU_SERDES_L0_L2_REF_CLK_SEL_L2_REF_CLK_LCL_SEL             0x1

    * Lane2 Ref Clock Selection Register
    * (OFFSET, MASK, VALUE)      (0XFD402868, 0x00000080U ,0x00000080U)
    */
	PSU_Mask_Write(SERDES_L0_L2_REF_CLK_SEL_OFFSET,
		0x00000080U, 0x00000080U);
/*##################################################################### */

    /*
    * Register : L0_L3_REF_CLK_SEL @ 0XFD40286C

    * Sel of lane 3 ref clock local mux. Set to 1 to select lane 3 slicer outp
    * ut. Set to 0 to select lane3 ref clock mux output.
    *  PSU_SERDES_L0_L3_REF_CLK_SEL_L3_REF_CLK_LCL_SEL             0x0

    * Bit 1 of lane 3 ref clock mux one hot sel. Set to 1 to select lane 1 sli
    * cer output from ref clock network
    *  PSU_SERDES_L0_L3_REF_CLK_SEL_L3_REF_CLK_SEL_1               0x1

    * Lane3 Ref Clock Selection Register
    * (OFFSET, MASK, VALUE)      (0XFD40286C, 0x00000082U ,0x00000002U)
    */
	PSU_Mask_Write(SERDES_L0_L3_REF_CLK_SEL_OFFSET,
		0x00000082U, 0x00000002U);
/*##################################################################### */

    /*
    * ENABLE SPREAD SPECTRUM
    */
    /*
    * Register : L2_TM_PLL_DIG_37 @ 0XFD40A094

    * Enable/Disable coarse code satureation limiting logic
    *  PSU_SERDES_L2_TM_PLL_DIG_37_TM_ENABLE_COARSE_SATURATION     0x1

    * Test mode register 37
    * (OFFSET, MASK, VALUE)      (0XFD40A094, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L2_TM_PLL_DIG_37_OFFSET,
		0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * Register : L2_PLL_SS_STEPS_0_LSB @ 0XFD40A368

    * Spread Spectrum No of Steps [7:0]
    *  PSU_SERDES_L2_PLL_SS_STEPS_0_LSB_SS_NUM_OF_STEPS_0_LSB      0x38

    * Spread Spectrum No of Steps bits 7:0
    * (OFFSET, MASK, VALUE)      (0XFD40A368, 0x000000FFU ,0x00000038U)
    */
	PSU_Mask_Write(SERDES_L2_PLL_SS_STEPS_0_LSB_OFFSET,
		0x000000FFU, 0x00000038U);
/*##################################################################### */

    /*
    * Register : L2_PLL_SS_STEPS_1_MSB @ 0XFD40A36C

    * Spread Spectrum No of Steps [10:8]
    *  PSU_SERDES_L2_PLL_SS_STEPS_1_MSB_SS_NUM_OF_STEPS_1_MSB      0x03

    * Spread Spectrum No of Steps bits 10:8
    * (OFFSET, MASK, VALUE)      (0XFD40A36C, 0x00000007U ,0x00000003U)
    */
	PSU_Mask_Write(SERDES_L2_PLL_SS_STEPS_1_MSB_OFFSET,
		0x00000007U, 0x00000003U);
/*##################################################################### */

    /*
    * Register : L3_PLL_SS_STEPS_0_LSB @ 0XFD40E368

    * Spread Spectrum No of Steps [7:0]
    *  PSU_SERDES_L3_PLL_SS_STEPS_0_LSB_SS_NUM_OF_STEPS_0_LSB      0xE0

    * Spread Spectrum No of Steps bits 7:0
    * (OFFSET, MASK, VALUE)      (0XFD40E368, 0x000000FFU ,0x000000E0U)
    */
	PSU_Mask_Write(SERDES_L3_PLL_SS_STEPS_0_LSB_OFFSET,
		0x000000FFU, 0x000000E0U);
/*##################################################################### */

    /*
    * Register : L3_PLL_SS_STEPS_1_MSB @ 0XFD40E36C

    * Spread Spectrum No of Steps [10:8]
    *  PSU_SERDES_L3_PLL_SS_STEPS_1_MSB_SS_NUM_OF_STEPS_1_MSB      0x3

    * Spread Spectrum No of Steps bits 10:8
    * (OFFSET, MASK, VALUE)      (0XFD40E36C, 0x00000007U ,0x00000003U)
    */
	PSU_Mask_Write(SERDES_L3_PLL_SS_STEPS_1_MSB_OFFSET,
		0x00000007U, 0x00000003U);
/*##################################################################### */

    /*
    * Register : L1_PLL_SS_STEPS_0_LSB @ 0XFD406368

    * Spread Spectrum No of Steps [7:0]
    *  PSU_SERDES_L1_PLL_SS_STEPS_0_LSB_SS_NUM_OF_STEPS_0_LSB      0x58

    * Spread Spectrum No of Steps bits 7:0
    * (OFFSET, MASK, VALUE)      (0XFD406368, 0x000000FFU ,0x00000058U)
    */
	PSU_Mask_Write(SERDES_L1_PLL_SS_STEPS_0_LSB_OFFSET,
		0x000000FFU, 0x00000058U);
/*##################################################################### */

    /*
    * Register : L1_PLL_SS_STEPS_1_MSB @ 0XFD40636C

    * Spread Spectrum No of Steps [10:8]
    *  PSU_SERDES_L1_PLL_SS_STEPS_1_MSB_SS_NUM_OF_STEPS_1_MSB      0x3

    * Spread Spectrum No of Steps bits 10:8
    * (OFFSET, MASK, VALUE)      (0XFD40636C, 0x00000007U ,0x00000003U)
    */
	PSU_Mask_Write(SERDES_L1_PLL_SS_STEPS_1_MSB_OFFSET,
		0x00000007U, 0x00000003U);
/*##################################################################### */

    /*
    * Register : L1_PLL_SS_STEP_SIZE_0_LSB @ 0XFD406370

    * Step Size for Spread Spectrum [7:0]
    *  PSU_SERDES_L1_PLL_SS_STEP_SIZE_0_LSB_SS_STEP_SIZE_0_LSB     0x7C

    * Step Size for Spread Spectrum LSB
    * (OFFSET, MASK, VALUE)      (0XFD406370, 0x000000FFU ,0x0000007CU)
    */
	PSU_Mask_Write(SERDES_L1_PLL_SS_STEP_SIZE_0_LSB_OFFSET,
		0x000000FFU, 0x0000007CU);
/*##################################################################### */

    /*
    * Register : L1_PLL_SS_STEP_SIZE_1 @ 0XFD406374

    * Step Size for Spread Spectrum [15:8]
    *  PSU_SERDES_L1_PLL_SS_STEP_SIZE_1_SS_STEP_SIZE_1             0x33

    * Step Size for Spread Spectrum 1
    * (OFFSET, MASK, VALUE)      (0XFD406374, 0x000000FFU ,0x00000033U)
    */
	PSU_Mask_Write(SERDES_L1_PLL_SS_STEP_SIZE_1_OFFSET,
		0x000000FFU, 0x00000033U);
/*##################################################################### */

    /*
    * Register : L1_PLL_SS_STEP_SIZE_2 @ 0XFD406378

    * Step Size for Spread Spectrum [23:16]
    *  PSU_SERDES_L1_PLL_SS_STEP_SIZE_2_SS_STEP_SIZE_2             0x2

    * Step Size for Spread Spectrum 2
    * (OFFSET, MASK, VALUE)      (0XFD406378, 0x000000FFU ,0x00000002U)
    */
	PSU_Mask_Write(SERDES_L1_PLL_SS_STEP_SIZE_2_OFFSET,
		0x000000FFU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : L1_PLL_SS_STEP_SIZE_3_MSB @ 0XFD40637C

    * Step Size for Spread Spectrum [25:24]
    *  PSU_SERDES_L1_PLL_SS_STEP_SIZE_3_MSB_SS_STEP_SIZE_3_MSB     0x0

    * Enable/Disable test mode force on SS step size
    *  PSU_SERDES_L1_PLL_SS_STEP_SIZE_3_MSB_FORCE_SS_STEP_SIZE     0x1

    * Enable/Disable test mode force on SS no of steps
    *  PSU_SERDES_L1_PLL_SS_STEP_SIZE_3_MSB_FORCE_SS_NUM_OF_STEPS  0x1

    * Enable force on enable Spread Spectrum
    * (OFFSET, MASK, VALUE)      (0XFD40637C, 0x00000033U ,0x00000030U)
    */
	PSU_Mask_Write(SERDES_L1_PLL_SS_STEP_SIZE_3_MSB_OFFSET,
		0x00000033U, 0x00000030U);
/*##################################################################### */

    /*
    * Register : L2_PLL_SS_STEP_SIZE_0_LSB @ 0XFD40A370

    * Step Size for Spread Spectrum [7:0]
    *  PSU_SERDES_L2_PLL_SS_STEP_SIZE_0_LSB_SS_STEP_SIZE_0_LSB     0xF4

    * Step Size for Spread Spectrum LSB
    * (OFFSET, MASK, VALUE)      (0XFD40A370, 0x000000FFU ,0x000000F4U)
    */
	PSU_Mask_Write(SERDES_L2_PLL_SS_STEP_SIZE_0_LSB_OFFSET,
		0x000000FFU, 0x000000F4U);
/*##################################################################### */

    /*
    * Register : L2_PLL_SS_STEP_SIZE_1 @ 0XFD40A374

    * Step Size for Spread Spectrum [15:8]
    *  PSU_SERDES_L2_PLL_SS_STEP_SIZE_1_SS_STEP_SIZE_1             0x31

    * Step Size for Spread Spectrum 1
    * (OFFSET, MASK, VALUE)      (0XFD40A374, 0x000000FFU ,0x00000031U)
    */
	PSU_Mask_Write(SERDES_L2_PLL_SS_STEP_SIZE_1_OFFSET,
		0x000000FFU, 0x00000031U);
/*##################################################################### */

    /*
    * Register : L2_PLL_SS_STEP_SIZE_2 @ 0XFD40A378

    * Step Size for Spread Spectrum [23:16]
    *  PSU_SERDES_L2_PLL_SS_STEP_SIZE_2_SS_STEP_SIZE_2             0x2

    * Step Size for Spread Spectrum 2
    * (OFFSET, MASK, VALUE)      (0XFD40A378, 0x000000FFU ,0x00000002U)
    */
	PSU_Mask_Write(SERDES_L2_PLL_SS_STEP_SIZE_2_OFFSET,
		0x000000FFU, 0x00000002U);
/*##################################################################### */

    /*
    * Register : L2_PLL_SS_STEP_SIZE_3_MSB @ 0XFD40A37C

    * Step Size for Spread Spectrum [25:24]
    *  PSU_SERDES_L2_PLL_SS_STEP_SIZE_3_MSB_SS_STEP_SIZE_3_MSB     0x0

    * Enable/Disable test mode force on SS step size
    *  PSU_SERDES_L2_PLL_SS_STEP_SIZE_3_MSB_FORCE_SS_STEP_SIZE     0x1

    * Enable/Disable test mode force on SS no of steps
    *  PSU_SERDES_L2_PLL_SS_STEP_SIZE_3_MSB_FORCE_SS_NUM_OF_STEPS  0x1

    * Enable force on enable Spread Spectrum
    * (OFFSET, MASK, VALUE)      (0XFD40A37C, 0x00000033U ,0x00000030U)
    */
	PSU_Mask_Write(SERDES_L2_PLL_SS_STEP_SIZE_3_MSB_OFFSET,
		0x00000033U, 0x00000030U);
/*##################################################################### */

    /*
    * Register : L3_PLL_SS_STEP_SIZE_0_LSB @ 0XFD40E370

    * Step Size for Spread Spectrum [7:0]
    *  PSU_SERDES_L3_PLL_SS_STEP_SIZE_0_LSB_SS_STEP_SIZE_0_LSB     0xC9

    * Step Size for Spread Spectrum LSB
    * (OFFSET, MASK, VALUE)      (0XFD40E370, 0x000000FFU ,0x000000C9U)
    */
	PSU_Mask_Write(SERDES_L3_PLL_SS_STEP_SIZE_0_LSB_OFFSET,
		0x000000FFU, 0x000000C9U);
/*##################################################################### */

    /*
    * Register : L3_PLL_SS_STEP_SIZE_1 @ 0XFD40E374

    * Step Size for Spread Spectrum [15:8]
    *  PSU_SERDES_L3_PLL_SS_STEP_SIZE_1_SS_STEP_SIZE_1             0xD2

    * Step Size for Spread Spectrum 1
    * (OFFSET, MASK, VALUE)      (0XFD40E374, 0x000000FFU ,0x000000D2U)
    */
	PSU_Mask_Write(SERDES_L3_PLL_SS_STEP_SIZE_1_OFFSET,
		0x000000FFU, 0x000000D2U);
/*##################################################################### */

    /*
    * Register : L3_PLL_SS_STEP_SIZE_2 @ 0XFD40E378

    * Step Size for Spread Spectrum [23:16]
    *  PSU_SERDES_L3_PLL_SS_STEP_SIZE_2_SS_STEP_SIZE_2             0x1

    * Step Size for Spread Spectrum 2
    * (OFFSET, MASK, VALUE)      (0XFD40E378, 0x000000FFU ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L3_PLL_SS_STEP_SIZE_2_OFFSET,
		0x000000FFU, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L3_PLL_SS_STEP_SIZE_3_MSB @ 0XFD40E37C

    * Step Size for Spread Spectrum [25:24]
    *  PSU_SERDES_L3_PLL_SS_STEP_SIZE_3_MSB_SS_STEP_SIZE_3_MSB     0x0

    * Enable/Disable test mode force on SS step size
    *  PSU_SERDES_L3_PLL_SS_STEP_SIZE_3_MSB_FORCE_SS_STEP_SIZE     0x1

    * Enable/Disable test mode force on SS no of steps
    *  PSU_SERDES_L3_PLL_SS_STEP_SIZE_3_MSB_FORCE_SS_NUM_OF_STEPS  0x1

    * Enable test mode forcing on enable Spread Spectrum
    *  PSU_SERDES_L3_PLL_SS_STEP_SIZE_3_MSB_TM_FORCE_EN_SS         0x1

    * Enable force on enable Spread Spectrum
    * (OFFSET, MASK, VALUE)      (0XFD40E37C, 0x000000B3U ,0x000000B0U)
    */
	PSU_Mask_Write(SERDES_L3_PLL_SS_STEP_SIZE_3_MSB_OFFSET,
		0x000000B3U, 0x000000B0U);
/*##################################################################### */

    /*
    * Register : L2_TM_DIG_6 @ 0XFD40906C

    * Bypass Descrambler
    *  PSU_SERDES_L2_TM_DIG_6_BYPASS_DESCRAM                       0x1

    * Enable Bypass for <1> TM_DIG_CTRL_6
    *  PSU_SERDES_L2_TM_DIG_6_FORCE_BYPASS_DESCRAM                 0x1

    * Data path test modes in decoder and descram
    * (OFFSET, MASK, VALUE)      (0XFD40906C, 0x00000003U ,0x00000003U)
    */
	PSU_Mask_Write(SERDES_L2_TM_DIG_6_OFFSET, 0x00000003U, 0x00000003U);
/*##################################################################### */

    /*
    * Register : L2_TX_DIG_TM_61 @ 0XFD4080F4

    * Bypass scrambler signal
    *  PSU_SERDES_L2_TX_DIG_TM_61_BYPASS_SCRAM                     0x1

    * Enable/disable scrambler bypass signal
    *  PSU_SERDES_L2_TX_DIG_TM_61_FORCE_BYPASS_SCRAM               0x1

    * MPHY PLL Gear and bypass scrambler
    * (OFFSET, MASK, VALUE)      (0XFD4080F4, 0x00000003U ,0x00000003U)
    */
	PSU_Mask_Write(SERDES_L2_TX_DIG_TM_61_OFFSET,
		0x00000003U, 0x00000003U);
/*##################################################################### */

    /*
    * Register : L3_PLL_FBDIV_FRAC_3_MSB @ 0XFD40E360

    * Enable test mode force on fractional mode enable
    *  PSU_SERDES_L3_PLL_FBDIV_FRAC_3_MSB_TM_FORCE_EN_FRAC         0x1

    * Fractional feedback division control and fractional value for feedback d
    * ivision bits 26:24
    * (OFFSET, MASK, VALUE)      (0XFD40E360, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L3_PLL_FBDIV_FRAC_3_MSB_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : L3_TM_DIG_6 @ 0XFD40D06C

    * Bypass 8b10b decoder
    *  PSU_SERDES_L3_TM_DIG_6_BYPASS_DECODER                       0x1

    * Enable Bypass for <3> TM_DIG_CTRL_6
    *  PSU_SERDES_L3_TM_DIG_6_FORCE_BYPASS_DEC                     0x1

    * Bypass Descrambler
    *  PSU_SERDES_L3_TM_DIG_6_BYPASS_DESCRAM                       0x1

    * Enable Bypass for <1> TM_DIG_CTRL_6
    *  PSU_SERDES_L3_TM_DIG_6_FORCE_BYPASS_DESCRAM                 0x1

    * Data path test modes in decoder and descram
    * (OFFSET, MASK, VALUE)      (0XFD40D06C, 0x0000000FU ,0x0000000FU)
    */
	PSU_Mask_Write(SERDES_L3_TM_DIG_6_OFFSET, 0x0000000FU, 0x0000000FU);
/*##################################################################### */

    /*
    * Register : L3_TX_DIG_TM_61 @ 0XFD40C0F4

    * Enable/disable encoder bypass signal
    *  PSU_SERDES_L3_TX_DIG_TM_61_BYPASS_ENC                       0x1

    * Bypass scrambler signal
    *  PSU_SERDES_L3_TX_DIG_TM_61_BYPASS_SCRAM                     0x1

    * Enable/disable scrambler bypass signal
    *  PSU_SERDES_L3_TX_DIG_TM_61_FORCE_BYPASS_SCRAM               0x1

    * MPHY PLL Gear and bypass scrambler
    * (OFFSET, MASK, VALUE)      (0XFD40C0F4, 0x0000000BU ,0x0000000BU)
    */
	PSU_Mask_Write(SERDES_L3_TX_DIG_TM_61_OFFSET,
		0x0000000BU, 0x0000000BU);
/*##################################################################### */

    /*
    * ENABLE CHICKEN BIT FOR PCIE AND USB
    */
    /*
    * Register : L0_TM_AUX_0 @ 0XFD4010CC

    * Spare- not used
    *  PSU_SERDES_L0_TM_AUX_0_BIT_2                                1

    * Spare registers
    * (OFFSET, MASK, VALUE)      (0XFD4010CC, 0x00000020U ,0x00000020U)
    */
	PSU_Mask_Write(SERDES_L0_TM_AUX_0_OFFSET, 0x00000020U, 0x00000020U);
/*##################################################################### */

    /*
    * Register : L2_TM_AUX_0 @ 0XFD4090CC

    * Spare- not used
    *  PSU_SERDES_L2_TM_AUX_0_BIT_2                                1

    * Spare registers
    * (OFFSET, MASK, VALUE)      (0XFD4090CC, 0x00000020U ,0x00000020U)
    */
	PSU_Mask_Write(SERDES_L2_TM_AUX_0_OFFSET, 0x00000020U, 0x00000020U);
/*##################################################################### */

    /*
    * ENABLING EYE SURF
    */
    /*
    * Register : L0_TM_DIG_8 @ 0XFD401074

    * Enable Eye Surf
    *  PSU_SERDES_L0_TM_DIG_8_EYESURF_ENABLE                       0x1

    * Test modes for Elastic buffer and enabling Eye Surf
    * (OFFSET, MASK, VALUE)      (0XFD401074, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L0_TM_DIG_8_OFFSET, 0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * Register : L1_TM_DIG_8 @ 0XFD405074

    * Enable Eye Surf
    *  PSU_SERDES_L1_TM_DIG_8_EYESURF_ENABLE                       0x1

    * Test modes for Elastic buffer and enabling Eye Surf
    * (OFFSET, MASK, VALUE)      (0XFD405074, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L1_TM_DIG_8_OFFSET, 0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * Register : L2_TM_DIG_8 @ 0XFD409074

    * Enable Eye Surf
    *  PSU_SERDES_L2_TM_DIG_8_EYESURF_ENABLE                       0x1

    * Test modes for Elastic buffer and enabling Eye Surf
    * (OFFSET, MASK, VALUE)      (0XFD409074, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L2_TM_DIG_8_OFFSET, 0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * Register : L3_TM_DIG_8 @ 0XFD40D074

    * Enable Eye Surf
    *  PSU_SERDES_L3_TM_DIG_8_EYESURF_ENABLE                       0x1

    * Test modes for Elastic buffer and enabling Eye Surf
    * (OFFSET, MASK, VALUE)      (0XFD40D074, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L3_TM_DIG_8_OFFSET, 0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * ILL SETTINGS FOR GAIN AND LOCK SETTINGS
    */
    /*
    * Register : L0_TM_MISC2 @ 0XFD40189C

    * ILL calib counts BYPASSED with calcode bits
    *  PSU_SERDES_L0_TM_MISC2_ILL_CAL_BYPASS_COUNTS                0x1

    * sampler cal
    * (OFFSET, MASK, VALUE)      (0XFD40189C, 0x00000080U ,0x00000080U)
    */
	PSU_Mask_Write(SERDES_L0_TM_MISC2_OFFSET, 0x00000080U, 0x00000080U);
/*##################################################################### */

    /*
    * Register : L0_TM_IQ_ILL1 @ 0XFD4018F8

    * IQ ILL F0 CALCODE bypass value. MPHY : G1a, PCIE : Gen 1, SATA : Gen1 ,
    * USB3 : SS
    *  PSU_SERDES_L0_TM_IQ_ILL1_ILL_BYPASS_IQ_CALCODE_F0           0x64

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD4018F8, 0x000000FFU ,0x00000064U)
    */
	PSU_Mask_Write(SERDES_L0_TM_IQ_ILL1_OFFSET,
		0x000000FFU, 0x00000064U);
/*##################################################################### */

    /*
    * Register : L0_TM_IQ_ILL2 @ 0XFD4018FC

    * IQ ILL F1 CALCODE bypass value. MPHY : G1b, PCIE : Gen2, SATA: Gen2
    *  PSU_SERDES_L0_TM_IQ_ILL2_ILL_BYPASS_IQ_CALCODE_F1           0x64

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD4018FC, 0x000000FFU ,0x00000064U)
    */
	PSU_Mask_Write(SERDES_L0_TM_IQ_ILL2_OFFSET,
		0x000000FFU, 0x00000064U);
/*##################################################################### */

    /*
    * Register : L0_TM_ILL12 @ 0XFD401990

    * G1A pll ctr bypass value
    *  PSU_SERDES_L0_TM_ILL12_G1A_PLL_CTR_BYP_VAL                  0x11

    * ill pll counter values
    * (OFFSET, MASK, VALUE)      (0XFD401990, 0x000000FFU ,0x00000011U)
    */
	PSU_Mask_Write(SERDES_L0_TM_ILL12_OFFSET, 0x000000FFU, 0x00000011U);
/*##################################################################### */

    /*
    * Register : L0_TM_E_ILL1 @ 0XFD401924

    * E ILL F0 CALCODE bypass value. MPHY : G1a, PCIE : Gen 1, SATA : Gen1 , U
    * SB3 : SS
    *  PSU_SERDES_L0_TM_E_ILL1_ILL_BYPASS_E_CALCODE_F0             0x4

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD401924, 0x000000FFU ,0x00000004U)
    */
	PSU_Mask_Write(SERDES_L0_TM_E_ILL1_OFFSET, 0x000000FFU, 0x00000004U);
/*##################################################################### */

    /*
    * Register : L0_TM_E_ILL2 @ 0XFD401928

    * E ILL F1 CALCODE bypass value. MPHY : G1b, PCIE : Gen2, SATA: Gen2
    *  PSU_SERDES_L0_TM_E_ILL2_ILL_BYPASS_E_CALCODE_F1             0xFE

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD401928, 0x000000FFU ,0x000000FEU)
    */
	PSU_Mask_Write(SERDES_L0_TM_E_ILL2_OFFSET, 0x000000FFU, 0x000000FEU);
/*##################################################################### */

    /*
    * Register : L0_TM_IQ_ILL3 @ 0XFD401900

    * IQ ILL F2CALCODE bypass value. MPHY : G2a, SATA : Gen3
    *  PSU_SERDES_L0_TM_IQ_ILL3_ILL_BYPASS_IQ_CALCODE_F2           0x64

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD401900, 0x000000FFU ,0x00000064U)
    */
	PSU_Mask_Write(SERDES_L0_TM_IQ_ILL3_OFFSET,
		0x000000FFU, 0x00000064U);
/*##################################################################### */

    /*
    * Register : L0_TM_E_ILL3 @ 0XFD40192C

    * E ILL F2CALCODE bypass value. MPHY : G2a, SATA : Gen3
    *  PSU_SERDES_L0_TM_E_ILL3_ILL_BYPASS_E_CALCODE_F2             0x0

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD40192C, 0x000000FFU ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L0_TM_E_ILL3_OFFSET, 0x000000FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : L0_TM_ILL8 @ 0XFD401980

    * ILL calibration code change wait time
    *  PSU_SERDES_L0_TM_ILL8_ILL_CAL_ITER_WAIT                     0xFF

    * ILL cal routine control
    * (OFFSET, MASK, VALUE)      (0XFD401980, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(SERDES_L0_TM_ILL8_OFFSET, 0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : L0_TM_IQ_ILL8 @ 0XFD401914

    * IQ ILL polytrim bypass value
    *  PSU_SERDES_L0_TM_IQ_ILL8_ILL_BYPASS_IQ_POLYTRIM_VAL         0xF7

    * iqpi polytrim
    * (OFFSET, MASK, VALUE)      (0XFD401914, 0x000000FFU ,0x000000F7U)
    */
	PSU_Mask_Write(SERDES_L0_TM_IQ_ILL8_OFFSET,
		0x000000FFU, 0x000000F7U);
/*##################################################################### */

    /*
    * Register : L0_TM_IQ_ILL9 @ 0XFD401918

    * bypass IQ polytrim
    *  PSU_SERDES_L0_TM_IQ_ILL9_ILL_BYPASS_IQ_POLYTIM              0x1

    * enables for lf,constant gm trim and polytirm
    * (OFFSET, MASK, VALUE)      (0XFD401918, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L0_TM_IQ_ILL9_OFFSET,
		0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L0_TM_E_ILL8 @ 0XFD401940

    * E ILL polytrim bypass value
    *  PSU_SERDES_L0_TM_E_ILL8_ILL_BYPASS_E_POLYTRIM_VAL           0xF7

    * epi polytrim
    * (OFFSET, MASK, VALUE)      (0XFD401940, 0x000000FFU ,0x000000F7U)
    */
	PSU_Mask_Write(SERDES_L0_TM_E_ILL8_OFFSET, 0x000000FFU, 0x000000F7U);
/*##################################################################### */

    /*
    * Register : L0_TM_E_ILL9 @ 0XFD401944

    * bypass E polytrim
    *  PSU_SERDES_L0_TM_E_ILL9_ILL_BYPASS_E_POLYTIM                0x1

    * enables for lf,constant gm trim and polytirm
    * (OFFSET, MASK, VALUE)      (0XFD401944, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L0_TM_E_ILL9_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L0_TM_ILL13 @ 0XFD401994

    * ILL cal idle val refcnt
    *  PSU_SERDES_L0_TM_ILL13_ILL_CAL_IDLE_VAL_REFCNT              0x7

    * ill cal idle value count
    * (OFFSET, MASK, VALUE)      (0XFD401994, 0x00000007U ,0x00000007U)
    */
	PSU_Mask_Write(SERDES_L0_TM_ILL13_OFFSET, 0x00000007U, 0x00000007U);
/*##################################################################### */

    /*
    * Register : L1_TM_ILL13 @ 0XFD405994

    * ILL cal idle val refcnt
    *  PSU_SERDES_L1_TM_ILL13_ILL_CAL_IDLE_VAL_REFCNT              0x7

    * ill cal idle value count
    * (OFFSET, MASK, VALUE)      (0XFD405994, 0x00000007U ,0x00000007U)
    */
	PSU_Mask_Write(SERDES_L1_TM_ILL13_OFFSET, 0x00000007U, 0x00000007U);
/*##################################################################### */

    /*
    * Register : L2_TM_MISC2 @ 0XFD40989C

    * ILL calib counts BYPASSED with calcode bits
    *  PSU_SERDES_L2_TM_MISC2_ILL_CAL_BYPASS_COUNTS                0x1

    * sampler cal
    * (OFFSET, MASK, VALUE)      (0XFD40989C, 0x00000080U ,0x00000080U)
    */
	PSU_Mask_Write(SERDES_L2_TM_MISC2_OFFSET, 0x00000080U, 0x00000080U);
/*##################################################################### */

    /*
    * Register : L2_TM_IQ_ILL1 @ 0XFD4098F8

    * IQ ILL F0 CALCODE bypass value. MPHY : G1a, PCIE : Gen 1, SATA : Gen1 ,
    * USB3 : SS
    *  PSU_SERDES_L2_TM_IQ_ILL1_ILL_BYPASS_IQ_CALCODE_F0           0x1A

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD4098F8, 0x000000FFU ,0x0000001AU)
    */
	PSU_Mask_Write(SERDES_L2_TM_IQ_ILL1_OFFSET,
		0x000000FFU, 0x0000001AU);
/*##################################################################### */

    /*
    * Register : L2_TM_IQ_ILL2 @ 0XFD4098FC

    * IQ ILL F1 CALCODE bypass value. MPHY : G1b, PCIE : Gen2, SATA: Gen2
    *  PSU_SERDES_L2_TM_IQ_ILL2_ILL_BYPASS_IQ_CALCODE_F1           0x1A

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD4098FC, 0x000000FFU ,0x0000001AU)
    */
	PSU_Mask_Write(SERDES_L2_TM_IQ_ILL2_OFFSET,
		0x000000FFU, 0x0000001AU);
/*##################################################################### */

    /*
    * Register : L2_TM_ILL12 @ 0XFD409990

    * G1A pll ctr bypass value
    *  PSU_SERDES_L2_TM_ILL12_G1A_PLL_CTR_BYP_VAL                  0x10

    * ill pll counter values
    * (OFFSET, MASK, VALUE)      (0XFD409990, 0x000000FFU ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L2_TM_ILL12_OFFSET, 0x000000FFU, 0x00000010U);
/*##################################################################### */

    /*
    * Register : L2_TM_E_ILL1 @ 0XFD409924

    * E ILL F0 CALCODE bypass value. MPHY : G1a, PCIE : Gen 1, SATA : Gen1 , U
    * SB3 : SS
    *  PSU_SERDES_L2_TM_E_ILL1_ILL_BYPASS_E_CALCODE_F0             0xFE

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD409924, 0x000000FFU ,0x000000FEU)
    */
	PSU_Mask_Write(SERDES_L2_TM_E_ILL1_OFFSET, 0x000000FFU, 0x000000FEU);
/*##################################################################### */

    /*
    * Register : L2_TM_E_ILL2 @ 0XFD409928

    * E ILL F1 CALCODE bypass value. MPHY : G1b, PCIE : Gen2, SATA: Gen2
    *  PSU_SERDES_L2_TM_E_ILL2_ILL_BYPASS_E_CALCODE_F1             0x0

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD409928, 0x000000FFU ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L2_TM_E_ILL2_OFFSET, 0x000000FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : L2_TM_IQ_ILL3 @ 0XFD409900

    * IQ ILL F2CALCODE bypass value. MPHY : G2a, SATA : Gen3
    *  PSU_SERDES_L2_TM_IQ_ILL3_ILL_BYPASS_IQ_CALCODE_F2           0x1A

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD409900, 0x000000FFU ,0x0000001AU)
    */
	PSU_Mask_Write(SERDES_L2_TM_IQ_ILL3_OFFSET,
		0x000000FFU, 0x0000001AU);
/*##################################################################### */

    /*
    * Register : L2_TM_E_ILL3 @ 0XFD40992C

    * E ILL F2CALCODE bypass value. MPHY : G2a, SATA : Gen3
    *  PSU_SERDES_L2_TM_E_ILL3_ILL_BYPASS_E_CALCODE_F2             0x0

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD40992C, 0x000000FFU ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L2_TM_E_ILL3_OFFSET, 0x000000FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : L2_TM_ILL8 @ 0XFD409980

    * ILL calibration code change wait time
    *  PSU_SERDES_L2_TM_ILL8_ILL_CAL_ITER_WAIT                     0xFF

    * ILL cal routine control
    * (OFFSET, MASK, VALUE)      (0XFD409980, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(SERDES_L2_TM_ILL8_OFFSET, 0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : L2_TM_IQ_ILL8 @ 0XFD409914

    * IQ ILL polytrim bypass value
    *  PSU_SERDES_L2_TM_IQ_ILL8_ILL_BYPASS_IQ_POLYTRIM_VAL         0xF7

    * iqpi polytrim
    * (OFFSET, MASK, VALUE)      (0XFD409914, 0x000000FFU ,0x000000F7U)
    */
	PSU_Mask_Write(SERDES_L2_TM_IQ_ILL8_OFFSET,
		0x000000FFU, 0x000000F7U);
/*##################################################################### */

    /*
    * Register : L2_TM_IQ_ILL9 @ 0XFD409918

    * bypass IQ polytrim
    *  PSU_SERDES_L2_TM_IQ_ILL9_ILL_BYPASS_IQ_POLYTIM              0x1

    * enables for lf,constant gm trim and polytirm
    * (OFFSET, MASK, VALUE)      (0XFD409918, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L2_TM_IQ_ILL9_OFFSET,
		0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L2_TM_E_ILL8 @ 0XFD409940

    * E ILL polytrim bypass value
    *  PSU_SERDES_L2_TM_E_ILL8_ILL_BYPASS_E_POLYTRIM_VAL           0xF7

    * epi polytrim
    * (OFFSET, MASK, VALUE)      (0XFD409940, 0x000000FFU ,0x000000F7U)
    */
	PSU_Mask_Write(SERDES_L2_TM_E_ILL8_OFFSET, 0x000000FFU, 0x000000F7U);
/*##################################################################### */

    /*
    * Register : L2_TM_E_ILL9 @ 0XFD409944

    * bypass E polytrim
    *  PSU_SERDES_L2_TM_E_ILL9_ILL_BYPASS_E_POLYTIM                0x1

    * enables for lf,constant gm trim and polytirm
    * (OFFSET, MASK, VALUE)      (0XFD409944, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L2_TM_E_ILL9_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L2_TM_ILL13 @ 0XFD409994

    * ILL cal idle val refcnt
    *  PSU_SERDES_L2_TM_ILL13_ILL_CAL_IDLE_VAL_REFCNT              0x7

    * ill cal idle value count
    * (OFFSET, MASK, VALUE)      (0XFD409994, 0x00000007U ,0x00000007U)
    */
	PSU_Mask_Write(SERDES_L2_TM_ILL13_OFFSET, 0x00000007U, 0x00000007U);
/*##################################################################### */

    /*
    * Register : L3_TM_MISC2 @ 0XFD40D89C

    * ILL calib counts BYPASSED with calcode bits
    *  PSU_SERDES_L3_TM_MISC2_ILL_CAL_BYPASS_COUNTS                0x1

    * sampler cal
    * (OFFSET, MASK, VALUE)      (0XFD40D89C, 0x00000080U ,0x00000080U)
    */
	PSU_Mask_Write(SERDES_L3_TM_MISC2_OFFSET, 0x00000080U, 0x00000080U);
/*##################################################################### */

    /*
    * Register : L3_TM_IQ_ILL1 @ 0XFD40D8F8

    * IQ ILL F0 CALCODE bypass value. MPHY : G1a, PCIE : Gen 1, SATA : Gen1 ,
    * USB3 : SS
    *  PSU_SERDES_L3_TM_IQ_ILL1_ILL_BYPASS_IQ_CALCODE_F0           0x7D

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD40D8F8, 0x000000FFU ,0x0000007DU)
    */
	PSU_Mask_Write(SERDES_L3_TM_IQ_ILL1_OFFSET,
		0x000000FFU, 0x0000007DU);
/*##################################################################### */

    /*
    * Register : L3_TM_IQ_ILL2 @ 0XFD40D8FC

    * IQ ILL F1 CALCODE bypass value. MPHY : G1b, PCIE : Gen2, SATA: Gen2
    *  PSU_SERDES_L3_TM_IQ_ILL2_ILL_BYPASS_IQ_CALCODE_F1           0x7D

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD40D8FC, 0x000000FFU ,0x0000007DU)
    */
	PSU_Mask_Write(SERDES_L3_TM_IQ_ILL2_OFFSET,
		0x000000FFU, 0x0000007DU);
/*##################################################################### */

    /*
    * Register : L3_TM_ILL12 @ 0XFD40D990

    * G1A pll ctr bypass value
    *  PSU_SERDES_L3_TM_ILL12_G1A_PLL_CTR_BYP_VAL                  0x1

    * ill pll counter values
    * (OFFSET, MASK, VALUE)      (0XFD40D990, 0x000000FFU ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L3_TM_ILL12_OFFSET, 0x000000FFU, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L3_TM_E_ILL1 @ 0XFD40D924

    * E ILL F0 CALCODE bypass value. MPHY : G1a, PCIE : Gen 1, SATA : Gen1 , U
    * SB3 : SS
    *  PSU_SERDES_L3_TM_E_ILL1_ILL_BYPASS_E_CALCODE_F0             0x9C

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD40D924, 0x000000FFU ,0x0000009CU)
    */
	PSU_Mask_Write(SERDES_L3_TM_E_ILL1_OFFSET, 0x000000FFU, 0x0000009CU);
/*##################################################################### */

    /*
    * Register : L3_TM_E_ILL2 @ 0XFD40D928

    * E ILL F1 CALCODE bypass value. MPHY : G1b, PCIE : Gen2, SATA: Gen2
    *  PSU_SERDES_L3_TM_E_ILL2_ILL_BYPASS_E_CALCODE_F1             0x39

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD40D928, 0x000000FFU ,0x00000039U)
    */
	PSU_Mask_Write(SERDES_L3_TM_E_ILL2_OFFSET, 0x000000FFU, 0x00000039U);
/*##################################################################### */

    /*
    * Register : L3_TM_ILL11 @ 0XFD40D98C

    * G2A_PCIe1 PLL ctr bypass value
    *  PSU_SERDES_L3_TM_ILL11_G2A_PCIEG1_PLL_CTR_11_8_BYP_VAL      0x2

    * ill pll counter values
    * (OFFSET, MASK, VALUE)      (0XFD40D98C, 0x000000F0U ,0x00000020U)
    */
	PSU_Mask_Write(SERDES_L3_TM_ILL11_OFFSET, 0x000000F0U, 0x00000020U);
/*##################################################################### */

    /*
    * Register : L3_TM_IQ_ILL3 @ 0XFD40D900

    * IQ ILL F2CALCODE bypass value. MPHY : G2a, SATA : Gen3
    *  PSU_SERDES_L3_TM_IQ_ILL3_ILL_BYPASS_IQ_CALCODE_F2           0x7D

    * iqpi cal code
    * (OFFSET, MASK, VALUE)      (0XFD40D900, 0x000000FFU ,0x0000007DU)
    */
	PSU_Mask_Write(SERDES_L3_TM_IQ_ILL3_OFFSET,
		0x000000FFU, 0x0000007DU);
/*##################################################################### */

    /*
    * Register : L3_TM_E_ILL3 @ 0XFD40D92C

    * E ILL F2CALCODE bypass value. MPHY : G2a, SATA : Gen3
    *  PSU_SERDES_L3_TM_E_ILL3_ILL_BYPASS_E_CALCODE_F2             0x64

    * epi cal code
    * (OFFSET, MASK, VALUE)      (0XFD40D92C, 0x000000FFU ,0x00000064U)
    */
	PSU_Mask_Write(SERDES_L3_TM_E_ILL3_OFFSET, 0x000000FFU, 0x00000064U);
/*##################################################################### */

    /*
    * Register : L3_TM_ILL8 @ 0XFD40D980

    * ILL calibration code change wait time
    *  PSU_SERDES_L3_TM_ILL8_ILL_CAL_ITER_WAIT                     0xFF

    * ILL cal routine control
    * (OFFSET, MASK, VALUE)      (0XFD40D980, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(SERDES_L3_TM_ILL8_OFFSET, 0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : L3_TM_IQ_ILL8 @ 0XFD40D914

    * IQ ILL polytrim bypass value
    *  PSU_SERDES_L3_TM_IQ_ILL8_ILL_BYPASS_IQ_POLYTRIM_VAL         0xF7

    * iqpi polytrim
    * (OFFSET, MASK, VALUE)      (0XFD40D914, 0x000000FFU ,0x000000F7U)
    */
	PSU_Mask_Write(SERDES_L3_TM_IQ_ILL8_OFFSET,
		0x000000FFU, 0x000000F7U);
/*##################################################################### */

    /*
    * Register : L3_TM_IQ_ILL9 @ 0XFD40D918

    * bypass IQ polytrim
    *  PSU_SERDES_L3_TM_IQ_ILL9_ILL_BYPASS_IQ_POLYTIM              0x1

    * enables for lf,constant gm trim and polytirm
    * (OFFSET, MASK, VALUE)      (0XFD40D918, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L3_TM_IQ_ILL9_OFFSET,
		0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L3_TM_E_ILL8 @ 0XFD40D940

    * E ILL polytrim bypass value
    *  PSU_SERDES_L3_TM_E_ILL8_ILL_BYPASS_E_POLYTRIM_VAL           0xF7

    * epi polytrim
    * (OFFSET, MASK, VALUE)      (0XFD40D940, 0x000000FFU ,0x000000F7U)
    */
	PSU_Mask_Write(SERDES_L3_TM_E_ILL8_OFFSET, 0x000000FFU, 0x000000F7U);
/*##################################################################### */

    /*
    * Register : L3_TM_E_ILL9 @ 0XFD40D944

    * bypass E polytrim
    *  PSU_SERDES_L3_TM_E_ILL9_ILL_BYPASS_E_POLYTIM                0x1

    * enables for lf,constant gm trim and polytirm
    * (OFFSET, MASK, VALUE)      (0XFD40D944, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L3_TM_E_ILL9_OFFSET, 0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L3_TM_ILL13 @ 0XFD40D994

    * ILL cal idle val refcnt
    *  PSU_SERDES_L3_TM_ILL13_ILL_CAL_IDLE_VAL_REFCNT              0x7

    * ill cal idle value count
    * (OFFSET, MASK, VALUE)      (0XFD40D994, 0x00000007U ,0x00000007U)
    */
	PSU_Mask_Write(SERDES_L3_TM_ILL13_OFFSET, 0x00000007U, 0x00000007U);
/*##################################################################### */

    /*
    * SYMBOL LOCK AND WAIT
    */
    /*
    * Register : L0_TM_DIG_10 @ 0XFD40107C

    * CDR lock wait time. (1-16 us). cdr_lock_wait_time = 4'b xxxx + 4'b 0001
    *  PSU_SERDES_L0_TM_DIG_10_CDR_BIT_LOCK_TIME                   0x1

    * test control for changing cdr lock wait time
    * (OFFSET, MASK, VALUE)      (0XFD40107C, 0x0000000FU ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L0_TM_DIG_10_OFFSET, 0x0000000FU, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L1_TM_DIG_10 @ 0XFD40507C

    * CDR lock wait time. (1-16 us). cdr_lock_wait_time = 4'b xxxx + 4'b 0001
    *  PSU_SERDES_L1_TM_DIG_10_CDR_BIT_LOCK_TIME                   0x1

    * test control for changing cdr lock wait time
    * (OFFSET, MASK, VALUE)      (0XFD40507C, 0x0000000FU ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L1_TM_DIG_10_OFFSET, 0x0000000FU, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L2_TM_DIG_10 @ 0XFD40907C

    * CDR lock wait time. (1-16 us). cdr_lock_wait_time = 4'b xxxx + 4'b 0001
    *  PSU_SERDES_L2_TM_DIG_10_CDR_BIT_LOCK_TIME                   0x1

    * test control for changing cdr lock wait time
    * (OFFSET, MASK, VALUE)      (0XFD40907C, 0x0000000FU ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L2_TM_DIG_10_OFFSET, 0x0000000FU, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L3_TM_DIG_10 @ 0XFD40D07C

    * CDR lock wait time. (1-16 us). cdr_lock_wait_time = 4'b xxxx + 4'b 0001
    *  PSU_SERDES_L3_TM_DIG_10_CDR_BIT_LOCK_TIME                   0x1

    * test control for changing cdr lock wait time
    * (OFFSET, MASK, VALUE)      (0XFD40D07C, 0x0000000FU ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L3_TM_DIG_10_OFFSET, 0x0000000FU, 0x00000001U);
/*##################################################################### */

    /*
    * SIOU SETTINGS FOR BYPASS CONTROL,HSRX-DIG
    */
    /*
    * Register : L0_TM_RST_DLY @ 0XFD4019A4

    * Delay apb reset by specified amount
    *  PSU_SERDES_L0_TM_RST_DLY_APB_RST_DLY                        0xFF

    * reset delay for apb reset w.r.t pso of hsrx
    * (OFFSET, MASK, VALUE)      (0XFD4019A4, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(SERDES_L0_TM_RST_DLY_OFFSET,
		0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : L0_TM_ANA_BYP_15 @ 0XFD401038

    * Enable Bypass for <7> of TM_ANA_BYPS_15
    *  PSU_SERDES_L0_TM_ANA_BYP_15_FORCE_UPHY_ENABLE_LOW_LEAKAGE   0x1

    * Bypass control for pcs-pma interface. EQ supplies, main master supply an
    * d ps for samp c2c
    * (OFFSET, MASK, VALUE)      (0XFD401038, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L0_TM_ANA_BYP_15_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : L0_TM_ANA_BYP_12 @ 0XFD40102C

    * Enable Bypass for <7> of TM_ANA_BYPS_12
    *  PSU_SERDES_L0_TM_ANA_BYP_12_FORCE_UPHY_PSO_HSRXDIG          0x1

    * Bypass control for pcs-pma interface. Hsrx supply, hsrx des, and cdr ena
    * ble controls
    * (OFFSET, MASK, VALUE)      (0XFD40102C, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L0_TM_ANA_BYP_12_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : L1_TM_RST_DLY @ 0XFD4059A4

    * Delay apb reset by specified amount
    *  PSU_SERDES_L1_TM_RST_DLY_APB_RST_DLY                        0xFF

    * reset delay for apb reset w.r.t pso of hsrx
    * (OFFSET, MASK, VALUE)      (0XFD4059A4, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(SERDES_L1_TM_RST_DLY_OFFSET,
		0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : L1_TM_ANA_BYP_15 @ 0XFD405038

    * Enable Bypass for <7> of TM_ANA_BYPS_15
    *  PSU_SERDES_L1_TM_ANA_BYP_15_FORCE_UPHY_ENABLE_LOW_LEAKAGE   0x1

    * Bypass control for pcs-pma interface. EQ supplies, main master supply an
    * d ps for samp c2c
    * (OFFSET, MASK, VALUE)      (0XFD405038, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L1_TM_ANA_BYP_15_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : L1_TM_ANA_BYP_12 @ 0XFD40502C

    * Enable Bypass for <7> of TM_ANA_BYPS_12
    *  PSU_SERDES_L1_TM_ANA_BYP_12_FORCE_UPHY_PSO_HSRXDIG          0x1

    * Bypass control for pcs-pma interface. Hsrx supply, hsrx des, and cdr ena
    * ble controls
    * (OFFSET, MASK, VALUE)      (0XFD40502C, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L1_TM_ANA_BYP_12_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : L2_TM_RST_DLY @ 0XFD4099A4

    * Delay apb reset by specified amount
    *  PSU_SERDES_L2_TM_RST_DLY_APB_RST_DLY                        0xFF

    * reset delay for apb reset w.r.t pso of hsrx
    * (OFFSET, MASK, VALUE)      (0XFD4099A4, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(SERDES_L2_TM_RST_DLY_OFFSET,
		0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : L2_TM_ANA_BYP_15 @ 0XFD409038

    * Enable Bypass for <7> of TM_ANA_BYPS_15
    *  PSU_SERDES_L2_TM_ANA_BYP_15_FORCE_UPHY_ENABLE_LOW_LEAKAGE   0x1

    * Bypass control for pcs-pma interface. EQ supplies, main master supply an
    * d ps for samp c2c
    * (OFFSET, MASK, VALUE)      (0XFD409038, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L2_TM_ANA_BYP_15_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : L2_TM_ANA_BYP_12 @ 0XFD40902C

    * Enable Bypass for <7> of TM_ANA_BYPS_12
    *  PSU_SERDES_L2_TM_ANA_BYP_12_FORCE_UPHY_PSO_HSRXDIG          0x1

    * Bypass control for pcs-pma interface. Hsrx supply, hsrx des, and cdr ena
    * ble controls
    * (OFFSET, MASK, VALUE)      (0XFD40902C, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L2_TM_ANA_BYP_12_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : L3_TM_RST_DLY @ 0XFD40D9A4

    * Delay apb reset by specified amount
    *  PSU_SERDES_L3_TM_RST_DLY_APB_RST_DLY                        0xFF

    * reset delay for apb reset w.r.t pso of hsrx
    * (OFFSET, MASK, VALUE)      (0XFD40D9A4, 0x000000FFU ,0x000000FFU)
    */
	PSU_Mask_Write(SERDES_L3_TM_RST_DLY_OFFSET,
		0x000000FFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : L3_TM_ANA_BYP_15 @ 0XFD40D038

    * Enable Bypass for <7> of TM_ANA_BYPS_15
    *  PSU_SERDES_L3_TM_ANA_BYP_15_FORCE_UPHY_ENABLE_LOW_LEAKAGE   0x1

    * Bypass control for pcs-pma interface. EQ supplies, main master supply an
    * d ps for samp c2c
    * (OFFSET, MASK, VALUE)      (0XFD40D038, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L3_TM_ANA_BYP_15_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : L3_TM_ANA_BYP_12 @ 0XFD40D02C

    * Enable Bypass for <7> of TM_ANA_BYPS_12
    *  PSU_SERDES_L3_TM_ANA_BYP_12_FORCE_UPHY_PSO_HSRXDIG          0x1

    * Bypass control for pcs-pma interface. Hsrx supply, hsrx des, and cdr ena
    * ble controls
    * (OFFSET, MASK, VALUE)      (0XFD40D02C, 0x00000040U ,0x00000040U)
    */
	PSU_Mask_Write(SERDES_L3_TM_ANA_BYP_12_OFFSET,
		0x00000040U, 0x00000040U);
/*##################################################################### */

    /*
    * DISABLE FPL/FFL
    */
    /*
    * Register : L0_TM_MISC3 @ 0XFD4019AC

    * CDR fast phase lock control
    *  PSU_SERDES_L0_TM_MISC3_CDR_EN_FPL                           0x0

    * CDR fast frequency lock control
    *  PSU_SERDES_L0_TM_MISC3_CDR_EN_FFL                           0x0

    * debug bus selection bit, cdr fast phase and freq controls
    * (OFFSET, MASK, VALUE)      (0XFD4019AC, 0x00000003U ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L0_TM_MISC3_OFFSET, 0x00000003U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : L1_TM_MISC3 @ 0XFD4059AC

    * CDR fast phase lock control
    *  PSU_SERDES_L1_TM_MISC3_CDR_EN_FPL                           0x0

    * CDR fast frequency lock control
    *  PSU_SERDES_L1_TM_MISC3_CDR_EN_FFL                           0x0

    * debug bus selection bit, cdr fast phase and freq controls
    * (OFFSET, MASK, VALUE)      (0XFD4059AC, 0x00000003U ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L1_TM_MISC3_OFFSET, 0x00000003U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : L2_TM_MISC3 @ 0XFD4099AC

    * CDR fast phase lock control
    *  PSU_SERDES_L2_TM_MISC3_CDR_EN_FPL                           0x0

    * CDR fast frequency lock control
    *  PSU_SERDES_L2_TM_MISC3_CDR_EN_FFL                           0x0

    * debug bus selection bit, cdr fast phase and freq controls
    * (OFFSET, MASK, VALUE)      (0XFD4099AC, 0x00000003U ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L2_TM_MISC3_OFFSET, 0x00000003U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : L3_TM_MISC3 @ 0XFD40D9AC

    * CDR fast phase lock control
    *  PSU_SERDES_L3_TM_MISC3_CDR_EN_FPL                           0x0

    * CDR fast frequency lock control
    *  PSU_SERDES_L3_TM_MISC3_CDR_EN_FFL                           0x0

    * debug bus selection bit, cdr fast phase and freq controls
    * (OFFSET, MASK, VALUE)      (0XFD40D9AC, 0x00000003U ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L3_TM_MISC3_OFFSET, 0x00000003U, 0x00000000U);
/*##################################################################### */

    /*
    * DISABLE DYNAMIC OFFSET CALIBRATION
    */
    /*
    * Register : L0_TM_EQ11 @ 0XFD401978

    * Force EQ offset correction algo off if not forced on
    *  PSU_SERDES_L0_TM_EQ11_FORCE_EQ_OFFS_OFF                     0x1

    * eq dynamic offset correction
    * (OFFSET, MASK, VALUE)      (0XFD401978, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L0_TM_EQ11_OFFSET, 0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * Register : L1_TM_EQ11 @ 0XFD405978

    * Force EQ offset correction algo off if not forced on
    *  PSU_SERDES_L1_TM_EQ11_FORCE_EQ_OFFS_OFF                     0x1

    * eq dynamic offset correction
    * (OFFSET, MASK, VALUE)      (0XFD405978, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L1_TM_EQ11_OFFSET, 0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * Register : L2_TM_EQ11 @ 0XFD409978

    * Force EQ offset correction algo off if not forced on
    *  PSU_SERDES_L2_TM_EQ11_FORCE_EQ_OFFS_OFF                     0x1

    * eq dynamic offset correction
    * (OFFSET, MASK, VALUE)      (0XFD409978, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L2_TM_EQ11_OFFSET, 0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * Register : L3_TM_EQ11 @ 0XFD40D978

    * Force EQ offset correction algo off if not forced on
    *  PSU_SERDES_L3_TM_EQ11_FORCE_EQ_OFFS_OFF                     0x1

    * eq dynamic offset correction
    * (OFFSET, MASK, VALUE)      (0XFD40D978, 0x00000010U ,0x00000010U)
    */
	PSU_Mask_Write(SERDES_L3_TM_EQ11_OFFSET, 0x00000010U, 0x00000010U);
/*##################################################################### */

    /*
    * DISABLE ECO FOR PCIE
    */
    /*
    * Register : eco_0 @ 0XFD3D001C

    * For future use
    *  PSU_SIOU_ECO_0_FIELD                                        0x1

    * ECO Register for future use
    * (OFFSET, MASK, VALUE)      (0XFD3D001C, 0xFFFFFFFFU ,0x00000001U)
    */
	PSU_Mask_Write(SIOU_ECO_0_OFFSET, 0xFFFFFFFFU, 0x00000001U);
/*##################################################################### */

    /*
    * GT LANE SETTINGS
    */
    /*
    * Register : ICM_CFG0 @ 0XFD410010

    * Controls UPHY Lane 0 protocol configuration. 0 - PowerDown, 1 - PCIe .0,
    *  2 - Sata0, 3 - USB0, 4 - DP.1, 5 - SGMII0, 6 - Unused, 7 - Unused
    *  PSU_SERDES_ICM_CFG0_L0_ICM_CFG                              1

    * Controls UPHY Lane 1 protocol configuration. 0 - PowerDown, 1 - PCIe.1,
    * 2 - Sata1, 3 - USB0, 4 - DP.0, 5 - SGMII1, 6 - Unused, 7 - Unused
    *  PSU_SERDES_ICM_CFG0_L1_ICM_CFG                              4

    * ICM Configuration Register 0
    * (OFFSET, MASK, VALUE)      (0XFD410010, 0x00000077U ,0x00000041U)
    */
	PSU_Mask_Write(SERDES_ICM_CFG0_OFFSET, 0x00000077U, 0x00000041U);
/*##################################################################### */

    /*
    * Register : ICM_CFG1 @ 0XFD410014

    * Controls UPHY Lane 2 protocol configuration. 0 - PowerDown, 1 - PCIe.1,
    * 2 - Sata0, 3 - USB0, 4 - DP.1, 5 - SGMII2, 6 - Unused, 7 - Unused
    *  PSU_SERDES_ICM_CFG1_L2_ICM_CFG                              3

    * Controls UPHY Lane 3 protocol configuration. 0 - PowerDown, 1 - PCIe.3,
    * 2 - Sata1, 3 - USB1, 4 - DP.0, 5 - SGMII3, 6 - Unused, 7 - Unused
    *  PSU_SERDES_ICM_CFG1_L3_ICM_CFG                              2

    * ICM Configuration Register 1
    * (OFFSET, MASK, VALUE)      (0XFD410014, 0x00000077U ,0x00000023U)
    */
	PSU_Mask_Write(SERDES_ICM_CFG1_OFFSET, 0x00000077U, 0x00000023U);
/*##################################################################### */

    /*
    * CHECKING PLL LOCK
    */
    /*
    * ENABLE SERIAL DATA MUX DEEMPH
    */
    /*
    * Register : L1_TXPMD_TM_45 @ 0XFD404CB4

    * Enable/disable DP post2 path
    *  PSU_SERDES_L1_TXPMD_TM_45_DP_TM_TX_DP_ENABLE_POST2_PATH     0x1

    * Override enable/disable of DP post2 path
    *  PSU_SERDES_L1_TXPMD_TM_45_DP_TM_TX_OVRD_DP_ENABLE_POST2_PATH 0x1

    * Override enable/disable of DP post1 path
    *  PSU_SERDES_L1_TXPMD_TM_45_DP_TM_TX_OVRD_DP_ENABLE_POST1_PATH 0x1

    * Enable/disable DP main path
    *  PSU_SERDES_L1_TXPMD_TM_45_DP_TM_TX_DP_ENABLE_MAIN_PATH      0x1

    * Override enable/disable of DP main path
    *  PSU_SERDES_L1_TXPMD_TM_45_DP_TM_TX_OVRD_DP_ENABLE_MAIN_PATH 0x1

    * Post or pre or main DP path selection
    * (OFFSET, MASK, VALUE)      (0XFD404CB4, 0x00000037U ,0x00000037U)
    */
	PSU_Mask_Write(SERDES_L1_TXPMD_TM_45_OFFSET,
		0x00000037U, 0x00000037U);
/*##################################################################### */

    /*
    * Register : L1_TX_ANA_TM_118 @ 0XFD4041D8

    * Test register force for enabling/disablign TX deemphasis bits <17:0>
    *  PSU_SERDES_L1_TX_ANA_TM_118_FORCE_TX_DEEMPH_17_0            0x1

    * Enable Override of TX deemphasis
    * (OFFSET, MASK, VALUE)      (0XFD4041D8, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L1_TX_ANA_TM_118_OFFSET,
		0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * Register : L3_TX_ANA_TM_118 @ 0XFD40C1D8

    * Test register force for enabling/disablign TX deemphasis bits <17:0>
    *  PSU_SERDES_L3_TX_ANA_TM_118_FORCE_TX_DEEMPH_17_0            0x1

    * Enable Override of TX deemphasis
    * (OFFSET, MASK, VALUE)      (0XFD40C1D8, 0x00000001U ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L3_TX_ANA_TM_118_OFFSET,
		0x00000001U, 0x00000001U);
/*##################################################################### */

    /*
    * CDR AND RX EQUALIZATION SETTINGS
    */
    /*
    * Register : L3_TM_CDR5 @ 0XFD40DC14

    * FPHL FSM accumulate cycles
    *  PSU_SERDES_L3_TM_CDR5_FPHL_FSM_ACC_CYCLES                   0x7

    * FFL Phase0 int gain aka 2ol SD update rate
    *  PSU_SERDES_L3_TM_CDR5_FFL_PH0_INT_GAIN                      0x6

    * Fast phase lock controls -- FSM accumulator cycle control and phase 0 in
    * t gain control.
    * (OFFSET, MASK, VALUE)      (0XFD40DC14, 0x000000FFU ,0x000000E6U)
    */
	PSU_Mask_Write(SERDES_L3_TM_CDR5_OFFSET, 0x000000FFU, 0x000000E6U);
/*##################################################################### */

    /*
    * Register : L3_TM_CDR16 @ 0XFD40DC40

    * FFL Phase0 prop gain aka 1ol SD update rate
    *  PSU_SERDES_L3_TM_CDR16_FFL_PH0_PROP_GAIN                    0xC

    * Fast phase lock controls -- phase 0 prop gain
    * (OFFSET, MASK, VALUE)      (0XFD40DC40, 0x0000001FU ,0x0000000CU)
    */
	PSU_Mask_Write(SERDES_L3_TM_CDR16_OFFSET, 0x0000001FU, 0x0000000CU);
/*##################################################################### */

    /*
    * Register : L3_TM_EQ0 @ 0XFD40D94C

    * EQ stg 2 controls BYPASSED
    *  PSU_SERDES_L3_TM_EQ0_EQ_STG2_CTRL_BYP                       1

    * eq stg1 and stg2 controls
    * (OFFSET, MASK, VALUE)      (0XFD40D94C, 0x00000020U ,0x00000020U)
    */
	PSU_Mask_Write(SERDES_L3_TM_EQ0_OFFSET, 0x00000020U, 0x00000020U);
/*##################################################################### */

    /*
    * Register : L3_TM_EQ1 @ 0XFD40D950

    * EQ STG2 RL PROG
    *  PSU_SERDES_L3_TM_EQ1_EQ_STG2_RL_PROG                        0x2

    * EQ stg 2 preamp mode val
    *  PSU_SERDES_L3_TM_EQ1_EQ_STG2_PREAMP_MODE_VAL                0x1

    * eq stg1 and stg2 controls
    * (OFFSET, MASK, VALUE)      (0XFD40D950, 0x00000007U ,0x00000006U)
    */
	PSU_Mask_Write(SERDES_L3_TM_EQ1_OFFSET, 0x00000007U, 0x00000006U);
/*##################################################################### */

    /*
    * GEM SERDES SETTINGS
    */
    /*
    * ENABLE PRE EMPHAIS AND VOLTAGE SWING
    */
    /*
    * Register : L1_TXPMD_TM_48 @ 0XFD404CC0

    * Margining factor value
    *  PSU_SERDES_L1_TXPMD_TM_48_TM_RESULTANT_MARGINING_FACTOR     0

    * Margining factor
    * (OFFSET, MASK, VALUE)      (0XFD404CC0, 0x0000001FU ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L1_TXPMD_TM_48_OFFSET,
		0x0000001FU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : L1_TX_ANA_TM_18 @ 0XFD404048

    * pipe_TX_Deemph. 0: -6dB de-emphasis, 1: -3.5dB de-emphasis, 2 : No de-em
    * phasis, Others: reserved
    *  PSU_SERDES_L1_TX_ANA_TM_18_PIPE_TX_DEEMPH_7_0               0

    * Override for PIPE TX de-emphasis
    * (OFFSET, MASK, VALUE)      (0XFD404048, 0x000000FFU ,0x00000000U)
    */
	PSU_Mask_Write(SERDES_L1_TX_ANA_TM_18_OFFSET,
		0x000000FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : L3_TX_ANA_TM_18 @ 0XFD40C048

    * pipe_TX_Deemph. 0: -6dB de-emphasis, 1: -3.5dB de-emphasis, 2 : No de-em
    * phasis, Others: reserved
    *  PSU_SERDES_L3_TX_ANA_TM_18_PIPE_TX_DEEMPH_7_0               0x1

    * Override for PIPE TX de-emphasis
    * (OFFSET, MASK, VALUE)      (0XFD40C048, 0x000000FFU ,0x00000001U)
    */
	PSU_Mask_Write(SERDES_L3_TX_ANA_TM_18_OFFSET,
		0x000000FFU, 0x00000001U);
/*##################################################################### */


	return 1;
}
unsigned long psu_resetout_init_data(void)
{
    /*
    * TAKING SERDES PERIPHERAL OUT OF RESET RESET
    */
    /*
    * PUTTING USB0 IN RESET
    */
    /*
    * Register : RST_LPD_TOP @ 0XFF5E023C

    * USB 0 reset for control registers
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_APB_RESET                      0X0

    * Software control register for the LPD block.
    * (OFFSET, MASK, VALUE)      (0XFF5E023C, 0x00000400U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_TOP_OFFSET, 0x00000400U, 0x00000000U);
/*##################################################################### */

    /*
    * HIBERREST
    */
    /*
    * Register : RST_LPD_TOP @ 0XFF5E023C

    * USB 0 sleep circuit reset
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_HIBERRESET                     0X0

    * USB 0 reset
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_CORERESET                      0X0

    * Software control register for the LPD block.
    * (OFFSET, MASK, VALUE)      (0XFF5E023C, 0x00000140U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_TOP_OFFSET, 0x00000140U, 0x00000000U);
/*##################################################################### */

    /*
    * PUTTING GEM0 IN RESET
    */
    /*
    * Register : RST_LPD_IOU0 @ 0XFF5E0230

    * GEM 3 reset
    *  PSU_CRL_APB_RST_LPD_IOU0_GEM3_RESET                         0X0

    * Software controlled reset for the GEMs
    * (OFFSET, MASK, VALUE)      (0XFF5E0230, 0x00000008U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU0_OFFSET,
		0x00000008U, 0x00000000U);
/*##################################################################### */

    /*
    * PUTTING SATA IN RESET
    */
    /*
    * Register : sata_misc_ctrl @ 0XFD3D0100

    * Sata PM clock control select
    *  PSU_SIOU_SATA_MISC_CTRL_SATA_PM_CLK_SEL                     0x3

    * Misc Contorls for SATA.This register may only be modified during bootup
    * (while SATA block is disabled)
    * (OFFSET, MASK, VALUE)      (0XFD3D0100, 0x00000003U ,0x00000003U)
    */
	PSU_Mask_Write(SIOU_SATA_MISC_CTRL_OFFSET, 0x00000003U, 0x00000003U);
/*##################################################################### */

    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * Sata block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_SATA_RESET                          0X0

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x00000002U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x00000002U, 0x00000000U);
/*##################################################################### */

    /*
    * PUTTING PCIE CFG AND BRIDGE IN RESET
    */
    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * PCIE config reset
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_CFG_RESET                      0X0

    * PCIE bridge block level reset (AXI interface)
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_BRIDGE_RESET                   0X0

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x000C0000U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x000C0000U, 0x00000000U);
/*##################################################################### */

    /*
    * PUTTING DP IN RESET
    */
    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * Display Port block level reset (includes DPDMA)
    *  PSU_CRF_APB_RST_FPD_TOP_DP_RESET                            0X0

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x00010000U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x00010000U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DP_PHY_RESET @ 0XFD4A0200

    * Set to '1' to hold the GT in reset. Clear to release.
    *  PSU_DP_DP_PHY_RESET_GT_RESET                                0X0

    * Reset the transmitter PHY.
    * (OFFSET, MASK, VALUE)      (0XFD4A0200, 0x00000002U ,0x00000000U)
    */
	PSU_Mask_Write(DP_DP_PHY_RESET_OFFSET, 0x00000002U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : DP_TX_PHY_POWER_DOWN @ 0XFD4A0238

    * Two bits per lane. When set to 11, moves the GT to power down mode. When
    *  set to 00, GT will be in active state. bits [1:0] - lane0 Bits [3:2] -
    * lane 1
    *  PSU_DP_DP_TX_PHY_POWER_DOWN_POWER_DWN                       0X0

    * Control PHY Power down
    * (OFFSET, MASK, VALUE)      (0XFD4A0238, 0x0000000FU ,0x00000000U)
    */
	PSU_Mask_Write(DP_DP_TX_PHY_POWER_DOWN_OFFSET,
		0x0000000FU, 0x00000000U);
/*##################################################################### */

    /*
    * USB0 GFLADJ
    */
    /*
    * Register : GUSB2PHYCFG @ 0XFE20C200

    * USB 2.0 Turnaround Time (USBTrdTim) Sets the turnaround time in PHY cloc
    * ks. Specifies the response time for a MAC request to the Packet FIFO Con
    * troller (PFC) to fetch data from the DFIFO (SPRAM). The following are th
    * e required values for the minimum SoC bus frequency of 60 MHz. USB turna
    * round time is a critical certification criteria when using long cables a
    * nd five hub levels. The required values for this field: - 4'h5: When the
    *  MAC interface is 16-bit UTMI+. - 4'h9: When the MAC interface is 8-bit
    * UTMI+/ULPI. If SoC bus clock is less than 60 MHz, and USB turnaround tim
    * e is not critical, this field can be set to a larger value. Note: This f
    * ield is valid only in device mode.
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_USBTRDTIM                       0x9

    * Transceiver Delay: Enables a delay between the assertion of the UTMI/ULP
    * I Transceiver Select signal (for HS) and the assertion of the TxValid si
    * gnal during a HS Chirp. When this bit is set to 1, a delay (of approxima
    * tely 2.5 us) is introduced from the time when the Transceiver Select is
    * set to 2'b00 (HS) to the time the TxValid is driven to 0 for sending the
    *  chirp-K. This delay is required for some UTMI/ULPI PHYs. Note: - If you
    *  enable the hibernation feature when the device core comes out of power-
    * off, you must re-initialize this bit with the appropriate value because
    * the core does not save and restore this bit value during hibernation. -
    * This bit is valid only in device mode.
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_XCVRDLY                         0x0

    * Enable utmi_sleep_n and utmi_l1_suspend_n (EnblSlpM) The application use
    * s this bit to control utmi_sleep_n and utmi_l1_suspend_n assertion to th
    * e PHY in the L1 state. - 1'b0: utmi_sleep_n and utmi_l1_suspend_n assert
    * ion from the core is not transferred to the external PHY. - 1'b1: utmi_s
    * leep_n and utmi_l1_suspend_n assertion from the core is transferred to t
    * he external PHY. Note: This bit must be set high for Port0 if PHY is use
    * d. Note: In Device mode - Before issuing any device endpoint command whe
    * n operating in 2.0 speeds, disable this bit and enable it after the comm
    * and completes. Without disabling this bit, if a command is issued when t
    * he device is in L1 state and if mac2_clk (utmi_clk/ulpi_clk) is gated of
    * f, the command will not get completed.
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_ENBLSLPM                        0x0

    * USB 2.0 High-Speed PHY or USB 1.1 Full-Speed Serial Transceiver Select T
    * he application uses this bit to select a high-speed PHY or a full-speed
    * transceiver. - 1'b0: USB 2.0 high-speed UTMI+ or ULPI PHY. This bit is a
    * lways 0, with Write Only access. - 1'b1: USB 1.1 full-speed serial trans
    * ceiver. This bit is always 1, with Write Only access. If both interface
    * types are selected in coreConsultant (that is, parameters' values are no
    * t zero), the application uses this bit to select the active interface is
    *  active, with Read-Write bit access. Note: USB 1.1 full-serial transceiv
    * er is not supported. This bit always reads as 1'b0.
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_PHYSEL                          0x0

    * Suspend USB2.0 HS/FS/LS PHY (SusPHY) When set, USB2.0 PHY enters Suspend
    *  mode if Suspend conditions are valid. For DRD/OTG configurations, it is
    *  recommended that this bit is set to 0 during coreConsultant configurati
    * on. If it is set to 1, then the application must clear this bit after po
    * wer-on reset. Application needs to set it to 1 after the core initializa
    * tion completes. For all other configurations, this bit can be set to 1 d
    * uring core configuration. Note: - In host mode, on reset, this bit is se
    * t to 1. Software can override this bit after reset. - In device mode, be
    * fore issuing any device endpoint command when operating in 2.0 speeds, d
    * isable this bit and enable it after the command completes. If you issue
    * a command without disabling this bit when the device is in L2 state and
    * if mac2_clk (utmi_clk/ulpi_clk) is gated off, the command will not get c
    * ompleted.
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_SUSPENDUSB20                    0x1

    * Full-Speed Serial Interface Select (FSIntf) The application uses this bi
    * t to select a unidirectional or bidirectional USB 1.1 full-speed serial
    * transceiver interface. - 1'b0: 6-pin unidirectional full-speed serial in
    * terface. This bit is set to 0 with Read Only access. - 1'b1: 3-pin bidir
    * ectional full-speed serial interface. This bit is set to 0 with Read Onl
    * y access. Note: USB 1.1 full-speed serial interface is not supported. Th
    * is bit always reads as 1'b0.
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_FSINTF                          0x0

    * ULPI or UTMI+ Select (ULPI_UTMI_Sel) The application uses this bit to se
    * lect a UTMI+ or ULPI Interface. - 1'b0: UTMI+ Interface - 1'b1: ULPI Int
    * erface This bit is writable only if UTMI+ and ULPI is specified for High
    * -Speed PHY Interface(s) in coreConsultant configuration (DWC_USB3_HSPHY_
    * INTERFACE = 3). Otherwise, this bit is read-only and the value depends o
    * n the interface selected through DWC_USB3_HSPHY_INTERFACE.
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_ULPI_UTMI_SEL                   0x1

    * PHY Interface (PHYIf) If UTMI+ is selected, the application uses this bi
    * t to configure the core to support a UTMI+ PHY with an 8- or 16-bit inte
    * rface. - 1'b0: 8 bits - 1'b1: 16 bits ULPI Mode: 1'b0 Note: - All the en
    * abled 2.0 ports must have the same clock frequency as Port0 clock freque
    * ncy (utmi_clk[0]). - The UTMI 8-bit and 16-bit modes cannot be used toge
    * ther for different ports at the same time (that is, all the ports must b
    * e in 8-bit mode, or all of them must be in 16-bit mode, at a time). - If
    *  any of the USB 2.0 ports is selected as ULPI port for operation, then a
    * ll the USB 2.0 ports must be operating at 60 MHz.
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_PHYIF                           0x0

    * HS/FS Timeout Calibration (TOutCal) The number of PHY clocks, as indicat
    * ed by the application in this field, is multiplied by a bit-time factor;
    *  this factor is added to the high-speed/full-speed interpacket timeout d
    * uration in the core to account for additional delays introduced by the P
    * HY. This may be required, since the delay introduced by the PHY in gener
    * ating the linestate condition may vary among PHYs. The USB standard time
    * out value for high-speed operation is 736 to 816 (inclusive) bit times.
    * The USB standard timeout value for full-speed operation is 16 to 18 (inc
    * lusive) bit times. The application must program this field based on the
    * speed of connection. The number of bit times added per PHY clock are: Hi
    * gh-speed operation: - One 30-MHz PHY clock = 16 bit times - One 60-MHz P
    * HY clock = 8 bit times Full-speed operation: - One 30-MHz PHY clock = 0.
    * 4 bit times - One 60-MHz PHY clock = 0.2 bit times - One 48-MHz PHY cloc
    * k = 0.25 bit times
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_TOUTCAL                         0x7

    * ULPI External VBUS Drive (ULPIExtVbusDrv) Selects supply source to drive
    *  5V on VBUS, in the ULPI PHY. - 1'b0: PHY drives VBUS with internal char
    * ge pump (default). - 1'b1: PHY drives VBUS with an external supply. (Onl
    * y when RTL parameter DWC_USB3_HSPHY_INTERFACE = 2 or 3)
    *  PSU_USB3_0_XHCI_GUSB2PHYCFG_ULPIEXTVBUSDRV                  0x1

    * Global USB2 PHY Configuration Register The application must program this
    *  register before starting any transactions on either the SoC bus or the
    * USB. In Device-only configurations, only one register is needed. In Host
    *  mode, per-port registers are implemented.
    * (OFFSET, MASK, VALUE)      (0XFE20C200, 0x00023FFFU ,0x00022457U)
    */
	PSU_Mask_Write(USB3_0_XHCI_GUSB2PHYCFG_OFFSET,
		0x00023FFFU, 0x00022457U);
/*##################################################################### */

    /*
    * Register : GFLADJ @ 0XFE20C630

    * This field indicates the frame length adjustment to be applied when SOF/
    * ITP counter is running on the ref_clk. This register value is used to ad
    * just the ITP interval when GCTL[SOFITPSYNC] is set to '1'; SOF and ITP i
    * nterval when GLADJ.GFLADJ_REFCLK_LPM_SEL is set to '1'. This field must
    * be programmed to a non-zero value only if GFLADJ_REFCLK_LPM_SEL is set t
    * o '1' or GCTL.SOFITPSYNC is set to '1'. The value is derived as follows:
    *  FLADJ_REF_CLK_FLADJ=((125000/ref_clk_period_integer)-(125000/ref_clk_pe
    * riod)) * ref_clk_period where - the ref_clk_period_integer is the intege
    * r value of the ref_clk period got by truncating the decimal (fractional)
    *  value that is programmed in the GUCTL.REF_CLK_PERIOD field. - the ref_c
    * lk_period is the ref_clk period including the fractional value. Examples
    * : If the ref_clk is 24 MHz then - GUCTL.REF_CLK_PERIOD = 41 - GFLADJ.GLA
    * DJ_REFCLK_FLADJ = ((125000/41)-(125000/41.6666))*41.6666 = 2032 (ignorin
    * g the fractional value) If the ref_clk is 48 MHz then - GUCTL.REF_CLK_PE
    * RIOD = 20 - GFLADJ.GLADJ_REFCLK_FLADJ = ((125000/20)-(125000/20.8333))*2
    * 0.8333 = 5208 (ignoring the fractional value)
    *  PSU_USB3_0_XHCI_GFLADJ_GFLADJ_REFCLK_FLADJ                  0x0

    * Global Frame Length Adjustment Register This register provides options f
    * or the software to control the core behavior with respect to SOF (Start
    * of Frame) and ITP (Isochronous Timestamp Packet) timers and frame timer
    * functionality. It provides an option to override the fladj_30mhz_reg sid
    * eband signal. In addition, it enables running SOF or ITP frame timer cou
    * nters completely from the ref_clk. This facilitates hardware LPM in host
    *  mode with the SOF or ITP counters being run from the ref_clk signal.
    * (OFFSET, MASK, VALUE)      (0XFE20C630, 0x003FFF00U ,0x00000000U)
    */
	PSU_Mask_Write(USB3_0_XHCI_GFLADJ_OFFSET, 0x003FFF00U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : GUCTL1 @ 0XFE20C11C

    * When this bit is set to '0', termsel, xcvrsel will become 0 during end o
    * f resume while the opmode will become 0 once controller completes end of
    *  resume and enters U0 state (2 separate commandswill be issued). When th
    * is bit is set to '1', all the termsel, xcvrsel, opmode becomes 0 during
    * end of resume itself (only 1 command will be issued)
    *  PSU_USB3_0_XHCI_GUCTL1_RESUME_TERMSEL_XCVRSEL_UNIFY         0x1

    * Reserved
    *  PSU_USB3_0_XHCI_GUCTL1_RESERVED_9                           0x1

    * Global User Control Register 1
    * (OFFSET, MASK, VALUE)      (0XFE20C11C, 0x00000600U ,0x00000600U)
    */
	PSU_Mask_Write(USB3_0_XHCI_GUCTL1_OFFSET, 0x00000600U, 0x00000600U);
/*##################################################################### */

    /*
    * Register : GUCTL @ 0XFE20C12C

    * Host IN Auto Retry (USBHstInAutoRetryEn) When set, this field enables th
    * e Auto Retry feature. For IN transfers (non-isochronous) that encounter
    * data packets with CRC errors or internal overrun scenarios, the auto ret
    * ry feature causes the Host core to reply to the device with a non-termin
    * ating retry ACK (that is, an ACK transaction packet with Retry = 1 and N
    * umP != 0). If the Auto Retry feature is disabled (default), the core wil
    * l respond with a terminating retry ACK (that is, an ACK transaction pack
    * et with Retry = 1 and NumP = 0). - 1'b0: Auto Retry Disabled - 1'b1: Aut
    * o Retry Enabled Note: This bit is also applicable to the device mode.
    *  PSU_USB3_0_XHCI_GUCTL_USBHSTINAUTORETRYEN                   0x1

    * Global User Control Register: This register provides a few options for t
    * he software to control the core behavior in the Host mode. Most of the o
    * ptions are used to improve host inter-operability with different devices
    * .
    * (OFFSET, MASK, VALUE)      (0XFE20C12C, 0x00004000U ,0x00004000U)
    */
	PSU_Mask_Write(USB3_0_XHCI_GUCTL_OFFSET, 0x00004000U, 0x00004000U);
/*##################################################################### */

    /*
    * UPDATING TWO PCIE REGISTERS DEFAULT VALUES, AS THESE REGISTERS HAVE INCO
    * RRECT RESET VALUES IN SILICON.
    */
    /*
    * Register : ATTR_25 @ 0XFD480064

    * If TRUE Completion Timeout Disable is supported. This is required to be
    * TRUE for Endpoint and either setting allowed for Root ports. Drives Devi
    * ce Capability 2 [4]; EP=0x0001; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_25_ATTR_CPL_TIMEOUT_DISABLE_SUPPORTED  0X1

    * ATTR_25
    * (OFFSET, MASK, VALUE)      (0XFD480064, 0x00000200U ,0x00000200U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_25_OFFSET, 0x00000200U, 0x00000200U);
/*##################################################################### */

    /*
    * PCIE SETTINGS
    */
    /*
    * Register : ATTR_7 @ 0XFD48001C

    * Specifies mask/settings for Base Address Register (BAR) 0. If BAR is not
    *  to be implemented, set to 32'h00000000. Bits are defined as follows: Me
    * mory Space BAR [0] = Mem Space Indicator (set to 0) [2:1] = Type field (
    * 10 for 64-bit, 00 for 32-bit) [3] = Prefetchable (0 or 1) [31:4] = Mask
    * for writable bits of BAR; if 32-bit BAR, set uppermost 31:n bits to 1, w
    * here 2^n=memory aperture size in bytes. If 64-bit BAR, set uppermost 63:
    * n bits of \'7bBAR1,BAR0\'7d to 1. IO Space BAR 0] = IO Space Indicator (
    * set to 1) [1] = Reserved (set to 0) [31:2] = Mask for writable bits of B
    * AR; set uppermost 31:n bits to 1, where 2^n=i/o aperture size in bytes.;
    *  EP=0x0004; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_7_ATTR_BAR0                            0x0

    * ATTR_7
    * (OFFSET, MASK, VALUE)      (0XFD48001C, 0x0000FFFFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_7_OFFSET, 0x0000FFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_8 @ 0XFD480020

    * Specifies mask/settings for Base Address Register (BAR) 0. If BAR is not
    *  to be implemented, set to 32'h00000000. Bits are defined as follows: Me
    * mory Space BAR [0] = Mem Space Indicator (set to 0) [2:1] = Type field (
    * 10 for 64-bit, 00 for 32-bit) [3] = Prefetchable (0 or 1) [31:4] = Mask
    * for writable bits of BAR; if 32-bit BAR, set uppermost 31:n bits to 1, w
    * here 2^n=memory aperture size in bytes. If 64-bit BAR, set uppermost 63:
    * n bits of \'7bBAR1,BAR0\'7d to 1. IO Space BAR 0] = IO Space Indicator (
    * set to 1) [1] = Reserved (set to 0) [31:2] = Mask for writable bits of B
    * AR; set uppermost 31:n bits to 1, where 2^n=i/o aperture size in bytes.;
    *  EP=0xFFF0; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_8_ATTR_BAR0                            0x0

    * ATTR_8
    * (OFFSET, MASK, VALUE)      (0XFD480020, 0x0000FFFFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_8_OFFSET, 0x0000FFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_9 @ 0XFD480024

    * Specifies mask/settings for Base Address Register (BAR) 1 if BAR0 is a 3
    * 2-bit BAR, or the upper bits of \'7bBAR1,BAR0\'7d if BAR0 is a 64-bit BA
    * R. If BAR is not to be implemented, set to 32'h00000000. See BAR0 descri
    * ption if this functions as the upper bits of a 64-bit BAR. Bits are defi
    * ned as follows: Memory Space BAR (not upper bits of BAR0) [0] = Mem Spac
    * e Indicator (set to 0) [2:1] = Type field (10 for 64-bit, 00 for 32-bit)
    *  [3] = Prefetchable (0 or 1) [31:4] = Mask for writable bits of BAR; if
    * 32-bit BAR, set uppermost 31:n bits to 1, where 2^n=memory aperture size
    *  in bytes. If 64-bit BAR, set uppermost 63:n bits of \'7bBAR2,BAR1\'7d t
    * o 1. IO Space BAR 0] = IO Space Indicator (set to 1) [1] = Reserved (set
    *  to 0) [31:2] = Mask for writable bits of BAR; set uppermost 31:n bits t
    * o 1, where 2^n=i/o aperture size in bytes.; EP=0xFFFF; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_9_ATTR_BAR1                            0x0

    * ATTR_9
    * (OFFSET, MASK, VALUE)      (0XFD480024, 0x0000FFFFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_9_OFFSET, 0x0000FFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_10 @ 0XFD480028

    * Specifies mask/settings for Base Address Register (BAR) 1 if BAR0 is a 3
    * 2-bit BAR, or the upper bits of \'7bBAR1,BAR0\'7d if BAR0 is a 64-bit BA
    * R. If BAR is not to be implemented, set to 32'h00000000. See BAR0 descri
    * ption if this functions as the upper bits of a 64-bit BAR. Bits are defi
    * ned as follows: Memory Space BAR (not upper bits of BAR0) [0] = Mem Spac
    * e Indicator (set to 0) [2:1] = Type field (10 for 64-bit, 00 for 32-bit)
    *  [3] = Prefetchable (0 or 1) [31:4] = Mask for writable bits of BAR; if
    * 32-bit BAR, set uppermost 31:n bits to 1, where 2^n=memory aperture size
    *  in bytes. If 64-bit BAR, set uppermost 63:n bits of \'7bBAR2,BAR1\'7d t
    * o 1. IO Space BAR 0] = IO Space Indicator (set to 1) [1] = Reserved (set
    *  to 0) [31:2] = Mask for writable bits of BAR; set uppermost 31:n bits t
    * o 1, where 2^n=i/o aperture size in bytes.; EP=0xFFFF; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_10_ATTR_BAR1                           0x0

    * ATTR_10
    * (OFFSET, MASK, VALUE)      (0XFD480028, 0x0000FFFFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_10_OFFSET, 0x0000FFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_11 @ 0XFD48002C

    * For an endpoint, specifies mask/settings for Base Address Register (BAR)
    *  2 if BAR1 is a 32-bit BAR, or the upper bits of \'7bBAR2,BAR1\'7d if BA
    * R1 is the lower part of a 64-bit BAR. If BAR is not to be implemented, s
    * et to 32'h00000000. See BAR1 description if this functions as the upper
    * bits of a 64-bit BAR. For a switch or root: This must be set to 00FF_FFF
    * F. For an endpoint, bits are defined as follows: Memory Space BAR (not u
    * pper bits of BAR1) [0] = Mem Space Indicator (set to 0) [2:1] = Type fie
    * ld (10 for 64-bit, 00 for 32-bit) [3] = Prefetchable (0 or 1) [31:4] = M
    * ask for writable bits of BAR; if 32-bit BAR, set uppermost 31:n bits to
    * 1, where 2^n=memory aperture size in bytes. If 64-bit BAR, set uppermost
    *  63:n bits of \'7bBAR3,BAR2\'7d to 1. IO Space BAR 0] = IO Space Indicat
    * or (set to 1) [1] = Reserved (set to 0) [31:2] = Mask for writable bits
    * of BAR; set uppermost 31:n bits to 1, where 2^n=i/o aperture size in byt
    * es.; EP=0x0004; RP=0xFFFF
    *  PSU_PCIE_ATTRIB_ATTR_11_ATTR_BAR2                           0xFFFF

    * ATTR_11
    * (OFFSET, MASK, VALUE)      (0XFD48002C, 0x0000FFFFU ,0x0000FFFFU)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_11_OFFSET, 0x0000FFFFU, 0x0000FFFFU);
/*##################################################################### */

    /*
    * Register : ATTR_12 @ 0XFD480030

    * For an endpoint, specifies mask/settings for Base Address Register (BAR)
    *  2 if BAR1 is a 32-bit BAR, or the upper bits of \'7bBAR2,BAR1\'7d if BA
    * R1 is the lower part of a 64-bit BAR. If BAR is not to be implemented, s
    * et to 32'h00000000. See BAR1 description if this functions as the upper
    * bits of a 64-bit BAR. For a switch or root: This must be set to 00FF_FFF
    * F. For an endpoint, bits are defined as follows: Memory Space BAR (not u
    * pper bits of BAR1) [0] = Mem Space Indicator (set to 0) [2:1] = Type fie
    * ld (10 for 64-bit, 00 for 32-bit) [3] = Prefetchable (0 or 1) [31:4] = M
    * ask for writable bits of BAR; if 32-bit BAR, set uppermost 31:n bits to
    * 1, where 2^n=memory aperture size in bytes. If 64-bit BAR, set uppermost
    *  63:n bits of \'7bBAR3,BAR2\'7d to 1. IO Space BAR 0] = IO Space Indicat
    * or (set to 1) [1] = Reserved (set to 0) [31:2] = Mask for writable bits
    * of BAR; set uppermost 31:n bits to 1, where 2^n=i/o aperture size in byt
    * es.; EP=0xFFF0; RP=0x00FF
    *  PSU_PCIE_ATTRIB_ATTR_12_ATTR_BAR2                           0xFF

    * ATTR_12
    * (OFFSET, MASK, VALUE)      (0XFD480030, 0x0000FFFFU ,0x000000FFU)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_12_OFFSET, 0x0000FFFFU, 0x000000FFU);
/*##################################################################### */

    /*
    * Register : ATTR_13 @ 0XFD480034

    * For an endpoint, specifies mask/settings for Base Address Register (BAR)
    *  3 if BAR2 is a 32-bit BAR, or the upper bits of \'7bBAR3,BAR2\'7d if BA
    * R2 is the lower part of a 64-bit BAR. If BAR is not to be implemented, s
    * et to 32'h00000000. See BAR2 description if this functions as the upper
    * bits of a 64-bit BAR. For a switch or root, this must be set to: FFFF_00
    * 00 = IO Limit/Base Registers not implemented FFFF_F0F0 = IO Limit/Base R
    * egisters use 16-bit decode FFFF_F1F1 = IO Limit/Base Registers use 32-bi
    * t decode For an endpoint, bits are defined as follows: Memory Space BAR
    * (not upper bits of BAR2) [0] = Mem Space Indicator (set to 0) [2:1] = Ty
    * pe field (10 for 64-bit, 00 for 32-bit) [3] = Prefetchable (0 or 1) [31:
    * 4] = Mask for writable bits of BAR; if 32-bit BAR, set uppermost 31:n bi
    * ts to 1, where 2^n=memory aperture size in bytes. If 64-bit BAR, set upp
    * ermost 63:n bits of \'7bBAR4,BAR3\'7d to 1. IO Space BAR 0] = IO Space I
    * ndicator (set to 1) [1] = Reserved (set to 0) [31:2] = Mask for writable
    *  bits of BAR; set uppermost 31:n bits to 1, where 2^n=i/o aperture size
    * in bytes.; EP=0xFFFF; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_13_ATTR_BAR3                           0x0

    * ATTR_13
    * (OFFSET, MASK, VALUE)      (0XFD480034, 0x0000FFFFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_13_OFFSET, 0x0000FFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_14 @ 0XFD480038

    * For an endpoint, specifies mask/settings for Base Address Register (BAR)
    *  3 if BAR2 is a 32-bit BAR, or the upper bits of \'7bBAR3,BAR2\'7d if BA
    * R2 is the lower part of a 64-bit BAR. If BAR is not to be implemented, s
    * et to 32'h00000000. See BAR2 description if this functions as the upper
    * bits of a 64-bit BAR. For a switch or root, this must be set to: FFFF_00
    * 00 = IO Limit/Base Registers not implemented FFFF_F0F0 = IO Limit/Base R
    * egisters use 16-bit decode FFFF_F1F1 = IO Limit/Base Registers use 32-bi
    * t decode For an endpoint, bits are defined as follows: Memory Space BAR
    * (not upper bits of BAR2) [0] = Mem Space Indicator (set to 0) [2:1] = Ty
    * pe field (10 for 64-bit, 00 for 32-bit) [3] = Prefetchable (0 or 1) [31:
    * 4] = Mask for writable bits of BAR; if 32-bit BAR, set uppermost 31:n bi
    * ts to 1, where 2^n=memory aperture size in bytes. If 64-bit BAR, set upp
    * ermost 63:n bits of \'7bBAR4,BAR3\'7d to 1. IO Space BAR 0] = IO Space I
    * ndicator (set to 1) [1] = Reserved (set to 0) [31:2] = Mask for writable
    *  bits of BAR; set uppermost 31:n bits to 1, where 2^n=i/o aperture size
    * in bytes.; EP=0xFFFF; RP=0xFFFF
    *  PSU_PCIE_ATTRIB_ATTR_14_ATTR_BAR3                           0xFFFF

    * ATTR_14
    * (OFFSET, MASK, VALUE)      (0XFD480038, 0x0000FFFFU ,0x0000FFFFU)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_14_OFFSET, 0x0000FFFFU, 0x0000FFFFU);
/*##################################################################### */

    /*
    * Register : ATTR_15 @ 0XFD48003C

    * For an endpoint, specifies mask/settings for Base Address Register (BAR)
    *  4 if BAR3 is a 32-bit BAR, or the upper bits of \'7bBAR4,BAR3\'7d if BA
    * R3 is the lower part of a 64-bit BAR. If BAR is not to be implemented, s
    * et to 32'h00000000. See BAR3 description if this functions as the upper
    * bits of a 64-bit BAR. For a switch or root: This must be set to FFF0_FFF
    * 0. For an endpoint, bits are defined as follows: Memory Space BAR (not u
    * pper bits of BAR3) [0] = Mem Space Indicator (set to 0) [2:1] = Type fie
    * ld (10 for 64-bit, 00 for 32-bit) [3] = Prefetchable (0 or 1) [31:4] = M
    * ask for writable bits of BAR; if 32-bit BAR, set uppermost 31:n bits to
    * 1, where 2^n=memory aperture size in bytes. If 64-bit BAR, set uppermost
    *  63:n bits of \'7bBAR5,BAR4\'7d to 1. IO Space BAR 0] = IO Space Indicat
    * or (set to 1) [1] = Reserved (set to 0) [31:2] = Mask for writable bits
    * of BAR; set uppermost 31:n bits to 1, where 2^n=i/o aperture size in byt
    * es.; EP=0x0004; RP=0xFFF0
    *  PSU_PCIE_ATTRIB_ATTR_15_ATTR_BAR4                           0xFFF0

    * ATTR_15
    * (OFFSET, MASK, VALUE)      (0XFD48003C, 0x0000FFFFU ,0x0000FFF0U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_15_OFFSET, 0x0000FFFFU, 0x0000FFF0U);
/*##################################################################### */

    /*
    * Register : ATTR_16 @ 0XFD480040

    * For an endpoint, specifies mask/settings for Base Address Register (BAR)
    *  4 if BAR3 is a 32-bit BAR, or the upper bits of \'7bBAR4,BAR3\'7d if BA
    * R3 is the lower part of a 64-bit BAR. If BAR is not to be implemented, s
    * et to 32'h00000000. See BAR3 description if this functions as the upper
    * bits of a 64-bit BAR. For a switch or root: This must be set to FFF0_FFF
    * 0. For an endpoint, bits are defined as follows: Memory Space BAR (not u
    * pper bits of BAR3) [0] = Mem Space Indicator (set to 0) [2:1] = Type fie
    * ld (10 for 64-bit, 00 for 32-bit) [3] = Prefetchable (0 or 1) [31:4] = M
    * ask for writable bits of BAR; if 32-bit BAR, set uppermost 31:n bits to
    * 1, where 2^n=memory aperture size in bytes. If 64-bit BAR, set uppermost
    *  63:n bits of \'7bBAR5,BAR4\'7d to 1. IO Space BAR 0] = IO Space Indicat
    * or (set to 1) [1] = Reserved (set to 0) [31:2] = Mask for writable bits
    * of BAR; set uppermost 31:n bits to 1, where 2^n=i/o aperture size in byt
    * es.; EP=0xFFF0; RP=0xFFF0
    *  PSU_PCIE_ATTRIB_ATTR_16_ATTR_BAR4                           0xFFF0

    * ATTR_16
    * (OFFSET, MASK, VALUE)      (0XFD480040, 0x0000FFFFU ,0x0000FFF0U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_16_OFFSET, 0x0000FFFFU, 0x0000FFF0U);
/*##################################################################### */

    /*
    * Register : ATTR_17 @ 0XFD480044

    * For an endpoint, specifies mask/settings for Base Address Register (BAR)
    *  5 if BAR4 is a 32-bit BAR, or the upper bits of \'7bBAR5,BAR4\'7d if BA
    * R4 is the lower part of a 64-bit BAR. If BAR is not to be implemented, s
    * et to 32'h00000000. See BAR4 description if this functions as the upper
    * bits of a 64-bit BAR. For a switch or root, this must be set to: 0000_00
    * 00 = Prefetchable Memory Limit/Base Registers not implemented FFF0_FFF0
    * = 32-bit Prefetchable Memory Limit/Base implemented FFF1_FFF1 = 64-bit P
    * refetchable Memory Limit/Base implemented For an endpoint, bits are defi
    * ned as follows: Memory Space BAR (not upper bits of BAR4) [0] = Mem Spac
    * e Indicator (set to 0) [2:1] = Type field (00 for 32-bit; BAR5 cannot be
    *  lower part of a 64-bit BAR) [3] = Prefetchable (0 or 1) [31:4] = Mask f
    * or writable bits of BAR; set uppermost 31:n bits to 1, where 2^n=memory
    * aperture size in bytes. IO Space BAR 0] = IO Space Indicator (set to 1)
    * [1] = Reserved (set to 0) [31:2] = Mask for writable bits of BAR; set up
    * permost 31:n bits to 1, where 2^n=i/o aperture size in bytes.; EP=0xFFFF
    * ; RP=0xFFF1
    *  PSU_PCIE_ATTRIB_ATTR_17_ATTR_BAR5                           0xFFF1

    * ATTR_17
    * (OFFSET, MASK, VALUE)      (0XFD480044, 0x0000FFFFU ,0x0000FFF1U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_17_OFFSET, 0x0000FFFFU, 0x0000FFF1U);
/*##################################################################### */

    /*
    * Register : ATTR_18 @ 0XFD480048

    * For an endpoint, specifies mask/settings for Base Address Register (BAR)
    *  5 if BAR4 is a 32-bit BAR, or the upper bits of \'7bBAR5,BAR4\'7d if BA
    * R4 is the lower part of a 64-bit BAR. If BAR is not to be implemented, s
    * et to 32'h00000000. See BAR4 description if this functions as the upper
    * bits of a 64-bit BAR. For a switch or root, this must be set to: 0000_00
    * 00 = Prefetchable Memory Limit/Base Registers not implemented FFF0_FFF0
    * = 32-bit Prefetchable Memory Limit/Base implemented FFF1_FFF1 = 64-bit P
    * refetchable Memory Limit/Base implemented For an endpoint, bits are defi
    * ned as follows: Memory Space BAR (not upper bits of BAR4) [0] = Mem Spac
    * e Indicator (set to 0) [2:1] = Type field (00 for 32-bit; BAR5 cannot be
    *  lower part of a 64-bit BAR) [3] = Prefetchable (0 or 1) [31:4] = Mask f
    * or writable bits of BAR; set uppermost 31:n bits to 1, where 2^n=memory
    * aperture size in bytes. IO Space BAR 0] = IO Space Indicator (set to 1)
    * [1] = Reserved (set to 0) [31:2] = Mask for writable bits of BAR; set up
    * permost 31:n bits to 1, where 2^n=i/o aperture size in bytes.; EP=0xFFFF
    * ; RP=0xFFF1
    *  PSU_PCIE_ATTRIB_ATTR_18_ATTR_BAR5                           0xFFF1

    * ATTR_18
    * (OFFSET, MASK, VALUE)      (0XFD480048, 0x0000FFFFU ,0x0000FFF1U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_18_OFFSET, 0x0000FFFFU, 0x0000FFF1U);
/*##################################################################### */

    /*
    * Register : ATTR_27 @ 0XFD48006C

    * Specifies maximum payload supported. Valid settings are: 0- 128 bytes, 1
    * - 256 bytes, 2- 512 bytes, 3- 1024 bytes. Transferred to the Device Capa
    * bilities register. The values: 4-2048 bytes, 5- 4096 bytes are not suppo
    * rted; EP=0x0001; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_27_ATTR_DEV_CAP_MAX_PAYLOAD_SUPPORTED  1

    * Endpoint L1 Acceptable Latency. Records the latency that the endpoint ca
    * n withstand on transitions from L1 state to L0 (if L1 state supported).
    * Valid settings are: 0h less than 1us, 1h 1 to 2us, 2h 2 to 4us, 3h 4 to
    * 8us, 4h 8 to 16us, 5h 16 to 32us, 6h 32 to 64us, 7h more than 64us. For
    * Endpoints only. Must be 0h for other devices.; EP=0x0007; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_27_ATTR_DEV_CAP_ENDPOINT_L1_LATENCY    0x0

    * ATTR_27
    * (OFFSET, MASK, VALUE)      (0XFD48006C, 0x00000738U ,0x00000100U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_27_OFFSET, 0x00000738U, 0x00000100U);
/*##################################################################### */

    /*
    * Register : ATTR_50 @ 0XFD4800C8

    * Identifies the type of device/port as follows: 0000b PCI Express Endpoin
    * t device, 0001b Legacy PCI Express Endpoint device, 0100b Root Port of P
    * CI Express Root Complex, 0101b Upstream Port of PCI Express Switch, 0110
    * b Downstream Port of PCI Express Switch, 0111b PCIE Express to PCI/PCI-X
    *  Bridge, 1000b PCI/PCI-X to PCI Express Bridge. Transferred to PCI Expre
    * ss Capabilities register. Must be consistent with IS_SWITCH and UPSTREAM
    * _FACING settings.; EP=0x0000; RP=0x0004
    *  PSU_PCIE_ATTRIB_ATTR_50_ATTR_PCIE_CAP_DEVICE_PORT_TYPE      4

    * PCIe Capability's Next Capability Offset pointer to the next item in the
    *  capabilities list, or 00h if this is the final capability.; EP=0x009C;
    * RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_50_ATTR_PCIE_CAP_NEXTPTR               0

    * ATTR_50
    * (OFFSET, MASK, VALUE)      (0XFD4800C8, 0x0000FFF0U ,0x00000040U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_50_OFFSET, 0x0000FFF0U, 0x00000040U);
/*##################################################################### */

    /*
    * Register : ATTR_105 @ 0XFD4801A4

    * Number of credits that should be advertised for Completion data received
    *  on Virtual Channel 0. The bytes advertised must be less than or equal t
    * o the bram bytes available. See VC0_RX_RAM_LIMIT; EP=0x0172; RP=0x00CD
    *  PSU_PCIE_ATTRIB_ATTR_105_ATTR_VC0_TOTAL_CREDITS_CD          0xCD

    * ATTR_105
    * (OFFSET, MASK, VALUE)      (0XFD4801A4, 0x000007FFU ,0x000000CDU)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_105_OFFSET,
		0x000007FFU, 0x000000CDU);
/*##################################################################### */

    /*
    * Register : ATTR_106 @ 0XFD4801A8

    * Number of credits that should be advertised for Completion headers recei
    * ved on Virtual Channel 0. The sum of the posted, non posted, and complet
    * ion header credits must be <= 80; EP=0x0048; RP=0x0024
    *  PSU_PCIE_ATTRIB_ATTR_106_ATTR_VC0_TOTAL_CREDITS_CH          0x24

    * Number of credits that should be advertised for Non-Posted headers recei
    * ved on Virtual Channel 0. The number of non posted data credits advertis
    * ed by the block is equal to the number of non posted header credits. The
    *  sum of the posted, non posted, and completion header credits must be <=
    *  80; EP=0x0004; RP=0x000C
    *  PSU_PCIE_ATTRIB_ATTR_106_ATTR_VC0_TOTAL_CREDITS_NPH         0xC

    * ATTR_106
    * (OFFSET, MASK, VALUE)      (0XFD4801A8, 0x00003FFFU ,0x00000624U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_106_OFFSET,
		0x00003FFFU, 0x00000624U);
/*##################################################################### */

    /*
    * Register : ATTR_107 @ 0XFD4801AC

    * Number of credits that should be advertised for Non-Posted data received
    *  on Virtual Channel 0. The number of non posted data credits advertised
    * by the block is equal to two times the number of non posted header credi
    * ts if atomic operations are supported or is equal to the number of non p
    * osted header credits if atomic operations are not supported. The bytes a
    * dvertised must be less than or equal to the bram bytes available. See VC
    * 0_RX_RAM_LIMIT; EP=0x0008; RP=0x0018
    *  PSU_PCIE_ATTRIB_ATTR_107_ATTR_VC0_TOTAL_CREDITS_NPD         0x18

    * ATTR_107
    * (OFFSET, MASK, VALUE)      (0XFD4801AC, 0x000007FFU ,0x00000018U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_107_OFFSET,
		0x000007FFU, 0x00000018U);
/*##################################################################### */

    /*
    * Register : ATTR_108 @ 0XFD4801B0

    * Number of credits that should be advertised for Posted data received on
    * Virtual Channel 0. The bytes advertised must be less than or equal to th
    * e bram bytes available. See VC0_RX_RAM_LIMIT; EP=0x0020; RP=0x00B5
    *  PSU_PCIE_ATTRIB_ATTR_108_ATTR_VC0_TOTAL_CREDITS_PD          0xB5

    * ATTR_108
    * (OFFSET, MASK, VALUE)      (0XFD4801B0, 0x000007FFU ,0x000000B5U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_108_OFFSET,
		0x000007FFU, 0x000000B5U);
/*##################################################################### */

    /*
    * Register : ATTR_109 @ 0XFD4801B4

    * Not currently in use. Invert ECRC generated by block when trn_tecrc_gen_
    * n and trn_terrfwd_n are asserted.; EP=0x0000; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_109_ATTR_TECRC_EP_INV                  0x0

    * Enables td bit clear and ECRC trim on received TLP's FALSE == don't trim
    *  TRUE == trim.; EP=0x0001; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_109_ATTR_RECRC_CHK_TRIM                0x1

    * Enables ECRC check on received TLP's 0 == don't check 1 == always check
    * 3 == check if enabled by ECRC check enable bit of AER cap structure; EP=
    * 0x0003; RP=0x0003
    *  PSU_PCIE_ATTRIB_ATTR_109_ATTR_RECRC_CHK                     0x3

    * Index of last packet buffer used by TX TLM (i.e. number of buffers - 1).
    *  Calculated from max payload size supported and the number of brams conf
    * igured for transmit; EP=0x001C; RP=0x001C
    *  PSU_PCIE_ATTRIB_ATTR_109_ATTR_VC0_TX_LASTPACKET             0x1c

    * Number of credits that should be advertised for Posted headers received
    * on Virtual Channel 0. The sum of the posted, non posted, and completion
    * header credits must be <= 80; EP=0x0004; RP=0x0020
    *  PSU_PCIE_ATTRIB_ATTR_109_ATTR_VC0_TOTAL_CREDITS_PH          0x20

    * ATTR_109
    * (OFFSET, MASK, VALUE)      (0XFD4801B4, 0x0000FFFFU ,0x00007E20U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_109_OFFSET,
		0x0000FFFFU, 0x00007E20U);
/*##################################################################### */

    /*
    * Register : ATTR_34 @ 0XFD480088

    * Specifies values to be transferred to Header Type register. Bit 7 should
    *  be set to '0' indicating single-function device. Bit 0 identifies heade
    * r as Type 0 or Type 1, with '0' indicating a Type 0 header.; EP=0x0000;
    * RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_34_ATTR_HEADER_TYPE                    0x1

    * ATTR_34
    * (OFFSET, MASK, VALUE)      (0XFD480088, 0x000000FFU ,0x00000001U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_34_OFFSET, 0x000000FFU, 0x00000001U);
/*##################################################################### */

    /*
    * Register : ATTR_53 @ 0XFD4800D4

    * PM Capability's Next Capability Offset pointer to the next item in the c
    * apabilities list, or 00h if this is the final capability.; EP=0x0048; RP
    * =0x0060
    *  PSU_PCIE_ATTRIB_ATTR_53_ATTR_PM_CAP_NEXTPTR                 0x60

    * ATTR_53
    * (OFFSET, MASK, VALUE)      (0XFD4800D4, 0x000000FFU ,0x00000060U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_53_OFFSET, 0x000000FFU, 0x00000060U);
/*##################################################################### */

    /*
    * Register : ATTR_41 @ 0XFD4800A4

    * MSI Per-Vector Masking Capable. The value is transferred to the MSI Cont
    * rol Register[8]. When set, adds Mask and Pending Dword to Cap structure;
    *  EP=0x0000; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_41_ATTR_MSI_CAP_PER_VECTOR_MASKING_CAPABLE 0x0

    * Indicates that the MSI structures exists. If this is FALSE, then the MSI
    *  structure cannot be accessed via either the link or the management port
    * .; EP=0x0001; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_41_ATTR_MSI_CAP_ON                     0

    * MSI Capability's Next Capability Offset pointer to the next item in the
    * capabilities list, or 00h if this is the final capability.; EP=0x0060; R
    * P=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_41_ATTR_MSI_CAP_NEXTPTR                0x0

    * Indicates that the MSI structures exists. If this is FALSE, then the MSI
    *  structure cannot be accessed via either the link or the management port
    * .; EP=0x0001; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_41_ATTR_MSI_CAP_ON                     0

    * ATTR_41
    * (OFFSET, MASK, VALUE)      (0XFD4800A4, 0x000003FFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_41_OFFSET, 0x000003FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_97 @ 0XFD480184

    * Maximum Link Width. Valid settings are: 000001b x1, 000010b x2, 000100b
    * x4, 001000b x8.; EP=0x0004; RP=0x0004
    *  PSU_PCIE_ATTRIB_ATTR_97_ATTR_LINK_CAP_MAX_LINK_WIDTH        0x1

    * Used by LTSSM to set Maximum Link Width. Valid settings are: 000001b [x1
    * ], 000010b [x2], 000100b [x4], 001000b [x8].; EP=0x0004; RP=0x0004
    *  PSU_PCIE_ATTRIB_ATTR_97_ATTR_LTSSM_MAX_LINK_WIDTH           0x1

    * ATTR_97
    * (OFFSET, MASK, VALUE)      (0XFD480184, 0x00000FFFU ,0x00000041U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_97_OFFSET, 0x00000FFFU, 0x00000041U);
/*##################################################################### */

    /*
    * Register : ATTR_100 @ 0XFD480190

    * TRUE specifies upstream-facing port. FALSE specifies downstream-facing p
    * ort.; EP=0x0001; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_100_ATTR_UPSTREAM_FACING               0x0

    * ATTR_100
    * (OFFSET, MASK, VALUE)      (0XFD480190, 0x00000040U ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_100_OFFSET,
		0x00000040U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_101 @ 0XFD480194

    * Enable the routing of message TLPs to the user through the TRN RX interf
    * ace. A bit value of 1 enables routing of the message TLP to the user. Me
    * ssages are always decoded by the message decoder. Bit 0 - ERR COR, Bit 1
    *  - ERR NONFATAL, Bit 2 - ERR FATAL, Bit 3 - INTA Bit 4 - INTB, Bit 5 - I
    * NTC, Bit 6 - INTD, Bit 7 PM_PME, Bit 8 - PME_TO_ACK, Bit 9 - unlock, Bit
    *  10 PME_Turn_Off; EP=0x0000; RP=0x07FF
    *  PSU_PCIE_ATTRIB_ATTR_101_ATTR_ENABLE_MSG_ROUTE              0x7FF

    * Disable BAR filtering. Does not change the behavior of the bar hit outpu
    * ts; EP=0x0000; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_101_ATTR_DISABLE_BAR_FILTERING         0x1

    * ATTR_101
    * (OFFSET, MASK, VALUE)      (0XFD480194, 0x0000FFE2U ,0x0000FFE2U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_101_OFFSET,
		0x0000FFE2U, 0x0000FFE2U);
/*##################################################################### */

    /*
    * Register : ATTR_37 @ 0XFD480094

    * Link Bandwidth notification capability. Indicates support for the link b
    * andwidth notification status and interrupt mechanism. Required for Root.
    * ; EP=0x0000; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_37_ATTR_LINK_CAP_LINK_BANDWIDTH_NOTIFICATION_CAP 0x1

    * Sets the ASPM Optionality Compliance bit, to comply with the 2.1 ASPM Op
    * tionality ECN. Transferred to the Link Capabilities register.; EP=0x0001
    * ; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_37_ATTR_LINK_CAP_ASPM_OPTIONALITY      0x1

    * ATTR_37
    * (OFFSET, MASK, VALUE)      (0XFD480094, 0x00004200U ,0x00004200U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_37_OFFSET, 0x00004200U, 0x00004200U);
/*##################################################################### */

    /*
    * Register : ATTR_93 @ 0XFD480174

    * Enables the Replay Timer to use the user-defined LL_REPLAY_TIMEOUT value
    *  (or combined with the built-in value, depending on LL_REPLAY_TIMEOUT_FU
    * NC). If FALSE, the built-in value is used.; EP=0x0000; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_93_ATTR_LL_REPLAY_TIMEOUT_EN           0x1

    * Sets a user-defined timeout for the Replay Timer to force cause the retr
    * ansmission of unacknowledged TLPs; refer to LL_REPLAY_TIMEOUT_EN and LL_
    * REPLAY_TIMEOUT_FUNC to see how this value is used. The unit for this att
    * ribute is in symbol times, which is 4ns at GEN1 speeds and 2ns at GEN2.;
    *  EP=0x0000; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_93_ATTR_LL_REPLAY_TIMEOUT              0x1000

    * ATTR_93
    * (OFFSET, MASK, VALUE)      (0XFD480174, 0x0000FFFFU ,0x00009000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_93_OFFSET, 0x0000FFFFU, 0x00009000U);
/*##################################################################### */

    /*
    * Register : ID @ 0XFD480200

    * Device ID for the the PCIe Cap Structure Device ID field
    *  PSU_PCIE_ATTRIB_ID_CFG_DEV_ID                               0xd021

    * Vendor ID for the PCIe Cap Structure Vendor ID field
    *  PSU_PCIE_ATTRIB_ID_CFG_VEND_ID                              0x10ee

    * ID
    * (OFFSET, MASK, VALUE)      (0XFD480200, 0xFFFFFFFFU ,0x10EED021U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ID_OFFSET, 0xFFFFFFFFU, 0x10EED021U);
/*##################################################################### */

    /*
    * Register : SUBSYS_ID @ 0XFD480204

    * Subsystem ID for the the PCIe Cap Structure Subsystem ID field
    *  PSU_PCIE_ATTRIB_SUBSYS_ID_CFG_SUBSYS_ID                     0x7

    * Subsystem Vendor ID for the PCIe Cap Structure Subsystem Vendor ID field
    *  PSU_PCIE_ATTRIB_SUBSYS_ID_CFG_SUBSYS_VEND_ID                0x10ee

    * SUBSYS_ID
    * (OFFSET, MASK, VALUE)      (0XFD480204, 0xFFFFFFFFU ,0x10EE0007U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_SUBSYS_ID_OFFSET,
		0xFFFFFFFFU, 0x10EE0007U);
/*##################################################################### */

    /*
    * Register : REV_ID @ 0XFD480208

    * Revision ID for the the PCIe Cap Structure
    *  PSU_PCIE_ATTRIB_REV_ID_CFG_REV_ID                           0x0

    * REV_ID
    * (OFFSET, MASK, VALUE)      (0XFD480208, 0x000000FFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_REV_ID_OFFSET, 0x000000FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_24 @ 0XFD480060

    * Code identifying basic function, subclass and applicable programming int
    * erface. Transferred to the Class Code register.; EP=0x8000; RP=0x8000
    *  PSU_PCIE_ATTRIB_ATTR_24_ATTR_CLASS_CODE                     0x400

    * ATTR_24
    * (OFFSET, MASK, VALUE)      (0XFD480060, 0x0000FFFFU ,0x00000400U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_24_OFFSET, 0x0000FFFFU, 0x00000400U);
/*##################################################################### */

    /*
    * Register : ATTR_25 @ 0XFD480064

    * Code identifying basic function, subclass and applicable programming int
    * erface. Transferred to the Class Code register.; EP=0x0005; RP=0x0006
    *  PSU_PCIE_ATTRIB_ATTR_25_ATTR_CLASS_CODE                     0x6

    * INTX Interrupt Generation Capable. If FALSE, this will cause Command[10]
    *  to be hardwired to 0.; EP=0x0001; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_25_ATTR_CMD_INTX_IMPLEMENTED           0

    * ATTR_25
    * (OFFSET, MASK, VALUE)      (0XFD480064, 0x000001FFU ,0x00000006U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_25_OFFSET, 0x000001FFU, 0x00000006U);
/*##################################################################### */

    /*
    * Register : ATTR_4 @ 0XFD480010

    * Indicates that the AER structures exists. If this is FALSE, then the AER
    *  structure cannot be accessed via either the link or the management port
    * , and AER will be considered to not be present for error management task
    * s (such as what types of error messages are sent if an error is detected
    * ).; EP=0x0001; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_4_ATTR_AER_CAP_ON                      0

    * Indicates that the AER structures exists. If this is FALSE, then the AER
    *  structure cannot be accessed via either the link or the management port
    * , and AER will be considered to not be present for error management task
    * s (such as what types of error messages are sent if an error is detected
    * ).; EP=0x0001; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_4_ATTR_AER_CAP_ON                      0

    * ATTR_4
    * (OFFSET, MASK, VALUE)      (0XFD480010, 0x00001000U ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_4_OFFSET, 0x00001000U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_89 @ 0XFD480164

    * VSEC's Next Capability Offset pointer to the next item in the capabiliti
    * es list, or 000h if this is the final capability.; EP=0x0140; RP=0x0140
    *  PSU_PCIE_ATTRIB_ATTR_89_ATTR_VSEC_CAP_NEXTPTR               0

    * ATTR_89
    * (OFFSET, MASK, VALUE)      (0XFD480164, 0x00001FFEU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_89_OFFSET, 0x00001FFEU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_79 @ 0XFD48013C

    * CRS SW Visibility. Indicates RC can return CRS to SW. Transferred to the
    *  Root Capabilities register.; EP=0x0000; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_79_ATTR_ROOT_CAP_CRS_SW_VISIBILITY     1

    * ATTR_79
    * (OFFSET, MASK, VALUE)      (0XFD48013C, 0x00000020U ,0x00000020U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_79_OFFSET, 0x00000020U, 0x00000020U);
/*##################################################################### */

    /*
    * Register : ATTR_43 @ 0XFD4800AC

    * Indicates that the MSIX structures exists. If this is FALSE, then the MS
    * IX structure cannot be accessed via either the link or the management po
    * rt.; EP=0x0001; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_43_ATTR_MSIX_CAP_ON                    0

    * ATTR_43
    * (OFFSET, MASK, VALUE)      (0XFD4800AC, 0x00000100U ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_43_OFFSET, 0x00000100U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_48 @ 0XFD4800C0

    * MSI-X Table Size. This value is transferred to the MSI-X Message Control
    * [10:0] field. Set to 0 if MSI-X is not enabled. Note that the core does
    * not implement the table; that must be implemented in user logic.; EP=0x0
    * 003; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_48_ATTR_MSIX_CAP_TABLE_SIZE            0

    * ATTR_48
    * (OFFSET, MASK, VALUE)      (0XFD4800C0, 0x000007FFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_48_OFFSET, 0x000007FFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_46 @ 0XFD4800B8

    * MSI-X Table Offset. This value is transferred to the MSI-X Table Offset
    * field. Set to 0 if MSI-X is not enabled.; EP=0x0001; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_46_ATTR_MSIX_CAP_TABLE_OFFSET          0

    * ATTR_46
    * (OFFSET, MASK, VALUE)      (0XFD4800B8, 0x0000FFFFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_46_OFFSET, 0x0000FFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_47 @ 0XFD4800BC

    * MSI-X Table Offset. This value is transferred to the MSI-X Table Offset
    * field. Set to 0 if MSI-X is not enabled.; EP=0x0000; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_47_ATTR_MSIX_CAP_TABLE_OFFSET          0

    * ATTR_47
    * (OFFSET, MASK, VALUE)      (0XFD4800BC, 0x00001FFFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_47_OFFSET, 0x00001FFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_44 @ 0XFD4800B0

    * MSI-X Pending Bit Array Offset This value is transferred to the MSI-X PB
    * A Offset field. Set to 0 if MSI-X is not enabled.; EP=0x0001; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_44_ATTR_MSIX_CAP_PBA_OFFSET            0

    * ATTR_44
    * (OFFSET, MASK, VALUE)      (0XFD4800B0, 0x0000FFFFU ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_44_OFFSET, 0x0000FFFFU, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_45 @ 0XFD4800B4

    * MSI-X Pending Bit Array Offset This value is transferred to the MSI-X PB
    * A Offset field. Set to 0 if MSI-X is not enabled.; EP=0x1000; RP=0x0000
    *  PSU_PCIE_ATTRIB_ATTR_45_ATTR_MSIX_CAP_PBA_OFFSET            0

    * ATTR_45
    * (OFFSET, MASK, VALUE)      (0XFD4800B4, 0x0000FFF8U ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_45_OFFSET, 0x0000FFF8U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : CB @ 0XFD48031C

    * DT837748 Enable
    *  PSU_PCIE_ATTRIB_CB_CB1                                      0x0

    * ECO Register 1
    * (OFFSET, MASK, VALUE)      (0XFD48031C, 0x00000002U ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_CB_OFFSET, 0x00000002U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : ATTR_35 @ 0XFD48008C

    * Active State PM Support. Indicates the level of active state power manag
    * ement supported by the selected PCI Express Link, encoded as follows: 0
    * Reserved, 1 L0s entry supported, 2 Reserved, 3 L0s and L1 entry supporte
    * d.; EP=0x0001; RP=0x0001
    *  PSU_PCIE_ATTRIB_ATTR_35_ATTR_LINK_CAP_ASPM_SUPPORT          0x0

    * ATTR_35
    * (OFFSET, MASK, VALUE)      (0XFD48008C, 0x00003000U ,0x00000000U)
    */
	PSU_Mask_Write(PCIE_ATTRIB_ATTR_35_OFFSET, 0x00003000U, 0x00000000U);
/*##################################################################### */

    /*
    * PUTTING PCIE CONTROL IN RESET
    */
    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * PCIE control block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_CTRL_RESET                     0X0

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x00020000U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x00020000U, 0x00000000U);
/*##################################################################### */

    /*
    * PCIE GPIO RESET
    */
    /*
    * MASK_DATA_0_LSW LOW BANK [15:0]
    */
    /*
    * MASK_DATA_0_MSW LOW BANK [25:16]
    */
    /*
    * MASK_DATA_1_LSW LOW BANK [41:26]
    */
    /*
    * Register : MASK_DATA_1_LSW @ 0XFF0A0008

    * Operation is the same as MASK_DATA_0_LSW[MASK_0_LSW]
    *  PSU_GPIO_MASK_DATA_1_LSW_MASK_1_LSW                         0xffdf

    * Operation is the same as MASK_DATA_0_LSW[DATA_0_LSW]
    *  PSU_GPIO_MASK_DATA_1_LSW_DATA_1_LSW                         0x20

    * Maskable Output Data (GPIO Bank1, MIO, Lower 16bits)
    * (OFFSET, MASK, VALUE)      (0XFF0A0008, 0xFFFFFFFFU ,0xFFDF0020U)
    */
	PSU_Mask_Write(GPIO_MASK_DATA_1_LSW_OFFSET,
		0xFFFFFFFFU, 0xFFDF0020U);
/*##################################################################### */

    /*
    * MASK_DATA_1_MSW HIGH BANK [51:42]
    */
    /*
    * MASK_DATA_1_LSW HIGH BANK [67:52]
    */
    /*
    * MASK_DATA_1_LSW HIGH BANK [77:68]
    */
    /*
    * CHECK PLL LOCK FOR LANE0
    */
    /*
    * Register : L0_PLL_STATUS_READ_1 @ 0XFD4023E4

    * Status Read value of PLL Lock
    *  PSU_SERDES_L0_PLL_STATUS_READ_1_PLL_LOCK_STATUS_READ        1
    * (OFFSET, MASK, VALUE)      (0XFD4023E4, 0x00000010U ,0x00000010U)
		*/
	mask_poll(SERDES_L0_PLL_STATUS_READ_1_OFFSET, 0x00000010U);

/*##################################################################### */

    /*
    * CHECK PLL LOCK FOR LANE1
    */
    /*
    * Register : L1_PLL_STATUS_READ_1 @ 0XFD4063E4

    * Status Read value of PLL Lock
    *  PSU_SERDES_L1_PLL_STATUS_READ_1_PLL_LOCK_STATUS_READ        1
    * (OFFSET, MASK, VALUE)      (0XFD4063E4, 0x00000010U ,0x00000010U)
		*/
	mask_poll(SERDES_L1_PLL_STATUS_READ_1_OFFSET, 0x00000010U);

/*##################################################################### */

    /*
    * CHECK PLL LOCK FOR LANE2
    */
    /*
    * Register : L2_PLL_STATUS_READ_1 @ 0XFD40A3E4

    * Status Read value of PLL Lock
    *  PSU_SERDES_L2_PLL_STATUS_READ_1_PLL_LOCK_STATUS_READ        1
    * (OFFSET, MASK, VALUE)      (0XFD40A3E4, 0x00000010U ,0x00000010U)
		*/
	mask_poll(SERDES_L2_PLL_STATUS_READ_1_OFFSET, 0x00000010U);

/*##################################################################### */

    /*
    * CHECK PLL LOCK FOR LANE3
    */
    /*
    * Register : L3_PLL_STATUS_READ_1 @ 0XFD40E3E4

    * Status Read value of PLL Lock
    *  PSU_SERDES_L3_PLL_STATUS_READ_1_PLL_LOCK_STATUS_READ        1
    * (OFFSET, MASK, VALUE)      (0XFD40E3E4, 0x00000010U ,0x00000010U)
		*/
	mask_poll(SERDES_L3_PLL_STATUS_READ_1_OFFSET, 0x00000010U);

/*##################################################################### */

    /*
    * SATA AHCI VENDOR SETTING
    */
    /*
    * Register : PP2C @ 0XFD0C00AC

    * CIBGMN: COMINIT Burst Gap Minimum.
    *  PSU_SATA_AHCI_VENDOR_PP2C_CIBGMN                            0x18

    * CIBGMX: COMINIT Burst Gap Maximum.
    *  PSU_SATA_AHCI_VENDOR_PP2C_CIBGMX                            0x40

    * CIBGN: COMINIT Burst Gap Nominal.
    *  PSU_SATA_AHCI_VENDOR_PP2C_CIBGN                             0x18

    * CINMP: COMINIT Negate Minimum Period.
    *  PSU_SATA_AHCI_VENDOR_PP2C_CINMP                             0x28

    * PP2C - Port Phy2Cfg Register. This register controls the configuration o
    * f the Phy Control OOB timing for the COMINIT parameters for either Port
    * 0 or Port 1. The Port configured is controlled by the value programmed i
    * nto the Port Config Register.
    * (OFFSET, MASK, VALUE)      (0XFD0C00AC, 0xFFFFFFFFU ,0x28184018U)
    */
	PSU_Mask_Write(SATA_AHCI_VENDOR_PP2C_OFFSET,
		0xFFFFFFFFU, 0x28184018U);
/*##################################################################### */

    /*
    * Register : PP3C @ 0XFD0C00B0

    * CWBGMN: COMWAKE Burst Gap Minimum.
    *  PSU_SATA_AHCI_VENDOR_PP3C_CWBGMN                            0x06

    * CWBGMX: COMWAKE Burst Gap Maximum.
    *  PSU_SATA_AHCI_VENDOR_PP3C_CWBGMX                            0x14

    * CWBGN: COMWAKE Burst Gap Nominal.
    *  PSU_SATA_AHCI_VENDOR_PP3C_CWBGN                             0x08

    * CWNMP: COMWAKE Negate Minimum Period.
    *  PSU_SATA_AHCI_VENDOR_PP3C_CWNMP                             0x0E

    * PP3C - Port Phy3CfgRegister. This register controls the configuration of
    *  the Phy Control OOB timing for the COMWAKE parameters for either Port 0
    *  or Port 1. The Port configured is controlled by the value programmed in
    * to the Port Config Register.
    * (OFFSET, MASK, VALUE)      (0XFD0C00B0, 0xFFFFFFFFU ,0x0E081406U)
    */
	PSU_Mask_Write(SATA_AHCI_VENDOR_PP3C_OFFSET,
		0xFFFFFFFFU, 0x0E081406U);
/*##################################################################### */

    /*
    * Register : PP4C @ 0XFD0C00B4

    * BMX: COM Burst Maximum.
    *  PSU_SATA_AHCI_VENDOR_PP4C_BMX                               0x13

    * BNM: COM Burst Nominal.
    *  PSU_SATA_AHCI_VENDOR_PP4C_BNM                               0x08

    * SFD: Signal Failure Detection, if the signal detection de-asserts for a
    * time greater than this then the OOB detector will determine this is a li
    * ne idle and cause the PhyInit state machine to exit the Phy Ready State.
    *  A value of zero disables the Signal Failure Detector. The value is base
    * d on the OOB Detector Clock typically (PMCLK Clock Period) * SFD giving
    * a nominal time of 500ns based on a 150MHz PMCLK.
    *  PSU_SATA_AHCI_VENDOR_PP4C_SFD                               0x4A

    * PTST: Partial to Slumber timer value, specific delay the controller shou
    * ld apply while in partial before entering slumber. The value is bases on
    *  the system clock divided by 128, total delay = (Sys Clock Period) * PTS
    * T * 128
    *  PSU_SATA_AHCI_VENDOR_PP4C_PTST                              0x06

    * PP4C - Port Phy4Cfg Register. This register controls the configuration o
    * f the Phy Control Burst timing for the COM parameters for either Port 0
    * or Port 1. The Port configured is controlled by the value programmed int
    * o the Port Config Register.
    * (OFFSET, MASK, VALUE)      (0XFD0C00B4, 0xFFFFFFFFU ,0x064A0813U)
    */
	PSU_Mask_Write(SATA_AHCI_VENDOR_PP4C_OFFSET,
		0xFFFFFFFFU, 0x064A0813U);
/*##################################################################### */

    /*
    * Register : PP5C @ 0XFD0C00B8

    * RIT: Retry Interval Timer. The calculated value divided by two, the lowe
    * r digit of precision is not needed.
    *  PSU_SATA_AHCI_VENDOR_PP5C_RIT                               0xC96A4

    * RCT: Rate Change Timer, a value based on the 54.2us for which a SATA dev
    * ice will transmit at a fixed rate ALIGNp after OOB has completed, for a
    * fast SERDES it is suggested that this value be 54.2us / 4
    *  PSU_SATA_AHCI_VENDOR_PP5C_RCT                               0x3FF

    * PP5C - Port Phy5Cfg Register. This register controls the configuration o
    * f the Phy Control Retry Interval timing for either Port 0 or Port 1. The
    *  Port configured is controlled by the value programmed into the Port Con
    * fig Register.
    * (OFFSET, MASK, VALUE)      (0XFD0C00B8, 0xFFFFFFFFU ,0x3FFC96A4U)
    */
	PSU_Mask_Write(SATA_AHCI_VENDOR_PP5C_OFFSET,
		0xFFFFFFFFU, 0x3FFC96A4U);
/*##################################################################### */


	return 1;
}
unsigned long psu_resetin_init_data(void)
{
    /*
    * PUTTING SERDES PERIPHERAL IN RESET
    */
    /*
    * PUTTING USB0 IN RESET
    */
    /*
    * Register : RST_LPD_TOP @ 0XFF5E023C

    * USB 0 reset for control registers
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_APB_RESET                      0X1

    * USB 0 sleep circuit reset
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_HIBERRESET                     0X1

    * USB 0 reset
    *  PSU_CRL_APB_RST_LPD_TOP_USB0_CORERESET                      0X1

    * Software control register for the LPD block.
    * (OFFSET, MASK, VALUE)      (0XFF5E023C, 0x00000540U ,0x00000540U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_TOP_OFFSET, 0x00000540U, 0x00000540U);
/*##################################################################### */

    /*
    * PUTTING GEM0 IN RESET
    */
    /*
    * Register : RST_LPD_IOU0 @ 0XFF5E0230

    * GEM 3 reset
    *  PSU_CRL_APB_RST_LPD_IOU0_GEM3_RESET                         0X1

    * Software controlled reset for the GEMs
    * (OFFSET, MASK, VALUE)      (0XFF5E0230, 0x00000008U ,0x00000008U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_IOU0_OFFSET,
		0x00000008U, 0x00000008U);
/*##################################################################### */

    /*
    * PUTTING SATA IN RESET
    */
    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * Sata block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_SATA_RESET                          0X1

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x00000002U ,0x00000002U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x00000002U, 0x00000002U);
/*##################################################################### */

    /*
    * PUTTING PCIE IN RESET
    */
    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * PCIE config reset
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_CFG_RESET                      0X1

    * PCIE control block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_CTRL_RESET                     0X1

    * PCIE bridge block level reset (AXI interface)
    *  PSU_CRF_APB_RST_FPD_TOP_PCIE_BRIDGE_RESET                   0X1

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x000E0000U ,0x000E0000U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x000E0000U, 0x000E0000U);
/*##################################################################### */

    /*
    * PUTTING DP IN RESET
    */
    /*
    * Register : DP_TX_PHY_POWER_DOWN @ 0XFD4A0238

    * Two bits per lane. When set to 11, moves the GT to power down mode. When
    *  set to 00, GT will be in active state. bits [1:0] - lane0 Bits [3:2] -
    * lane 1
    *  PSU_DP_DP_TX_PHY_POWER_DOWN_POWER_DWN                       0XA

    * Control PHY Power down
    * (OFFSET, MASK, VALUE)      (0XFD4A0238, 0x0000000FU ,0x0000000AU)
    */
	PSU_Mask_Write(DP_DP_TX_PHY_POWER_DOWN_OFFSET,
		0x0000000FU, 0x0000000AU);
/*##################################################################### */

    /*
    * Register : DP_PHY_RESET @ 0XFD4A0200

    * Set to '1' to hold the GT in reset. Clear to release.
    *  PSU_DP_DP_PHY_RESET_GT_RESET                                0X1

    * Reset the transmitter PHY.
    * (OFFSET, MASK, VALUE)      (0XFD4A0200, 0x00000002U ,0x00000002U)
    */
	PSU_Mask_Write(DP_DP_PHY_RESET_OFFSET, 0x00000002U, 0x00000002U);
/*##################################################################### */

    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * Display Port block level reset (includes DPDMA)
    *  PSU_CRF_APB_RST_FPD_TOP_DP_RESET                            0X1

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x00010000U ,0x00010000U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x00010000U, 0x00010000U);
/*##################################################################### */


	return 1;
}
unsigned long psu_ps_pl_isolation_removal_data(void)
{
    /*
    * PS-PL POWER UP REQUEST
    */
    /*
    * Register : REQ_PWRUP_INT_EN @ 0XFFD80118

    * Power-up Request Interrupt Enable for PL
    *  PSU_PMU_GLOBAL_REQ_PWRUP_INT_EN_PL                          1

    * Power-up Request Interrupt Enable Register. Writing a 1 to this location
    *  will unmask the interrupt.
    * (OFFSET, MASK, VALUE)      (0XFFD80118, 0x00800000U ,0x00800000U)
    */
	PSU_Mask_Write(PMU_GLOBAL_REQ_PWRUP_INT_EN_OFFSET,
		0x00800000U, 0x00800000U);
/*##################################################################### */

    /*
    * Register : REQ_PWRUP_TRIG @ 0XFFD80120

    * Power-up Request Trigger for PL
    *  PSU_PMU_GLOBAL_REQ_PWRUP_TRIG_PL                            1

    * Power-up Request Trigger Register. A write of one to this location will
    * generate a power-up request to the PMU.
    * (OFFSET, MASK, VALUE)      (0XFFD80120, 0x00800000U ,0x00800000U)
    */
	PSU_Mask_Write(PMU_GLOBAL_REQ_PWRUP_TRIG_OFFSET,
		0x00800000U, 0x00800000U);
/*##################################################################### */

    /*
    * POLL ON PL POWER STATUS
    */
    /*
    * Register : REQ_PWRUP_STATUS @ 0XFFD80110

    * Power-up Request Status for PL
    *  PSU_PMU_GLOBAL_REQ_PWRUP_STATUS_PL                          1
    * (OFFSET, MASK, VALUE)      (0XFFD80110, 0x00800000U ,0x00000000U)
		*/
	mask_pollOnValue(PMU_GLOBAL_REQ_PWRUP_STATUS_OFFSET,
		0x00800000U, 0x00000000U);

/*##################################################################### */


	return 1;
}
unsigned long psu_afi_config(void)
{
    /*
    * AFI RESET
    */
    /*
    * Register : RST_FPD_TOP @ 0XFD1A0100

    * AF_FM0 block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_AFI_FM0_RESET                       0

    * AF_FM1 block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_AFI_FM1_RESET                       0

    * AF_FM2 block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_AFI_FM2_RESET                       0

    * AF_FM3 block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_AFI_FM3_RESET                       0

    * AF_FM4 block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_AFI_FM4_RESET                       0

    * AF_FM5 block level reset
    *  PSU_CRF_APB_RST_FPD_TOP_AFI_FM5_RESET                       0

    * FPD Block level software controlled reset
    * (OFFSET, MASK, VALUE)      (0XFD1A0100, 0x00001F80U ,0x00000000U)
    */
	PSU_Mask_Write(CRF_APB_RST_FPD_TOP_OFFSET, 0x00001F80U, 0x00000000U);
/*##################################################################### */

    /*
    * Register : RST_LPD_TOP @ 0XFF5E023C

    * AFI FM 6
    *  PSU_CRL_APB_RST_LPD_TOP_AFI_FM6_RESET                       0

    * Software control register for the LPD block.
    * (OFFSET, MASK, VALUE)      (0XFF5E023C, 0x00080000U ,0x00000000U)
    */
	PSU_Mask_Write(CRL_APB_RST_LPD_TOP_OFFSET, 0x00080000U, 0x00000000U);
/*##################################################################### */

    /*
    * AFIFM INTERFACE WIDTH
    */
    /*
    * Register : afi_fs @ 0XFD615000

    * Select the 32/64/128-bit data width selection for the Slave 0 00: 32-bit
    *  AXI data width (default) 01: 64-bit AXI data width 10: 128-bit AXI data
    *  width 11: reserved
    *  PSU_FPD_SLCR_AFI_FS_DW_SS0_SEL                              0x2

    * Select the 32/64/128-bit data width selection for the Slave 1 00: 32-bit
    *  AXI data width (default) 01: 64-bit AXI data width 10: 128-bit AXI data
    *  width 11: reserved
    *  PSU_FPD_SLCR_AFI_FS_DW_SS1_SEL                              0x2

    * afi fs SLCR control register. This register is static and should not be
    * modified during operation.
    * (OFFSET, MASK, VALUE)      (0XFD615000, 0x00000F00U ,0x00000A00U)
    */
	PSU_Mask_Write(FPD_SLCR_AFI_FS_OFFSET, 0x00000F00U, 0x00000A00U);
/*##################################################################### */


	return 1;
}
unsigned long psu_ps_pl_reset_config_data(void)
{
    /*
    * PS PL RESET SEQUENCE
    */
    /*
    * FABRIC RESET USING EMIO
    */
    /*
    * Register : MASK_DATA_5_MSW @ 0XFF0A002C

    * Operation is the same as MASK_DATA_0_LSW[MASK_0_LSW]
    *  PSU_GPIO_MASK_DATA_5_MSW_MASK_5_MSW                         0x8000

    * Maskable Output Data (GPIO Bank5, EMIO, Upper 16bits)
    * (OFFSET, MASK, VALUE)      (0XFF0A002C, 0xFFFF0000U ,0x80000000U)
    */
	PSU_Mask_Write(GPIO_MASK_DATA_5_MSW_OFFSET,
		0xFFFF0000U, 0x80000000U);
/*##################################################################### */

    /*
    * Register : DIRM_5 @ 0XFF0A0344

    * Operation is the same as DIRM_0[DIRECTION_0]
    *  PSU_GPIO_DIRM_5_DIRECTION_5                                 0x80000000

    * Direction mode (GPIO Bank5, EMIO)
    * (OFFSET, MASK, VALUE)      (0XFF0A0344, 0xFFFFFFFFU ,0x80000000U)
    */
	PSU_Mask_Write(GPIO_DIRM_5_OFFSET, 0xFFFFFFFFU, 0x80000000U);
/*##################################################################### */

    /*
    * Register : OEN_5 @ 0XFF0A0348

    * Operation is the same as OEN_0[OP_ENABLE_0]
    *  PSU_GPIO_OEN_5_OP_ENABLE_5                                  0x80000000

    * Output enable (GPIO Bank5, EMIO)
    * (OFFSET, MASK, VALUE)      (0XFF0A0348, 0xFFFFFFFFU ,0x80000000U)
    */
	PSU_Mask_Write(GPIO_OEN_5_OFFSET, 0xFFFFFFFFU, 0x80000000U);
/*##################################################################### */

    /*
    * Register : DATA_5 @ 0XFF0A0054

    * Output Data
    *  PSU_GPIO_DATA_5_DATA_5                                      0x80000000

    * Output Data (GPIO Bank5, EMIO)
    * (OFFSET, MASK, VALUE)      (0XFF0A0054, 0xFFFFFFFFU ,0x80000000U)
    */
	PSU_Mask_Write(GPIO_DATA_5_OFFSET, 0xFFFFFFFFU, 0x80000000U);
/*##################################################################### */

		mask_delay(1);

/*##################################################################### */

    /*
    * FABRIC RESET USING DATA_5 TOGGLE
    */
    /*
    * Register : DATA_5 @ 0XFF0A0054

    * Output Data
    *  PSU_GPIO_DATA_5_DATA_5                                      0X00000000

    * Output Data (GPIO Bank5, EMIO)
    * (OFFSET, MASK, VALUE)      (0XFF0A0054, 0xFFFFFFFFU ,0x00000000U)
    */
	PSU_Mask_Write(GPIO_DATA_5_OFFSET, 0xFFFFFFFFU, 0x00000000U);
/*##################################################################### */

		mask_delay(1);

/*##################################################################### */

    /*
    * FABRIC RESET USING DATA_5 TOGGLE
    */
    /*
    * Register : DATA_5 @ 0XFF0A0054

    * Output Data
    *  PSU_GPIO_DATA_5_DATA_5                                      0x80000000

    * Output Data (GPIO Bank5, EMIO)
    * (OFFSET, MASK, VALUE)      (0XFF0A0054, 0xFFFFFFFFU ,0x80000000U)
    */
	PSU_Mask_Write(GPIO_DATA_5_OFFSET, 0xFFFFFFFFU, 0x80000000U);
/*##################################################################### */


	return 1;
}

unsigned long psu_ddr_phybringup_data(void)
{


	unsigned int regval = 0;

	unsigned int pll_retry = 10;

	unsigned int pll_locked = 0;


	while ((pll_retry > 0) && (!pll_locked)) {

		Xil_Out32(0xFD080004, 0x00040010);/*PIR*/
		Xil_Out32(0xFD080004, 0x00040011);/*PIR*/

	while ((Xil_In32(0xFD080030) & 0x1) != 1) {
	/*****TODO*****/

	/*TIMEOUT poll mechanism need to be inserted in this block*/

	}


		pll_locked = (Xil_In32(0xFD080030) & 0x80000000)
		>> 31;/*PGSR0*/
		pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000)
		>> 16;/*DX0GSR0*/
		pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000)
		>> 16;/*DX2GSR0*/
		pll_locked &= (Xil_In32(0xFD080BE0) & 0x10000)
		>> 16;/*DX4GSR0*/
		pll_locked &= (Xil_In32(0xFD080DE0) & 0x10000)
		>> 16;/*DX6GSR0*/
		pll_retry--;
	}
	Xil_Out32(0xFD0800C0, Xil_In32(0xFD0800C0) |
		(pll_retry << 16));/*GPR0*/
	Xil_Out32(0xFD080004U, 0x00040063U);
	/* PHY BRINGUP SEQ */
	while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) {
	/*****TODO*****/

	/*TIMEOUT poll mechanism need to be inserted in this block*/

	}

	prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U);
	/* poll for PHY initialization to complete */
	while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) {
	/*****TODO*****/

	/*TIMEOUT poll mechanism need to be inserted in this block*/

	}


	Xil_Out32(0xFD0701B0U, 0x00000001U);
	Xil_Out32(0xFD070320U, 0x00000001U);
	while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) {
	/*****TODO*****/

	/*TIMEOUT poll mechanism need to be inserted in this block*/

	}

	prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U);
	Xil_Out32(0xFD080004, 0x0004FE01); /*PUB_PIR*/
	regval = Xil_In32(0xFD080030); /*PUB_PGSR0*/
	while (regval != 0x80000FFF)
		regval = Xil_In32(0xFD080030); /*PUB_PGSR0*/

/* Run Vref training in static read mode*/
	Xil_Out32(0xFD080200U, 0x100091C7U);
	Xil_Out32(0xFD080018U, 0x00F01EEFU);
	prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000003U);
	prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000003U);
	prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000003U);
	prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000003U);
	prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000003U);
	prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000003U);


	Xil_Out32(0xFD080004, 0x00060001); /*PUB_PIR*/
	regval = Xil_In32(0xFD080030); /*PUB_PGSR0*/
	while ((regval & 0x80004001) != 0x80004001) {
	/*PUB_PGSR0*/
		regval = Xil_In32(0xFD080030);
	}

	prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000000U);
	prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000000U);
	prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000000U);
	prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000000U);
	prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000000U);
	prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000000U);
/*Vref training is complete, disabling static read mode*/
	Xil_Out32(0xFD080200U, 0x800091C7U);
	Xil_Out32(0xFD080018U, 0x00F122E7U);


	Xil_Out32(0xFD080004, 0x0000C001); /*PUB_PIR*/
	regval = Xil_In32(0xFD080030); /*PUB_PGSR0*/
	while ((regval & 0x80000C01) != 0x80000C01) {
	/*PUB_PGSR0*/
		regval = Xil_In32(0xFD080030);
	}

	Xil_Out32(0xFD070180U, 0x01000040U);
	Xil_Out32(0xFD070060U, 0x00000000U);
	prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U);

return 1;
}

/**
 * CRL_APB Base Address
 */
#define CRL_APB_BASEADDR      0XFF5E0000U
#define CRL_APB_RST_LPD_IOU0    ((CRL_APB_BASEADDR) + 0X00000230U)
#define CRL_APB_RST_LPD_IOU1    ((CRL_APB_BASEADDR) + 0X00000234U)
#define CRL_APB_RST_LPD_IOU2    ((CRL_APB_BASEADDR) + 0X00000238U)
#define CRL_APB_RST_LPD_TOP    ((CRL_APB_BASEADDR) + 0X0000023CU)
#define CRL_APB_IOU_SWITCH_CTRL    ((CRL_APB_BASEADDR) + 0X0000009CU)

/**
 * CRF_APB Base Address
 */
#define CRF_APB_BASEADDR      0XFD1A0000U

#define CRF_APB_RST_FPD_TOP    ((CRF_APB_BASEADDR) + 0X00000100U)
#define CRF_APB_GPU_REF_CTRL    ((CRF_APB_BASEADDR) + 0X00000084U)
#define CRF_APB_RST_DDR_SS    ((CRF_APB_BASEADDR) + 0X00000108U)
#define PSU_MASK_POLL_TIME 1100000

/**
 *  * Register: CRF_APB_DPLL_CTRL
 */
#define CRF_APB_DPLL_CTRL    ((CRF_APB_BASEADDR) + 0X0000002C)


#define CRF_APB_DPLL_CTRL_DIV2_SHIFT   16
#define CRF_APB_DPLL_CTRL_DIV2_WIDTH   1

#define CRF_APB_DPLL_CTRL_FBDIV_SHIFT   8
#define CRF_APB_DPLL_CTRL_FBDIV_WIDTH   7

#define CRF_APB_DPLL_CTRL_BYPASS_SHIFT   3
#define CRF_APB_DPLL_CTRL_BYPASS_WIDTH   1

#define CRF_APB_DPLL_CTRL_RESET_SHIFT   0
#define CRF_APB_DPLL_CTRL_RESET_WIDTH   1

/**
 *  * Register: CRF_APB_DPLL_CFG
 */
#define CRF_APB_DPLL_CFG    ((CRF_APB_BASEADDR) + 0X00000030)

#define CRF_APB_DPLL_CFG_LOCK_DLY_SHIFT   25
#define CRF_APB_DPLL_CFG_LOCK_DLY_WIDTH   7

#define CRF_APB_DPLL_CFG_LOCK_CNT_SHIFT   13
#define CRF_APB_DPLL_CFG_LOCK_CNT_WIDTH   10

#define CRF_APB_DPLL_CFG_LFHF_SHIFT   10
#define CRF_APB_DPLL_CFG_LFHF_WIDTH   2

#define CRF_APB_DPLL_CFG_CP_SHIFT   5
#define CRF_APB_DPLL_CFG_CP_WIDTH   4

#define CRF_APB_DPLL_CFG_RES_SHIFT   0
#define CRF_APB_DPLL_CFG_RES_WIDTH   4

/**
 * Register: CRF_APB_PLL_STATUS
 */
#define CRF_APB_PLL_STATUS    ((CRF_APB_BASEADDR) + 0X00000044)


static int mask_pollOnValue(u32 add, u32 mask, u32 value)
{
	volatile u32 *addr = (volatile u32 *)(unsigned long) add;
	int i = 0;

	while ((*addr & mask) != value) {
		if (i == PSU_MASK_POLL_TIME)
			return 0;
		i++;
	}
	return 1;
}

static int mask_poll(u32 add, u32 mask)
{
	volatile u32 *addr = (volatile u32 *)(unsigned long) add;
	int i = 0;

	while (!(*addr & mask)) {
		if (i == PSU_MASK_POLL_TIME)
			return 0;
		i++;
	}
	return 1;
}

static void mask_delay(u32 delay)
{
	usleep(delay);
}

static u32 mask_read(u32 add, u32 mask)
{
	volatile u32 *addr = (volatile u32 *)(unsigned long) add;
	u32 val = (*addr & mask);
	return val;
}

static void dpll_prog(int ddr_pll_fbdiv, int d_lock_dly, int d_lock_cnt,
	int d_lfhf, int d_cp, int d_res) {

	unsigned int pll_ctrl_regval;
	unsigned int pll_status_regval;

	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CTRL);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CTRL_DIV2_MASK);
	pll_ctrl_regval = pll_ctrl_regval | (1 << CRF_APB_DPLL_CTRL_DIV2_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CTRL, pll_ctrl_regval);

	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CFG);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CFG_LOCK_DLY_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(d_lock_dly << CRF_APB_DPLL_CFG_LOCK_DLY_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CFG, pll_ctrl_regval);

	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CFG);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CFG_LOCK_CNT_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(d_lock_cnt << CRF_APB_DPLL_CFG_LOCK_CNT_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CFG, pll_ctrl_regval);

	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CFG);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CFG_LFHF_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(d_lfhf << CRF_APB_DPLL_CFG_LFHF_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CFG, pll_ctrl_regval);

	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CFG);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CFG_CP_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(d_cp << CRF_APB_DPLL_CFG_CP_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CFG, pll_ctrl_regval);

	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CFG);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CFG_RES_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(d_res << CRF_APB_DPLL_CFG_RES_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CFG, pll_ctrl_regval);

	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CTRL);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CTRL_FBDIV_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(ddr_pll_fbdiv << CRF_APB_DPLL_CTRL_FBDIV_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CTRL, pll_ctrl_regval);

	/*Setting PLL BYPASS*/
	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CTRL);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CTRL_BYPASS_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(1 << CRF_APB_DPLL_CTRL_BYPASS_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CTRL, pll_ctrl_regval);

	/*Setting PLL RESET*/
	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CTRL);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CTRL_RESET_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(1 << CRF_APB_DPLL_CTRL_RESET_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CTRL, pll_ctrl_regval);

	/*Clearing PLL RESET*/
	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CTRL);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CTRL_RESET_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(0 << CRF_APB_DPLL_CTRL_RESET_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CTRL, pll_ctrl_regval);

	/*Checking PLL lock*/
	pll_status_regval = 0x00000000;
	while ((pll_status_regval & CRF_APB_PLL_STATUS_DPLL_LOCK_MASK) !=
		CRF_APB_PLL_STATUS_DPLL_LOCK_MASK)
		pll_status_regval = Xil_In32(CRF_APB_PLL_STATUS);




	/*Clearing PLL BYPASS*/
	pll_ctrl_regval = Xil_In32(CRF_APB_DPLL_CTRL);
	pll_ctrl_regval = pll_ctrl_regval & (~CRF_APB_DPLL_CTRL_BYPASS_MASK);
	pll_ctrl_regval = pll_ctrl_regval |
		(0 << CRF_APB_DPLL_CTRL_BYPASS_SHIFT);
	Xil_Out32(CRF_APB_DPLL_CTRL, pll_ctrl_regval);

}

/*Following SERDES programming sequences that a user need to follow to work
 * around the known limitation with SERDES. These sequences should done
 * before STEP 1 and STEP 2 as described in previous section. These
 * programming steps are *required for current silicon version and are
 * likely to undergo further changes with subsequent silicon versions.
 */


static int serdes_enb_coarse_saturation(void)
{
  /*Enable PLL Coarse Code saturation Logic*/
	Xil_Out32(0xFD402094, 0x00000010);
	Xil_Out32(0xFD406094, 0x00000010);
	Xil_Out32(0xFD40A094, 0x00000010);
	Xil_Out32(0xFD40E094, 0x00000010);
		return 1;
}

int serdes_fixcal_code(void)
{
	int MaskStatus = 1;

  unsigned int rdata = 0;
  
	/*The valid codes are from 0x26 to 0x3C.
	*There are 23 valid codes in total.
	*/
 /*Each element of array stands for count of occurence of valid code.*/
	unsigned int match_pmos_code[23];
	/*Each element of array stands for count of occurence of valid code.*/
	/*The valid codes are from 0xC to 0x12.
	*There are 7 valid codes in total.
	*/
	unsigned int match_nmos_code[23];
	/*Each element of array stands for count of occurence of valid code.*/
	/*The valid codes are from 0x6 to 0xC.
	* There are 7 valid codes in total.
	*/
	unsigned int match_ical_code[7];
	/*Each element of array stands for count of occurence of valid code.*/
	unsigned int match_rcal_code[7];

	unsigned int p_code = 0;
	unsigned int n_code = 0;
	unsigned int i_code = 0;
	unsigned int r_code = 0;
	unsigned int repeat_count = 0;
	unsigned int L3_TM_CALIB_DIG20 = 0;
	unsigned int L3_TM_CALIB_DIG19 = 0;
	unsigned int L3_TM_CALIB_DIG18 = 0;
	unsigned int L3_TM_CALIB_DIG16 = 0;
	unsigned int L3_TM_CALIB_DIG15 = 0;
	unsigned int L3_TM_CALIB_DIG14 = 0;

	int i = 0;

  rdata = Xil_In32(0XFD40289C);
  rdata = rdata & ~0x03; 
  rdata = rdata | 0x1; 
  Xil_Out32(0XFD40289C, rdata);
  // check supply good status before starting AFE sequencing
  int count = 0; 
  do
  { 
    if (count == PSU_MASK_POLL_TIME)
      break;
    rdata = Xil_In32(0xFD402B1C); 
    count++;
  }while((rdata&0x0000000E) !=0x0000000E);

	for (i = 0; i < 23; i++) {
		match_pmos_code[i] = 0;
		match_nmos_code[i] = 0;
	}
	for (i = 0; i < 7; i++) {
		match_ical_code[i] = 0;
		match_rcal_code[i] = 0;
	}


	do {
	/*Clear ICM_CFG value*/
		Xil_Out32(0xFD410010, 0x00000000);
		Xil_Out32(0xFD410014, 0x00000000);

	/*Set ICM_CFG value*/
	/*This will trigger recalibration of all stages*/
	Xil_Out32(0xFD410010, 0x00000001);
	Xil_Out32(0xFD410014, 0x00000000);

	/*is calibration done? polling on L3_CALIB_DONE_STATUS*/
	MaskStatus = mask_poll(0xFD40EF14, 0x2);
	if (MaskStatus == 0) {
		/*failure here is because of calibration done timeout*/
		xil_printf("#SERDES initialization timed out\n\r");
		return MaskStatus;
	}

	p_code = mask_read(0xFD40EF18, 0xFFFFFFFF);/*PMOS code*/
	n_code = mask_read(0xFD40EF1C, 0xFFFFFFFF);/*NMOS code*/
	/*m_code = mask_read(0xFD40EF20, 0xFFFFFFFF)*/;/*MPHY code*/
	i_code = mask_read(0xFD40EF24, 0xFFFFFFFF);/*ICAL code*/
	r_code = mask_read(0xFD40EF28, 0xFFFFFFFF);/*RX code*/
	/*u_code = mask_read(0xFD40EF2C, 0xFFFFFFFF)*/;/*USB2 code*/

	/*PMOS code in acceptable range*/
	if ((p_code >= 0x26) && (p_code <= 0x3C))
		match_pmos_code[p_code - 0x26] += 1;

	/*NMOS code in acceptable range*/
	if ((n_code >= 0x26) && (n_code <= 0x3C))
		match_nmos_code[n_code - 0x26] += 1;

	/*PMOS code in acceptable range*/
	if ((i_code >= 0xC) && (i_code <= 0x12))
		match_ical_code[i_code - 0xC] += 1;

	/*NMOS code in acceptable range*/
	if ((r_code >= 0x6) && (r_code <= 0xC))
		match_rcal_code[r_code - 0x6] += 1;


	} while (repeat_count++ < 10);

	/*find the valid code which resulted in maximum times in 10 iterations*/
	for (i = 0; i < 23; i++) {
		if (match_pmos_code[i] >= match_pmos_code[0]) {
			match_pmos_code[0] = match_pmos_code[i];
			p_code = 0x26 + i;
		}
	if (match_nmos_code[i] >= match_nmos_code[0]) {
		match_nmos_code[0] = match_nmos_code[i];
		n_code = 0x26 + i;
		}
	}

	for (i = 0; i < 7; i++) {
		if (match_ical_code[i] >= match_ical_code[0]) {
			match_ical_code[0] = match_ical_code[i];
			i_code = 0xC + i;
		}
		if (match_rcal_code[i] >= match_rcal_code[0]) {
			match_rcal_code[0] = match_rcal_code[i];
			r_code = 0x6 + i;
		}
	}
	/*L3_TM_CALIB_DIG20[3] PSW MSB Override*/
	/*L3_TM_CALIB_DIG20[2:0]	PSW Code [4:2]*/
	L3_TM_CALIB_DIG20 = mask_read(0xFD40EC50, 0xFFFFFFF0);/*read DIG20*/
	L3_TM_CALIB_DIG20 = L3_TM_CALIB_DIG20 | 0x8 | ((p_code >> 2) & 0x7);


	/*L3_TM_CALIB_DIG19[7:6]	PSW Code [1:0]*/
	/*L3_TM_CALIB_DIG19[5]	PSW Override*/
	/*L3_TM_CALIB_DIG19[2]	NSW MSB Override*/
	/*L3_TM_CALIB_DIG19[1:0]	NSW Code [4:3]*/
	L3_TM_CALIB_DIG19 = mask_read(0xFD40EC4C, 0xFFFFFF18);/*read DIG19*/
	L3_TM_CALIB_DIG19 = L3_TM_CALIB_DIG19 | ((p_code & 0x3) << 6)
		| 0x20 | 0x4 | ((n_code >> 3) & 0x3);

	/*L3_TM_CALIB_DIG18[7:5]	NSW Code [2:0]*/
	/*L3_TM_CALIB_DIG18[4]	NSW Override*/
	L3_TM_CALIB_DIG18 = mask_read(0xFD40EC48, 0xFFFFFF0F);/*read DIG18*/
	L3_TM_CALIB_DIG18 = L3_TM_CALIB_DIG18 | ((n_code & 0x7) << 5) | 0x10;


	/*L3_TM_CALIB_DIG16[2:0]	RX Code [3:1]*/
	L3_TM_CALIB_DIG16 = mask_read(0xFD40EC40, 0xFFFFFFF8);/*read DIG16*/
	L3_TM_CALIB_DIG16 = L3_TM_CALIB_DIG16 | ((r_code >> 1) & 0x7);

	/*L3_TM_CALIB_DIG15[7]	RX Code [0]*/
	/*L3_TM_CALIB_DIG15[6]	RX CODE Override*/
	/*L3_TM_CALIB_DIG15[3]	ICAL MSB Override*/
	/*L3_TM_CALIB_DIG15[2:0]	ICAL Code [3:1]*/
	L3_TM_CALIB_DIG15 = mask_read(0xFD40EC3C, 0xFFFFFF30);/*read DIG15*/
	L3_TM_CALIB_DIG15 = L3_TM_CALIB_DIG15 | ((r_code & 0x1) << 7)
	| 0x40 | 0x8 | ((i_code >> 1) & 0x7);

	/*L3_TM_CALIB_DIG14[7]	ICAL Code [0]*/
	/*L3_TM_CALIB_DIG14[6]	ICAL Override*/
	L3_TM_CALIB_DIG14 = mask_read(0xFD40EC38, 0xFFFFFF3F);/*read DIG14*/
	L3_TM_CALIB_DIG14 = L3_TM_CALIB_DIG14 | ((i_code & 0x1) << 7) | 0x40;

	/*Forces the calibration values*/
	Xil_Out32(0xFD40EC50, L3_TM_CALIB_DIG20);
	Xil_Out32(0xFD40EC4C, L3_TM_CALIB_DIG19);
	Xil_Out32(0xFD40EC48, L3_TM_CALIB_DIG18);
	Xil_Out32(0xFD40EC40, L3_TM_CALIB_DIG16);
	Xil_Out32(0xFD40EC3C, L3_TM_CALIB_DIG15);
	Xil_Out32(0xFD40EC38, L3_TM_CALIB_DIG14);
	return MaskStatus;

}
static int init_serdes(void)
{
	int status = 1;

	status &=  psu_resetin_init_data();

	status &= serdes_fixcal_code();
	status &= serdes_enb_coarse_saturation();

	status &=  psu_serdes_init_data();
	status &=  psu_resetout_init_data();

	return status;
}


static void init_peripheral(void)
{
/*SMMU_REG Interrrupt Enable: Followig register need to be written all the time to properly catch SMMU messages.*/
	PSU_Mask_Write(0xFD5F0018, 0x8000001FU, 0x8000001FU);
}

static int psu_init_xppu_aper_ram(void)
{

	return 0;
}

int psu_lpd_protection(void)
{
	psu_init_xppu_aper_ram();
	return 0;
}

int psu_ddr_protection(void)
{
	psu_ddr_xmpu0_data();
	psu_ddr_xmpu1_data();
	psu_ddr_xmpu2_data();
	psu_ddr_xmpu3_data();
	psu_ddr_xmpu4_data();
	psu_ddr_xmpu5_data();
	return 0;
}
int psu_ocm_protection(void)
{
	psu_ocm_xmpu_data();
	return 0;
}

int psu_fpd_protection(void)
{
	psu_fpd_xmpu_data();
	return 0;
}

int psu_protection_lock(void)
{
	psu_protection_lock_data();
	return 0;
}

int psu_protection(void)
{
	psu_apply_master_tz();
	psu_ddr_protection();
	psu_ocm_protection();
	psu_fpd_protection();
	psu_lpd_protection();
	return 0;
}

int
psu_init(void)
{
	int status = 1;

	status &= psu_mio_init_data();
	status &=   psu_pll_init_data();
	status &=   psu_clock_init_data();
	status &=  psu_ddr_init_data();
	status &=  psu_ddr_phybringup_data();
	status &=  psu_peripherals_init_data();
	status &=  init_serdes();
	init_peripheral();

	status &=  psu_peripherals_powerdwn_data();
	status &=    psu_afi_config();
	psu_ddr_qos_init_data();

	if (status == 0)
		return 1;
	return 0;
}
