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"; };