|
@@ -870,7 +870,11 @@ static unsigned int ata_id_xfermask(const u16 *id)
|
|
|
* the PIO timing number for the maximum. Turn it into
|
|
|
* a mask.
|
|
|
*/
|
|
|
- pio_mask = (2 << (id[ATA_ID_OLD_PIO_MODES] & 0xFF)) - 1 ;
|
|
|
+ u8 mode = id[ATA_ID_OLD_PIO_MODES] & 0xFF;
|
|
|
+ if (mode < 5) /* Valid PIO range */
|
|
|
+ pio_mask = (2 << mode) - 1;
|
|
|
+ else
|
|
|
+ pio_mask = 1;
|
|
|
|
|
|
/* But wait.. there's more. Design your standards by
|
|
|
* committee and you too can get a free iordy field to
|