summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Rubini <rubini@gnudd.com>2014-01-30 13:05:20 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-02-15 11:51:04 -0800
commit83b1bfba100c1e747c281049255a4a32197c6393 (patch)
tree3479503e77a84d88a969067017e630699e37a04e
parente4d6c4b79cc189c1b0d65f8e3875c4411e097bee (diff)
FMC: show_sdb_tree: fix offset calculation
The code reported wrong addresses in the sdb dumps. All sdb addresses are relative, but the code was adding the base address twice. Bug exposed by a gateware image with two bridge levels. Thanks David for reporting the problem. Signed-off-by: Alessandro Rubini <rubini@gnudd.com> Reported-by: Juan David Gonzalez Cobas <dcobas@cern.ch> Tested-by: Juan David Gonzalez Cobas <dcobas@cern.ch> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/fmc/fmc-sdb.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/fmc/fmc-sdb.c b/drivers/fmc/fmc-sdb.c
index 79adc39221ea..69f42d70bc74 100644
--- a/drivers/fmc/fmc-sdb.c
+++ b/drivers/fmc/fmc-sdb.c
@@ -153,20 +153,17 @@ EXPORT_SYMBOL(fmc_reprogram);
static void __fmc_show_sdb_tree(const struct fmc_device *fmc,
const struct sdb_array *arr)
{
+ unsigned long base = arr->baseaddr;
int i, j, n = arr->len, level = arr->level;
- const struct sdb_array *ap;
for (i = 0; i < n; i++) {
- unsigned long base;
union sdb_record *r;
struct sdb_product *p;
struct sdb_component *c;
r = &arr->record[i];
c = &r->dev.sdb_component;
p = &c->product;
- base = 0;
- for (ap = arr; ap; ap = ap->parent)
- base += ap->baseaddr;
+
dev_info(&fmc->dev, "SDB: ");
for (j = 0; j < level; j++)