diff options
author | Javier Jalle <javier.jalle@gaisler.com> | 2017-02-15 11:05:27 +0100 |
---|---|---|
committer | Daniel Hellstrom <daniel@gaisler.com> | 2017-03-06 07:54:55 +0100 |
commit | 0c23dd504632e2ea672a18328ef6c67320d8c51f (patch) | |
tree | 7e0279de629b62904ca490e1aa739bab452e1496 | |
parent | leon, gr-cpci-leon4-n2x: small comment fix (diff) | |
download | rtems-0c23dd504632e2ea672a18328ef6c67320d8c51f.tar.bz2 |
leon, gr740: fix device registration for GRPCI2 core
-rw-r--r-- | c/src/lib/libbsp/sparc/shared/drvmgr/ambapp_bus.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/drvmgr/ambapp_bus.c b/c/src/lib/libbsp/sparc/shared/drvmgr/ambapp_bus.c index 02aeda0dc9..c48d12d247 100644 --- a/c/src/lib/libbsp/sparc/shared/drvmgr/ambapp_bus.c +++ b/c/src/lib/libbsp/sparc/shared/drvmgr/ambapp_bus.c @@ -597,6 +597,27 @@ static void ambapp_core_register( drvmgr_dev_register(newdev); /* Register New Device */ } +/* Fix device registration. + * Function returns: + * 0 Register device as normal + * 1 Fixup function handles registration + */ +static int ambapp_dev_register_fixup(struct ambapp_dev *dev, struct ambapp_dev_reg_struct *p) +{ + /* GR740 GRPCI2 speciality: + * - In the GR740 the APB_SLV is detected before the AHB_SLV + * which makes the registration incorrect. We deal with it in + * this function. */ + if ( (dev->dev_type == DEV_APB_SLV) && + (dev->device == GAISLER_GRPCI2) && + (dev->vendor == VENDOR_GAISLER) && + (p->ahb_slv == NULL) ) { + DBG("GRPCI2 APB_SLV detected before AHB_SLV. Skipping APB_SLV registration.\n"); + return 1; + } + return 0; +} + /* Register one AMBA device */ static int ambapp_dev_register(struct ambapp_dev *dev, int index, void *arg) { @@ -615,6 +636,11 @@ static int ambapp_dev_register(struct ambapp_dev *dev, int index, void *arg) DBG("Found [%d:%x:%x], %s\n", index, dev->vendor, dev->device, type); #endif + /* Fixup for device registration */ + if (ambapp_dev_register_fixup(dev, p)){ + return 0; + } + if ( dev->dev_type == DEV_AHB_MST ) { if ( p->ahb_mst ) { /* This should not happen */ |