1 /*
2  * Driver for Blackfin on-chip ATAPI controller.
3  *
4  * Enter bugs at http://blackfin.uclinux.org/
5  *
6  * Copyright (c) 2008 Analog Devices Inc.
7  *
8  * Licensed under the GPL-2 or later.
9  */
10 
11 #include <common.h>
12 #include <command.h>
13 #include <config.h>
14 #include <asm/byteorder.h>
15 #include <asm/io.h>
16 #include <asm/errno.h>
17 #include <asm/mach-common/bits/pata.h>
18 #include <ata.h>
19 #include <libata.h>
20 #include "pata_bfin.h"
21 
22 static struct ata_port port[CONFIG_SYS_SATA_MAX_DEVICE];
23 
24 /**
25  * PIO Mode - Frequency compatibility
26  */
27 /* mode: 0         1         2         3         4 */
28 static const u32 pio_fsclk[] =
29 { 33333333, 33333333, 33333333, 33333333, 33333333 };
30 
31 /**
32  * MDMA Mode - Frequency compatibility
33  */
34 /*               mode:      0         1         2        */
35 static const u32 mdma_fsclk[] = { 33333333, 33333333, 33333333 };
36 
37 /**
38  * UDMA Mode - Frequency compatibility
39  *
40  * UDMA5 - 100 MB/s   - SCLK  = 133 MHz
41  * UDMA4 - 66 MB/s    - SCLK >=  80 MHz
42  * UDMA3 - 44.4 MB/s  - SCLK >=  50 MHz
43  * UDMA2 - 33 MB/s    - SCLK >=  40 MHz
44  */
45 /* mode: 0         1         2         3         4          5 */
46 static const u32 udma_fsclk[] =
47 { 33333333, 33333333, 40000000, 50000000, 80000000, 133333333 };
48 
49 /**
50  * Register transfer timing table
51  */
52 /*               mode:       0    1    2    3    4    */
53 /* Cycle Time                     */
54 static const u32 reg_t0min[]   = { 600, 383, 330, 180, 120 };
55 /* DIOR/DIOW to end cycle         */
56 static const u32 reg_t2min[]   = { 290, 290, 290, 70,  25  };
57 /* DIOR/DIOW asserted pulse width */
58 static const u32 reg_teocmin[] = { 290, 290, 290, 80,  70  };
59 
60 /**
61  * PIO timing table
62  */
63 /*               mode:       0    1    2    3    4    */
64 /* Cycle Time                     */
65 static const u32 pio_t0min[]   = { 600, 383, 240, 180, 120 };
66 /* Address valid to DIOR/DIORW    */
67 static const u32 pio_t1min[]   = { 70,  50,  30,  30,  25  };
68 /* DIOR/DIOW to end cycle         */
69 static const u32 pio_t2min[]   = { 165, 125, 100, 80,  70  };
70 /* DIOR/DIOW asserted pulse width */
71 static const u32 pio_teocmin[] = { 165, 125, 100, 70,  25  };
72 /* DIOW data hold                 */
73 static const u32 pio_t4min[]   = { 30,  20,  15,  10,  10  };
74 
75 /* ******************************************************************
76  * Multiword DMA timing table
77  * ******************************************************************
78  */
79 /*               mode:       0   1    2        */
80 /* Cycle Time                     */
81 static const u32 mdma_t0min[]  = { 480, 150, 120 };
82 /* DIOR/DIOW asserted pulse width */
83 static const u32 mdma_tdmin[]  = { 215, 80,  70  };
84 /* DMACK to read data released    */
85 static const u32 mdma_thmin[]  = { 20,  15,  10  };
86 /* DIOR/DIOW to DMACK hold        */
87 static const u32 mdma_tjmin[]  = { 20,  5,   5   };
88 /* DIOR negated pulse width       */
89 static const u32 mdma_tkrmin[] = { 50,  50,  25  };
90 /* DIOR negated pulse width       */
91 static const u32 mdma_tkwmin[] = { 215, 50,  25  };
92 /* CS[1:0] valid to DIOR/DIOW     */
93 static const u32 mdma_tmmin[]  = { 50,  30,  25  };
94 /* DMACK to read data released    */
95 static const u32 mdma_tzmax[]  = { 20,  25,  25  };
96 
97 /**
98  * Ultra DMA timing table
99  */
100 /*               mode:         0    1    2    3    4    5       */
101 static const u32 udma_tcycmin[]  = { 112, 73,  54,  39,  25,  17 };
102 static const u32 udma_tdvsmin[]  = { 70,  48,  31,  20,  7,   5  };
103 static const u32 udma_tenvmax[]  = { 70,  70,  70,  55,  55,  50 };
104 static const u32 udma_trpmin[]   = { 160, 125, 100, 100, 100, 85 };
105 static const u32 udma_tmin[]     = { 5,   5,   5,   5,   3,   3  };
106 
107 
108 static const u32 udma_tmlimin = 20;
109 static const u32 udma_tzahmin = 20;
110 static const u32 udma_tenvmin = 20;
111 static const u32 udma_tackmin = 20;
112 static const u32 udma_tssmin = 50;
113 
msleep(int count)114 static void msleep(int count)
115 {
116 	int i;
117 
118 	for (i = 0; i < count; i++)
119 		udelay(1000);
120 }
121 
122 /**
123  *
124  *	Function:       num_clocks_min
125  *
126  *	Description:
127  *	calculate number of SCLK cycles to meet minimum timing
128  */
num_clocks_min(unsigned long tmin,unsigned long fsclk)129 static unsigned short num_clocks_min(unsigned long tmin,
130 				unsigned long fsclk)
131 {
132 	unsigned long tmp ;
133 	unsigned short result;
134 
135 	tmp = tmin * (fsclk/1000/1000) / 1000;
136 	result = (unsigned short)tmp;
137 	if ((tmp*1000*1000) < (tmin*(fsclk/1000)))
138 		result++;
139 
140 	return result;
141 }
142 
143 /**
144  *	bfin_set_piomode - Initialize host controller PATA PIO timings
145  *	@ap: Port whose timings we are configuring
146  *	@pio_mode: mode
147  *
148  *	Set PIO mode for device.
149  *
150  *	LOCKING:
151  *	None (inherited from caller).
152  */
153 
bfin_set_piomode(struct ata_port * ap,int pio_mode)154 static void bfin_set_piomode(struct ata_port *ap, int pio_mode)
155 {
156 	int mode = pio_mode - XFER_PIO_0;
157 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
158 	unsigned int fsclk = get_sclk();
159 	unsigned short teoc_reg, t2_reg, teoc_pio;
160 	unsigned short t4_reg, t2_pio, t1_reg;
161 	unsigned short n0, n6, t6min = 5;
162 
163 	/* the most restrictive timing value is t6 and tc, the DIOW - data hold
164 	* If one SCLK pulse is longer than this minimum value then register
165 	* transfers cannot be supported at this frequency.
166 	*/
167 	n6 = num_clocks_min(t6min, fsclk);
168 	if (mode >= 0 && mode <= 4 && n6 >= 1) {
169 		debug("set piomode: mode=%d, fsclk=%ud\n", mode, fsclk);
170 		/* calculate the timing values for register transfers. */
171 		while (mode > 0 && pio_fsclk[mode] > fsclk)
172 			mode--;
173 
174 		/* DIOR/DIOW to end cycle time */
175 		t2_reg = num_clocks_min(reg_t2min[mode], fsclk);
176 		/* DIOR/DIOW asserted pulse width */
177 		teoc_reg = num_clocks_min(reg_teocmin[mode], fsclk);
178 		/* Cycle Time */
179 		n0  = num_clocks_min(reg_t0min[mode], fsclk);
180 
181 		/* increase t2 until we meed the minimum cycle length */
182 		if (t2_reg + teoc_reg < n0)
183 			t2_reg = n0 - teoc_reg;
184 
185 		/* calculate the timing values for pio transfers. */
186 
187 		/* DIOR/DIOW to end cycle time */
188 		t2_pio = num_clocks_min(pio_t2min[mode], fsclk);
189 		/* DIOR/DIOW asserted pulse width */
190 		teoc_pio = num_clocks_min(pio_teocmin[mode], fsclk);
191 		/* Cycle Time */
192 		n0  = num_clocks_min(pio_t0min[mode], fsclk);
193 
194 		/* increase t2 until we meed the minimum cycle length */
195 		if (t2_pio + teoc_pio < n0)
196 			t2_pio = n0 - teoc_pio;
197 
198 		/* Address valid to DIOR/DIORW */
199 		t1_reg = num_clocks_min(pio_t1min[mode], fsclk);
200 
201 		/* DIOW data hold */
202 		t4_reg = num_clocks_min(pio_t4min[mode], fsclk);
203 
204 		ATAPI_SET_REG_TIM_0(base, (teoc_reg<<8 | t2_reg));
205 		ATAPI_SET_PIO_TIM_0(base, (t4_reg<<12 | t2_pio<<4 | t1_reg));
206 		ATAPI_SET_PIO_TIM_1(base, teoc_pio);
207 		if (mode > 2) {
208 			ATAPI_SET_CONTROL(base,
209 				ATAPI_GET_CONTROL(base) | IORDY_EN);
210 		} else {
211 			ATAPI_SET_CONTROL(base,
212 				ATAPI_GET_CONTROL(base) & ~IORDY_EN);
213 		}
214 
215 		/* Disable host ATAPI PIO interrupts */
216 		ATAPI_SET_INT_MASK(base, ATAPI_GET_INT_MASK(base)
217 			& ~(PIO_DONE_MASK | HOST_TERM_XFER_MASK));
218 		SSYNC();
219 	}
220 }
221 
222 /**
223  *
224  *    Function:       wait_complete
225  *
226  *    Description:    Waits the interrupt from device
227  *
228  */
wait_complete(void __iomem * base,unsigned short mask)229 static inline void wait_complete(void __iomem *base, unsigned short mask)
230 {
231 	unsigned short status;
232 	unsigned int i = 0;
233 
234 	for (i = 0; i < PATA_BFIN_WAIT_TIMEOUT; i++) {
235 		status = ATAPI_GET_INT_STATUS(base) & mask;
236 		if (status)
237 			break;
238 	}
239 
240 	ATAPI_SET_INT_STATUS(base, mask);
241 }
242 
243 /**
244  *
245  *    Function:       write_atapi_register
246  *
247  *    Description:    Writes to ATA Device Resgister
248  *
249  */
250 
write_atapi_register(void __iomem * base,unsigned long ata_reg,unsigned short value)251 static void write_atapi_register(void __iomem *base,
252 		unsigned long ata_reg, unsigned short value)
253 {
254 	/* Program the ATA_DEV_TXBUF register with write data (to be
255 	 * written into the device).
256 	 */
257 	ATAPI_SET_DEV_TXBUF(base, value);
258 
259 	/* Program the ATA_DEV_ADDR register with address of the
260 	 * device register (0x01 to 0x0F).
261 	 */
262 	ATAPI_SET_DEV_ADDR(base, ata_reg);
263 
264 	/* Program the ATA_CTRL register with dir set to write (1)
265 	 */
266 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) | XFER_DIR));
267 
268 	/* ensure PIO DMA is not set */
269 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) & ~PIO_USE_DMA));
270 
271 	/* and start the transfer */
272 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) | PIO_START));
273 
274 	/* Wait for the interrupt to indicate the end of the transfer.
275 	 * (We need to wait on and clear rhe ATA_DEV_INT interrupt status)
276 	 */
277 	wait_complete(base, PIO_DONE_INT);
278 }
279 
280 /**
281  *
282  *	Function:       read_atapi_register
283  *
284  *Description:    Reads from ATA Device Resgister
285  *
286  */
287 
read_atapi_register(void __iomem * base,unsigned long ata_reg)288 static unsigned short read_atapi_register(void __iomem *base,
289 		unsigned long ata_reg)
290 {
291 	/* Program the ATA_DEV_ADDR register with address of the
292 	 * device register (0x01 to 0x0F).
293 	 */
294 	ATAPI_SET_DEV_ADDR(base, ata_reg);
295 
296 	/* Program the ATA_CTRL register with dir set to read (0) and
297 	 */
298 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) & ~XFER_DIR));
299 
300 	/* ensure PIO DMA is not set */
301 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) & ~PIO_USE_DMA));
302 
303 	/* and start the transfer */
304 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) | PIO_START));
305 
306 	/* Wait for the interrupt to indicate the end of the transfer.
307 	 * (PIO_DONE interrupt is set and it doesn't seem to matter
308 	 * that we don't clear it)
309 	 */
310 	wait_complete(base, PIO_DONE_INT);
311 
312 	/* Read the ATA_DEV_RXBUF register with write data (to be
313 	 * written into the device).
314 	 */
315 	return ATAPI_GET_DEV_RXBUF(base);
316 }
317 
318 /**
319  *
320  *    Function:       write_atapi_register_data
321  *
322  *    Description:    Writes to ATA Device Resgister
323  *
324  */
325 
write_atapi_data(void __iomem * base,int len,unsigned short * buf)326 static void write_atapi_data(void __iomem *base,
327 		int len, unsigned short *buf)
328 {
329 	int i;
330 
331 	/* Set transfer length to 1 */
332 	ATAPI_SET_XFER_LEN(base, 1);
333 
334 	/* Program the ATA_DEV_ADDR register with address of the
335 	 * ATA_REG_DATA
336 	 */
337 	ATAPI_SET_DEV_ADDR(base, ATA_REG_DATA);
338 
339 	/* Program the ATA_CTRL register with dir set to write (1)
340 	 */
341 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) | XFER_DIR));
342 
343 	/* ensure PIO DMA is not set */
344 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) & ~PIO_USE_DMA));
345 
346 	for (i = 0; i < len; i++) {
347 		/* Program the ATA_DEV_TXBUF register with write data (to be
348 		 * written into the device).
349 		 */
350 		ATAPI_SET_DEV_TXBUF(base, buf[i]);
351 
352 		/* and start the transfer */
353 		ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) | PIO_START));
354 
355 		/* Wait for the interrupt to indicate the end of the transfer.
356 		 * (We need to wait on and clear rhe ATA_DEV_INT
357 		 * interrupt status)
358 		 */
359 		wait_complete(base, PIO_DONE_INT);
360 	}
361 }
362 
363 /**
364  *
365  *	Function:       read_atapi_register_data
366  *
367  *	Description:    Reads from ATA Device Resgister
368  *
369  */
370 
read_atapi_data(void __iomem * base,int len,unsigned short * buf)371 static void read_atapi_data(void __iomem *base,
372 		int len, unsigned short *buf)
373 {
374 	int i;
375 
376 	/* Set transfer length to 1 */
377 	ATAPI_SET_XFER_LEN(base, 1);
378 
379 	/* Program the ATA_DEV_ADDR register with address of the
380 	 * ATA_REG_DATA
381 	 */
382 	ATAPI_SET_DEV_ADDR(base, ATA_REG_DATA);
383 
384 	/* Program the ATA_CTRL register with dir set to read (0) and
385 	 */
386 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) & ~XFER_DIR));
387 
388 	/* ensure PIO DMA is not set */
389 	ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) & ~PIO_USE_DMA));
390 
391 	for (i = 0; i < len; i++) {
392 		/* and start the transfer */
393 		ATAPI_SET_CONTROL(base, (ATAPI_GET_CONTROL(base) | PIO_START));
394 
395 		/* Wait for the interrupt to indicate the end of the transfer.
396 		 * (PIO_DONE interrupt is set and it doesn't seem to matter
397 		 * that we don't clear it)
398 		 */
399 		wait_complete(base, PIO_DONE_INT);
400 
401 		/* Read the ATA_DEV_RXBUF register with write data (to be
402 		 * written into the device).
403 		 */
404 		buf[i] = ATAPI_GET_DEV_RXBUF(base);
405 	}
406 }
407 
408 /**
409  *	bfin_check_status - Read device status reg & clear interrupt
410  *	@ap: port where the device is
411  *
412  *	Note: Original code is ata_check_status().
413  */
414 
bfin_check_status(struct ata_port * ap)415 static u8 bfin_check_status(struct ata_port *ap)
416 {
417 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
418 	return read_atapi_register(base, ATA_REG_STATUS);
419 }
420 
421 /**
422  *	bfin_check_altstatus - Read device alternate status reg
423  *	@ap: port where the device is
424  */
425 
bfin_check_altstatus(struct ata_port * ap)426 static u8 bfin_check_altstatus(struct ata_port *ap)
427 {
428 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
429 	return read_atapi_register(base, ATA_REG_ALTSTATUS);
430 }
431 
432 /**
433  *      bfin_ata_busy_wait - Wait for a port status register
434  *      @ap: Port to wait for.
435  *      @bits: bits that must be clear
436  *      @max: number of 10uS waits to perform
437  *
438  *      Waits up to max*10 microseconds for the selected bits in the port's
439  *      status register to be cleared.
440  *      Returns final value of status register.
441  *
442  *      LOCKING:
443  *      Inherited from caller.
444  */
bfin_ata_busy_wait(struct ata_port * ap,unsigned int bits,unsigned int max,u8 usealtstatus)445 static inline u8 bfin_ata_busy_wait(struct ata_port *ap, unsigned int bits,
446 				unsigned int max, u8 usealtstatus)
447 {
448 	u8 status;
449 
450 	do {
451 		udelay(10);
452 		if (usealtstatus)
453 			status = bfin_check_altstatus(ap);
454 		else
455 			status = bfin_check_status(ap);
456 		max--;
457 	} while (status != 0xff && (status & bits) && (max > 0));
458 
459 	return status;
460 }
461 
462 /**
463  *	bfin_ata_busy_sleep - sleep until BSY clears, or timeout
464  *	@ap: port containing status register to be polled
465  *	@tmout_pat: impatience timeout in msecs
466  *	@tmout: overall timeout in msecs
467  *
468  *	Sleep until ATA Status register bit BSY clears,
469  *	or a timeout occurs.
470  *
471  *	RETURNS:
472  *	0 on success, -errno otherwise.
473  */
bfin_ata_busy_sleep(struct ata_port * ap,long tmout_pat,unsigned long tmout)474 static int bfin_ata_busy_sleep(struct ata_port *ap,
475 		       long tmout_pat, unsigned long tmout)
476 {
477 	u8 status;
478 
479 	status = bfin_ata_busy_wait(ap, ATA_BUSY, 300, 0);
480 	while (status != 0xff && (status & ATA_BUSY) && tmout_pat > 0) {
481 		msleep(50);
482 		tmout_pat -= 50;
483 		status = bfin_ata_busy_wait(ap, ATA_BUSY, 3, 0);
484 	}
485 
486 	if (status != 0xff && (status & ATA_BUSY))
487 		printf("port is slow to respond, please be patient "
488 				"(Status 0x%x)\n", status);
489 
490 	while (status != 0xff && (status & ATA_BUSY) && tmout_pat > 0) {
491 		msleep(50);
492 		tmout_pat -= 50;
493 		status = bfin_check_status(ap);
494 	}
495 
496 	if (status == 0xff)
497 		return -ENODEV;
498 
499 	if (status & ATA_BUSY) {
500 		printf("port failed to respond "
501 				"(%lu secs, Status 0x%x)\n",
502 				DIV_ROUND_UP(tmout, 1000), status);
503 		return -EBUSY;
504 	}
505 
506 	return 0;
507 }
508 
509 /**
510  *	bfin_dev_select - Select device 0/1 on ATA bus
511  *	@ap: ATA channel to manipulate
512  *	@device: ATA device (numbered from zero) to select
513  *
514  *	Note: Original code is ata_sff_dev_select().
515  */
516 
bfin_dev_select(struct ata_port * ap,unsigned int device)517 static void bfin_dev_select(struct ata_port *ap, unsigned int device)
518 {
519 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
520 	u8 tmp;
521 
522 
523 	if (device == 0)
524 		tmp = ATA_DEVICE_OBS;
525 	else
526 		tmp = ATA_DEVICE_OBS | ATA_DEV1;
527 
528 	write_atapi_register(base, ATA_REG_DEVICE, tmp);
529 	udelay(1);
530 }
531 
532 /**
533  *	bfin_devchk - PATA device presence detection
534  *	@ap: ATA channel to examine
535  *	@device: Device to examine (starting at zero)
536  *
537  *	Note: Original code is ata_devchk().
538  */
539 
bfin_devchk(struct ata_port * ap,unsigned int device)540 static unsigned int bfin_devchk(struct ata_port *ap,
541 				unsigned int device)
542 {
543 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
544 	u8 nsect, lbal;
545 
546 	bfin_dev_select(ap, device);
547 
548 	write_atapi_register(base, ATA_REG_NSECT, 0x55);
549 	write_atapi_register(base, ATA_REG_LBAL, 0xaa);
550 
551 	write_atapi_register(base, ATA_REG_NSECT, 0xaa);
552 	write_atapi_register(base, ATA_REG_LBAL, 0x55);
553 
554 	write_atapi_register(base, ATA_REG_NSECT, 0x55);
555 	write_atapi_register(base, ATA_REG_LBAL, 0xaa);
556 
557 	nsect = read_atapi_register(base, ATA_REG_NSECT);
558 	lbal = read_atapi_register(base, ATA_REG_LBAL);
559 
560 	if ((nsect == 0x55) && (lbal == 0xaa))
561 		return 1;	/* we found a device */
562 
563 	return 0;		/* nothing found */
564 }
565 
566 /**
567  *	bfin_bus_post_reset - PATA device post reset
568  *
569  *	Note: Original code is ata_bus_post_reset().
570  */
571 
bfin_bus_post_reset(struct ata_port * ap,unsigned int devmask)572 static void bfin_bus_post_reset(struct ata_port *ap, unsigned int devmask)
573 {
574 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
575 	unsigned int dev0 = devmask & (1 << 0);
576 	unsigned int dev1 = devmask & (1 << 1);
577 	long deadline;
578 
579 	/* if device 0 was found in ata_devchk, wait for its
580 	 * BSY bit to clear
581 	 */
582 	if (dev0)
583 		bfin_ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT);
584 
585 	/* if device 1 was found in ata_devchk, wait for
586 	 * register access, then wait for BSY to clear
587 	 */
588 	deadline = ATA_TMOUT_BOOT;
589 	while (dev1) {
590 		u8 nsect, lbal;
591 
592 		bfin_dev_select(ap, 1);
593 		nsect = read_atapi_register(base, ATA_REG_NSECT);
594 		lbal = read_atapi_register(base, ATA_REG_LBAL);
595 		if ((nsect == 1) && (lbal == 1))
596 			break;
597 		if (deadline <= 0) {
598 			dev1 = 0;
599 			break;
600 		}
601 		msleep(50);	/* give drive a breather */
602 		deadline -= 50;
603 	}
604 	if (dev1)
605 		bfin_ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT);
606 
607 	/* is all this really necessary? */
608 	bfin_dev_select(ap, 0);
609 	if (dev1)
610 		bfin_dev_select(ap, 1);
611 	if (dev0)
612 		bfin_dev_select(ap, 0);
613 }
614 
615 /**
616  *	bfin_bus_softreset - PATA device software reset
617  *
618  *	Note: Original code is ata_bus_softreset().
619  */
620 
bfin_bus_softreset(struct ata_port * ap,unsigned int devmask)621 static unsigned int bfin_bus_softreset(struct ata_port *ap,
622 				       unsigned int devmask)
623 {
624 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
625 
626 	/* software reset.  causes dev0 to be selected */
627 	write_atapi_register(base, ATA_REG_CTRL, ap->ctl_reg);
628 	udelay(20);
629 	write_atapi_register(base, ATA_REG_CTRL, ap->ctl_reg | ATA_SRST);
630 	udelay(20);
631 	write_atapi_register(base, ATA_REG_CTRL, ap->ctl_reg);
632 
633 	/* spec mandates ">= 2ms" before checking status.
634 	 * We wait 150ms, because that was the magic delay used for
635 	 * ATAPI devices in Hale Landis's ATADRVR, for the period of time
636 	 * between when the ATA command register is written, and then
637 	 * status is checked.  Because waiting for "a while" before
638 	 * checking status is fine, post SRST, we perform this magic
639 	 * delay here as well.
640 	 *
641 	 * Old drivers/ide uses the 2mS rule and then waits for ready
642 	 */
643 	msleep(150);
644 
645 	/* Before we perform post reset processing we want to see if
646 	 * the bus shows 0xFF because the odd clown forgets the D7
647 	 * pulldown resistor.
648 	 */
649 	if (bfin_check_status(ap) == 0xFF)
650 		return 0;
651 
652 	bfin_bus_post_reset(ap, devmask);
653 
654 	return 0;
655 }
656 
657 /**
658  *	bfin_softreset - reset host port via ATA SRST
659  *	@ap: port to reset
660  *
661  *	Note: Original code is ata_sff_softreset().
662  */
663 
bfin_softreset(struct ata_port * ap)664 static int bfin_softreset(struct ata_port *ap)
665 {
666 	unsigned int err_mask;
667 
668 	ap->dev_mask = 0;
669 
670 	/* determine if device 0/1 are present.
671 	 * only one device is supported on one port by now.
672 	*/
673 	if (bfin_devchk(ap, 0))
674 		ap->dev_mask |= (1 << 0);
675 	else if (bfin_devchk(ap, 1))
676 		ap->dev_mask |= (1 << 1);
677 	else
678 		return -ENODEV;
679 
680 	/* select device 0 again */
681 	bfin_dev_select(ap, 0);
682 
683 	/* issue bus reset */
684 	err_mask = bfin_bus_softreset(ap, ap->dev_mask);
685 	if (err_mask) {
686 		printf("SRST failed (err_mask=0x%x)\n",
687 				err_mask);
688 		ap->dev_mask = 0;
689 		return -EIO;
690 	}
691 
692 	return 0;
693 }
694 
695 /**
696  *	bfin_irq_clear - Clear ATAPI interrupt.
697  *	@ap: Port associated with this ATA transaction.
698  *
699  *	Note: Original code is ata_sff_irq_clear().
700  */
701 
bfin_irq_clear(struct ata_port * ap)702 static void bfin_irq_clear(struct ata_port *ap)
703 {
704 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
705 
706 	ATAPI_SET_INT_STATUS(base, ATAPI_GET_INT_STATUS(base)|ATAPI_DEV_INT
707 		| MULTI_DONE_INT | UDMAIN_DONE_INT | UDMAOUT_DONE_INT
708 		| MULTI_TERM_INT | UDMAIN_TERM_INT | UDMAOUT_TERM_INT);
709 }
710 
bfin_wait_for_irq(struct ata_port * ap,unsigned int max)711 static u8 bfin_wait_for_irq(struct ata_port *ap, unsigned int max)
712 {
713 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
714 
715 	do {
716 		if (ATAPI_GET_INT_STATUS(base) & (ATAPI_DEV_INT
717 		| MULTI_DONE_INT | UDMAIN_DONE_INT | UDMAOUT_DONE_INT
718 		| MULTI_TERM_INT | UDMAIN_TERM_INT | UDMAOUT_TERM_INT)) {
719 			break;
720 		}
721 		udelay(1000);
722 		max--;
723 	} while ((max > 0));
724 
725 	return max == 0;
726 }
727 
728 /**
729  *	bfin_ata_reset_port - initialize BFIN ATAPI port.
730  */
731 
bfin_ata_reset_port(struct ata_port * ap)732 static int bfin_ata_reset_port(struct ata_port *ap)
733 {
734 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
735 	int count;
736 	unsigned short status;
737 
738 	/* Disable all ATAPI interrupts */
739 	ATAPI_SET_INT_MASK(base, 0);
740 	SSYNC();
741 
742 	/* Assert the RESET signal 25us*/
743 	ATAPI_SET_CONTROL(base, ATAPI_GET_CONTROL(base) | DEV_RST);
744 	udelay(30);
745 
746 	/* Negate the RESET signal for 2ms*/
747 	ATAPI_SET_CONTROL(base, ATAPI_GET_CONTROL(base) & ~DEV_RST);
748 	msleep(2);
749 
750 	/* Wait on Busy flag to clear */
751 	count = 10000000;
752 	do {
753 		status = read_atapi_register(base, ATA_REG_STATUS);
754 	} while (--count && (status & ATA_BUSY));
755 
756 	/* Enable only ATAPI Device interrupt */
757 	ATAPI_SET_INT_MASK(base, 1);
758 	SSYNC();
759 
760 	return !count;
761 }
762 
763 /**
764  *
765  *	Function:       bfin_config_atapi_gpio
766  *
767  *	Description:    Configures the ATAPI pins for use
768  *
769  */
bfin_config_atapi_gpio(struct ata_port * ap)770 static int bfin_config_atapi_gpio(struct ata_port *ap)
771 {
772 	bfin_write_PORTH_FER(bfin_read_PORTH_FER() | 0x4);
773 	bfin_write_PORTH_MUX(bfin_read_PORTH_MUX() & ~0x30);
774 	bfin_write_PORTH_DIR_SET(0x4);
775 
776 	bfin_write_PORTJ_FER(0x7f8);
777 	bfin_write_PORTJ_MUX(bfin_read_PORTI_MUX() & ~0x3fffc0);
778 	bfin_write_PORTJ_DIR_SET(0x5f8);
779 	bfin_write_PORTJ_DIR_CLEAR(0x200);
780 	bfin_write_PORTJ_INEN(0x200);
781 
782 	bfin_write_PINT2_ASSIGN(0x0707);
783 	bfin_write_PINT2_MASK_SET(0x200);
784 	SSYNC();
785 
786 	return 0;
787 }
788 
789 /**
790  *	bfin_atapi_probe	-	attach a bfin atapi interface
791  *	@pdev: platform device
792  *
793  *	Register a bfin atapi interface.
794  *
795  *
796  *	Platform devices are expected to contain 2 resources per port:
797  *
798  *		- I/O Base (IORESOURCE_IO)
799  *		- IRQ	   (IORESOURCE_IRQ)
800  *
801  */
bfin_ata_probe_port(struct ata_port * ap)802 static int bfin_ata_probe_port(struct ata_port *ap)
803 {
804 	if (bfin_config_atapi_gpio(ap)) {
805 		printf("Requesting Peripherals faild\n");
806 		return -EFAULT;
807 	}
808 
809 	if (bfin_ata_reset_port(ap)) {
810 		printf("Fail to reset ATAPI device\n");
811 		return -EFAULT;
812 	}
813 
814 	if (ap->ata_mode >= XFER_PIO_0 && ap->ata_mode <= XFER_PIO_4)
815 		bfin_set_piomode(ap, ap->ata_mode);
816 	else {
817 		printf("Given ATA data transfer mode is not supported.\n");
818 		return -EFAULT;
819 	}
820 
821 	return 0;
822 }
823 
824 #define ATA_SECTOR_WORDS (ATA_SECT_SIZE/2)
825 
bfin_ata_identify(struct ata_port * ap,int dev)826 static void bfin_ata_identify(struct ata_port *ap, int dev)
827 {
828 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
829 	u8 status = 0;
830 	static u16 iobuf[ATA_SECTOR_WORDS];
831 	u64 n_sectors = 0;
832 	hd_driveid_t *iop = (hd_driveid_t *)iobuf;
833 
834 	memset(iobuf, 0, sizeof(iobuf));
835 
836 	if (!(ap->dev_mask & (1 << dev)))
837 		return;
838 
839 	debug("port=%d dev=%d\n", ap->port_no, dev);
840 
841 	bfin_dev_select(ap, dev);
842 
843 	status = 0;
844 	/* Device Identify Command */
845 	write_atapi_register(base, ATA_REG_CMD, ATA_CMD_ID_ATA);
846 	bfin_check_altstatus(ap);
847 	udelay(10);
848 
849 	status = bfin_ata_busy_wait(ap, ATA_BUSY, 1000, 0);
850 	if (status & ATA_ERR) {
851 		printf("\ndevice not responding\n");
852 		ap->dev_mask &= ~(1 << dev);
853 		return;
854 	}
855 
856 	read_atapi_data(base, ATA_SECTOR_WORDS, iobuf);
857 
858 	ata_swap_buf_le16(iobuf, ATA_SECTOR_WORDS);
859 
860 	/* we require LBA and DMA support (bits 8 & 9 of word 49) */
861 	if (!ata_id_has_dma(iobuf) || !ata_id_has_lba(iobuf))
862 		printf("ata%u: no dma/lba\n", ap->port_no);
863 
864 #ifdef DEBUG
865 	ata_dump_id(iobuf);
866 #endif
867 
868 	n_sectors = ata_id_n_sectors(iobuf);
869 
870 	if (n_sectors == 0) {
871 		ap->dev_mask &= ~(1 << dev);
872 		return;
873 	}
874 
875 	ata_id_c_string(iobuf, (unsigned char *)sata_dev_desc[ap->port_no].revision,
876 			 ATA_ID_FW_REV, sizeof(sata_dev_desc[ap->port_no].revision));
877 	ata_id_c_string(iobuf, (unsigned char *)sata_dev_desc[ap->port_no].vendor,
878 			 ATA_ID_PROD, sizeof(sata_dev_desc[ap->port_no].vendor));
879 	ata_id_c_string(iobuf, (unsigned char *)sata_dev_desc[ap->port_no].product,
880 			 ATA_ID_SERNO, sizeof(sata_dev_desc[ap->port_no].product));
881 
882 	if ((iop->config & 0x0080) == 0x0080)
883 		sata_dev_desc[ap->port_no].removable = 1;
884 	else
885 		sata_dev_desc[ap->port_no].removable = 0;
886 
887 	sata_dev_desc[ap->port_no].lba = (u32) n_sectors;
888 	debug("lba=0x%x\n", sata_dev_desc[ap->port_no].lba);
889 
890 #ifdef CONFIG_LBA48
891 	if (iop->command_set_2 & 0x0400)
892 		sata_dev_desc[ap->port_no].lba48 = 1;
893 	else
894 		sata_dev_desc[ap->port_no].lba48 = 0;
895 #endif
896 
897 	/* assuming HD */
898 	sata_dev_desc[ap->port_no].type = DEV_TYPE_HARDDISK;
899 	sata_dev_desc[ap->port_no].blksz = ATA_SECT_SIZE;
900 	sata_dev_desc[ap->port_no].lun = 0;	/* just to fill something in... */
901 
902 	printf("PATA device#%d %s is found on ata port#%d.\n",
903 		ap->port_no%PATA_DEV_NUM_PER_PORT,
904 		sata_dev_desc[ap->port_no].vendor,
905 		ap->port_no/PATA_DEV_NUM_PER_PORT);
906 }
907 
bfin_ata_set_Feature_cmd(struct ata_port * ap,int dev)908 static void bfin_ata_set_Feature_cmd(struct ata_port *ap, int dev)
909 {
910 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
911 	u8 status = 0;
912 
913 	if (!(ap->dev_mask & (1 << dev)))
914 		return;
915 
916 	bfin_dev_select(ap, dev);
917 
918 	write_atapi_register(base, ATA_REG_FEATURE, SETFEATURES_XFER);
919 	write_atapi_register(base, ATA_REG_NSECT, ap->ata_mode);
920 	write_atapi_register(base, ATA_REG_LBAL, 0);
921 	write_atapi_register(base, ATA_REG_LBAM, 0);
922 	write_atapi_register(base, ATA_REG_LBAH, 0);
923 
924 	write_atapi_register(base, ATA_REG_DEVICE, ATA_DEVICE_OBS);
925 	write_atapi_register(base, ATA_REG_CMD, ATA_CMD_SET_FEATURES);
926 
927 	udelay(50);
928 	msleep(150);
929 
930 	status = bfin_ata_busy_wait(ap, ATA_BUSY, 5000, 0);
931 	if ((status & (ATA_BUSY | ATA_ERR))) {
932 		printf("Error  : status 0x%02x\n", status);
933 		ap->dev_mask &= ~(1 << dev);
934 	}
935 }
936 
scan_sata(int dev)937 int scan_sata(int dev)
938 {
939 	/* dev is the index of each ata device in the system. one PATA port
940 	 * contains 2 devices. one element in scan_done array indicates one
941 	 * PATA port. device connected to one PATA port is selected by
942 	 * bfin_dev_select() before access.
943 	 */
944 	struct ata_port *ap = &port[dev];
945 	static int scan_done[(CONFIG_SYS_SATA_MAX_DEVICE+1)/PATA_DEV_NUM_PER_PORT];
946 
947 	if (scan_done[dev/PATA_DEV_NUM_PER_PORT])
948 		return 0;
949 
950 	/* Check for attached device */
951 	if (!bfin_ata_probe_port(ap)) {
952 		if (bfin_softreset(ap)) {
953 			/* soft reset failed, try a hard one */
954 			bfin_ata_reset_port(ap);
955 			if (bfin_softreset(ap))
956 				scan_done[dev/PATA_DEV_NUM_PER_PORT] = 1;
957 		} else {
958 			scan_done[dev/PATA_DEV_NUM_PER_PORT] = 1;
959 		}
960 	}
961 	if (scan_done[dev/PATA_DEV_NUM_PER_PORT]) {
962 		/* Probe device and set xfer mode */
963 		bfin_ata_identify(ap, dev%PATA_DEV_NUM_PER_PORT);
964 		bfin_ata_set_Feature_cmd(ap, dev%PATA_DEV_NUM_PER_PORT);
965 		init_part(&sata_dev_desc[dev]);
966 		return 0;
967 	}
968 
969 	printf("PATA device#%d is not present on ATA port#%d.\n",
970 		ap->port_no%PATA_DEV_NUM_PER_PORT,
971 		ap->port_no/PATA_DEV_NUM_PER_PORT);
972 
973 	return -1;
974 }
975 
init_sata(int dev)976 int init_sata(int dev)
977 {
978 	struct ata_port *ap = &port[dev];
979 	static u8 init_done;
980 	int res = 1;
981 
982 	if (init_done)
983 		return res;
984 
985 	init_done = 1;
986 
987 	switch (dev/PATA_DEV_NUM_PER_PORT) {
988 	case 0:
989 		ap->ioaddr.ctl_addr = ATAPI_CONTROL;
990 		ap->ata_mode = CONFIG_BFIN_ATA_MODE;
991 		break;
992 	default:
993 		printf("Tried to scan unknown port %d.\n", dev);
994 		return res;
995 	}
996 
997 	if (ap->ata_mode < XFER_PIO_0 || ap->ata_mode > XFER_PIO_4) {
998 		ap->ata_mode = XFER_PIO_4;
999 		printf("DMA mode is not supported. Set to PIO mode 4.\n");
1000 	}
1001 
1002 	ap->port_no = dev;
1003 	ap->ctl_reg = 0x8;	/*Default value of control reg */
1004 
1005 	res = 0;
1006 	return res;
1007 }
1008 
1009 /* Read up to 255 sectors
1010  *
1011  * Returns sectors read
1012 */
do_one_read(struct ata_port * ap,u64 blknr,u8 blkcnt,u16 * buffer,uchar lba48)1013 static u8 do_one_read(struct ata_port *ap, u64 blknr, u8 blkcnt, u16 *buffer,
1014 			uchar lba48)
1015 {
1016 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
1017 	u8 sr = 0;
1018 	u8 status;
1019 	u16 err = 0;
1020 
1021 	if (!(bfin_check_status(ap) & ATA_DRDY)) {
1022 		printf("Device ata%d not ready\n", ap->port_no);
1023 		return 0;
1024 	}
1025 
1026 	/* Set up transfer */
1027 #ifdef CONFIG_LBA48
1028 	if (lba48) {
1029 		/* write high bits */
1030 		write_atapi_register(base, ATA_REG_NSECT, 0);
1031 		write_atapi_register(base, ATA_REG_LBAL, (blknr >> 24) & 0xFF);
1032 		write_atapi_register(base, ATA_REG_LBAM, (blknr >> 32) & 0xFF);
1033 		write_atapi_register(base, ATA_REG_LBAH, (blknr >> 40) & 0xFF);
1034 	}
1035 #endif
1036 	write_atapi_register(base, ATA_REG_NSECT, blkcnt);
1037 	write_atapi_register(base, ATA_REG_LBAL, (blknr >> 0) & 0xFF);
1038 	write_atapi_register(base, ATA_REG_LBAM, (blknr >> 8) & 0xFF);
1039 	write_atapi_register(base, ATA_REG_LBAH, (blknr >> 16) & 0xFF);
1040 
1041 #ifdef CONFIG_LBA48
1042 	if (lba48) {
1043 		write_atapi_register(base, ATA_REG_DEVICE, ATA_LBA);
1044 		write_atapi_register(base, ATA_REG_CMD, ATA_CMD_PIO_READ_EXT);
1045 	} else
1046 #endif
1047 	{
1048 		write_atapi_register(base, ATA_REG_DEVICE, ATA_LBA | ((blknr >> 24) & 0xF));
1049 		write_atapi_register(base, ATA_REG_CMD, ATA_CMD_PIO_READ);
1050 	}
1051 	status = bfin_ata_busy_wait(ap, ATA_BUSY, 500000, 1);
1052 
1053 	if (status & (ATA_BUSY | ATA_ERR)) {
1054 		printf("Device %d not responding status 0x%x.\n", ap->port_no, status);
1055 		err = read_atapi_register(base, ATA_REG_ERR);
1056 		printf("Error reg = 0x%x\n", err);
1057 		return sr;
1058 	}
1059 
1060 	while (blkcnt--) {
1061 		if (bfin_wait_for_irq(ap, 500)) {
1062 			printf("ata%u irq failed\n", ap->port_no);
1063 			return sr;
1064 		}
1065 
1066 		status = bfin_check_status(ap);
1067 		if (status & ATA_ERR) {
1068 			err = read_atapi_register(base, ATA_REG_ERR);
1069 			printf("ata%u error %d\n", ap->port_no, err);
1070 			return sr;
1071 		}
1072 		bfin_irq_clear(ap);
1073 
1074 		/* Read one sector */
1075 		read_atapi_data(base, ATA_SECTOR_WORDS, buffer);
1076 		buffer += ATA_SECTOR_WORDS;
1077 		sr++;
1078 	}
1079 
1080 	return sr;
1081 }
1082 
sata_read(int dev,ulong block,ulong blkcnt,void * buff)1083 ulong sata_read(int dev, ulong block, ulong blkcnt, void *buff)
1084 {
1085 	struct ata_port *ap = &port[dev];
1086 	ulong n = 0, sread;
1087 	u16 *buffer = (u16 *) buff;
1088 	u8 status = 0;
1089 	u64 blknr = (u64) block;
1090 	unsigned char lba48 = 0;
1091 
1092 #ifdef CONFIG_LBA48
1093 	if (blknr > 0xfffffff) {
1094 		if (!sata_dev_desc[dev].lba48) {
1095 			printf("Drive doesn't support 48-bit addressing\n");
1096 			return 0;
1097 		}
1098 		/* more than 28 bits used, use 48bit mode */
1099 		lba48 = 1;
1100 	}
1101 #endif
1102 	bfin_dev_select(ap, dev%PATA_DEV_NUM_PER_PORT);
1103 
1104 	while (blkcnt > 0) {
1105 
1106 		if (blkcnt > 255)
1107 			sread = 255;
1108 		else
1109 			sread = blkcnt;
1110 
1111 		status = do_one_read(ap, blknr, sread, buffer, lba48);
1112 		if (status != sread) {
1113 			printf("Read failed\n");
1114 			return n;
1115 		}
1116 
1117 		blkcnt -= sread;
1118 		blknr += sread;
1119 		n += sread;
1120 		buffer += sread * ATA_SECTOR_WORDS;
1121 	}
1122 	return n;
1123 }
1124 
sata_write(int dev,ulong block,ulong blkcnt,const void * buff)1125 ulong sata_write(int dev, ulong block, ulong blkcnt, const void *buff)
1126 {
1127 	struct ata_port *ap = &port[dev];
1128 	void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
1129 	ulong n = 0;
1130 	u16 *buffer = (u16 *) buff;
1131 	unsigned char status = 0;
1132 	u64 blknr = (u64) block;
1133 #ifdef CONFIG_LBA48
1134 	unsigned char lba48 = 0;
1135 
1136 	if (blknr > 0xfffffff) {
1137 		if (!sata_dev_desc[dev].lba48) {
1138 			printf("Drive doesn't support 48-bit addressing\n");
1139 			return 0;
1140 		}
1141 		/* more than 28 bits used, use 48bit mode */
1142 		lba48 = 1;
1143 	}
1144 #endif
1145 
1146 	bfin_dev_select(ap, dev%PATA_DEV_NUM_PER_PORT);
1147 
1148 	while (blkcnt-- > 0) {
1149 		status = bfin_ata_busy_wait(ap, ATA_BUSY, 50000, 0);
1150 		if (status & ATA_BUSY) {
1151 			printf("ata%u failed to respond\n", ap->port_no);
1152 			return n;
1153 		}
1154 #ifdef CONFIG_LBA48
1155 		if (lba48) {
1156 			/* write high bits */
1157 			write_atapi_register(base, ATA_REG_NSECT, 0);
1158 			write_atapi_register(base, ATA_REG_LBAL,
1159 				(blknr >> 24) & 0xFF);
1160 			write_atapi_register(base, ATA_REG_LBAM,
1161 				(blknr >> 32) & 0xFF);
1162 			write_atapi_register(base, ATA_REG_LBAH,
1163 				(blknr >> 40) & 0xFF);
1164 		}
1165 #endif
1166 		write_atapi_register(base, ATA_REG_NSECT, 1);
1167 		write_atapi_register(base, ATA_REG_LBAL, (blknr >> 0) & 0xFF);
1168 		write_atapi_register(base, ATA_REG_LBAM, (blknr >> 8) & 0xFF);
1169 		write_atapi_register(base, ATA_REG_LBAH, (blknr >> 16) & 0xFF);
1170 #ifdef CONFIG_LBA48
1171 		if (lba48) {
1172 			write_atapi_register(base, ATA_REG_DEVICE, ATA_LBA);
1173 			write_atapi_register(base, ATA_REG_CMD,
1174 				ATA_CMD_PIO_WRITE_EXT);
1175 		} else
1176 #endif
1177 		{
1178 			write_atapi_register(base, ATA_REG_DEVICE,
1179 				ATA_LBA | ((blknr >> 24) & 0xF));
1180 			write_atapi_register(base, ATA_REG_CMD,
1181 				ATA_CMD_PIO_WRITE);
1182 		}
1183 
1184 		/*may take up to 5 sec */
1185 		status = bfin_ata_busy_wait(ap, ATA_BUSY, 50000, 0);
1186 		if ((status & (ATA_DRQ | ATA_BUSY | ATA_ERR)) != ATA_DRQ) {
1187 			printf("Error no DRQ dev %d blk %ld: sts 0x%02x\n",
1188 				ap->port_no, (ulong) blknr, status);
1189 			return n;
1190 		}
1191 
1192 		write_atapi_data(base, ATA_SECTOR_WORDS, buffer);
1193 		bfin_check_altstatus(ap);
1194 		udelay(1);
1195 
1196 		++n;
1197 		++blknr;
1198 		buffer += ATA_SECTOR_WORDS;
1199 	}
1200 	return n;
1201 }
1202