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
Kirill Smelkov
linux
Commits
437b2296
Commit
437b2296
authored
Aug 20, 2015
by
Ben Skeggs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
drm/nouveau/volt: convert to new-style nvkm_subdev
Signed-off-by:
Ben Skeggs
<
bskeggs@redhat.com
>
parent
31649ecf
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
161 additions
and
253 deletions
+161
-253
drivers/gpu/drm/nouveau/include/nvkm/subdev/volt.h
drivers/gpu/drm/nouveau/include/nvkm/subdev/volt.h
+5
-41
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
+46
-46
drivers/gpu/drm/nouveau/nvkm/engine/device/gf100.c
drivers/gpu/drm/nouveau/nvkm/engine/device/gf100.c
+0
-8
drivers/gpu/drm/nouveau/nvkm/engine/device/gk104.c
drivers/gpu/drm/nouveau/nvkm/engine/device/gk104.c
+0
-8
drivers/gpu/drm/nouveau/nvkm/engine/device/gm100.c
drivers/gpu/drm/nouveau/nvkm/engine/device/gm100.c
+0
-3
drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c
drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c
+0
-16
drivers/gpu/drm/nouveau/nvkm/engine/device/nv50.c
drivers/gpu/drm/nouveau/nvkm/engine/device/nv50.c
+0
-14
drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
+2
-2
drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c
+52
-65
drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c
drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c
+24
-31
drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.c
drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.c
+12
-19
drivers/gpu/drm/nouveau/nvkm/subdev/volt/priv.h
drivers/gpu/drm/nouveau/nvkm/subdev/volt/priv.h
+20
-0
No files found.
drivers/gpu/drm/nouveau/include/nvkm/subdev/volt.h
View file @
437b2296
...
...
@@ -2,20 +2,10 @@
#define __NVKM_VOLT_H__
#include <core/subdev.h>
struct
nvkm_voltage
{
u32
uv
;
u8
id
;
};
struct
nvkm_volt
{
const
struct
nvkm_volt_func
*
func
;
struct
nvkm_subdev
subdev
;
int
(
*
vid_get
)(
struct
nvkm_volt
*
);
int
(
*
get
)(
struct
nvkm_volt
*
);
int
(
*
vid_set
)(
struct
nvkm_volt
*
,
u8
vid
);
int
(
*
set
)(
struct
nvkm_volt
*
,
u32
uv
);
int
(
*
set_id
)(
struct
nvkm_volt
*
,
u8
id
,
int
condition
);
u8
vid_mask
;
u8
vid_nr
;
struct
{
...
...
@@ -24,35 +14,9 @@ struct nvkm_volt {
}
vid
[
256
];
};
static
inline
struct
nvkm_volt
*
nvkm_volt
(
void
*
obj
)
{
return
(
void
*
)
nvkm_subdev
(
obj
,
NVDEV_SUBDEV_VOLT
);
}
#define nvkm_volt_create(p, e, o, d) \
nvkm_volt_create_((p), (e), (o), sizeof(**d), (void **)d)
#define nvkm_volt_destroy(p) ({ \
struct nvkm_volt *v = (p); \
_nvkm_volt_dtor(nv_object(v)); \
})
#define nvkm_volt_init(p) ({ \
struct nvkm_volt *v = (p); \
_nvkm_volt_init(nv_object(v)); \
})
#define nvkm_volt_fini(p,s) \
nvkm_subdev_fini_old((p), (s))
int
nvkm_volt_create_
(
struct
nvkm_object
*
,
struct
nvkm_object
*
,
struct
nvkm_oclass
*
,
int
,
void
**
);
void
_nvkm_volt_dtor
(
struct
nvkm_object
*
);
int
_nvkm_volt_init
(
struct
nvkm_object
*
);
#define _nvkm_volt_fini _nvkm_subdev_fini
extern
struct
nvkm_oclass
nv40_volt_oclass
;
extern
struct
nvkm_oclass
gk20a_volt_oclass
;
int
nvkm_volt_get
(
struct
nvkm_volt
*
);
int
nvkm_volt_set_id
(
struct
nvkm_volt
*
,
u8
id
,
int
condition
);
int
nvkm_voltgpio_init
(
struct
nvkm_volt
*
);
int
nvkm_voltgpio_get
(
struct
nvkm_volt
*
);
int
nvkm_voltgpio_set
(
struct
nvkm_volt
*
,
u8
);
int
nv40_volt_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_volt
**
);
int
gk20a_volt_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_volt
**
);
#endif
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
View file @
437b2296
This diff is collapsed.
Click to expand it.
drivers/gpu/drm/nouveau/nvkm/engine/device/gf100.c
View file @
437b2296
...
...
@@ -28,7 +28,6 @@ gf100_identify(struct nvkm_device *device)
{
switch
(
device
->
chipset
)
{
case
0xc0
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf100_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gf100_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -42,7 +41,6 @@ gf100_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gf100_pm_oclass
;
break
;
case
0xc4
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf100_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gf100_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -56,7 +54,6 @@ gf100_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gf100_pm_oclass
;
break
;
case
0xc3
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf100_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gf100_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -69,7 +66,6 @@ gf100_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gf100_pm_oclass
;
break
;
case
0xce
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf100_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gf100_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -83,7 +79,6 @@ gf100_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gf100_pm_oclass
;
break
;
case
0xcf
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf100_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gf100_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -96,7 +91,6 @@ gf100_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gf100_pm_oclass
;
break
;
case
0xc1
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf100_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gf100_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -109,7 +103,6 @@ gf100_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gf108_pm_oclass
;
break
;
case
0xc8
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf100_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gf100_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -123,7 +116,6 @@ gf100_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gf100_pm_oclass
;
break
;
case
0xd9
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gf100_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/device/gk104.c
View file @
437b2296
...
...
@@ -28,7 +28,6 @@ gk104_identify(struct nvkm_device *device)
{
switch
(
device
->
chipset
)
{
case
0xe4
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gk104_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -43,7 +42,6 @@ gk104_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gk104_pm_oclass
;
break
;
case
0xe7
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gk104_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -58,7 +56,6 @@ gk104_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gk104_pm_oclass
;
break
;
case
0xe6
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gk104_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -79,10 +76,8 @@ gk104_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_GR
]
=
gk20a_gr_oclass
;
device
->
oclass
[
NVDEV_ENGINE_CE2
]
=
&
gk104_ce2_oclass
;
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gk104_pm_oclass
;
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
gk20a_volt_oclass
;
break
;
case
0xf0
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gk104_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -97,7 +92,6 @@ gk104_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
&
gk110_pm_oclass
;
break
;
case
0xf1
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gk104_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -112,7 +106,6 @@ gk104_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
&
gk110_pm_oclass
;
break
;
case
0x106
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gk208_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
@@ -126,7 +119,6 @@ gk104_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_MSPPP
]
=
&
gf100_msppp_oclass
;
break
;
case
0x108
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gk208_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
gf100_sw_oclass
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/device/gm100.c
View file @
437b2296
...
...
@@ -30,7 +30,6 @@ gm100_identify(struct nvkm_device *device)
case
0x117
:
#if 0
device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass;
#endif
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gk208_fifo_oclass
;
...
...
@@ -54,7 +53,6 @@ gm100_identify(struct nvkm_device *device)
/* priv ring says no to 0x10eb14 writes */
#endif
#if 0
device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass;
#endif
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gm204_fifo_oclass
;
...
...
@@ -76,7 +74,6 @@ gm100_identify(struct nvkm_device *device)
/* priv ring says no to 0x10eb14 writes */
#endif
#if 0
device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass;
#endif
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
gf110_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
gm204_fifo_oclass
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c
View file @
437b2296
...
...
@@ -28,7 +28,6 @@ nv40_identify(struct nvkm_device *device)
{
switch
(
device
->
chipset
)
{
case
0x40
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -38,7 +37,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x41
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -48,7 +46,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x42
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -58,7 +55,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x43
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -68,7 +64,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x45
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -78,7 +73,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x47
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -88,7 +82,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x49
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -98,7 +91,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x4b
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -108,7 +100,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x44
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -118,7 +109,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x46
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -128,7 +118,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x4a
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -138,7 +127,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x4c
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -148,7 +136,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x4e
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -158,7 +145,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x63
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -168,7 +154,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x67
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
@@ -178,7 +163,6 @@ nv40_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv40_pm_oclass
;
break
;
case
0x68
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv04_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv40_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv10_sw_oclass
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/device/nv50.c
View file @
437b2296
...
...
@@ -28,7 +28,6 @@ nv50_identify(struct nvkm_device *device)
{
switch
(
device
->
chipset
)
{
case
0x50
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
nv50_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -38,7 +37,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
nv50_pm_oclass
;
break
;
case
0x84
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -51,7 +49,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
g84_pm_oclass
;
break
;
case
0x86
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -64,7 +61,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
g84_pm_oclass
;
break
;
case
0x92
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -77,7 +73,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
g84_pm_oclass
;
break
;
case
0x94
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -90,7 +85,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
g84_pm_oclass
;
break
;
case
0x96
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -103,7 +97,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
g84_pm_oclass
;
break
;
case
0x98
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -116,7 +109,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
g84_pm_oclass
;
break
;
case
0xa0
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -129,7 +121,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gt200_pm_oclass
;
break
;
case
0xaa
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -142,7 +133,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
g84_pm_oclass
;
break
;
case
0xac
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -155,7 +145,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
g84_pm_oclass
;
break
;
case
0xa3
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -169,7 +158,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gt215_pm_oclass
;
break
;
case
0xa5
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -182,7 +170,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gt215_pm_oclass
;
break
;
case
0xa8
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
@@ -195,7 +182,6 @@ nv50_identify(struct nvkm_device *device)
device
->
oclass
[
NVDEV_ENGINE_PM
]
=
gt215_pm_oclass
;
break
;
case
0xaf
:
device
->
oclass
[
NVDEV_SUBDEV_VOLT
]
=
&
nv40_volt_oclass
;
device
->
oclass
[
NVDEV_ENGINE_DMAOBJ
]
=
nv50_dmaeng_oclass
;
device
->
oclass
[
NVDEV_ENGINE_FIFO
]
=
g84_fifo_oclass
;
device
->
oclass
[
NVDEV_ENGINE_SW
]
=
nv50_sw_oclass
;
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
View file @
437b2296
...
...
@@ -99,7 +99,7 @@ nvkm_cstate_prog(struct nvkm_clk *clk, struct nvkm_pstate *pstate, int cstatei)
}
if
(
volt
)
{
ret
=
volt
->
set_id
(
volt
,
cstate
->
voltage
,
+
1
);
ret
=
nvkm_volt_
set_id
(
volt
,
cstate
->
voltage
,
+
1
);
if
(
ret
&&
ret
!=
-
ENODEV
)
{
nvkm_error
(
subdev
,
"failed to raise voltage: %d
\n
"
,
ret
);
return
ret
;
...
...
@@ -113,7 +113,7 @@ nvkm_cstate_prog(struct nvkm_clk *clk, struct nvkm_pstate *pstate, int cstatei)
}
if
(
volt
)
{
ret
=
volt
->
set_id
(
volt
,
cstate
->
voltage
,
-
1
);
ret
=
nvkm_volt_
set_id
(
volt
,
cstate
->
voltage
,
-
1
);
if
(
ret
&&
ret
!=
-
ENODEV
)
nvkm_error
(
subdev
,
"failed to lower voltage: %d
\n
"
,
ret
);
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c
View file @
437b2296
...
...
@@ -21,44 +21,39 @@
*
* Authors: Ben Skeggs
*/
#include <subdev/volt.h>
#include "priv.h"
#include <subdev/bios.h>
#include <subdev/bios/vmap.h>
#include <subdev/bios/volt.h>
static
int
int
nvkm_volt_get
(
struct
nvkm_volt
*
volt
)
{
if
(
volt
->
vid_get
)
{
int
ret
=
volt
->
vid_get
(
volt
),
i
;
if
(
ret
>=
0
)
{
for
(
i
=
0
;
i
<
volt
->
vid_nr
;
i
++
)
{
if
(
volt
->
vid
[
i
].
vid
==
ret
)
return
volt
->
vid
[
i
].
uv
;
}
ret
=
-
EINVAL
;
int
ret
=
volt
->
func
->
vid_get
(
volt
),
i
;
if
(
ret
>=
0
)
{
for
(
i
=
0
;
i
<
volt
->
vid_nr
;
i
++
)
{
if
(
volt
->
vid
[
i
].
vid
==
ret
)
return
volt
->
vid
[
i
].
uv
;
}
ret
urn
ret
;
ret
=
-
EINVAL
;
}
return
-
ENODEV
;
return
ret
;
}
static
int
nvkm_volt_set
(
struct
nvkm_volt
*
volt
,
u32
uv
)
{
struct
nvkm_subdev
*
subdev
=
&
volt
->
subdev
;
if
(
volt
->
vid_set
)
{
int
i
,
ret
=
-
EINVAL
;
for
(
i
=
0
;
i
<
volt
->
vid_nr
;
i
++
)
{
if
(
volt
->
vid
[
i
].
uv
==
uv
)
{
ret
=
volt
->
vid_set
(
volt
,
volt
->
vid
[
i
].
vid
);
nvkm_debug
(
subdev
,
"set %duv: %d
\n
"
,
uv
,
ret
);
break
;
}
int
i
,
ret
=
-
EINVAL
;
for
(
i
=
0
;
i
<
volt
->
vid_nr
;
i
++
)
{
if
(
volt
->
vid
[
i
].
uv
==
uv
)
{
ret
=
volt
->
func
->
vid_set
(
volt
,
volt
->
vid
[
i
].
vid
);
nvkm_debug
(
subdev
,
"set %duv: %d
\n
"
,
uv
,
ret
);
break
;
}
return
ret
;
}
return
-
ENODEV
;
return
ret
;
}
static
int
...
...
@@ -83,10 +78,15 @@ nvkm_volt_map(struct nvkm_volt *volt, u8 id)
return
id
?
id
*
10000
:
-
ENODEV
;
}
static
int
int
nvkm_volt_set_id
(
struct
nvkm_volt
*
volt
,
u8
id
,
int
condition
)
{
int
ret
=
nvkm_volt_map
(
volt
,
id
);
int
ret
;
if
(
volt
->
func
->
set_id
)
return
volt
->
func
->
set_id
(
volt
,
id
,
condition
);
ret
=
nvkm_volt_map
(
volt
,
id
);
if
(
ret
>=
0
)
{
int
prev
=
nvkm_volt_get
(
volt
);
if
(
!
condition
||
prev
<
0
||
...
...
@@ -135,53 +135,41 @@ nvkm_volt_parse_bios(struct nvkm_bios *bios, struct nvkm_volt *volt)
}
}
int
_nvkm_volt_init
(
struct
nvkm_object
*
object
)
static
int
nvkm_volt_init
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_volt
*
volt
=
(
void
*
)
object
;
struct
nvkm_subdev
*
subdev
=
&
volt
->
subdev
;
int
ret
;
ret
=
nvkm_subdev_init_old
(
&
volt
->
subdev
);
if
(
ret
)
return
ret
;
ret
=
volt
->
get
(
volt
);
struct
nvkm_volt
*
volt
=
nvkm_volt
(
subdev
);
int
ret
=
nvkm_volt_get
(
volt
);
if
(
ret
<
0
)
{
if
(
ret
!=
-
ENODEV
)
nvkm_debug
(
subdev
,
"current voltage unknown
\n
"
);
return
0
;
}
nvkm_debug
(
subdev
,
"current voltage: %duv
\n
"
,
ret
);
return
0
;
}
void
_nvkm_volt_dtor
(
struct
nvkm_object
*
object
)
static
void
*
nvkm_volt_dtor
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_volt
*
volt
=
(
void
*
)
object
;
nvkm_subdev_destroy
(
&
volt
->
subdev
);
return
nvkm_volt
(
subdev
);
}
int
nvkm_volt_create_
(
struct
nvkm_object
*
parent
,
struct
nvkm_object
*
engine
,
struct
nvkm_oclass
*
oclass
,
int
length
,
void
**
pobject
)
static
const
struct
nvkm_subdev_func
nvkm_volt
=
{
.
dtor
=
nvkm_volt_dtor
,
.
init
=
nvkm_volt_init
,
};
void
nvkm_volt_ctor
(
const
struct
nvkm_volt_func
*
func
,
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_volt
*
volt
)
{
struct
nvkm_device
*
device
=
(
void
*
)
parent
;
struct
nvkm_bios
*
bios
=
device
->
bios
;
struct
nvkm_volt
*
volt
;
int
ret
,
i
;
ret
=
nvkm_subdev_create_
(
parent
,
engine
,
oclass
,
0
,
"VOLT"
,
"voltage"
,
length
,
pobject
);
volt
=
*
pobject
;
if
(
ret
)
return
ret
;
int
i
;
volt
->
get
=
nvkm_volt_get
;
volt
->
set
=
nvkm_volt_set
;
volt
->
set_id
=
nvkm_volt_set_id
;
nvkm_subdev_ctor
(
&
nvkm_volt
,
device
,
index
,
0
,
&
volt
->
subdev
);
volt
->
func
=
func
;
/* Assuming the non-bios device should build the voltage table later */
if
(
bios
)
...
...
@@ -192,16 +180,15 @@ nvkm_volt_create_(struct nvkm_object *parent, struct nvkm_object *engine,
nvkm_debug
(
&
volt
->
subdev
,
"VID %02x: %duv
\n
"
,
volt
->
vid
[
i
].
vid
,
volt
->
vid
[
i
].
uv
);
}
/*XXX: this is an assumption.. there probably exists boards
* out there with i2c-connected voltage controllers too..
*/
ret
=
nvkm_voltgpio_init
(
volt
);
if
(
ret
==
0
)
{
volt
->
vid_get
=
nvkm_voltgpio_get
;
volt
->
vid_set
=
nvkm_voltgpio_set
;
}
}
}
return
ret
;
int
nvkm_volt_new_
(
const
struct
nvkm_volt_func
*
func
,
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_volt
**
pvolt
)
{
if
(
!
(
*
pvolt
=
kzalloc
(
sizeof
(
**
pvolt
),
GFP_KERNEL
)))
return
-
ENOMEM
;
nvkm_volt_ctor
(
func
,
device
,
index
,
*
pvolt
);
return
0
;
}
drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c
View file @
437b2296
...
...
@@ -19,7 +19,9 @@
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#include <subdev/volt.h>
#define gk20a_volt(p) container_of((p), struct gk20a_volt, base)
#include "priv.h"
#ifdef __KERNEL__
#include <nouveau_platform.h>
#endif
...
...
@@ -101,9 +103,9 @@ gk20a_volt_calc_voltage(const struct cvb_coef *coef, int speedo)
}
static
int
gk20a_volt_vid_get
(
struct
nvkm_volt
*
obj
)
gk20a_volt_vid_get
(
struct
nvkm_volt
*
base
)
{
struct
gk20a_volt
*
volt
=
container_of
(
obj
,
typeof
(
*
volt
),
base
);
struct
gk20a_volt
*
volt
=
gk20a_volt
(
base
);
int
i
,
uv
;
uv
=
regulator_get_voltage
(
volt
->
vdd
);
...
...
@@ -116,9 +118,9 @@ gk20a_volt_vid_get(struct nvkm_volt *obj)
}
static
int
gk20a_volt_vid_set
(
struct
nvkm_volt
*
obj
,
u8
vid
)
gk20a_volt_vid_set
(
struct
nvkm_volt
*
base
,
u8
vid
)
{
struct
gk20a_volt
*
volt
=
container_of
(
obj
,
typeof
(
*
volt
),
base
);
struct
gk20a_volt
*
volt
=
gk20a_volt
(
base
);
struct
nvkm_subdev
*
subdev
=
&
volt
->
base
.
subdev
;
nvkm_debug
(
subdev
,
"set voltage as %duv
\n
"
,
volt
->
base
.
vid
[
vid
].
uv
);
...
...
@@ -126,9 +128,9 @@ gk20a_volt_vid_set(struct nvkm_volt *obj, u8 vid)
}
static
int
gk20a_volt_set_id
(
struct
nvkm_volt
*
obj
,
u8
id
,
int
condition
)
gk20a_volt_set_id
(
struct
nvkm_volt
*
base
,
u8
id
,
int
condition
)
{
struct
gk20a_volt
*
volt
=
container_of
(
obj
,
typeof
(
*
volt
),
base
);
struct
gk20a_volt
*
volt
=
gk20a_volt
(
base
);
struct
nvkm_subdev
*
subdev
=
&
volt
->
base
.
subdev
;
int
prev_uv
=
regulator_get_voltage
(
volt
->
vdd
);
int
target_uv
=
volt
->
base
.
vid
[
id
].
uv
;
...
...
@@ -147,27 +149,29 @@ gk20a_volt_set_id(struct nvkm_volt *obj, u8 id, int condition)
return
ret
;
}
static
int
gk20a_volt_ctor
(
struct
nvkm_object
*
parent
,
struct
nvkm_object
*
engine
,
struct
nvkm_oclass
*
oclass
,
void
*
data
,
u32
size
,
struct
nvkm_object
**
pobject
)
static
const
struct
nvkm_volt_func
gk20a_volt
=
{
.
vid_get
=
gk20a_volt_vid_get
,
.
vid_set
=
gk20a_volt_vid_set
,
.
set_id
=
gk20a_volt_set_id
,
};
int
gk20a_volt_new
(
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_volt
**
pvolt
)
{
struct
nvkm_device
*
device
=
(
void
*
)
parent
;
struct
gk20a_volt
*
volt
;
int
i
,
ret
,
uv
;
int
i
,
uv
;
if
(
!
(
volt
=
kzalloc
(
sizeof
(
*
volt
),
GFP_KERNEL
)))
return
-
ENOMEM
;
ret
=
nvkm_volt_create
(
parent
,
engine
,
oclass
,
&
volt
);
*
pobject
=
nv_object
(
volt
);
if
(
ret
)
return
ret
;
nvkm_volt_ctor
(
&
gk20a_volt
,
device
,
index
,
&
volt
->
base
);
*
pvolt
=
&
volt
->
base
;
uv
=
regulator_get_voltage
(
device
->
gpu
->
vdd
);
nvkm_info
(
&
volt
->
base
.
subdev
,
"The default voltage is %duV
\n
"
,
uv
);
volt
->
vdd
=
device
->
gpu
->
vdd
;
volt
->
base
.
vid_get
=
gk20a_volt_vid_get
;
volt
->
base
.
vid_set
=
gk20a_volt_vid_set
;
volt
->
base
.
set_id
=
gk20a_volt_set_id
;
volt
->
base
.
vid_nr
=
ARRAY_SIZE
(
gk20a_cvb_coef
);
nvkm_debug
(
&
volt
->
base
.
subdev
,
"%s - vid_nr = %d
\n
"
,
__func__
,
...
...
@@ -183,14 +187,3 @@ gk20a_volt_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
return
0
;
}
struct
nvkm_oclass
gk20a_volt_oclass
=
{
.
handle
=
NV_SUBDEV
(
VOLT
,
0xea
),
.
ofuncs
=
&
(
struct
nvkm_ofuncs
)
{
.
ctor
=
gk20a_volt_ctor
,
.
dtor
=
_nvkm_volt_dtor
,
.
init
=
_nvkm_volt_init
,
.
fini
=
_nvkm_volt_fini
,
},
};
drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.c
View file @
437b2296
...
...
@@ -21,31 +21,24 @@
*
* Authors: Ben Skeggs
*/
#include
<subdev/volt.h>
#include
"priv.h"
static
int
nv40_volt_ctor
(
struct
nvkm_object
*
parent
,
struct
nvkm_object
*
engine
,
struct
nvkm_oclass
*
oclass
,
void
*
data
,
u32
size
,
struct
nvkm_object
**
pobject
)
static
const
struct
nvkm_volt_func
nv40_volt
=
{
.
vid_get
=
nvkm_voltgpio_get
,
.
vid_set
=
nvkm_voltgpio_set
,
};
int
nv40_volt_new
(
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_volt
**
pvolt
)
{
struct
nvkm_volt
*
volt
;
int
ret
;
ret
=
nvkm_volt_
create
(
parent
,
engine
,
oclass
,
&
volt
);
*
p
object
=
nv_object
(
volt
)
;
ret
=
nvkm_volt_
new_
(
&
nv40_volt
,
device
,
index
,
&
volt
);
*
p
volt
=
volt
;
if
(
ret
)
return
ret
;
return
0
;
return
nvkm_voltgpio_init
(
volt
)
;
}
struct
nvkm_oclass
nv40_volt_oclass
=
{
.
handle
=
NV_SUBDEV
(
VOLT
,
0x40
),
.
ofuncs
=
&
(
struct
nvkm_ofuncs
)
{
.
ctor
=
nv40_volt_ctor
,
.
dtor
=
_nvkm_volt_dtor
,
.
init
=
_nvkm_volt_init
,
.
fini
=
_nvkm_volt_fini
,
},
};
drivers/gpu/drm/nouveau/nvkm/subdev/volt/priv.h
0 → 100644
View file @
437b2296
#ifndef __NVKM_VOLT_PRIV_H__
#define __NVKM_VOLT_PRIV_H__
#define nvkm_volt(p) container_of((p), struct nvkm_volt, subdev)
#include <subdev/volt.h>
void
nvkm_volt_ctor
(
const
struct
nvkm_volt_func
*
,
struct
nvkm_device
*
,
int
index
,
struct
nvkm_volt
*
);
int
nvkm_volt_new_
(
const
struct
nvkm_volt_func
*
,
struct
nvkm_device
*
,
int
index
,
struct
nvkm_volt
**
);
struct
nvkm_volt_func
{
int
(
*
vid_get
)(
struct
nvkm_volt
*
);
int
(
*
vid_set
)(
struct
nvkm_volt
*
,
u8
vid
);
int
(
*
set_id
)(
struct
nvkm_volt
*
,
u8
id
,
int
condition
);
};
int
nvkm_voltgpio_init
(
struct
nvkm_volt
*
);
int
nvkm_voltgpio_get
(
struct
nvkm_volt
*
);
int
nvkm_voltgpio_set
(
struct
nvkm_volt
*
,
u8
);
#endif
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