diff options
| -rw-r--r-- | drivers/bcma/driver_chipcommon_sflash.c | 1 | ||||
| -rw-r--r-- | drivers/mtd/devices/bcm47xxsflash.c | 29 | ||||
| -rw-r--r-- | drivers/mtd/devices/bcm47xxsflash.h | 3 | ||||
| -rw-r--r-- | include/linux/bcma/bcma_driver_chipcommon.h | 1 |
4 files changed, 26 insertions, 8 deletions
diff --git a/drivers/bcma/driver_chipcommon_sflash.c b/drivers/bcma/driver_chipcommon_sflash.c index 04d706ca5f43..35b13a08ca3e 100644 --- a/drivers/bcma/driver_chipcommon_sflash.c +++ b/drivers/bcma/driver_chipcommon_sflash.c | |||
| @@ -146,7 +146,6 @@ int bcma_sflash_init(struct bcma_drv_cc *cc) | |||
| 146 | return -ENOTSUPP; | 146 | return -ENOTSUPP; |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | sflash->window = BCMA_SOC_FLASH2; | ||
| 150 | sflash->blocksize = e->blocksize; | 149 | sflash->blocksize = e->blocksize; |
| 151 | sflash->numblocks = e->numblocks; | 150 | sflash->numblocks = e->numblocks; |
| 152 | sflash->size = sflash->blocksize * sflash->numblocks; | 151 | sflash->size = sflash->blocksize * sflash->numblocks; |
diff --git a/drivers/mtd/devices/bcm47xxsflash.c b/drivers/mtd/devices/bcm47xxsflash.c index 347bb83db864..1c65c15b31a1 100644 --- a/drivers/mtd/devices/bcm47xxsflash.c +++ b/drivers/mtd/devices/bcm47xxsflash.c | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #include <linux/module.h> | 2 | #include <linux/module.h> |
| 3 | #include <linux/slab.h> | 3 | #include <linux/slab.h> |
| 4 | #include <linux/delay.h> | 4 | #include <linux/delay.h> |
| 5 | #include <linux/ioport.h> | ||
| 5 | #include <linux/mtd/mtd.h> | 6 | #include <linux/mtd/mtd.h> |
| 6 | #include <linux/platform_device.h> | 7 | #include <linux/platform_device.h> |
| 7 | #include <linux/bcma/bcma.h> | 8 | #include <linux/bcma/bcma.h> |
| @@ -109,8 +110,7 @@ static int bcm47xxsflash_read(struct mtd_info *mtd, loff_t from, size_t len, | |||
| 109 | if ((from + len) > mtd->size) | 110 | if ((from + len) > mtd->size) |
| 110 | return -EINVAL; | 111 | return -EINVAL; |
| 111 | 112 | ||
| 112 | memcpy_fromio(buf, (void __iomem *)KSEG0ADDR(b47s->window + from), | 113 | memcpy_fromio(buf, b47s->window + from, len); |
| 113 | len); | ||
| 114 | *retlen = len; | 114 | *retlen = len; |
| 115 | 115 | ||
| 116 | return len; | 116 | return len; |
| @@ -275,15 +275,33 @@ static void bcm47xxsflash_bcma_cc_write(struct bcm47xxsflash *b47s, u16 offset, | |||
| 275 | 275 | ||
| 276 | static int bcm47xxsflash_bcma_probe(struct platform_device *pdev) | 276 | static int bcm47xxsflash_bcma_probe(struct platform_device *pdev) |
| 277 | { | 277 | { |
| 278 | struct bcma_sflash *sflash = dev_get_platdata(&pdev->dev); | 278 | struct device *dev = &pdev->dev; |
| 279 | struct bcma_sflash *sflash = dev_get_platdata(dev); | ||
| 279 | struct bcm47xxsflash *b47s; | 280 | struct bcm47xxsflash *b47s; |
| 281 | struct resource *res; | ||
| 280 | int err; | 282 | int err; |
| 281 | 283 | ||
| 282 | b47s = devm_kzalloc(&pdev->dev, sizeof(*b47s), GFP_KERNEL); | 284 | b47s = devm_kzalloc(dev, sizeof(*b47s), GFP_KERNEL); |
| 283 | if (!b47s) | 285 | if (!b47s) |
| 284 | return -ENOMEM; | 286 | return -ENOMEM; |
| 285 | sflash->priv = b47s; | 287 | sflash->priv = b47s; |
| 286 | 288 | ||
| 289 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 290 | if (!res) { | ||
| 291 | dev_err(dev, "invalid resource\n"); | ||
| 292 | return -EINVAL; | ||
| 293 | } | ||
| 294 | if (!devm_request_mem_region(dev, res->start, resource_size(res), | ||
| 295 | res->name)) { | ||
| 296 | dev_err(dev, "can't request region for resource %pR\n", res); | ||
| 297 | return -EBUSY; | ||
| 298 | } | ||
| 299 | b47s->window = ioremap_cache(res->start, resource_size(res)); | ||
| 300 | if (!b47s->window) { | ||
| 301 | dev_err(dev, "ioremap failed for resource %pR\n", res); | ||
| 302 | return -ENOMEM; | ||
| 303 | } | ||
| 304 | |||
| 287 | b47s->bcma_cc = container_of(sflash, struct bcma_drv_cc, sflash); | 305 | b47s->bcma_cc = container_of(sflash, struct bcma_drv_cc, sflash); |
| 288 | b47s->cc_read = bcm47xxsflash_bcma_cc_read; | 306 | b47s->cc_read = bcm47xxsflash_bcma_cc_read; |
| 289 | b47s->cc_write = bcm47xxsflash_bcma_cc_write; | 307 | b47s->cc_write = bcm47xxsflash_bcma_cc_write; |
| @@ -297,7 +315,6 @@ static int bcm47xxsflash_bcma_probe(struct platform_device *pdev) | |||
| 297 | break; | 315 | break; |
| 298 | } | 316 | } |
| 299 | 317 | ||
| 300 | b47s->window = sflash->window; | ||
| 301 | b47s->blocksize = sflash->blocksize; | 318 | b47s->blocksize = sflash->blocksize; |
| 302 | b47s->numblocks = sflash->numblocks; | 319 | b47s->numblocks = sflash->numblocks; |
| 303 | b47s->size = sflash->size; | 320 | b47s->size = sflash->size; |
| @@ -306,6 +323,7 @@ static int bcm47xxsflash_bcma_probe(struct platform_device *pdev) | |||
| 306 | err = mtd_device_parse_register(&b47s->mtd, probes, NULL, NULL, 0); | 323 | err = mtd_device_parse_register(&b47s->mtd, probes, NULL, NULL, 0); |
| 307 | if (err) { | 324 | if (err) { |
| 308 | pr_err("Failed to register MTD device: %d\n", err); | 325 | pr_err("Failed to register MTD device: %d\n", err); |
| 326 | iounmap(b47s->window); | ||
| 309 | return err; | 327 | return err; |
| 310 | } | 328 | } |
| 311 | 329 | ||
| @@ -321,6 +339,7 @@ static int bcm47xxsflash_bcma_remove(struct platform_device *pdev) | |||
| 321 | struct bcm47xxsflash *b47s = sflash->priv; | 339 | struct bcm47xxsflash *b47s = sflash->priv; |
| 322 | 340 | ||
| 323 | mtd_device_unregister(&b47s->mtd); | 341 | mtd_device_unregister(&b47s->mtd); |
| 342 | iounmap(b47s->window); | ||
| 324 | 343 | ||
| 325 | return 0; | 344 | return 0; |
| 326 | } | 345 | } |
diff --git a/drivers/mtd/devices/bcm47xxsflash.h b/drivers/mtd/devices/bcm47xxsflash.h index fe93daf4f489..1564b62b412e 100644 --- a/drivers/mtd/devices/bcm47xxsflash.h +++ b/drivers/mtd/devices/bcm47xxsflash.h | |||
| @@ -65,7 +65,8 @@ struct bcm47xxsflash { | |||
| 65 | 65 | ||
| 66 | enum bcm47xxsflash_type type; | 66 | enum bcm47xxsflash_type type; |
| 67 | 67 | ||
| 68 | u32 window; | 68 | void __iomem *window; |
| 69 | |||
| 69 | u32 blocksize; | 70 | u32 blocksize; |
| 70 | u16 numblocks; | 71 | u16 numblocks; |
| 71 | u32 size; | 72 | u32 size; |
diff --git a/include/linux/bcma/bcma_driver_chipcommon.h b/include/linux/bcma/bcma_driver_chipcommon.h index 846513c73606..a5ac2cad5cb7 100644 --- a/include/linux/bcma/bcma_driver_chipcommon.h +++ b/include/linux/bcma/bcma_driver_chipcommon.h | |||
| @@ -587,7 +587,6 @@ struct mtd_info; | |||
| 587 | 587 | ||
| 588 | struct bcma_sflash { | 588 | struct bcma_sflash { |
| 589 | bool present; | 589 | bool present; |
| 590 | u32 window; | ||
| 591 | u32 blocksize; | 590 | u32 blocksize; |
| 592 | u16 numblocks; | 591 | u16 numblocks; |
| 593 | u32 size; | 592 | u32 size; |
