]> git.sur5r.net Git - u-boot/blobdiff - board/ti/am57xx/board.c
board: ti: x15: Add support for beagle_X15 revC
[u-boot] / board / ti / am57xx / board.c
index 3be697a6eaadd4c8dd85f4ac90ad2df5586d41c3..00a31a97fd6dce4ae98d704638c7f4df271b2ef4 100644 (file)
 
 #define board_is_x15()         board_ti_is("BBRDX15_")
 #define board_is_x15_revb1()   (board_ti_is("BBRDX15_") && \
-                                (strncmp("B.10", board_ti_get_rev(), 3) <= 0))
+                                !strncmp("B.10", board_ti_get_rev(), 3))
+#define board_is_x15_revc()    (board_ti_is("BBRDX15_") && \
+                                !strncmp("C.00", board_ti_get_rev(), 3))
 #define board_is_am572x_evm()  board_ti_is("AM572PM_")
 #define board_is_am572x_evm_reva3()    \
                                (board_ti_is("AM572PM_") && \
-                                (strncmp("A.30", board_ti_get_rev(), 3) <= 0))
+                                !strncmp("A.30", board_ti_get_rev(), 3))
 #define board_is_am572x_idk()  board_ti_is("AM572IDK")
 #define board_is_am571x_idk()  board_ti_is("AM571IDK")
 
@@ -343,6 +345,54 @@ struct vcores_data am572x_idk_volts = {
        .iva.abb_tx_done_mask   = OMAP_ABB_IVA_TXDONE_MASK,
 };
 
