mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-12 02:42:48 +02:00
95 lines
3.1 KiB
Diff
95 lines
3.1 KiB
Diff
|
From 112b2e12edda60f495b57e8a1d85eb95e2662845 Mon Sep 17 00:00:00 2001
|
||
|
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||
|
Date: Thu, 16 Feb 2012 23:44:26 +0100
|
||
|
Subject: [PATCH 199/202] MIPS: BCM47XX: provide sprom to bcma bus
|
||
|
|
||
|
On SoCs the sprom is often stored in nvram in the flashchip. This patch
|
||
|
registers a sprom fallback callback handler in bcma and provides the
|
||
|
sprom needed for this device.
|
||
|
|
||
|
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||
|
---
|
||
|
arch/mips/bcm47xx/setup.c | 39 +++++++++++++++++++++++++++++++++++----
|
||
|
1 files changed, 35 insertions(+), 4 deletions(-)
|
||
|
|
||
|
--- a/arch/mips/bcm47xx/setup.c
|
||
|
+++ b/arch/mips/bcm47xx/setup.c
|
||
|
@@ -3,7 +3,7 @@
|
||
|
* Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
|
||
|
* Copyright (C) 2006 Michael Buesch <m@bues.ch>
|
||
|
* Copyright (C) 2010 Waldemar Brodkorb <wbx@openadk.org>
|
||
|
- * Copyright (C) 2010-2011 Hauke Mehrtens <hauke@hauke-m.de>
|
||
|
+ * Copyright (C) 2010-2012 Hauke Mehrtens <hauke@hauke-m.de>
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify it
|
||
|
* under the terms of the GNU General Public License as published by the
|
||
|
@@ -91,7 +91,7 @@ static void bcm47xx_machine_halt(void)
|
||
|
}
|
||
|
|
||
|
#ifdef CONFIG_BCM47XX_SSB
|
||
|
-static int bcm47xx_get_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
|
||
|
+static int bcm47xx_get_sprom_ssb(struct ssb_bus *bus, struct ssb_sprom *out)
|
||
|
{
|
||
|
char prefix[10];
|
||
|
|
||
|
@@ -108,7 +108,7 @@ static int bcm47xx_get_sprom(struct ssb_
|
||
|
}
|
||
|
|
||
|
static int bcm47xx_get_invariants(struct ssb_bus *bus,
|
||
|
- struct ssb_init_invariants *iv)
|
||
|
+ struct ssb_init_invariants *iv)
|
||
|
{
|
||
|
char buf[20];
|
||
|
|
||
|
@@ -163,7 +163,7 @@ static void __init bcm47xx_register_ssb(
|
||
|
char buf[100];
|
||
|
struct ssb_mipscore *mcore;
|
||
|
|
||
|
- err = ssb_arch_register_fallback_sprom(&bcm47xx_get_sprom);
|
||
|
+ err = ssb_arch_register_fallback_sprom(&bcm47xx_get_sprom_ssb);
|
||
|
if (err)
|
||
|
printk(KERN_WARNING "bcm47xx: someone else already registered"
|
||
|
" a ssb SPROM callback handler (err %d)\n", err);
|
||
|
@@ -197,10 +197,41 @@ static void __init bcm47xx_register_ssb(
|
||
|
#endif
|
||
|
|
||
|
#ifdef CONFIG_BCM47XX_BCMA
|
||
|
+static int bcm47xx_get_sprom_bcma(struct bcma_bus *bus, struct ssb_sprom *out)
|
||
|
+{
|
||
|
+ char prefix[10];
|
||
|
+ struct bcma_device *core;
|
||
|
+
|
||
|
+ if (bus->hosttype == BCMA_HOSTTYPE_PCI) {
|
||
|
+ snprintf(prefix, sizeof(prefix), "pci/%u/%u/",
|
||
|
+ bus->host_pci->bus->number + 1,
|
||
|
+ PCI_SLOT(bus->host_pci->devfn));
|
||
|
+ bcm47xx_fill_sprom(out, prefix);
|
||
|
+ return 0;
|
||
|
+ } else if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
|
||
|
+ bcm47xx_fill_sprom_ethernet(out, NULL);
|
||
|
+ core = bcma_find_core(bus, BCMA_CORE_80211);
|
||
|
+ if (core) {
|
||
|
+ snprintf(prefix, sizeof(prefix), "sb/%u/",
|
||
|
+ core->core_index);
|
||
|
+ bcm47xx_fill_sprom(out, prefix);
|
||
|
+ }
|
||
|
+ return 0;
|
||
|
+ } else {
|
||
|
+ printk(KERN_WARNING "bcm47xx: unable to fill SPROM for given bustype.\n");
|
||
|
+ return -EINVAL;
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
static void __init bcm47xx_register_bcma(void)
|
||
|
{
|
||
|
int err;
|
||
|
|
||
|
+ err = bcma_arch_register_fallback_sprom(&bcm47xx_get_sprom_bcma);
|
||
|
+ if (err)
|
||
|
+ printk(KERN_WARNING "bcm47xx: someone else already registered"
|
||
|
+ " a bcma SPROM callback handler (err %d)\n", err);
|
||
|
+
|
||
|
err = bcma_host_soc_register(&bcm47xx_bus.bcma);
|
||
|
if (err)
|
||
|
panic("Failed to initialize BCMA bus (err %d)\n", err);
|