ata: Use of_property_read_reg() to parse "reg"
authorRob Herring <robh@kernel.org>
Fri, 9 Jun 2023 18:31:25 +0000 (12:31 -0600)
committerDamien Le Moal <dlemoal@kernel.org>
Tue, 13 Jun 2023 06:38:48 +0000 (15:38 +0900)
Use the recently added of_property_read_reg() helper to get the
untranslated "reg" address value.

Signed-off-by: Rob Herring <robh@kernel.org>
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
drivers/ata/pata_octeon_cf.c
drivers/ata/sata_svw.c

index b1ce9f1..57b2166 100644 (file)
@@ -804,9 +804,7 @@ static int octeon_cf_probe(struct platform_device *pdev)
        struct resource *res_cs0, *res_cs1;
 
        bool is_16bit;
-       const __be32 *cs_num;
-       struct property *reg_prop;
-       int n_addr, n_size, reg_len;
+       u64 reg;
        struct device_node *node;
        void __iomem *cs0;
        void __iomem *cs1 = NULL;
@@ -834,15 +832,10 @@ static int octeon_cf_probe(struct platform_device *pdev)
        else
                is_16bit = false;
 
-       n_addr = of_n_addr_cells(node);
-       n_size = of_n_size_cells(node);
-
-       reg_prop = of_find_property(node, "reg", &reg_len);
-       if (!reg_prop || reg_len < sizeof(__be32))
-               return -EINVAL;
-
-       cs_num = reg_prop->value;
-       cf_port->cs0 = be32_to_cpup(cs_num);
+       rv = of_property_read_reg(node, 0, &reg, NULL);
+       if (rv < 0)
+               return rv;
+       cf_port->cs0 = upper_32_bits(reg);
 
        if (cf_port->is_true_ide) {
                struct device_node *dma_node;
@@ -884,13 +877,12 @@ static int octeon_cf_probe(struct platform_device *pdev)
                cs1 = devm_ioremap(&pdev->dev, res_cs1->start,
                                           resource_size(res_cs1));
                if (!cs1)
-                       return rv;
-
-               if (reg_len < (n_addr + n_size + 1) * sizeof(__be32))
                        return -EINVAL;
 
-               cs_num += n_addr + n_size;
-               cf_port->cs1 = be32_to_cpup(cs_num);
+               rv = of_property_read_reg(node, 1, &reg, NULL);
+               if (rv < 0)
+                       return rv;
+               cf_port->cs1 = upper_32_bits(reg);
        }
 
        res_cs0 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
index c47c3fb..598a872 100644 (file)
@@ -32,6 +32,7 @@
 #include <scsi/scsi.h>
 #include <linux/libata.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 
 #define DRV_NAME       "sata_svw"
 #define DRV_VERSION    "2.3"
@@ -319,10 +320,11 @@ static int k2_sata_show_info(struct seq_file *m, struct Scsi_Host *shost)
        /* Match it to a port node */
        index = (ap == ap->host->ports[0]) ? 0 : 1;
        for (np = np->child; np != NULL; np = np->sibling) {
-               const u32 *reg = of_get_property(np, "reg", NULL);
-               if (!reg)
+               u64 reg;
+
+               if (of_property_read_reg(np, 0, &reg, NULL))
                        continue;
-               if (index == *reg) {
+               if (index == reg) {
                        seq_printf(m, "devspec: %pOF\n", np);
                        break;
                }