+struct vcores_data am571x_idk_volts = {
+       .mpu.value[OPP_NOM]     = VDD_MPU_DRA7_NOM,
+       .mpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_MPU_NOM,
+       .mpu.efuse.reg_bits     = DRA752_EFUSE_REGBITS,
+       .mpu.addr               = TPS659038_REG_ADDR_SMPS12,
+       .mpu.pmic               = &tps659038,
+       .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
+
+       .eve.value[OPP_NOM]     = VDD_EVE_DRA7_NOM,
+       .eve.value[OPP_OD]      = VDD_EVE_DRA7_OD,
+       .eve.value[OPP_HIGH]    = VDD_EVE_DRA7_HIGH,
+       .eve.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
+       .eve.efuse.reg[OPP_OD]  = STD_FUSE_OPP_VMIN_DSPEVE_OD,
+       .eve.efuse.reg[OPP_HIGH]        = STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
+       .eve.efuse.reg_bits     = DRA752_EFUSE_REGBITS,
+       .eve.addr               = TPS659038_REG_ADDR_SMPS45,
+       .eve.pmic               = &tps659038,
+       .eve.abb_tx_done_mask   = OMAP_ABB_EVE_TXDONE_MASK,
+
+       .gpu.value[OPP_NOM]     = VDD_GPU_DRA7_NOM,
+       .gpu.value[OPP_OD]      = VDD_GPU_DRA7_OD,
+       .gpu.value[OPP_HIGH]    = VDD_GPU_DRA7_HIGH,
+       .gpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_GPU_NOM,
+       .gpu.efuse.reg[OPP_OD]  = STD_FUSE_OPP_VMIN_GPU_OD,
+       .gpu.efuse.reg[OPP_HIGH]        = STD_FUSE_OPP_VMIN_GPU_HIGH,
+       .gpu.efuse.reg_bits     = DRA752_EFUSE_REGBITS,
+       .gpu.addr               = TPS659038_REG_ADDR_SMPS6,
+       .gpu.pmic               = &tps659038,
+       .gpu.abb_tx_done_mask   = OMAP_ABB_GPU_TXDONE_MASK,
+
+       .core.value[OPP_NOM]    = VDD_CORE_DRA7_NOM,
+       .core.efuse.reg[OPP_NOM]        = STD_FUSE_OPP_VMIN_CORE_NOM,
+       .core.efuse.reg_bits    = DRA752_EFUSE_REGBITS,
+       .core.addr              = TPS659038_REG_ADDR_SMPS7,
+       .core.pmic              = &tps659038,
+
+       .iva.value[OPP_NOM]     = VDD_IVA_DRA7_NOM,
+       .iva.value[OPP_OD]      = VDD_IVA_DRA7_OD,
+       .iva.value[OPP_HIGH]    = VDD_IVA_DRA7_HIGH,
+       .iva.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_IVA_NOM,
+       .iva.efuse.reg[OPP_OD]  = STD_FUSE_OPP_VMIN_IVA_OD,
+       .iva.efuse.reg[OPP_HIGH]        = STD_FUSE_OPP_VMIN_IVA_HIGH,
+       .iva.efuse.reg_bits     = DRA752_EFUSE_REGBITS,
+       .iva.addr               = TPS659038_REG_ADDR_SMPS45,
+       .iva.pmic               = &tps659038,
+       .iva.abb_tx_done_mask   = OMAP_ABB_IVA_TXDONE_MASK,
+};
+
 int get_voltrail_opp(int rail_offset)
 {
        int opp;
@@ -426,6 +476,8 @@ static void setup_board_eeprom_env(void)
        if (board_is_x15()) {
                if (board_is_x15_revb1())
                        name = "beagle_x15_revb1";
+               else if (board_is_x15_revc())
+                       name = "beagle_x15_revc";
                else
                        name = "beagle_x15";
        } else if (board_is_am572x_evm()) {
@@ -452,6 +504,8 @@ void vcores_init(void)
 {
        if (board_is_am572x_idk())
                *omap_vcores = &am572x_idk_volts;
+       else if (board_is_am571x_idk())
+               *omap_vcores = &am571x_idk_volts;
        else
                *omap_vcores = &beagle_x15_volts;
 }
@@ -573,6 +627,7 @@ int board_late_init(void)
                            val);
 
        omap_die_id_serial();
+       omap_set_fastboot_vars();
 
        am57x_idk_lcd_detect();
 
@@ -593,8 +648,8 @@ void set_muxconf_regs(void)
 void recalibrate_iodelay(void)
 {
        const struct pad_conf_entry *pconf;
-       const struct iodelay_cfg_entry *iod;
-       int pconf_sz, iod_sz;
+       const struct iodelay_cfg_entry *iod, *delta_iod;
+       int pconf_sz, iod_sz, delta_iod_sz = 0;
        int ret;
 
        if (board_is_am572x_idk()) {
@@ -632,7 +687,8 @@ void recalibrate_iodelay(void)
 
        /* Now do the weird minor deltas that should be safe */
        if (board_is_x15() || board_is_am572x_evm()) {
-               if (board_is_x15_revb1() || board_is_am572x_evm_reva3()) {
+               if (board_is_x15_revb1() || board_is_am572x_evm_reva3() ||
+                   board_is_x15_revc()) {
                        pconf = core_padconf_array_delta_x15_sr2_0;
                        pconf_sz = ARRAY_SIZE(core_padconf_array_delta_x15_sr2_0);
                } else {
@@ -646,6 +702,9 @@ void recalibrate_iodelay(void)
                if (am571x_idk_needs_lcd()) {
                        pconf = core_padconf_array_vout_am571x_idk;
                        pconf_sz = ARRAY_SIZE(core_padconf_array_vout_am571x_idk);
+                       delta_iod = iodelay_cfg_array_am571x_idk_4port;
+                       delta_iod_sz = ARRAY_SIZE(iodelay_cfg_array_am571x_idk_4port);
+
                } else {
                        pconf = core_padconf_array_icss1eth_am571x_idk;
                        pconf_sz = ARRAY_SIZE(core_padconf_array_icss1eth_am571x_idk);
@@ -655,6 +714,10 @@ void recalibrate_iodelay(void)
 
        /* Setup IOdelay configuration */
        ret = do_set_iodelay((*ctrl)->iodelay_config_base, iod, iod_sz);
+       if (delta_iod_sz)
+               ret = do_set_iodelay((*ctrl)->iodelay_config_base, delta_iod,
+                                    delta_iod_sz);
+
 err:
        /* Closeup.. remove isolation */
        __recalibrate_iodelay_end(ret);