diff mbox

[U-Boot,v3,20/29] dm: Avoid accessing uclasses before they are ready

Message ID 1406120124-9373-21-git-send-email-sjg@chromium.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass July 23, 2014, 12:55 p.m. UTC
Don't allow access to uclasses before they have been initialised.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v3: None
Changes in v2: None

 doc/driver-model/README.txt |  3 ++-
 drivers/core/uclass.c       |  2 ++
 test/dm/core.c              | 14 ++++++++++++++
 3 files changed, 18 insertions(+), 1 deletion(-)

Comments

Simon Glass July 26, 2014, 3:10 p.m. UTC | #1
On 23 July 2014 13:55, Simon Glass <sjg@chromium.org> wrote:
> Don't allow access to uclasses before they have been initialised.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to dm/master.
diff mbox

Patch

diff --git a/doc/driver-model/README.txt b/doc/driver-model/README.txt
index 346cf08..672497d 100644
--- a/doc/driver-model/README.txt
+++ b/doc/driver-model/README.txt
@@ -95,7 +95,7 @@  are provided in test/dm. To run them, try:
 You should see something like this:
 
     <...U-Boot banner...>
-    Running 16 driver model tests
+    Running 17 driver model tests
     Test: dm_test_autobind
     Test: dm_test_autoprobe
     Test: dm_test_children
@@ -116,6 +116,7 @@  You should see something like this:
     Test: dm_test_pre_reloc
     Test: dm_test_remove
     Test: dm_test_uclass
+    Test: dm_test_uclass_before_ready
     Failures: 0
 
 
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c
index a27f3d5..61ca17e 100644
--- a/drivers/core/uclass.c
+++ b/drivers/core/uclass.c
@@ -23,6 +23,8 @@  struct uclass *uclass_find(enum uclass_id key)
 {
 	struct uclass *uc;
 
+	if (!gd->dm_root)
+		return NULL;
 	/*
 	 * TODO(sjg@chromium.org): Optimise this, perhaps moving the found
 	 * node to the start of the list, or creating a linear array mapping
diff --git a/test/dm/core.c b/test/dm/core.c
index 24e0b6b..b0cfb42 100644
--- a/test/dm/core.c
+++ b/test/dm/core.c
@@ -570,3 +570,17 @@  static int dm_test_pre_reloc(struct dm_test_state *dms)
 	return 0;
 }
 DM_TEST(dm_test_pre_reloc, 0);
+
+static int dm_test_uclass_before_ready(struct dm_test_state *dms)
+{
+	struct uclass *uc;
+
+	ut_assertok(uclass_get(UCLASS_TEST, &uc));
+
+	memset(gd, '\0', sizeof(*gd));
+	ut_asserteq_ptr(NULL, uclass_find(UCLASS_TEST));
+
+	return 0;
+}
+
+DM_TEST(dm_test_uclass_before_ready, 0);