Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: sata_mv: shorten register names sata_mv: workaround errata SATA#13 sata_mv: cosmetic renames sata_mv: workaround errata SATA#26 sata_mv: workaround errata PCI#7 sata_mv: replace 0x1f with ATA_PIO4 (v2) sata_mv: fix irq mask races sata_mv: revert SoC irq breakage libata: ahci enclosure management bios workaround ata: Add TRIM infrastructure ata_piix: VGN-BX297XP wants the controller power up on suspend libata: Remove some redundant casts from pata_octeon_cf.c pata_artop: typo
This commit is contained in:
		
						commit
						132ea5e9aa
					
				| @ -431,7 +431,7 @@ EXPORT_SYMBOL(blk_queue_segment_boundary); | ||||
|  * | ||||
|  * description: | ||||
|  *    set required memory and length alignment for direct dma transactions. | ||||
|  *    this is used when buiding direct io requests for the queue. | ||||
|  *    this is used when building direct io requests for the queue. | ||||
|  * | ||||
|  **/ | ||||
| void blk_queue_dma_alignment(struct request_queue *q, int mask) | ||||
|  | ||||
| @ -78,6 +78,7 @@ static ssize_t ahci_led_store(struct ata_port *ap, const char *buf, | ||||
| static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state, | ||||
| 					ssize_t size); | ||||
| #define MAX_SLOTS 8 | ||||
| #define MAX_RETRY 15 | ||||
| 
 | ||||
