]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soc: hisilicon: kunpeng_hccs: Return failure on having not die or port information
authorHuisong Li <lihuisong@huawei.com>
Wed, 28 Aug 2024 10:49:52 +0000 (18:49 +0800)
committerWei Xu <xuwei5@hisilicon.com>
Mon, 14 Oct 2024 08:54:47 +0000 (08:54 +0000)
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: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Wei Xu <xuwei5@hisilicon.com>
drivers/soc/hisilicon/kunpeng_hccs.c

index c4a57328f22af92c37fb0658e8427d69aa796676..6e88f597f2676515230bba6ff0d0124e283ee396 100644 (file)
@@ -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,
@@ -601,6 +603,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;
 
@@ -611,6 +614,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);
@@ -629,7 +633,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)