Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8bff7c6b authored by Jens Axboe's avatar Jens Axboe
Browse files

libata: set queue SSD flag for SSD devices



SSD devices should give an RPM setting of 1 in word 217 of the ID
page. If we see such a device, tell the block layer about it.

Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent a68bbddb
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -977,6 +977,10 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,


		blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
		blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
	} else {
	} else {
		if (ata_id_is_ssd(dev->id))
			queue_flag_set_unlocked(QUEUE_FLAG_NONROT,
						sdev->request_queue);

		/* ATA devices must be sector aligned */
		/* ATA devices must be sector aligned */
		blk_queue_update_dma_alignment(sdev->request_queue,
		blk_queue_update_dma_alignment(sdev->request_queue,
					       ATA_SECT_SIZE - 1);
					       ATA_SECT_SIZE - 1);
+6 −0
Original line number Original line Diff line number Diff line
@@ -88,6 +88,7 @@ enum {
	ATA_ID_DLF		= 128,
	ATA_ID_DLF		= 128,
	ATA_ID_CSFO		= 129,
	ATA_ID_CSFO		= 129,
	ATA_ID_CFA_POWER	= 160,
	ATA_ID_CFA_POWER	= 160,
	ATA_ID_ROT_SPEED	= 217,
	ATA_ID_PIO4		= (1 << 1),
	ATA_ID_PIO4		= (1 << 1),


	ATA_ID_SERNO_LEN	= 20,
	ATA_ID_SERNO_LEN	= 20,
@@ -691,6 +692,11 @@ static inline int ata_id_is_cfa(const u16 *id)
	return 0;
	return 0;
}
}


static inline int ata_id_is_ssd(const u16 *id)
{
	return id[ATA_ID_ROT_SPEED] == 0x01;
}

static inline int ata_drive_40wire(const u16 *dev_id)
static inline int ata_drive_40wire(const u16 *dev_id)
{
{
	if (ata_id_is_sata(dev_id))
	if (ata_id_is_sata(dev_id))