Commit 5a37e4dd authored by Huisong Li's avatar Huisong Li Committed by Dengdui Huang
Browse files

soc: hisilicon: kunpeng_hccs: Return failure on having not die or port information

mainline inclusion
from mainline-v6.13-rc1
commit 0c811bd2721d219bd104e0dc1fa76deee5e04ae4
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IB75RW
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0c811bd2721d219bd104e0dc1fa76deee5e04ae4



--------------------------------

Driver is unavailable if all die number or all port number obtained from
firmware are zero. Although this is unlikely, just to harden the code.

Signed-off-by: default avatarHuisong Li <lihuisong@huawei.com>
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: default avatarWei Xu <xuwei5@hisilicon.com>
Signed-off-by: default avatarDengdui Huang <huangdengdui@huawei.com>
parent a49a3edc
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -451,6 +451,7 @@ static int hccs_query_all_die_info_on_platform(struct hccs_dev *hdev)
	struct device *dev = hdev->dev;
	struct hccs_chip_info *chip;
	struct hccs_die_info *die;
	bool has_die_info = false;
	u8 i, j;
	int ret;

@@ -459,6 +460,7 @@ static int hccs_query_all_die_info_on_platform(struct hccs_dev *hdev)
		if (!chip->die_num)
			continue;

		has_die_info = true;
		chip->dies = devm_kzalloc(hdev->dev,
				chip->die_num * sizeof(struct hccs_die_info),
				GFP_KERNEL);
@@ -480,7 +482,7 @@ static int hccs_query_all_die_info_on_platform(struct hccs_dev *hdev)
		}
	}

	return 0;
	return has_die_info ? 0 : -EINVAL;
}

static int hccs_get_bd_info(struct hccs_dev *hdev, u8 opcode,
@@ -595,6 +597,7 @@ static int hccs_query_all_port_info_on_platform(struct hccs_dev *hdev)
	struct device *dev = hdev->dev;
	struct hccs_chip_info *chip;
	struct hccs_die_info *die;
	bool has_port_info = false;
	u8 i, j;
	int ret;

@@ -605,6 +608,7 @@ static int hccs_query_all_port_info_on_platform(struct hccs_dev *hdev)
			if (!die->port_num)
				continue;

			has_port_info = true;
			die->ports = devm_kzalloc(dev,
				die->port_num * sizeof(struct hccs_port_info),
				GFP_KERNEL);
@@ -623,7 +627,7 @@ static int hccs_query_all_port_info_on_platform(struct hccs_dev *hdev)
		}
	}

	return 0;
	return has_port_info ? 0 : -EINVAL;
}

static int hccs_get_hw_info(struct hccs_dev *hdev)