/** * xgene_ahci_read_id - Read ID data from the specified device * @dev: device * @tf: proposed taskfile * @id: data buffer * * This custom read ID function is required due to the fact that the HW * does not support DEVSLP. */ static unsigned int xgene_ahci_read_id(struct ata_device *dev, struct ata_taskfile *tf, u16 *id) { u32 err_mask; err_mask = ata_do_dev_read_id(dev, tf, id); if (err_mask) return err_mask; /* * Mask reserved area. Word78 spec of Link Power Management * bit15-8: reserved * bit7: NCQ autosence * bit6: Software settings preservation supported * bit5: reserved * bit4: In-order sata delivery supported * bit3: DIPM requests supported * bit2: DMA Setup FIS Auto-Activate optimization supported * bit1: DMA Setup FIX non-Zero buffer offsets supported * bit0: Reserved * * Clear reserved bit 8 (DEVSLP bit) as we don't support DEVSLP */ id[ATA_ID_FEATURE_SUPP] &= ~(1 << 8); return 0; }
static unsigned int netcell_read_id(struct ata_device *adev, struct ata_taskfile *tf, u16 *id) { unsigned int err_mask = ata_do_dev_read_id(adev, tf, id); /* */ if (err_mask == 0) id[ATA_ID_CSF_DEFAULT] |= 0x4000; return err_mask; }
static unsigned int netcell_read_id(struct ata_device *adev, struct ata_taskfile *tf, u16 *id) { unsigned int err_mask = ata_do_dev_read_id(adev, tf, id); /* Firmware forgets to mark words 85-87 valid */ if (err_mask == 0) id[ATA_ID_CSF_DEFAULT] |= 0x4000; return err_mask; }
static unsigned int ceva_ahci_read_id(struct ata_device *dev, struct ata_taskfile *tf, u16 *id) { u32 err_mask; err_mask = ata_do_dev_read_id(dev, tf, id); if (err_mask) return err_mask; /* * Since CEVA controller does not support device sleep feature, we * need to clear DEVSLP (bit 8) in word78 of the IDENTIFY DEVICE data. */ id[ATA_ID_FEATURE_SUPP] &= cpu_to_le16(~(1 << 8)); return 0; }
/** * xgene_ahci_read_id - Read ID data from the specified device * @dev: device * @tf: proposed taskfile * @id: data buffer * * This custom read ID function is required due to the fact that the HW * does not support DEVSLP and the controller state machine may get stuck * after processing the ID query command. */ static unsigned int xgene_ahci_read_id(struct ata_device *dev, struct ata_taskfile *tf, u16 *id) { u32 err_mask; void __iomem *port_mmio = ahci_port_base(dev->link->ap); err_mask = ata_do_dev_read_id(dev, tf, id); if (err_mask) return err_mask; /* * Mask reserved area. Word78 spec of Link Power Management * bit15-8: reserved * bit7: NCQ autosence * bit6: Software settings preservation supported * bit5: reserved * bit4: In-order sata delivery supported * bit3: DIPM requests supported * bit2: DMA Setup FIS Auto-Activate optimization supported * bit1: DMA Setup FIX non-Zero buffer offsets supported * bit0: Reserved * * Clear reserved bit 8 (DEVSLP bit) as we don't support DEVSLP */ id[ATA_ID_FEATURE_SUPP] &= ~(1 << 8); /* * Due to HW errata, restart the port if no other command active. * Otherwise the controller may get stuck. */ if (!readl(port_mmio + PORT_CMD_ISSUE)) { writel(PORT_CMD_FIS_RX, port_mmio + PORT_CMD); readl(port_mmio + PORT_CMD); /* Force a barrier */ writel(PORT_CMD_FIS_RX | PORT_CMD_START, port_mmio + PORT_CMD); readl(port_mmio + PORT_CMD); /* Force a barrier */ } return 0; }