diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2015-01-16 12:48:27 +0000 |
---|---|---|
committer | Rafał Miłecki <zajec5@gmail.com> | 2015-01-16 12:48:27 +0000 |
commit | 3bdf05441aa8e7df8e41793eff8a9bbd50c5f153 (patch) | |
tree | 0c169fc1a9842639eacd6173cac51d45e3916a55 /target/linux/brcm47xx/patches-3.18/030-MIPS-BCM47XX-Get-rid-of-calls-to-KSEG1ADDR.patch | |
parent | 8a103d5c56e7ef007816bdc2cace883a611bfcb3 (diff) | |
download | upstream-3bdf05441aa8e7df8e41793eff8a9bbd50c5f153.tar.gz upstream-3bdf05441aa8e7df8e41793eff8a9bbd50c5f153.tar.bz2 upstream-3bdf05441aa8e7df8e41793eff8a9bbd50c5f153.zip |
brcm47xx: backport BCM47XX arch patches (clean NVRAM code, later init)
SVN-Revision: 43979
Diffstat (limited to 'target/linux/brcm47xx/patches-3.18/030-MIPS-BCM47XX-Get-rid-of-calls-to-KSEG1ADDR.patch')
-rw-r--r-- | target/linux/brcm47xx/patches-3.18/030-MIPS-BCM47XX-Get-rid-of-calls-to-KSEG1ADDR.patch | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.18/030-MIPS-BCM47XX-Get-rid-of-calls-to-KSEG1ADDR.patch b/target/linux/brcm47xx/patches-3.18/030-MIPS-BCM47XX-Get-rid-of-calls-to-KSEG1ADDR.patch new file mode 100644 index 0000000000..4b2f6a27e2 --- /dev/null +++ b/target/linux/brcm47xx/patches-3.18/030-MIPS-BCM47XX-Get-rid-of-calls-to-KSEG1ADDR.patch @@ -0,0 +1,132 @@ +From 8d602dd0f984e8488ab891344ebdb6e1f3128c4a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> +Date: Wed, 3 Sep 2014 22:51:06 +0200 +Subject: [PATCH 154/158] MIPS: BCM47XX: Get rid of calls to KSEG1ADDR +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We should be using ioremap_nocache helper which handles remaps in a +smarter way. + +Signed-off-by: Rafał Miłecki <zajec5@gmail.com> +Cc: linux-mips@linux-mips.org +Cc: Hauke Mehrtens <hauke@hauke-m.de> +Patchwork: http://patchwork.linux-mips.org/patch/7611/ +Signed-off-by: Ralf Baechle <ralf@linux-mips.org> +--- + arch/mips/bcm47xx/nvram.c | 44 ++++++++++++++++++++++++++++++++------------ + 1 file changed, 32 insertions(+), 12 deletions(-) + +diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c +index 2bed73a..e07976b 100644 +--- a/arch/mips/bcm47xx/nvram.c ++++ b/arch/mips/bcm47xx/nvram.c +@@ -23,13 +23,13 @@ + static char nvram_buf[NVRAM_SPACE]; + static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000}; + +-static u32 find_nvram_size(u32 end) ++static u32 find_nvram_size(void __iomem *end) + { +- struct nvram_header *header; ++ struct nvram_header __iomem *header; + int i; + + for (i = 0; i < ARRAY_SIZE(nvram_sizes); i++) { +- header = (struct nvram_header *)KSEG1ADDR(end - nvram_sizes[i]); ++ header = (struct nvram_header *)(end - nvram_sizes[i]); + if (header->magic == NVRAM_HEADER) + return nvram_sizes[i]; + } +@@ -38,35 +38,39 @@ static u32 find_nvram_size(u32 end) + } + + /* Probe for NVRAM header */ +-static int nvram_find_and_copy(u32 base, u32 lim) ++static int nvram_find_and_copy(void __iomem *iobase, u32 lim) + { +- struct nvram_header *header; ++ struct nvram_header __iomem *header; + int i; + u32 off; + u32 *src, *dst; + u32 size; + ++ if (nvram_buf[0]) { ++ pr_warn("nvram already initialized\n"); ++ return -EEXIST; ++ } ++ + /* TODO: when nvram is on nand flash check for bad blocks first. */ + off = FLASH_MIN; + while (off <= lim) { + /* Windowed flash access */ +- size = find_nvram_size(base + off); ++ size = find_nvram_size(iobase + off); + if (size) { +- header = (struct nvram_header *)KSEG1ADDR(base + off - +- size); ++ header = (struct nvram_header *)(iobase + off - size); + goto found; + } + off <<= 1; + } + + /* Try embedded NVRAM at 4 KB and 1 KB as last resorts */ +- header = (struct nvram_header *) KSEG1ADDR(base + 4096); ++ header = (struct nvram_header *)(iobase + 4096); + if (header->magic == NVRAM_HEADER) { + size = NVRAM_SPACE; + goto found; + } + +- header = (struct nvram_header *) KSEG1ADDR(base + 1024); ++ header = (struct nvram_header *)(iobase + 1024); + if (header->magic == NVRAM_HEADER) { + size = NVRAM_SPACE; + goto found; +@@ -94,6 +98,22 @@ found: + return 0; + } + ++static int bcm47xx_nvram_init_from_mem(u32 base, u32 lim) ++{ ++ void __iomem *iobase; ++ int err; ++ ++ iobase = ioremap_nocache(base, lim); ++ if (!iobase) ++ return -ENOMEM; ++ ++ err = nvram_find_and_copy(iobase, lim); ++ ++ iounmap(iobase); ++ ++ return err; ++} ++ + #ifdef CONFIG_BCM47XX_SSB + static int nvram_init_ssb(void) + { +@@ -109,7 +129,7 @@ static int nvram_init_ssb(void) + return -ENXIO; + } + +- return nvram_find_and_copy(base, lim); ++ return bcm47xx_nvram_init_from_mem(base, lim); + } + #endif + +@@ -139,7 +159,7 @@ static int nvram_init_bcma(void) + return -ENXIO; + } + +- return nvram_find_and_copy(base, lim); ++ return bcm47xx_nvram_init_from_mem(base, lim); + } + #endif + +-- +1.8.4.5 + |