bcm53xx: sprom: extract for PCI host

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 44464
This commit is contained in:
Rafał Miłecki 2015-02-16 16:13:23 +00:00
parent 4c98253648
commit 44253d311f
1 changed files with 31 additions and 0 deletions

View File

@ -644,6 +644,30 @@ static int bcm47xx_sprom_getenv(const struct bcm47xx_sprom_fill *fill,
/* FIXME: This should not be static, but some callback argument */
static struct platform_device *sprom_pdev = NULL;
static char prefix[20];
static void bcm47xx_sprom_apply_prefix_alias(char *prefix, size_t prefix_len)
{
size_t needle_len = strlen(prefix) - 1;
char nvram_var[10];
char buf[20];
int i;
if (needle_len <= 0 || prefix[needle_len] != '/')
return;
for (i = 0; i < 3; i++) {
if (snprintf(nvram_var, sizeof(nvram_var), "devpath%d", i) <= 0)
continue;
if (bcm47xx_nvram_getenv(nvram_var, buf, sizeof(buf)) < 0)
continue;
if (strlen(buf) == needle_len && !strncmp(buf, prefix, needle_len)) {
snprintf(prefix, prefix_len, "%d:", i);
return;
}
}
}
/*
* This function has to be called in a very precise moment. It has to be done:
* 1) After bcma registers flash cores, so we can read NVRAM.
@ -674,6 +698,13 @@ static int bcm47xx_sprom_init(struct bcma_bus *bus, struct ssb_sprom *out)
return -ENOMEM;
switch (bus->hosttype) {
case BCMA_HOSTTYPE_PCI:
snprintf(prefix, sizeof(prefix), "pci/%u/%u/",
pci_domain_nr(bus->host_pci->bus) + 1,
bus->host_pci->bus->number);
bcm47xx_sprom_apply_prefix_alias(prefix, sizeof(prefix));
fill.prefix = prefix;
break;
case BCMA_HOSTTYPE_SOC:
fill.prefix = of_get_property(np, "prefix", NULL);
break;