Commit 57ba5fe9 authored by Matthew Wilcox's avatar Matthew Wilcox Committed by James Bottomley

[SCSI] advansys: ioremap no longer needs page-aligned addresses

At some point during Linux 2.1 development, ioremap() gained the ability
to handle addresses which weren't page-aligned.  Also expand the CONFIG_PCI
range to encompass that entire section of wide board initialisation, since
all wide boards are PCI.
Signed-off-by: default avatarMatthew Wilcox <matthew@wil.cx>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 59fcf844
...@@ -17090,8 +17090,6 @@ advansys_board_found(int iop, struct device *dev, int bus_type) ...@@ -17090,8 +17090,6 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
ASC_DVC_VAR *asc_dvc_varp = NULL; ASC_DVC_VAR *asc_dvc_varp = NULL;
ADV_DVC_VAR *adv_dvc_varp = NULL; ADV_DVC_VAR *adv_dvc_varp = NULL;
int share_irq; int share_irq;
int iolen = 0;
ADV_PADDR pci_memory_address;
int warn_code, err_code; int warn_code, err_code;
int ret; int ret;
...@@ -17136,13 +17134,13 @@ advansys_board_found(int iop, struct device *dev, int bus_type) ...@@ -17136,13 +17134,13 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
asc_dvc_varp->iop_base = iop; asc_dvc_varp->iop_base = iop;
asc_dvc_varp->isr_callback = asc_isr_callback; asc_dvc_varp->isr_callback = asc_isr_callback;
} else { } else {
#ifdef CONFIG_PCI
ASC_DBG(1, "advansys_board_found: wide board\n"); ASC_DBG(1, "advansys_board_found: wide board\n");
adv_dvc_varp = &boardp->dvc_var.adv_dvc_var; adv_dvc_varp = &boardp->dvc_var.adv_dvc_var;
adv_dvc_varp->drv_ptr = boardp; adv_dvc_varp->drv_ptr = boardp;
adv_dvc_varp->cfg = &boardp->dvc_cfg.adv_dvc_cfg; adv_dvc_varp->cfg = &boardp->dvc_cfg.adv_dvc_cfg;
adv_dvc_varp->isr_callback = adv_isr_callback; adv_dvc_varp->isr_callback = adv_isr_callback;
adv_dvc_varp->async_callback = adv_async_callback; adv_dvc_varp->async_callback = adv_async_callback;
#ifdef CONFIG_PCI
if (pdev->device == PCI_DEVICE_ID_ASP_ABP940UW) { if (pdev->device == PCI_DEVICE_ID_ASP_ABP940UW) {
ASC_DBG(1, "advansys_board_found: ASC-3550\n"); ASC_DBG(1, "advansys_board_found: ASC-3550\n");
adv_dvc_varp->chip_type = ADV_CHIP_ASC3550; adv_dvc_varp->chip_type = ADV_CHIP_ASC3550;
...@@ -17153,46 +17151,20 @@ advansys_board_found(int iop, struct device *dev, int bus_type) ...@@ -17153,46 +17151,20 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
ASC_DBG(1, "advansys_board_found: ASC-38C1600\n"); ASC_DBG(1, "advansys_board_found: ASC-38C1600\n");
adv_dvc_varp->chip_type = ADV_CHIP_ASC38C1600; adv_dvc_varp->chip_type = ADV_CHIP_ASC38C1600;
} }
#endif /* CONFIG_PCI */
/* boardp->asc_n_io_port = pci_resource_len(pdev, 1);
* Map the board's registers into virtual memory for boardp->ioremap_addr = ioremap(pci_resource_start(pdev, 1),
* PCI slave access. Only memory accesses are used to boardp->asc_n_io_port);
* access the board's registers. if (!boardp->ioremap_addr) {
*
* Note: The PCI register base address is not always
* page aligned, but the address passed to ioremap()
* must be page aligned. It is guaranteed that the
* PCI register base address will not cross a page
* boundary.
*/
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
iolen = ADV_3550_IOLEN;
} else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) {
iolen = ADV_38C0800_IOLEN;
} else {
iolen = ADV_38C1600_IOLEN;
}
#ifdef CONFIG_PCI
pci_memory_address = pci_resource_start(pdev, 1);
ASC_DBG1(1,
"advansys_board_found: pci_memory_address: 0x%lx\n",
(ulong)pci_memory_address);
if ((boardp->ioremap_addr =
ioremap(pci_memory_address & PAGE_MASK, PAGE_SIZE)) == 0) {
ASC_PRINT3 ASC_PRINT3
("advansys_board_found: board %d: ioremap(%x, %d) returned NULL\n", ("advansys_board_found: board %d: ioremap(%x, %d) returned NULL\n",
boardp->id, pci_memory_address, iolen); boardp->id, pci_resource_start(pdev, 1),
boardp->asc_n_io_port);
goto err_shost; goto err_shost;
} }
ASC_DBG1(1, "advansys_board_found: ioremap_addr: 0x%lx\n", adv_dvc_varp->iop_base = (AdvPortAddr)boardp->ioremap_addr
(ulong)boardp->ioremap_addr);
adv_dvc_varp->iop_base = (AdvPortAddr)
(boardp->ioremap_addr +
(pci_memory_address - (pci_memory_address & PAGE_MASK)));
ASC_DBG1(1, "advansys_board_found: iop_base: 0x%lx\n", ASC_DBG1(1, "advansys_board_found: iop_base: 0x%lx\n",
adv_dvc_varp->iop_base); adv_dvc_varp->iop_base);
#endif /* CONFIG_PCI */
/* /*
* Even though it isn't used to access wide boards, other * Even though it isn't used to access wide boards, other
...@@ -17201,9 +17173,10 @@ advansys_board_found(int iop, struct device *dev, int bus_type) ...@@ -17201,9 +17173,10 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
*/ */
boardp->ioport = iop; boardp->ioport = iop;
ASC_DBG2(1, ASC_DBG2(1, "advansys_board_found: iopb_chip_id_1 0x%x, "
"advansys_board_found: iopb_chip_id_1 0x%x, iopw_chip_id_0 0x%x\n", "iopw_chip_id_0 0x%x\n", (ushort)inp(iop + 1),
(ushort)inp(iop + 1), (ushort)inpw(iop)); (ushort)inpw(iop));
#endif /* CONFIG_PCI */
} }
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
...@@ -17556,7 +17529,6 @@ advansys_board_found(int iop, struct device *dev, int bus_type) ...@@ -17556,7 +17529,6 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
* PCI Memory Mapped I/O. * PCI Memory Mapped I/O.
*/ */
shost->io_port = iop; shost->io_port = iop;
boardp->asc_n_io_port = iolen;
shost->this_id = adv_dvc_varp->chip_scsi_id; shost->this_id = adv_dvc_varp->chip_scsi_id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment