From: Daniel Hellstrom <dan...@gaisler.com>

Check in init3 not needed since same data is already checked in init2
stage. Adds an extra check that the APB register space is available before
accessing it.

Closes #2331
---
 c/src/lib/libbsp/sparc/shared/1553/gr1553b.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/c/src/lib/libbsp/sparc/shared/1553/gr1553b.c 
b/c/src/lib/libbsp/sparc/shared/1553/gr1553b.c
index 2e778606ac..c05d53a4f9 100644
--- a/c/src/lib/libbsp/sparc/shared/1553/gr1553b.c
+++ b/c/src/lib/libbsp/sparc/shared/1553/gr1553b.c
@@ -191,6 +191,8 @@ static int gr1553_init2(struct drvmgr_dev *dev)
                return DRVMGR_FAIL;
        }
        pnpinfo = &ambadev->info;
+       if ( pnpinfo->apb_slv == NULL )
+               return DRVMGR_EIO;
        regs = (struct gr1553b_regs *)pnpinfo->apb_slv->start;
 
        /* Stop IRQ */
@@ -227,9 +229,6 @@ static int gr1553_init3(struct drvmgr_dev *dev)
 
        /* Get device information from AMBA PnP information */
        ambadev = (struct amba_dev_info *)dev->businfo;
-       if ( ambadev == NULL ) {
-               return DRVMGR_FAIL;
-       }
        pnpinfo = &ambadev->info;
        regs = (struct gr1553b_regs *)pnpinfo->apb_slv->start;
 
@@ -257,6 +256,12 @@ static int gr1553_init3(struct drvmgr_dev *dev)
                gr1553_list_add(&gr1553_rt_root, feat);
        }
 
+       if ( priv->features == 0 ) {
+               /* no features in HW should never happen.. an I/O error? */
+               free(priv);
+               return DRVMGR_EIO;
+       }
+
        return DRVMGR_OK;
 }
 
-- 
2.24.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to