diff options
author | Chuanxiao Dong <chuanxiao.dong@intel.com> | 2010-08-09 06:37:00 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2010-08-10 19:28:36 -0400 |
commit | 5c0eb90094d64d56df8be23bb75d48e63c96c180 (patch) | |
tree | 042de2a2382a341e82fa80d9a3431af232f22623 | |
parent | e8a89cebdbaab14caaa26debdb4ffd493b8831af (diff) |
nand/denali: Fixed probe function bugs
Fixed a pci_resource_len function error;
Changed returning sequence of probe function;
Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r-- | drivers/mtd/nand/denali.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c index 618fb42b86b0..ab960efb67f0 100644 --- a/drivers/mtd/nand/denali.c +++ b/drivers/mtd/nand/denali.c | |||
@@ -1536,7 +1536,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1536 | ret = pci_enable_device(dev); | 1536 | ret = pci_enable_device(dev); |
1537 | if (ret) { | 1537 | if (ret) { |
1538 | printk(KERN_ERR "Spectra: pci_enable_device failed.\n"); | 1538 | printk(KERN_ERR "Spectra: pci_enable_device failed.\n"); |
1539 | goto failed_enable; | 1539 | goto failed_alloc_memery; |
1540 | } | 1540 | } |
1541 | 1541 | ||
1542 | if (id->driver_data == INTEL_CE4100) { | 1542 | if (id->driver_data == INTEL_CE4100) { |
@@ -1547,7 +1547,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1547 | printk(KERN_ERR "Intel CE4100 only supports" | 1547 | printk(KERN_ERR "Intel CE4100 only supports" |
1548 | " ONFI timing mode 1 or below\n"); | 1548 | " ONFI timing mode 1 or below\n"); |
1549 | ret = -EINVAL; | 1549 | ret = -EINVAL; |
1550 | goto failed_enable; | 1550 | goto failed_enable_dev; |
1551 | } | 1551 | } |
1552 | denali->platform = INTEL_CE4100; | 1552 | denali->platform = INTEL_CE4100; |
1553 | mem_base = pci_resource_start(dev, 0); | 1553 | mem_base = pci_resource_start(dev, 0); |
@@ -1557,7 +1557,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1557 | } else { | 1557 | } else { |
1558 | denali->platform = INTEL_MRST; | 1558 | denali->platform = INTEL_MRST; |
1559 | csr_base = pci_resource_start(dev, 0); | 1559 | csr_base = pci_resource_start(dev, 0); |
1560 | csr_len = pci_resource_start(dev, 0); | 1560 | csr_len = pci_resource_len(dev, 0); |
1561 | mem_base = pci_resource_start(dev, 1); | 1561 | mem_base = pci_resource_start(dev, 1); |
1562 | mem_len = pci_resource_len(dev, 1); | 1562 | mem_len = pci_resource_len(dev, 1); |
1563 | if (!mem_len) { | 1563 | if (!mem_len) { |
@@ -1576,7 +1576,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1576 | 1576 | ||
1577 | if (ret) { | 1577 | if (ret) { |
1578 | printk(KERN_ERR "Spectra: no usable DMA configuration\n"); | 1578 | printk(KERN_ERR "Spectra: no usable DMA configuration\n"); |
1579 | goto failed_enable; | 1579 | goto failed_enable_dev; |
1580 | } | 1580 | } |
1581 | denali->buf.dma_buf = | 1581 | denali->buf.dma_buf = |
1582 | pci_map_single(dev, denali->buf.buf, | 1582 | pci_map_single(dev, denali->buf.buf, |
@@ -1585,7 +1585,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1585 | 1585 | ||
1586 | if (pci_dma_mapping_error(dev, denali->buf.dma_buf)) { | 1586 | if (pci_dma_mapping_error(dev, denali->buf.dma_buf)) { |
1587 | printk(KERN_ERR "Spectra: failed to map DMA buffer\n"); | 1587 | printk(KERN_ERR "Spectra: failed to map DMA buffer\n"); |
1588 | goto failed_enable; | 1588 | goto failed_enable_dev; |
1589 | } | 1589 | } |
1590 | 1590 | ||
1591 | pci_set_master(dev); | 1591 | pci_set_master(dev); |
@@ -1594,14 +1594,14 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1594 | ret = pci_request_regions(dev, DENALI_NAND_NAME); | 1594 | ret = pci_request_regions(dev, DENALI_NAND_NAME); |
1595 | if (ret) { | 1595 | if (ret) { |
1596 | printk(KERN_ERR "Spectra: Unable to request memory regions\n"); | 1596 | printk(KERN_ERR "Spectra: Unable to request memory regions\n"); |
1597 | goto failed_req_csr; | 1597 | goto failed_dma_map; |
1598 | } | 1598 | } |
1599 | 1599 | ||
1600 | denali->flash_reg = ioremap_nocache(csr_base, csr_len); | 1600 | denali->flash_reg = ioremap_nocache(csr_base, csr_len); |
1601 | if (!denali->flash_reg) { | 1601 | if (!denali->flash_reg) { |
1602 | printk(KERN_ERR "Spectra: Unable to remap memory region\n"); | 1602 | printk(KERN_ERR "Spectra: Unable to remap memory region\n"); |
1603 | ret = -ENOMEM; | 1603 | ret = -ENOMEM; |
1604 | goto failed_remap_csr; | 1604 | goto failed_req_regions; |
1605 | } | 1605 | } |
1606 | nand_dbg_print(NAND_DBG_DEBUG, "Spectra: CSR 0x%08Lx -> 0x%p (0x%lx)\n", | 1606 | nand_dbg_print(NAND_DBG_DEBUG, "Spectra: CSR 0x%08Lx -> 0x%p (0x%lx)\n", |
1607 | (uint64_t)csr_base, denali->flash_reg, csr_len); | 1607 | (uint64_t)csr_base, denali->flash_reg, csr_len); |
@@ -1609,9 +1609,8 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1609 | denali->flash_mem = ioremap_nocache(mem_base, mem_len); | 1609 | denali->flash_mem = ioremap_nocache(mem_base, mem_len); |
1610 | if (!denali->flash_mem) { | 1610 | if (!denali->flash_mem) { |
1611 | printk(KERN_ERR "Spectra: ioremap_nocache failed!"); | 1611 | printk(KERN_ERR "Spectra: ioremap_nocache failed!"); |
1612 | iounmap(denali->flash_reg); | ||
1613 | ret = -ENOMEM; | 1612 | ret = -ENOMEM; |
1614 | goto failed_remap_csr; | 1613 | goto failed_remap_reg; |
1615 | } | 1614 | } |
1616 | 1615 | ||
1617 | nand_dbg_print(NAND_DBG_WARN, | 1616 | nand_dbg_print(NAND_DBG_WARN, |
@@ -1627,7 +1626,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1627 | DENALI_NAND_NAME, denali)) { | 1626 | DENALI_NAND_NAME, denali)) { |
1628 | printk(KERN_ERR "Spectra: Unable to allocate IRQ\n"); | 1627 | printk(KERN_ERR "Spectra: Unable to allocate IRQ\n"); |
1629 | ret = -ENODEV; | 1628 | ret = -ENODEV; |
1630 | goto failed_request_irq; | 1629 | goto failed_remap_mem; |
1631 | } | 1630 | } |
1632 | 1631 | ||
1633 | /* now that our ISR is registered, we can enable interrupts */ | 1632 | /* now that our ISR is registered, we can enable interrupts */ |
@@ -1664,7 +1663,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1664 | * with the nand subsystem */ | 1663 | * with the nand subsystem */ |
1665 | if (nand_scan_ident(&denali->mtd, LLD_MAX_FLASH_BANKS, NULL)) { | 1664 | if (nand_scan_ident(&denali->mtd, LLD_MAX_FLASH_BANKS, NULL)) { |
1666 | ret = -ENXIO; | 1665 | ret = -ENXIO; |
1667 | goto failed_nand; | 1666 | goto failed_req_irq; |
1668 | } | 1667 | } |
1669 | 1668 | ||
1670 | /* MTD supported page sizes vary by kernel. We validate our | 1669 | /* MTD supported page sizes vary by kernel. We validate our |
@@ -1674,7 +1673,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1674 | ret = -ENODEV; | 1673 | ret = -ENODEV; |
1675 | printk(KERN_ERR "Spectra: device size not supported by this " | 1674 | printk(KERN_ERR "Spectra: device size not supported by this " |
1676 | "version of MTD."); | 1675 | "version of MTD."); |
1677 | goto failed_nand; | 1676 | goto failed_req_irq; |
1678 | } | 1677 | } |
1679 | 1678 | ||
1680 | /* support for multi nand | 1679 | /* support for multi nand |
@@ -1725,7 +1724,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1725 | ECC_SECTOR_SIZE))) { | 1724 | ECC_SECTOR_SIZE))) { |
1726 | printk(KERN_ERR "Your NAND chip OOB is not large enough to" | 1725 | printk(KERN_ERR "Your NAND chip OOB is not large enough to" |
1727 | " contain 8bit ECC correction codes"); | 1726 | " contain 8bit ECC correction codes"); |
1728 | goto failed_nand; | 1727 | goto failed_req_irq; |
1729 | } else { | 1728 | } else { |
1730 | denali->nand.ecc.layout = &nand_8bit_oob; | 1729 | denali->nand.ecc.layout = &nand_8bit_oob; |
1731 | denali->nand.ecc.bytes = ECC_8BITS; | 1730 | denali->nand.ecc.bytes = ECC_8BITS; |
@@ -1769,28 +1768,31 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
1769 | 1768 | ||
1770 | if (nand_scan_tail(&denali->mtd)) { | 1769 | if (nand_scan_tail(&denali->mtd)) { |
1771 | ret = -ENXIO; | 1770 | ret = -ENXIO; |
1772 | goto failed_nand; | 1771 | goto failed_req_irq; |
1773 | } | 1772 | } |
1774 | 1773 | ||
1775 | ret = add_mtd_device(&denali->mtd); | 1774 | ret = add_mtd_device(&denali->mtd); |
1776 | if (ret) { | 1775 | if (ret) { |
1777 | printk(KERN_ERR "Spectra: Failed to register" | 1776 | printk(KERN_ERR "Spectra: Failed to register" |
1778 | " MTD device: %d\n", ret); | 1777 | " MTD device: %d\n", ret); |
1779 | goto failed_nand; | 1778 | goto failed_req_irq; |
1780 | } | 1779 | } |
1781 | return 0; | 1780 | return 0; |
1782 | 1781 | ||
1783 | failed_nand: | 1782 | failed_req_irq: |
1784 | denali_irq_cleanup(dev->irq, denali); | 1783 | denali_irq_cleanup(dev->irq, denali); |
1785 | failed_request_irq: | 1784 | failed_remap_mem: |
1786 | iounmap(denali->flash_reg); | ||
1787 | iounmap(denali->flash_mem); | 1785 | iounmap(denali->flash_mem); |
1788 | failed_remap_csr: | 1786 | failed_remap_reg: |
1787 | iounmap(denali->flash_reg); | ||
1788 | failed_req_regions: | ||
1789 | pci_release_regions(dev); | 1789 | pci_release_regions(dev); |
1790 | failed_req_csr: | 1790 | failed_dma_map: |
1791 | pci_unmap_single(dev, denali->buf.dma_buf, DENALI_BUF_SIZE, | 1791 | pci_unmap_single(dev, denali->buf.dma_buf, DENALI_BUF_SIZE, |
1792 | PCI_DMA_BIDIRECTIONAL); | 1792 | PCI_DMA_BIDIRECTIONAL); |
1793 | failed_enable: | 1793 | failed_enable_dev: |
1794 | pci_disable_device(dev); | ||
1795 | failed_alloc_memery: | ||
1794 | kfree(denali); | 1796 | kfree(denali); |
1795 | return ret; | 1797 | return ret; |
1796 | } | 1798 | } |