am335x_evm: Add check for non-0 profile on GP EVM, update fdtfile

Until we have device tree overlay support or something similar we need to
pass profile-specific device trees to the kernel.  Update the logic to
expose a profile_number variable and update findfdt to use
am335x-evm-profileN.dtb.  This is a TI SDK specific change as the answer
for upstream is to work towards device tree overlays or a similar
concept.

Signed-off-by: Tom Rini <trini@ti.com>
This commit is contained in:
Tom Rini 2013-10-18 11:44:00 -04:00
parent 3548753d69
commit bf9a9b6889
4 changed files with 66 additions and 35 deletions

View File

@ -512,6 +512,34 @@ int board_late_init(void)
strncpy(safe_string, (char *)header.name, sizeof(header.name));
safe_string[sizeof(header.name)] = 0;
setenv("board_name", safe_string);
if (board_is_gp_evm(&header)) {
unsigned short profile = detect_daughter_board_profile();
switch (profile) {
case PROFILE_1:
setenv("profile_number", "1");
break;
case PROFILE_2:
setenv("profile_number", "2");
break;
case PROFILE_3:
setenv("profile_number", "3");
break;
case PROFILE_4:
setenv("profile_number", "4");
break;
case PROFILE_5:
setenv("profile_number", "5");
break;
case PROFILE_6:
setenv("profile_number", "6");
break;
case PROFILE_7:
setenv("profile_number", "7");
break;
default:
setenv("profile_number", "0");
}
}
strncpy(safe_string, (char *)header.version, sizeof(header.version));
safe_string[sizeof(header.version)] = 0;

View File

@ -60,6 +60,40 @@ static inline int board_is_evm_15_or_later(struct am335x_baseboard_id *header)
strncmp("1.5", header->version, 3) <= 0);
}
/*
* The AM335x GP EVM, if daughter card(s) are connected, can have 8
* different profiles. These profiles determine what peripherals are
* valid and need pinmux to be configured.
*/
#define PROFILE_NONE 0x0
#define PROFILE_0 (1 << 0)
#define PROFILE_1 (1 << 1)
#define PROFILE_2 (1 << 2)
#define PROFILE_3 (1 << 3)
#define PROFILE_4 (1 << 4)
#define PROFILE_5 (1 << 5)
#define PROFILE_6 (1 << 6)
#define PROFILE_7 (1 << 7)
#define PROFILE_MASK 0x7
#define PROFILE_ALL 0xFF
/* CPLD registers */
#define I2C_CPLD_ADDR 0x35
#define CFG_REG 0x10
static inline unsigned short detect_daughter_board_profile(void)
{
unsigned short val;
if (i2c_probe(I2C_CPLD_ADDR))
return PROFILE_NONE;
if (i2c_read(I2C_CPLD_ADDR, CFG_REG, 1, (unsigned char *)(&val), 2))
return PROFILE_NONE;
return (1 << (val & PROFILE_MASK));
}
/*
* We have three pin mux functions that must exist. We must be able to enable
* uart0, for initial output and i2c0 to read the main EEPROM. We then have a

View File

@ -294,40 +294,6 @@ void enable_i2c0_pin_mux(void)
configure_module_pin_mux(i2c0_pin_mux);
}
/*
* The AM335x GP EVM, if daughter card(s) are connected, can have 8
* different profiles. These profiles determine what peripherals are
* valid and need pinmux to be configured.
*/
#define PROFILE_NONE 0x0
#define PROFILE_0 (1 << 0)
#define PROFILE_1 (1 << 1)
#define PROFILE_2 (1 << 2)
#define PROFILE_3 (1 << 3)
#define PROFILE_4 (1 << 4)
#define PROFILE_5 (1 << 5)
#define PROFILE_6 (1 << 6)
#define PROFILE_7 (1 << 7)
#define PROFILE_MASK 0x7
#define PROFILE_ALL 0xFF
/* CPLD registers */
#define I2C_CPLD_ADDR 0x35
#define CFG_REG 0x10
static unsigned short detect_daughter_board_profile(void)
{
unsigned short val;
if (i2c_probe(I2C_CPLD_ADDR))
return PROFILE_NONE;
if (i2c_read(I2C_CPLD_ADDR, CFG_REG, 1, (unsigned char *)(&val), 2))
return PROFILE_NONE;
return (1 << (val & PROFILE_MASK));
}
void enable_board_pin_mux(struct am335x_baseboard_id *header)
{
/* Do board-specific muxes. */

View File

@ -158,7 +158,10 @@
"if test $board_name = A335BNLT; then " \
"setenv fdtfile am335x-boneblack.dtb; fi; " \
"if test $board_name = A33515BB; then " \
"setenv fdtfile am335x-evm.dtb; fi; " \
"setenv fdtfile am335x-evm.dtb; " \
"if test $profile_number != 0; then " \
"setenv fdtfile am335x-evm-profile${profile_number}.dtb; " \
"fi; fi; "\
"if test $board_name = A335X_SK; then " \
"setenv fdtfile am335x-evmsk.dtb; fi; " \
"if test $fdtfile = undefined; then " \