Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

FMC: show_sdb_tree: dump synthesis/commit ID info

This completes the show_sdb_tree functionality, with the
new informative fields. The output for a verbose module is now
like this (long lines are unavoidable):

SDB: 00000651:e6a542c9 WB4-Crossbar-GSI
SDB: 0000ce42:00000601 WB-DMA.Control (00001000-0000103f)
SDB: 0000ce42:779c5443 WB-OneWire-Master (00001100-000011ff)
SDB: 0000ce42:00000603 WB-SPEC-CSR (00001200-0000121f)
SDB: 0000ce42:00000013 WB-VIC-Int.Control (00001300-000013ff)
SDB: 0000ce42:d5735ab4 WB-DMA.EIC (00001400-0000140f)
SDB: 00000651:eef0b198 WB4-Bridge-GSI (bridge: 00002000)
SDB: 00000651:e6a542c9 WB4-Crossbar-GSI
SDB: 0000ce42:123c5443 WB-I2C-Master (00003000-000030ff)
SDB: 0000ce42:e503947e WB-SPI.Control (00003100-0000311f)
SDB: 0000ce42:123c5443 WB-I2C-Master (00003200-000032ff)
SDB: 0000ce42:00000608 WB-FMC-ADC-Core (00003300-0000337f)
SDB: 0000ce42:779c5443 WB-OneWire-Master (00003400-000034ff)
SDB: 0000ce42:26ec6086 WB-FMC-ADC.EIC (00003500-0000350f)
SDB: 0000ce42:00000604 WB-Timetag-Core (00003600-0000367f)
SDB: Synthesis repository: git://ohwr.org/fmc-projects/fmc-adc-100m14b4cha.git
SDB: Bitstream 'spec_top_fmc_adcmc-projects/fmc-adc-100m14b4cha.git' \
synthesized 20140116 by mcattin (ISE version 133), commit f0a539dffe6d

Signed-off-by: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
Acked-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Juan David Gonzalez Cobas <dcobas@cern.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Alessandro Rubini and committed by
Greg Kroah-Hartman
2e70efd9 5c9a8736

+32 -4
+30 -4
drivers/fmc/fmc-sdb.c
··· 150 150 } 151 151 EXPORT_SYMBOL(fmc_reprogram); 152 152 153 + static char *__strip_trailing_space(char *buf, char *str, int len) 154 + { 155 + int i = len - 1; 156 + 157 + memcpy(buf, str, len); 158 + while(i >= 0 && buf[i] == ' ') 159 + buf[i--] = '\0'; 160 + return buf; 161 + } 162 + 163 + #define __sdb_string(buf, field) ({ \ 164 + BUILD_BUG_ON(sizeof(buf) < sizeof(field)); \ 165 + __strip_trailing_space(buf, (void *)(field), sizeof(field)); \ 166 + }) 167 + 153 168 static void __fmc_show_sdb_tree(const struct fmc_device *fmc, 154 169 const struct sdb_array *arr) 155 170 { 156 171 unsigned long base = arr->baseaddr; 157 172 int i, j, n = arr->len, level = arr->level; 173 + char buf[64]; 158 174 159 175 for (i = 0; i < n; i++) { 160 176 union sdb_record *r; ··· 206 190 p->name, 207 191 __be64_to_cpu(c->addr_first) + base); 208 192 if (IS_ERR(arr->subtree[i])) { 209 - printk(KERN_CONT "(bridge error %li)\n", 210 - PTR_ERR(arr->subtree[i])); 193 + dev_info(&fmc->dev, "SDB: (bridge error %li)\n", 194 + PTR_ERR(arr->subtree[i])); 211 195 break; 212 196 } 213 197 __fmc_show_sdb_tree(fmc, arr->subtree[i]); ··· 216 200 printk(KERN_CONT "integration\n"); 217 201 break; 218 202 case sdb_type_repo_url: 219 - printk(KERN_CONT "repo-url\n"); 203 + printk(KERN_CONT "Synthesis repository: %s\n", 204 + __sdb_string(buf, r->repo_url.repo_url)); 220 205 break; 221 206 case sdb_type_synthesis: 222 - printk(KERN_CONT "synthesis-info\n"); 207 + printk(KERN_CONT "Bitstream '%s' ", 208 + __sdb_string(buf, r->synthesis.syn_name)); 209 + printk(KERN_CONT "synthesized %08x by %s ", 210 + __be32_to_cpu(r->synthesis.date), 211 + __sdb_string(buf, r->synthesis.user_name)); 212 + printk(KERN_CONT "(%s version %x), ", 213 + __sdb_string(buf, r->synthesis.tool_name), 214 + __be32_to_cpu(r->synthesis.tool_version)); 215 + printk(KERN_CONT "commit %pm\n", 216 + r->synthesis.commit_id); 223 217 break; 224 218 case sdb_type_empty: 225 219 printk(KERN_CONT "empty\n");
+2
include/linux/fmc-sdb.h
··· 14 14 struct sdb_bridge bridge; 15 15 struct sdb_integration integr; 16 16 struct sdb_empty empty; 17 + struct sdb_synthesis synthesis; 18 + struct sdb_repo_url repo_url; 17 19 }; 18 20 19 21 struct fmc_device;