* [PATCH 1/6] board: ti: am64x: Recognize AM64-HSEVM
2023-07-04 18:10 [PATCH 0/6] ti: k3-am642: Add daughtercard support Roger Quadros
@ 2023-07-04 18:10 ` Roger Quadros
2023-07-05 8:01 ` Roger Quadros
2023-07-04 18:10 ` [PATCH 2/6] board: ti: am64x: Add HSE NAND card detection support Roger Quadros
` (4 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Roger Quadros @ 2023-07-04 18:10 UTC (permalink / raw)
To: vigneshr, trini; +Cc: nm, srk, u-boot, Roger Quadros
use "am64x_evm" board name in environment for both AM64-GPEVM and
AM64-HSEVM.
Gets rid of "Unidentified board claims AM64-HSEVM in eeprom header"
Signed-off-by: Roger Quadros <rogerq@kernel.org>
---
board/ti/am64x/evm.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c
index 96f4e3013a..42795cbd22 100644
--- a/board/ti/am64x/evm.c
+++ b/board/ti/am64x/evm.c
@@ -18,7 +18,8 @@
#include "../common/board_detect.h"
-#define board_is_am64x_gpevm() board_ti_k3_is("AM64-GPEVM")
+#define board_is_am64x_evm() (board_ti_k3_is("AM64-GPEVM") || \
+ board_ti_k3_is("AM64-HSEVM"))
#define board_is_am64x_skevm() (board_ti_k3_is("AM64-SKEVM") || \
board_ti_k3_is("AM64B-SKEVM"))
@@ -57,7 +58,7 @@ int board_fit_config_name_match(const char *name)
{
bool eeprom_read = board_ti_was_eeprom_read();
- if (!eeprom_read || board_is_am64x_gpevm()) {
+ if (!eeprom_read || board_is_am64x_evm()) {
if (!strcmp(name, "k3-am642-r5-evm") || !strcmp(name, "k3-am642-evm"))
return 0;
} else if (board_is_am64x_skevm()) {
@@ -182,13 +183,13 @@ int checkboard(void)
#ifdef CONFIG_BOARD_LATE_INIT
static void setup_board_eeprom_env(void)
{
- char *name = "am64x_gpevm";
+ char *name = "am64x_evm";
if (do_board_detect())
goto invalid_eeprom;
- if (board_is_am64x_gpevm())
- name = "am64x_gpevm";
+ if (board_is_am64x_evm())
+ name = "am64x_evm";
else if (board_is_am64x_skevm())
name = "am64x_skevm";
else
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 1/6] board: ti: am64x: Recognize AM64-HSEVM
2023-07-04 18:10 ` [PATCH 1/6] board: ti: am64x: Recognize AM64-HSEVM Roger Quadros
@ 2023-07-05 8:01 ` Roger Quadros
0 siblings, 0 replies; 12+ messages in thread
From: Roger Quadros @ 2023-07-05 8:01 UTC (permalink / raw)
To: vigneshr, trini; +Cc: nm, srk, u-boot
On 04/07/2023 21:10, Roger Quadros wrote:
> use "am64x_evm" board name in environment for both AM64-GPEVM and
> AM64-HSEVM.
>
> Gets rid of "Unidentified board claims AM64-HSEVM in eeprom header"
>
> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> ---
> board/ti/am64x/evm.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c
> index 96f4e3013a..42795cbd22 100644
> --- a/board/ti/am64x/evm.c
> +++ b/board/ti/am64x/evm.c
> @@ -18,7 +18,8 @@
>
> #include "../common/board_detect.h"
>
> -#define board_is_am64x_gpevm() board_ti_k3_is("AM64-GPEVM")
> +#define board_is_am64x_evm() (board_ti_k3_is("AM64-GPEVM") || \
> + board_ti_k3_is("AM64-HSEVM"))
>
> #define board_is_am64x_skevm() (board_ti_k3_is("AM64-SKEVM") || \
> board_ti_k3_is("AM64B-SKEVM"))
> @@ -57,7 +58,7 @@ int board_fit_config_name_match(const char *name)
> {
> bool eeprom_read = board_ti_was_eeprom_read();
>
> - if (!eeprom_read || board_is_am64x_gpevm()) {
> + if (!eeprom_read || board_is_am64x_evm()) {
> if (!strcmp(name, "k3-am642-r5-evm") || !strcmp(name, "k3-am642-evm"))
> return 0;
> } else if (board_is_am64x_skevm()) {
> @@ -182,13 +183,13 @@ int checkboard(void)
> #ifdef CONFIG_BOARD_LATE_INIT
> static void setup_board_eeprom_env(void)
> {
> - char *name = "am64x_gpevm";
> + char *name = "am64x_evm";
>
> if (do_board_detect())
> goto invalid_eeprom;
>
> - if (board_is_am64x_gpevm())
> - name = "am64x_gpevm";
> + if (board_is_am64x_evm())
> + name = "am64x_evm";
"board/ti/am64x/am64x.env: if test $board_name = am64x_gpevm; then"
So I think it was a bad idea to change the name here.
Will revert this change.
> else if (board_is_am64x_skevm())
> name = "am64x_skevm";
> else
--
cheers,
-roger
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/6] board: ti: am64x: Add HSE NAND card detection support
2023-07-04 18:10 [PATCH 0/6] ti: k3-am642: Add daughtercard support Roger Quadros
2023-07-04 18:10 ` [PATCH 1/6] board: ti: am64x: Recognize AM64-HSEVM Roger Quadros
@ 2023-07-04 18:10 ` Roger Quadros
2023-07-04 18:10 ` [PATCH 3/6] arm: dts: k3-am642: Sync main_i2c0 with kernel Roger Quadros
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Roger Quadros @ 2023-07-04 18:10 UTC (permalink / raw)
To: vigneshr, trini; +Cc: nm, srk, u-boot, Roger Quadros
Add expansion card detection support. Add NAND card detection
support.
am64-sk EVM doesn't support daughtercards so let's restrict
daughtercard probing to am64-evm.
Signed-off-by: Roger Quadros <rogerq@kernel.org>
---
board/ti/am64x/evm.c | 177 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 177 insertions(+)
diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c
index 42795cbd22..a7ddee9d64 100644
--- a/board/ti/am64x/evm.c
+++ b/board/ti/am64x/evm.c
@@ -11,8 +11,10 @@
#include <asm/io.h>
#include <dm/uclass.h>
#include <k3-ddrss.h>
+#include <net.h>
#include <spl.h>
#include <fdt_support.h>
+#include <asm/gpio.h>
#include <asm/arch/hardware.h>
#include <env.h>
@@ -24,6 +26,17 @@
#define board_is_am64x_skevm() (board_ti_k3_is("AM64-SKEVM") || \
board_ti_k3_is("AM64B-SKEVM"))
+#define AM64X_MAX_DAUGHTER_CARDS 8
+
+/* Daughter card presence detection signals */
+enum {
+ AM64X_EVM_HSE_BRD_DET,
+ AM64X_EVM_BRD_DET_COUNT,
+};
+
+/* Max number of MAC addresses that are parsed/processed per daughter card */
+#define DAUGHTER_CARD_NO_OF_MAC_ADDR 8
+
DECLARE_GLOBAL_DATA_PTR;
int board_init(void)
@@ -219,10 +232,170 @@ static void setup_serial(void)
snprintf(serial_string, sizeof(serial_string), "%016lx", board_serial);
env_set("serial#", serial_string);
}
+
#endif
#endif
#ifdef CONFIG_BOARD_LATE_INIT
+static const char *k3_dtbo_list[AM64X_MAX_DAUGHTER_CARDS] = {NULL};
+
+static int init_daughtercard_det_gpio(char *gpio_name, struct gpio_desc *desc)
+{
+ int ret;
+
+ memset(desc, 0, sizeof(*desc));
+
+ ret = dm_gpio_lookup_name(gpio_name, desc);
+ if (ret < 0) {
+ pr_err("Failed to lookup gpio %s: %d\n", gpio_name, ret);
+ return ret;
+ }
+
+ /* Request GPIO, simply re-using the name as label */
+ ret = dm_gpio_request(desc, gpio_name);
+ if (ret < 0) {
+ pr_err("Failed to request gpio %s: %d\n", gpio_name, ret);
+ return ret;
+ }
+
+ return dm_gpio_set_dir_flags(desc, GPIOD_IS_IN);
+}
+
+static int probe_daughtercards(void)
+{
+ struct ti_am6_eeprom ep;
+ struct gpio_desc board_det_gpios[AM64X_EVM_BRD_DET_COUNT];
+ char mac_addr[DAUGHTER_CARD_NO_OF_MAC_ADDR][TI_EEPROM_HDR_ETH_ALEN];
+ u8 mac_addr_cnt;
+ char name_overlays[1024] = { 0 };
+ int i, nb_dtbos = 0;
+ int ret;
+
+ /*
+ * Daughter card presence detection signal name to GPIO (via I2C I/O
+ * expander @ address 0x38) name and EEPROM I2C address mapping.
+ */
+ const struct {
+ char *gpio_name;
+ u8 i2c_addr;
+ } slot_map[AM64X_EVM_BRD_DET_COUNT] = {
+ { "gpio@38_0", 0x52, }, /* AM64X_EVM_HSE_BRD_DET */
+ };
+
+ /* Declaration of daughtercards to probe */
+ const struct {
+ u8 slot_index; /* Slot the card is installed */
+ char *card_name; /* EEPROM-programmed card name */
+ char *dtbo_name; /* Device tree overlay to apply */
+ u8 eth_offset; /* ethXaddr MAC address index offset */
+ } cards[] = {
+ {
+ AM64X_EVM_HSE_BRD_DET,
+ "TMDS64DC02EVM",
+ "k3-am642-evm-nand.dtbo",
+ 0,
+ },
+ };
+
+ /*
+ * Initialize GPIO used for daughtercard slot presence detection and
+ * keep the resulting handles in local array for easier access.
+ */
+ for (i = 0; i < AM64X_EVM_BRD_DET_COUNT; i++) {
+ ret = init_daughtercard_det_gpio(slot_map[i].gpio_name,
+ &board_det_gpios[i]);
+ if (ret < 0)
+ return ret;
+ }
+
+ memset(k3_dtbo_list, 0, sizeof(k3_dtbo_list));
+ for (i = 0; i < ARRAY_SIZE(cards); i++) {
+ /* Obtain card-specific slot index and associated I2C address */
+ u8 slot_index = cards[i].slot_index;
+ u8 i2c_addr = slot_map[slot_index].i2c_addr;
+ const char *dtboname;
+
+ /*
+ * The presence detection signal is active-low, hence skip
+ * over this card slot if anything other than 0 is returned.
+ */
+ ret = dm_gpio_get_value(&board_det_gpios[slot_index]);
+ if (ret < 0)
+ return ret;
+ else if (ret)
+ continue;
+
+ /* Get and parse the daughter card EEPROM record */
+ ret = ti_i2c_eeprom_am6_get(CONFIG_EEPROM_BUS_ADDRESS, i2c_addr,
+ &ep,
+ (char **)mac_addr,
+ DAUGHTER_CARD_NO_OF_MAC_ADDR,
+ &mac_addr_cnt);
+ if (ret) {
+ pr_err("Reading daughtercard EEPROM at 0x%02x failed %d\n",
+ i2c_addr, ret);
+ /*
+ * Even this is pretty serious let's just skip over
+ * this particular daughtercard, rather than ending
+ * the probing process altogether.
+ */
+ continue;
+ }
+
+ /* Only process the parsed data if we found a match */
+ if (strncmp(ep.name, cards[i].card_name, sizeof(ep.name)))
+ continue;
+
+ printf("Detected: %s rev %s\n", ep.name, ep.version);
+
+#ifndef CONFIG_SPL_BUILD
+ int j;
+ /*
+ * Populate any MAC addresses from daughtercard into the U-Boot
+ * environment, starting with a card-specific offset so we can
+ * have multiple cards contribute to the MAC pool in a well-
+ * defined manner.
+ */
+ for (j = 0; j < mac_addr_cnt; j++) {
+ if (!is_valid_ethaddr((u8 *)mac_addr[j]))
+ continue;
+
+ eth_env_set_enetaddr_by_index("eth",
+ cards[i].eth_offset + j,
+ (uchar *)mac_addr[j]);
+ }
+#endif
+
+ /* Skip if no overlays are to be added */
+ if (!strlen(cards[i].dtbo_name))
+ continue;
+
+ dtboname = cards[i].dtbo_name;
+ k3_dtbo_list[nb_dtbos++] = dtboname;
+
+ /*
+ * Make sure we are not running out of buffer space by checking
+ * if we can fit the new overlay, a trailing space to be used
+ * as a separator, plus the terminating zero.
+ */
+ if (strlen(name_overlays) + strlen(dtboname) + 2 >
+ sizeof(name_overlays))
+ return -ENOMEM;
+
+ /* Append to our list of overlays */
+ strcat(name_overlays, dtboname);
+ strcat(name_overlays, " ");
+ }
+
+#ifndef CONFIG_SPL_BUILD
+ /* Apply device tree overlay(s) to the U-Boot environment, if any */
+ if (strlen(name_overlays))
+ return env_set("name_overlays", name_overlays);
+#endif
+
+ return 0;
+}
+
int board_late_init(void)
{
if (IS_ENABLED(CONFIG_TI_I2C_BOARD_DETECT)) {
@@ -237,6 +410,10 @@ int board_late_init(void)
* an index of 1.
*/
board_ti_am6_set_ethaddr(1, ep->mac_addr_cnt);
+
+ /* Check for and probe any plugged-in daughtercards */
+ if (board_is_am64x_evm())
+ probe_daughtercards();
}
return 0;
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 3/6] arm: dts: k3-am642: Sync main_i2c0 with kernel
2023-07-04 18:10 [PATCH 0/6] ti: k3-am642: Add daughtercard support Roger Quadros
2023-07-04 18:10 ` [PATCH 1/6] board: ti: am64x: Recognize AM64-HSEVM Roger Quadros
2023-07-04 18:10 ` [PATCH 2/6] board: ti: am64x: Add HSE NAND card detection support Roger Quadros
@ 2023-07-04 18:10 ` Roger Quadros
2023-07-06 12:38 ` Nishanth Menon
2023-07-04 18:10 ` [PATCH 4/6] arm: dts: k3-am642-r5-evm: Add I2C0 and Card detect GPIOs Roger Quadros
` (2 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Roger Quadros @ 2023-07-04 18:10 UTC (permalink / raw)
To: vigneshr, trini; +Cc: nm, srk, u-boot, Roger Quadros
main_i2c0 and pinmux should be in k3-am642-evm.dts.
Also add the I2C EEPROM.
Signed-off-by: Roger Quadros <rogerq@kernel.org>
---
arch/arm/dts/k3-am642-evm-u-boot.dtsi | 11 -----------
arch/arm/dts/k3-am642-evm.dts | 20 ++++++++++++++++++++
2 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/arch/arm/dts/k3-am642-evm-u-boot.dtsi b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
index 64857b0909..80c04d0117 100644
--- a/arch/arm/dts/k3-am642-evm-u-boot.dtsi
+++ b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
@@ -34,21 +34,10 @@
&main_pmx0 {
bootph-pre-ram;
- main_i2c0_pins_default: main-i2c0-pins-default {
- bootph-pre-ram;
- pinctrl-single,pins = <
- AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
- AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
- >;
- };
};
&main_i2c0 {
- status = "okay";
bootph-pre-ram;
- pinctrl-names = "default";
- pinctrl-0 = <&main_i2c0_pins_default>;
- clock-frequency = <400000>;
};
&main_uart0 {
diff --git a/arch/arm/dts/k3-am642-evm.dts b/arch/arm/dts/k3-am642-evm.dts
index 39feea78a0..529eb81538 100644
--- a/arch/arm/dts/k3-am642-evm.dts
+++ b/arch/arm/dts/k3-am642-evm.dts
@@ -233,6 +233,13 @@
>;
};
+ main_i2c0_pins_default: main-i2c0-default-pins {
+ pinctrl-single,pins = <
+ AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
+ AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
+ >;
+ };
+
main_i2c1_pins_default: main-i2c1-pins-default {
pinctrl-single,pins = <
AM64X_IOPAD(0x0268, PIN_INPUT_PULLUP, 0) /* (C18) I2C1_SCL */
@@ -335,6 +342,19 @@
status = "reserved";
};
+&main_i2c0 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&main_i2c0_pins_default>;
+ clock-frequency = <400000>;
+
+ eeprom@50 {
+ /* AT24CM01 */
+ compatible = "atmel,24c1024";
+ reg = <0x50>;
+ };
+};
+
&main_i2c1 {
status = "okay";
pinctrl-names = "default";
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 3/6] arm: dts: k3-am642: Sync main_i2c0 with kernel
2023-07-04 18:10 ` [PATCH 3/6] arm: dts: k3-am642: Sync main_i2c0 with kernel Roger Quadros
@ 2023-07-06 12:38 ` Nishanth Menon
2023-07-06 14:13 ` Roger Quadros
0 siblings, 1 reply; 12+ messages in thread
From: Nishanth Menon @ 2023-07-06 12:38 UTC (permalink / raw)
To: Roger Quadros; +Cc: vigneshr, trini, srk, u-boot
On 21:10-20230704, Roger Quadros wrote:
> main_i2c0 and pinmux should be in k3-am642-evm.dts.
> Also add the I2C EEPROM.
>
> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> ---
> arch/arm/dts/k3-am642-evm-u-boot.dtsi | 11 -----------
> arch/arm/dts/k3-am642-evm.dts | 20 ++++++++++++++++++++
> 2 files changed, 20 insertions(+), 11 deletions(-)
>
> diff --git a/arch/arm/dts/k3-am642-evm-u-boot.dtsi b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
> index 64857b0909..80c04d0117 100644
> --- a/arch/arm/dts/k3-am642-evm-u-boot.dtsi
> +++ b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
> @@ -34,21 +34,10 @@
>
> &main_pmx0 {
> bootph-pre-ram;
> - main_i2c0_pins_default: main-i2c0-pins-default {
> - bootph-pre-ram;
> - pinctrl-single,pins = <
> - AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
> - AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
> - >;
> - };
> };
>
> &main_i2c0 {
> - status = "okay";
> bootph-pre-ram;
> - pinctrl-names = "default";
> - pinctrl-0 = <&main_i2c0_pins_default>;
> - clock-frequency = <400000>;
> };
>
> &main_uart0 {
> diff --git a/arch/arm/dts/k3-am642-evm.dts b/arch/arm/dts/k3-am642-evm.dts
> index 39feea78a0..529eb81538 100644
> --- a/arch/arm/dts/k3-am642-evm.dts
> +++ b/arch/arm/dts/k3-am642-evm.dts
> @@ -233,6 +233,13 @@
> >;
> };
>
> + main_i2c0_pins_default: main-i2c0-default-pins {
> + pinctrl-single,pins = <
> + AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
> + AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
> + >;
> + };
> +
> main_i2c1_pins_default: main-i2c1-pins-default {
> pinctrl-single,pins = <
> AM64X_IOPAD(0x0268, PIN_INPUT_PULLUP, 0) /* (C18) I2C1_SCL */
> @@ -335,6 +342,19 @@
> status = "reserved";
> };
>
> +&main_i2c0 {
> + status = "okay";
> + pinctrl-names = "default";
> + pinctrl-0 = <&main_i2c0_pins_default>;
> + clock-frequency = <400000>;
> +
> + eeprom@50 {
> + /* AT24CM01 */
> + compatible = "atmel,24c1024";
> + reg = <0x50>;
> + };
> +};
> +
> &main_i2c1 {
> status = "okay";
> pinctrl-names = "default";
> --
> 2.34.1
>
We should be getting this change again as part of sync back from kernel.
--
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH 3/6] arm: dts: k3-am642: Sync main_i2c0 with kernel
2023-07-06 12:38 ` Nishanth Menon
@ 2023-07-06 14:13 ` Roger Quadros
2023-07-06 14:25 ` Nishanth Menon
0 siblings, 1 reply; 12+ messages in thread
From: Roger Quadros @ 2023-07-06 14:13 UTC (permalink / raw)
To: Nishanth Menon; +Cc: vigneshr, trini, srk, u-boot
Hi Nishanth,
On 06/07/2023 15:38, Nishanth Menon wrote:
> On 21:10-20230704, Roger Quadros wrote:
>> main_i2c0 and pinmux should be in k3-am642-evm.dts.
>> Also add the I2C EEPROM.
>>
>> Signed-off-by: Roger Quadros <rogerq@kernel.org>
>> ---
>> arch/arm/dts/k3-am642-evm-u-boot.dtsi | 11 -----------
>> arch/arm/dts/k3-am642-evm.dts | 20 ++++++++++++++++++++
>> 2 files changed, 20 insertions(+), 11 deletions(-)
>>
>> diff --git a/arch/arm/dts/k3-am642-evm-u-boot.dtsi b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
>> index 64857b0909..80c04d0117 100644
>> --- a/arch/arm/dts/k3-am642-evm-u-boot.dtsi
>> +++ b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
>> @@ -34,21 +34,10 @@
>>
>> &main_pmx0 {
>> bootph-pre-ram;
>> - main_i2c0_pins_default: main-i2c0-pins-default {
>> - bootph-pre-ram;
>> - pinctrl-single,pins = <
>> - AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
>> - AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
>> - >;
>> - };
>> };
>>
>> &main_i2c0 {
>> - status = "okay";
>> bootph-pre-ram;
>> - pinctrl-names = "default";
>> - pinctrl-0 = <&main_i2c0_pins_default>;
>> - clock-frequency = <400000>;
>> };
>>
>> &main_uart0 {
>> diff --git a/arch/arm/dts/k3-am642-evm.dts b/arch/arm/dts/k3-am642-evm.dts
>> index 39feea78a0..529eb81538 100644
>> --- a/arch/arm/dts/k3-am642-evm.dts
>> +++ b/arch/arm/dts/k3-am642-evm.dts
>> @@ -233,6 +233,13 @@
>> >;
>> };
>>
>> + main_i2c0_pins_default: main-i2c0-default-pins {
>> + pinctrl-single,pins = <
>> + AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
>> + AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
>> + >;
>> + };
>> +
>> main_i2c1_pins_default: main-i2c1-pins-default {
>> pinctrl-single,pins = <
>> AM64X_IOPAD(0x0268, PIN_INPUT_PULLUP, 0) /* (C18) I2C1_SCL */
>> @@ -335,6 +342,19 @@
>> status = "reserved";
>> };
>>
>> +&main_i2c0 {
>> + status = "okay";
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&main_i2c0_pins_default>;
>> + clock-frequency = <400000>;
>> +
>> + eeprom@50 {
>> + /* AT24CM01 */
>> + compatible = "atmel,24c1024";
>> + reg = <0x50>;
>> + };
>> +};
>> +
>> &main_i2c1 {
>> status = "okay";
>> pinctrl-names = "default";
>> --
>> 2.34.1
>>
>
> We should be getting this change again as part of sync back from kernel.
>
>
Got it.
Adding the EEPROM node causes I2C timeout error prints like below.
Any clue why that would be the case?
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
EEPROM not available at 0x50, trying to read at 0x51
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Reading on-board EEPROM at 0x51 failed -121
--
cheers,
-roger
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH 3/6] arm: dts: k3-am642: Sync main_i2c0 with kernel
2023-07-06 14:13 ` Roger Quadros
@ 2023-07-06 14:25 ` Nishanth Menon
0 siblings, 0 replies; 12+ messages in thread
From: Nishanth Menon @ 2023-07-06 14:25 UTC (permalink / raw)
To: Roger Quadros; +Cc: vigneshr, trini, srk, u-boot
On 17:13-20230706, Roger Quadros wrote:
> Hi Nishanth,
>
> On 06/07/2023 15:38, Nishanth Menon wrote:
> > On 21:10-20230704, Roger Quadros wrote:
> >> main_i2c0 and pinmux should be in k3-am642-evm.dts.
> >> Also add the I2C EEPROM.
> >>
> >> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> >> ---
> >> arch/arm/dts/k3-am642-evm-u-boot.dtsi | 11 -----------
> >> arch/arm/dts/k3-am642-evm.dts | 20 ++++++++++++++++++++
> >> 2 files changed, 20 insertions(+), 11 deletions(-)
> >>
> >> diff --git a/arch/arm/dts/k3-am642-evm-u-boot.dtsi b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
> >> index 64857b0909..80c04d0117 100644
> >> --- a/arch/arm/dts/k3-am642-evm-u-boot.dtsi
> >> +++ b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
> >> @@ -34,21 +34,10 @@
> >>
> >> &main_pmx0 {
> >> bootph-pre-ram;
> >> - main_i2c0_pins_default: main-i2c0-pins-default {
> >> - bootph-pre-ram;
> >> - pinctrl-single,pins = <
> >> - AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
> >> - AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
> >> - >;
> >> - };
> >> };
> >>
> >> &main_i2c0 {
> >> - status = "okay";
> >> bootph-pre-ram;
> >> - pinctrl-names = "default";
> >> - pinctrl-0 = <&main_i2c0_pins_default>;
> >> - clock-frequency = <400000>;
> >> };
> >>
> >> &main_uart0 {
> >> diff --git a/arch/arm/dts/k3-am642-evm.dts b/arch/arm/dts/k3-am642-evm.dts
> >> index 39feea78a0..529eb81538 100644
> >> --- a/arch/arm/dts/k3-am642-evm.dts
> >> +++ b/arch/arm/dts/k3-am642-evm.dts
> >> @@ -233,6 +233,13 @@
> >> >;
> >> };
> >>
> >> + main_i2c0_pins_default: main-i2c0-default-pins {
> >> + pinctrl-single,pins = <
> >> + AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
> >> + AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
> >> + >;
> >> + };
> >> +
> >> main_i2c1_pins_default: main-i2c1-pins-default {
> >> pinctrl-single,pins = <
> >> AM64X_IOPAD(0x0268, PIN_INPUT_PULLUP, 0) /* (C18) I2C1_SCL */
> >> @@ -335,6 +342,19 @@
> >> status = "reserved";
> >> };
> >>
> >> +&main_i2c0 {
> >> + status = "okay";
> >> + pinctrl-names = "default";
> >> + pinctrl-0 = <&main_i2c0_pins_default>;
> >> + clock-frequency = <400000>;
> >> +
> >> + eeprom@50 {
> >> + /* AT24CM01 */
> >> + compatible = "atmel,24c1024";
> >> + reg = <0x50>;
> >> + };
> >> +};
> >> +
> >> &main_i2c1 {
> >> status = "okay";
> >> pinctrl-names = "default";
> >> --
> >> 2.34.1
> >>
> >
> > We should be getting this change again as part of sync back from kernel.
> >
> >
> Got it.
>
> Adding the EEPROM node causes I2C timeout error prints like below.
> Any clue why that would be the case?
>
> Timed out in wait_for_event: status=0000
> Check if pads/pull-ups of bus are properly configured
> EEPROM not available at 0x50, trying to read at 0x51
> Timed out in wait_for_event: status=0000
> Check if pads/pull-ups of bus are properly configured
> Reading on-board EEPROM at 0x51 failed -121
https://lore.kernel.org/all/20230414073328.381336-7-nm@ti.com/
https://gist.github.com/nmenon/6b09f55251225d3f3cce076c32a33bba#file-am64-evm-L658
Seems to work for me in kernel - u-boot we will need to debug a bit. it
has been a massive pain in the backend to deal with the mix of
mis-behaving eeproms so far (whack-a-mole).. :(
--
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 4/6] arm: dts: k3-am642-r5-evm: Add I2C0 and Card detect GPIOs
2023-07-04 18:10 [PATCH 0/6] ti: k3-am642: Add daughtercard support Roger Quadros
` (2 preceding siblings ...)
2023-07-04 18:10 ` [PATCH 3/6] arm: dts: k3-am642: Sync main_i2c0 with kernel Roger Quadros
@ 2023-07-04 18:10 ` Roger Quadros
2023-07-06 12:38 ` Nishanth Menon
2023-07-04 18:10 ` [PATCH 5/6] arm: dts: k3-am642: Add I2C GPIO Expander Roger Quadros
2023-07-04 18:10 ` [PATCH 6/6] configs: am64x_evm_a53_defconfig: Enable I2C GPIO drivers Roger Quadros
5 siblings, 1 reply; 12+ messages in thread
From: Roger Quadros @ 2023-07-04 18:10 UTC (permalink / raw)
To: vigneshr, trini; +Cc: nm, srk, u-boot, Roger Quadros
Card detect GPIOs are on I2C GPIO Expander on I2C0.
Enable I2C0 and GPIO Expander for r5-evm.
Signed-off-by: Roger Quadros <rogerq@kernel.org>
---
arch/arm/dts/k3-am642-r5-evm.dts | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/arch/arm/dts/k3-am642-r5-evm.dts b/arch/arm/dts/k3-am642-r5-evm.dts
index e870492a69..01b4a61852 100644
--- a/arch/arm/dts/k3-am642-r5-evm.dts
+++ b/arch/arm/dts/k3-am642-r5-evm.dts
@@ -209,6 +209,13 @@
AM64X_IOPAD(0x0144, PIN_OUTPUT, 4) /* (Y11) PRG1_PRU1_GPO15.RGMII2_TX_CTL */
>;
};
+
+ main_i2c0_pins_default: main-i2c0-default-pins {
+ pinctrl-single,pins = <
+ AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
+ AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
+ >;
+ };
};
&dmsc {
@@ -267,6 +274,18 @@
/* EEPROM might be read before SYSFW is available */
&main_i2c0 {
/delete-property/ power-domains;
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&main_i2c0_pins_default>;
+ clock-frequency = <400000>;
+
+ tca9554: gpio@38 {
+ /* TCA9554 */
+ compatible = "nxp,pca9554";
+ reg = <0x38>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ };
};
&usbss0 {
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 4/6] arm: dts: k3-am642-r5-evm: Add I2C0 and Card detect GPIOs
2023-07-04 18:10 ` [PATCH 4/6] arm: dts: k3-am642-r5-evm: Add I2C0 and Card detect GPIOs Roger Quadros
@ 2023-07-06 12:38 ` Nishanth Menon
0 siblings, 0 replies; 12+ messages in thread
From: Nishanth Menon @ 2023-07-06 12:38 UTC (permalink / raw)
To: Roger Quadros; +Cc: vigneshr, trini, srk, u-boot
On 21:10-20230704, Roger Quadros wrote:
> Card detect GPIOs are on I2C GPIO Expander on I2C0.
> Enable I2C0 and GPIO Expander for r5-evm.
>
> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> ---
> arch/arm/dts/k3-am642-r5-evm.dts | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/arch/arm/dts/k3-am642-r5-evm.dts b/arch/arm/dts/k3-am642-r5-evm.dts
> index e870492a69..01b4a61852 100644
> --- a/arch/arm/dts/k3-am642-r5-evm.dts
> +++ b/arch/arm/dts/k3-am642-r5-evm.dts
> @@ -209,6 +209,13 @@
> AM64X_IOPAD(0x0144, PIN_OUTPUT, 4) /* (Y11) PRG1_PRU1_GPO15.RGMII2_TX_CTL */
> >;
> };
> +
> + main_i2c0_pins_default: main-i2c0-default-pins {
> + pinctrl-single,pins = <
> + AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */
> + AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */
> + >;
> + };
> };
>
> &dmsc {
> @@ -267,6 +274,18 @@
> /* EEPROM might be read before SYSFW is available */
> &main_i2c0 {
> /delete-property/ power-domains;
> + status = "okay";
> + pinctrl-names = "default";
> + pinctrl-0 = <&main_i2c0_pins_default>;
> + clock-frequency = <400000>;
> +
> + tca9554: gpio@38 {
> + /* TCA9554 */
> + compatible = "nxp,pca9554";
> + reg = <0x38>;
> + gpio-controller;
> + #gpio-cells = <2>;
> + };
> };
>
> &usbss0 {
> --
> 2.34.1
>
NAK - Upstream kernel first please, we should get this change as part of
sync from kernel.
--
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 5/6] arm: dts: k3-am642: Add I2C GPIO Expander
2023-07-04 18:10 [PATCH 0/6] ti: k3-am642: Add daughtercard support Roger Quadros
` (3 preceding siblings ...)
2023-07-04 18:10 ` [PATCH 4/6] arm: dts: k3-am642-r5-evm: Add I2C0 and Card detect GPIOs Roger Quadros
@ 2023-07-04 18:10 ` Roger Quadros
2023-07-04 18:10 ` [PATCH 6/6] configs: am64x_evm_a53_defconfig: Enable I2C GPIO drivers Roger Quadros
5 siblings, 0 replies; 12+ messages in thread
From: Roger Quadros @ 2023-07-04 18:10 UTC (permalink / raw)
To: vigneshr, trini; +Cc: nm, srk, u-boot, Roger Quadros
The I2C GPIO expander at address 0x38 is used for card detect GPIOs.
Signed-off-by: Roger Quadros <rogerq@kernel.org>
---
arch/arm/dts/k3-am642-evm-u-boot.dtsi | 4 ++++
arch/arm/dts/k3-am642-evm.dts | 8 ++++++++
2 files changed, 12 insertions(+)
diff --git a/arch/arm/dts/k3-am642-evm-u-boot.dtsi b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
index 80c04d0117..f274d11697 100644
--- a/arch/arm/dts/k3-am642-evm-u-boot.dtsi
+++ b/arch/arm/dts/k3-am642-evm-u-boot.dtsi
@@ -40,6 +40,10 @@
bootph-pre-ram;
};
+&tca9554 {
+ bootph-pre-ram;
+};
+
&main_uart0 {
bootph-pre-ram;
};
diff --git a/arch/arm/dts/k3-am642-evm.dts b/arch/arm/dts/k3-am642-evm.dts
index 529eb81538..bc7e6f29b0 100644
--- a/arch/arm/dts/k3-am642-evm.dts
+++ b/arch/arm/dts/k3-am642-evm.dts
@@ -353,6 +353,14 @@
compatible = "atmel,24c1024";
reg = <0x50>;
};
+
+ tca9554: gpio@38 {
+ /* TCA9554 */
+ compatible = "nxp,pca9554";
+ reg = <0x38>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ };
};
&main_i2c1 {
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 6/6] configs: am64x_evm_a53_defconfig: Enable I2C GPIO drivers
2023-07-04 18:10 [PATCH 0/6] ti: k3-am642: Add daughtercard support Roger Quadros
` (4 preceding siblings ...)
2023-07-04 18:10 ` [PATCH 5/6] arm: dts: k3-am642: Add I2C GPIO Expander Roger Quadros
@ 2023-07-04 18:10 ` Roger Quadros
5 siblings, 0 replies; 12+ messages in thread
From: Roger Quadros @ 2023-07-04 18:10 UTC (permalink / raw)
To: vigneshr, trini; +Cc: nm, srk, u-boot, Roger Quadros
We need the I2C GPIO drivers to detect expansion cards.
Signed-off-by: Roger Quadros <rogerq@kernel.org>
---
configs/am64x_evm_a53_defconfig | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/configs/am64x_evm_a53_defconfig b/configs/am64x_evm_a53_defconfig
index 4589624e96..3a8d2ed3b6 100644
--- a/configs/am64x_evm_a53_defconfig
+++ b/configs/am64x_evm_a53_defconfig
@@ -105,7 +105,11 @@ CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000
CONFIG_DMA_CHANNELS=y
CONFIG_TI_K3_NAVSS_UDMA=y
CONFIG_TI_SCI_PROTOCOL=y
+CONFIG_DM_PCA953X=y
+CONFIG_SPL_DM_PCA953X=y
CONFIG_DM_I2C=y
+CONFIG_I2C_SET_DEFAULT_BUS_NUM=y
+CONFIG_DM_I2C_GPIO=y
CONFIG_SYS_I2C_OMAP24XX=y
CONFIG_DM_MAILBOX=y
CONFIG_K3_SEC_PROXY=y
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread