linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: yulin <yulin@starsoftcomm.com>
To: Uwe Koziolek <uwe.koziolek@gmx.net>
Cc: Jeff Garzik <jeff@garzik.org>, Alan <alan@lxorguk.ukuu.org.uk>,
	linux-ide@vger.kernel.org, micha.biermann@gmx.de
Subject: Re: [PATCH 2.6.22-rc4]: libata: PATA-mode fixes for sis_sata
Date: Mon, 16 Jul 2007 10:34:35 +0800	[thread overview]
Message-ID: <469AD93B.6090509@starsoftcomm.com> (raw)
In-Reply-To: <200706142340.44068.uwe.koziolek@gmx.net>

Hi,all,

I have a question about Generic int13h driver.

There is a message about it, 
http://lists.freebsd.org/pipermail/freebsd-drivers/2007-May/000403.html.

Because our product is to maintain Windows Desktop in Linux, so it 
requires the great compatibility of hardware. Now we have solved the 
problem of display, but harddisk still is a problem.

The motherboards from OEM always have some problem, for example, the 
same SiS671 motherboards from ASUS and FOXCONN have different phenomenon.

So one leader of our IT, who is a Windows expert, suggested we can use 
int 13h and I/O in Linux. But int 13h just is used in real mode.

Can you give me some advice to persuade him? If it is feasible, can you 
introduce me?

Even can you give some good solutions to solve the compatibility problem?


 From YuLin


