Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
cc0c2170
Commit
cc0c2170
authored
Feb 25, 2004
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[libata sata_sil] fix 4-port support on SII 3114
parent
b19b2c2e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
9 deletions
+26
-9
drivers/scsi/sata_sil.c
drivers/scsi/sata_sil.c
+26
-9
No files found.
drivers/scsi/sata_sil.c
View file @
cc0c2170
...
@@ -44,6 +44,11 @@ enum {
...
@@ -44,6 +44,11 @@ enum {
SIL_SYSCFG
=
0x48
,
SIL_SYSCFG
=
0x48
,
SIL_MASK_IDE0_INT
=
(
1
<<
22
),
SIL_MASK_IDE0_INT
=
(
1
<<
22
),
SIL_MASK_IDE1_INT
=
(
1
<<
23
),
SIL_MASK_IDE1_INT
=
(
1
<<
23
),
SIL_MASK_IDE2_INT
=
(
1
<<
24
),
SIL_MASK_IDE3_INT
=
(
1
<<
25
),
SIL_MASK_2PORT
=
SIL_MASK_IDE0_INT
|
SIL_MASK_IDE1_INT
,
SIL_MASK_4PORT
=
SIL_MASK_2PORT
|
SIL_MASK_IDE2_INT
|
SIL_MASK_IDE3_INT
,
SIL_IDE0_TF
=
0x80
,
SIL_IDE0_TF
=
0x80
,
SIL_IDE0_CTL
=
0x8A
,
SIL_IDE0_CTL
=
0x8A
,
...
@@ -59,6 +64,7 @@ enum {
...
@@ -59,6 +64,7 @@ enum {
SIL_IDE2_CTL
=
0x28A
,
SIL_IDE2_CTL
=
0x28A
,
SIL_IDE2_BMDMA
=
0x200
,
SIL_IDE2_BMDMA
=
0x200
,
SIL_IDE2_SCR
=
0x300
,
SIL_IDE2_SCR
=
0x300
,
SIL_INTR_STEERING
=
(
1
<<
1
),
SIL_IDE3_TF
=
0x2C0
,
SIL_IDE3_TF
=
0x2C0
,
SIL_IDE3_CTL
=
0x2CA
,
SIL_IDE3_CTL
=
0x2CA
,
...
@@ -304,7 +310,7 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
...
@@ -304,7 +310,7 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
unsigned
long
base
;
unsigned
long
base
;
void
*
mmio_base
;
void
*
mmio_base
;
int
rc
;
int
rc
;
u32
tmp
;
u32
tmp
,
irq_mask
;
if
(
!
printed_version
++
)
if
(
!
printed_version
++
)
printk
(
KERN_DEBUG
DRV_NAME
" version "
DRV_VERSION
"
\n
"
);
printk
(
KERN_DEBUG
DRV_NAME
" version "
DRV_VERSION
"
\n
"
);
...
@@ -365,14 +371,6 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
...
@@ -365,14 +371,6 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
probe_ent
->
port
[
1
].
scr_addr
=
base
+
SIL_IDE1_SCR
;
probe_ent
->
port
[
1
].
scr_addr
=
base
+
SIL_IDE1_SCR
;
ata_std_ports
(
&
probe_ent
->
port
[
1
]);
ata_std_ports
(
&
probe_ent
->
port
[
1
]);
/* make sure IDE0/1 interrupts are not masked */
tmp
=
readl
(
mmio_base
+
SIL_SYSCFG
);
if
(
tmp
&
(
SIL_MASK_IDE0_INT
|
SIL_MASK_IDE1_INT
))
{
tmp
&=
~
(
SIL_MASK_IDE0_INT
|
SIL_MASK_IDE1_INT
);
writel
(
tmp
,
mmio_base
+
SIL_SYSCFG
);
readl
(
mmio_base
+
SIL_SYSCFG
);
/* flush */
}
if
(
ent
->
driver_data
==
sil_3114
)
{
if
(
ent
->
driver_data
==
sil_3114
)
{
probe_ent
->
port
[
2
].
cmd_addr
=
base
+
SIL_IDE2_TF
;
probe_ent
->
port
[
2
].
cmd_addr
=
base
+
SIL_IDE2_TF
;
probe_ent
->
port
[
2
].
ctl_addr
=
base
+
SIL_IDE2_CTL
;
probe_ent
->
port
[
2
].
ctl_addr
=
base
+
SIL_IDE2_CTL
;
...
@@ -385,6 +383,25 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
...
@@ -385,6 +383,25 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
probe_ent
->
port
[
3
].
bmdma_addr
=
base
+
SIL_IDE3_BMDMA
;
probe_ent
->
port
[
3
].
bmdma_addr
=
base
+
SIL_IDE3_BMDMA
;
probe_ent
->
port
[
3
].
scr_addr
=
base
+
SIL_IDE3_SCR
;
probe_ent
->
port
[
3
].
scr_addr
=
base
+
SIL_IDE3_SCR
;
ata_std_ports
(
&
probe_ent
->
port
[
3
]);
ata_std_ports
(
&
probe_ent
->
port
[
3
]);
irq_mask
=
SIL_MASK_4PORT
;
/* flip the magic "make 4 ports work" bit */
tmp
=
readl
(
mmio_base
+
SIL_IDE2_BMDMA
);
if
((
tmp
&
SIL_INTR_STEERING
)
==
0
)
writel
(
tmp
|
SIL_INTR_STEERING
,
mmio_base
+
SIL_IDE2_BMDMA
);
}
else
{
irq_mask
=
SIL_MASK_2PORT
;
}
/* make sure IDE0/1/2/3 interrupts are not masked */
tmp
=
readl
(
mmio_base
+
SIL_SYSCFG
);
if
(
tmp
&
irq_mask
)
{
tmp
&=
~
irq_mask
;
writel
(
tmp
,
mmio_base
+
SIL_SYSCFG
);
readl
(
mmio_base
+
SIL_SYSCFG
);
/* flush */
}
}
pci_set_master
(
pdev
);
pci_set_master
(
pdev
);
...
...
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