[libata] sata_mv: don't touch reserved bits in EDMA config register

The code in mv_edma_cfg() reflected its 60xx origins, by doing things
[slightly] incorrectly on the older 50xx and newer 6042/7042 chips.

Clean up the EDMA configuration setup such that, each chip family
carefully initializes its own EDMA setup.

Signed-off-by: Jeff Garzik <jeff@garzik.org>

+12 -8
+12 -8
drivers/ata/sata_mv.c
··· 814 814 u32 cfg = readl(port_mmio + EDMA_CFG_OFS); 815 815 816 816 /* set up non-NCQ EDMA configuration */ 817 - cfg &= ~0x1f; /* clear queue depth */ 818 - cfg &= ~EDMA_CFG_NCQ; /* clear NCQ mode */ 819 817 cfg &= ~(1 << 9); /* disable equeue */ 820 818 821 - if (IS_GEN_I(hpriv)) 819 + if (IS_GEN_I(hpriv)) { 820 + cfg &= ~0x1f; /* clear queue depth */ 822 821 cfg |= (1 << 8); /* enab config burst size mask */ 822 + } 823 823 824 - else if (IS_GEN_II(hpriv)) 824 + else if (IS_GEN_II(hpriv)) { 825 + cfg &= ~0x1f; /* clear queue depth */ 825 826 cfg |= EDMA_CFG_RD_BRST_EXT | EDMA_CFG_WR_BUFF_LEN; 827 + cfg &= ~(EDMA_CFG_NCQ | EDMA_CFG_NCQ_GO_ON_ERR); /* clear NCQ */ 828 + } 826 829 827 830 else if (IS_GEN_IIE(hpriv)) { 828 - cfg |= (1 << 23); /* dis RX PM port mask */ 829 - cfg &= ~(1 << 16); /* dis FIS-based switching (for now) */ 831 + cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */ 832 + cfg |= (1 << 22); /* enab 4-entry host queue cache */ 830 833 cfg &= ~(1 << 19); /* dis 128-entry queue (for now?) */ 831 834 cfg |= (1 << 18); /* enab early completion */ 832 - cfg |= (1 << 17); /* enab host q cache */ 833 - cfg |= (1 << 22); /* enab cutthrough */ 835 + cfg |= (1 << 17); /* enab cut-through (dis stor&forwrd) */ 836 + cfg &= ~(1 << 16); /* dis FIS-based switching (for now) */ 837 + cfg &= ~(EDMA_CFG_NCQ | EDMA_CFG_NCQ_GO_ON_ERR); /* clear NCQ */ 834 838 } 835 839 836 840 writelfl(cfg, port_mmio + EDMA_CFG_OFS);