From f10220d4286d3517ea090f92b728997f1caa68cc Mon Sep 17 00:00:00 2001 From: Pavan-Nokia <120486223+Pavan-Nokia@users.noreply.github.com> Date: Fri, 8 Mar 2024 11:53:46 -0500 Subject: [PATCH] [Nokia-7215-A1][arm64]Update platform init files (#18266) Why I did it Update Nokia-7215-A1 platform to address UT and OC test failures. Update platform init and build files Microsoft ADO: 27111894 How I did it Identify failed test cases from OC run on arm64-nokia_ixs7215_52xb-r0 (Nokia-7215-A1) platform and fix bugs How to verify it Build a Marvell-arm64 target for Nokia-7215-A1 Run this image on arm64-nokia_ixs7215_52xb-r0 and verify all dockers are up and test basic commands like: show version show platform summary show platform syseeprom show platform fan show platform psustatus show platform firmware status show platform temperature show platform ssdhealth Verify ports are up using "show interface status" command Run unit tests and OC test cases. --- platform/marvell-arm64/platform.conf | 8 +- .../7215/modules/nokia_7215_ixs_a1_cpld.c | 170 ++++++++---------- .../7215/scripts/nokia-7215-init.sh | 26 ++- platform/marvell-arm64/sonic_fit.its | 32 +++- 4 files changed, 126 insertions(+), 110 deletions(-) diff --git a/platform/marvell-arm64/platform.conf b/platform/marvell-arm64/platform.conf index a11314acf8..6332c9178f 100644 --- a/platform/marvell-arm64/platform.conf +++ b/platform/marvell-arm64/platform.conf @@ -31,7 +31,7 @@ PLATFORM_AC5X=0 PLATFORM_CN9131=0 case $PLATFORM in - arm64-nokia_ixs7215_52xb-r0) PLATFORM_AC5X=1; + arm64-nokia_ixs7215_52xb-r0) PLATFORM_7215_A1=1; fdt_fname="/usr/lib/linux-image-${kernel_version}/marvell/7215-ixs-a1.dtb"; fit_conf_name="#conf_7215_a1";; arm64-marvell_rd98DX35xx-r0) PLATFORM_AC5X=1; @@ -50,6 +50,12 @@ if [ $PLATFORM_AC5X -eq 1 ]; then FW_ENV_DEFAULT='/dev/mtd0 0x400000 0x10000 0x10000' demo_part=2 mmc_bus="mmc0:0001" +elif [ $PLATFORM_7215_A1 -eq 1 ]; then + fit_addr=0x20000000 + VAR_LOG=4096 + FW_ENV_DEFAULT='/dev/mtd1 0x0 0x10000 0x10000' + demo_part=2 + mmc_bus="mmc0:0001" elif [ $PLATFORM_CN9131 -eq 1 ]; then fdt_addr=0x1000000 fit_addr=0x8000000 diff --git a/platform/marvell-arm64/sonic-platform-nokia/7215/modules/nokia_7215_ixs_a1_cpld.c b/platform/marvell-arm64/sonic-platform-nokia/7215/modules/nokia_7215_ixs_a1_cpld.c index df8e0ea648..3c06397702 100644 --- a/platform/marvell-arm64/sonic-platform-nokia/7215/modules/nokia_7215_ixs_a1_cpld.c +++ b/platform/marvell-arm64/sonic-platform-nokia/7215/modules/nokia_7215_ixs_a1_cpld.c @@ -56,18 +56,14 @@ #define SYSTEM_STATUS_LED_CONTROL_REG 0x07 #define POWER_AND_FAN_LED_CONTROL_REG 0x08 #define SFP_TX_FAULT_STATUS_REG 0x09 -#define PSU1_PSU2_DEVICE_STATUS_REG 0x0A -#define FAN_ENABLE_REG 0x0B -#define USB_POWER_ENABLE_REG 0x0C +#define TEMP_EVENT_STATUS_REG 0x0D +#define TEMP_EVENT_MASK_REG 0x0E #define SFP_LED_TEST_REG 0x0F #define RESET_REG 0x10 -#define PHY_IRQ_LIVE_STATE_REG 0x11 #define MISC_IRQ_LIVE_STATE_REG 0x12 #define INTERRUPT_REG 0x13 #define INTERRUPT_MASK_REG 0x14 -#define PHY_INT_STATUS_REG 0x15 #define MISC_INT_STATUS_REG 0x16 -#define PHY_INT_MASK_REG 0x17 #define MISC_INT_MASK_REG 0x18 #define GPIO_DIRECTION_REG 0x19 #define GPIO_DATA_IN_REG 0x1A @@ -79,6 +75,7 @@ #define RESET_CAUSE_REG_WARM_RESET 0x2 #define RESET_CAUSE_REG_WDOG_RESET 0x4 #define RESET_CAUSE_REG_SYS_RESET 0x8 +#define RESET_CAUSE_REG_THERMAL_OL 0x10 #define SFP_PRESENCE_REG_SFP49 0x0 #define SFP_PRESENCE_REG_SFP50 0x1 @@ -96,6 +93,13 @@ #define SFP_TX_DISABLE_REG_SFP52 0x3 #define SFP_TX_DISABLE_REG_LED_MUX 0x4 +#define TS1_ALERT_EVENT 0x2 +#define TS2_ALERT_EVENT 0x4 +#define TS3_ALERT_EVENT 0x8 +#define CPU_TEMP_EVENT 0x10 +#define AC5X_HIGHTEMP_EVENT 0x20 +#define DIMM_TEMP_EVENT 0x40 + #define MAC_INIT_STATUS_REG_INIT_DONE 0x2 enum system_status_led_mode { @@ -129,14 +133,6 @@ char *power_fan_led_mode_str[]={"off", "green", "amber", "blink-green", "invalid #define SFP_TX_FAULT_STATUS_SFP51 0x2 #define SFP_TX_FAULT_STATUS_SFP52 0x3 -#define PSU1_POWERGOOD 2 -#define PSU2_POWERGOOD 3 - -#define FAN1_ENABLE 0 -#define FAN2_ENABLE 1 - -#define USB_POWER_ENABLE 0 - #define RESET_REG_WARM_RESET 0x0 #define RESET_REG_COLD_RESET 0x4 #define RESET_REG_I2CMUX_RESET 0x6 @@ -193,22 +189,26 @@ static ssize_t show_last_reset_cause(struct device *dev, struct device_attribute val = nokia_7215_ixs_a1_cpld_read(data, RESET_CAUSE_REG); switch (val) { case RESET_CAUSE_REG_COLD_RESET: - reason="cold reset"; + reason="cold_reset"; break; case RESET_CAUSE_REG_WARM_RESET: - reason="warm reset"; + reason="warm_reset"; break; case RESET_CAUSE_REG_WDOG_RESET: - reason="wdog reset"; + reason="wdog_reset"; break; case RESET_CAUSE_REG_SYS_RESET: - reason="sys reset"; + reason="sys_reset"; break; + case RESET_CAUSE_REG_THERMAL_OL: + reason="thermal_reset"; + break; + default: reason="unknown"; break; } - return sprintf(buf,"0x%02x %s\n",val, reason); + return sprintf(buf,"%s\n",reason); } static ssize_t show_cpld_version(struct device *dev, struct device_attribute *devattr, char *buf) @@ -343,82 +343,38 @@ static ssize_t show_sfp_tx_fault(struct device *dev, struct device_attribute *de return sprintf(buf,"%d\n",(val>>sda->index) & 0x1 ? 1:0); } - -static ssize_t show_psu_pg_status(struct device *dev, struct device_attribute *devattr, char *buf) +static ssize_t show_temp_event_status(struct device *dev, struct device_attribute *devattr, char *buf) { struct cpld_data *data = dev_get_drvdata(dev); - struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); u8 val=0; - val = nokia_7215_ixs_a1_cpld_read(data, PSU1_PSU2_DEVICE_STATUS_REG); - - /* If the bit is set, psu power is good */ - return sprintf(buf,"%d\n",(val>>sda->index) & 0x1 ? 1:0); -} - -static ssize_t show_fan_enable_status(struct device *dev, struct device_attribute *devattr, char *buf) -{ - struct cpld_data *data = dev_get_drvdata(dev); - struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); - u8 val=0; - val = nokia_7215_ixs_a1_cpld_read(data, FAN_ENABLE_REG); - - /* If the bit is set, fan is disabled. So, toggling intentionally */ - return sprintf(buf,"%d\n",(val>>sda->index) & 0x1 ? 0:1); -} - -static ssize_t set_fan_enable_status(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) -{ - struct cpld_data *data = dev_get_drvdata(dev); - struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); - u8 reg_val=0, usr_val=0, mask; - int ret=kstrtou8(buf,10, &usr_val); - if (ret != 0) { - return ret; - } - if (usr_val > 1) { - return -EINVAL; + char *reason=NULL; + val = nokia_7215_ixs_a1_cpld_read(data, TEMP_EVENT_STATUS_REG); + switch (val) { + case TS1_ALERT_EVENT: + reason="ts1"; + break; + case TS2_ALERT_EVENT: + reason="ts2"; + break; + case TS3_ALERT_EVENT: + reason="ts3"; + break; + case CPU_TEMP_EVENT: + reason="cpu"; + break; + case AC5X_HIGHTEMP_EVENT: + reason="ac5x"; + break; + case DIMM_TEMP_EVENT: + reason="dimm"; + break; + + default: + reason="none"; + break; } + return sprintf(buf,"0x%02x %s\n",val, reason); - mask = (~(1 << sda->index)) & 0xFF; - reg_val = nokia_7215_ixs_a1_cpld_read(data, RESET_REG); - reg_val = reg_val & mask; - - usr_val = !usr_val; // If the bit is set, fan is disabled. So, toggling intentionally - usr_val = usr_val << sda->index; - - nokia_7215_ixs_a1_cpld_write(data, FAN_ENABLE_REG, (reg_val|usr_val)); - - return count; - -} - -static ssize_t show_usb_enable_status(struct device *dev, struct device_attribute *devattr, char *buf) -{ - struct cpld_data *data = dev_get_drvdata(dev); - struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); - u8 val=0; - val = nokia_7215_ixs_a1_cpld_read(data, USB_POWER_ENABLE_REG); - - /* If the bit is set, usb power is disabled. So, toggling intentionally */ - return sprintf(buf,"%d\n",(val>>sda->index) & 0x1 ? 0:1); -} - -static ssize_t set_usb_enable_status(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) -{ - struct cpld_data *data = dev_get_drvdata(dev); - u8 usr_val=0; - int ret=kstrtou8(buf,16, &usr_val); - if (ret != 0) { - return ret; - } - if(usr_val > 1) { - return -EINVAL; - } - /* If the bit is set, usb power is disabled. So, toggling intentionally */ - usr_val = !usr_val; - - nokia_7215_ixs_a1_cpld_write(data, USB_POWER_ENABLE_REG, usr_val); - return count; } static ssize_t show_sfp_ledtest_status(struct device *dev, struct device_attribute *devattr, char *buf) @@ -441,6 +397,26 @@ static ssize_t set_sfp_ledtest_status(struct device *dev, struct device_attribut return count; } +static ssize_t show_temp_event_mask_status(struct device *dev, struct device_attribute *devattr, char *buf) +{ + struct cpld_data *data = dev_get_drvdata(dev); + u8 val = nokia_7215_ixs_a1_cpld_read(data, TEMP_EVENT_MASK_REG); + return sprintf(buf,"0x%02x\n",val); +} + +static ssize_t set_temp_event_mask_status(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) +{ + struct cpld_data *data = dev_get_drvdata(dev); + u8 usr_val=0; + int ret=kstrtou8(buf,16, &usr_val); + if (ret != 0) { + return ret; + } + + nokia_7215_ixs_a1_cpld_write(data, TEMP_EVENT_MASK_REG, usr_val); + return count; +} + static ssize_t show_reset_reg(struct device *dev, struct device_attribute *devattr, char *buf) { struct cpld_data *data = dev_get_drvdata(dev); @@ -499,12 +475,9 @@ static SENSOR_DEVICE_ATTR(sfp49_tx_fault, S_IRUGO, show_sfp_tx_fault, NULL, SFP_ static SENSOR_DEVICE_ATTR(sfp50_tx_fault, S_IRUGO, show_sfp_tx_fault, NULL, SFP_TX_FAULT_STATUS_SFP50); static SENSOR_DEVICE_ATTR(sfp51_tx_fault, S_IRUGO, show_sfp_tx_fault, NULL, SFP_TX_FAULT_STATUS_SFP51); static SENSOR_DEVICE_ATTR(sfp52_tx_fault, S_IRUGO, show_sfp_tx_fault, NULL, SFP_TX_FAULT_STATUS_SFP52); -static SENSOR_DEVICE_ATTR(psu1_power_good, S_IRUGO, show_psu_pg_status, NULL, PSU1_POWERGOOD); -static SENSOR_DEVICE_ATTR(psu2_power_good, S_IRUGO, show_psu_pg_status, NULL, PSU2_POWERGOOD); -static SENSOR_DEVICE_ATTR(fan1_enable, S_IRUGO | S_IWUSR, show_fan_enable_status, set_fan_enable_status, FAN1_ENABLE); -static SENSOR_DEVICE_ATTR(fan2_enable, S_IRUGO | S_IWUSR, show_fan_enable_status, set_fan_enable_status, FAN2_ENABLE); -static SENSOR_DEVICE_ATTR(usb_power_enable, S_IRUGO | S_IWUSR, show_usb_enable_status, set_usb_enable_status, 0); +static SENSOR_DEVICE_ATTR(temp_event_status, S_IRUGO, show_temp_event_status, NULL, 0); static SENSOR_DEVICE_ATTR(sfp_led_test, S_IRUGO | S_IWUSR, show_sfp_ledtest_status, set_sfp_ledtest_status, 0); +static SENSOR_DEVICE_ATTR(temp_event_mask, S_IRUGO | S_IWUSR, show_temp_event_mask_status, set_temp_event_mask_status, 0); static SENSOR_DEVICE_ATTR(warm_reset, S_IRUGO | S_IWUSR, show_reset_reg, set_reset_reg, RESET_REG_WARM_RESET); static SENSOR_DEVICE_ATTR(cold_reset, S_IRUGO | S_IWUSR, show_reset_reg, set_reset_reg, RESET_REG_COLD_RESET); static SENSOR_DEVICE_ATTR(i2cmux_reset, S_IRUGO | S_IWUSR, show_reset_reg, set_reset_reg, RESET_REG_I2CMUX_RESET); @@ -526,6 +499,7 @@ static struct attribute *nokia_7215_ixs_a1_cpld_attributes[] = { &sensor_dev_attr_sfp50_tx_disable.dev_attr.attr, &sensor_dev_attr_sfp51_tx_disable.dev_attr.attr, &sensor_dev_attr_sfp52_tx_disable.dev_attr.attr, + &sensor_dev_attr_temp_event_status.dev_attr.attr, &sensor_dev_attr_system_led.dev_attr.attr, &sensor_dev_attr_psu_led.dev_attr.attr, &sensor_dev_attr_fan_led.dev_attr.attr, @@ -533,12 +507,8 @@ static struct attribute *nokia_7215_ixs_a1_cpld_attributes[] = { &sensor_dev_attr_sfp50_tx_fault.dev_attr.attr, &sensor_dev_attr_sfp51_tx_fault.dev_attr.attr, &sensor_dev_attr_sfp52_tx_fault.dev_attr.attr, - &sensor_dev_attr_psu1_power_good.dev_attr.attr, - &sensor_dev_attr_psu2_power_good.dev_attr.attr, - &sensor_dev_attr_fan1_enable.dev_attr.attr, - &sensor_dev_attr_fan2_enable.dev_attr.attr, - &sensor_dev_attr_usb_power_enable.dev_attr.attr, &sensor_dev_attr_sfp_led_test.dev_attr.attr, + &sensor_dev_attr_temp_event_mask.dev_attr.attr, &sensor_dev_attr_warm_reset.dev_attr.attr, &sensor_dev_attr_cold_reset.dev_attr.attr, &sensor_dev_attr_i2cmux_reset.dev_attr.attr, diff --git a/platform/marvell-arm64/sonic-platform-nokia/7215/scripts/nokia-7215-init.sh b/platform/marvell-arm64/sonic-platform-nokia/7215/scripts/nokia-7215-init.sh index 83da124876..a69c871b02 100644 --- a/platform/marvell-arm64/sonic-platform-nokia/7215/scripts/nokia-7215-init.sh +++ b/platform/marvell-arm64/sonic-platform-nokia/7215/scripts/nokia-7215-init.sh @@ -6,7 +6,14 @@ load_kernel_drivers() { echo "Loading Kernel Drivers" sudo insmod /lib/modules/6.1.0-11-2-arm64/kernel/extra/nokia_7215_ixs_a1_cpld.ko - sudo insmod /lib/modules/6.1.0-11-2-arm64/kernel/extra/ac5_thermal_sensor.ko + sudo insmod /lib/modules/6.1.0-11-2-arm64/kernel/extra/cn9130_cpu_thermal_sensor.ko +} + +fw_uboot_env_cfg() +{ + echo "Setting up U-Boot environment for Nokia-7215-A1" + FW_ENV_DEFAULT='/dev/mtd1 0x0 0x10000 0x10000' + echo $FW_ENV_DEFAULT > /etc/fw_env.config } nokia_7215_profile() @@ -33,8 +40,8 @@ file_exists() { # Install kernel drivers required for i2c bus access load_kernel_drivers -# Enumerate RTC -echo m41t11 0x68 > /sys/bus/i2c/devices/i2c-0/new_device +#setting up uboot environment +fw_uboot_env_cfg # Enumerate the SFP eeprom device on each mux channel echo pca9546 0x70> /sys/bus/i2c/devices/i2c-1/new_device @@ -43,11 +50,12 @@ echo pca9546 0x70> /sys/bus/i2c/devices/i2c-1/new_device echo ina230 0x40 > /sys/bus/i2c/devices/i2c-0/new_device # Enumerate fan -echo emc2305 0x2e > /sys/bus/i2c/devices/i2c-0/new_device +echo emc2305 0x2f > /sys/bus/i2c/devices/i2c-0/new_device # Enumerate Thermals echo tmp75 0x48 > /sys/bus/i2c/devices/i2c-0/new_device echo tmp75 0x49 > /sys/bus/i2c/devices/i2c-0/new_device +echo tmp75 0x4A > /sys/bus/i2c/devices/i2c-0/new_device #Enumerate CPLD echo nokia_7215_a1_cpld 0x41 > /sys/bus/i2c/devices/i2c-0/new_device @@ -63,6 +71,12 @@ else echo "SYSEEPROM file not foud" fi +#Enumurate GPIO +echo 41 > /sys/class/gpio/export +echo 61 > /sys/class/gpio/export +echo 62 > /sys/class/gpio/export +chmod 666 /sys/class/gpio/gpio41/value + # Get list of the mux channels for((i=0; i<10; i++)); do @@ -85,8 +99,8 @@ do echo 0 > /sys/bus/i2c/devices/0-0041/sfp${i}_tx_disable done -#slow down fan speed to 50 untill thermal algorithm kicks in% -i2c_path="/sys/bus/i2c/devices/0-002e/hwmon/hwmon?" +#slow down fan speed to 50% untill thermal algorithm kicks in +i2c_path="/sys/bus/i2c/devices/0-002f/hwmon/hwmon?" echo 128 > $i2c_path/pwm1 echo 128 > $i2c_path/pwm2 diff --git a/platform/marvell-arm64/sonic_fit.its b/platform/marvell-arm64/sonic_fit.its index 99a634ba8c..3208388d98 100644 --- a/platform/marvell-arm64/sonic_fit.its +++ b/platform/marvell-arm64/sonic_fit.its @@ -35,7 +35,7 @@ type = "flat_dt"; arch = "arm64"; compression = "none"; - load = <0x2 0x1000000>; + load = <0x11000000>; hash@1 { algo = "sha1"; }; @@ -79,6 +79,32 @@ algo = "sha1"; }; }; + kernel_2 { + description = "Linux Kernel"; + data = /incbin/("/boot/vmlinuz-6.1.0-11-2-arm64"); + type = "kernel"; + arch = "arm64"; + os = "linux"; + compression = "none"; + load = <0x12000000>; + entry = <0x12000000>; + hash@1 { + algo = "sha1"; + }; + }; + ramdisk_2 { + description = "ramdisk"; + data = /incbin/("/boot/initrd.img-6.1.0-11-2-arm64"); + type = "ramdisk"; + arch = "arm64"; + os = "linux"; + compression = "gzip"; + load = <0x18000000>; + entry = <0x18000000>; + hash@1 { + algo = "sha1"; + }; + }; fdt_cn9131 { description = "Flattened Device Tree blob"; data = /incbin/("/boot/cn9131-db-comexpress.dtb"); @@ -105,9 +131,9 @@ }; conf_7215_a1 { description = "Boot Linux kernel with FDT blob + ramdisk for 7125_IXS_A1"; - kernel = "kernel_ac5x"; + kernel = "kernel_2"; fdt = "fdt_7215_a1"; - ramdisk = "ramdisk_ac5x"; + ramdisk = "ramdisk_2"; hash@1 { algo = "sha1"; };