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
3444f5ec
Commit
3444f5ec
authored
Apr 20, 2009
by
Paul Mundt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sh: pci: Tidy up the dreamcast PCI support.
Signed-off-by:
Paul Mundt
<
lethal@linux-sh.org
>
parent
0db38cea
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
119 additions
and
89 deletions
+119
-89
arch/sh/drivers/pci/Makefile
arch/sh/drivers/pci/Makefile
+2
-1
arch/sh/drivers/pci/ops-dreamcast.c
arch/sh/drivers/pci/ops-dreamcast.c
+10
-88
arch/sh/drivers/pci/pci-dreamcast.c
arch/sh/drivers/pci/pci-dreamcast.c
+105
-0
arch/sh/include/mach-dreamcast/mach/pci.h
arch/sh/include/mach-dreamcast/mach/pci.h
+2
-0
No files found.
arch/sh/drivers/pci/Makefile
View file @
3444f5ec
...
...
@@ -12,7 +12,8 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7780) += pci-sh7780.o ops-sh4.o
obj-$(CONFIG_CPU_SUBTYPE_SH7785)
+=
pci-sh7780.o ops-sh4.o
obj-$(CONFIG_CPU_SH5)
+=
pci-sh5.o ops-sh5.o
obj-$(CONFIG_SH_DREAMCAST)
+=
ops-dreamcast.o fixups-dreamcast.o
obj-$(CONFIG_SH_DREAMCAST)
+=
ops-dreamcast.o fixups-dreamcast.o
\
pci-dreamcast.o
obj-$(CONFIG_SH_SECUREEDGE5410)
+=
ops-snapgear.o
obj-$(CONFIG_SH_RTS7751R2D)
+=
ops-rts7751r2d.o fixups-rts7751r2d.o
obj-$(CONFIG_SH_SH03)
+=
ops-sh03.o fixups-sh03.o
...
...
arch/sh/drivers/pci/ops-dreamcast.c
View file @
3444f5ec
/*
* arch/sh/drivers/pci/ops-dreamcast.c
*
* PCI operations for the Sega Dreamcast
*
* Copyright (C) 2001, 2002 M. R. Brown
* Copyright (C) 2002, 2003 Paul Mundt
*
* This file originally bore the message (with enclosed-$):
* Id: pci.c,v 1.3 2003/05/04 19:29:46 lethal Exp
* Dreamcast PCI: Supports SEGA Broadband Adaptor only.
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
...
...
@@ -23,25 +17,10 @@
#include <linux/irq.h>
#include <linux/pci.h>
#include <linux/module.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <linux/io.h>
#include <linux/irq.h>
#include <mach/pci.h>
static
struct
resource
gapspci_io_resource
=
{
.
name
=
"GAPSPCI IO"
,
.
start
=
GAPSPCI_BBA_CONFIG
,
.
end
=
GAPSPCI_BBA_CONFIG
+
GAPSPCI_BBA_CONFIG_SIZE
-
1
,
.
flags
=
IORESOURCE_IO
,
};
static
struct
resource
gapspci_mem_resource
=
{
.
name
=
"GAPSPCI mem"
,
.
start
=
GAPSPCI_DMA_BASE
,
.
end
=
GAPSPCI_DMA_BASE
+
GAPSPCI_DMA_SIZE
-
1
,
.
flags
=
IORESOURCE_MEM
,
};
/*
* The !gapspci_config_access case really shouldn't happen, ever, unless
* someone implicitly messes around with the last devfn value.. otherwise we
...
...
@@ -76,10 +55,10 @@ static int gapspci_read(struct pci_bus *bus, unsigned int devfn, int where, int
return
PCIBIOS_DEVICE_NOT_FOUND
;
switch
(
size
)
{
case
1
:
*
val
=
inb
(
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
2
:
*
val
=
inw
(
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
4
:
*
val
=
inl
(
GAPSPCI_BBA_CONFIG
+
where
);
break
;
}
case
1
:
*
val
=
inb
(
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
2
:
*
val
=
inw
(
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
4
:
*
val
=
inl
(
GAPSPCI_BBA_CONFIG
+
where
);
break
;
}
return
PCIBIOS_SUCCESSFUL
;
}
...
...
@@ -90,72 +69,15 @@ static int gapspci_write(struct pci_bus *bus, unsigned int devfn, int where, int
return
PCIBIOS_DEVICE_NOT_FOUND
;
switch
(
size
)
{
case
1
:
outb
((
u8
)
val
,
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
2
:
outw
((
u16
)
val
,
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
4
:
outl
((
u32
)
val
,
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
1
:
outb
((
u8
)
val
,
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
2
:
outw
((
u16
)
val
,
GAPSPCI_BBA_CONFIG
+
where
);
break
;
case
4
:
outl
((
u32
)
val
,
GAPSPCI_BBA_CONFIG
+
where
);
break
;
}
return
PCIBIOS_SUCCESSFUL
;
}
st
atic
st
ruct
pci_ops
gapspci_pci_ops
=
{
struct
pci_ops
gapspci_pci_ops
=
{
.
read
=
gapspci_read
,
.
write
=
gapspci_write
,
};
/*
* gapspci init
*/
static
int
__init
gapspci_init
(
struct
pci_channel
*
chan
)
{
char
idbuf
[
16
];
int
i
;
/*
* FIXME: All of this wants documenting to some degree,
* even some basic register definitions would be nice.
*
* I haven't seen anything this ugly since.. maple.
*/
for
(
i
=
0
;
i
<
16
;
i
++
)
idbuf
[
i
]
=
inb
(
GAPSPCI_REGS
+
i
);
if
(
strncmp
(
idbuf
,
"GAPSPCI_BRIDGE_2"
,
16
))
return
-
ENODEV
;
outl
(
0x5a14a501
,
GAPSPCI_REGS
+
0x18
);
for
(
i
=
0
;
i
<
1000000
;
i
++
)
;
if
(
inl
(
GAPSPCI_REGS
+
0x18
)
!=
1
)
return
-
EINVAL
;
outl
(
0x01000000
,
GAPSPCI_REGS
+
0x20
);
outl
(
0x01000000
,
GAPSPCI_REGS
+
0x24
);
outl
(
GAPSPCI_DMA_BASE
,
GAPSPCI_REGS
+
0x28
);
outl
(
GAPSPCI_DMA_BASE
+
GAPSPCI_DMA_SIZE
,
GAPSPCI_REGS
+
0x2c
);
outl
(
1
,
GAPSPCI_REGS
+
0x14
);
outl
(
1
,
GAPSPCI_REGS
+
0x34
);
/* Setting Broadband Adapter */
outw
(
0xf900
,
GAPSPCI_BBA_CONFIG
+
0x06
);
outl
(
0x00000000
,
GAPSPCI_BBA_CONFIG
+
0x30
);
outb
(
0x00
,
GAPSPCI_BBA_CONFIG
+
0x3c
);
outb
(
0xf0
,
GAPSPCI_BBA_CONFIG
+
0x0d
);
outw
(
0x0006
,
GAPSPCI_BBA_CONFIG
+
0x04
);
outl
(
0x00002001
,
GAPSPCI_BBA_CONFIG
+
0x10
);
outl
(
0x01000000
,
GAPSPCI_BBA_CONFIG
+
0x14
);
return
0
;
}
struct
pci_channel
board_pci_channels
[]
=
{
{
gapspci_init
,
&
gapspci_pci_ops
,
&
gapspci_io_resource
,
&
gapspci_mem_resource
,
0
,
1
},
{
0
,
}
};
arch/sh/drivers/pci/pci-dreamcast.c
0 → 100644
View file @
3444f5ec
/*
* PCI support for the Sega Dreamcast
*
* Copyright (C) 2001, 2002 M. R. Brown
* Copyright (C) 2002, 2003 Paul Mundt
*
* This file originally bore the message (with enclosed-$):
* Id: pci.c,v 1.3 2003/05/04 19:29:46 lethal Exp
* Dreamcast PCI: Supports SEGA Broadband Adaptor only.
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*/
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/param.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/pci.h>
#include <linux/module.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <mach/pci.h>
static
struct
resource
gapspci_io_resource
=
{
.
name
=
"GAPSPCI IO"
,
.
start
=
GAPSPCI_BBA_CONFIG
,
.
end
=
GAPSPCI_BBA_CONFIG
+
GAPSPCI_BBA_CONFIG_SIZE
-
1
,
.
flags
=
IORESOURCE_IO
,
};
static
struct
resource
gapspci_mem_resource
=
{
.
name
=
"GAPSPCI mem"
,
.
start
=
GAPSPCI_DMA_BASE
,
.
end
=
GAPSPCI_DMA_BASE
+
GAPSPCI_DMA_SIZE
-
1
,
.
flags
=
IORESOURCE_MEM
,
};
/*
* gapspci init
*/
static
int
__init
gapspci_init
(
struct
pci_channel
*
chan
)
{
char
idbuf
[
16
];
int
i
;
/*
* FIXME: All of this wants documenting to some degree,
* even some basic register definitions would be nice.
*
* I haven't seen anything this ugly since.. maple.
*/
for
(
i
=
0
;
i
<
16
;
i
++
)
idbuf
[
i
]
=
inb
(
GAPSPCI_REGS
+
i
);
if
(
strncmp
(
idbuf
,
"GAPSPCI_BRIDGE_2"
,
16
))
return
-
ENODEV
;
outl
(
0x5a14a501
,
GAPSPCI_REGS
+
0x18
);
for
(
i
=
0
;
i
<
1000000
;
i
++
)
cpu_relax
();
if
(
inl
(
GAPSPCI_REGS
+
0x18
)
!=
1
)
return
-
EINVAL
;
outl
(
0x01000000
,
GAPSPCI_REGS
+
0x20
);
outl
(
0x01000000
,
GAPSPCI_REGS
+
0x24
);
outl
(
GAPSPCI_DMA_BASE
,
GAPSPCI_REGS
+
0x28
);
outl
(
GAPSPCI_DMA_BASE
+
GAPSPCI_DMA_SIZE
,
GAPSPCI_REGS
+
0x2c
);
outl
(
1
,
GAPSPCI_REGS
+
0x14
);
outl
(
1
,
GAPSPCI_REGS
+
0x34
);
/* Setting Broadband Adapter */
outw
(
0xf900
,
GAPSPCI_BBA_CONFIG
+
0x06
);
outl
(
0x00000000
,
GAPSPCI_BBA_CONFIG
+
0x30
);
outb
(
0x00
,
GAPSPCI_BBA_CONFIG
+
0x3c
);
outb
(
0xf0
,
GAPSPCI_BBA_CONFIG
+
0x0d
);
outw
(
0x0006
,
GAPSPCI_BBA_CONFIG
+
0x04
);
outl
(
0x00002001
,
GAPSPCI_BBA_CONFIG
+
0x10
);
outl
(
0x01000000
,
GAPSPCI_BBA_CONFIG
+
0x14
);
return
0
;
}
struct
pci_channel
board_pci_channels
[]
=
{
{
.
init
=
gapspci_init
,
.
pci_ops
=
&
gapspci_pci_ops
,
.
io_resource
=
&
gapspci_io_resource
,
.
mem_resource
=
&
gapspci_mem_resource
,
.
first_devfn
=
0
,
.
last_devfn
=
1
,
},
{
.
init
=
NULL
,
}
};
arch/sh/include/mach-dreamcast/mach/pci.h
View file @
3444f5ec
...
...
@@ -21,5 +21,7 @@
#define GAPSPCI_IRQ HW_EVENT_EXTERNAL
extern
struct
pci_ops
gapspci_pci_ops
;
#endif
/* __ASM_SH_DREAMCAST_PCI_H */
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