IDE updates #5
This time:
* Support for Toshiba TX4938 and TX4939 SoC controllers. (Atsushi Nemoto, mips part acked by Ralf Baechle)
* Set new non-rotational queue flag for SSD and CF devices.
* TEAC CD-224E workaround for close tray issue.
(Márton Németh)
* SGIIOC4 IDE host driver fixups.
(Sergei Shtylyov)
* Use new pci_ioremap_bar() helper in IDE host drivers. (Arjan van de Ven)
It should be the the last IDE update during this merge window.
Once again thanks to all contributors, with extra thanks to Sergei for reviewing TX493x host drivers (among other patches).
Linus, please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/
to receive the following updates:
arch/mips/include/asm/txx9/tx4938.h | 13 +
arch/mips/txx9/generic/setup_tx4938.c | 47 ++
arch/mips/txx9/rbtx4938/setup.c | 1 +
drivers/ide/Kconfig | 10 +
drivers/ide/Makefile | 4 +-
drivers/ide/ide-cd.c | 1 +
drivers/ide/ide-disk.c | 8 +-
drivers/ide/{generic.c => ide-pci-generic.c} | 0
drivers/ide/scc_pata.c | 10 +-
drivers/ide/sgiioc4.c | 24 +-
drivers/ide/siimage.c | 2 +-
drivers/ide/tx4938ide.c | 310 +++++++++++
drivers/ide/tx4939ide.c | 754 ++++++++++++++++++++++++++
13 files changed, 1157 insertions(+), 27 deletions(-)
rename drivers/ide/{generic.c => ide-pci-generic.c} (100%)
create mode 100644 drivers/ide/tx4938ide.c
create mode 100644 drivers/ide/tx4939ide.cArjan van de Ven (2):
pci: use pci_ioremap_bar() in drivers/ide
ide: two more pci_ioremap_bar() conversions
Atsushi Nemoto (3):
ide: Add tx4939ide driver (v6)
TXx9: Add TX4938 ATA support (v3)
ide: Add tx4938ide driver (v2)Bartlomiej Zolnierkiewicz (2):
ide-disk: set non-rotational queue flag for SSD and CF devices
ide: drivers/ide/generic.c -> drivers/ide/ide-pci-generic.c
Márton Németh (1):
ide-cd: add TEAC CD-224E to the NO_AUTOCLOSE list
Sergei Shtylyov (2):
sgiioc4: fix error cleanup path (take 2)
sgiioc4: use ide_host_add() (take 2)
arch/mips/include/asm/txx9/tx4938.h +13 -0
@@ -292,4 +292,17 @@ void tx4938_setup_pcierr_irq(void);void tx4938_irq_init (void );void tx4938_mtd_init (int ch); +struct tx4938ide_platform_info { +/* +* I/O port shift, for platforms with ports that are +* constantly spaced and need larger than the 1-byte +* spacing used by ata_std_ports(). +*/ +unsigned int ioport_shift; +unsigned int gbus_clock;/* 0 means no PIO mode tuning. */ +unsigned int ebus_ch; +}; + +void tx4938_ata_init (unsigned int irq,unsigned int shift,int tune); +#endif
arch/mips/txx9/generic/setup_tx4938.c +47 -0
59 lines not on this page · raw message
arch/mips/txx9/rbtx4938/setup.c +1 -0
@@ -352,6 +352,7 @@ static void __init rbtx4938_device_init(void)rbtx4938_ne_init ();tx4938_wdt_init ();rbtx4938_mtd_init (); +tx4938_ata_init (RBTX4938_IRQ_IOC_ATA ,0 ,1 );txx9_iocled_init (RBTX4938_LED_ADDR -IO_BASE ,-1 ,8 ,1 ,"green" ,NULL ); }
drivers/ide/Kconfig +10 -0
@@ -720,6 +720,16 @@ config BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ default "128" depends on BLK_DEV_IDE_AU1XXX +config BLK_DEV_IDE_TX4938 + tristate "TX4938 internal IDE support" + depends on SOC_TX4938 + select IDE_TIMINGS + +config BLK_DEV_IDE_TX4939 + tristate "TX4939 internal IDE support" + depends on SOC_TX4939 + select BLK_DEV_IDEDMA_SFF + config IDE_ARM tristate "ARM IDE support" depends on ARM && (ARCH_CLPS7500 || ARCH_RPC || ARCH_SHARK)
drivers/ide/Makefile +3 -1
@@ -68,7 +68,6 @@ obj-$(CONFIG_BLK_DEV_VIA82CXXX) += via82cxxx.o # Must appear at the end of the block obj-$(CONFIG_BLK_DEV_GENERIC) += ide-pci-generic.o -ide-pci-generic-y += generic.o obj-$(CONFIG_IDEPCI_PCIBUS_ORDER) += ide-scan-pci.o
@@ -111,3 +110,6 @@ obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o obj-$(CONFIG_BLK_DEV_PALMCHIP_BK3710) += palm_bk3710.o obj-$(CONFIG_BLK_DEV_IDE_AU1XXX) += au1xxx-ide.o + +obj-$(CONFIG_BLK_DEV_IDE_TX4938) += tx4938ide.o +obj-$(CONFIG_BLK_DEV_IDE_TX4939) += tx4939ide.o
drivers/ide/ide-cd.c +1 -0
@@ -1966,6 +1966,7 @@ static const struct cd_list_entry ide_cd_quirks_list[] = { { "Optiarc DVD RW AD-5200A", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, { "Optiarc DVD RW AD-7200A", NULL, IDE_AFLAG_PLAY_AUDIO_OK }, { "Optiarc DVD RW AD-7543A", NULL, IDE_AFLAG_NO_AUTOCLOSE }, + { "TEAC CD-ROM CD-224E", NULL, IDE_AFLAG_NO_AUTOCLOSE }, { NULL, NULL, 0 } };
drivers/ide/ide-disk.c +6 -2
@@ -600,6 +600,7 @@ static int ide_disk_check(ide_drive_t *drive, const char *s)static void ide_disk_setup (ide_drive_t *drive) {struct ide_disk_obj *idkp = drive->driver_data; +struct request_queue *q = drive->queue;ide_hwif_t *hwif = drive->hwif;u16 *id = drive->id;char *m = (char *)&id[ATA_ID_PROD ];
@@ -626,11 +627,14 @@ static void ide_disk_setup(ide_drive_t *drive)if (max_s > hwif->rqsize) max_s = hwif->rqsize; -blk_queue_max_sectors (drive->queue, max_s); +blk_queue_max_sectors (q, max_s); }printk (KERN_INFO "%s: max request size: %dKiB\n" , drive->name, - drive->queue->max_sectors /2 ); + q->max_sectors /2 ); + +if (ata_id_is_ssd (id) ||ata_id_is_cfa (id)) +queue_flag_set_unlocked (QUEUE_FLAG_NONROT , q);/* calculate drive capacity, and select LBA if possible */ ide_disk_get_capacity (drive);
drivers/ide/ide-pci-generic.c renamed from drivers/ide/generic.c +0 -0
drivers/ide/scc_pata.c +4 -6
@@ -536,10 +536,6 @@ static u8 scc_udma_filter(ide_drive_t *drive)static int setup_mmio_scc (struct pci_dev *dev,const char *name) { -unsigned long ctl_base =pci_resource_start (dev,0 ); -unsigned long dma_base =pci_resource_start (dev,1 ); -unsigned long ctl_size =pci_resource_len (dev,0 ); -unsigned long dma_size =pci_resource_len (dev,1 );void __iomem *ctl_addr;void __iomem *dma_addr;int i, ret;
@@ -557,10 +553,12 @@ static int setup_mmio_scc (struct pci_dev *dev, const char *name)return ret; } -if ((ctl_addr =ioremap (ctl_base, ctl_size)) ==NULL ) + ctl_addr =pci_ioremap_bar (dev,0 ); +if (!ctl_addr) goto fail_0; -if ((dma_addr =ioremap (dma_base, dma_size)) ==NULL ) + dma_addr =pci_ioremap_bar (dev,1 ); +if (!dma_addr) goto fail_1;pci_set_master (dev);
drivers/ide/sgiioc4.c +7 -17
@@ -567,14 +567,12 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)unsigned long cmd_base, irqport;unsigned long bar0, cmd_phys_base, ctl;void __iomem *virt_base; -struct ide_host *host;hw_regs_t hw, *hws[] = { &hw,NULL ,NULL ,NULL }; -struct ide_port_info d = sgiioc4_port_info;int rc;/* Get the CmdBlk and CtrlBlk Base Registers */ bar0 =pci_resource_start (dev,0 ); - virt_base =ioremap (bar0,pci_resource_len (dev,0 )); + virt_base =pci_ioremap_bar (dev,0 );if (virt_base ==NULL ) {printk (KERN_ERR "%s: Unable to remap BAR 0 address: 0x%lx\n" ,DRV_NAME , bar0);
@@ -590,7 +588,8 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)printk (KERN_ERR "%s %s -- ERROR: addresses 0x%08lx to 0x%08lx " "already in use\n" ,DRV_NAME ,pci_name (dev), cmd_phys_base, cmd_phys_base +IOC4_CMD_CTL_BLK_SIZE ); -return -EBUSY ; + rc = -EBUSY ; + goto req_mem_rgn_err; }/* Initialize the IO registers */
@@ -603,21 +602,12 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)/* Initializing chipset IRQ Registers */ writel (0x03 , (void __iomem *)(irqport +IOC4_INTR_SET *4 )); - host =ide_host_alloc (&d, hws); -if (host ==NULL ) { - rc = -ENOMEM ; - goto err; - } - - rc =ide_host_register (host, &d, hws); -if (rc) - goto err_free; + rc =ide_host_add (&sgiioc4_port_info, hws,NULL ); +if (!rc) +return 0 ; -return 0 ; -err_free: -ide_host_free (host); -err:release_mem_region (cmd_phys_base,IOC4_CMD_CTL_BLK_SIZE ); +req_mem_rgn_err:iounmap (virt_base);return rc; }
drivers/ide/siimage.c +1 -1
@@ -784,7 +784,7 @@ static int __devinit siimage_init_one(struct pci_dev *dev, printk(KERN_WARNING DRV_NAME " %s: MMIO ports not " "available\n", pci_name(dev)); }else { - ioaddr =ioremap (bar5, barsize); + ioaddr =pci_ioremap_bar (dev,5 );if (ioaddr ==NULL )release_mem_region (bar5, barsize); }
drivers/ide/tx4938ide.c new file +310 -0
310 lines not on this page · raw message
drivers/ide/tx4939ide.c new file +754 -0
754 lines not on this page · raw message