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:
parent
3548753d69
commit
bf9a9b6889
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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 " \
|
||||
|
|
Loading…
Reference in New Issue