diff mbox

[3/4] libata: READ LOG DMA EXT support can be in either page 119 or 120

Message ID 1430790861-30066-3-git-send-email-martin.petersen@oracle.com
State Not Applicable
Delegated to: David Miller
Headers show

Commit Message

Martin K. Petersen May 5, 2015, 1:54 a.m. UTC
Support for the READ/WRITE LOG DMA EXT commands can be signaled either
in page 119 or page 120. We should check both pages.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
---
 include/linux/ata.h | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Comments

Hannes Reinecke May 5, 2015, 6 a.m. UTC | #1
On 05/05/2015 03:54 AM, Martin K. Petersen wrote:
> Support for the READ/WRITE LOG DMA EXT commands can be signaled either
> in page 119 or page 120. We should check both pages.
> 
> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
> ---
>  include/linux/ata.h | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/include/linux/ata.h b/include/linux/ata.h
> index b666b773e111..fed36418dd1c 100644
> --- a/include/linux/ata.h
> +++ b/include/linux/ata.h
> @@ -704,9 +704,19 @@ static inline bool ata_id_wcache_enabled(const u16 *id)
>  
>  static inline bool ata_id_has_read_log_dma_ext(const u16 *id)
>  {
> +	/* Word 86 must have bit 15 set */
>  	if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
>  		return false;
> -	return id[ATA_ID_COMMAND_SET_3] & (1 << 3);
> +
> +	/* READ LOG DMA EXT support can be signaled either from word 119
> +	 * or from word 120. The format is the same for both words: Bit
> +	 * 15 must be cleared, bit 14 set and bit 3 set.
> +	 */
> +	if ((id[ATA_ID_COMMAND_SET_3] & 0xC008) == 0x4008 ||
> +	    (id[ATA_ID_COMMAND_SET_4] & 0xC008) == 0x4008)
> +		return true;
> +
> +	return false;
>  }
>  
>  static inline bool ata_id_has_sense_reporting(const u16 *id)
> 
Reviewed-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
diff mbox

Patch

diff --git a/include/linux/ata.h b/include/linux/ata.h
index b666b773e111..fed36418dd1c 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -704,9 +704,19 @@  static inline bool ata_id_wcache_enabled(const u16 *id)
 
 static inline bool ata_id_has_read_log_dma_ext(const u16 *id)
 {
+	/* Word 86 must have bit 15 set */
 	if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
 		return false;
-	return id[ATA_ID_COMMAND_SET_3] & (1 << 3);
+
+	/* READ LOG DMA EXT support can be signaled either from word 119
+	 * or from word 120. The format is the same for both words: Bit
+	 * 15 must be cleared, bit 14 set and bit 3 set.
+	 */
+	if ((id[ATA_ID_COMMAND_SET_3] & 0xC008) == 0x4008 ||
+	    (id[ATA_ID_COMMAND_SET_4] & 0xC008) == 0x4008)
+		return true;
+
+	return false;
 }
 
 static inline bool ata_id_has_sense_reporting(const u16 *id)