Uwe Koziolek 写道:
> Changed PATA handler for PATA-ports used by sata_sis.
> This patch was originally submitted by Jeff Garzik.
>
> Added PCI-ID 1180 for SiS966 Controller in pata_sis.
> The 1180 mode is fully compatible to other SiS PATA-controller.
>
> The PCI-ID 1183 is SATA in PATA-emulation, but not fully compatible
> to SiS5513/5518. sata_sis.c is forwarding this ID to pata_sis.
> 1183 is not working if simply added to pata_sis.
> This handling fixes issues with SiS968.
>
> Signed-off-by: Uwe Koziolek <uwe.koziolek@gmx.net>
>
> --- a/drivers/ata/pata_sis.c	2007-06-14 22:41:34.000000000 +0200
> +++ b/drivers/ata/pata_sis.c	2007-06-12 22:15:04.000000000 +0200
> @@ -560,6 +560,40 @@
>  	.port_start		= ata_port_start,
>  };
>  
> +static const struct ata_port_operations sis_133_for_sata_ops = {
> +	.port_disable		= ata_port_disable,
> +	.set_piomode		= sis_133_set_piomode,
> +	.set_dmamode		= sis_133_set_dmamode,
> +	.mode_filter		= ata_pci_default_filter,
> +
> +	.tf_load		= ata_tf_load,
> +	.tf_read		= ata_tf_read,
> +	.check_status		= ata_check_status,
> +	.exec_command		= ata_exec_command,
> +	.dev_select		= ata_std_dev_select,
> +
> +	.freeze			= ata_bmdma_freeze,
> +	.thaw			= ata_bmdma_thaw,
> +	.error_handler		= ata_bmdma_error_handler,
> +	.post_internal_cmd	= ata_bmdma_post_internal_cmd,
> +	.cable_detect		= sis_133_cable_detect,
> +
> +	.bmdma_setup		= ata_bmdma_setup,
> +	.bmdma_start		= ata_bmdma_start,
> +	.bmdma_stop		= ata_bmdma_stop,
> +	.bmdma_status		= ata_bmdma_status,
> +	.qc_prep		= ata_qc_prep,
> +	.qc_issue		= ata_qc_issue_prot,
> +	.data_xfer		= ata_data_xfer,
> +
> +	.irq_handler		= ata_interrupt,
> +	.irq_clear		= ata_bmdma_irq_clear,
> +	.irq_on			= ata_irq_on,
> +	.irq_ack		= ata_irq_ack,
> +
> +	.port_start		= ata_port_start,
> +};
> +
>  static const struct ata_port_operations sis_133_early_ops = {
>  	.port_disable		= ata_port_disable,
>  	.set_piomode		= sis_100_set_piomode,
> @@ -733,13 +767,20 @@
>  	.pio_mask	= 0x1f,	/* pio0-4 */
>  	.port_ops	= &sis_66_ops,
>  };
> -const struct ata_port_info sis_info133 = {
> +static const struct ata_port_info sis_info133 = {
>  	.sht		= &sis_sht,
>  	.flags		= ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
>  	.pio_mask	= 0x1f,	/* pio0-4 */
>  	.udma_mask	= ATA_UDMA6,
>  	.port_ops	= &sis_133_ops,
>  };
> +const struct ata_port_info sis_info133_for_sata = {
> +	.sht		= &sis_sht,
> +	.flags		= ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
> +	.pio_mask	= 0x1f,	/* pio0-4 */
> +	.udma_mask	= ATA_UDMA6,
> +	.port_ops	= &sis_133_for_sata_ops,
> +};
>  static const struct ata_port_info sis_info133_early = {
>  	.sht		= &sis_sht,
>  	.flags		= ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
> @@ -749,7 +790,7 @@
>  };
>  
>  /* Privately shared with the SiS180 SATA driver, not for use elsewhere */
> -EXPORT_SYMBOL_GPL(sis_info133);
> +EXPORT_SYMBOL_GPL(sis_info133_for_sata);
>  
>  static void sis_fixup(struct pci_dev *pdev, struct sis_chipset *sis)
>  {
> @@ -975,6 +1016,7 @@
>  static const struct pci_device_id sis_pci_tbl[] = {
>  	{ PCI_VDEVICE(SI, 0x5513), },	/* SiS 5513 */
>  	{ PCI_VDEVICE(SI, 0x5518), },	/* SiS 5518 */
> +	{ PCI_VDEVICE(SI, 0x1180), },	/* SiS 1180 */
>  
>  	{ }
>  };
> --- a/drivers/ata/sata_sis.c	2007-06-14 22:41:34.000000000 +0200
> +++ b/drivers/ata/sata_sis.c	2007-06-12 22:16:11.000000000 +0200
> @@ -72,8 +72,8 @@
>  	{ PCI_VDEVICE(SI, 0x0181), sis_180 },		/* SiS 964/180 */
>  	{ PCI_VDEVICE(SI, 0x0182), sis_180 },		/* SiS 965/965L */
>  	{ PCI_VDEVICE(SI, 0x0183), sis_180 },		/* SiS 965/965L */
> -	{ PCI_VDEVICE(SI, 0x1182), sis_180 },		/* SiS 966/966L */
> -	{ PCI_VDEVICE(SI, 0x1183), sis_180 },		/* SiS 966/966L */
> +	{ PCI_VDEVICE(SI, 0x1182), sis_180 },		/* SiS 966/680 */
> +	{ PCI_VDEVICE(SI, 0x1183), sis_180 },		/* SiS 966/966L/968/680 */
>  
>  	{ }	/* terminate list */
>  };
> @@ -161,7 +161,6 @@
>  			case 0x0182:
>  			case 0x0183:
>  			case 0x1182:
> -			case 0x1183:
>  				addr += SIS182_SATA1_OFS;
>  				break;
>  		}
> @@ -183,8 +182,8 @@
>  
>  	pci_read_config_dword(pdev, cfg_addr, &val);
>  
> -	if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
> -	    (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
> +	if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
> +	    (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
>  		pci_read_config_dword(pdev, cfg_addr+0x10, &val2);
>  
>  	return (val|val2) &  0xfffffffb; /* avoid problems with powerdowned ports */
> @@ -203,8 +202,8 @@
>  
>  	pci_write_config_dword(pdev, cfg_addr, val);
>  
> -	if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
> -	    (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
> +	if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
> +	    (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
>  		pci_write_config_dword(pdev, cfg_addr+0x10, val);
>  }
>  
> @@ -224,8 +223,8 @@
>  
>  	val = ioread32(ap->ioaddr.scr_addr + (sc_reg * 4));
>  
> -	if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
> -	    (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
> +	if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
> +	    (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
>  		val2 = ioread32(ap->ioaddr.scr_addr + (sc_reg * 4) + 0x10);
>  
>  	return (val | val2) &  0xfffffffb;
> @@ -245,8 +244,8 @@
>  		sis_scr_cfg_write(ap, sc_reg, val);
>  	else {
>  		iowrite32(val, ap->ioaddr.scr_addr + (sc_reg * 4));
> -		if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
> -		    (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
> +		if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
> +		    (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
>  			iowrite32(val, ap->ioaddr.scr_addr + (sc_reg * 4)+0x10);
>  	}
>  }
> @@ -293,11 +292,11 @@
>  		/* The PATA-handling is provided by pata_sis */
>  		switch (pmr & 0x30) {
>  		case 0x10:
> -			ppi[1] = &sis_info133;
> +			ppi[1] = &sis_info133_for_sata;
>  			break;
>  
>  		case 0x30:
> -			ppi[0] = &sis_info133;
> +			ppi[0] = &sis_info133_for_sata;
>  			break;
>  		}
>  		if ((pmr & SIS_PMR_COMBINED) == 0) {
> @@ -324,14 +323,14 @@
>  		break;
>  
>  	case 0x1182:
> +		dev_printk(KERN_INFO, &pdev->dev, "Detected SiS 1182/966/680 SATA controller\n");
> +		pi.flags |= ATA_FLAG_SLAVE_POSS;
> +		break;
> +
>  	case 0x1183:
> -		pci_read_config_dword(pdev, 0x64, &val);
> -		if (val & 0x10000000) {
> -			dev_printk(KERN_INFO, &pdev->dev, "Detected SiS 1182/1183/966L SATA controller\n");
> -		} else {
> -			dev_printk(KERN_INFO, &pdev->dev, "Detected SiS 1182/1183/966 SATA controller\n");
> -			pi.flags |= ATA_FLAG_SLAVE_POSS;
> -		}
> +		dev_printk(KERN_INFO, &pdev->dev, "Detected SiS 1183/966/966L/968/680 controller in PATA mode\n");
> +		ppi[0] = &sis_info133_for_sata;
> +		ppi[1] = &sis_info133_for_sata;
>  		break;
>  	}
>  
> --- a/drivers/ata/sis.h	2007-06-14 22:41:34.000000000 +0200
> +++ b/drivers/ata/sis.h	2007-06-09 22:30:43.000000000 +0200
> @@ -2,4 +2,4 @@
>  struct ata_port_info;
>  
>  /* pata_sis.c */
> -extern const struct ata_port_info sis_info133;
> +extern const struct ata_port_info sis_info133_for_sata;
>
>
>
>   


  parent reply	other threads:[~2007-07-16  2:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-14 21:40 [PATCH 2.6.22-rc4]: libata: PATA-mode fixes for sis_sata Uwe Koziolek
2007-07-02 14:20 ` Jeff Garzik
2007-07-16  2:34 ` yulin [this message]
2007-07-16  9:04   ` Alan Cox
2007-07-16  9:20     ` yulin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=469AD93B.6090509@starsoftcomm.com \
    --to=yulin@starsoftcomm.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=jeff@garzik.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=micha.biermann@gmx.de \
    --cc=uwe.koziolek@gmx.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).