Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
0dbc0798
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
0dbc0798
编写于
5月 17, 2012
作者:
A
Alexander Graf
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
PPC: e500: dt: create pci node dynamically
Signed-off-by:
N
Alexander Graf
<
agraf@suse.de
>
上级
f5038483
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
50 addition
and
46 deletion
+50
-46
hw/ppce500_mpc8544ds.c
hw/ppce500_mpc8544ds.c
+50
-0
pc-bios/mpc8544ds.dtb
pc-bios/mpc8544ds.dtb
+0
-0
pc-bios/mpc8544ds.dts
pc-bios/mpc8544ds.dts
+0
-46
未找到文件。
hw/ppce500_mpc8544ds.c
浏览文件 @
0dbc0798
...
@@ -62,6 +62,27 @@ struct boot_info
...
@@ -62,6 +62,27 @@ struct boot_info
uint32_t
entry
;
uint32_t
entry
;
};
};
static
void
pci_map_create
(
void
*
fdt
,
uint32_t
*
pci_map
,
uint32_t
mpic
)
{
int
i
;
const
uint32_t
tmp
[]
=
{
/* IDSEL 0x11 J17 Slot 1 */
0x8800
,
0x0
,
0x0
,
0x1
,
mpic
,
0x2
,
0x1
,
0x8800
,
0x0
,
0x0
,
0x2
,
mpic
,
0x3
,
0x1
,
0x8800
,
0x0
,
0x0
,
0x3
,
mpic
,
0x4
,
0x1
,
0x8800
,
0x0
,
0x0
,
0x4
,
mpic
,
0x1
,
0x1
,
/* IDSEL 0x12 J16 Slot 2 */
0x9000
,
0x0
,
0x0
,
0x1
,
mpic
,
0x3
,
0x1
,
0x9000
,
0x0
,
0x0
,
0x2
,
mpic
,
0x4
,
0x1
,
0x9000
,
0x0
,
0x0
,
0x3
,
mpic
,
0x2
,
0x1
,
0x9000
,
0x0
,
0x0
,
0x4
,
mpic
,
0x1
,
0x1
,
};
for
(
i
=
0
;
i
<
(
7
*
8
);
i
++
)
{
pci_map
[
i
]
=
cpu_to_be32
(
tmp
[
i
]);
}
}
static
int
mpc8544_load_device_tree
(
CPUPPCState
*
env
,
static
int
mpc8544_load_device_tree
(
CPUPPCState
*
env
,
target_phys_addr_t
addr
,
target_phys_addr_t
addr
,
uint32_t
ramsize
,
uint32_t
ramsize
,
...
@@ -86,6 +107,11 @@ static int mpc8544_load_device_tree(CPUPPCState *env,
...
@@ -86,6 +107,11 @@ static int mpc8544_load_device_tree(CPUPPCState *env,
char
mpic
[
128
];
char
mpic
[
128
];
uint32_t
mpic_ph
;
uint32_t
mpic_ph
;
char
gutil
[
128
];
char
gutil
[
128
];
char
pci
[
128
];
uint32_t
pci_map
[
7
*
8
];
uint32_t
pci_ranges
[
12
]
=
{
0x2000000
,
0x0
,
0xc0000000
,
0xc0000000
,
0x0
,
0x20000000
,
0x1000000
,
0x0
,
0x0
,
0xe1000000
,
0x0
,
0x10000
};
filename
=
qemu_find_file
(
QEMU_FILE_TYPE_BIOS
,
BINARY_DEVICE_TREE_FILE
);
filename
=
qemu_find_file
(
QEMU_FILE_TYPE_BIOS
,
BINARY_DEVICE_TREE_FILE
);
if
(
!
filename
)
{
if
(
!
filename
)
{
...
@@ -256,6 +282,30 @@ static int mpc8544_load_device_tree(CPUPPCState *env,
...
@@ -256,6 +282,30 @@ static int mpc8544_load_device_tree(CPUPPCState *env,
MPC8544_CCSRBAR_BASE
,
0x1000
);
MPC8544_CCSRBAR_BASE
,
0x1000
);
qemu_devtree_setprop
(
fdt
,
gutil
,
"fsl,has-rstcr"
,
NULL
,
0
);
qemu_devtree_setprop
(
fdt
,
gutil
,
"fsl,has-rstcr"
,
NULL
,
0
);
snprintf
(
pci
,
sizeof
(
pci
),
"/pci@%x"
,
MPC8544_PCI_REGS_BASE
);
qemu_devtree_add_subnode
(
fdt
,
pci
);
qemu_devtree_setprop_cell
(
fdt
,
pci
,
"cell-index"
,
0
);
qemu_devtree_setprop_string
(
fdt
,
pci
,
"compatible"
,
"fsl,mpc8540-pci"
);
qemu_devtree_setprop_string
(
fdt
,
pci
,
"device_type"
,
"pci"
);
qemu_devtree_setprop_cells
(
fdt
,
pci
,
"interrupt-map-mask"
,
0xf800
,
0x0
,
0x0
,
0x7
);
pci_map_create
(
fdt
,
pci_map
,
qemu_devtree_get_phandle
(
fdt
,
mpic
));
qemu_devtree_setprop
(
fdt
,
pci
,
"interrupt-map"
,
pci_map
,
sizeof
(
pci_map
));
qemu_devtree_setprop_phandle
(
fdt
,
pci
,
"interrupt-parent"
,
mpic
);
qemu_devtree_setprop_cells
(
fdt
,
pci
,
"interrupts"
,
24
,
2
);
qemu_devtree_setprop_cells
(
fdt
,
pci
,
"bus-range"
,
0
,
255
);
for
(
i
=
0
;
i
<
12
;
i
++
)
{
pci_ranges
[
i
]
=
cpu_to_be32
(
pci_ranges
[
i
]);
}
qemu_devtree_setprop
(
fdt
,
pci
,
"ranges"
,
pci_ranges
,
sizeof
(
pci_ranges
));
qemu_devtree_setprop_cells
(
fdt
,
pci
,
"reg"
,
MPC8544_PCI_REGS_BASE
,
0x1000
);
qemu_devtree_setprop_cell
(
fdt
,
pci
,
"clock-frequency"
,
66666666
);
qemu_devtree_setprop_cell
(
fdt
,
pci
,
"#interrupt-cells"
,
1
);
qemu_devtree_setprop_cell
(
fdt
,
pci
,
"#size-cells"
,
2
);
qemu_devtree_setprop_cell
(
fdt
,
pci
,
"#address-cells"
,
3
);
qemu_devtree_setprop_string
(
fdt
,
"/aliases"
,
"pci0"
,
pci
);
ret
=
rom_add_blob_fixed
(
BINARY_DEVICE_TREE_FILE
,
fdt
,
fdt_size
,
addr
);
ret
=
rom_add_blob_fixed
(
BINARY_DEVICE_TREE_FILE
,
fdt
,
fdt_size
,
addr
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
goto
out
;
goto
out
;
...
...
pc-bios/mpc8544ds.dtb
浏览文件 @
0dbc0798
无法预览此类型文件
pc-bios/mpc8544ds.dts
浏览文件 @
0dbc0798
...
@@ -11,50 +11,4 @@
...
@@ -11,50 +11,4 @@
/dts-v1/;
/dts-v1/;
/ {
/ {
aliases {
pci0 = &pci0;
};
soc8544@e0000000 {
mpic: pic@40000 {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <2>;
reg = <0x40000 0x40000>;
compatible = "chrp,open-pic";
device_type = "open-pic";
};
};
pci0: pci@e0008000 {
cell-index = <0>;
compatible = "fsl,mpc8540-pci";
device_type = "pci";
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-map = <
/* IDSEL 0x11 J17 Slot 1 */
0x8800 0x0 0x0 0x1 &mpic 0x2 0x1
0x8800 0x0 0x0 0x2 &mpic 0x3 0x1
0x8800 0x0 0x0 0x3 &mpic 0x4 0x1
0x8800 0x0 0x0 0x4 &mpic 0x1 0x1
/* IDSEL 0x12 J16 Slot 2 */
0x9000 0x0 0x0 0x1 &mpic 0x3 0x1
0x9000 0x0 0x0 0x2 &mpic 0x4 0x1
0x9000 0x0 0x0 0x3 &mpic 0x2 0x1
0x9000 0x0 0x0 0x4 &mpic 0x1 0x1>;
interrupt-parent = <&mpic>;
interrupts = <24 2>;
bus-range = <0 255>;
ranges = <0x2000000 0x0 0xc0000000 0xc0000000 0x0 0x20000000
0x1000000 0x0 0x0 0xe1000000 0x0 0x10000>;
clock-frequency = <66666666>;
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0xe0008000 0x1000>;
};
};
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录