Commit c6446a4c authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik

[PATCH] ata_piix: allow 01b MAP for both ICH6M and ICH7M

ICH7M was separated from ICH6M to allow undocumented MAP value 01b
which was spotted on an ASUS notebook.  However, there is also
notebooks with MAP value 01b on ICH6M.  This patch re-merges ICH6M and
ICH7M entries and allows MAP value 01b for both.

This problem has been reported and initial patch provided by Jonathan
Dieter.
Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Cc: Jonathan Dieter <jdieter@gmail.com>
Cc: Tom Deblauwe <tom.deblauwe@telenet.be>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 6e42acc4
...@@ -126,8 +126,7 @@ enum { ...@@ -126,8 +126,7 @@ enum {
ich6_sata = 7, ich6_sata = 7,
ich6_sata_ahci = 8, ich6_sata_ahci = 8,
ich6m_sata_ahci = 9, ich6m_sata_ahci = 9,
ich7m_sata_ahci = 10, ich8_sata_ahci = 10,
ich8_sata_ahci = 11,
/* constants for mapping table */ /* constants for mapping table */
P0 = 0, /* port 0 */ P0 = 0, /* port 0 */
...@@ -228,7 +227,7 @@ static const struct pci_device_id piix_pci_tbl[] = { ...@@ -228,7 +227,7 @@ static const struct pci_device_id piix_pci_tbl[] = {
/* 82801GB/GR/GH (ICH7, identical to ICH6) */ /* 82801GB/GR/GH (ICH7, identical to ICH6) */
{ 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, { 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },
/* 2801GBM/GHM (ICH7M, identical to ICH6M) */ /* 2801GBM/GHM (ICH7M, identical to ICH6M) */
{ 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich7m_sata_ahci }, { 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6m_sata_ahci },
/* Enterprise Southbridge 2 (where's the datasheet?) */ /* Enterprise Southbridge 2 (where's the datasheet?) */
{ 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, { 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },
/* SATA Controller 1 IDE (ICH8, no datasheet yet) */ /* SATA Controller 1 IDE (ICH8, no datasheet yet) */
...@@ -400,23 +399,10 @@ static const struct piix_map_db ich6m_map_db = { ...@@ -400,23 +399,10 @@ static const struct piix_map_db ich6m_map_db = {
.mask = 0x3, .mask = 0x3,
.port_enable = 0x5, .port_enable = 0x5,
.present_shift = 4, .present_shift = 4,
.map = {
/* PM PS SM SS MAP */
{ P0, P2, RV, RV }, /* 00b */
{ RV, RV, RV, RV },
{ P0, P2, IDE, IDE }, /* 10b */
{ RV, RV, RV, RV },
},
};
static const struct piix_map_db ich7m_map_db = {
.mask = 0x3,
.port_enable = 0x5,
.present_shift = 4,
/* Map 01b isn't specified in the doc but some notebooks use /* Map 01b isn't specified in the doc but some notebooks use
* it anyway. ATM, the only case spotted carries subsystem ID * it anyway. MAP 01b have been spotted on both ICH6M and
* 1025:0107. This is the only difference from ich6m. * ICH7M.
*/ */
.map = { .map = {
/* PM PS SM SS MAP */ /* PM PS SM SS MAP */
...@@ -446,7 +432,6 @@ static const struct piix_map_db *piix_map_db_table[] = { ...@@ -446,7 +432,6 @@ static const struct piix_map_db *piix_map_db_table[] = {
[ich6_sata] = &ich6_map_db, [ich6_sata] = &ich6_map_db,
[ich6_sata_ahci] = &ich6_map_db, [ich6_sata_ahci] = &ich6_map_db,
[ich6m_sata_ahci] = &ich6m_map_db, [ich6m_sata_ahci] = &ich6m_map_db,
[ich7m_sata_ahci] = &ich7m_map_db,
[ich8_sata_ahci] = &ich8_map_db, [ich8_sata_ahci] = &ich8_map_db,
}; };
...@@ -557,19 +542,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -557,19 +542,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &piix_sata_ops, .port_ops = &piix_sata_ops,
}, },
/* ich7m_sata_ahci: 10 */ /* ich8_sata_ahci: 10 */
{
.sht = &piix_sht,
.flags = ATA_FLAG_SATA |
PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR |
PIIX_FLAG_AHCI,
.pio_mask = 0x1f, /* pio0-4 */
.mwdma_mask = 0x07, /* mwdma0-2 */
.udma_mask = 0x7f, /* udma0-6 */
.port_ops = &piix_sata_ops,
},
/* ich8_sata_ahci: 11 */
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = ATA_FLAG_SATA | .flags = ATA_FLAG_SATA |
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment