1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- From d55a52ccf8f80cdf51af2c5c6e56c825f98c4f85 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
- Date: Thu, 2 Apr 2015 09:13:49 +0200
- Subject: [PATCH] MIPS: BCM47xx: Add generic function filling SPROM entries
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- Handling many SPROM revisions became messy, we have tons of functions
- specific to various revision groups which are quite hard to track.
- For years there is yet another revision 11 asking for support, but
- adding it in current the form would make things even worse.
- To resolve this problem let's add new function with table-like entries
- that will contain revision bitmask for every SPROM variable.
- Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
- Cc: linux-mips@linux-mips.org
- Cc: Hauke Mehrtens <hauke@hauke-m.de>
- Cc: Jonas Gorski <jonas.gorski@gmail.com>
- Patchwork: https://patchwork.linux-mips.org/patch/9659/
- Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
- ---
- arch/mips/bcm47xx/sprom.c | 32 +++++++++++++++++++++++++++++---
- 1 file changed, 29 insertions(+), 3 deletions(-)
- --- a/arch/mips/bcm47xx/sprom.c
- +++ b/arch/mips/bcm47xx/sprom.c
- @@ -180,6 +180,33 @@ static void nvram_read_alpha2(const char
- memcpy(val, buf, 2);
- }
-
- +/* This is one-function-only macro, it uses local "sprom" variable! */
- +#define ENTRY(_revmask, _type, _prefix, _name, _val, _allset, _fallback) \
- + if (_revmask & BIT(sprom->revision)) \
- + nvram_read_ ## _type(_prefix, NULL, _name, &sprom->_val, \
- + _allset, _fallback)
- +/*
- + * Special version of filling function that can be safely called for any SPROM
- + * revision. For every NVRAM to SPROM mapping it contains bitmask of revisions
- + * for which the mapping is valid.
- + * It obviously requires some hexadecimal/bitmasks knowledge, but allows
- + * writing cleaner code (easy revisions handling).
- + * Note that while SPROM revision 0 was never used, we still keep BIT(0)
- + * reserved for it, just to keep numbering sane.
- + */
- +static void bcm47xx_sprom_fill_auto(struct ssb_sprom *sprom,
- + const char *prefix, bool fallback)
- +{
- + const char *pre = prefix;
- + bool fb = fallback;
- +
- + ENTRY(0xfffffffe, u16, pre, "boardrev", board_rev, 0, true);
- + ENTRY(0xfffffffe, u16, pre, "boardnum", board_num, 0, fb);
- +
- + /* TODO: Move more mappings here */
- +}
- +#undef ENTRY /* It's specififc, uses local variable, don't use it (again). */
- +
- static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom,
- const char *prefix, bool fallback)
- {
- @@ -714,9 +741,6 @@ static void bcm47xx_fill_sprom_ethernet(
- static void bcm47xx_fill_board_data(struct ssb_sprom *sprom, const char *prefix,
- bool fallback)
- {
- - nvram_read_u16(prefix, NULL, "boardrev", &sprom->board_rev, 0, true);
- - nvram_read_u16(prefix, NULL, "boardnum", &sprom->board_num, 0,
- - fallback);
- nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0, true);
- nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
- &sprom->boardflags_hi, fallback);
- @@ -787,6 +811,8 @@ void bcm47xx_fill_sprom(struct ssb_sprom
- bcm47xx_fill_sprom_r12389(sprom, prefix, fallback);
- bcm47xx_fill_sprom_r1(sprom, prefix, fallback);
- }
- +
- + bcm47xx_sprom_fill_auto(sprom, prefix, fallback);
- }
-
- #ifdef CONFIG_BCM47XX_SSB
|