Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
728c7763
Commit
728c7763
authored
Jan 17, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev
parents
d1138cf0
a1bd9e68
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
105 additions
and
14 deletions
+105
-14
drivers/pci/quirks.c
drivers/pci/quirks.c
+4
-1
drivers/scsi/ahci.c
drivers/scsi/ahci.c
+10
-0
drivers/scsi/ata_piix.c
drivers/scsi/ata_piix.c
+3
-0
drivers/scsi/libata-core.c
drivers/scsi/libata-core.c
+63
-10
drivers/scsi/sata_promise.c
drivers/scsi/sata_promise.c
+16
-0
drivers/scsi/sata_svw.c
drivers/scsi/sata_svw.c
+1
-0
include/linux/libata.h
include/linux/libata.h
+8
-3
No files found.
drivers/pci/quirks.c
View file @
728c7763
...
...
@@ -1142,6 +1142,9 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
case
0x27c4
:
ich
=
7
;
break
;
case
0x2828
:
/* ICH8M */
ich
=
8
;
break
;
default:
/* we do not handle this PCI device */
return
;
...
...
@@ -1161,7 +1164,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
else
return
;
/* not in combined mode */
}
else
{
WARN_ON
((
ich
!=
6
)
&&
(
ich
!=
7
));
WARN_ON
((
ich
!=
6
)
&&
(
ich
!=
7
)
&&
(
ich
!=
8
)
);
tmp
&=
0x3
;
/* interesting bits 1:0 */
if
(
tmp
&
(
1
<<
0
))
comb
=
(
1
<<
2
);
/* PATA port 0, SATA port 1 */
...
...
drivers/scsi/ahci.c
View file @
728c7763
...
...
@@ -276,6 +276,16 @@ static const struct pci_device_id ahci_pci_tbl[] = {
board_ahci
},
/* ESB2 */
{
PCI_VENDOR_ID_INTEL
,
0x27c6
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH7-M DH */
{
PCI_VENDOR_ID_INTEL
,
0x2821
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8 */
{
PCI_VENDOR_ID_INTEL
,
0x2822
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8 */
{
PCI_VENDOR_ID_INTEL
,
0x2824
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8 */
{
PCI_VENDOR_ID_INTEL
,
0x2829
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8M */
{
PCI_VENDOR_ID_INTEL
,
0x282a
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8M */
{
}
/* terminate list */
};
...
...
drivers/scsi/ata_piix.c
View file @
728c7763
...
...
@@ -157,6 +157,9 @@ static const struct pci_device_id piix_pci_tbl[] = {
{
0x8086
,
0x27c0
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x27c4
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2680
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2820
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2825
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2828
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
}
/* terminate list */
};
...
...
drivers/scsi/libata-core.c
View file @
728c7763
...
...
@@ -611,6 +611,10 @@ int ata_rwcmd_protocol(struct ata_queued_cmd *qc)
if
(
dev
->
flags
&
ATA_DFLAG_PIO
)
{
tf
->
protocol
=
ATA_PROT_PIO
;
index
=
dev
->
multi_count
?
0
:
8
;
}
else
if
(
lba48
&&
(
qc
->
ap
->
flags
&
ATA_FLAG_PIO_LBA48
))
{
/* Unable to use DMA due to host limitation */
tf
->
protocol
=
ATA_PROT_PIO
;
index
=
dev
->
multi_count
?
0
:
4
;
}
else
{
tf
->
protocol
=
ATA_PROT_DMA
;
index
=
16
;
...
...
@@ -1051,18 +1055,22 @@ static unsigned int ata_pio_modes(const struct ata_device *adev)
{
u16
modes
;
/* Usual case. Word 53 indicates word
88
is valid */
if
(
adev
->
id
[
ATA_ID_FIELD_VALID
]
&
(
1
<<
2
))
{
/* Usual case. Word 53 indicates word
64
is valid */
if
(
adev
->
id
[
ATA_ID_FIELD_VALID
]
&
(
1
<<
1
))
{
modes
=
adev
->
id
[
ATA_ID_PIO_MODES
]
&
0x03
;
modes
<<=
3
;
modes
|=
0x7
;
return
modes
;
}
/* If word
88 isn't valid then Word 51 holds the PIO timing number
for the maximum. Turn it into a mask and return it */
modes
=
(
2
<<
(
adev
->
id
[
ATA_ID_OLD_PIO_MODES
]
&
0xFF
))
-
1
;
/* If word
64 isn't valid then Word 51 high byte holds the PIO timing
number
for the maximum. Turn it into a mask and return it */
modes
=
(
2
<<
(
(
adev
->
id
[
ATA_ID_OLD_PIO_MODES
]
>>
8
)
&
0xFF
))
-
1
;
return
modes
;
/* But wait.. there's more. Design your standards by committee and
you too can get a free iordy field to process. However its the
speeds not the modes that are supported... Note drivers using the
timing API will get this right anyway */
}
struct
ata_exec_internal_arg
{
...
...
@@ -1164,6 +1172,39 @@ ata_exec_internal(struct ata_port *ap, struct ata_device *dev,
return
AC_ERR_OTHER
;
}
/**
* ata_pio_need_iordy - check if iordy needed
* @adev: ATA device
*
* Check if the current speed of the device requires IORDY. Used
* by various controllers for chip configuration.
*/
unsigned
int
ata_pio_need_iordy
(
const
struct
ata_device
*
adev
)
{
int
pio
;
int
speed
=
adev
->
pio_mode
-
XFER_PIO_0
;
if
(
speed
<
2
)
return
0
;
if
(
speed
>
2
)
return
1
;
/* If we have no drive specific rule, then PIO 2 is non IORDY */
if
(
adev
->
id
[
ATA_ID_FIELD_VALID
]
&
2
)
{
/* EIDE */
pio
=
adev
->
id
[
ATA_ID_EIDE_PIO
];
/* Is the speed faster than the drive allows non IORDY ? */
if
(
pio
)
{
/* This is cycle times not frequency - watch the logic! */
if
(
pio
>
240
)
/* PIO2 is 240nS per cycle */
return
1
;
return
0
;
}
}
return
0
;
}
/**
* ata_dev_identify - obtain IDENTIFY x DEVICE page
* @ap: port on which device we wish to probe resides
...
...
@@ -1415,7 +1456,7 @@ void ata_dev_config(struct ata_port *ap, unsigned int i)
ap
->
udma_mask
&=
ATA_UDMA5
;
ap
->
host
->
max_sectors
=
ATA_MAX_SECTORS
;
ap
->
host
->
hostt
->
max_sectors
=
ATA_MAX_SECTORS
;
ap
->
device
->
flags
|=
ATA_DFLAG_LOCK_SECTORS
;
ap
->
device
[
i
].
flags
|=
ATA_DFLAG_LOCK_SECTORS
;
}
if
(
ap
->
ops
->
dev_config
)
...
...
@@ -3056,10 +3097,21 @@ static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf,
static
void
ata_data_xfer
(
struct
ata_port
*
ap
,
unsigned
char
*
buf
,
unsigned
int
buflen
,
int
do_write
)
{
/* Make the crap hardware pay the costs not the good stuff */
if
(
unlikely
(
ap
->
flags
&
ATA_FLAG_IRQ_MASK
))
{
unsigned
long
flags
;
local_irq_save
(
flags
);
if
(
ap
->
flags
&
ATA_FLAG_MMIO
)
ata_mmio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
else
ata_pio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
local_irq_restore
(
flags
);
}
else
{
if
(
ap
->
flags
&
ATA_FLAG_MMIO
)
ata_mmio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
else
ata_pio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
}
}
/**
...
...
@@ -5122,6 +5174,7 @@ EXPORT_SYMBOL_GPL(ata_dev_id_string);
EXPORT_SYMBOL_GPL
(
ata_dev_config
);
EXPORT_SYMBOL_GPL
(
ata_scsi_simulate
);
EXPORT_SYMBOL_GPL
(
ata_pio_need_iordy
);
EXPORT_SYMBOL_GPL
(
ata_timing_compute
);
EXPORT_SYMBOL_GPL
(
ata_timing_merge
);
...
...
drivers/scsi/sata_promise.c
View file @
728c7763
...
...
@@ -66,6 +66,7 @@ enum {
board_2037x
=
0
,
/* FastTrak S150 TX2plus */
board_20319
=
1
,
/* FastTrak S150 TX4 */
board_20619
=
2
,
/* FastTrak TX4000 */
board_20771
=
3
,
/* FastTrak TX2300 */
PDC_HAS_PATA
=
(
1
<<
1
),
/* PDC20375 has PATA */
...
...
@@ -190,6 +191,16 @@ static const struct ata_port_info pdc_port_info[] = {
.
udma_mask
=
0x7f
,
/* udma0-6 ; FIXME */
.
port_ops
=
&
pdc_pata_ops
,
},
/* board_20771 */
{
.
sht
=
&
pdc_ata_sht
,
.
host_flags
=
PDC_COMMON_FLAGS
|
ATA_FLAG_SATA
,
.
pio_mask
=
0x1f
,
/* pio0-4 */
.
mwdma_mask
=
0x07
,
/* mwdma0-2 */
.
udma_mask
=
0x7f
,
/* udma0-6 ; FIXME */
.
port_ops
=
&
pdc_sata_ops
,
},
};
static
const
struct
pci_device_id
pdc_ata_pci_tbl
[]
=
{
...
...
@@ -226,6 +237,8 @@ static const struct pci_device_id pdc_ata_pci_tbl[] = {
{
PCI_VENDOR_ID_PROMISE
,
0x6629
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_20619
},
{
PCI_VENDOR_ID_PROMISE
,
0x3570
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_20771
},
{
}
/* terminate list */
};
...
...
@@ -706,6 +719,9 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
case
board_2037x
:
probe_ent
->
n_ports
=
2
;
break
;
case
board_20771
:
probe_ent
->
n_ports
=
2
;
break
;
case
board_20619
:
probe_ent
->
n_ports
=
4
;
...
...
drivers/scsi/sata_svw.c
View file @
728c7763
...
...
@@ -470,6 +470,7 @@ static const struct pci_device_id k2_sata_pci_tbl[] = {
{
0x1166
,
0x0241
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
0x1166
,
0x0242
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
8
},
{
0x1166
,
0x024a
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
0x1166
,
0x024b
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
}
};
...
...
include/linux/libata.h
View file @
728c7763
...
...
@@ -126,16 +126,19 @@ enum {
ATA_FLAG_SUSPENDED
=
(
1
<<
12
),
/* port is suspended */
ATA_FLAG_PIO_LBA48
=
(
1
<<
13
),
/* Host DMA engine is LBA28 only */
ATA_FLAG_IRQ_MASK
=
(
1
<<
14
),
/* Mask IRQ in PIO xfers */
ATA_QCFLAG_ACTIVE
=
(
1
<<
1
),
/* cmd not yet ack'd to scsi lyer */
ATA_QCFLAG_SG
=
(
1
<<
3
),
/* have s/g table? */
ATA_QCFLAG_SINGLE
=
(
1
<<
4
),
/* no s/g, just a single buffer */
ATA_QCFLAG_DMAMAP
=
ATA_QCFLAG_SG
|
ATA_QCFLAG_SINGLE
,
/* various lengths of time */
ATA_TMOUT_EDD
=
5
*
HZ
,
/* h
ue
ristic */
ATA_TMOUT_EDD
=
5
*
HZ
,
/* h
eu
ristic */
ATA_TMOUT_PIO
=
30
*
HZ
,
ATA_TMOUT_BOOT
=
30
*
HZ
,
/* h
ue
ristic */
ATA_TMOUT_BOOT_QUICK
=
7
*
HZ
,
/* h
ue
ristic */
ATA_TMOUT_BOOT
=
30
*
HZ
,
/* h
eu
ristic */
ATA_TMOUT_BOOT_QUICK
=
7
*
HZ
,
/* h
eu
ristic */
ATA_TMOUT_CDB
=
30
*
HZ
,
ATA_TMOUT_CDB_QUICK
=
5
*
HZ
,
ATA_TMOUT_INTERNAL
=
30
*
HZ
,
...
...
@@ -499,6 +502,8 @@ extern int ata_scsi_slave_config(struct scsi_device *sdev);
/*
* Timing helpers
*/
extern
unsigned
int
ata_pio_need_iordy
(
const
struct
ata_device
*
);
extern
int
ata_timing_compute
(
struct
ata_device
*
,
unsigned
short
,
struct
ata_timing
*
,
int
,
int
);
extern
void
ata_timing_merge
(
const
struct
ata_timing
*
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment