[PATCH 0/6] SBx81LIFKW/SBx81LIFXCAT disable KIRKWOOD_GPIO

This series makes changes to use the DM gpio APIs so that KIRKWOOD_GPIO can be disabled on these boards.
Chris Packham (6): ARM: kirkwood: SBx81LIFKW: remove direct access of GPIO registers ARM: kirkwood: SBx81LIFKW: update for DM_GPIO ARM: kirkwood: SBx81LIFKW: enable CMD_GPIO ARM: kirkwood: SBx81LIFKW: disable KIRKWOOD_GPIO ARM: kirkwood: SBx81LIFKW: enable CONFIG_NET_RANDOM_ETHADDR ARM: kirkwood: SBx81LIFXCAT: disable KIRKWOOD_GPIO
arch/arm/dts/kirkwood-atl-sbx81lifkw.dts | 14 ++++ board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c | 71 ++++++++------------- configs/SBx81LIFKW_defconfig | 5 +- configs/SBx81LIFXCAT_defconfig | 1 - 4 files changed, 45 insertions(+), 46 deletions(-)

Replace code that accessed the GPIO registers directly with code that makes use of the LED_GPIO driver.
Signed-off-by: Chris Packham judge.packham@gmail.com ---
arch/arm/dts/kirkwood-atl-sbx81lifkw.dts | 14 ++++++ board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c | 50 +++++---------------- configs/SBx81LIFKW_defconfig | 2 + 3 files changed, 27 insertions(+), 39 deletions(-)
diff --git a/arch/arm/dts/kirkwood-atl-sbx81lifkw.dts b/arch/arm/dts/kirkwood-atl-sbx81lifkw.dts index 4ae74f4316e5..3837c8f77fe2 100644 --- a/arch/arm/dts/kirkwood-atl-sbx81lifkw.dts +++ b/arch/arm/dts/kirkwood-atl-sbx81lifkw.dts @@ -70,6 +70,20 @@ }; }; }; + + gpio-leds { + compatible = "gpio-leds"; + + ledn { + label = "status:ledn"; + gpios = <&gpio0 10 GPIO_ACTIVE_HIGH>; + }; + + ledp { + label = "status:ledp"; + gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>; + }; + }; };
&spi0 { diff --git a/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c b/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c index d8b9fdfe356f..feb8b6b83f00 100644 --- a/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c +++ b/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c @@ -13,7 +13,7 @@ #include <linux/io.h> #include <miiphy.h> #include <netdev.h> -#include <status_led.h> +#include <led.h> #include <asm/arch/cpu.h> #include <asm/arch/soc.h> #include <asm/arch/mpp.h> @@ -41,41 +41,6 @@
DECLARE_GLOBAL_DATA_PTR;
-struct led { - u32 reg; - u32 value; - u32 mask; -}; - -struct led amber_solid = { - MVEBU_GPIO0_BASE, - BIT(10), - BIT(18) | BIT(10) -}; - -struct led green_solid = { - MVEBU_GPIO0_BASE, - BIT(18) | BIT(10), - BIT(18) | BIT(10) -}; - -struct led amber_flash = { - MVEBU_GPIO0_BASE, - 0, - BIT(18) | BIT(10) -}; - -struct led green_flash = { - MVEBU_GPIO0_BASE, - BIT(18), - BIT(18) | BIT(10) -}; - -static void status_led_set(struct led *led) -{ - clrsetbits_le32(led->reg, led->mask, led->value); -} - int board_early_init_f(void) { /* @@ -165,8 +130,6 @@ int board_init(void) /* address of boot parameters */ gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
- status_led_set(&amber_solid); - return 0; }
@@ -196,7 +159,16 @@ int mv88e61xx_hw_reset(struct phy_device *phydev) #ifdef CONFIG_MISC_INIT_R int misc_init_r(void) { - status_led_set(&green_flash); + struct udevice *dev; + int ret; + + ret = led_get_by_label("status:ledp", &dev); + if (!ret) + led_set_state(dev, LEDST_ON); + + ret = led_get_by_label("status:ledn", &dev); + if (!ret) + led_set_state(dev, LEDST_OFF);
return 0; } diff --git a/configs/SBx81LIFKW_defconfig b/configs/SBx81LIFKW_defconfig index f186f247eb63..90800e2dd3ee 100644 --- a/configs/SBx81LIFKW_defconfig +++ b/configs/SBx81LIFKW_defconfig @@ -46,6 +46,8 @@ CONFIG_DM_I2C=y CONFIG_SYS_I2C_MVTWSI=y CONFIG_I2C_MUX=y CONFIG_I2C_MUX_PCA954x=y +CONFIG_LED=y +CONFIG_LED_GPIO=y # CONFIG_MMC is not set CONFIG_MTD=y CONFIG_DM_SPI_FLASH=y

On 04.08.22 11:06, Chris Packham wrote:
Replace code that accessed the GPIO registers directly with code that makes use of the LED_GPIO driver.
Signed-off-by: Chris Packham judge.packham@gmail.com
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan
arch/arm/dts/kirkwood-atl-sbx81lifkw.dts | 14 ++++++ board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c | 50 +++++---------------- configs/SBx81LIFKW_defconfig | 2 + 3 files changed, 27 insertions(+), 39 deletions(-)
diff --git a/arch/arm/dts/kirkwood-atl-sbx81lifkw.dts b/arch/arm/dts/kirkwood-atl-sbx81lifkw.dts index 4ae74f4316e5..3837c8f77fe2 100644 --- a/arch/arm/dts/kirkwood-atl-sbx81lifkw.dts +++ b/arch/arm/dts/kirkwood-atl-sbx81lifkw.dts @@ -70,6 +70,20 @@ }; }; };
gpio-leds {
compatible = "gpio-leds";
ledn {
label = "status:ledn";
gpios = <&gpio0 10 GPIO_ACTIVE_HIGH>;
};
ledp {
label = "status:ledp";
gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>;
};
}; };
&spi0 {
diff --git a/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c b/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c index d8b9fdfe356f..feb8b6b83f00 100644 --- a/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c +++ b/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c @@ -13,7 +13,7 @@ #include <linux/io.h> #include <miiphy.h> #include <netdev.h> -#include <status_led.h> +#include <led.h> #include <asm/arch/cpu.h> #include <asm/arch/soc.h> #include <asm/arch/mpp.h> @@ -41,41 +41,6 @@
DECLARE_GLOBAL_DATA_PTR;
-struct led {
- u32 reg;
- u32 value;
- u32 mask;
-};
-struct led amber_solid = {
- MVEBU_GPIO0_BASE,
- BIT(10),
- BIT(18) | BIT(10)
-};
-struct led green_solid = {
- MVEBU_GPIO0_BASE,
- BIT(18) | BIT(10),
- BIT(18) | BIT(10)
-};
-struct led amber_flash = {
- MVEBU_GPIO0_BASE,
- 0,
- BIT(18) | BIT(10)
-};
-struct led green_flash = {
- MVEBU_GPIO0_BASE,
- BIT(18),
- BIT(18) | BIT(10)
-};
-static void status_led_set(struct led *led) -{
- clrsetbits_le32(led->reg, led->mask, led->value);
-}
- int board_early_init_f(void) { /*
@@ -165,8 +130,6 @@ int board_init(void) /* address of boot parameters */ gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
- status_led_set(&amber_solid);
- return 0; }
@@ -196,7 +159,16 @@ int mv88e61xx_hw_reset(struct phy_device *phydev) #ifdef CONFIG_MISC_INIT_R int misc_init_r(void) {
- status_led_set(&green_flash);
struct udevice *dev;
int ret;
ret = led_get_by_label("status:ledp", &dev);
if (!ret)
led_set_state(dev, LEDST_ON);
ret = led_get_by_label("status:ledn", &dev);
if (!ret)
led_set_state(dev, LEDST_OFF);
return 0; }
diff --git a/configs/SBx81LIFKW_defconfig b/configs/SBx81LIFKW_defconfig index f186f247eb63..90800e2dd3ee 100644 --- a/configs/SBx81LIFKW_defconfig +++ b/configs/SBx81LIFKW_defconfig @@ -46,6 +46,8 @@ CONFIG_DM_I2C=y CONFIG_SYS_I2C_MVTWSI=y CONFIG_I2C_MUX=y CONFIG_I2C_MUX_PCA954x=y +CONFIG_LED=y +CONFIG_LED_GPIO=y # CONFIG_MMC is not set CONFIG_MTD=y CONFIG_DM_SPI_FLASH=y
Viele Grüße, Stefan Roese

