Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
f3199673
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
169
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
f3199673
编写于
11月 13, 2017
作者:
A
Alex Williamson
浏览文件
操作
浏览文件
下载
差异文件
Merge branches 'vfio/fixes' and 'vfio/platform' into vfio-next-20171113.0
上级
71a7d3d7
e2588341
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
123 addition
and
0 deletion
+123
-0
drivers/vfio/platform/reset/Kconfig
drivers/vfio/platform/reset/Kconfig
+9
-0
drivers/vfio/platform/reset/Makefile
drivers/vfio/platform/reset/Makefile
+1
-0
drivers/vfio/platform/reset/vfio_platform_bcmflexrm.c
drivers/vfio/platform/reset/vfio_platform_bcmflexrm.c
+113
-0
未找到文件。
drivers/vfio/platform/reset/Kconfig
浏览文件 @
f3199673
...
...
@@ -13,3 +13,12 @@ config VFIO_PLATFORM_AMDXGBE_RESET
Enables the VFIO platform driver to handle reset for AMD XGBE
If you don't know what to do here, say N.
config VFIO_PLATFORM_BCMFLEXRM_RESET
tristate "VFIO support for Broadcom FlexRM reset"
depends on VFIO_PLATFORM && (ARCH_BCM_IPROC || COMPILE_TEST)
default ARCH_BCM_IPROC
help
Enables the VFIO platform driver to handle reset for Broadcom FlexRM
If you don't know what to do here, say N.
drivers/vfio/platform/reset/Makefile
浏览文件 @
f3199673
...
...
@@ -5,3 +5,4 @@ ccflags-y += -Idrivers/vfio/platform
obj-$(CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET)
+=
vfio-platform-calxedaxgmac.o
obj-$(CONFIG_VFIO_PLATFORM_AMDXGBE_RESET)
+=
vfio-platform-amdxgbe.o
obj-$(CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET)
+=
vfio_platform_bcmflexrm.o
drivers/vfio/platform/reset/vfio_platform_bcmflexrm.c
0 → 100644
浏览文件 @
f3199673
/*
* Copyright (C) 2017 Broadcom
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation version 2.
*
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
* kind, whether express or implied; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
/*
* This driver provides reset support for Broadcom FlexRM ring manager
* to VFIO platform.
*/
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include "vfio_platform_private.h"
/* FlexRM configuration */
#define RING_REGS_SIZE 0x10000
#define RING_VER_MAGIC 0x76303031
/* Per-Ring register offsets */
#define RING_VER 0x000
#define RING_CONTROL 0x034
#define RING_FLUSH_DONE 0x038
/* Register RING_CONTROL fields */
#define CONTROL_FLUSH_SHIFT 5
/* Register RING_FLUSH_DONE fields */
#define FLUSH_DONE_MASK 0x1
static
int
vfio_platform_bcmflexrm_shutdown
(
void
__iomem
*
ring
)
{
unsigned
int
timeout
;
/* Disable/inactivate ring */
writel_relaxed
(
0x0
,
ring
+
RING_CONTROL
);
/* Set ring flush state */
timeout
=
1000
;
/* timeout of 1s */
writel_relaxed
(
BIT
(
CONTROL_FLUSH_SHIFT
),
ring
+
RING_CONTROL
);
do
{
if
(
readl_relaxed
(
ring
+
RING_FLUSH_DONE
)
&
FLUSH_DONE_MASK
)
break
;
mdelay
(
1
);
}
while
(
--
timeout
);
if
(
!
timeout
)
return
-
ETIMEDOUT
;
/* Clear ring flush state */
timeout
=
1000
;
/* timeout of 1s */
writel_relaxed
(
0x0
,
ring
+
RING_CONTROL
);
do
{
if
(
!
(
readl_relaxed
(
ring
+
RING_FLUSH_DONE
)
&
FLUSH_DONE_MASK
))
break
;
mdelay
(
1
);
}
while
(
--
timeout
);
if
(
!
timeout
)
return
-
ETIMEDOUT
;
return
0
;
}
static
int
vfio_platform_bcmflexrm_reset
(
struct
vfio_platform_device
*
vdev
)
{
void
__iomem
*
ring
;
int
rc
=
0
,
ret
=
0
,
ring_num
=
0
;
struct
vfio_platform_region
*
reg
=
&
vdev
->
regions
[
0
];
/* Map FlexRM ring registers if not mapped */
if
(
!
reg
->
ioaddr
)
{
reg
->
ioaddr
=
ioremap_nocache
(
reg
->
addr
,
reg
->
size
);
if
(
!
reg
->
ioaddr
)
return
-
ENOMEM
;
}
/* Discover and shutdown each FlexRM ring */
for
(
ring
=
reg
->
ioaddr
;
ring
<
(
reg
->
ioaddr
+
reg
->
size
);
ring
+=
RING_REGS_SIZE
)
{
if
(
readl_relaxed
(
ring
+
RING_VER
)
==
RING_VER_MAGIC
)
{
rc
=
vfio_platform_bcmflexrm_shutdown
(
ring
);
if
(
rc
)
{
dev_warn
(
vdev
->
device
,
"FlexRM ring%d shutdown error %d
\n
"
,
ring_num
,
rc
);
ret
|=
rc
;
}
ring_num
++
;
}
}
return
ret
;
}
module_vfio_reset_handler
(
"brcm,iproc-flexrm-mbox"
,
vfio_platform_bcmflexrm_reset
);
MODULE_LICENSE
(
"GPL v2"
);
MODULE_AUTHOR
(
"Anup Patel <anup.patel@broadcom.com>"
);
MODULE_DESCRIPTION
(
"Reset support for Broadcom FlexRM VFIO platform device"
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录