[PATCH v3] dm: core: fix no null pointer detection in ofnode_get_addr_size_index()

2021-07-12 Thread chenguanqiao
From: Chen Guanqiao 

Fixed a defect of a null pointer being discovered by Coverity Scan:
   CID 331544:  Null pointer dereferences  (REVERSE_INULL)
   Null-checking "size" suggests that it may be null, but it has already been
   dereferenced on all paths leading to the check.

Signed-off-by: Chen Guanqiao 
---
v3:
  Add this changelog.

v2:
  1. Remove redundant return.
  2. apply patch to u-boot/next.

 drivers/core/ofnode.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index eeeccfb446..dda6c76e83 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -329,7 +329,8 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, 
int index,
 {
int na, ns;
 
-   *size = FDT_SIZE_T_NONE;
+   if (size)
+   *size = FDT_SIZE_T_NONE;
 
if (ofnode_is_np(node)) {
const __be32 *prop_val;
@@ -340,6 +341,7 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, 
int index,
  );
if (!prop_val)
return FDT_ADDR_T_NONE;
+
if (size)
*size = size64;
 
@@ -359,8 +361,6 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, 
int index,
  index, na, ns, size,
  translate);
}
-
-   return FDT_ADDR_T_NONE;
 }
 
 fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size)
-- 
2.27.0



[PATCH v2] dm: core: fix no null pointer detection in ofnode_get_addr_size_index()

2021-07-06 Thread chenguanqiao
From: Chen Guanqiao 

Fixed a defect of a null pointer being discovered by Coverity Scan:
   CID 331544:  Null pointer dereferences  (REVERSE_INULL)
   Null-checking "size" suggests that it may be null, but it has already been
   dereferenced on all paths leading to the check.

Signed-off-by: Chen Guanqiao 
---
 drivers/core/ofnode.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index eeeccfb446..dda6c76e83 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -329,7 +329,8 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, 
int index,
 {
int na, ns;
 
-   *size = FDT_SIZE_T_NONE;
+   if (size)
+   *size = FDT_SIZE_T_NONE;
 
if (ofnode_is_np(node)) {
const __be32 *prop_val;
@@ -340,6 +341,7 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, 
int index,
  );
if (!prop_val)
return FDT_ADDR_T_NONE;
+
if (size)
*size = size64;
 
@@ -359,8 +361,6 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, 
int index,
  index, na, ns, size,
  translate);
}
-
-   return FDT_ADDR_T_NONE;
 }
 
 fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size)
-- 
2.27.0



[PATCH] dm: core: fix no null pointer detection in ofnode_get_addr_size_index()

2021-05-13 Thread chenguanqiao
From: Chen Guanqiao 

Fixed a defect of a null pointer being discovered by Coverity Scan:
   CID 331544:  Null pointer dereferences  (REVERSE_INULL)
   Null-checking "size" suggests that it may be null, but it has already been 
dereferenced on all paths leading to the check.

Signed-off-by: Chen Guanqiao 
---
 drivers/core/ofnode.c | 13 +++--
 include/dm/ofnode.h   |  2 +-
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 6c771e364f..554af95114 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -299,11 +299,10 @@ ofnode ofnode_get_by_phandle(uint phandle)
return node;
 }

-fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size)
+fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t 
*psize)
 {
int na, ns;
-
-   *size = FDT_SIZE_T_NONE;
+   fdt_size_t size = FDT_SIZE_T_NONE;

if (ofnode_is_np(node)) {
const __be32 *prop_val;
@@ -314,8 +313,7 @@ fdt_addr_t ofnode_get_addr_size_index(ofnode node, int 
index, fdt_size_t *size)
  );
if (!prop_val)
return FDT_ADDR_T_NONE;
-   if (size)
-   *size = size64;
+   size = size64;

ns = of_n_size_cells(ofnode_to_np(node));

@@ -330,9 +328,12 @@ fdt_addr_t ofnode_get_addr_size_index(ofnode node, int 
index, fdt_size_t *size)
ns = ofnode_read_simple_size_cells(ofnode_get_parent(node));
return fdtdec_get_addr_size_fixed(gd->fdt_blob,
  ofnode_to_offset(node), "reg",
- index, na, ns, size, true);
+ index, na, ns, psize, true);
}

