From cd07358c044247c01d14f08307026879e80efb8e Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Sat, 17 Feb 2018 00:35:23 +0100 Subject: ARM: rmobile: Reset ethernet PHY Toggle the PHY reset GPIO to bring the ethernet PHY out of reset properly. Signed-off-by: Marek Vasut Cc: Nobuhiro Iwamatsu --- NOTE: This should be moved to the SH ethernet driver, but it's quite late in the cycle, so this is something to be done in 2018.05. --- board/renesas/porter/porter.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'board') diff --git a/board/renesas/porter/porter.c b/board/renesas/porter/porter.c index bd0080d210..dfefd7fb71 100644 --- a/board/renesas/porter/porter.c +++ b/board/renesas/porter/porter.c @@ -65,11 +65,19 @@ int board_early_init_f(void) return 0; } +#define ETHERNET_PHY_RESET 176 /* GPIO 5 22 */ + int board_init(void) { /* adress of boot parameters */ gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + /* Force ethernet PHY out of reset */ + gpio_request(ETHERNET_PHY_RESET, "phy_reset"); + gpio_direction_output(ETHERNET_PHY_RESET, 0); + mdelay(10); + gpio_direction_output(ETHERNET_PHY_RESET, 1); + return 0; } -- cgit From 25f6dc8955bdf97bfb16ef19de7ce4abe76aaee4 Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Sat, 17 Feb 2018 02:16:48 +0100 Subject: ARM: rmobile: Fix broken reset code on Porter The 'reset' command did not work on Porter because the reset code was accessing the wrong PMIC address over broken I2C bus driver. Replace the code with DM-aware code and fix up the PMIC address. This makes the 'reset' command work again. Signed-off-by: Marek Vasut Cc: Nobuhiro Iwamatsu --- board/renesas/porter/porter.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'board') diff --git a/board/renesas/porter/porter.c b/board/renesas/porter/porter.c index dfefd7fb71..320841f27b 100644 --- a/board/renesas/porter/porter.c +++ b/board/renesas/porter/porter.c @@ -116,12 +116,25 @@ const struct rmobile_sysinfo sysinfo = { void reset_cpu(ulong addr) { - u8 val; + struct udevice *dev; + const u8 pmic_bus = 6; + const u8 pmic_addr = 0x5a; + u8 data; + int ret; - i2c_set_bus_num(2); /* PowerIC connected to ch2 */ - i2c_read(CONFIG_SYS_I2C_POWERIC_ADDR, 0x13, 1, &val, 1); - val |= 0x02; - i2c_write(CONFIG_SYS_I2C_POWERIC_ADDR, 0x13, 1, &val, 1); + ret = i2c_get_chip_for_busnum(pmic_bus, pmic_addr, 1, &dev); + if (ret) + hang(); + + ret = dm_i2c_read(dev, 0x13, &data, 1); + if (ret) + hang(); + + data |= BIT(1); + + ret = dm_i2c_write(dev, 0x13, &data, 1); + if (ret) + hang(); } #ifdef CONFIG_SPL_BUILD -- cgit