Update mv88e61xx_hw_reset() to use the DM_GPIO API to toggle the reset line for the linkstreet switch.
Signed-off-by: Chris Packham judge.packham@gmail.com ---
board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c b/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c index feb8b6b83f00..e0a7f3fa89f0 100644 --- a/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c +++ b/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c @@ -17,7 +17,8 @@ #include <asm/arch/cpu.h> #include <asm/arch/soc.h> #include <asm/arch/mpp.h> -#include <asm/arch/gpio.h> +#include <asm-generic/gpio.h> +#include <dm.h>
/* Note: GPIO differences between specific boards * @@ -37,8 +38,6 @@ #define SBX81LIFKW_OE_VAL_LOW (BIT(31) | BIT(30) | BIT(28) | BIT(27)) #define SBX81LIFKW_OE_VAL_HIGH (BIT(0) | BIT(1))
-#define MV88E6097_RESET 27 - DECLARE_GLOBAL_DATA_PTR;
int board_early_init_f(void) @@ -143,11 +142,23 @@ void reset_phy(void) #ifdef CONFIG_MV88E61XX_SWITCH int mv88e61xx_hw_reset(struct phy_device *phydev) { + struct gpio_desc desc; + int ret; + + ret = dm_gpio_lookup_name("mvebu0_27", &desc); + if (ret) + return ret; + + ret = dm_gpio_request(&desc, "linkstreet_rst"); + if (ret) + return ret; + /* Ensure the 88e6097 gets at least 10ms Reset */ - kw_gpio_set_value(MV88E6097_RESET, 0); + dm_gpio_set_dir_flags(&desc, GPIOD_IS_OUT); + dm_gpio_set_value(&desc, 0); mdelay(20); - kw_gpio_set_value(MV88E6097_RESET, 1); + dm_gpio_set_value(&desc, 1); mdelay(20);
phydev->advertising = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full;

On 04.08.22 11:06, Chris Packham wrote:
Update mv88e61xx_hw_reset() to use the DM_GPIO API to toggle the reset line for the linkstreet switch.
Signed-off-by: Chris Packham judge.packham@gmail.com
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan
board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c b/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c index feb8b6b83f00..e0a7f3fa89f0 100644 --- a/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c +++ b/board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c @@ -17,7 +17,8 @@ #include <asm/arch/cpu.h> #include <asm/arch/soc.h> #include <asm/arch/mpp.h> -#include <asm/arch/gpio.h> +#include <asm-generic/gpio.h> +#include <dm.h>
/* Note: GPIO differences between specific boards
@@ -37,8 +38,6 @@ #define SBX81LIFKW_OE_VAL_LOW (BIT(31) | BIT(30) | BIT(28) | BIT(27)) #define SBX81LIFKW_OE_VAL_HIGH (BIT(0) | BIT(1))
-#define MV88E6097_RESET 27
DECLARE_GLOBAL_DATA_PTR;
int board_early_init_f(void)
@@ -143,11 +142,23 @@ void reset_phy(void) #ifdef CONFIG_MV88E61XX_SWITCH int mv88e61xx_hw_reset(struct phy_device *phydev) {
- struct gpio_desc desc;
- int ret;
- ret = dm_gpio_lookup_name("mvebu0_27", &desc);
- if (ret)
return ret;
- ret = dm_gpio_request(&desc, "linkstreet_rst");
- if (ret)
return ret;
- /* Ensure the 88e6097 gets at least 10ms Reset */
- kw_gpio_set_value(MV88E6097_RESET, 0);
- dm_gpio_set_dir_flags(&desc, GPIOD_IS_OUT);
- dm_gpio_set_value(&desc, 0); mdelay(20);
- kw_gpio_set_value(MV88E6097_RESET, 1);
dm_gpio_set_value(&desc, 1); mdelay(20);
phydev->advertising = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full;
Viele Grüße, Stefan Roese