+   if (size)
+   *psize = size;
+
return FDT_ADDR_T_NONE;
 }

diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index 8a69fd87da..e38d39dcf3 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -487,7 +487,7 @@ int ofnode_read_size(ofnode node, const char *propname);
  * @return address, or FDT_ADDR_T_NONE if not present or invalid
  */
 phys_addr_t ofnode_get_addr_size_index(ofnode node, int index,
-  fdt_size_t *size);
+  fdt_size_t *psize);

 /**
  * ofnode_get_addr_index() - get an address from a node
--
2.27.0



[PATCH v3 0/2] dm: core: Add size operations on device tree references

2021-04-12 Thread chenguanqiao
From: Chen Guanqiao 

Currently, there is only an interface for obtaining address from node,
and if you want to get the size, you need to traverse the node.

So I added the function to get the size, and added related test case.

Changes for v3:
- Add return error for ofnode_get_size

Changes for v2:
- Add a test to test/dm/ofnode.c

Chen Guanqiao (2):
  dm: core: Add size operations on device tree references
  test: dm: add test item for ofnode_get_addr() and ofnode_get_size()

 drivers/core/ofnode.c | 11 +++
 include/dm/ofnode.h   | 10 ++
 include/fdtdec.h  |  5 +++--
 test/dm/ofnode.c  | 31 +++
 4 files changed, 55 insertions(+), 2 deletions(-)

--
2.27.0



[PATCH v3 2/2] test: dm: add test item for ofnode_get_addr() and ofnode_get_size()

2021-04-12 Thread chenguanqiao
From: Chen Guanqiao 

Add test item for getting address and size functions

Test the following function:
- ofnode_get_addr()
- ofnode_get_size()

Signed-off-by: Chen Guanqiao 
---
 test/dm/ofnode.c | 31 +++
 1 file changed, 31 insertions(+)

diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c
index c539134296..e0b525eeb1 100644
--- a/test/dm/ofnode.c
+++ b/test/dm/ofnode.c
@@ -261,3 +261,34 @@ static int dm_test_ofnode_is_enabled(struct 
unit_test_state *uts)
return 0;
 }
 DM_TEST(dm_test_ofnode_is_enabled, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
+static int dm_test_ofnode_get_reg(struct unit_test_state *uts)
+{
+   ofnode node;
+   fdt_addr_t addr;
+   fdt_size_t size;
+
+   node = ofnode_path("/translation-test@8000");
+   ut_assert(ofnode_valid(node));
+   addr = ofnode_get_addr(node);
+   size = ofnode_get_size(node);
+   ut_asserteq(0x8000, addr);
+   ut_asserteq(0x4000, size);
+
+   node = ofnode_path("/translation-test@8000/dev@1,100");
+   ut_assert(ofnode_valid(node));
+   addr = ofnode_get_addr(node);
+   size = ofnode_get_size(node);
+   ut_asserteq(0x9000, addr);
+   ut_asserteq(0x1000, size);
+
+   node = ofnode_path("/emul-mux-controller");
+   ut_assert(ofnode_valid(node));
+   addr = ofnode_get_addr(node);
+   size = ofnode_get_size(node);
+   ut_asserteq(FDT_ADDR_T_NONE, addr);
+   ut_asserteq(FDT_SIZE_T_NONE, size);
+
+   return 0;
+}
+DM_TEST(dm_test_ofnode_get_reg, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
--
2.27.0



[PATCH v3 1/2] dm: core: Add size operations on device tree references

2021-04-12 Thread chenguanqiao
From: Chen Guanqiao 

Add functions to add size of addresses in the device tree using ofnode
references.

If the size is not set, return FDT_SIZE_T_NONE.

Signed-off-by: Chen Guanqiao 
---
 drivers/core/ofnode.c | 11 +++
 include/dm/ofnode.h   | 10 ++
 include/fdtdec.h  |  5 +++--
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index fa0bd2a9c4..d5058e 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -303,6 +303,8 @@ fdt_addr_t ofnode_get_addr_size_index(ofnode node, int 
index, fdt_size_t *size)
 {
int na, ns;

+   *size = FDT_SIZE_T_NONE;
+
if (ofnode_is_np(node)) {
const __be32 *prop_val;
u64 size64;
@@ -347,6 +349,15 @@ fdt_addr_t ofnode_get_addr(ofnode node)
return ofnode_get_addr_index(node, 0);
 }

+fdt_size_t ofnode_get_size(ofnode node)
+{
+   fdt_size_t size;
+
+   ofnode_get_addr_size_index(node, 0, );
+
+   return size;
+}
+
 int ofnode_stringlist_search(ofnode node, const char *property,
 const char *string)
 {
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index 2c0597c407..8a69fd87da 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -510,6 +510,16 @@ phys_addr_t ofnode_get_addr_index(ofnode node, int index);
  */
 phys_addr_t ofnode_get_addr(ofnode node);

