aboutsummaryrefslogtreecommitdiff
path: root/src/southbridge/amd/sb700/sata.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/southbridge/amd/sb700/sata.c')
-rw-r--r--src/southbridge/amd/sb700/sata.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/southbridge/amd/sb700/sata.c b/src/southbridge/amd/sb700/sata.c
index fdf32c780e..c61fa01953 100644
--- a/src/southbridge/amd/sb700/sata.c
+++ b/src/southbridge/amd/sb700/sata.c
@@ -104,6 +104,7 @@ static void sata_init(struct device *dev)
int i, j;
uint8_t nvram;
uint8_t sata_ahci_mode;
+ uint8_t sata_alpm_enable;
uint8_t port_count;
uint8_t max_port_count;
@@ -111,6 +112,10 @@ static void sata_init(struct device *dev)
if (get_option(&nvram, "sata_ahci_mode") == CB_SUCCESS)
sata_ahci_mode = !!nvram;
+ sata_alpm_enable = 0;
+ if (get_option(&nvram, "sata_alpm") == CB_SUCCESS)
+ sata_alpm_enable = !!nvram;
+
device_t sm_dev;
/* SATA SMBus Disable */
sm_dev = dev_find_slot(0, PCI_DEVFN(0x14, 0));
@@ -229,6 +234,13 @@ static void sata_init(struct device *dev)
dword &= ~(0x1 << i);
write32(sata_bar5 + 0x0c, dword);
+ /* Disable ALPM if ALPM support not requested */
+ if (!sata_alpm_enable) {
+ dword = read32(sata_bar5 + 0xfc);
+ dword &= ~(0x1 << 11); /* Disable ALPM */
+ write32(sata_bar5 + 0xfc, dword);
+ }
+
/* Write protect Sub-Class Code */
byte = pci_read_config8(dev, 0x40);
byte &= ~(1 << 0);