| enum { | ||||
| 	AHCI_PCI_BAR		= 5, | ||||
| @ -1115,6 +1116,8 @@ static void ahci_start_port(struct ata_port *ap) | ||||
| 	struct ahci_port_priv *pp = ap->private_data; | ||||
| 	struct ata_link *link; | ||||
| 	struct ahci_em_priv *emp; | ||||
| 	ssize_t rc; | ||||
| 	int i; | ||||
| 
 | ||||
| 	/* enable FIS reception */ | ||||
| 	ahci_start_fis_rx(ap); | ||||
| @ -1126,7 +1129,17 @@ static void ahci_start_port(struct ata_port *ap) | ||||
| 	if (ap->flags & ATA_FLAG_EM) { | ||||
| 		ata_for_each_link(link, ap, EDGE) { | ||||
| 			emp = &pp->em_priv[link->pmp]; | ||||
| 			ahci_transmit_led_message(ap, emp->led_state, 4); | ||||
| 
 | ||||
| 			/* EM Transmit bit maybe busy during init */ | ||||
| 			for (i = 0; i < MAX_RETRY; i++) { | ||||
| 				rc = ahci_transmit_led_message(ap, | ||||
| 							       emp->led_state, | ||||
| 							       4); | ||||
| 				if (rc == -EBUSY) | ||||
| 					udelay(100); | ||||
| 				else | ||||
| 					break; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -1331,7 +1344,7 @@ static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state, | ||||
| 	em_ctl = readl(mmio + HOST_EM_CTL); | ||||
| 	if (em_ctl & EM_CTL_TM) { | ||||
| 		spin_unlock_irqrestore(ap->lock, flags); | ||||
| 		return -EINVAL; | ||||
| 		return -EBUSY; | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
|  | ||||
| @ -1053,6 +1053,13 @@ static int piix_broken_suspend(void) | ||||
| 				DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE M500"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			.ident = "VGN-BX297XP", | ||||
| 			.matches = { | ||||
| 				DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | ||||
| 				DMI_MATCH(DMI_PRODUCT_NAME, "VGN-BX297XP"), | ||||
| 			}, | ||||
| 		}, | ||||
| 
 | ||||
| 		{ }	/* terminate list */ | ||||
| 	}; | ||||
|  | ||||
| @ -503,7 +503,7 @@ static void octeon_cf_dma_setup(struct ata_queued_cmd *qc) | ||||
| 	struct ata_port *ap = qc->ap; | ||||
| 	struct octeon_cf_port *cf_port; | ||||
| 
 | ||||
| 	cf_port = (struct octeon_cf_port *)ap->private_data; | ||||
| 	cf_port = ap->private_data; | ||||
| 	DPRINTK("ENTER\n"); | ||||
| 	/* issue r/w command */ | ||||
| 	qc->cursg = qc->sg; | ||||
| @ -596,7 +596,7 @@ static unsigned int octeon_cf_dma_finished(struct ata_port *ap, | ||||
| 	if (ap->hsm_task_state != HSM_ST_LAST) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	cf_port = (struct octeon_cf_port *)ap->private_data; | ||||
| 	cf_port = ap->private_data; | ||||
| 
 | ||||
| 	dma_cfg.u64 = cvmx_read_csr(CVMX_MIO_BOOT_DMA_CFGX(ocd->dma_engine)); | ||||
| 	if (dma_cfg.s.size != 0xfffff) { | ||||
| @ -657,7 +657,7 @@ static irqreturn_t octeon_cf_interrupt(int irq, void *dev_instance) | ||||
| 			continue; | ||||
| 
 | ||||
| 		ocd = ap->dev->platform_data; | ||||
| 		cf_port = (struct octeon_cf_port *)ap->private_data; | ||||
| 		cf_port = ap->private_data; | ||||
| 		dma_int.u64 = | ||||
| 			cvmx_read_csr(CVMX_MIO_BOOT_DMA_INTX(ocd->dma_engine)); | ||||
| 		dma_cfg.u64 = | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -29,6 +29,8 @@ | ||||
| #ifndef __LINUX_ATA_H__ | ||||
| #define __LINUX_ATA_H__ | ||||
| 
 | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/types.h> | ||||
| #include <asm/byteorder.h> | ||||
| 
 | ||||
| @ -91,6 +93,7 @@ enum { | ||||
| 	ATA_ID_CFA_POWER	= 160, | ||||
| 	ATA_ID_CFA_KEY_MGMT	= 162, | ||||
| 	ATA_ID_CFA_MODES	= 163, | ||||
| 	ATA_ID_DATA_SET_MGMT	= 169, | ||||
| 	ATA_ID_ROT_SPEED	= 217, | ||||
| 	ATA_ID_PIO4		= (1 << 1), | ||||
| 
 | ||||
| @ -248,6 +251,7 @@ enum { | ||||
| 	ATA_CMD_SMART		= 0xB0, | ||||
| 	ATA_CMD_MEDIA_LOCK	= 0xDE, | ||||
| 	ATA_CMD_MEDIA_UNLOCK	= 0xDF, | ||||
| 	ATA_CMD_DSM		= 0x06, | ||||
| 	/* marked obsolete in the ATA/ATAPI-7 spec */ | ||||
| 	ATA_CMD_RESTORE		= 0x10, | ||||
| 
 | ||||
| @ -321,6 +325,9 @@ enum { | ||||
| 	ATA_SMART_READ_VALUES	= 0xD0, | ||||
| 	ATA_SMART_READ_THRESHOLDS = 0xD1, | ||||
| 
 | ||||
| 	/* feature values for Data Set Management */ | ||||
| 	ATA_DSM_TRIM		= 0x01, | ||||
| 
 | ||||
| 	/* password used in LBA Mid / LBA High for executing SMART commands */ | ||||
| 	ATA_SMART_LBAM_PASS	= 0x4F, | ||||
| 	ATA_SMART_LBAH_PASS	= 0xC2, | ||||
| @ -723,6 +730,14 @@ static inline int ata_id_has_unload(const u16 *id) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static inline int ata_id_has_trim(const u16 *id) | ||||
| { | ||||
| 	if (ata_id_major_version(id) >= 7 && | ||||
| 	    (id[ATA_ID_DATA_SET_MGMT] & 1)) | ||||
| 		return 1; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static inline int ata_id_current_chs_valid(const u16 *id) | ||||
| { | ||||
| 	/* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command
 | ||||
| @ -863,6 +878,32 @@ static inline void ata_id_to_hd_driveid(u16 *id) | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Write up to 'max' LBA Range Entries to the buffer that will cover the | ||||
|  * extent from sector to sector + count.  This is used for TRIM and for | ||||
|  * ADD LBA(S) TO NV CACHE PINNED SET. | ||||
|  */ | ||||
| static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned max, | ||||
| 						u64 sector, unsigned long count) | ||||
| { | ||||
| 	__le64 *buffer = _buffer; | ||||
| 	unsigned i = 0; | ||||
| 
 | ||||
| 	while (i < max) { | ||||
| 		u64 entry = sector | | ||||
| 			((u64)(count > 0xffff ? 0xffff : count) << 48); | ||||
| 		buffer[i++] = __cpu_to_le64(entry); | ||||
| 		if (count <= 0xffff) | ||||
| 			break; | ||||
| 		count -= 0xffff; | ||||
| 		sector += 0xffff; | ||||
| 	} | ||||
| 
 | ||||
| 	max = ALIGN(i * 8, 512); | ||||
| 	memset(buffer + i, 0, max - i * 8); | ||||
| 	return max; | ||||
| } | ||||
| 
 | ||||
| static inline int is_multi_taskfile(struct ata_taskfile *tf) | ||||
| { | ||||
| 	return (tf->command == ATA_CMD_READ_MULTI) || | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user