+/**
+ * ofnode_get_size() - get size from a node
+ *
+ * This reads the register size from a node
+ *
+ * @node: node to read from
+ * @return size of the address, or FDT_SIZE_T_NONE if not present or invalid
+ */
+fdt_size_t ofnode_get_size(ofnode node);
+
 /**
  * ofnode_stringlist_search() - find a string in a string list and return index
  *
diff --git a/include/fdtdec.h b/include/fdtdec.h
index 62d1660973..e0a49b1e57 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -24,15 +24,16 @@
 typedef phys_addr_t fdt_addr_t;
 typedef phys_size_t fdt_size_t;

-#ifdef CONFIG_PHYS_64BIT
 #define FDT_ADDR_T_NONE (-1U)
+#define FDT_SIZE_T_NONE (-1U)
+
+#ifdef CONFIG_PHYS_64BIT
 #define fdt_addr_to_cpu(reg) be64_to_cpu(reg)
 #define fdt_size_to_cpu(reg) be64_to_cpu(reg)
 #define cpu_to_fdt_addr(reg) cpu_to_be64(reg)
 #define cpu_to_fdt_size(reg) cpu_to_be64(reg)
 typedef fdt64_t fdt_val_t;
 #else
-#define FDT_ADDR_T_NONE (-1U)
 #define fdt_addr_to_cpu(reg) be32_to_cpu(reg)
 #define fdt_size_to_cpu(reg) be32_to_cpu(reg)
 #define cpu_to_fdt_addr(reg) cpu_to_be32(reg)
--
2.27.0



[PATCH v2 1/2] dm: core: Add size operations on device tree references

2021-04-02 Thread chenguanqiao
Add functions to add size of addresses in the device tree using ofnode
references.

Signed-off-by: Chen Guanqiao 
---
 drivers/core/ofnode.c |  9 +
 include/dm/ofnode.h   | 10 ++
 2 files changed, 19 insertions(+)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index fa0bd2a9c4..952c3cf9dd 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -347,6 +347,15 @@ fdt_addr_t ofnode_get_addr(ofnode node)
return ofnode_get_addr_index(node, 0);
 }
 
+fdt_size_t ofnode_get_size(ofnode node)
+{
+   fdt_size_t size;
+
+   ofnode_get_addr_size_index(node, 0, );
+
+   return size;
+}
+
 int ofnode_stringlist_search(ofnode node, const char *property,
 const char *string)
 {
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index 2c0597c407..e91f81282b 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -510,6 +510,16 @@ phys_addr_t ofnode_get_addr_index(ofnode node, int index);
  */
 phys_addr_t ofnode_get_addr(ofnode node);
 
