Message ID | 1430790861-30066-3-git-send-email-martin.petersen@oracle.com |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
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 --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)
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(-)