xref: /kernel/linux/linux-5.10/drivers/ide/hpt366.c (revision 8c2ecf20)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 1999-2003		Andre Hedrick <andre@linux-ide.org>
4 * Portions Copyright (C) 2001	        Sun Microsystems, Inc.
5 * Portions Copyright (C) 2003		Red Hat Inc
6 * Portions Copyright (C) 2007		Bartlomiej Zolnierkiewicz
7 * Portions Copyright (C) 2005-2009	MontaVista Software, Inc.
8 *
9 * Thanks to HighPoint Technologies for their assistance, and hardware.
10 * Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his
11 * donation of an ABit BP6 mainboard, processor, and memory acellerated
12 * development and support.
13 *
14 *
15 * HighPoint has its own drivers (open source except for the RAID part)
16 * available from http://www.highpoint-tech.com/USA_new/service_support.htm
17 * This may be useful to anyone wanting to work on this driver, however  do not
18 * trust  them too much since the code tends to become less and less meaningful
19 * as the time passes... :-/
20 *
21 * Note that final HPT370 support was done by force extraction of GPL.
22 *
23 * - add function for getting/setting power status of drive
24 * - the HPT370's state machine can get confused. reset it before each dma
25 *   xfer to prevent that from happening.
26 * - reset state engine whenever we get an error.
27 * - check for busmaster state at end of dma.
28 * - use new highpoint timings.
29 * - detect bus speed using highpoint register.
30 * - use pll if we don't have a clock table. added a 66MHz table that's
31 *   just 2x the 33MHz table.
32 * - removed turnaround. NOTE: we never want to switch between pll and
33 *   pci clocks as the chip can glitch in those cases. the highpoint
34 *   approved workaround slows everything down too much to be useful. in
35 *   addition, we would have to serialize access to each chip.
36 * 	Adrian Sun <a.sun@sun.com>
37 *
38 * add drive timings for 66MHz PCI bus,
39 * fix ATA Cable signal detection, fix incorrect /proc info
40 * add /proc display for per-drive PIO/DMA/UDMA mode and
41 * per-channel ATA-33/66 Cable detect.
42 * 	Duncan Laurie <void@sun.com>
43 *
44 * fixup /proc output for multiple controllers
45 *	Tim Hockin <thockin@sun.com>
46 *
47 * On hpt366:
48 * Reset the hpt366 on error, reset on dma
49 * Fix disabling Fast Interrupt hpt366.
50 * 	Mike Waychison <crlf@sun.com>
51 *
52 * Added support for 372N clocking and clock switching. The 372N needs
53 * different clocks on read/write. This requires overloading rw_disk and
54 * other deeply crazy things. Thanks to <http://www.hoerstreich.de> for
55 * keeping me sane.
56 *		Alan Cox <alan@lxorguk.ukuu.org.uk>
57 *
58 * - fix the clock turnaround code: it was writing to the wrong ports when
59 *   called for the secondary channel, caching the current clock mode per-
60 *   channel caused the cached register value to get out of sync with the
61 *   actual one, the channels weren't serialized, the turnaround shouldn't
62 *   be done on 66 MHz PCI bus
63 * - disable UltraATA/100 for HPT370 by default as the 33 MHz clock being used
64 *   does not allow for this speed anyway
65 * - avoid touching disabled channels (e.g. HPT371/N are single channel chips,
66 *   their primary channel is kind of virtual, it isn't tied to any pins)
67 * - fix/remove bad/unused timing tables and use one set of tables for the whole
68 *   HPT37x chip family; save space by introducing the separate transfer mode
69 *   table in which the mode lookup is done
70 * - use f_CNT value saved by  the HighPoint BIOS as reading it directly gives
71 *   the wrong PCI frequency since DPLL has already been calibrated by BIOS;
72 *   read it only from the function 0 of HPT374 chips
73 * - fix the hotswap code:  it caused RESET- to glitch when tristating the bus,
74 *   and for HPT36x the obsolete HDIO_TRISTATE_HWIF handler was called instead
75 * - pass to init_chipset() handlers a copy of the IDE PCI device structure as
76 *   they tamper with its fields
77 * - pass  to the init_setup handlers a copy of the ide_pci_device_t structure
78 *   since they may tamper with its fields
79 * - prefix the driver startup messages with the real chip name
80 * - claim the extra 240 bytes of I/O space for all chips
81 * - optimize the UltraDMA filtering and the drive list lookup code
82 * - use pci_get_slot() to get to the function 1 of HPT36x/374
83 * - cache offset of the channel's misc. control registers (MCRs) being used
84 *   throughout the driver
85 * - only touch the relevant MCR when detecting the cable type on HPT374's
86 *   function 1
87 * - rename all the register related variables consistently
88 * - move all the interrupt twiddling code from the speedproc handlers into
89 *   init_hwif_hpt366(), also grouping all the DMA related code together there
90 * - merge HPT36x/HPT37x speedproc handlers, fix PIO timing register mask and
91 *   separate the UltraDMA and MWDMA masks there to avoid changing PIO timings
92 *   when setting an UltraDMA mode
93 * - fix hpt3xx_tune_drive() to set the PIO mode requested, not always select
94 *   the best possible one
95 * - clean up DMA timeout handling for HPT370
96 * - switch to using the enumeration type to differ between the numerous chip
97 *   variants, matching PCI device/revision ID with the chip type early, at the
98 *   init_setup stage
99 * - extend the hpt_info structure to hold the DPLL and PCI clock frequencies,
100 *   stop duplicating it for each channel by storing the pointer in the pci_dev
101 *   structure: first, at the init_setup stage, point it to a static "template"
102 *   with only the chip type and its specific base DPLL frequency, the highest
103 *   UltraDMA mode, and the chip settings table pointer filled,  then, at the
104 *   init_chipset stage, allocate per-chip instance  and fill it with the rest
105 *   of the necessary information
106 * - get rid of the constant thresholds in the HPT37x PCI clock detection code,
107 *   switch  to calculating  PCI clock frequency based on the chip's base DPLL
108 *   frequency
109 * - switch to using the  DPLL clock and enable UltraATA/133 mode by default on
110 *   anything  newer than HPT370/A (except HPT374 that is not capable of this
111 *   mode according to the manual)
112 * - fold PCI clock detection and DPLL setup code into init_chipset_hpt366(),
113 *   also fixing the interchanged 25/40 MHz PCI clock cases for HPT36x chips;
114 *   unify HPT36x/37x timing setup code and the speedproc handlers by joining
115 *   the register setting lists into the table indexed by the clock selected
116 * - set the correct hwif->ultra_mask for each individual chip
117 * - add Ultra and MW DMA mode filtering for the HPT37[24] based SATA cards
118 * - stop resetting HPT370's state machine before each DMA transfer as that has
119 *   caused more harm than good
120 *	Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com>
121 */
122
123#include <linux/types.h>
124#include <linux/module.h>
125#include <linux/kernel.h>
126#include <linux/delay.h>
127#include <linux/blkdev.h>
128#include <linux/interrupt.h>
129#include <linux/pci.h>
130#include <linux/init.h>
131#include <linux/ide.h>
132#include <linux/slab.h>
133
134#include <linux/uaccess.h>
135#include <asm/io.h>
136
137#define DRV_NAME "hpt366"
138
139/* various tuning parameters */
140#undef	HPT_RESET_STATE_ENGINE
141#undef	HPT_DELAY_INTERRUPT
142
143static const char *bad_ata100_5[] = {
144	"IBM-DTLA-307075",
145	"IBM-DTLA-307060",
146	"IBM-DTLA-307045",
147	"IBM-DTLA-307030",
148	"IBM-DTLA-307020",
149	"IBM-DTLA-307015",
150	"IBM-DTLA-305040",
151	"IBM-DTLA-305030",
152	"IBM-DTLA-305020",
153	"IC35L010AVER07-0",
154	"IC35L020AVER07-0",
155	"IC35L030AVER07-0",
156	"IC35L040AVER07-0",
157	"IC35L060AVER07-0",
158	"WDC AC310200R",
159	NULL
160};
161
162static const char *bad_ata66_4[] = {
163	"IBM-DTLA-307075",
164	"IBM-DTLA-307060",
165	"IBM-DTLA-307045",
166	"IBM-DTLA-307030",
167	"IBM-DTLA-307020",
168	"IBM-DTLA-307015",
169	"IBM-DTLA-305040",
170	"IBM-DTLA-305030",
171	"IBM-DTLA-305020",
172	"IC35L010AVER07-0",
173	"IC35L020AVER07-0",
174	"IC35L030AVER07-0",
175	"IC35L040AVER07-0",
176	"IC35L060AVER07-0",
177	"WDC AC310200R",
178	"MAXTOR STM3320620A",
179	NULL
180};
181
182static const char *bad_ata66_3[] = {
183	"WDC AC310200R",
184	NULL
185};
186
187static const char *bad_ata33[] = {
188	"Maxtor 92720U8", "Maxtor 92040U6", "Maxtor 91360U4", "Maxtor 91020U3", "Maxtor 90845U3", "Maxtor 90650U2",
189	"Maxtor 91360D8", "Maxtor 91190D7", "Maxtor 91020D6", "Maxtor 90845D5", "Maxtor 90680D4", "Maxtor 90510D3", "Maxtor 90340D2",
190	"Maxtor 91152D8", "Maxtor 91008D7", "Maxtor 90845D6", "Maxtor 90840D6", "Maxtor 90720D5", "Maxtor 90648D5", "Maxtor 90576D4",
191	"Maxtor 90510D4",
192	"Maxtor 90432D3", "Maxtor 90288D2", "Maxtor 90256D2",
193	"Maxtor 91000D8", "Maxtor 90910D8", "Maxtor 90875D7", "Maxtor 90840D7", "Maxtor 90750D6", "Maxtor 90625D5", "Maxtor 90500D4",
194	"Maxtor 91728D8", "Maxtor 91512D7", "Maxtor 91303D6", "Maxtor 91080D5", "Maxtor 90845D4", "Maxtor 90680D4", "Maxtor 90648D3", "Maxtor 90432D2",
195	NULL
196};
197
198static u8 xfer_speeds[] = {
199	XFER_UDMA_6,
200	XFER_UDMA_5,
201	XFER_UDMA_4,
202	XFER_UDMA_3,
203	XFER_UDMA_2,
204	XFER_UDMA_1,
205	XFER_UDMA_0,
206
207	XFER_MW_DMA_2,
208	XFER_MW_DMA_1,
209	XFER_MW_DMA_0,
210
211	XFER_PIO_4,
212	XFER_PIO_3,
213	XFER_PIO_2,
214	XFER_PIO_1,
215	XFER_PIO_0
216};
217
218/* Key for bus clock timings
219 * 36x   37x
220 * bits  bits
221 * 0:3	 0:3	data_high_time. Inactive time of DIOW_/DIOR_ for PIO and MW DMA.
222 *		cycles = value + 1
223 * 4:7	 4:8	data_low_time. Active time of DIOW_/DIOR_ for PIO and MW DMA.
224 *		cycles = value + 1
225 * 8:11  9:12	cmd_high_time. Inactive time of DIOW_/DIOR_ during task file
226 *		register access.
227 * 12:15 13:17	cmd_low_time. Active time of DIOW_/DIOR_ during task file
228 *		register access.
229 * 16:18 18:20	udma_cycle_time. Clock cycles for UDMA xfer.
230 * -	 21	CLK frequency: 0=ATA clock, 1=dual ATA clock.
231 * 19:21 22:24	pre_high_time. Time to initialize the 1st cycle for PIO and
232 *		MW DMA xfer.
233 * 22:24 25:27	cmd_pre_high_time. Time to initialize the 1st PIO cycle for
234 *		task file register access.
235 * 28	 28	UDMA enable.
236 * 29	 29	DMA  enable.
237 * 30	 30	PIO MST enable. If set, the chip is in bus master mode during
238 *		PIO xfer.
239 * 31	 31	FIFO enable.
240 */
241
242static u32 forty_base_hpt36x[] = {
243	/* XFER_UDMA_6 */	0x900fd943,
244	/* XFER_UDMA_5 */	0x900fd943,
245	/* XFER_UDMA_4 */	0x900fd943,
246	/* XFER_UDMA_3 */	0x900ad943,
247	/* XFER_UDMA_2 */	0x900bd943,
248	/* XFER_UDMA_1 */	0x9008d943,
249	/* XFER_UDMA_0 */	0x9008d943,
250
251	/* XFER_MW_DMA_2 */	0xa008d943,
252	/* XFER_MW_DMA_1 */	0xa010d955,
253	/* XFER_MW_DMA_0 */	0xa010d9fc,
254
255	/* XFER_PIO_4 */	0xc008d963,
256	/* XFER_PIO_3 */	0xc010d974,
257	/* XFER_PIO_2 */	0xc010d997,
258	/* XFER_PIO_1 */	0xc010d9c7,
259	/* XFER_PIO_0 */	0xc018d9d9
260};
261
262static u32 thirty_three_base_hpt36x[] = {
263	/* XFER_UDMA_6 */	0x90c9a731,
264	/* XFER_UDMA_5 */	0x90c9a731,
265	/* XFER_UDMA_4 */	0x90c9a731,
266	/* XFER_UDMA_3 */	0x90cfa731,
267	/* XFER_UDMA_2 */	0x90caa731,
268	/* XFER_UDMA_1 */	0x90cba731,
269	/* XFER_UDMA_0 */	0x90c8a731,
270
271	/* XFER_MW_DMA_2 */	0xa0c8a731,
272	/* XFER_MW_DMA_1 */	0xa0c8a732,	/* 0xa0c8a733 */
273	/* XFER_MW_DMA_0 */	0xa0c8a797,
274
275	/* XFER_PIO_4 */	0xc0c8a731,
276	/* XFER_PIO_3 */	0xc0c8a742,
277	/* XFER_PIO_2 */	0xc0d0a753,
278	/* XFER_PIO_1 */	0xc0d0a7a3,	/* 0xc0d0a793 */
279	/* XFER_PIO_0 */	0xc0d0a7aa	/* 0xc0d0a7a7 */
280};
281
282static u32 twenty_five_base_hpt36x[] = {
283	/* XFER_UDMA_6 */	0x90c98521,
284	/* XFER_UDMA_5 */	0x90c98521,
285	/* XFER_UDMA_4 */	0x90c98521,
286	/* XFER_UDMA_3 */	0x90cf8521,
287	/* XFER_UDMA_2 */	0x90cf8521,
288	/* XFER_UDMA_1 */	0x90cb8521,
289	/* XFER_UDMA_0 */	0x90cb8521,
290
291	/* XFER_MW_DMA_2 */	0xa0ca8521,
292	/* XFER_MW_DMA_1 */	0xa0ca8532,
293	/* XFER_MW_DMA_0 */	0xa0ca8575,
294
295	/* XFER_PIO_4 */	0xc0ca8521,
296	/* XFER_PIO_3 */	0xc0ca8532,
297	/* XFER_PIO_2 */	0xc0ca8542,
298	/* XFER_PIO_1 */	0xc0d08572,
299	/* XFER_PIO_0 */	0xc0d08585
300};
301
302/*
303 * The following are the new timing tables with PIO mode data/taskfile transfer
304 * overclocking fixed...
305 */
306
307/* This table is taken from the HPT370 data manual rev. 1.02 */
308static u32 thirty_three_base_hpt37x[] = {
309	/* XFER_UDMA_6 */	0x16455031,	/* 0x16655031 ?? */
310	/* XFER_UDMA_5 */	0x16455031,
311	/* XFER_UDMA_4 */	0x16455031,
312	/* XFER_UDMA_3 */	0x166d5031,
313	/* XFER_UDMA_2 */	0x16495031,
314	/* XFER_UDMA_1 */	0x164d5033,
315	/* XFER_UDMA_0 */	0x16515097,
316
317	/* XFER_MW_DMA_2 */	0x26515031,
318	/* XFER_MW_DMA_1 */	0x26515033,
319	/* XFER_MW_DMA_0 */	0x26515097,
320
321	/* XFER_PIO_4 */	0x06515021,
322	/* XFER_PIO_3 */	0x06515022,
323	/* XFER_PIO_2 */	0x06515033,
324	/* XFER_PIO_1 */	0x06915065,
325	/* XFER_PIO_0 */	0x06d1508a
326};
327
328static u32 fifty_base_hpt37x[] = {
329	/* XFER_UDMA_6 */	0x1a861842,
330	/* XFER_UDMA_5 */	0x1a861842,
331	/* XFER_UDMA_4 */	0x1aae1842,
332	/* XFER_UDMA_3 */	0x1a8e1842,
333	/* XFER_UDMA_2 */	0x1a0e1842,
334	/* XFER_UDMA_1 */	0x1a161854,
335	/* XFER_UDMA_0 */	0x1a1a18ea,
336
337	/* XFER_MW_DMA_2 */	0x2a821842,
338	/* XFER_MW_DMA_1 */	0x2a821854,
339	/* XFER_MW_DMA_0 */	0x2a8218ea,
340
341	/* XFER_PIO_4 */	0x0a821842,
342	/* XFER_PIO_3 */	0x0a821843,
343	/* XFER_PIO_2 */	0x0a821855,
344	/* XFER_PIO_1 */	0x0ac218a8,
345	/* XFER_PIO_0 */	0x0b02190c
346};
347
348static u32 sixty_six_base_hpt37x[] = {
349	/* XFER_UDMA_6 */	0x1c86fe62,
350	/* XFER_UDMA_5 */	0x1caefe62,	/* 0x1c8afe62 */
351	/* XFER_UDMA_4 */	0x1c8afe62,
352	/* XFER_UDMA_3 */	0x1c8efe62,
353	/* XFER_UDMA_2 */	0x1c92fe62,
354	/* XFER_UDMA_1 */	0x1c9afe62,
355	/* XFER_UDMA_0 */	0x1c82fe62,
356
357	/* XFER_MW_DMA_2 */	0x2c82fe62,
358	/* XFER_MW_DMA_1 */	0x2c82fe66,
359	/* XFER_MW_DMA_0 */	0x2c82ff2e,
360
361	/* XFER_PIO_4 */	0x0c82fe62,
362	/* XFER_PIO_3 */	0x0c82fe84,
363	/* XFER_PIO_2 */	0x0c82fea6,
364	/* XFER_PIO_1 */	0x0d02ff26,
365	/* XFER_PIO_0 */	0x0d42ff7f
366};
367
368#define HPT371_ALLOW_ATA133_6		1
369#define HPT302_ALLOW_ATA133_6		1
370#define HPT372_ALLOW_ATA133_6		1
371#define HPT370_ALLOW_ATA100_5		0
372#define HPT366_ALLOW_ATA66_4		1
373#define HPT366_ALLOW_ATA66_3		1
374
375/* Supported ATA clock frequencies */
376enum ata_clock {
377	ATA_CLOCK_25MHZ,
378	ATA_CLOCK_33MHZ,
379	ATA_CLOCK_40MHZ,
380	ATA_CLOCK_50MHZ,
381	ATA_CLOCK_66MHZ,
382	NUM_ATA_CLOCKS
383};
384
385struct hpt_timings {
386	u32 pio_mask;
387	u32 dma_mask;
388	u32 ultra_mask;
389	u32 *clock_table[NUM_ATA_CLOCKS];
390};
391
392/*
393 *	Hold all the HighPoint chip information in one place.
394 */
395
396struct hpt_info {
397	char *chip_name;	/* Chip name */
398	u8 chip_type;		/* Chip type */
399	u8 udma_mask;		/* Allowed UltraDMA modes mask. */
400	u8 dpll_clk;		/* DPLL clock in MHz */
401	u8 pci_clk;		/* PCI  clock in MHz */
402	struct hpt_timings *timings; /* Chipset timing data */
403	u8 clock;		/* ATA clock selected */
404};
405
406/* Supported HighPoint chips */
407enum {
408	HPT36x,
409	HPT370,
410	HPT370A,
411	HPT374,
412	HPT372,
413	HPT372A,
414	HPT302,
415	HPT371,
416	HPT372N,
417	HPT302N,
418	HPT371N
419};
420
421static struct hpt_timings hpt36x_timings = {
422	.pio_mask	= 0xc1f8ffff,
423	.dma_mask	= 0x303800ff,
424	.ultra_mask	= 0x30070000,
425	.clock_table	= {
426		[ATA_CLOCK_25MHZ] = twenty_five_base_hpt36x,
427		[ATA_CLOCK_33MHZ] = thirty_three_base_hpt36x,
428		[ATA_CLOCK_40MHZ] = forty_base_hpt36x,
429		[ATA_CLOCK_50MHZ] = NULL,
430		[ATA_CLOCK_66MHZ] = NULL
431	}
432};
433
434static struct hpt_timings hpt37x_timings = {
435	.pio_mask	= 0xcfc3ffff,
436	.dma_mask	= 0x31c001ff,
437	.ultra_mask	= 0x303c0000,
438	.clock_table	= {
439		[ATA_CLOCK_25MHZ] = NULL,
440		[ATA_CLOCK_33MHZ] = thirty_three_base_hpt37x,
441		[ATA_CLOCK_40MHZ] = NULL,
442		[ATA_CLOCK_50MHZ] = fifty_base_hpt37x,
443		[ATA_CLOCK_66MHZ] = sixty_six_base_hpt37x
444	}
445};
446
447static const struct hpt_info hpt36x = {
448	.chip_name	= "HPT36x",
449	.chip_type	= HPT36x,
450	.udma_mask	= HPT366_ALLOW_ATA66_3 ? (HPT366_ALLOW_ATA66_4 ? ATA_UDMA4 : ATA_UDMA3) : ATA_UDMA2,
451	.dpll_clk	= 0,	/* no DPLL */
452	.timings	= &hpt36x_timings
453};
454
455static const struct hpt_info hpt370 = {
456	.chip_name	= "HPT370",
457	.chip_type	= HPT370,
458	.udma_mask	= HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4,
459	.dpll_clk	= 48,
460	.timings	= &hpt37x_timings
461};
462
463static const struct hpt_info hpt370a = {
464	.chip_name	= "HPT370A",
465	.chip_type	= HPT370A,
466	.udma_mask	= HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4,
467	.dpll_clk	= 48,
468	.timings	= &hpt37x_timings
469};
470
471static const struct hpt_info hpt374 = {
472	.chip_name	= "HPT374",
473	.chip_type	= HPT374,
474	.udma_mask	= ATA_UDMA5,
475	.dpll_clk	= 48,
476	.timings	= &hpt37x_timings
477};
478
479static const struct hpt_info hpt372 = {
480	.chip_name	= "HPT372",
481	.chip_type	= HPT372,
482	.udma_mask	= HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
483	.dpll_clk	= 55,
484	.timings	= &hpt37x_timings
485};
486
487static const struct hpt_info hpt372a = {
488	.chip_name	= "HPT372A",
489	.chip_type	= HPT372A,
490	.udma_mask	= HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
491	.dpll_clk	= 66,
492	.timings	= &hpt37x_timings
493};
494
495static const struct hpt_info hpt302 = {
496	.chip_name	= "HPT302",
497	.chip_type	= HPT302,
498	.udma_mask	= HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
499	.dpll_clk	= 66,
500	.timings	= &hpt37x_timings
501};
502
503static const struct hpt_info hpt371 = {
504	.chip_name	= "HPT371",
505	.chip_type	= HPT371,
506	.udma_mask	= HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
507	.dpll_clk	= 66,
508	.timings	= &hpt37x_timings
509};
510
511static const struct hpt_info hpt372n = {
512	.chip_name	= "HPT372N",
513	.chip_type	= HPT372N,
514	.udma_mask	= HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
515	.dpll_clk	= 77,
516	.timings	= &hpt37x_timings
517};
518
519static const struct hpt_info hpt302n = {
520	.chip_name	= "HPT302N",
521	.chip_type	= HPT302N,
522	.udma_mask	= HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
523	.dpll_clk	= 77,
524	.timings	= &hpt37x_timings
525};
526
527static const struct hpt_info hpt371n = {
528	.chip_name	= "HPT371N",
529	.chip_type	= HPT371N,
530	.udma_mask	= HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
531	.dpll_clk	= 77,
532	.timings	= &hpt37x_timings
533};
534
535static bool check_in_drive_list(ide_drive_t *drive, const char **list)
536{
537	return match_string(list, -1, (char *)&drive->id[ATA_ID_PROD]) >= 0;
538}
539
540static struct hpt_info *hpt3xx_get_info(struct device *dev)
541{
542	struct ide_host *host	= dev_get_drvdata(dev);
543	struct hpt_info *info	= (struct hpt_info *)host->host_priv;
544
545	return dev == host->dev[1] ? info + 1 : info;
546}
547
548/*
549 * The Marvell bridge chips used on the HighPoint SATA cards do not seem
550 * to support the UltraDMA modes 1, 2, and 3 as well as any MWDMA modes...
551 */
552
553static u8 hpt3xx_udma_filter(ide_drive_t *drive)
554{
555	ide_hwif_t *hwif	= drive->hwif;
556	struct hpt_info *info	= hpt3xx_get_info(hwif->dev);
557	u8 mask 		= hwif->ultra_mask;
558
559	switch (info->chip_type) {
560	case HPT36x:
561		if (!HPT366_ALLOW_ATA66_4 ||
562		    check_in_drive_list(drive, bad_ata66_4))
563			mask = ATA_UDMA3;
564
565		if (!HPT366_ALLOW_ATA66_3 ||
566		    check_in_drive_list(drive, bad_ata66_3))
567			mask = ATA_UDMA2;
568		break;
569	case HPT370:
570		if (!HPT370_ALLOW_ATA100_5 ||
571		    check_in_drive_list(drive, bad_ata100_5))
572			mask = ATA_UDMA4;
573		break;
574	case HPT370A:
575		if (!HPT370_ALLOW_ATA100_5 ||
576		    check_in_drive_list(drive, bad_ata100_5))
577			return ATA_UDMA4;
578		fallthrough;
579	case HPT372 :
580	case HPT372A:
581	case HPT372N:
582	case HPT374 :
583		if (ata_id_is_sata(drive->id))
584			mask &= ~0x0e;
585		fallthrough;
586	default:
587		return mask;
588	}
589
590	return check_in_drive_list(drive, bad_ata33) ? 0x00 : mask;
591}
592
593static u8 hpt3xx_mdma_filter(ide_drive_t *drive)
594{
595	ide_hwif_t *hwif	= drive->hwif;
596	struct hpt_info *info	= hpt3xx_get_info(hwif->dev);
597
598	switch (info->chip_type) {
599	case HPT372 :
600	case HPT372A:
601	case HPT372N:
602	case HPT374 :
603		if (ata_id_is_sata(drive->id))
604			return 0x00;
605		fallthrough;
606	default:
607		return 0x07;
608	}
609}
610
611static u32 get_speed_setting(u8 speed, struct hpt_info *info)
612{
613	int i;
614
615	/*
616	 * Lookup the transfer mode table to get the index into
617	 * the timing table.
618	 *
619	 * NOTE: For XFER_PIO_SLOW, PIO mode 0 timings will be used.
620	 */
621	for (i = 0; i < ARRAY_SIZE(xfer_speeds) - 1; i++)
622		if (xfer_speeds[i] == speed)
623			break;
624
625	return info->timings->clock_table[info->clock][i];
626}
627
628static void hpt3xx_set_mode(ide_hwif_t *hwif, ide_drive_t *drive)
629{
630	struct pci_dev *dev	= to_pci_dev(hwif->dev);
631	struct hpt_info *info	= hpt3xx_get_info(hwif->dev);
632	struct hpt_timings *t	= info->timings;
633	u8  itr_addr		= 0x40 + (drive->dn * 4);
634	u32 old_itr		= 0;
635	const u8 speed		= drive->dma_mode;
636	u32 new_itr		= get_speed_setting(speed, info);
637	u32 itr_mask		= speed < XFER_MW_DMA_0 ? t->pio_mask :
638				 (speed < XFER_UDMA_0   ? t->dma_mask :
639							  t->ultra_mask);
640
641	pci_read_config_dword(dev, itr_addr, &old_itr);
642	new_itr = (old_itr & ~itr_mask) | (new_itr & itr_mask);
643	/*
644	 * Disable on-chip PIO FIFO/buffer (and PIO MST mode as well)
645	 * to avoid problems handling I/O errors later
646	 */
647	new_itr &= ~0xc0000000;
648
649	pci_write_config_dword(dev, itr_addr, new_itr);
650}
651
652static void hpt3xx_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
653{
654	drive->dma_mode = drive->pio_mode;
655	hpt3xx_set_mode(hwif, drive);
656}
657
658static void hpt3xx_maskproc(ide_drive_t *drive, int mask)
659{
660	ide_hwif_t *hwif	= drive->hwif;
661	struct pci_dev	*dev	= to_pci_dev(hwif->dev);
662	struct hpt_info *info	= hpt3xx_get_info(hwif->dev);
663
664	if ((drive->dev_flags & IDE_DFLAG_NIEN_QUIRK) == 0)
665		return;
666
667	if (info->chip_type >= HPT370) {
668		u8 scr1 = 0;
669
670		pci_read_config_byte(dev, 0x5a, &scr1);
671		if (((scr1 & 0x10) >> 4) != mask) {
672			if (mask)
673				scr1 |=  0x10;
674			else
675				scr1 &= ~0x10;
676			pci_write_config_byte(dev, 0x5a, scr1);
677		}
678	} else if (mask)
679		disable_irq(hwif->irq);
680	else
681		enable_irq(hwif->irq);
682}
683
684/*
685 * This is specific to the HPT366 UDMA chipset
686 * by HighPoint|Triones Technologies, Inc.
687 */
688static void hpt366_dma_lost_irq(ide_drive_t *drive)
689{
690	struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
691	u8 mcr1 = 0, mcr3 = 0, scr1 = 0;
692
693	pci_read_config_byte(dev, 0x50, &mcr1);
694	pci_read_config_byte(dev, 0x52, &mcr3);
695	pci_read_config_byte(dev, 0x5a, &scr1);
696	printk("%s: (%s)  mcr1=0x%02x, mcr3=0x%02x, scr1=0x%02x\n",
697		drive->name, __func__, mcr1, mcr3, scr1);
698	if (scr1 & 0x10)
699		pci_write_config_byte(dev, 0x5a, scr1 & ~0x10);
700	ide_dma_lost_irq(drive);
701}
702
703static void hpt370_clear_engine(ide_drive_t *drive)
704{
705	ide_hwif_t *hwif = drive->hwif;
706	struct pci_dev *dev = to_pci_dev(hwif->dev);
707
708	pci_write_config_byte(dev, hwif->select_data, 0x37);
709	udelay(10);
710}
711
712static void hpt370_irq_timeout(ide_drive_t *drive)
713{
714	ide_hwif_t *hwif	= drive->hwif;
715	struct pci_dev *dev	= to_pci_dev(hwif->dev);
716	u16 bfifo		= 0;
717	u8  dma_cmd;
718
719	pci_read_config_word(dev, hwif->select_data + 2, &bfifo);
720	printk(KERN_DEBUG "%s: %d bytes in FIFO\n", drive->name, bfifo & 0x1ff);
721
722	/* get DMA command mode */
723	dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD);
724	/* stop DMA */
725	outb(dma_cmd & ~ATA_DMA_START, hwif->dma_base + ATA_DMA_CMD);
726	hpt370_clear_engine(drive);
727}
728
729static void hpt370_dma_start(ide_drive_t *drive)
730{
731#ifdef HPT_RESET_STATE_ENGINE
732	hpt370_clear_engine(drive);
733#endif
734	ide_dma_start(drive);
735}
736
737static int hpt370_dma_end(ide_drive_t *drive)
738{
739	ide_hwif_t *hwif	= drive->hwif;
740	u8  dma_stat		= inb(hwif->dma_base + ATA_DMA_STATUS);
741
742	if (dma_stat & ATA_DMA_ACTIVE) {
743		/* wait a little */
744		udelay(20);
745		dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
746		if (dma_stat & ATA_DMA_ACTIVE)
747			hpt370_irq_timeout(drive);
748	}
749	return ide_dma_end(drive);
750}
751
752/* returns 1 if DMA IRQ issued, 0 otherwise */
753static int hpt374_dma_test_irq(ide_drive_t *drive)
754{
755	ide_hwif_t *hwif	= drive->hwif;
756	struct pci_dev *dev	= to_pci_dev(hwif->dev);
757	u16 bfifo		= 0;
758	u8  dma_stat;
759
760	pci_read_config_word(dev, hwif->select_data + 2, &bfifo);
761	if (bfifo & 0x1FF) {
762//		printk("%s: %d bytes in FIFO\n", drive->name, bfifo);
763		return 0;
764	}
765
766	dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
767	/* return 1 if INTR asserted */
768	if (dma_stat & ATA_DMA_INTR)
769		return 1;
770
771	return 0;
772}
773
774static int hpt374_dma_end(ide_drive_t *drive)
775{
776	ide_hwif_t *hwif	= drive->hwif;
777	struct pci_dev *dev	= to_pci_dev(hwif->dev);
778	u8 mcr	= 0, mcr_addr	= hwif->select_data;
779	u8 bwsr = 0, mask	= hwif->channel ? 0x02 : 0x01;
780
781	pci_read_config_byte(dev, 0x6a, &bwsr);
782	pci_read_config_byte(dev, mcr_addr, &mcr);
783	if (bwsr & mask)
784		pci_write_config_byte(dev, mcr_addr, mcr | 0x30);
785	return ide_dma_end(drive);
786}
787
788/**
789 *	hpt3xxn_set_clock	-	perform clock switching dance
790 *	@hwif: hwif to switch
791 *	@mode: clocking mode (0x21 for write, 0x23 otherwise)
792 *
793 *	Switch the DPLL clock on the HPT3xxN devices. This is a	right mess.
794 */
795
796static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode)
797{
798	unsigned long base = hwif->extra_base;
799	u8 scr2 = inb(base + 0x6b);
800
801	if ((scr2 & 0x7f) == mode)
802		return;
803
804	/* Tristate the bus */
805	outb(0x80, base + 0x63);
806	outb(0x80, base + 0x67);
807
808	/* Switch clock and reset channels */
809	outb(mode, base + 0x6b);
810	outb(0xc0, base + 0x69);
811
812	/*
813	 * Reset the state machines.
814	 * NOTE: avoid accidentally enabling the disabled channels.
815	 */
816	outb(inb(base + 0x60) | 0x32, base + 0x60);
817	outb(inb(base + 0x64) | 0x32, base + 0x64);
818
819	/* Complete reset */
820	outb(0x00, base + 0x69);
821
822	/* Reconnect channels to bus */
823	outb(0x00, base + 0x63);
824	outb(0x00, base + 0x67);
825}
826
827/**
828 *	hpt3xxn_rw_disk		-	prepare for I/O
829 *	@drive: drive for command
830 *	@rq: block request structure
831 *
832 *	This is called when a disk I/O is issued to HPT3xxN.
833 *	We need it because of the clock switching.
834 */
835
836static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq)
837{
838	hpt3xxn_set_clock(drive->hwif, rq_data_dir(rq) ? 0x21 : 0x23);
839}
840
841/**
842 *	hpt37x_calibrate_dpll	-	calibrate the DPLL
843 *	@dev: PCI device
844 *
845 *	Perform a calibration cycle on the DPLL.
846 *	Returns 1 if this succeeds
847 */
848static int hpt37x_calibrate_dpll(struct pci_dev *dev, u16 f_low, u16 f_high)
849{
850	u32 dpll = (f_high << 16) | f_low | 0x100;
851	u8  scr2;
852	int i;
853
854	pci_write_config_dword(dev, 0x5c, dpll);
855
856	/* Wait for oscillator ready */
857	for(i = 0; i < 0x5000; ++i) {
858		udelay(50);
859		pci_read_config_byte(dev, 0x5b, &scr2);
860		if (scr2 & 0x80)
861			break;
862	}
863	/* See if it stays ready (we'll just bail out if it's not yet) */
864	for(i = 0; i < 0x1000; ++i) {
865		pci_read_config_byte(dev, 0x5b, &scr2);
866		/* DPLL destabilized? */
867		if(!(scr2 & 0x80))
868			return 0;
869	}
870	/* Turn off tuning, we have the DPLL set */
871	pci_read_config_dword (dev, 0x5c, &dpll);
872	pci_write_config_dword(dev, 0x5c, (dpll & ~0x100));
873	return 1;
874}
875
876static void hpt3xx_disable_fast_irq(struct pci_dev *dev, u8 mcr_addr)
877{
878	struct ide_host *host	= pci_get_drvdata(dev);
879	struct hpt_info *info	= host->host_priv + (&dev->dev == host->dev[1]);
880	u8  chip_type		= info->chip_type;
881	u8  new_mcr, old_mcr	= 0;
882
883	/*
884	 * Disable the "fast interrupt" prediction.  Don't hold off
885	 * on interrupts. (== 0x01 despite what the docs say)
886	 */
887	pci_read_config_byte(dev, mcr_addr + 1, &old_mcr);
888
889	if (chip_type >= HPT374)
890		new_mcr = old_mcr & ~0x07;
891	else if (chip_type >= HPT370) {
892		new_mcr = old_mcr;
893		new_mcr &= ~0x02;
894#ifdef HPT_DELAY_INTERRUPT
895		new_mcr &= ~0x01;
896#else
897		new_mcr |=  0x01;
898#endif
899	} else					/* HPT366 and HPT368  */
900		new_mcr = old_mcr & ~0x80;
901
902	if (new_mcr != old_mcr)
903		pci_write_config_byte(dev, mcr_addr + 1, new_mcr);
904}
905
906static int init_chipset_hpt366(struct pci_dev *dev)
907{
908	unsigned long io_base	= pci_resource_start(dev, 4);
909	struct hpt_info *info	= hpt3xx_get_info(&dev->dev);
910	const char *name	= DRV_NAME;
911	u8 pci_clk,  dpll_clk	= 0;	/* PCI and DPLL clock in MHz */
912	u8 chip_type;
913	enum ata_clock	clock;
914
915	chip_type = info->chip_type;
916
917	pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
918	pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78);
919	pci_write_config_byte(dev, PCI_MIN_GNT, 0x08);
920	pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
921
922	/*
923	 * First, try to estimate the PCI clock frequency...
924	 */
925	if (chip_type >= HPT370) {
926		u8  scr1  = 0;
927		u16 f_cnt = 0;
928		u32 temp  = 0;
929
930		/* Interrupt force enable. */
931		pci_read_config_byte(dev, 0x5a, &scr1);
932		if (scr1 & 0x10)
933			pci_write_config_byte(dev, 0x5a, scr1 & ~0x10);
934
935		/*
936		 * HighPoint does this for HPT372A.
937		 * NOTE: This register is only writeable via I/O space.
938		 */
939		if (chip_type == HPT372A)
940			outb(0x0e, io_base + 0x9c);
941
942		/*
943		 * Default to PCI clock. Make sure MA15/16 are set to output
944		 * to prevent drives having problems with 40-pin cables.
945		 */
946		pci_write_config_byte(dev, 0x5b, 0x23);
947
948		/*
949		 * We'll have to read f_CNT value in order to determine
950		 * the PCI clock frequency according to the following ratio:
951		 *
952		 * f_CNT = Fpci * 192 / Fdpll
953		 *
954		 * First try reading the register in which the HighPoint BIOS
955		 * saves f_CNT value before  reprogramming the DPLL from its
956		 * default setting (which differs for the various chips).
957		 *
958		 * NOTE: This register is only accessible via I/O space;
959		 * HPT374 BIOS only saves it for the function 0, so we have to
960		 * always read it from there -- no need to check the result of
961		 * pci_get_slot() for the function 0 as the whole device has
962		 * been already "pinned" (via function 1) in init_setup_hpt374()
963		 */
964		if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
965			struct pci_dev	*dev1 = pci_get_slot(dev->bus,
966							     dev->devfn - 1);
967			unsigned long io_base = pci_resource_start(dev1, 4);
968
969			temp =	inl(io_base + 0x90);
970			pci_dev_put(dev1);
971		} else
972			temp =	inl(io_base + 0x90);
973
974		/*
975		 * In case the signature check fails, we'll have to
976		 * resort to reading the f_CNT register itself in hopes
977		 * that nobody has touched the DPLL yet...
978		 */
979		if ((temp & 0xFFFFF000) != 0xABCDE000) {
980			int i;
981
982			printk(KERN_WARNING "%s %s: no clock data saved by "
983				"BIOS\n", name, pci_name(dev));
984
985			/* Calculate the average value of f_CNT. */
986			for (temp = i = 0; i < 128; i++) {
987				pci_read_config_word(dev, 0x78, &f_cnt);
988				temp += f_cnt & 0x1ff;
989				mdelay(1);
990			}
991			f_cnt = temp / 128;
992		} else
993			f_cnt = temp & 0x1ff;
994
995		dpll_clk = info->dpll_clk;
996		pci_clk  = (f_cnt * dpll_clk) / 192;
997
998		/* Clamp PCI clock to bands. */
999		if (pci_clk < 40)
1000			pci_clk = 33;
1001		else if(pci_clk < 45)
1002			pci_clk = 40;
1003		else if(pci_clk < 55)
1004			pci_clk = 50;
1005		else
1006			pci_clk = 66;
1007
1008		printk(KERN_INFO "%s %s: DPLL base: %d MHz, f_CNT: %d, "
1009			"assuming %d MHz PCI\n", name, pci_name(dev),
1010			dpll_clk, f_cnt, pci_clk);
1011	} else {
1012		u32 itr1 = 0;
1013
1014		pci_read_config_dword(dev, 0x40, &itr1);
1015
1016		/* Detect PCI clock by looking at cmd_high_time. */
1017		switch ((itr1 >> 8) & 0x0f) {
1018			case 0x09:
1019				pci_clk = 40;
1020				break;
1021			case 0x05:
1022				pci_clk = 25;
1023				break;
1024			case 0x07:
1025			default:
1026				pci_clk = 33;
1027				break;
1028		}
1029	}
1030
1031	/* Let's assume we'll use PCI clock for the ATA clock... */
1032	switch (pci_clk) {
1033		case 25:
1034			clock = ATA_CLOCK_25MHZ;
1035			break;
1036		case 33:
1037		default:
1038			clock = ATA_CLOCK_33MHZ;
1039			break;
1040		case 40:
1041			clock = ATA_CLOCK_40MHZ;
1042			break;
1043		case 50:
1044			clock = ATA_CLOCK_50MHZ;
1045			break;
1046		case 66:
1047			clock = ATA_CLOCK_66MHZ;
1048			break;
1049	}
1050
1051	/*
1052	 * Only try the DPLL if we don't have a table for the PCI clock that
1053	 * we are running at for HPT370/A, always use it  for anything newer...
1054	 *
1055	 * NOTE: Using the internal DPLL results in slow reads on 33 MHz PCI.
1056	 * We also  don't like using  the DPLL because this causes glitches
1057	 * on PRST-/SRST- when the state engine gets reset...
1058	 */
1059	if (chip_type >= HPT374 || info->timings->clock_table[clock] == NULL) {
1060		u16 f_low, delta = pci_clk < 50 ? 2 : 4;
1061		int adjust;
1062
1063		 /*
1064		  * Select 66 MHz DPLL clock only if UltraATA/133 mode is
1065		  * supported/enabled, use 50 MHz DPLL clock otherwise...
1066		  */
1067		if (info->udma_mask == ATA_UDMA6) {
1068			dpll_clk = 66;
1069			clock = ATA_CLOCK_66MHZ;
1070		} else if (dpll_clk) {	/* HPT36x chips don't have DPLL */
1071			dpll_clk = 50;
1072			clock = ATA_CLOCK_50MHZ;
1073		}
1074
1075		if (info->timings->clock_table[clock] == NULL) {
1076			printk(KERN_ERR "%s %s: unknown bus timing!\n",
1077				name, pci_name(dev));
1078			return -EIO;
1079		}
1080
1081		/* Select the DPLL clock. */
1082		pci_write_config_byte(dev, 0x5b, 0x21);
1083
1084		/*
1085		 * Adjust the DPLL based upon PCI clock, enable it,
1086		 * and wait for stabilization...
1087		 */
1088		f_low = (pci_clk * 48) / dpll_clk;
1089
1090		for (adjust = 0; adjust < 8; adjust++) {
1091			if(hpt37x_calibrate_dpll(dev, f_low, f_low + delta))
1092				break;
1093
1094			/*
1095			 * See if it'll settle at a fractionally different clock
1096			 */
1097			if (adjust & 1)
1098				f_low -= adjust >> 1;
1099			else
1100				f_low += adjust >> 1;
1101		}
1102		if (adjust == 8) {
1103			printk(KERN_ERR "%s %s: DPLL did not stabilize!\n",
1104				name, pci_name(dev));
1105			return -EIO;
1106		}
1107
1108		printk(KERN_INFO "%s %s: using %d MHz DPLL clock\n",
1109			name, pci_name(dev), dpll_clk);
1110	} else {
1111		/* Mark the fact that we're not using the DPLL. */
1112		dpll_clk = 0;
1113
1114		printk(KERN_INFO "%s %s: using %d MHz PCI clock\n",
1115			name, pci_name(dev), pci_clk);
1116	}
1117
1118	/* Store the clock frequencies. */
1119	info->dpll_clk	= dpll_clk;
1120	info->pci_clk	= pci_clk;
1121	info->clock	= clock;
1122
1123	if (chip_type >= HPT370) {
1124		u8  mcr1, mcr4;
1125
1126		/*
1127		 * Reset the state engines.
1128		 * NOTE: Avoid accidentally enabling the disabled channels.
1129		 */
1130		pci_read_config_byte (dev, 0x50, &mcr1);
1131		pci_read_config_byte (dev, 0x54, &mcr4);
1132		pci_write_config_byte(dev, 0x50, (mcr1 | 0x32));
1133		pci_write_config_byte(dev, 0x54, (mcr4 | 0x32));
1134		udelay(100);
1135	}
1136
1137	/*
1138	 * On  HPT371N, if ATA clock is 66 MHz we must set bit 2 in
1139	 * the MISC. register to stretch the UltraDMA Tss timing.
1140	 * NOTE: This register is only writeable via I/O space.
1141	 */
1142	if (chip_type == HPT371N && clock == ATA_CLOCK_66MHZ)
1143		outb(inb(io_base + 0x9c) | 0x04, io_base + 0x9c);
1144
1145	hpt3xx_disable_fast_irq(dev, 0x50);
1146	hpt3xx_disable_fast_irq(dev, 0x54);
1147
1148	return 0;
1149}
1150
1151static u8 hpt3xx_cable_detect(ide_hwif_t *hwif)
1152{
1153	struct pci_dev	*dev	= to_pci_dev(hwif->dev);
1154	struct hpt_info *info	= hpt3xx_get_info(hwif->dev);
1155	u8 chip_type		= info->chip_type;
1156	u8 scr1 = 0, ata66	= hwif->channel ? 0x01 : 0x02;
1157
1158	/*
1159	 * The HPT37x uses the CBLID pins as outputs for MA15/MA16
1160	 * address lines to access an external EEPROM.  To read valid
1161	 * cable detect state the pins must be enabled as inputs.
1162	 */
1163	if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
1164		/*
1165		 * HPT374 PCI function 1
1166		 * - set bit 15 of reg 0x52 to enable TCBLID as input
1167		 * - set bit 15 of reg 0x56 to enable FCBLID as input
1168		 */
1169		u8  mcr_addr = hwif->select_data + 2;
1170		u16 mcr;
1171
1172		pci_read_config_word(dev, mcr_addr, &mcr);
1173		pci_write_config_word(dev, mcr_addr, mcr | 0x8000);
1174		/* Debounce, then read cable ID register */
1175		udelay(10);
1176		pci_read_config_byte(dev, 0x5a, &scr1);
1177		pci_write_config_word(dev, mcr_addr, mcr);
1178	} else if (chip_type >= HPT370) {
1179		/*
1180		 * HPT370/372 and 374 pcifn 0
1181		 * - clear bit 0 of reg 0x5b to enable P/SCBLID as inputs
1182		 */
1183		u8 scr2 = 0;
1184
1185		pci_read_config_byte(dev, 0x5b, &scr2);
1186		pci_write_config_byte(dev, 0x5b, scr2 & ~1);
1187		/* Debounce, then read cable ID register */
1188		udelay(10);
1189		pci_read_config_byte(dev, 0x5a, &scr1);
1190		pci_write_config_byte(dev, 0x5b, scr2);
1191	} else
1192		pci_read_config_byte(dev, 0x5a, &scr1);
1193
1194	return (scr1 & ata66) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
1195}
1196
1197static void init_hwif_hpt366(ide_hwif_t *hwif)
1198{
1199	struct hpt_info *info	= hpt3xx_get_info(hwif->dev);
1200	u8  chip_type		= info->chip_type;
1201
1202	/* Cache the channel's MISC. control registers' offset */
1203	hwif->select_data	= hwif->channel ? 0x54 : 0x50;
1204
1205	/*
1206	 * HPT3xxN chips have some complications:
1207	 *
1208	 * - on 33 MHz PCI we must clock switch
1209	 * - on 66 MHz PCI we must NOT use the PCI clock
1210	 */
1211	if (chip_type >= HPT372N && info->dpll_clk && info->pci_clk < 66) {
1212		/*
1213		 * Clock is shared between the channels,
1214		 * so we'll have to serialize them... :-(
1215		 */
1216		hwif->host->host_flags |= IDE_HFLAG_SERIALIZE;
1217		hwif->rw_disk = &hpt3xxn_rw_disk;
1218	}
1219}
1220
1221static int init_dma_hpt366(ide_hwif_t *hwif,
1222				     const struct ide_port_info *d)
1223{
1224	struct pci_dev *dev = to_pci_dev(hwif->dev);
1225	unsigned long flags, base = ide_pci_dma_base(hwif, d);
1226	u8 dma_old, dma_new, masterdma = 0, slavedma = 0;
1227
1228	if (base == 0)
1229		return -1;
1230
1231	hwif->dma_base = base;
1232
1233	if (ide_pci_check_simplex(hwif, d) < 0)
1234		return -1;
1235
1236	if (ide_pci_set_master(dev, d->name) < 0)
1237		return -1;
1238
1239	dma_old = inb(base + 2);
1240
1241	local_irq_save(flags);
1242
1243	dma_new = dma_old;
1244	pci_read_config_byte(dev, hwif->channel ? 0x4b : 0x43, &masterdma);
1245	pci_read_config_byte(dev, hwif->channel ? 0x4f : 0x47,  &slavedma);
1246
1247	if (masterdma & 0x30)	dma_new |= 0x20;
1248	if ( slavedma & 0x30)	dma_new |= 0x40;
1249	if (dma_new != dma_old)
1250		outb(dma_new, base + 2);
1251
1252	local_irq_restore(flags);
1253
1254	printk(KERN_INFO "    %s: BM-DMA at 0x%04lx-0x%04lx\n",
1255			 hwif->name, base, base + 7);
1256
1257	hwif->extra_base = base + (hwif->channel ? 8 : 16);
1258
1259	if (ide_allocate_dma_engine(hwif))
1260		return -1;
1261
1262	return 0;
1263}
1264
1265static void hpt374_init(struct pci_dev *dev, struct pci_dev *dev2)
1266{
1267	if (dev2->irq != dev->irq) {
1268		/* FIXME: we need a core pci_set_interrupt() */
1269		dev2->irq = dev->irq;
1270		printk(KERN_INFO DRV_NAME " %s: PCI config space interrupt "
1271			"fixed\n", pci_name(dev2));
1272	}
1273}
1274
1275static void hpt371_init(struct pci_dev *dev)
1276{
1277	u8 mcr1 = 0;
1278
1279	/*
1280	 * HPT371 chips physically have only one channel, the secondary one,
1281	 * but the primary channel registers do exist!  Go figure...
1282	 * So,  we manually disable the non-existing channel here
1283	 * (if the BIOS hasn't done this already).
1284	 */
1285	pci_read_config_byte(dev, 0x50, &mcr1);
1286	if (mcr1 & 0x04)
1287		pci_write_config_byte(dev, 0x50, mcr1 & ~0x04);
1288}
1289
1290static int hpt36x_init(struct pci_dev *dev, struct pci_dev *dev2)
1291{
1292	u8 mcr1 = 0, pin1 = 0, pin2 = 0;
1293
1294	/*
1295	 * Now we'll have to force both channels enabled if
1296	 * at least one of them has been enabled by BIOS...
1297	 */
1298	pci_read_config_byte(dev, 0x50, &mcr1);
1299	if (mcr1 & 0x30)
1300		pci_write_config_byte(dev, 0x50, mcr1 | 0x30);
1301
1302	pci_read_config_byte(dev,  PCI_INTERRUPT_PIN, &pin1);
1303	pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2);
1304
1305	if (pin1 != pin2 && dev->irq == dev2->irq) {
1306		printk(KERN_INFO DRV_NAME " %s: onboard version of chipset, "
1307			"pin1=%d pin2=%d\n", pci_name(dev), pin1, pin2);
1308		return 1;
1309	}
1310
1311	return 0;
1312}
1313
1314#define IDE_HFLAGS_HPT3XX \
1315	(IDE_HFLAG_NO_ATAPI_DMA | \
1316	 IDE_HFLAG_OFF_BOARD)
1317
1318static const struct ide_port_ops hpt3xx_port_ops = {
1319	.set_pio_mode		= hpt3xx_set_pio_mode,
1320	.set_dma_mode		= hpt3xx_set_mode,
1321	.maskproc		= hpt3xx_maskproc,
1322	.mdma_filter		= hpt3xx_mdma_filter,
1323	.udma_filter		= hpt3xx_udma_filter,
1324	.cable_detect		= hpt3xx_cable_detect,
1325};
1326
1327static const struct ide_dma_ops hpt37x_dma_ops = {
1328	.dma_host_set		= ide_dma_host_set,
1329	.dma_setup		= ide_dma_setup,
1330	.dma_start		= ide_dma_start,
1331	.dma_end		= hpt374_dma_end,
1332	.dma_test_irq		= hpt374_dma_test_irq,
1333	.dma_lost_irq		= ide_dma_lost_irq,
1334	.dma_timer_expiry	= ide_dma_sff_timer_expiry,
1335	.dma_sff_read_status	= ide_dma_sff_read_status,
1336};
1337
1338static const struct ide_dma_ops hpt370_dma_ops = {
1339	.dma_host_set		= ide_dma_host_set,
1340	.dma_setup		= ide_dma_setup,
1341	.dma_start		= hpt370_dma_start,
1342	.dma_end		= hpt370_dma_end,
1343	.dma_test_irq		= ide_dma_test_irq,
1344	.dma_lost_irq		= ide_dma_lost_irq,
1345	.dma_timer_expiry	= ide_dma_sff_timer_expiry,
1346	.dma_clear		= hpt370_irq_timeout,
1347	.dma_sff_read_status	= ide_dma_sff_read_status,
1348};
1349
1350static const struct ide_dma_ops hpt36x_dma_ops = {
1351	.dma_host_set		= ide_dma_host_set,
1352	.dma_setup		= ide_dma_setup,
1353	.dma_start		= ide_dma_start,
1354	.dma_end		= ide_dma_end,
1355	.dma_test_irq		= ide_dma_test_irq,
1356	.dma_lost_irq		= hpt366_dma_lost_irq,
1357	.dma_timer_expiry	= ide_dma_sff_timer_expiry,
1358	.dma_sff_read_status	= ide_dma_sff_read_status,
1359};
1360
1361static const struct ide_port_info hpt366_chipsets[] = {
1362	{	/* 0: HPT36x */
1363		.name		= DRV_NAME,
1364		.init_chipset	= init_chipset_hpt366,
1365		.init_hwif	= init_hwif_hpt366,
1366		.init_dma	= init_dma_hpt366,
1367		/*
1368		 * HPT36x chips have one channel per function and have
1369		 * both channel enable bits located differently and visible
1370		 * to both functions -- really stupid design decision... :-(
1371		 * Bit 4 is for the primary channel, bit 5 for the secondary.
1372		 */
1373		.enablebits	= {{0x50,0x10,0x10}, {0x54,0x04,0x04}},
1374		.port_ops	= &hpt3xx_port_ops,
1375		.dma_ops	= &hpt36x_dma_ops,
1376		.host_flags	= IDE_HFLAGS_HPT3XX | IDE_HFLAG_SINGLE,
1377		.pio_mask	= ATA_PIO4,
1378		.mwdma_mask	= ATA_MWDMA2,
1379	},
1380	{	/* 1: HPT3xx */
1381		.name		= DRV_NAME,
1382		.init_chipset	= init_chipset_hpt366,
1383		.init_hwif	= init_hwif_hpt366,
1384		.init_dma	= init_dma_hpt366,
1385		.enablebits	= {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1386		.port_ops	= &hpt3xx_port_ops,
1387		.dma_ops	= &hpt37x_dma_ops,
1388		.host_flags	= IDE_HFLAGS_HPT3XX,
1389		.pio_mask	= ATA_PIO4,
1390		.mwdma_mask	= ATA_MWDMA2,
1391	}
1392};
1393
1394/**
1395 *	hpt366_init_one	-	called when an HPT366 is found
1396 *	@dev: the hpt366 device
1397 *	@id: the matching pci id
1398 *
1399 *	Called when the PCI registration layer (or the IDE initialization)
1400 *	finds a device matching our IDE device tables.
1401 */
1402static int hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id)
1403{
1404	const struct hpt_info *info = NULL;
1405	struct hpt_info *dyn_info;
1406	struct pci_dev *dev2 = NULL;
1407	struct ide_port_info d;
1408	u8 idx = id->driver_data;
1409	u8 rev = dev->revision;
1410	int ret;
1411
1412	if ((idx == 0 || idx == 4) && (PCI_FUNC(dev->devfn) & 1))
1413		return -ENODEV;
1414
1415	switch (idx) {
1416	case 0:
1417		if (rev < 3)
1418			info = &hpt36x;
1419		else {
1420			switch (min_t(u8, rev, 6)) {
1421			case 3: info = &hpt370;  break;
1422			case 4: info = &hpt370a; break;
1423			case 5: info = &hpt372;  break;
1424			case 6: info = &hpt372n; break;
1425			}
1426			idx++;
1427		}
1428		break;
1429	case 1:
1430		info = (rev > 1) ? &hpt372n : &hpt372a;
1431		break;
1432	case 2:
1433		info = (rev > 1) ? &hpt302n : &hpt302;
1434		break;
1435	case 3:
1436		hpt371_init(dev);
1437		info = (rev > 1) ? &hpt371n : &hpt371;
1438		break;
1439	case 4:
1440		info = &hpt374;
1441		break;
1442	case 5:
1443		info = &hpt372n;
1444		break;
1445	}
1446
1447	printk(KERN_INFO DRV_NAME ": %s chipset detected\n", info->chip_name);
1448
1449	d = hpt366_chipsets[min_t(u8, idx, 1)];
1450
1451	d.udma_mask = info->udma_mask;
1452
1453	/* fixup ->dma_ops for HPT370/HPT370A */
1454	if (info == &hpt370 || info == &hpt370a)
1455		d.dma_ops = &hpt370_dma_ops;
1456
1457	if (info == &hpt36x || info == &hpt374)
1458		dev2 = pci_get_slot(dev->bus, dev->devfn + 1);
1459
1460	dyn_info = kcalloc(dev2 ? 2 : 1, sizeof(*dyn_info), GFP_KERNEL);
1461	if (dyn_info == NULL) {
1462		printk(KERN_ERR "%s %s: out of memory!\n",
1463			d.name, pci_name(dev));
1464		pci_dev_put(dev2);
1465		return -ENOMEM;
1466	}
1467
1468	/*
1469	 * Copy everything from a static "template" structure
1470	 * to just allocated per-chip hpt_info structure.
1471	 */
1472	memcpy(dyn_info, info, sizeof(*dyn_info));
1473
1474	if (dev2) {
1475		memcpy(dyn_info + 1, info, sizeof(*dyn_info));
1476
1477		if (info == &hpt374)
1478			hpt374_init(dev, dev2);
1479		else {
1480			if (hpt36x_init(dev, dev2))
1481				d.host_flags &= ~IDE_HFLAG_NON_BOOTABLE;
1482		}
1483
1484		ret = ide_pci_init_two(dev, dev2, &d, dyn_info);
1485		if (ret < 0) {
1486			pci_dev_put(dev2);
1487			kfree(dyn_info);
1488		}
1489		return ret;
1490	}
1491
1492	ret = ide_pci_init_one(dev, &d, dyn_info);
1493	if (ret < 0)
1494		kfree(dyn_info);
1495
1496	return ret;
1497}
1498
1499static void hpt366_remove(struct pci_dev *dev)
1500{
1501	struct ide_host *host = pci_get_drvdata(dev);
1502	struct ide_info *info = host->host_priv;
1503	struct pci_dev *dev2 = host->dev[1] ? to_pci_dev(host->dev[1]) : NULL;
1504
1505	ide_pci_remove(dev);
1506	pci_dev_put(dev2);
1507	kfree(info);
1508}
1509
1510static const struct pci_device_id hpt366_pci_tbl[] = {
1511	{ PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366),  0 },
1512	{ PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372),  1 },
1513	{ PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT302),  2 },
1514	{ PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT371),  3 },
1515	{ PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT374),  4 },
1516	{ PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372N), 5 },
1517	{ 0, },
1518};
1519MODULE_DEVICE_TABLE(pci, hpt366_pci_tbl);
1520
1521static struct pci_driver hpt366_pci_driver = {
1522	.name		= "HPT366_IDE",
1523	.id_table	= hpt366_pci_tbl,
1524	.probe		= hpt366_init_one,
1525	.remove		= hpt366_remove,
1526	.suspend	= ide_pci_suspend,
1527	.resume		= ide_pci_resume,
1528};
1529
1530static int __init hpt366_ide_init(void)
1531{
1532	return ide_pci_register_driver(&hpt366_pci_driver);
1533}
1534
1535static void __exit hpt366_ide_exit(void)
1536{
1537	pci_unregister_driver(&hpt366_pci_driver);
1538}
1539
1540module_init(hpt366_ide_init);
1541module_exit(hpt366_ide_exit);
1542
1543MODULE_AUTHOR("Andre Hedrick");
1544MODULE_DESCRIPTION("PCI driver module for Highpoint HPT366 IDE");
1545MODULE_LICENSE("GPL");
1546