Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd12097c authored by Jeff Garzik's avatar Jeff Garzik
Browse files

[libata ahci] Isolate Intel-ism, add JMicron JMB360 support

Isolate some PCI config register bitbanging to Intel hardware, as it
should have been all along.

Add support for JMicron JMB360.
parent 3ee68c4a
Loading
Loading
Loading
Loading
+13 −4
Original line number Original line Diff line number Diff line
@@ -286,6 +286,8 @@ static const struct pci_device_id ahci_pci_tbl[] = {
	  board_ahci }, /* ICH8M */
	  board_ahci }, /* ICH8M */
	{ PCI_VENDOR_ID_INTEL, 0x282a, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
	{ PCI_VENDOR_ID_INTEL, 0x282a, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
	  board_ahci }, /* ICH8M */
	  board_ahci }, /* ICH8M */
	{ 0x197b, 0x2360, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
	  board_ahci }, /* JMicron JMB360 */
	{ }	/* terminate list */
	{ }	/* terminate list */
};
};


@@ -802,7 +804,6 @@ static int ahci_host_init(struct ata_probe_ent *probe_ent)
	struct pci_dev *pdev = to_pci_dev(probe_ent->dev);
	struct pci_dev *pdev = to_pci_dev(probe_ent->dev);
	void __iomem *mmio = probe_ent->mmio_base;
	void __iomem *mmio = probe_ent->mmio_base;
	u32 tmp, cap_save;
	u32 tmp, cap_save;
	u16 tmp16;
	unsigned int i, j, using_dac;
	unsigned int i, j, using_dac;
	int rc;
	int rc;
	void __iomem *port_mmio;
	void __iomem *port_mmio;
@@ -836,9 +837,13 @@ static int ahci_host_init(struct ata_probe_ent *probe_ent)
	writel(0xf, mmio + HOST_PORTS_IMPL);
	writel(0xf, mmio + HOST_PORTS_IMPL);
	(void) readl(mmio + HOST_PORTS_IMPL);	/* flush */
	(void) readl(mmio + HOST_PORTS_IMPL);	/* flush */


	if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
		u16 tmp16;

		pci_read_config_word(pdev, 0x92, &tmp16);
		pci_read_config_word(pdev, 0x92, &tmp16);
		tmp16 |= 0xf;
		tmp16 |= 0xf;
		pci_write_config_word(pdev, 0x92, tmp16);
		pci_write_config_word(pdev, 0x92, tmp16);
	}


	hpriv->cap = readl(mmio + HOST_CAP);
	hpriv->cap = readl(mmio + HOST_CAP);
	hpriv->port_map = readl(mmio + HOST_PORTS_IMPL);
	hpriv->port_map = readl(mmio + HOST_PORTS_IMPL);
@@ -1082,6 +1087,10 @@ static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
	if (have_msi)
	if (have_msi)
		hpriv->flags |= AHCI_FLAG_MSI;
		hpriv->flags |= AHCI_FLAG_MSI;


	/* JMicron-specific fixup: make sure we're in AHCI mode */
	if (pdev->vendor == 0x197b)
		pci_write_config_byte(pdev, 0x41, 0xa1);

	/* initialize adapter */
	/* initialize adapter */
	rc = ahci_host_init(probe_ent);
	rc = ahci_host_init(probe_ent);
	if (rc)
	if (rc)