For debugging it is convenient to query/access GPIOs from the command line.
Signed-off-by: Chris Packham judge.packham@gmail.com ---
configs/SBx81LIFKW_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/SBx81LIFKW_defconfig b/configs/SBx81LIFKW_defconfig index 90800e2dd3ee..ad7e2e976d2a 100644 --- a/configs/SBx81LIFKW_defconfig +++ b/configs/SBx81LIFKW_defconfig @@ -26,6 +26,7 @@ CONFIG_SYS_CBSIZE=256 CONFIG_SYS_PBSIZE=276 CONFIG_CMD_DM=y # CONFIG_CMD_FLASH is not set +CONFIG_CMD_GPIO=y CONFIG_CMD_I2C=y CONFIG_CMD_DHCP=y CONFIG_BOOTP_NTPSERVER=y

On 04.08.22 11:06, Chris Packham wrote:
For debugging it is convenient to query/access GPIOs from the command line.
Signed-off-by: Chris Packham judge.packham@gmail.com
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan
configs/SBx81LIFKW_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/SBx81LIFKW_defconfig b/configs/SBx81LIFKW_defconfig index 90800e2dd3ee..ad7e2e976d2a 100644 --- a/configs/SBx81LIFKW_defconfig +++ b/configs/SBx81LIFKW_defconfig @@ -26,6 +26,7 @@ CONFIG_SYS_CBSIZE=256 CONFIG_SYS_PBSIZE=276 CONFIG_CMD_DM=y # CONFIG_CMD_FLASH is not set +CONFIG_CMD_GPIO=y CONFIG_CMD_I2C=y CONFIG_CMD_DHCP=y CONFIG_BOOTP_NTPSERVER=y
Viele Grüße, Stefan Roese

DM_GPIO was already enabled so the MVEBU_GPIO was already available. Having updated the board code to use the DM_GPIO APIs the KIRKWOOD_GPIO driver became unnecessary. Disable it for SBx81LIFKW.
Signed-off-by: Chris Packham judge.packham@gmail.com ---
configs/SBx81LIFKW_defconfig | 1 - 1 file changed, 1 deletion(-)
diff --git a/configs/SBx81LIFKW_defconfig b/configs/SBx81LIFKW_defconfig index ad7e2e976d2a..ec940bd30891 100644 --- a/configs/SBx81LIFKW_defconfig +++ b/configs/SBx81LIFKW_defconfig @@ -41,7 +41,6 @@ CONFIG_ENV_SPI_MAX_HZ=20000000 CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_NETCONSOLE=y CONFIG_DM=y -CONFIG_KIRKWOOD_GPIO=y CONFIG_DM_PCA953X=y CONFIG_DM_I2C=y CONFIG_SYS_I2C_MVTWSI=y

On 04.08.22 11:06, Chris Packham wrote:
DM_GPIO was already enabled so the MVEBU_GPIO was already available. Having updated the board code to use the DM_GPIO APIs the KIRKWOOD_GPIO driver became unnecessary. Disable it for SBx81LIFKW.
Signed-off-by: Chris Packham judge.packham@gmail.com
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan
configs/SBx81LIFKW_defconfig | 1 - 1 file changed, 1 deletion(-)
diff --git a/configs/SBx81LIFKW_defconfig b/configs/SBx81LIFKW_defconfig index ad7e2e976d2a..ec940bd30891 100644 --- a/configs/SBx81LIFKW_defconfig +++ b/configs/SBx81LIFKW_defconfig @@ -41,7 +41,6 @@ CONFIG_ENV_SPI_MAX_HZ=20000000 CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_NETCONSOLE=y CONFIG_DM=y -CONFIG_KIRKWOOD_GPIO=y CONFIG_DM_PCA953X=y CONFIG_DM_I2C=y CONFIG_SYS_I2C_MVTWSI=y
Viele Grüße, Stefan Roese

When booting a fresh board having a random Ethernet address enables using the network device to program the board.
Signed-off-by: Chris Packham judge.packham@gmail.com ---
configs/SBx81LIFKW_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/SBx81LIFKW_defconfig b/configs/SBx81LIFKW_defconfig index ec940bd30891..a9f984239af9 100644 --- a/configs/SBx81LIFKW_defconfig +++ b/configs/SBx81LIFKW_defconfig @@ -39,6 +39,7 @@ CONFIG_ENV_OVERWRITE=y CONFIG_ENV_IS_IN_SPI_FLASH=y CONFIG_ENV_SPI_MAX_HZ=20000000 CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_NET_RANDOM_ETHADDR=y CONFIG_NETCONSOLE=y CONFIG_DM=y CONFIG_DM_PCA953X=y

On 04.08.22 11:06, Chris Packham wrote:
When booting a fresh board having a random Ethernet address enables using the network device to program the board.
Signed-off-by: Chris Packham judge.packham@gmail.com
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan
configs/SBx81LIFKW_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/SBx81LIFKW_defconfig b/configs/SBx81LIFKW_defconfig index ec940bd30891..a9f984239af9 100644 --- a/configs/SBx81LIFKW_defconfig +++ b/configs/SBx81LIFKW_defconfig @@ -39,6 +39,7 @@ CONFIG_ENV_OVERWRITE=y CONFIG_ENV_IS_IN_SPI_FLASH=y CONFIG_ENV_SPI_MAX_HZ=20000000 CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_NET_RANDOM_ETHADDR=y CONFIG_NETCONSOLE=y CONFIG_DM=y CONFIG_DM_PCA953X=y
Viele Grüße, Stefan Roese

DM_GPIO was already enabled so the MVEBU_GPIO was already available. Disable KIRKWOOD_GPIO as it was unnecessary.
Signed-off-by: Chris Packham judge.packham@gmail.com ---
configs/SBx81LIFXCAT_defconfig | 1 - 1 file changed, 1 deletion(-)
diff --git a/configs/SBx81LIFXCAT_defconfig b/configs/SBx81LIFXCAT_defconfig index 9d579091a82f..cb80b7876f38 100644 --- a/configs/SBx81LIFXCAT_defconfig +++ b/configs/SBx81LIFXCAT_defconfig @@ -42,7 +42,6 @@ CONFIG_ENV_SPI_MAX_HZ=20000000 CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_NETCONSOLE=y CONFIG_DM=y -CONFIG_KIRKWOOD_GPIO=y CONFIG_DM_PCA953X=y CONFIG_DM_I2C=y CONFIG_SYS_I2C_MVTWSI=y

On 04.08.22 11:06, Chris Packham wrote:
DM_GPIO was already enabled so the MVEBU_GPIO was already available. Disable KIRKWOOD_GPIO as it was unnecessary.
Signed-off-by: Chris Packham judge.packham@gmail.com
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan
configs/SBx81LIFXCAT_defconfig | 1 - 1 file changed, 1 deletion(-)
diff --git a/configs/SBx81LIFXCAT_defconfig b/configs/SBx81LIFXCAT_defconfig index 9d579091a82f..cb80b7876f38 100644 --- a/configs/SBx81LIFXCAT_defconfig +++ b/configs/SBx81LIFXCAT_defconfig @@ -42,7 +42,6 @@ CONFIG_ENV_SPI_MAX_HZ=20000000 CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_NETCONSOLE=y CONFIG_DM=y -CONFIG_KIRKWOOD_GPIO=y CONFIG_DM_PCA953X=y CONFIG_DM_I2C=y CONFIG_SYS_I2C_MVTWSI=y
Viele Grüße, Stefan Roese

On 04.08.22 11:06, Chris Packham wrote:
This series makes changes to use the DM gpio APIs so that KIRKWOOD_GPIO can be disabled on these boards.
Chris Packham (6): ARM: kirkwood: SBx81LIFKW: remove direct access of GPIO registers ARM: kirkwood: SBx81LIFKW: update for DM_GPIO ARM: kirkwood: SBx81LIFKW: enable CMD_GPIO ARM: kirkwood: SBx81LIFKW: disable KIRKWOOD_GPIO ARM: kirkwood: SBx81LIFKW: enable CONFIG_NET_RANDOM_ETHADDR ARM: kirkwood: SBx81LIFXCAT: disable KIRKWOOD_GPIO
arch/arm/dts/kirkwood-atl-sbx81lifkw.dts | 14 ++++ board/alliedtelesis/SBx81LIFKW/sbx81lifkw.c | 71 ++++++++------------- configs/SBx81LIFKW_defconfig | 5 +- configs/SBx81LIFXCAT_defconfig | 1 - 4 files changed, 45 insertions(+), 46 deletions(-)
Applied to u-boot-marvell/master
Thanks, Stefan
participants (2)
-
Chris Packham
-
Stefan Roese