Merge changes from topic "LEDs"
* changes:
clearfog: Update U-Boot
clearfog: blink the white LED slower once we've settled on a slot
clearfog: fast-blink the white LED early on
clearfog: setup LEDs for SFP and LINE/EXPRESS indication
diff --git a/board/czechlight/clearfog/boot.scr.txt b/board/czechlight/clearfog/boot.scr.txt
index efca0b6..5a12f39 100644
--- a/board/czechlight/clearfog/boot.scr.txt
+++ b/board/czechlight/clearfog/boot.scr.txt
@@ -1,3 +1,12 @@
+# status LED blinking: white, 50% duty cycle, rather fast, but not the fastet blinking
+i2c dev 1
+i2c mw 0x60 0x16 0x00
+i2c mw 0x60 0x12 0x80
+i2c mw 0x60 0x13 0x06
+i2c mw 0x60 0x16 0x3f
+i2c mw 0x60 0x0a 0x80
+i2c mw 0x60 0x0b 0x80
+i2c mw 0x60 0x0c 0x80
setenv bootargs root=/dev/mmcblk0p${rauc_part} rauc.slot=${rauc_slot} czechlight=${czechlight} systemd.machine_id=${machineid} panic=10 oops=panic
setenv bootargs ${bootargs} spidev.bufsiz=65535
if test -n ${czechlight} && load mmc 0:${rauc_part} ${fdt_addr_r} /boot/${czechlight}-clearfog.dtb; then
diff --git a/board/czechlight/clearfog/patches/u-boot/boot.patch b/board/czechlight/clearfog/patches/u-boot/boot.patch
index 104e986..fe3182b 100644
--- a/board/czechlight/clearfog/patches/u-boot/boot.patch
+++ b/board/czechlight/clearfog/patches/u-boot/boot.patch
@@ -1,99 +1,5 @@
-diff --git a/arch/arm/dts/armada-388-clearfog.dts b/arch/arm/dts/armada-388-clearfog.dts
-index bc52bc0167..177cb4cd25 100644
---- a/arch/arm/dts/armada-388-clearfog.dts
-+++ b/arch/arm/dts/armada-388-clearfog.dts
-@@ -90,13 +90,10 @@
- internal-regs {
- ethernet@30000 {
- mac-address = [00 50 43 02 02 02];
-+ managed = "in-band-status";
-+ phy = <&phy1>;
- phy-mode = "sgmii";
- status = "okay";
--
-- fixed-link {
-- speed = <1000>;
-- full-duplex;
-- };
- };
-
- ethernet@34000 {
-@@ -228,6 +225,10 @@
- pinctrl-0 = <&mdio_pins>;
- pinctrl-names = "default";
-
-+ phy1: ethernet-phy@1 { /* Marvell 88E1512 */
-+ reg = <1>;
-+ };
-+
- phy_dedicated: ethernet-phy@0 {
- /*
- * Annoyingly, the marvell phy driver
-@@ -384,62 +385,6 @@
- tx-fault-gpio = <&expander0 13 GPIO_ACTIVE_HIGH>;
- };
-
-- dsa@0 {
-- compatible = "marvell,dsa";
-- dsa,ethernet = <ð1>;
-- dsa,mii-bus = <&mdio>;
-- pinctrl-0 = <&clearfog_dsa0_clk_pins &clearfog_dsa0_pins>;
-- pinctrl-names = "default";
-- #address-cells = <2>;
-- #size-cells = <0>;
--
-- switch@0 {
-- #address-cells = <1>;
-- #size-cells = <0>;
-- reg = <4 0>;
--
-- port@0 {
-- reg = <0>;
-- label = "lan1";
-- };
--
-- port@1 {
-- reg = <1>;
-- label = "lan2";
-- };
--
-- port@2 {
-- reg = <2>;
-- label = "lan3";
-- };
--
-- port@3 {
-- reg = <3>;
-- label = "lan4";
-- };
--
-- port@4 {
-- reg = <4>;
-- label = "lan5";
-- };
--
-- port@5 {
-- reg = <5>;
-- label = "cpu";
-- };
--
-- port@6 {
-- /* 88E1512 external phy */
-- reg = <6>;
-- label = "lan6";
-- fixed-link {
-- speed = <1000>;
-- full-duplex;
-- };
-- };
-- };
-- };
--
- gpio-keys {
- compatible = "gpio-keys";
- pinctrl-0 = <&rear_button_pins>;
diff --git a/board/solidrun/clearfog/clearfog.c b/board/solidrun/clearfog/clearfog.c
-index ede303d4eb..e5abda6f76 100644
+index 4e1386c8a2..be54ae0b78 100644
--- a/board/solidrun/clearfog/clearfog.c
+++ b/board/solidrun/clearfog/clearfog.c
@@ -10,10 +10,15 @@
@@ -112,7 +18,7 @@
DECLARE_GLOBAL_DATA_PTR;
#define ETH_PHY_CTRL_REG 0
-@@ -124,6 +129,10 @@ int board_early_init_f(void)
+@@ -108,11 +113,95 @@ int board_early_init_f(void)
return 0;
}
@@ -120,10 +26,76 @@
+static struct udevice *watchdog_dev = NULL;
+#endif
+
++#define TLC59XXX_REG_MODE1 0x00
++#define TLC59XXX_REG_MODE2 0x01
++#define TLC59XXX_REG_PWM(LED) (LED + 0x02)
++#define TLC59XXX_REG_GRPPWM 0x12
++#define TLC59XXX_REG_GRPFREQ 0x13
++#define TLC59XXX_REG_LEDOUT0 0x14
++#define TLC59XXX_REG_LEDOUT1 0x15
++#define TLC59XXX_REG_LEDOUT2 0x16
++#define TLC59XXX_REG_LEDOUT3 0x17
++#define TLC59XXX_CHIP_RESET_ADDR 0x6b
++#define TLC59XXX_RESET_BYTE_0 0xa5
++#define TLC59XXX_RESET_BYTE_1 0x5a
++#define CLA_LED_CHIP_ADDR 0x60
++#define CLA_LED_STATUS_RED 8
++#define CLA_LED_STATUS_GREEN 9
++#define CLA_LED_STATUS_BLUE 10
++
++struct cla_led_config {
++ u8 reg;
++ u8 val;
++};
++
++static struct cla_led_config led_reset_config[] = {
++ { TLC59XXX_RESET_BYTE_0, TLC59XXX_RESET_BYTE_1 },
++};
++
++static struct cla_led_config led_config[] = {
++ { TLC59XXX_REG_MODE1, 0x01 }, /* enable oscillator */
++ { TLC59XXX_REG_MODE2, 0x20 }, /* DMBLINK */
++ { TLC59XXX_REG_GRPPWM, 0x40 }, /* 25% duty cycle */
++ { TLC59XXX_REG_GRPFREQ, 0x03 }, /* very fast blinking */
++ { TLC59XXX_REG_PWM(CLA_LED_STATUS_RED), 0x80 }, /* 50% brightness */
++ { TLC59XXX_REG_PWM(CLA_LED_STATUS_GREEN), 0x80 }, /* 50% brightness */
++ { TLC59XXX_REG_PWM(CLA_LED_STATUS_BLUE), 0x80 }, /* 50% brightness */
++ { TLC59XXX_REG_LEDOUT2, 0x3f }, /* LEDs #8, 9, 10: mode 0b11 -> group blinking */
++};
++
++int cla_setup_leds(void)
++{
++ struct udevice *bus, *dev;
++
++ if (uclass_get_device_by_seq(UCLASS_I2C, 1, &bus)) {
++ puts("Cannot find I2C bus for LEDs\n");
++ return 1;
++ }
++
++ if (i2c_get_chip(bus, TLC59XXX_CHIP_RESET_ADDR, 1, &dev)) {
++ puts("Cannot request I2C chip for SWRST\n");
++ return 1;
++ }
++ if (dm_i2c_write(dev, led_reset_config[0].reg, &led_reset_config[0].val, 1)) {
++ puts("LED reset failed\n");
++ return 1;
++ }
++
++ if (i2c_get_chip(bus, CLA_LED_CHIP_ADDR, 1, &dev)) {
++ puts("Cannot request I2C chip for LEDs\n");
++ return 1;
++ }
++ for (int i = 0; i < ARRAY_SIZE(led_config); i++) {
++ if (dm_i2c_write(dev, led_config[i].reg, &led_config[i].val, 1)) {
++ printf("LED config operation #%d failed\n", i);
++ return 1;
++ }
++ }
++ return 0;
++}
++
int board_init(void)
{
- int i;
-@@ -131,6 +140,18 @@ int board_init(void)
/* Address of boot parameters */
gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
@@ -142,7 +114,12 @@
/* Toggle GPIO41 to reset onboard switch and phy */
clrbits_le32(MVEBU_GPIO1_BASE + 0x0, BIT(9));
clrbits_le32(MVEBU_GPIO1_BASE + 0x4, BIT(9));
-@@ -149,6 +170,28 @@ int board_init(void)
+@@ -124,9 +213,33 @@ int board_init(void)
+ setbits_le32(MVEBU_GPIO0_BASE + 0x0, BIT(19));
+ mdelay(10);
+
++ cla_setup_leds();
++
return 0;
}
@@ -172,36 +149,35 @@
{
puts("Board: SolidRun ClearFog\n");
diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig
-index 5e1733e11b..4af2d1e902 100644
+index 53dbd9fb81..784f56c76e 100644
--- a/configs/clearfog_defconfig
+++ b/configs/clearfog_defconfig
-@@ -53,3 +53,5 @@ CONFIG_USB=y
+@@ -63,3 +63,5 @@ CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_STORAGE=y
+CONFIG_WDT=y
+CONFIG_WDT_ORION=y
diff --git a/include/configs/clearfog.h b/include/configs/clearfog.h
-index f57f9b21ab..870bac78f4 100644
+index 7d56dfd86e..e92b07871d 100644
--- a/include/configs/clearfog.h
+++ b/include/configs/clearfog.h
-@@ -25,9 +25,15 @@
- #define CONFIG_SYS_I2C
- #define CONFIG_SYS_I2C_MVTWSI
- #define CONFIG_I2C_MVTWSI_BASE0 MVEBU_TWSI_BASE
-+#define CONFIG_I2C_MVTWSI_BASE1 MVEBU_TWSI1_BASE
- #define CONFIG_SYS_I2C_SLAVE 0x0
- #define CONFIG_SYS_I2C_SPEED 100000
+@@ -21,6 +21,14 @@
+ * Commands configuration
+ */
+/* Watchdog */
+#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT_ORION)
+# define CONFIG_WATCHDOG
+#endif
+
++/* CzechLight: we have a 128kB EEPROM */
++#define CONFIG_SYS_EEPROM_SIZE (128 * 1024)
++
/* SPI NOR flash default params, used by sf commands */
#define CONFIG_SF_DEFAULT_BUS 1
-@@ -54,6 +60,9 @@
+@@ -47,6 +55,9 @@
#define CONFIG_ENV_OFFSET 0xf0000
#define CONFIG_ENV_ADDR CONFIG_ENV_OFFSET
@@ -211,7 +187,7 @@
#define PHY_ANEG_TIMEOUT 8000 /* PHY needs a longer aneg time */
/* PCIe support */
-@@ -149,14 +158,45 @@
+@@ -139,14 +150,45 @@
"scriptaddr=" SCRIPT_ADDR_R "\0" \
"pxefile_addr_r=" PXEFILE_ADDR_R "\0"
diff --git a/configs/czechlight_clearfog_defconfig b/configs/czechlight_clearfog_defconfig
index 7dfe952..50150a8 100644
--- a/configs/czechlight_clearfog_defconfig
+++ b/configs/czechlight_clearfog_defconfig
@@ -57,7 +57,7 @@
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_GIT=y
BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://gerrit.cesnet.cz/github/trini/u-boot"
-BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="233719cc40"
+BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="4aee624c92"
BR2_TARGET_UBOOT_PATCH="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/patches/u-boot/boot.patch"
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="clearfog"
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/uboot.fragment"
@@ -75,7 +75,8 @@
CZECHLIGHT_CFG_FS_SIZE="256M"
CZECHLIGHT_CFG_FS_PERSIST_SYSREPO=y
CZECHLIGHT_CFG_FS_PERSIST_KEYS=y
-BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS_BOOT=y
+BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS=y
+CZECHLIGHT_CLEARFOG_LEDS_BOOT=y
CZECHLIGHT_RAUC_ROOTFS=y
CZECHLIGHT_RAUC_COMPATIBLE="czechlight-clearfog"
CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV="/dev/mmcblk0p1"
diff --git a/package/Config.in b/package/Config.in
index cc97cbe..88752cc 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1,6 +1,6 @@
source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/cla-sysrepo/Config.in"
source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-cfg-fs/Config.in"
-source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-clearfog-leds-boot/Config.in"
+source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-clearfog-leds/Config.in"
source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-rauc/Config.in"
source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-separate-boot/Config.in"
source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/grub2-tools/Config.in"
diff --git a/package/czechlight-clearfog-leds-boot/Config.in b/package/czechlight-clearfog-leds-boot/Config.in
deleted file mode 100644
index 88e47ff..0000000
--- a/package/czechlight-clearfog-leds-boot/Config.in
+++ /dev/null
@@ -1,4 +0,0 @@
-config BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS_BOOT
- bool "Indicate a successful boot via LEDs"
- depends on CZECHLIGHT_RAUC_ROOTFS
- depends on BR2_INIT_SYSTEMD
diff --git a/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds-boot.mk b/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds-boot.mk
deleted file mode 100644
index 8d0896a..0000000
--- a/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds-boot.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-define CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS
- mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
- $(INSTALL) -D -m 0644 \
- $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds.service \
- $(TARGET_DIR)/usr/lib/systemd/system/
- ln -sf ../czechlight-clearfog-leds.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-endef
-
-$(eval $(generic-package))
diff --git a/package/czechlight-clearfog-leds/Config.in b/package/czechlight-clearfog-leds/Config.in
new file mode 100644
index 0000000..5072348
--- /dev/null
+++ b/package/czechlight-clearfog-leds/Config.in
@@ -0,0 +1,14 @@
+config BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS
+ bool "LED functions for Clearfog-based CzechLight devices"
+ depends on BR2_INIT_SYSTEMD
+ help
+ Userspace configuration of LEDs for indicating various states.
+
+if BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS
+
+config CZECHLIGHT_CLEARFOG_LEDS_BOOT
+ bool "Indicate a successful boot via LEDs"
+ depends on CZECHLIGHT_RAUC_ROOTFS
+ default Y
+
+endif # BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS
diff --git a/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds.service b/package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service
similarity index 100%
rename from package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds.service
rename to package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service
diff --git a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
new file mode 100644
index 0000000..8af2f9b
--- /dev/null
+++ b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
@@ -0,0 +1,19 @@
+ifdef CZECHLIGHT_CLEARFOG_LEDS_BOOT
+define CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS
+ $(INSTALL) -D -m 0644 \
+ $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service \
+ $(TARGET_DIR)/usr/lib/systemd/system/
+ ln -sf ../czechlight-clearfog-leds-boot.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+endef
+endif
+
+define CZECHLIGHT_CLEARFOG_LEDS_INSTALL_TARGET_CMDS
+ mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+ $(INSTALL) -D -m 0644 \
+ $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service \
+ $(TARGET_DIR)/usr/lib/systemd/system/
+ ln -sf ../czechlight-clearfog-leds.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+ $(CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS)
+endef
+
+$(eval $(generic-package))
diff --git a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service
new file mode 100644
index 0000000..72f0202
--- /dev/null
+++ b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Indication of component state via LEDs on Clearfog
+
+[Service]
+Type=oneshot
+# SFP: green lit for "link"
+# SFP: green blinking for activity
+ExecStart=/bin/sh -c 'echo netdev > /sys/class/leds/sfp:green/trigger'
+ExecStart=/bin/sh -c 'echo eth2 > /sys/class/leds/sfp:green/device_name'
+ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/link'
+ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/rx'
+ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/tx'
+# LINE/EXPRESS: green for "we're getting some signal"
+ExecStart=/bin/sh -c 'echo gpio > /sys/class/leds/line:green/trigger'
+ExecStart=/bin/sh -c "sed -En 's/.*gpio-(.*) \\(EDFA1_ST1_IN_LOS_A .*/\\1/p' /sys/kernel/debug/gpio > /sys/class/leds/line:green/gpio"