+/**
+ * ofnode_get_size() - get size from a node
+ *
+ * This reads the register size from a node
+ *
+ * @node: node to read from
+ * @return size of the address
+ */
+fdt_size_t ofnode_get_size(ofnode node);
+
 /**
  * ofnode_stringlist_search() - find a string in a string list and return index
  *
-- 
2.25.1



[PATCH v2 2/2] test: dm: add test item for ofnode_get_addr() and ofnode_get_size()

2021-04-02 Thread chenguanqiao
Add test item for getting address and size functions

Test the following function:
- ofnode_get_addr()
- ofnode_get_size()

Signed-off-by: Chen Guanqiao 
---
 test/dm/ofnode.c | 24 
 1 file changed, 24 insertions(+)

diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c
index c539134296..0d958b4900 100644
--- a/test/dm/ofnode.c
+++ b/test/dm/ofnode.c
@@ -261,3 +261,27 @@ static int dm_test_ofnode_is_enabled(struct 
unit_test_state *uts)
return 0;
 }
 DM_TEST(dm_test_ofnode_is_enabled, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
+static int dm_test_ofnode_get_reg(struct unit_test_state *uts)
+{
+   ofnode node;
+   fdt_addr_t addr;
+   fdt_size_t size;
+
+   node = ofnode_path("/translation-test@8000");
+   ut_assert(ofnode_valid(node));
+   addr = ofnode_get_addr(node);
+   size = ofnode_get_size(node);
+   ut_asserteq(0x8000, addr);
+   ut_asserteq(0x4000, size);
+
+   node = ofnode_path("/translation-test@8000/dev@1,100");
+   ut_assert(ofnode_valid(node));
+   addr = ofnode_get_addr(node);
+   size = ofnode_get_size(node);
+   ut_asserteq(0x9000, addr);
+   ut_asserteq(0x1000, size);
+
+   return 0;
+}
+DM_TEST(dm_test_ofnode_get_reg, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
-- 
2.25.1



[PATCH v2 0/2] dm: core: Add size operations on device tree references

2021-04-02 Thread chenguanqiao
Currently, there is only an interface for obtaining address from node,
and if you want to get the size, you need to traverse the node.

So I added the function to get the size ,and added related test case.

Changes for v2:
- Add a test to test/dm/ofnode.c

Chen Guanqiao (2):
  dm: core: Add size operations on device tree references
  test: dm: add test item for ofnode_get_addr() and ofnode_get_size()

 drivers/core/ofnode.c |  9 +
 include/dm/ofnode.h   | 10 ++
 test/dm/ofnode.c  | 24 
 3 files changed, 43 insertions(+)

-- 
2.25.1



[PATCH] dm: core: Add size operations on device tree references

2021-04-01 Thread chenguanqiao
Add functions to add size of addresses in the device tree using ofnode
references.

Signed-off-by: Chen Guanqiao 
---
 drivers/core/ofnode.c |  9 +
 include/dm/ofnode.h   | 10 ++
 2 files changed, 19 insertions(+)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index fa0bd2a9c4..952c3cf9dd 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -347,6 +347,15 @@ fdt_addr_t ofnode_get_addr(ofnode node)
return ofnode_get_addr_index(node, 0);
 }

+fdt_size_t ofnode_get_size(ofnode node)
+{
+   fdt_size_t size;
+
+   ofnode_get_addr_size_index(node, 0, );
+
+   return size;
+}
+
 int ofnode_stringlist_search(ofnode node, const char *property,
 const char *string)
 {
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index 2c0597c407..e91f81282b 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -510,6 +510,16 @@ phys_addr_t ofnode_get_addr_index(ofnode node, int index);
  */
 phys_addr_t ofnode_get_addr(ofnode node);

+/**
+ * ofnode_get_size() - get size from a node
+ *
+ * This reads the register size from a node
+ *
+ * @node: node to read from
+ * @return size of the address
+ */
+fdt_size_t ofnode_get_size(ofnode node);
+
 /**
  * ofnode_stringlist_search() - find a string in a string list and return index
  *
--
2.27.0