Commit c020d355 authored by Steve Kipisz's avatar Steve Kipisz Committed by Tom Rini

board: ti: am57xx: Add support for am572x idk in SPL

The AM572x-IDK board (Industrial Dev Kit) is a board based on TI's AM5728x
SOC which has a dual core 1.5GHz A15 processor. This board is a development
platform for the Industrial market with:
- 2GB of DDR3L
- Dual 1Gbps Ethernet
- uSD
- 16GB eMMC
- RS-485
- PCIe
- USB3.0
- Video Input Port
- Industrial IO port and expansion connector

The link to the data sheet and TRM can be found here:

NOTE: DT support is still pending upstream kernel acceptance but we
should be able to get the base system support with this patch.
Signed-off-by: default avatarSchuyler Patton <>
Signed-off-by: default avatarSteve Kipisz <>
Signed-off-by: default avatarNishanth Menon <>
Reviewed-by: default avatarLokesh Vutla <>
Reviewed-by: default avatarTom Rini <>
parent 5f405e7f
......@@ -35,6 +35,7 @@
#define board_is_x15() board_ti_is("BBRDX15_")
#define board_is_am572x_evm() board_ti_is("AM572PM_")
#define board_is_am572x_idk() board_ti_is("AM572IDK")
#include <cpsw.h>
......@@ -278,6 +279,8 @@ void do_board_detect(void)
bname = "BeagleBoard X15";
else if (board_is_am572x_evm())
bname = "AM572x EVM";
else if (board_is_am572x_idk())
bname = "AM572x IDK";
if (bname)
snprintf(sysinfo.board_string, SYSINFO_BOARD_NAME_MAX_LEN,
......@@ -296,6 +299,8 @@ static void setup_board_eeprom_env(void)
if (board_is_am572x_evm())
name = "am57xx_evm";
else if (board_is_am572x_idk())
name = "am572x_idk";
printf("Unidentified board claims %s in eeprom header\n",
......@@ -343,9 +348,24 @@ void set_muxconf_regs(void)
void recalibrate_iodelay(void)
iodelay_cfg_array, ARRAY_SIZE(iodelay_cfg_array));
const struct pad_conf_entry *pconf;
const struct iodelay_cfg_entry *iod;
int pconf_sz, iod_sz;
if (board_is_am572x_idk()) {
pconf = core_padconf_array_essential_am572x_idk;
pconf_sz = ARRAY_SIZE(core_padconf_array_essential_am572x_idk);
iod = iodelay_cfg_array_am572x_idk;
iod_sz = ARRAY_SIZE(iodelay_cfg_array_am572x_idk);
} else {
/* Common for X15/GPEVM */
pconf = core_padconf_array_essential_x15;
pconf_sz = ARRAY_SIZE(core_padconf_array_essential_x15);
iod = iodelay_cfg_array_x15;
iod_sz = ARRAY_SIZE(iodelay_cfg_array_x15);
__recalibrate_iodelay(pconf, pconf_sz, iod, iod_sz);
......@@ -605,6 +625,12 @@ int board_eth_init(bd_t *bis)
ctrl_val |= 0x22;
writel(ctrl_val, (*ctrl)->control_core_control_io1);
/* The phy address for the AM572x IDK are different than x15 */
if (board_is_am572x_idk()) {
cpsw_data.slave_data[0].phy_addr = 0;
cpsw_data.slave_data[1].phy_addr = 1;
ret = cpsw_register(&cpsw_data);
if (ret < 0)
printf("Error %d registering CPSW switch\n", ret);
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment