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
8e181c14
Commit
8e181c14
authored
Apr 01, 2006
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upstream'
parents
eee6c32f
852ee16a
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
49 additions
and
29 deletions
+49
-29
drivers/scsi/libata-core.c
drivers/scsi/libata-core.c
+49
-29
No files found.
drivers/scsi/libata-core.c
View file @
8e181c14
...
...
@@ -65,7 +65,7 @@ static unsigned int ata_dev_init_params(struct ata_port *ap,
struct
ata_device
*
dev
,
u16
heads
,
u16
sectors
);
static
void
ata_set_mode
(
struct
ata_port
*
ap
);
static
int
ata_set_mode
(
struct
ata_port
*
ap
,
struct
ata_device
**
r_failed_dev
);
static
unsigned
int
ata_dev_set_xfermode
(
struct
ata_port
*
ap
,
struct
ata_device
*
dev
);
static
void
ata_dev_xfermask
(
struct
ata_port
*
ap
,
struct
ata_device
*
dev
);
...
...
@@ -1382,6 +1382,7 @@ static int ata_bus_probe(struct ata_port *ap)
{
unsigned
int
classes
[
ATA_MAX_DEVICES
];
int
i
,
rc
,
found
=
0
;
struct
ata_device
*
dev
;
ata_port_probe
(
ap
);
...
...
@@ -1411,8 +1412,7 @@ static int ata_bus_probe(struct ata_port *ap)
/* read IDENTIFY page and configure devices */
for
(
i
=
0
;
i
<
ATA_MAX_DEVICES
;
i
++
)
{
struct
ata_device
*
dev
=
&
ap
->
device
[
i
];
dev
=
&
ap
->
device
[
i
];
dev
->
class
=
classes
[
i
];
if
(
!
ata_dev_enabled
(
dev
))
...
...
@@ -1432,20 +1432,26 @@ static int ata_bus_probe(struct ata_port *ap)
found
=
1
;
}
if
(
!
found
)
goto
err_out_disable
;
if
(
ap
->
ops
->
set_mode
)
ap
->
ops
->
set_mode
(
ap
);
else
ata_set_mode
(
ap
);
if
(
ap
->
flags
&
ATA_FLAG_PORT_DISABLED
)
goto
err_out_disable
;
/* configure transfer mode */
if
(
ap
->
ops
->
set_mode
)
{
/* FIXME: make ->set_mode handle no device case and
* return error code and failing device on failure as
* ata_set_mode() does.
*/
if
(
found
)
ap
->
ops
->
set_mode
(
ap
);
rc
=
0
;
}
else
{
while
(
ata_set_mode
(
ap
,
&
dev
))
ata_dev_disable
(
ap
,
dev
);
}
return
0
;
for
(
i
=
0
;
i
<
ATA_MAX_DEVICES
;
i
++
)
if
(
ata_dev_enabled
(
&
ap
->
device
[
i
]))
return
0
;
err_out_disable:
/* no device present, disable port */
ata_port_disable
(
ap
);
ap
->
ops
->
port_disable
(
ap
);
return
-
ENODEV
;
}
...
...
@@ -1788,16 +1794,22 @@ static int ata_dev_set_mode(struct ata_port *ap, struct ata_device *dev)
/**
* ata_set_mode - Program timings and issue SET FEATURES - XFER
* @ap: port on which timings will be programmed
* @r_failed_dev: out paramter for failed device
*
* Set ATA device disk transfer mode (PIO3, UDMA6, etc.).
* Set ATA device disk transfer mode (PIO3, UDMA6, etc.). If
* ata_set_mode() fails, pointer to the failing device is
* returned in @r_failed_dev.
*
* LOCKING:
* PCI/etc. bus probe sem.
*
* RETURNS:
* 0 on success, negative errno otherwise
*/
static
void
ata_set_mode
(
struct
ata_port
*
ap
)
static
int
ata_set_mode
(
struct
ata_port
*
ap
,
struct
ata_device
**
r_failed_dev
)
{
struct
ata_device
*
dev
;
int
i
,
rc
,
used_dma
=
0
,
found
=
0
;
int
i
,
rc
=
0
,
used_dma
=
0
,
found
=
0
;
/* step 1: calculate xfer_mask */
for
(
i
=
0
;
i
<
ATA_MAX_DEVICES
;
i
++
)
{
...
...
@@ -1820,7 +1832,7 @@ static void ata_set_mode(struct ata_port *ap)
used_dma
=
1
;
}
if
(
!
found
)
return
;
goto
out
;
/* step 2: always set host PIO timings */
for
(
i
=
0
;
i
<
ATA_MAX_DEVICES
;
i
++
)
{
...
...
@@ -1832,7 +1844,7 @@ static void ata_set_mode(struct ata_port *ap)
printk
(
KERN_WARNING
"ata%u: dev %u no PIO support
\n
"
,
ap
->
id
,
dev
->
devno
);
rc
=
-
EINVAL
;
goto
err_
out
;
goto
out
;
}
dev
->
xfer_mode
=
dev
->
pio_mode
;
...
...
@@ -1863,7 +1875,7 @@ static void ata_set_mode(struct ata_port *ap)
rc
=
ata_dev_set_mode
(
ap
,
dev
);
if
(
rc
)
goto
err_
out
;
goto
out
;
}
/* Record simplex status. If we selected DMA then the other
...
...
@@ -1876,10 +1888,10 @@ static void ata_set_mode(struct ata_port *ap)
if
(
ap
->
ops
->
post_set_mode
)
ap
->
ops
->
post_set_mode
(
ap
);
return
;
err_out:
ata_port_disable
(
ap
)
;
out:
if
(
rc
)
*
r_failed_dev
=
dev
;
return
rc
;
}
/**
...
...
@@ -2134,9 +2146,11 @@ err_out:
static
int
sata_phy_resume
(
struct
ata_port
*
ap
)
{
unsigned
long
timeout
=
jiffies
+
(
HZ
*
5
);
u32
sstatus
;
u32
s
control
,
s
status
;
scr_write_flush
(
ap
,
SCR_CONTROL
,
0x300
);
scontrol
=
scr_read
(
ap
,
SCR_CONTROL
);
scontrol
=
(
scontrol
&
0x0f0
)
|
0x300
;
scr_write_flush
(
ap
,
SCR_CONTROL
,
scontrol
);
/* Wait for phy to become ready, if necessary. */
do
{
...
...
@@ -2249,10 +2263,14 @@ int ata_std_softreset(struct ata_port *ap, int verbose, unsigned int *classes)
*/
int
sata_std_hardreset
(
struct
ata_port
*
ap
,
int
verbose
,
unsigned
int
*
class
)
{
u32
scontrol
;
DPRINTK
(
"ENTER
\n
"
);
/* Issue phy wake/reset */
scr_write_flush
(
ap
,
SCR_CONTROL
,
0x301
);
scontrol
=
scr_read
(
ap
,
SCR_CONTROL
);
scontrol
=
(
scontrol
&
0x0f0
)
|
0x301
;
scr_write_flush
(
ap
,
SCR_CONTROL
,
scontrol
);
/*
* Couldn't find anything in SATA I/II specs, but AHCI-1.1
...
...
@@ -4452,8 +4470,10 @@ static int ata_start_drive(struct ata_port *ap, struct ata_device *dev)
int
ata_device_resume
(
struct
ata_port
*
ap
,
struct
ata_device
*
dev
)
{
if
(
ap
->
flags
&
ATA_FLAG_SUSPENDED
)
{
struct
ata_device
*
failed_dev
;
ap
->
flags
&=
~
ATA_FLAG_SUSPENDED
;
ata_set_mode
(
ap
);
while
(
ata_set_mode
(
ap
,
&
failed_dev
))
ata_dev_disable
(
ap
,
failed_dev
);
}
if
(
!
ata_dev_enabled
(
dev
))
return
0
;
...
...
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