summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (from parent 1: e61b508)
raw | patch | inline | side by side (from parent 1: e61b508)
author | Steve Kipisz <s-kipisz2@ti.com> | |
Thu, 13 Oct 2011 11:25:50 +0000 (16:55 +0530) | ||
committer | Vaibhav Hiremath <hvaibhav@ti.com> | |
Mon, 23 Jan 2012 19:14:31 +0000 (00:44 +0530) |
In case of wrong EEPROM ID, or if device fails to read/detect the
board fall back to BeagleBone board.
Also, add support for BeagleBone version detection and support for
old boards.
Difference in BeagleBone variants.
* Have different dev_cfg structures and setup functions for new, old
beaglebone boards setup pin mux accordingly
* Fall back to older Bone boards if EEPROM reads are incorrect or empty
* Read version field of EEPROM config to call correct setup_beaglebone
function according to board version
Signed-off-by: Steve Kipisz <s-kipisz2@ti.com>
Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
board fall back to BeagleBone board.
Also, add support for BeagleBone version detection and support for
old boards.
Difference in BeagleBone variants.
* Have different dev_cfg structures and setup functions for new, old
beaglebone boards setup pin mux accordingly
* Fall back to older Bone boards if EEPROM reads are incorrect or empty
* Read version field of EEPROM config to call correct setup_beaglebone
function according to board version
Signed-off-by: Steve Kipisz <s-kipisz2@ti.com>
Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
arch/arm/mach-omap2/board-am335xevm.c | patch | blob | history |
index 11510419a4d483e5e8e34c16d8627dc65f683d8b..4b54fa3d1e7e4f9e147f12cef87311835ed0466d 100644 (file)
struct am335x_evm_eeprom_config {
u32 header;
u8 name[8];
- u32 version;
+ char version[4];
u8 serial[12];
u8 opt[32];
};
{NULL, 0},
};
+/* Module pin mux for rmii1 */
+static struct pinmux_config rmii1_pin_mux[] = {
+ {"mii1_crs.rmii1_crs_dv", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_txen.mii1_txen", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+ {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+ {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+ {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"rmii1_refclk.rmii1_refclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
+ {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP},
+ {NULL, 0},
+};
+
static struct pinmux_config i2c1_pin_mux[] = {
{"spi0_d1.i2c1_sda", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW |
AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
return;
}
+static void rmii1_init(int evm_id, int profile)
+{
+ setup_pin_mux(rmii1_pin_mux);
+ return;
+}
+
static void usb0_init(int evm_id, int profile)
{
setup_pin_mux(usb0_pin_mux);
{NULL, 0, 0},
};
+/* Beaglebone < Rev A3 */
+static struct evm_dev_cfg beaglebone_old_dev_cfg[] = {
+ {rmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
+ {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
+ {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
+ {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
+ {NULL, 0, 0},
+};
+
+/* Beaglebone Rev A3 and after */
+static struct evm_dev_cfg beaglebone_dev_cfg[] = {
+ {mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
+ {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
+ {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
+ {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
+ {NULL, 0, 0},
+};
+
static void setup_low_cost_evm(void)
{
pr_info("The board is a AM335x Low Cost EVM.\n");
_configure_device(IP_PHN_EVM, ip_phn_evm_dev_cfg, PROFILE_NONE);
}
+/* BeagleBone < Rev A3 */
+static void setup_beaglebone_old(void)
+{
+ pr_info("The board is a AM335x Beaglebone < Rev A3.\n");
+
+ /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */
+ am335x_mmc[0].gpio_wp = -EINVAL;
+
+ _configure_device(LOW_COST_EVM, beaglebone_old_dev_cfg, PROFILE_NONE);
+}
+
+/* BeagleBone after Rev A3 */
+static void setup_beaglebone(void)
+{
+ pr_info("The board is a AM335x Beaglebone.\n");
+
+ /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */
+ am335x_mmc[0].gpio_wp = -EINVAL;
+
+ _configure_device(LOW_COST_EVM, beaglebone_dev_cfg, PROFILE_NONE);
+}
+
+
static void am335x_setup_daughter_board(struct memory_accessor *m, void *c)
{
u8 tmp;
@@ -1149,23 +1211,34 @@ static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context)
goto out;
}
- snprintf(tmp, sizeof(config.name), "%s", config.name);
+ snprintf(tmp, sizeof(config.name) + 1, "%s", config.name);
pr_info("Board name: %s\n", tmp);
- /* only 6 characters of options string used for now */
- snprintf(tmp, 7, "%s", config.opt);
- pr_info("SKU: %s\n", tmp);
-
- if (!strncmp("SKU#00", config.opt, 6))
- setup_low_cost_evm();
- else if (!strncmp("SKU#01", config.opt, 6))
- setup_general_purpose_evm();
- else if (!strncmp("SKU#02", config.opt, 6))
- setup_ind_auto_motor_ctrl_evm();
- else if (!strncmp("SKU#03", config.opt, 6))
- setup_ip_phone_evm();
- else
- goto out;
+ snprintf(tmp, sizeof(config.version) + 1, "%s", config.version);
+ pr_info("Board version: %s\n", tmp);
+ if (!strncmp("A335BONE", config.name, 8)) {
+ daughter_brd_detected = false;
+ if(!strncmp("00A1", config.version, 4) ||
+ !strncmp("00A2", config.version, 4))
+ setup_beaglebone_old();
+ else
+ setup_beaglebone();
+ } else {
+ /* only 6 characters of options string used for now */
+ snprintf(tmp, 7, "%s", config.opt);
+ pr_info("SKU: %s\n", tmp);
+
+ if (!strncmp("SKU#00", config.opt, 6))
+ setup_low_cost_evm();
+ else if (!strncmp("SKU#01", config.opt, 6))
+ setup_general_purpose_evm();
+ else if (!strncmp("SKU#02", config.opt, 6))
+ setup_ind_auto_motor_ctrl_evm();
+ else if (!strncmp("SKU#03", config.opt, 6))
+ setup_ip_phone_evm();
+ else
+ goto out;
+ }
/* Initialize cpsw after board detection is completed as board
* information is required for configuring phy address and hence
* should be call only after board detection
@@ -1175,20 +1248,20 @@ static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context)
return;
out:
/*
- * for bring-up assume a full configuration, this should
- * eventually be changed to assume a minimal configuration
+ * If the EEPROM hasn't been programed or an incorrect header
+ * or board name are read, assume this is an old beaglebone board
+ * (< Rev A3)
*/
pr_err("Could not detect any board, falling back to: "
- "General purpose EVM in profile 0 with daughter card connected\n");
- daughter_brd_detected = true;
- setup_general_purpose_evm();
+ "Beaglebone (< Rev A3) with no daughter card connected\n");
+ daughter_brd_detected = false;
+ setup_beaglebone_old();
/* Initialize cpsw after board detection is completed as board
* information is required for configuring phy address and hence
* should be call only after board detection
*/
am33xx_cpsw_init();
-
}
static struct at24_platform_data am335x_daughter_board_eeprom_info = {