Skip to contentSkip to conversation

ahci: use ports implemented map instead of num_ports

PATCH Superseded Rob Herring 3 participants 15 messages May 21, 2013 – May 24, 2013 Block layer

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/7 ahci: use ports implemented map instead of num_ports

From: Richard Gibbs <[email protected]>

The AHCI driver was incorrectly using the Capabilities register NP (number of ports) field to determine which ports to activate. This commit changes it to correctly use the PORTS_IMPL register as a port map.

---
 drivers/block/ahci.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/block/ahci.c +4 -0
index cab7f8c..b89be06 100644
@@ -136,6 +136,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)
 	u32 tmp, cap_save, cmd;
 	int i, j;
 	volatile u8 *port_mmio;
+	u32 port_map;
 
 	debug("ahci_host_init: start\n");
 
@@ -177,6 +178,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)
 #endif
 	probe_ent->cap = readl(mmio + HOST_CAP);
 	probe_ent->port_map = readl(mmio + HOST_PORTS_IMPL);
+	port_map = probe_ent->port_map;
 	probe_ent->n_ports = (probe_ent->cap & 0x1f) + 1;
 
 	debug("cap 0x%x  port_map 0x%x  n_ports %d\n",
@@ -186,6 +188,8 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)
 		probe_ent->n_ports = CONFIG_SYS_SCSI_MAX_SCSI_ID;
 
 	for (i = 0; i < probe_ent->n_ports; i++) {
+		if (!(port_map & (1 << i)))
+			continue;
 		probe_ent->port[i].port_mmio = ahci_port_base((u32) mmio, i);
 		port_mmio = (u8 *) probe_ent->port[i].port_mmio;
 		ahci_setup_port(&probe_ent->port[i], (unsigned long)mmio, i);
Signature · 1 line
1.8.1.2
#1 lore raw

PATCH 2/7 ahci: fix unaligned access

From: Rob Herring <[email protected]>

gcc 4.7 will generate unaligned accesses to local char arrays, so make them static to avoid that.

---
 drivers/block/ahci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/ahci.c +1 -1
index b89be06..3cb37e7 100644
@@ -627,7 +627,7 @@ static void dump_ataid(hd_driveid_t *ataid)
  */
 static int ata_scsiop_inquiry(ccb *pccb)
 {
-	u8 hdr[] = {
+	static u8 hdr[] = {
 		0,
 		0,
 		0x5,		/* claim SPC-3 version compatibility */
Signature · 1 line
1.8.1.2
#2 lore raw

PATCH 2/7 ahci: fix unaligned access

Quoted 6 lines · Rob Herring

From: Rob Herring <[email protected]>

gcc 4.7 will generate unaligned accesses to local char arrays, so make them static to avoid that.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130524/db6ae0e0/attachment.pgp>
#3 lore raw

PATCH 2/7 ahci: fix unaligned access

In reply to Rob Herring

Dear Rob Herring,

Quoted 14 lines · In message <[email protected]> you wrote:

gcc 4.7 will generate unaligned accesses to local char arrays, so make them static to avoid that.

---
 drivers/block/ahci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/ahci.c +0 -0
index b89be06..3cb37e7 100644

drivers/block/ahci.c static void dump_ataid(hd_driveid_t *ataid) · line 633

Quoted 8 lines
drivers/block/ahci.c +1 -1
@@ -627,7 +627,7 @@ static void dump_ataid(hd_driveid_t *ataid)
  */
 static int ata_scsiop_inquiry(ccb *pccb)
 {
-	u8 hdr[] = {
+	static u8 hdr[] = {
 		0,
 		0,
 		0x5,		/* claim SPC-3 version compatibility */

Make it also "const" ?

Best regards,

Wolfgang Denk

Signature · 4 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"Pull the wool over your own eyes!"                - J.R. "Bob" Dobbs
#4 lore raw

PATCH 3/7 ahci: fix memory leak in ata_scsiop_inquiry

In reply to Rob Herring

From: Rob Herring <[email protected]>

This fixes a memory leak when scsi inquiry fails.

---
 drivers/block/ahci.c | 1 +
 1 file changed, 1 insertion(+)
drivers/block/ahci.c +1 -0
index 3cb37e7..a2aa433 100644
@@ -660,6 +660,7 @@ static int ata_scsiop_inquiry(ccb *pccb)
 	if (ahci_device_data_io(port, (u8 *) &fis, sizeof(fis), tmpid,
 				sizeof(hd_driveid_t), 0)) {
 		debug("scsi_ahci: SCSI inquiry command failure.\n");
+		free(tmpid);
 		return -EIO;
 	}
 
Signature · 1 line
1.8.1.2
#5 lore raw

PATCH 3/7 ahci: fix memory leak in ata_scsiop_inquiry

Quoted 5 lines · Rob Herring

From: Rob Herring <[email protected]>

This fixes a memory leak when scsi inquiry fails.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130524/1681a0bd/attachment.pgp>
#6 lore raw

PATCH 4/7 ahci: move link bring-up handling to separate function

In reply to Rob Herring

From: Rob Herring <[email protected]>

Move the link bring-up handling to a separate weak function in order to allow platforms to override it. This is needed on highbank platform which needs special phy handling.

---
 drivers/block/ahci.c | 39 +++++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 14 deletions(-)
drivers/block/ahci.c +25 -14
index a2aa433..79710ef 100644
@@ -124,6 +124,27 @@ static int waiting_for_cmd_completed(volatile u8 *offset,
 	return (i < timeout_msec) ? 0 : -1;
 }
 
+static int __ahci_link_up(struct ahci_probe_ent *probe_ent, u8 port)
+{
+	u32 tmp;
+	int j = 0;
+	u8 *port_mmio = (u8 *)probe_ent->port[port].port_mmio;
+
+	/* Bring up SATA link.
+	 * SATA link bringup time is usually less than 1 ms; only very
+	 * rarely has it taken between 1-2 ms. Never seen it above 2 ms.
+	 */
+	while (j < WAIT_MS_LINKUP) {
+		tmp = readl(port_mmio + PORT_SCR_STAT);
+		if ((tmp & 0xf) == 0x3)
+			return 0;
+		udelay(1000);
+		j++;
+	}
+	return 1;
+}
+int ahci_link_up(struct ahci_probe_ent *probe_ent, u8 port)
+	__attribute__((weak, alias("__ahci_link_up")));
 
 static int ahci_host_init(struct ahci_probe_ent *probe_ent)
 {
@@ -134,7 +155,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)
 #endif
 	volatile u8 *mmio = (volatile u8 *)probe_ent->mmio_base;
 	u32 tmp, cap_save, cmd;
-	int i, j;
+	int i, j, ret;
 	volatile u8 *port_mmio;
 	u32 port_map;
 
@@ -217,19 +238,9 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)
 		cmd |= PORT_CMD_SPIN_UP;
 		writel_with_flush(cmd, port_mmio + PORT_CMD);
 
-		/* Bring up SATA link.
-		 * SATA link bringup time is usually less than 1 ms; only very
-		 * rarely has it taken between 1-2 ms. Never seen it above 2 ms.
-		 */
-		j = 0;
-		while (j < WAIT_MS_LINKUP) {
-			tmp = readl(port_mmio + PORT_SCR_STAT);
-			if ((tmp & 0xf) == 0x3)
-				break;
-			udelay(1000);
-			j++;
-		}
-		if (j == WAIT_MS_LINKUP) {
+		/* Bring up SATA link. */
+		ret = ahci_link_up(probe_ent, i);
+		if (ret) {
 			printf("SATA link %d timeout.\n", i);
 			continue;
 		} else {
Signature · 1 line
1.8.1.2
#7 lore raw

PATCH 4/7 ahci: move link bring-up handling to separate function

Quoted 7 lines · Rob Herring

From: Rob Herring <[email protected]>

Move the link bring-up handling to a separate weak function in order to allow platforms to override it. This is needed on highbank platform which needs special phy handling.

[snip]

drivers/block/ahci.c static int waiting_for_cmd_completed(volatile u8 *offset, · line 133

Quoted 7 lines
drivers/block/ahci.c +7 -0
+static int __ahci_link_up(struct ahci_probe_ent *probe_ent, u8 port)
+{
+	u32 tmp;
+	int j = 0;
+	u8 *port_mmio = (u8 *)probe_ent->port[port].port_mmio;
+
+	/* Bring up SATA link.

/*
* Like this
*/

drivers/block/ahci.c static int waiting_for_cmd_completed(volatile u8 *offset, · line 147

Quoted 2 lines
drivers/block/ahci.c +2 -0
+int ahci_link_up(struct ahci_probe_ent *probe_ent, u8 port)
+	__attribute__((weak, alias("__ahci_link_up")));

Just use __weak please, thanks.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130524/809943d8/attachment.pgp>
#8 lore raw

PATCH 5/7 ahci: handle COMINIT received during spin-up

In reply to Rob Herring

From: Rob Herring <[email protected]>

Some Intel SSDs can send a COMINIT after the initial COMRESET. This causes the link to go down and we need to re-initialize the link.

---
 drivers/block/ahci.c | 11 +++++++++++
 1 file changed, 11 insertions(+)
drivers/block/ahci.c +11 -0
index 79710ef..5ffdf95 100644
@@ -260,8 +260,19 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)
 			if (!(tmp & (ATA_STAT_BUSY | ATA_STAT_DRQ)))
 				break;
 			udelay(1000);
+			tmp = readl(port_mmio + PORT_SCR_STAT) & 0xf;
+			if (tmp == 0x1)
+				break;
 			j++;
 		}
+
+		tmp = readl(port_mmio + PORT_SCR_STAT) & 0xf;
+		if (tmp == 0x1) {
+			debug("SATA link %d down (COMINIT received), retrying...\n", i);
+			i--;
+			continue;
+		}
+
 		printf("Target spinup took %d ms.\n", j);
 		if (j == WAIT_MS_SPINUP)
 			debug("timeout.\n");
Signature · 1 line
1.8.1.2
#9 lore raw

PATCH 5/7 ahci: handle COMINIT received during spin-up

Quoted 6 lines · Rob Herring

From: Rob Herring <[email protected]>

Some Intel SSDs can send a COMINIT after the initial COMRESET. This causes the link to go down and we need to re-initialize the link.

[snip]

drivers/block/ahci.c static int ahci_host_init(struct ahci_probe_ent *probe_ent) · line 274

Quoted 12 lines
drivers/block/ahci.c +10 -0
+			tmp = readl(port_mmio + PORT_SCR_STAT) & 0xf;
+			if (tmp == 0x1)
+				break;
 			j++;
 		}
+
+		tmp = readl(port_mmio + PORT_SCR_STAT) & 0xf;
+		if (tmp == 0x1) {
+			debug("SATA link %d down (COMINIT received), retrying...\n", i);
+			i--;
+			continue;
+		}

0xf and 0x1 are already defined to some MASK and command name I would hope, if not please define. Thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130524/48b372d3/attachment.pgp>
#10 lore raw

PATCH 6/7 ahci: increase spin-up timeout to 20 sec

In reply to Rob Herring

From: Rob Herring <[email protected]>

Based on Linux libata code, most drives are less than 10 sec, but some need up to 20 sec.

---
 drivers/block/ahci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/ahci.c +1 -1
index 5ffdf95..ac60891 100644
@@ -55,7 +55,7 @@ hd_driveid_t *ataid[AHCI_MAX_PORTS];
 #endif
 
 /* Maximum timeouts for each event */
-#define WAIT_MS_SPINUP	10000
+#define WAIT_MS_SPINUP	20000
 #define WAIT_MS_DATAIO	5000
 #define WAIT_MS_FLUSH	5000
 #define WAIT_MS_LINKUP	4
Signature · 1 line
1.8.1.2
#11 lore raw

PATCH 6/7 ahci: increase spin-up timeout to 20 sec

Quoted 6 lines · Rob Herring

From: Rob Herring <[email protected]>

Based on Linux libata code, most drives are less than 10 sec, but some need up to 20 sec.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130524/4352ba50/attachment.pgp>
#12 lore raw

PATCH 7/7 ahci: convert to use libata functions and definitions

In reply to Rob Herring

From: Rob Herring <[email protected]>

libata already has similar functions as implemented in the ahci code. Refactor the code to use the libata variants and remove the dependency on ata.h. Convert some defines to use the version from libata.h. Also, remove some unnecessary memset's of bss data.

This is a step toward hopefully merging ahci.c and dw_ahsata.c which are essentially the same driver.

---
 drivers/block/ahci.c          | 80 +++++++++++++------------------------------
 include/ahci.h                | 23 -------------
 include/configs/MPC8544DS.h   |  1 +
 include/configs/MPC8572DS.h   |  1 +
 include/configs/MPC8610HPCD.h |  1 +
 include/configs/MPC8641HPCN.h |  1 +
 include/configs/P2020DS.h     |  1 +
 include/configs/coreboot.h    |  1 +
 include/configs/highbank.h    |  1 +
 9 files changed, 31 insertions(+), 79 deletions(-)
drivers/block/ahci.c +24 -56
index ac60891..8c17f1a 100644
@@ -33,14 +33,14 @@
 #include <asm/io.h>
 #include <malloc.h>
 #include <scsi.h>
-#include <ata.h>
+#include <libata.h>
 #include <linux/ctype.h>
 #include <ahci.h>
 
 static int ata_io_flush(u8 port);
 
 struct ahci_probe_ent *probe_ent = NULL;
-hd_driveid_t *ataid[AHCI_MAX_PORTS];
+u16 *ataid[AHCI_MAX_PORTS];
 
 #define writel_with_flush(a,b)	do { writel(a,b); readl(b); } while (0)
 
@@ -257,7 +257,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)
 		j = 0;
 		while (j < WAIT_MS_SPINUP) {
 			tmp = readl(port_mmio + PORT_TFDATA);
-			if (!(tmp & (ATA_STAT_BUSY | ATA_STAT_DRQ)))
+			if (!(tmp & (ATA_BUSY | ATA_DRQ)))
 				break;
 			udelay(1000);
 			tmp = readl(port_mmio + PORT_SCR_STAT) & 0xf;
@@ -394,8 +394,6 @@ static int ahci_init_one(pci_dev_t pdev)
 	u16 vendor;
 	int rc;
 
-	memset((void *)ataid, 0, sizeof(hd_driveid_t *) * AHCI_MAX_PORTS);
-
 	probe_ent = malloc(sizeof(struct ahci_probe_ent));
 	memset(probe_ent, 0, sizeof(struct ahci_probe_ent));
 	probe_ent->dev = pdev;
@@ -485,7 +483,7 @@ static void ahci_set_feature(u8 port)
 	memset(fis, 0, sizeof(fis));
 	fis[0] = 0x27;
 	fis[1] = 1 << 7;
-	fis[2] = ATA_CMD_SETF;
+	fis[2] = ATA_CMD_SET_FEATURES;
 	fis[3] = SETFEATURES_XFER;
 	fis[12] = __ilog2(probe_ent->udma_mask + 1) + 0x40 - 0x01;
 
@@ -623,27 +621,6 @@ static char *ata_id_strcpy(u16 *target, u16 *src, int len)
 	return (char *)target;
 }
 
-
-static void dump_ataid(hd_driveid_t *ataid)
-{
-	debug("(49)ataid->capability = 0x%x\n", ataid->capability);
-	debug("(53)ataid->field_valid =0x%x\n", ataid->field_valid);
-	debug("(63)ataid->dma_mword = 0x%x\n", ataid->dma_mword);
-	debug("(64)ataid->eide_pio_modes = 0x%x\n", ataid->eide_pio_modes);
-	debug("(75)ataid->queue_depth = 0x%x\n", ataid->queue_depth);
-	debug("(80)ataid->major_rev_num = 0x%x\n", ataid->major_rev_num);
-	debug("(81)ataid->minor_rev_num = 0x%x\n", ataid->minor_rev_num);
-	debug("(82)ataid->command_set_1 = 0x%x\n", ataid->command_set_1);
-	debug("(83)ataid->command_set_2 = 0x%x\n", ataid->command_set_2);
-	debug("(84)ataid->cfsse = 0x%x\n", ataid->cfsse);
-	debug("(85)ataid->cfs_enable_1 = 0x%x\n", ataid->cfs_enable_1);
-	debug("(86)ataid->cfs_enable_2 = 0x%x\n", ataid->cfs_enable_2);
-	debug("(87)ataid->csf_default = 0x%x\n", ataid->csf_default);
-	debug("(88)ataid->dma_ultra = 0x%x\n", ataid->dma_ultra);
-	debug("(93)ataid->hw_config = 0x%x\n", ataid->hw_config);
-}
-
-
 /*
  * SCSI INQUIRY command operation.
  */
@@ -657,7 +634,7 @@ static int ata_scsiop_inquiry(ccb *pccb)
 		95 - 4,
 	};
 	u8 fis[20];
-	u8 *tmpid;
+	u16 *tmpid;
 	u8 port;
 
 	/* Clean ccb data buffer */
@@ -672,15 +649,16 @@ static int ata_scsiop_inquiry(ccb *pccb)
 	/* Construct the FIS */
 	fis[0] = 0x27;		/* Host to device FIS. */
 	fis[1] = 1 << 7;	/* Command FIS. */
-	fis[2] = ATA_CMD_IDENT;	/* Command byte. */
+	fis[2] = ATA_CMD_ID_ATA; /* Command byte. */
 
 	/* Read id from sata */
 	port = pccb->target;
-	if (!(tmpid = malloc(sizeof(hd_driveid_t))))
+	tmpid = malloc(ATA_ID_WORDS * 2);
+	if (!tmpid)
 		return -ENOMEM;
 
-	if (ahci_device_data_io(port, (u8 *) &fis, sizeof(fis), tmpid,
-				sizeof(hd_driveid_t), 0)) {
+	if (ahci_device_data_io(port, (u8 *) &fis, sizeof(fis), (u8 *)tmpid,
+				ATA_ID_WORDS * 2, 0)) {
 		debug("scsi_ahci: SCSI inquiry command failure.\n");
 		free(tmpid);
 		return -EIO;
@@ -688,13 +666,16 @@ static int ata_scsiop_inquiry(ccb *pccb)
 
 	if (ataid[port])
 		free(ataid[port]);
-	ataid[port] = (hd_driveid_t *) tmpid;
+	ataid[port] = tmpid;
+	ata_swap_buf_le16(tmpid, ATA_ID_WORDS);
 
 	memcpy(&pccb->pdata[8], "ATA     ", 8);
-	ata_id_strcpy((u16 *) &pccb->pdata[16], (u16 *)ataid[port]->model, 16);
-	ata_id_strcpy((u16 *) &pccb->pdata[32], (u16 *)ataid[port]->fw_rev, 4);
+	ata_id_strcpy((u16 *) &pccb->pdata[16], &tmpid[ATA_ID_PROD], 16);
+	ata_id_strcpy((u16 *) &pccb->pdata[32], &tmpid[ATA_ID_FW_REV], 4);
 
-	dump_ataid(ataid[port]);
+#ifdef DEBUG
+	ata_dump_id(tmpid);
+#endif
 	return 0;
 }
 
@@ -742,7 +723,7 @@ static int ata_scsiop_read_write(ccb *pccb, u8 is_write)
 
 		now_blocks = min(MAX_SATA_BLOCKS_READ_WRITE, blocks);
 
-		transfer_size = ATA_BLOCKSIZE * now_blocks;
+		transfer_size = ATA_SECT_SIZE * now_blocks;
 		if (transfer_size > user_buffer_size) {
 			printf("scsi_ahci: Error: buffer too small.\n");
 			return -EIO;
@@ -797,6 +778,7 @@ static int ata_scsiop_read_write(ccb *pccb, u8 is_write)
 static int ata_scsiop_read_capacity10(ccb *pccb)
 {
 	u32 cap;
+	u64 cap64;
 	u32 block_size;
 
 	if (!ataid[pccb->target]) {
@@ -806,18 +788,11 @@ static int ata_scsiop_read_capacity10(ccb *pccb)
 		return -EPERM;
 	}
 
-	cap = le32_to_cpu(ataid[pccb->target]->lba_capacity);
-	if (cap == 0xfffffff) {
-		unsigned short *cap48 = ataid[pccb->target]->lba48_capacity;
-		if (cap48[2] || cap48[3]) {
-			cap = 0xffffffff;
-		} else {
-			cap = (le16_to_cpu(cap48[1]) << 16) |
-			      (le16_to_cpu(cap48[0]));
-		}
-	}
+	cap64 = ata_id_n_sectors(ataid[pccb->target]);
+	if (cap64 > 0x100000000ULL)
+		cap64 = 0xffffffff;
 
-	cap = cpu_to_be32(cap);
+	cap = cpu_to_be32(cap64);
 	memcpy(pccb->pdata, &cap, sizeof(cap));
 
 	block_size = cpu_to_be32((u32)512);
@@ -842,12 +817,7 @@ static int ata_scsiop_read_capacity16(ccb *pccb)
 		return -EPERM;
 	}
 
-	cap = le32_to_cpu(ataid[pccb->target]->lba_capacity);
-	if (cap == 0xfffffff) {
-		memcpy(&cap, ataid[pccb->target]->lba48_capacity, sizeof(cap));
-		cap = le64_to_cpu(cap);
-	}
-
+	cap = ata_id_n_sectors(ataid[pccb->target]);
 	cap = cpu_to_be64(cap);
 	memcpy(pccb->pdata, &cap, sizeof(cap));
 
@@ -934,8 +904,6 @@ int ahci_init(u32 base)
 	int i, rc = 0;
 	u32 linkmap;
 
-	memset(ataid, 0, sizeof(ataid));
-
 	probe_ent = malloc(sizeof(struct ahci_probe_ent));
 	memset(probe_ent, 0, sizeof(struct ahci_probe_ent));
 
include/ahci.h +0 -23
index babbdc6..16ef08f 100644
@@ -120,29 +120,6 @@
 
 #define AHCI_MAX_PORTS		32
 
-/* SETFEATURES stuff */
-#define SETFEATURES_XFER	0x03
-#define XFER_UDMA_7		0x47
-#define XFER_UDMA_6		0x46
-#define XFER_UDMA_5		0x45
-#define XFER_UDMA_4		0x44
-#define XFER_UDMA_3		0x43
-#define XFER_UDMA_2		0x42
-#define XFER_UDMA_1		0x41
-#define XFER_UDMA_0		0x40
-#define XFER_MW_DMA_2		0x22
-#define XFER_MW_DMA_1		0x21
-#define XFER_MW_DMA_0		0x20
-#define XFER_SW_DMA_2		0x12
-#define XFER_SW_DMA_1		0x11
-#define XFER_SW_DMA_0		0x10
-#define XFER_PIO_4		0x0C
-#define XFER_PIO_3		0x0B
-#define XFER_PIO_2		0x0A
-#define XFER_PIO_1		0x09
-#define XFER_PIO_0		0x08
-#define XFER_PIO_SLOW		0x00
-
 #define ATA_FLAG_SATA		(1 << 3)
 #define ATA_FLAG_NO_LEGACY	(1 << 4) /* no legacy mode check */
 #define ATA_FLAG_MMIO		(1 << 6) /* use MMIO, not PIO */
include/configs/MPC8544DS.h +1 -0
index d5f3c5f..a556783 100644
@@ -334,6 +334,7 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #define CONFIG_SCSI_AHCI
 
 #ifdef CONFIG_SCSI_AHCI
+#define CONFIG_LIBATA
 #define CONFIG_SATA_ULI5288
 #define CONFIG_SYS_SCSI_MAX_SCSI_ID	4
 #define CONFIG_SYS_SCSI_MAX_LUN	1
include/configs/MPC8572DS.h +1 -0
index d233365..b6f4e2e 100644
@@ -554,6 +554,7 @@
 #define CONFIG_SCSI_AHCI
 
 #ifdef CONFIG_SCSI_AHCI
+#define CONFIG_LIBATA
 #define CONFIG_SATA_ULI5288
 #define CONFIG_SYS_SCSI_MAX_SCSI_ID	4
 #define CONFIG_SYS_SCSI_MAX_LUN	1
include/configs/MPC8610HPCD.h +1 -0
index c619827..c48d76b 100644
@@ -326,6 +326,7 @@
 #define CONFIG_SCSI_AHCI
 
 #ifdef CONFIG_SCSI_AHCI
+#define CONFIG_LIBATA
 #define CONFIG_SATA_ULI5288
 #define CONFIG_SYS_SCSI_MAX_SCSI_ID	4
 #define CONFIG_SYS_SCSI_MAX_LUN	1
include/configs/MPC8641HPCN.h +1 -0
index 2643097..f4206b2 100644
@@ -429,6 +429,7 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #define CONFIG_SCSI_AHCI
 
 #ifdef CONFIG_SCSI_AHCI
+#define CONFIG_LIBATA
 #define CONFIG_SATA_ULI5288
 #define CONFIG_SYS_SCSI_MAX_SCSI_ID	4
 #define CONFIG_SYS_SCSI_MAX_LUN	1
include/configs/P2020DS.h +1 -0
index a975ee1..f4d4bbc 100644
@@ -527,6 +527,7 @@
 #define CONFIG_SCSI_AHCI
 
 #ifdef CONFIG_SCSI_AHCI
+#define CONFIG_LIBATA
 #define CONFIG_SATA_ULI5288
 #define CONFIG_SYS_SCSI_MAX_SCSI_ID	4
 #define CONFIG_SYS_SCSI_MAX_LUN	1
include/configs/coreboot.h +1 -0
index be04a75..f456744 100644
@@ -72,6 +72,7 @@
 #define CONFIG_SCSI_AHCI
 
 #ifdef CONFIG_SCSI_AHCI
+#define CONFIG_LIBATA
 #define CONFIG_SYS_64BIT_LBA
 #define CONFIG_SATA_INTEL		1
 #define CONFIG_SCSI_DEV_LIST		{PCI_VENDOR_ID_INTEL, \
include/configs/highbank.h +1 -0
index 62cc08c..123befd 100644
@@ -46,6 +46,7 @@
 #define CONFIG_SYS_BOOTCOUNT_ADDR	0xfff3cf0c
 
 #define CONFIG_MISC_INIT_R
+#define CONFIG_LIBATA
 #define CONFIG_SCSI_AHCI
 #define CONFIG_SCSI_AHCI_PLAT
 #define CONFIG_SYS_SCSI_MAX_SCSI_ID	5
Signature · 1 line
1.8.1.2
#13 lore raw

PATCH 7/7 ahci: convert to use libata functions and definitions

Quoted 11 lines · Rob Herring

From: Rob Herring <[email protected]>

libata already has similar functions as implemented in the ahci code. Refactor the code to use the libata variants and remove the dependency on ata.h. Convert some defines to use the version from libata.h. Also, remove some unnecessary memset's of bss data.

This is a step toward hopefully merging ahci.c and dw_ahsata.c which are essentially the same driver.

Looks OK so:

But did you build coreboot/powerpc to make sure they still link fine at least and we've got no new warnings? Thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130524/3ab2c655/attachment.pgp>
#14 lore raw

PATCH 1/7 ahci: use ports implemented map instead of num_ports

In reply to Rob Herring
Quoted 7 lines · Rob Herring

From: Richard Gibbs <[email protected]>

The AHCI driver was incorrectly using the Capabilities register NP (number of ports) field to determine which ports to activate. This commit changes it to correctly use the PORTS_IMPL register as a port map.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130524/a3a14bbd/attachment.pgp>