mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
				synced 2025-11-04 07:44:51 +10:00 
			
		
		
		
	pata_atiixp: override cable detection on MSI E350DM-E33
The mainboard MSI E350DM-E33 is advertised with 6 SATA ports. As it turns out, two of them seem to be driven by on-board SATA<->PATA converters. If a disk drive is connected to one of them kernel uses UDMA/33 mode due to cable detection: [ 34.550823] scsi4 : pata_atiixp [ 34.555517] scsi5 : pata_atiixp [ 34.555942] ata5: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0xf100 irq 14 [ 34.555948] ata6: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0xf108 irq 15 ... [ 35.040799] ata5.00: ATA-8: WDC WD20EADS-00R6B0, 01.00A01, max UDMA/133 [ 35.040806] ata5.00: 3907029168 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 35.040817] ata5.00: limited to UDMA/33 due to 40-wire cable [ 35.049166] ata5.00: configured for UDMA/33 [ 35.049402] scsi 4:0:0:0: Direct-Access ATA WDC WD20EADS-00R 01.0 PQ: 0 ANSI: 5 This patch forces "short cable" mode on this board, as it seems clear that the on-board SATA<->PATA "cable" is short. With this patch the disk is configured for UDMA/100: [ 5.976756] ata5.00: ATA-8: WDC WD20EADS-00R6B0, 01.00A01, max UDMA/133 [ 5.996434] ata5.00: 3907029168 sectors, multi 16: LBA48 NCQ (depth 0/32) [ 6.024787] ata5.00: configured for UDMA/100 Testing revealed no transfer issues. Signed-off-by: Arnd Hannemann <arnd@arndnet.de> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
		
							parent
							
								
									bbb4ab43f8
								
							
						
					
					
						commit
						1117c811a6
					
				@ -20,6 +20,7 @@
 | 
			
		||||
#include <linux/delay.h>
 | 
			
		||||
#include <scsi/scsi_host.h>
 | 
			
		||||
#include <linux/libata.h>
 | 
			
		||||
#include <linux/dmi.h>
 | 
			
		||||
 | 
			
		||||
#define DRV_NAME "pata_atiixp"
 | 
			
		||||
#define DRV_VERSION "0.4.6"
 | 
			
		||||
@ -33,11 +34,26 @@ enum {
 | 
			
		||||
	ATIIXP_IDE_UDMA_MODE 	= 0x56
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const struct dmi_system_id attixp_cable_override_dmi_table[] = {
 | 
			
		||||
	{
 | 
			
		||||
		/* Board has onboard PATA<->SATA converters */
 | 
			
		||||
		.ident = "MSI E350DM-E33",
 | 
			
		||||
		.matches = {
 | 
			
		||||
			DMI_MATCH(DMI_BOARD_VENDOR, "MSI"),
 | 
			
		||||
			DMI_MATCH(DMI_BOARD_NAME, "E350DM-E33(MS-7720)"),
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	{ }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int atiixp_cable_detect(struct ata_port *ap)
 | 
			
		||||
{
 | 
			
		||||
	struct pci_dev *pdev = to_pci_dev(ap->host->dev);
 | 
			
		||||
	u8 udma;
 | 
			
		||||
 | 
			
		||||
	if (dmi_check_system(attixp_cable_override_dmi_table))
 | 
			
		||||
		return ATA_CBL_PATA40_SHORT;
 | 
			
		||||
 | 
			
		||||
	/* Hack from drivers/ide/pci. Really we want to know how to do the
 | 
			
		||||
	   raw detection not play follow the bios mode guess */
 | 
			
		||||
	pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ap->port_no, &udma);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user