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

Commit c59bcc37 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz Committed by Jeff Garzik
Browse files

pata_atp867x: PIO support fixes



* use  8 clk setting for active clocks == 7 (was 12 clk)
* use 12 clk setting for active clocks > 12 (was  8 clk)
* do 66MHz bus fixup before mapping active clocks
* fix setup of PIO command timings

Acked-by: default avatarJung-Ik (John) Lee <jilee@google.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 64207f59
Loading
Loading
Loading
Loading
+19 −17
Original line number Diff line number Diff line
@@ -155,30 +155,31 @@ static int atp867x_get_active_clocks_shifted(struct ata_port *ap,
	struct atp867x_priv *dp = ap->private_data;
	unsigned char clocks = clk;

	/*
	 * Doc 6.6.9: increase the clock value by 1 for safer PIO speed
	 * on 66MHz bus
	 */
	if (dp->pci66mhz)
		clocks++;

	switch (clocks) {
	case 0:
		clocks = 1;
		break;
	case 1 ... 7:
		break;
	case 9 ... 12:
		clocks = 7;
	case 1 ... 6:
		break;
	default:
		printk(KERN_WARNING "ATP867X: active %dclk is invalid. "
			"Using default 8clk.\n", clk);
			"Using 12clk.\n", clk);
	case 9 ... 12:
		clocks = 7;	/* 12 clk */
		break;
	case 7:
	case 8:	/* default 8 clk */
		clocks = 0;
		goto active_clock_shift_done;
	}

	/*
	 * Doc 6.6.9: increase the clock value by 1 for safer PIO speed
	 * on 66MHz bus
	 */
	if (dp->pci66mhz && clocks < 7)
		clocks++;

active_clock_shift_done:
	return clocks << ATP867X_IO_PIOSPD_ACTIVE_SHIFT;
}
@@ -193,7 +194,8 @@ static int atp867x_get_recover_clocks_shifted(unsigned int clk)
		break;
	case 1 ... 11:
		break;
	case 13: case 14:
	case 13:
	case 14:
		--clocks;	/* by the spec */
		break;
	case 15:
@@ -242,9 +244,9 @@ static void atp867x_set_piomode(struct ata_port *ap, struct ata_device *adev)
	else
		iowrite8(b, dp->mstr_piospd);

	/*
	 * use the same value for comand timing as for PIO timimg
	 */
	b = atp867x_get_active_clocks_shifted(ap, t.act8b) |
	    atp867x_get_recover_clocks_shifted(t.rec8b);

	iowrite8(b, dp->eightb_piospd);
}