Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
aa0980b8
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
aa0980b8
编写于
2月 01, 2005
作者:
M
Maciej W. Rozycki
提交者:
Ralf Baechle
10月 29, 2005
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes for system controllers for Atlas/Malta core cards.
Signed-off-by:
N
Ralf Baechle
<
ralf@linux-mips.org
>
上级
bec0204d
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
297 addition
and
218 deletion
+297
-218
arch/mips/mips-boards/generic/init.c
arch/mips/mips-boards/generic/init.c
+40
-21
arch/mips/mips-boards/generic/pci.c
arch/mips/mips-boards/generic/pci.c
+123
-35
arch/mips/pci/ops-bonito64.c
arch/mips/pci/ops-bonito64.c
+4
-10
arch/mips/pci/ops-gt64120.c
arch/mips/pci/ops-gt64120.c
+4
-6
arch/mips/pci/ops-msc.c
arch/mips/pci/ops-msc.c
+5
-26
include/asm-mips/mips-boards/msc01_pci.h
include/asm-mips/mips-boards/msc01_pci.h
+121
-120
未找到文件。
arch/mips/mips-boards/generic/init.c
浏览文件 @
aa0980b8
/*
* Carsten Langgaard, carstenl@mips.com
* Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.
* Copyright (C) 1999, 2000, 2004, 2005 MIPS Technologies, Inc.
* All rights reserved.
* Authors: Carsten Langgaard <carstenl@mips.com>
* Maciej W. Rozycki <macro@mips.com>
*
* This program is free software; you can distribute it and/or modify it
* under the terms of the GNU General Public License (Version 2) as
...
...
@@ -22,18 +24,17 @@
#include <linux/string.h>
#include <linux/kernel.h>
#include <asm/io.h>
#include <asm/bootinfo.h>
#include <asm/gt64120.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/mips-boards/prom.h>
#include <asm/mips-boards/generic.h>
#ifdef CONFIG_MIPS_GT64120
#include <asm/gt64120.h>
#endif
#include <asm/mips-boards/msc01_pci.h>
#include <asm/mips-boards/bonito64.h>
#ifdef CONFIG_MIPS_MALTA
#include <asm/mips-boards/msc01_pci.h>
#include <asm/mips-boards/malta.h>
#endif
#ifdef CONFIG_KGDB
extern
int
rs_kgdb_hook
(
int
,
int
);
...
...
@@ -225,6 +226,8 @@ void __init kgdb_config (void)
void
__init
prom_init
(
void
)
{
u32
start
,
map
,
mask
,
data
;
prom_argc
=
fw_arg0
;
_prom_argv
=
(
int
*
)
fw_arg1
;
_prom_envp
=
(
int
*
)
fw_arg2
;
...
...
@@ -266,12 +269,15 @@ void __init prom_init(void)
#else
GT_WRITE
(
GT_PCI0_CMD_OFS
,
0
);
#endif
/* Fix up PCI I/O mapping if necessary (for Atlas). */
start
=
GT_READ
(
GT_PCI0IOLD_OFS
);
map
=
GT_READ
(
GT_PCI0IOREMAP_OFS
);
if
((
start
&
map
)
!=
0
)
{
map
&=
~
start
;
GT_WRITE
(
GT_PCI0IOREMAP_OFS
,
map
);
}
#ifdef CONFIG_MIPS_MALTA
set_io_port_base
(
MALTA_GT_PORT_BASE
);
#else
set_io_port_base
((
unsigned
long
)
ioremap
(
0
,
0x20000000
));
#endif
break
;
case
MIPS_REVISION_CORID_CORE_EMUL_BON
:
...
...
@@ -300,11 +306,7 @@ void __init prom_init(void)
BONITO_BONGENCFG_BYTESWAP
;
#endif
#ifdef CONFIG_MIPS_MALTA
set_io_port_base
(
MALTA_BONITO_PORT_BASE
);
#else
set_io_port_base
((
unsigned
long
)
ioremap
(
0
,
0x20000000
));
#endif
break
;
case
MIPS_REVISION_CORID_CORE_MSC
:
...
...
@@ -312,6 +314,12 @@ void __init prom_init(void)
case
MIPS_REVISION_CORID_CORE_EMUL_MSC
:
_pcictrl_msc
=
(
unsigned
long
)
ioremap
(
MIPS_MSC01_PCI_REG_BASE
,
0x2000
);
mb
();
MSC_READ
(
MSC01_PCI_CFG
,
data
);
MSC_WRITE
(
MSC01_PCI_CFG
,
data
&
~
MSC01_PCI_CFG_EN_BIT
);
wmb
();
/* Fix up lane swapping. */
#ifdef CONFIG_CPU_LITTLE_ENDIAN
MSC_WRITE
(
MSC01_PCI_SWAP
,
MSC01_PCI_SWAP_NOSWAP
);
#else
...
...
@@ -320,12 +328,23 @@ void __init prom_init(void)
MSC01_PCI_SWAP_BYTESWAP
<<
MSC01_PCI_SWAP_MEM_SHF
|
MSC01_PCI_SWAP_BYTESWAP
<<
MSC01_PCI_SWAP_BAR0_SHF
);
#endif
/* Fix up target memory mapping. */
MSC_READ
(
MSC01_PCI_BAR0
,
mask
);
MSC_WRITE
(
MSC01_PCI_P2SCMSKL
,
mask
&
MSC01_PCI_BAR0_SIZE_MSK
);
/* Don't handle target retries indefinitely. */
if
((
data
&
MSC01_PCI_CFG_MAXRTRY_MSK
)
==
MSC01_PCI_CFG_MAXRTRY_MSK
)
data
=
(
data
&
~
(
MSC01_PCI_CFG_MAXRTRY_MSK
<<
MSC01_PCI_CFG_MAXRTRY_SHF
))
|
((
MSC01_PCI_CFG_MAXRTRY_MSK
-
1
)
<<
MSC01_PCI_CFG_MAXRTRY_SHF
);
wmb
();
MSC_WRITE
(
MSC01_PCI_CFG
,
data
);
mb
();
#ifdef CONFIG_MIPS_MALTA
set_io_port_base
(
MALTA_MSC_PORT_BASE
);
#else
set_io_port_base
((
unsigned
long
)
ioremap
(
0
,
0x20000000
));
#endif
break
;
default:
...
...
arch/mips/mips-boards/generic/pci.c
浏览文件 @
aa0980b8
/*
* Carsten Langgaard, carstenl@mips.com
* Copyright (C) 1999, 2000 MIPS Technologies, Inc. All rights reserved.
* Copyright (C) 1999, 2000, 2004, 2005 MIPS Technologies, Inc.
* All rights reserved.
* Authors: Carsten Langgaard <carstenl@mips.com>
* Maciej W. Rozycki <macro@mips.com>
*
* Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org)
*
...
...
@@ -19,65 +21,46 @@
*
* MIPS boards specific PCI support.
*/
#include <linux/config.h>
#include <linux/types.h>
#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/mips-boards/generic.h>
#include <asm/gt64120.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/bonito64.h>
#include <asm/mips-boards/msc01_pci.h>
#ifdef CONFIG_MIPS_MALTA
#include <asm/mips-boards/malta.h>
#endif
static
struct
resource
bonito64_mem_resource
=
{
.
name
=
"Bonito PCI MEM"
,
.
start
=
0x10000000UL
,
.
end
=
0x1bffffffUL
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
resource
bonito64_io_resource
=
{
.
name
=
"Bonito
IO MEM
"
,
.
start
=
0x0000
2000UL
,
/* avoid conflicts with YAMON allocated I/O addresses */
.
name
=
"Bonito
PCI I/O
"
,
.
start
=
0x0000
0000UL
,
.
end
=
0x000fffffUL
,
.
flags
=
IORESOURCE_IO
,
};
static
struct
resource
gt64120_mem_resource
=
{
.
name
=
"GT64120 PCI MEM"
,
.
start
=
0x10000000UL
,
.
end
=
0x1bdfffffUL
,
.
name
=
"GT-64120 PCI MEM"
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
resource
gt64120_io_resource
=
{
.
name
=
"GT64120 IO MEM"
,
#ifdef CONFIG_MIPS_ATLAS
.
start
=
0x18000000UL
,
.
end
=
0x181fffffUL
,
#endif
#ifdef CONFIG_MIPS_MALTA
.
start
=
0x00002000UL
,
.
end
=
0x001fffffUL
,
#endif
.
name
=
"GT-64120 PCI I/O"
,
.
flags
=
IORESOURCE_IO
,
};
static
struct
resource
msc_mem_resource
=
{
.
name
=
"MSC PCI MEM"
,
.
start
=
0x10000000UL
,
.
end
=
0x1fffffffUL
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
resource
msc_io_resource
=
{
.
name
=
"MSC IO MEM"
,
.
start
=
0x00002000UL
,
.
end
=
0x007fffffUL
,
.
name
=
"MSC PCI I/O"
,
.
flags
=
IORESOURCE_IO
,
};
...
...
@@ -89,7 +72,6 @@ static struct pci_controller bonito64_controller = {
.
pci_ops
=
&
bonito64_pci_ops
,
.
io_resource
=
&
bonito64_io_resource
,
.
mem_resource
=
&
bonito64_mem_resource
,
.
mem_offset
=
0x10000000UL
,
.
io_offset
=
0x00000000UL
,
};
...
...
@@ -97,21 +79,18 @@ static struct pci_controller gt64120_controller = {
.
pci_ops
=
&
gt64120_pci_ops
,
.
io_resource
=
&
gt64120_io_resource
,
.
mem_resource
=
&
gt64120_mem_resource
,
.
mem_offset
=
0x00000000UL
,
.
io_offset
=
0x00000000UL
,
};
static
struct
pci_controller
msc_controller
=
{
static
struct
pci_controller
msc_controller
=
{
.
pci_ops
=
&
msc_pci_ops
,
.
io_resource
=
&
msc_io_resource
,
.
mem_resource
=
&
msc_mem_resource
,
.
mem_offset
=
0x10000000UL
,
.
io_offset
=
0x00000000UL
,
};
void
__init
mips_pcibios_init
(
void
)
{
struct
pci_controller
*
controller
;
unsigned
long
start
,
end
,
map
,
start1
,
end1
,
map1
,
map2
,
map3
,
mask
;
switch
(
mips_revision_corid
)
{
case
MIPS_REVISION_CORID_QED_RM5261
:
...
...
@@ -130,29 +109,138 @@ void __init mips_pcibios_init(void)
(
0
<<
GT_PCI0_CFGADDR_DEVNUM_SHF
)
|
/* GT64120 dev */
(
0
<<
GT_PCI0_CFGADDR_FUNCTNUM_SHF
)
|
/* Function 0*/
((
0x20
/
4
)
<<
GT_PCI0_CFGADDR_REGNUM_SHF
)
|
/* BAR 4*/
GT_PCI0_CFGADDR_CONFIGEN_BIT
);
GT_PCI0_CFGADDR_CONFIGEN_BIT
);
/* Perform the write */
GT_WRITE
(
GT_PCI0_CFGDATA_OFS
,
CPHYSADDR
(
MIPS_GT_BASE
));
/* Set up resource ranges from the controller's registers. */
start
=
GT_READ
(
GT_PCI0M0LD_OFS
);
end
=
GT_READ
(
GT_PCI0M0HD_OFS
);
map
=
GT_READ
(
GT_PCI0M0REMAP_OFS
);
end
=
(
end
&
GT_PCI_HD_MSK
)
|
(
start
&
~
GT_PCI_HD_MSK
);
start1
=
GT_READ
(
GT_PCI0M1LD_OFS
);
end1
=
GT_READ
(
GT_PCI0M1HD_OFS
);
map1
=
GT_READ
(
GT_PCI0M1REMAP_OFS
);
end1
=
(
end1
&
GT_PCI_HD_MSK
)
|
(
start1
&
~
GT_PCI_HD_MSK
);
/* Cannot support multiple windows, use the wider. */
if
(
end1
-
start1
>
end
-
start
)
{
start
=
start1
;
end
=
end1
;
map
=
map1
;
}
mask
=
~
(
start
^
end
);
/* We don't support remapping with a discontiguous mask. */
BUG_ON
((
start
&
GT_PCI_HD_MSK
)
!=
(
map
&
GT_PCI_HD_MSK
)
&&
mask
!=
~
((
mask
&
-
mask
)
-
1
));
gt64120_mem_resource
.
start
=
start
;
gt64120_mem_resource
.
end
=
end
;
gt64120_controller
.
mem_offset
=
(
start
&
mask
)
-
(
map
&
mask
);
/* Addresses are 36-bit, so do shifts in the destinations. */
gt64120_mem_resource
.
start
<<=
GT_PCI_DCRM_SHF
;
gt64120_mem_resource
.
end
<<=
GT_PCI_DCRM_SHF
;
gt64120_mem_resource
.
end
|=
(
1
<<
GT_PCI_DCRM_SHF
)
-
1
;
gt64120_controller
.
mem_offset
<<=
GT_PCI_DCRM_SHF
;
start
=
GT_READ
(
GT_PCI0IOLD_OFS
);
end
=
GT_READ
(
GT_PCI0IOHD_OFS
);
map
=
GT_READ
(
GT_PCI0IOREMAP_OFS
);
end
=
(
end
&
GT_PCI_HD_MSK
)
|
(
start
&
~
GT_PCI_HD_MSK
);
mask
=
~
(
start
^
end
);
/* We don't support remapping with a discontiguous mask. */
BUG_ON
((
start
&
GT_PCI_HD_MSK
)
!=
(
map
&
GT_PCI_HD_MSK
)
&&
mask
!=
~
((
mask
&
-
mask
)
-
1
));
gt64120_io_resource
.
start
=
map
&
mask
;
gt64120_io_resource
.
end
=
(
map
&
mask
)
|
~
mask
;
gt64120_controller
.
io_offset
=
0
;
/* Addresses are 36-bit, so do shifts in the destinations. */
gt64120_io_resource
.
start
<<=
GT_PCI_DCRM_SHF
;
gt64120_io_resource
.
end
<<=
GT_PCI_DCRM_SHF
;
gt64120_io_resource
.
end
|=
(
1
<<
GT_PCI_DCRM_SHF
)
-
1
;
controller
=
&
gt64120_controller
;
break
;
case
MIPS_REVISION_CORID_BONITO64
:
case
MIPS_REVISION_CORID_CORE_20K
:
case
MIPS_REVISION_CORID_CORE_EMUL_BON
:
/* Set up resource ranges from the controller's registers. */
map
=
BONITO_PCIMAP
;
map1
=
(
BONITO_PCIMAP
&
BONITO_PCIMAP_PCIMAP_LO0
)
>>
BONITO_PCIMAP_PCIMAP_LO0_SHIFT
;
map2
=
(
BONITO_PCIMAP
&
BONITO_PCIMAP_PCIMAP_LO1
)
>>
BONITO_PCIMAP_PCIMAP_LO1_SHIFT
;
map3
=
(
BONITO_PCIMAP
&
BONITO_PCIMAP_PCIMAP_LO2
)
>>
BONITO_PCIMAP_PCIMAP_LO2_SHIFT
;
/* Combine as many adjacent windows as possible. */
map
=
map1
;
start
=
BONITO_PCILO0_BASE
;
end
=
1
;
if
(
map3
==
map2
+
1
)
{
map
=
map2
;
start
=
BONITO_PCILO1_BASE
;
end
++
;
}
if
(
map2
==
map1
+
1
)
{
map
=
map1
;
start
=
BONITO_PCILO0_BASE
;
end
++
;
}
bonito64_mem_resource
.
start
=
start
;
bonito64_mem_resource
.
end
=
start
+
BONITO_PCIMAP_WINBASE
(
end
)
-
1
;
bonito64_controller
.
mem_offset
=
start
-
BONITO_PCIMAP_WINBASE
(
map
);
controller
=
&
bonito64_controller
;
break
;
case
MIPS_REVISION_CORID_CORE_MSC
:
case
MIPS_REVISION_CORID_CORE_FPGA2
:
case
MIPS_REVISION_CORID_CORE_EMUL_MSC
:
/* Set up resource ranges from the controller's registers. */
MSC_READ
(
MSC01_PCI_SC2PMBASL
,
start
);
MSC_READ
(
MSC01_PCI_SC2PMMSKL
,
mask
);
MSC_READ
(
MSC01_PCI_SC2PMMAPL
,
map
);
msc_mem_resource
.
start
=
start
&
mask
;
msc_mem_resource
.
end
=
(
start
&
mask
)
|
~
mask
;
msc_controller
.
mem_offset
=
(
start
&
mask
)
-
(
map
&
mask
);
MSC_READ
(
MSC01_PCI_SC2PIOBASL
,
start
);
MSC_READ
(
MSC01_PCI_SC2PIOMSKL
,
mask
);
MSC_READ
(
MSC01_PCI_SC2PIOMAPL
,
map
);
msc_io_resource
.
start
=
map
&
mask
;
msc_io_resource
.
end
=
(
map
&
mask
)
|
~
mask
;
msc_controller
.
io_offset
=
0
;
ioport_resource
.
end
=
~
mask
;
/* If ranges overlap I/O takes precedence. */
start
=
start
&
mask
;
end
=
start
|
~
mask
;
if
((
start
>=
msc_mem_resource
.
start
&&
start
<=
msc_mem_resource
.
end
)
||
(
end
>=
msc_mem_resource
.
start
&&
end
<=
msc_mem_resource
.
end
))
{
/* Use the larger space. */
start
=
max
(
start
,
msc_mem_resource
.
start
);
end
=
min
(
end
,
msc_mem_resource
.
end
);
if
(
start
-
msc_mem_resource
.
start
>=
msc_mem_resource
.
end
-
end
)
msc_mem_resource
.
end
=
start
-
1
;
else
msc_mem_resource
.
start
=
end
+
1
;
}
controller
=
&
msc_controller
;
break
;
default:
return
;
}
if
(
controller
->
io_resource
->
start
<
0x00001000UL
)
/* FIXME */
controller
->
io_resource
->
start
=
0x00001000UL
;
iomem_resource
.
end
&=
0xfffffffffULL
;
/* 64 GB */
ioport_resource
.
end
=
controller
->
io_resource
->
end
;
register_pci_controller
(
controller
);
...
...
arch/mips/pci/ops-bonito64.c
浏览文件 @
aa0980b8
/*
* Carsten Langgaard, carstenl@mips.com
* Copyright (C) 1999, 2000 MIPS Technologies, Inc. All rights reserved.
* Copyright (C) 1999, 2000, 2004 MIPS Technologies, Inc.
* All rights reserved.
* Authors: Carsten Langgaard <carstenl@mips.com>
* Maciej W. Rozycki <macro@mips.com>
*
* This program is free software; you can distribute it and/or modify it
* under the terms of the GNU General Public License (Version 2) as
...
...
@@ -17,7 +19,6 @@
*
* MIPS boards specific PCI support.
*/
#include <linux/config.h>
#include <linux/types.h>
#include <linux/pci.h>
#include <linux/kernel.h>
...
...
@@ -57,13 +58,6 @@ static int bonito64_pcibios_config_access(unsigned char access_type,
return
-
1
;
}
#ifdef CONFIG_MIPS_BOARDS_GEN
if
((
busnum
==
0
)
&&
(
PCI_SLOT
(
devfn
)
==
17
))
{
/* MIPS Core boards have Bonito connected as device 17 */
return
-
1
;
}
#endif
/* Clear cause register bits */
BONITO_PCICMD
|=
(
BONITO_PCICMD_MABORT_CLR
|
BONITO_PCICMD_MTABORT_CLR
);
...
...
arch/mips/pci/ops-gt64120.c
浏览文件 @
aa0980b8
/*
* Carsten Langgaard, carstenl@mips.com
* Copyright (C) 1999, 2000 MIPS Technologies, Inc. All rights reserved.
* Copyright (C) 1999, 2000, 2004 MIPS Technologies, Inc.
* All rights reserved.
* Authors: Carsten Langgaard <carstenl@mips.com>
* Maciej W. Rozycki <macro@mips.com>
*
* This program is free software; you can distribute it and/or modify it
* under the terms of the GNU General Public License (Version 2) as
...
...
@@ -43,10 +45,6 @@ static int gt64120_pcibios_config_access(unsigned char access_type,
unsigned
char
busnum
=
bus
->
number
;
u32
intr
;
if
((
busnum
==
0
)
&&
(
PCI_SLOT
(
devfn
)
==
0
))
/* Galileo itself is devfn 0, don't move it around */
return
-
1
;
if
((
busnum
==
0
)
&&
(
devfn
>=
PCI_DEVFN
(
31
,
0
)))
return
-
1
;
/* Because of a bug in the galileo (for slot 31). */
...
...
arch/mips/pci/ops-msc.c
浏览文件 @
aa0980b8
...
...
@@ -21,7 +21,6 @@
* MIPS boards specific PCI support.
*
*/
#include <linux/config.h>
#include <linux/types.h>
#include <linux/pci.h>
#include <linux/kernel.h>
...
...
@@ -49,34 +48,17 @@ static int msc_pcibios_config_access(unsigned char access_type,
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
u32
*
data
)
{
unsigned
char
busnum
=
bus
->
number
;
unsigned
char
type
;
u32
intr
;
#ifdef CONFIG_MIPS_BOARDS_GEN
if
((
busnum
==
0
)
&&
(
PCI_SLOT
(
devfn
)
==
17
))
{
/* MIPS Core boards have SOCit connected as device 17 */
return
-
1
;
}
#endif
/* Clear status register bits. */
MSC_WRITE
(
MSC01_PCI_INTSTAT
,
(
MSC01_PCI_INTCFG_MA_BIT
|
MSC01_PCI_INTCFG_TA_BIT
));
/* Setup address */
if
(
busnum
==
0
)
type
=
0
;
/* Type 0 */
else
type
=
1
;
/* Type 1 */
MSC_WRITE
(
MSC01_PCI_CFGADDR
,
((
busnum
<<
MSC01_PCI_CFGADDR_BNUM_SHF
)
|
(
PCI_SLOT
(
devfn
)
<<
MSC01_PCI_CFGADDR_DNUM_SHF
)
|
(
PCI_FUNC
(
devfn
)
<<
MSC01_PCI_CFGADDR_FNUM_SHF
)
|
((
where
/
4
)
<<
MSC01_PCI_CFGADDR_RNUM_SHF
)
|
(
type
)));
(
PCI_SLOT
(
devfn
)
<<
MSC01_PCI_CFGADDR_DNUM_SHF
)
|
(
PCI_FUNC
(
devfn
)
<<
MSC01_PCI_CFGADDR_FNUM_SHF
)
|
((
where
/
4
)
<<
MSC01_PCI_CFGADDR_RNUM_SHF
)));
/* Perform access */
if
(
access_type
==
PCI_ACCESS_WRITE
)
...
...
@@ -86,15 +68,12 @@ static int msc_pcibios_config_access(unsigned char access_type,
/* Detect Master/Target abort */
MSC_READ
(
MSC01_PCI_INTSTAT
,
intr
);
if
(
intr
&
(
MSC01_PCI_INTCFG_MA_BIT
|
MSC01_PCI_INTCFG_TA_BIT
))
{
if
(
intr
&
(
MSC01_PCI_INTCFG_MA_BIT
|
MSC01_PCI_INTCFG_TA_BIT
))
{
/* Error occurred */
/* Clear bits */
MSC_READ
(
MSC01_PCI_INTSTAT
,
intr
);
MSC_WRITE
(
MSC01_PCI_INTSTAT
,
(
MSC01_PCI_INTCFG_MA_BIT
|
MSC01_PCI_INTCFG_TA_BIT
));
(
MSC01_PCI_INTCFG_MA_BIT
|
MSC01_PCI_INTCFG_TA_BIT
));
return
-
1
;
}
...
...
include/asm-mips/mips-boards/msc01_pci.h
浏览文件 @
aa0980b8
/*
* PCI Register definitions for the MIPS System Controller.
*
* Carsten Langgaard, carstenl@mips.com
* Copyright (C) 2002 MIPS Technologies, Inc. All rights reserved.
* Copyright (C) 2002, 2005 MIPS Technologies, Inc. All rights reserved.
* Authors: Carsten Langgaard <carstenl@mips.com>
* Maciej W. Rozycki <macro@mips.com>
*
* 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
...
...
@@ -29,22 +30,22 @@
#define MSC01_PCI_CFGADDR_OFS 0x0610
#define MSC01_PCI_CFGDATA_OFS 0x0618
#define MSC01_PCI_IACK_OFS 0x0620
#define MSC01_PCI_HEAD0_OFS 0x2000
/* DevID, VendorID */
#define MSC01_PCI_HEAD1_OFS 0x2008
/* Status, Command */
#define MSC01_PCI_HEAD2_OFS 0x2010
/* Class code, RevID */
#define MSC01_PCI_HEAD3_OFS 0x2018
/* bist, header, latency */
#define MSC01_PCI_HEAD4_OFS 0x2020
/* BAR 0 */
#define MSC01_PCI_HEAD5_OFS 0x2028
/* BAR 1 */
#define MSC01_PCI_HEAD6_OFS 0x2030
/* BAR 2 */
#define MSC01_PCI_HEAD7_OFS 0x2038
/* BAR 3 */
#define MSC01_PCI_HEAD8_OFS 0x2040
/* BAR 4 */
#define MSC01_PCI_HEAD9_OFS 0x2048
/* BAR 5 */
#define MSC01_PCI_HEAD10_OFS 0x2050
/* CardBus CIS Ptr */
#define MSC01_PCI_HEAD11_OFS 0x2058
/* SubSystem ID, -VendorID */
#define MSC01_PCI_HEAD12_OFS 0x2060
/* ROM BAR */
#define MSC01_PCI_HEAD13_OFS 0x2068
/* Capabilities ptr */
#define MSC01_PCI_HEAD14_OFS 0x2070
/* reserved */
#define MSC01_PCI_HEAD15_OFS 0x2078
/* Maxl, ming, intpin, int */
#define MSC01_PCI_HEAD0_OFS 0x2000
/* DevID, VendorID */
#define MSC01_PCI_HEAD1_OFS 0x2008
/* Status, Command */
#define MSC01_PCI_HEAD2_OFS 0x2010
/* Class code, RevID */
#define MSC01_PCI_HEAD3_OFS 0x2018
/* bist, header, latency */
#define MSC01_PCI_HEAD4_OFS 0x2020
/* BAR 0 */
#define MSC01_PCI_HEAD5_OFS 0x2028
/* BAR 1 */
#define MSC01_PCI_HEAD6_OFS 0x2030
/* BAR 2 */
#define MSC01_PCI_HEAD7_OFS 0x2038
/* BAR 3 */
#define MSC01_PCI_HEAD8_OFS 0x2040
/* BAR 4 */
#define MSC01_PCI_HEAD9_OFS 0x2048
/* BAR 5 */
#define MSC01_PCI_HEAD10_OFS 0x2050
/* CardBus CIS Ptr */
#define MSC01_PCI_HEAD11_OFS 0x2058
/* SubSystem ID, -VendorID */
#define MSC01_PCI_HEAD12_OFS 0x2060
/* ROM BAR */
#define MSC01_PCI_HEAD13_OFS 0x2068
/* Capabilities ptr */
#define MSC01_PCI_HEAD14_OFS 0x2070
/* reserved */
#define MSC01_PCI_HEAD15_OFS 0x2078
/* Maxl, ming, intpin, int */
#define MSC01_PCI_BAR0_OFS 0x2220
#define MSC01_PCI_CFG_OFS 0x2380
#define MSC01_PCI_SWAP_OFS 0x2388
...
...
@@ -86,73 +87,73 @@
#define MSC01_PCI_P2SCMAPL_MAP_SHF 24
#define MSC01_PCI_P2SCMAPL_MAP_MSK 0xff000000
#define MSC01_PCI_INTCFG_RST_SHF
10
#define MSC01_PCI_INTCFG_RST_MSK
0x00000400
#define MSC01_PCI_INTCFG_RST_BIT
0x00000400
#define MSC01_PCI_INTCFG_MWE_SHF
9
#define MSC01_PCI_INTCFG_MWE_MSK
0x00000200
#define MSC01_PCI_INTCFG_MWE_BIT
0x00000200
#define MSC01_PCI_INTCFG_DTO_SHF
8
#define MSC01_PCI_INTCFG_DTO_MSK
0x00000100
#define MSC01_PCI_INTCFG_DTO_BIT
0x00000100
#define MSC01_PCI_INTCFG_MA_SHF
7
#define MSC01_PCI_INTCFG_MA_MSK
0x00000080
#define MSC01_PCI_INTCFG_MA_BIT
0x00000080
#define MSC01_PCI_INTCFG_TA_SHF
6
#define MSC01_PCI_INTCFG_TA_MSK
0x00000040
#define MSC01_PCI_INTCFG_TA_BIT
0x00000040
#define MSC01_PCI_INTCFG_RTY_SHF
5
#define MSC01_PCI_INTCFG_RTY_MSK
0x00000020
#define MSC01_PCI_INTCFG_RTY_BIT
0x00000020
#define MSC01_PCI_INTCFG_MWP_SHF
4
#define MSC01_PCI_INTCFG_MWP_MSK
0x00000010
#define MSC01_PCI_INTCFG_MWP_BIT
0x00000010
#define MSC01_PCI_INTCFG_MRP_SHF
3
#define MSC01_PCI_INTCFG_MRP_MSK
0x00000008
#define MSC01_PCI_INTCFG_MRP_BIT
0x00000008
#define MSC01_PCI_INTCFG_SWP_SHF
2
#define MSC01_PCI_INTCFG_SWP_MSK
0x00000004
#define MSC01_PCI_INTCFG_SWP_BIT
0x00000004
#define MSC01_PCI_INTCFG_SRP_SHF
1
#define MSC01_PCI_INTCFG_SRP_MSK
0x00000002
#define MSC01_PCI_INTCFG_SRP_BIT
0x00000002
#define MSC01_PCI_INTCFG_SE_SHF
0
#define MSC01_PCI_INTCFG_SE_MSK
0x00000001
#define MSC01_PCI_INTCFG_SE_BIT
0x00000001
#define MSC01_PCI_INTCFG_RST_SHF
10
#define MSC01_PCI_INTCFG_RST_MSK
0x00000400
#define MSC01_PCI_INTCFG_RST_BIT
0x00000400
#define MSC01_PCI_INTCFG_MWE_SHF
9
#define MSC01_PCI_INTCFG_MWE_MSK
0x00000200
#define MSC01_PCI_INTCFG_MWE_BIT
0x00000200
#define MSC01_PCI_INTCFG_DTO_SHF
8
#define MSC01_PCI_INTCFG_DTO_MSK
0x00000100
#define MSC01_PCI_INTCFG_DTO_BIT
0x00000100
#define MSC01_PCI_INTCFG_MA_SHF
7
#define MSC01_PCI_INTCFG_MA_MSK
0x00000080
#define MSC01_PCI_INTCFG_MA_BIT
0x00000080
#define MSC01_PCI_INTCFG_TA_SHF
6
#define MSC01_PCI_INTCFG_TA_MSK
0x00000040
#define MSC01_PCI_INTCFG_TA_BIT
0x00000040
#define MSC01_PCI_INTCFG_RTY_SHF
5
#define MSC01_PCI_INTCFG_RTY_MSK
0x00000020
#define MSC01_PCI_INTCFG_RTY_BIT
0x00000020
#define MSC01_PCI_INTCFG_MWP_SHF
4
#define MSC01_PCI_INTCFG_MWP_MSK
0x00000010
#define MSC01_PCI_INTCFG_MWP_BIT
0x00000010
#define MSC01_PCI_INTCFG_MRP_SHF
3
#define MSC01_PCI_INTCFG_MRP_MSK
0x00000008
#define MSC01_PCI_INTCFG_MRP_BIT
0x00000008
#define MSC01_PCI_INTCFG_SWP_SHF
2
#define MSC01_PCI_INTCFG_SWP_MSK
0x00000004
#define MSC01_PCI_INTCFG_SWP_BIT
0x00000004
#define MSC01_PCI_INTCFG_SRP_SHF
1
#define MSC01_PCI_INTCFG_SRP_MSK
0x00000002
#define MSC01_PCI_INTCFG_SRP_BIT
0x00000002
#define MSC01_PCI_INTCFG_SE_SHF
0
#define MSC01_PCI_INTCFG_SE_MSK
0x00000001
#define MSC01_PCI_INTCFG_SE_BIT
0x00000001
#define MSC01_PCI_INTSTAT_RST_SHF
10
#define MSC01_PCI_INTSTAT_RST_MSK
0x00000400
#define MSC01_PCI_INTSTAT_RST_BIT
0x00000400
#define MSC01_PCI_INTSTAT_MWE_SHF
9
#define MSC01_PCI_INTSTAT_MWE_MSK
0x00000200
#define MSC01_PCI_INTSTAT_MWE_BIT
0x00000200
#define MSC01_PCI_INTSTAT_DTO_SHF
8
#define MSC01_PCI_INTSTAT_DTO_MSK
0x00000100
#define MSC01_PCI_INTSTAT_DTO_BIT
0x00000100
#define MSC01_PCI_INTSTAT_MA_SHF
7
#define MSC01_PCI_INTSTAT_MA_MSK
0x00000080
#define MSC01_PCI_INTSTAT_MA_BIT
0x00000080
#define MSC01_PCI_INTSTAT_TA_SHF
6
#define MSC01_PCI_INTSTAT_TA_MSK
0x00000040
#define MSC01_PCI_INTSTAT_TA_BIT
0x00000040
#define MSC01_PCI_INTSTAT_RTY_SHF
5
#define MSC01_PCI_INTSTAT_RTY_MSK
0x00000020
#define MSC01_PCI_INTSTAT_RTY_BIT
0x00000020
#define MSC01_PCI_INTSTAT_MWP_SHF
4
#define MSC01_PCI_INTSTAT_MWP_MSK
0x00000010
#define MSC01_PCI_INTSTAT_MWP_BIT
0x00000010
#define MSC01_PCI_INTSTAT_MRP_SHF
3
#define MSC01_PCI_INTSTAT_MRP_MSK
0x00000008
#define MSC01_PCI_INTSTAT_MRP_BIT
0x00000008
#define MSC01_PCI_INTSTAT_SWP_SHF
2
#define MSC01_PCI_INTSTAT_SWP_MSK
0x00000004
#define MSC01_PCI_INTSTAT_SWP_BIT
0x00000004
#define MSC01_PCI_INTSTAT_SRP_SHF
1
#define MSC01_PCI_INTSTAT_SRP_MSK
0x00000002
#define MSC01_PCI_INTSTAT_SRP_BIT
0x00000002
#define MSC01_PCI_INTSTAT_SE_SHF
0
#define MSC01_PCI_INTSTAT_SE_MSK
0x00000001
#define MSC01_PCI_INTSTAT_SE_BIT
0x00000001
#define MSC01_PCI_INTSTAT_RST_SHF
10
#define MSC01_PCI_INTSTAT_RST_MSK
0x00000400
#define MSC01_PCI_INTSTAT_RST_BIT
0x00000400
#define MSC01_PCI_INTSTAT_MWE_SHF
9
#define MSC01_PCI_INTSTAT_MWE_MSK
0x00000200
#define MSC01_PCI_INTSTAT_MWE_BIT
0x00000200
#define MSC01_PCI_INTSTAT_DTO_SHF
8
#define MSC01_PCI_INTSTAT_DTO_MSK
0x00000100
#define MSC01_PCI_INTSTAT_DTO_BIT
0x00000100
#define MSC01_PCI_INTSTAT_MA_SHF
7
#define MSC01_PCI_INTSTAT_MA_MSK
0x00000080
#define MSC01_PCI_INTSTAT_MA_BIT
0x00000080
#define MSC01_PCI_INTSTAT_TA_SHF
6
#define MSC01_PCI_INTSTAT_TA_MSK
0x00000040
#define MSC01_PCI_INTSTAT_TA_BIT
0x00000040
#define MSC01_PCI_INTSTAT_RTY_SHF
5
#define MSC01_PCI_INTSTAT_RTY_MSK
0x00000020
#define MSC01_PCI_INTSTAT_RTY_BIT
0x00000020
#define MSC01_PCI_INTSTAT_MWP_SHF
4
#define MSC01_PCI_INTSTAT_MWP_MSK
0x00000010
#define MSC01_PCI_INTSTAT_MWP_BIT
0x00000010
#define MSC01_PCI_INTSTAT_MRP_SHF
3
#define MSC01_PCI_INTSTAT_MRP_MSK
0x00000008
#define MSC01_PCI_INTSTAT_MRP_BIT
0x00000008
#define MSC01_PCI_INTSTAT_SWP_SHF
2
#define MSC01_PCI_INTSTAT_SWP_MSK
0x00000004
#define MSC01_PCI_INTSTAT_SWP_BIT
0x00000004
#define MSC01_PCI_INTSTAT_SRP_SHF
1
#define MSC01_PCI_INTSTAT_SRP_MSK
0x00000002
#define MSC01_PCI_INTSTAT_SRP_BIT
0x00000002
#define MSC01_PCI_INTSTAT_SE_SHF
0
#define MSC01_PCI_INTSTAT_SE_MSK
0x00000001
#define MSC01_PCI_INTSTAT_SE_BIT
0x00000001
#define MSC01_PCI_CFGADDR_BNUM_SHF 16
#define MSC01_PCI_CFGADDR_BNUM_MSK 0x00ff0000
...
...
@@ -167,29 +168,29 @@
#define MSC01_PCI_CFGDATA_DATA_MSK 0xffffffff
/* The defines below are ONLY valid for a MEM bar! */
#define MSC01_PCI_BAR0_SIZE_SHF
4
#define MSC01_PCI_BAR0_SIZE_MSK
0xfffffff0
#define MSC01_PCI_BAR0_P_SHF
3
#define MSC01_PCI_BAR0_P_MSK
0x00000008
#define MSC01_PCI_BAR0_P_BIT
MSC01_PCI_BAR0_P_MSK
#define MSC01_PCI_BAR0_D_SHF
1
#define MSC01_PCI_BAR0_D_MSK
0x00000006
#define MSC01_PCI_BAR0_T_SHF
0
#define MSC01_PCI_BAR0_T_MSK
0x00000001
#define MSC01_PCI_BAR0_T_BIT
MSC01_PCI_BAR0_T_MSK
#define MSC01_PCI_BAR0_SIZE_SHF
4
#define MSC01_PCI_BAR0_SIZE_MSK
0xfffffff0
#define MSC01_PCI_BAR0_P_SHF
3
#define MSC01_PCI_BAR0_P_MSK
0x00000008
#define MSC01_PCI_BAR0_P_BIT
MSC01_PCI_BAR0_P_MSK
#define MSC01_PCI_BAR0_D_SHF
1
#define MSC01_PCI_BAR0_D_MSK
0x00000006
#define MSC01_PCI_BAR0_T_SHF
0
#define MSC01_PCI_BAR0_T_MSK
0x00000001
#define MSC01_PCI_BAR0_T_BIT
MSC01_PCI_BAR0_T_MSK
#define MSC01_PCI_CFG_RA_SHF
17
#define MSC01_PCI_CFG_RA_MSK
0x00020000
#define MSC01_PCI_CFG_RA_BIT
MSC01_PCI_CFG_RA_MSK
#define MSC01_PCI_CFG_G_SHF
16
#define MSC01_PCI_CFG_G_MSK
0x00010000
#define MSC01_PCI_CFG_G_BIT
MSC01_PCI_CFG_G_MSK
#define MSC01_PCI_CFG_EN_SHF
15
#define MSC01_PCI_CFG_EN_MSK
0x00008000
#define MSC01_PCI_CFG_EN_BIT
MSC01_PCI_CFG_EN_MSK
#define MSC01_PCI_CFG_MAXRTRY_SHF
0
#define MSC01_PCI_CFG_MAXRTRY_MSK
0x000000
ff
#define MSC01_PCI_CFG_RA_SHF
17
#define MSC01_PCI_CFG_RA_MSK
0x00020000
#define MSC01_PCI_CFG_RA_BIT
MSC01_PCI_CFG_RA_MSK
#define MSC01_PCI_CFG_G_SHF
16
#define MSC01_PCI_CFG_G_MSK
0x00010000
#define MSC01_PCI_CFG_G_BIT
MSC01_PCI_CFG_G_MSK
#define MSC01_PCI_CFG_EN_SHF
15
#define MSC01_PCI_CFG_EN_MSK
0x00008000
#define MSC01_PCI_CFG_EN_BIT
MSC01_PCI_CFG_EN_MSK
#define MSC01_PCI_CFG_MAXRTRY_SHF
0
#define MSC01_PCI_CFG_MAXRTRY_MSK
0x00000f
ff
#define MSC01_PCI_SWAP_IO_SHF 18
#define MSC01_PCI_SWAP_IO_MSK 0x000c0000
...
...
@@ -206,7 +207,7 @@
* FIXME - are these macros specific to Malta and co or to the MSC? If the
* latter, they should be moved elsewhere.
*/
#define MIPS_MSC01_PCI_REG_BASE 0x1bd00000
#define MIPS_MSC01_PCI_REG_BASE
0x1bd00000
extern
unsigned
long
_pcictrl_msc
;
...
...
@@ -219,19 +220,19 @@ extern unsigned long _pcictrl_msc;
* Registers absolute addresses
*/
#define MSC01_PCI_ID
(MSC01_PCI_REG_BASE + MSC01_PCI_ID_OFS)
#define MSC01_PCI_SC2PMBASL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PMBASL_OFS)
#define MSC01_PCI_SC2PMMSKL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PMMSKL_OFS)
#define MSC01_PCI_SC2PMMAPL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PMMAPL_OFS)
#define MSC01_PCI_SC2PIOBASL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PIOBASL_OFS)
#define MSC01_PCI_SC2PIOMSKL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PIOMSKL_OFS)
#define MSC01_PCI_SC2PIOMAPL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PIOMAPL_OFS)
#define MSC01_PCI_P2SCMSKL
(MSC01_PCI_REG_BASE + MSC01_PCI_P2SCMSKL_OFS)
#define MSC01_PCI_P2SCMAPL
(MSC01_PCI_REG_BASE + MSC01_PCI_P2SCMAPL_OFS)
#define MSC01_PCI_INTCFG
(MSC01_PCI_REG_BASE + MSC01_PCI_INTCFG_OFS)
#define MSC01_PCI_INTSTAT
(MSC01_PCI_REG_BASE + MSC01_PCI_INTSTAT_OFS)
#define MSC01_PCI_CFGADDR
(MSC01_PCI_REG_BASE + MSC01_PCI_CFGADDR_OFS)
#define MSC01_PCI_CFGDATA
(MSC01_PCI_REG_BASE + MSC01_PCI_CFGDATA_OFS)
#define MSC01_PCI_ID
(MSC01_PCI_REG_BASE + MSC01_PCI_ID_OFS)
#define MSC01_PCI_SC2PMBASL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PMBASL_OFS)
#define MSC01_PCI_SC2PMMSKL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PMMSKL_OFS)
#define MSC01_PCI_SC2PMMAPL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PMMAPL_OFS)
#define MSC01_PCI_SC2PIOBASL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PIOBASL_OFS)
#define MSC01_PCI_SC2PIOMSKL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PIOMSKL_OFS)
#define MSC01_PCI_SC2PIOMAPL
(MSC01_PCI_REG_BASE + MSC01_PCI_SC2PIOMAPL_OFS)
#define MSC01_PCI_P2SCMSKL
(MSC01_PCI_REG_BASE + MSC01_PCI_P2SCMSKL_OFS)
#define MSC01_PCI_P2SCMAPL
(MSC01_PCI_REG_BASE + MSC01_PCI_P2SCMAPL_OFS)
#define MSC01_PCI_INTCFG
(MSC01_PCI_REG_BASE + MSC01_PCI_INTCFG_OFS)
#define MSC01_PCI_INTSTAT
(MSC01_PCI_REG_BASE + MSC01_PCI_INTSTAT_OFS)
#define MSC01_PCI_CFGADDR
(MSC01_PCI_REG_BASE + MSC01_PCI_CFGADDR_OFS)
#define MSC01_PCI_CFGDATA
(MSC01_PCI_REG_BASE + MSC01_PCI_CFGDATA_OFS)
#define MSC01_PCI_IACK (MSC01_PCI_REG_BASE + MSC01_PCI_IACK_OFS)
#define MSC01_PCI_HEAD0 (MSC01_PCI_REG_BASE + MSC01_PCI_HEAD0_OFS)
#define MSC01_PCI_HEAD1 (MSC01_PCI_REG_BASE + MSC01_PCI_HEAD1_OFS)
...
...
@@ -248,7 +249,7 @@ extern unsigned long _pcictrl_msc;
#define MSC01_PCI_HEAD12 (MSC01_PCI_REG_BASE + MSC01_PCI_HEAD11_OFS)
#define MSC01_PCI_HEAD13 (MSC01_PCI_REG_BASE + MSC01_PCI_HEAD11_OFS)
#define MSC01_PCI_HEAD14 (MSC01_PCI_REG_BASE + MSC01_PCI_HEAD11_OFS)
#define MSC01_PCI_HEAD15
(MSC01_PCI_REG_BASE + MSC01_PCI_HEAD11_OFS)
#define MSC01_PCI_HEAD15
(MSC01_PCI_REG_BASE + MSC01_PCI_HEAD11_OFS)
#define MSC01_PCI_BAR0 (MSC01_PCI_REG_BASE + MSC01_PCI_BAR0_OFS)
#define MSC01_PCI_CFG (MSC01_PCI_REG_BASE + MSC01_PCI_CFG_OFS)
#define MSC01_PCI_SWAP (MSC01_PCI_REG_BASE + MSC01_PCI_SWAP_OFS)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录