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
1167c6bc
Commit
1167c6bc
authored
May 18, 2016
by
Ben Skeggs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
drm/nouveau: allocate device object for every client
Signed-off-by:
Ben Skeggs
<
bskeggs@redhat.com
>
parent
80e60973
Changes
32
Hide whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
310 additions
and
305 deletions
+310
-305
drivers/gpu/drm/nouveau/dispnv04/arb.c
drivers/gpu/drm/nouveau/dispnv04/arb.c
+3
-3
drivers/gpu/drm/nouveau/dispnv04/crtc.c
drivers/gpu/drm/nouveau/dispnv04/crtc.c
+19
-19
drivers/gpu/drm/nouveau/dispnv04/cursor.c
drivers/gpu/drm/nouveau/dispnv04/cursor.c
+1
-1
drivers/gpu/drm/nouveau/dispnv04/dac.c
drivers/gpu/drm/nouveau/dispnv04/dac.c
+9
-9
drivers/gpu/drm/nouveau/dispnv04/dfp.c
drivers/gpu/drm/nouveau/dispnv04/dfp.c
+6
-6
drivers/gpu/drm/nouveau/dispnv04/disp.c
drivers/gpu/drm/nouveau/dispnv04/disp.c
+3
-3
drivers/gpu/drm/nouveau/dispnv04/disp.h
drivers/gpu/drm/nouveau/dispnv04/disp.h
+3
-3
drivers/gpu/drm/nouveau/dispnv04/hw.c
drivers/gpu/drm/nouveau/dispnv04/hw.c
+40
-40
drivers/gpu/drm/nouveau/dispnv04/hw.h
drivers/gpu/drm/nouveau/dispnv04/hw.h
+21
-21
drivers/gpu/drm/nouveau/dispnv04/overlay.c
drivers/gpu/drm/nouveau/dispnv04/overlay.c
+8
-8
drivers/gpu/drm/nouveau/dispnv04/tvnv04.c
drivers/gpu/drm/nouveau/dispnv04/tvnv04.c
+2
-2
drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
+8
-8
drivers/gpu/drm/nouveau/dispnv04/tvnv17.h
drivers/gpu/drm/nouveau/dispnv04/tvnv17.h
+2
-2
drivers/gpu/drm/nouveau/nouveau_abi16.c
drivers/gpu/drm/nouveau/nouveau_abi16.c
+2
-2
drivers/gpu/drm/nouveau/nouveau_backlight.c
drivers/gpu/drm/nouveau/nouveau_backlight.c
+12
-12
drivers/gpu/drm/nouveau/nouveau_bios.c
drivers/gpu/drm/nouveau/nouveau_bios.c
+9
-9
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_bo.c
+26
-26
drivers/gpu/drm/nouveau/nouveau_connector.c
drivers/gpu/drm/nouveau/nouveau_connector.c
+9
-9
drivers/gpu/drm/nouveau/nouveau_debugfs.c
drivers/gpu/drm/nouveau/nouveau_debugfs.c
+3
-2
drivers/gpu/drm/nouveau/nouveau_display.c
drivers/gpu/drm/nouveau/nouveau_display.c
+7
-7
drivers/gpu/drm/nouveau/nouveau_drm.c
drivers/gpu/drm/nouveau/nouveau_drm.c
+31
-28
drivers/gpu/drm/nouveau/nouveau_drv.h
drivers/gpu/drm/nouveau/nouveau_drv.h
+2
-1
drivers/gpu/drm/nouveau/nouveau_fbcon.c
drivers/gpu/drm/nouveau/nouveau_fbcon.c
+8
-8
drivers/gpu/drm/nouveau/nouveau_gem.c
drivers/gpu/drm/nouveau/nouveau_gem.c
+5
-5
drivers/gpu/drm/nouveau/nouveau_hwmon.c
drivers/gpu/drm/nouveau/nouveau_hwmon.c
+33
-33
drivers/gpu/drm/nouveau/nouveau_led.c
drivers/gpu/drm/nouveau/nouveau_led.c
+3
-3
drivers/gpu/drm/nouveau/nouveau_sgdma.c
drivers/gpu/drm/nouveau/nouveau_sgdma.c
+1
-1
drivers/gpu/drm/nouveau/nouveau_ttm.c
drivers/gpu/drm/nouveau/nouveau_ttm.c
+14
-14
drivers/gpu/drm/nouveau/nouveau_vga.c
drivers/gpu/drm/nouveau/nouveau_vga.c
+4
-4
drivers/gpu/drm/nouveau/nv04_fbcon.c
drivers/gpu/drm/nouveau/nv04_fbcon.c
+1
-1
drivers/gpu/drm/nouveau/nv50_display.c
drivers/gpu/drm/nouveau/nv50_display.c
+13
-13
drivers/gpu/drm/nouveau/nv84_fence.c
drivers/gpu/drm/nouveau/nv84_fence.c
+2
-2
No files found.
drivers/gpu/drm/nouveau/dispnv04/arb.c
View file @
1167c6bc
...
...
@@ -198,7 +198,7 @@ nv04_update_arb(struct drm_device *dev, int VClk, int bpp,
int
*
burst
,
int
*
lwm
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
struct
nv_fifo_info
fifo_data
;
struct
nv_sim_state
sim_data
;
int
MClk
=
nouveau_hw_get_clock
(
dev
,
PLL_MEMORY
);
...
...
@@ -227,7 +227,7 @@ nv04_update_arb(struct drm_device *dev, int VClk, int bpp,
sim_data
.
mem_page_miss
=
((
cfg1
>>
4
)
&
0xf
)
+
((
cfg1
>>
31
)
&
0x1
);
}
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_TNT
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_TNT
)
nv04_calc_arb
(
&
fifo_data
,
&
sim_data
);
else
nv10_calc_arb
(
&
fifo_data
,
&
sim_data
);
...
...
@@ -254,7 +254,7 @@ nouveau_calc_arb(struct drm_device *dev, int vclk, int bpp, int *burst, int *lwm
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_KELVIN
)
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_KELVIN
)
nv04_update_arb
(
dev
,
vclk
,
bpp
,
burst
,
lwm
);
else
if
((
dev
->
pdev
->
device
&
0xfff0
)
==
0x0240
/*CHIPSET_C51*/
||
(
dev
->
pdev
->
device
&
0xfff0
)
==
0x03d0
/*CHIPSET_C512*/
)
{
...
...
drivers/gpu/drm/nouveau/dispnv04/crtc.c
View file @
1167c6bc
...
...
@@ -113,8 +113,8 @@ static void nv_crtc_calc_state_ext(struct drm_crtc *crtc, struct drm_display_mod
{
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_bios
*
bios
=
nvxx_bios
(
&
drm
->
device
);
struct
nvkm_clk
*
clk
=
nvxx_clk
(
&
drm
->
device
);
struct
nvkm_bios
*
bios
=
nvxx_bios
(
&
drm
->
client
.
device
);
struct
nvkm_clk
*
clk
=
nvxx_clk
(
&
drm
->
client
.
device
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nv04_mode_state
*
state
=
&
nv04_display
(
dev
)
->
mode_reg
;
struct
nv04_crtc_reg
*
regp
=
&
state
->
crtc_reg
[
nv_crtc
->
index
];
...
...
@@ -138,7 +138,7 @@ static void nv_crtc_calc_state_ext(struct drm_crtc *crtc, struct drm_display_mod
* has yet been observed in allowing the use a single stage pll on all
* nv43 however. the behaviour of single stage use is untested on nv40
*/
if
(
drm
->
device
.
info
.
chipset
>
0x40
&&
dot_clock
<=
(
pll_lim
.
vco1
.
max_freq
/
2
))
if
(
drm
->
client
.
device
.
info
.
chipset
>
0x40
&&
dot_clock
<=
(
pll_lim
.
vco1
.
max_freq
/
2
))
memset
(
&
pll_lim
.
vco2
,
0
,
sizeof
(
pll_lim
.
vco2
));
...
...
@@ -148,10 +148,10 @@ static void nv_crtc_calc_state_ext(struct drm_crtc *crtc, struct drm_display_mod
state
->
pllsel
&=
PLLSEL_VPLL1_MASK
|
PLLSEL_VPLL2_MASK
|
PLLSEL_TV_MASK
;
/* The blob uses this always, so let's do the same */
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
state
->
pllsel
|=
NV_PRAMDAC_PLL_COEFF_SELECT_USE_VPLL2_TRUE
;
/* again nv40 and some nv43 act more like nv3x as described above */
if
(
drm
->
device
.
info
.
chipset
<
0x41
)
if
(
drm
->
client
.
device
.
info
.
chipset
<
0x41
)
state
->
pllsel
|=
NV_PRAMDAC_PLL_COEFF_SELECT_SOURCE_PROG_MPLL
|
NV_PRAMDAC_PLL_COEFF_SELECT_SOURCE_PROG_NVPLL
;
state
->
pllsel
|=
nv_crtc
->
index
?
PLLSEL_VPLL2_MASK
:
PLLSEL_VPLL1_MASK
;
...
...
@@ -270,7 +270,7 @@ nv_crtc_mode_set_vga(struct drm_crtc *crtc, struct drm_display_mode *mode)
horizEnd
=
horizTotal
-
2
;
horizBlankEnd
=
horizTotal
+
4
;
#if 0
if (dev->overlayAdaptor && drm->device.info.family >= NV_DEVICE_INFO_V0_CELSIUS)
if (dev->overlayAdaptor && drm->
client.
device.info.family >= NV_DEVICE_INFO_V0_CELSIUS)
/* This reportedly works around some video overlay bandwidth problems */
horizTotal += 2;
#endif
...
...
@@ -505,7 +505,7 @@ nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode)
regp
->
cursor_cfg
=
NV_PCRTC_CURSOR_CONFIG_CUR_LINES_64
|
NV_PCRTC_CURSOR_CONFIG_CUR_PIXELS_64
|
NV_PCRTC_CURSOR_CONFIG_ADDRESS_SPACE_PNVM
;
if
(
drm
->
device
.
info
.
chipset
>=
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x11
)
regp
->
cursor_cfg
|=
NV_PCRTC_CURSOR_CONFIG_CUR_BPP_32
;
if
(
mode
->
flags
&
DRM_MODE_FLAG_DBLSCAN
)
regp
->
cursor_cfg
|=
NV_PCRTC_CURSOR_CONFIG_DOUBLE_SCAN_ENABLE
;
...
...
@@ -546,26 +546,26 @@ nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode)
* 1 << 30 on 0x60.830), for no apparent reason */
regp
->
CRTC
[
NV_CIO_CRE_59
]
=
off_chip_digital
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
regp
->
CRTC
[
0x9f
]
=
off_chip_digital
?
0x11
:
0x1
;
regp
->
crtc_830
=
mode
->
crtc_vdisplay
-
3
;
regp
->
crtc_834
=
mode
->
crtc_vdisplay
-
1
;
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
/* This is what the blob does */
regp
->
crtc_850
=
NVReadCRTC
(
dev
,
0
,
NV_PCRTC_850
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
regp
->
gpio_ext
=
NVReadCRTC
(
dev
,
0
,
NV_PCRTC_GPIO_EXT
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
regp
->
crtc_cfg
=
NV10_PCRTC_CONFIG_START_ADDRESS_HSYNC
;
else
regp
->
crtc_cfg
=
NV04_PCRTC_CONFIG_START_ADDRESS_HSYNC
;
/* Some misc regs */
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
regp
->
CRTC
[
NV_CIO_CRE_85
]
=
0xFF
;
regp
->
CRTC
[
NV_CIO_CRE_86
]
=
0x1
;
}
...
...
@@ -577,7 +577,7 @@ nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode)
/* Generic PRAMDAC regs */
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
/* Only bit that bios and blob set. */
regp
->
nv10_cursync
=
(
1
<<
25
);
...
...
@@ -586,7 +586,7 @@ nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode)
NV_PRAMDAC_GENERAL_CONTROL_PIXMIX_ON
;
if
(
fb
->
format
->
depth
==
16
)
regp
->
ramdac_gen_ctrl
|=
NV_PRAMDAC_GENERAL_CONTROL_ALT_MODE_SEL
;
if
(
drm
->
device
.
info
.
chipset
>=
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x11
)
regp
->
ramdac_gen_ctrl
|=
NV_PRAMDAC_GENERAL_CONTROL_PIPE_LONG
;
regp
->
ramdac_630
=
0
;
/* turn off green mode (tv test pattern?) */
...
...
@@ -649,7 +649,7 @@ nv_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
nv_crtc_mode_set_vga
(
crtc
,
adjusted_mode
);
/* calculated in nv04_dfp_prepare, nv40 needs it written before calculating PLLs */
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
,
nv04_display
(
dev
)
->
mode_reg
.
sel_clk
);
nv_crtc_mode_set_regs
(
crtc
,
adjusted_mode
);
nv_crtc_calc_state_ext
(
crtc
,
mode
,
adjusted_mode
->
clock
);
...
...
@@ -710,7 +710,7 @@ static void nv_crtc_prepare(struct drm_crtc *crtc)
/* Some more preparation. */
NVWriteCRTC
(
dev
,
nv_crtc
->
index
,
NV_PCRTC_CONFIG
,
NV_PCRTC_CONFIG_START_ADDRESS_NON_VGA
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
uint32_t
reg900
=
NVReadRAMDAC
(
dev
,
nv_crtc
->
index
,
NV_PRAMDAC_900
);
NVWriteRAMDAC
(
dev
,
nv_crtc
->
index
,
NV_PRAMDAC_900
,
reg900
&
~
0x10000
);
}
...
...
@@ -886,7 +886,7 @@ nv04_crtc_do_mode_set_base(struct drm_crtc *crtc,
crtc_wr_cio_state
(
crtc
,
regp
,
NV_CIO_CRE_FF_INDEX
);
crtc_wr_cio_state
(
crtc
,
regp
,
NV_CIO_CRE_FFLWM__INDEX
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_KELVIN
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_KELVIN
)
{
regp
->
CRTC
[
NV_CIO_CRE_47
]
=
arb_lwm
>>
8
;
crtc_wr_cio_state
(
crtc
,
regp
,
NV_CIO_CRE_47
);
}
...
...
@@ -967,7 +967,7 @@ static void nv11_cursor_upload(struct drm_device *dev, struct nouveau_bo *src,
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
if
(
drm
->
device
.
info
.
chipset
==
0x11
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
)
{
pixel
=
((
pixel
&
0x000000ff
)
<<
24
)
|
((
pixel
&
0x0000ff00
)
<<
8
)
|
((
pixel
&
0x00ff0000
)
>>
8
)
|
...
...
@@ -1008,7 +1008,7 @@ nv04_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv,
if
(
ret
)
goto
out
;
if
(
drm
->
device
.
info
.
chipset
>=
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x11
)
nv11_cursor_upload
(
dev
,
cursor
,
nv_crtc
->
cursor
.
nvbo
);
else
nv04_cursor_upload
(
dev
,
cursor
,
nv_crtc
->
cursor
.
nvbo
);
...
...
drivers/gpu/drm/nouveau/dispnv04/cursor.c
View file @
1167c6bc
...
...
@@ -55,7 +55,7 @@ nv04_cursor_set_offset(struct nouveau_crtc *nv_crtc, uint32_t offset)
crtc_wr_cio_state
(
crtc
,
regp
,
NV_CIO_CRE_HCUR_ADDR0_INDEX
);
crtc_wr_cio_state
(
crtc
,
regp
,
NV_CIO_CRE_HCUR_ADDR1_INDEX
);
crtc_wr_cio_state
(
crtc
,
regp
,
NV_CIO_CRE_HCUR_ADDR2_INDEX
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
nv_fix_nv40_hw_cursor
(
dev
,
nv_crtc
->
index
);
}
...
...
drivers/gpu/drm/nouveau/dispnv04/dac.c
View file @
1167c6bc
...
...
@@ -66,7 +66,7 @@ int nv04_dac_output_offset(struct drm_encoder *encoder)
static
int
sample_load_twice
(
struct
drm_device
*
dev
,
bool
sense
[
2
])
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
int
i
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
...
...
@@ -80,19 +80,19 @@ static int sample_load_twice(struct drm_device *dev, bool sense[2])
* use a 10ms timeout (guards against crtc being inactive, in
* which case blank state would never change)
*/
if
(
nvif_msec
(
&
drm
->
device
,
10
,
if
(
nvif_msec
(
&
drm
->
client
.
device
,
10
,
if
(
!
(
nvif_rd32
(
device
,
NV_PRMCIO_INP0__COLOR
)
&
1
))
break
;
)
<
0
)
return
-
EBUSY
;
if
(
nvif_msec
(
&
drm
->
device
,
10
,
if
(
nvif_msec
(
&
drm
->
client
.
device
,
10
,
if
(
(
nvif_rd32
(
device
,
NV_PRMCIO_INP0__COLOR
)
&
1
))
break
;
)
<
0
)
return
-
EBUSY
;
if
(
nvif_msec
(
&
drm
->
device
,
10
,
if
(
nvif_msec
(
&
drm
->
client
.
device
,
10
,
if
(
!
(
nvif_rd32
(
device
,
NV_PRMCIO_INP0__COLOR
)
&
1
))
break
;
)
<
0
)
...
...
@@ -133,7 +133,7 @@ static enum drm_connector_status nv04_dac_detect(struct drm_encoder *encoder,
struct
drm_connector
*
connector
)
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
uint8_t
saved_seq1
,
saved_pi
,
saved_rpc1
,
saved_cr_mode
;
uint8_t
saved_palette0
[
3
],
saved_palette_mask
;
...
...
@@ -236,8 +236,8 @@ uint32_t nv17_dac_sample_load(struct drm_encoder *encoder)
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
device
);
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
client
.
device
);
struct
dcb_output
*
dcb
=
nouveau_encoder
(
encoder
)
->
dcb
;
uint32_t
sample
,
testval
,
regoffset
=
nv04_dac_output_offset
(
encoder
);
uint32_t
saved_powerctrl_2
=
0
,
saved_powerctrl_4
=
0
,
saved_routput
,
...
...
@@ -288,7 +288,7 @@ uint32_t nv17_dac_sample_load(struct drm_encoder *encoder)
/* nv driver and nv31 use 0xfffffeee, nv34 and 6600 use 0xfffffece */
routput
=
(
saved_routput
&
0xfffffece
)
|
head
<<
8
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CURIE
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CURIE
)
{
if
(
dcb
->
type
==
DCB_OUTPUT_TV
)
routput
|=
0x1a
<<
16
;
else
...
...
@@ -403,7 +403,7 @@ static void nv04_dac_mode_set(struct drm_encoder *encoder,
}
/* This could use refinement for flatpanels, but it should work this way */
if
(
drm
->
device
.
info
.
chipset
<
0x44
)
if
(
drm
->
client
.
device
.
info
.
chipset
<
0x44
)
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_TEST_CONTROL
+
nv04_dac_output_offset
(
encoder
),
0xf0000000
);
else
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_TEST_CONTROL
+
nv04_dac_output_offset
(
encoder
),
0x00100000
);
...
...
drivers/gpu/drm/nouveau/dispnv04/dfp.c
View file @
1167c6bc
...
...
@@ -281,7 +281,7 @@ static void nv04_dfp_mode_set(struct drm_encoder *encoder,
struct
drm_display_mode
*
adjusted_mode
)
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
encoder
->
crtc
);
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
...
...
@@ -417,7 +417,7 @@ static void nv04_dfp_mode_set(struct drm_encoder *encoder,
if
((
nv_connector
->
dithering_mode
==
DITHERING_MODE_ON
)
||
(
nv_connector
->
dithering_mode
==
DITHERING_MODE_AUTO
&&
fb
->
format
->
depth
>
connector
->
display_info
.
bpc
*
3
))
{
if
(
drm
->
device
.
info
.
chipset
==
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
)
regp
->
dither
=
savep
->
dither
|
0x00010000
;
else
{
int
i
;
...
...
@@ -428,7 +428,7 @@ static void nv04_dfp_mode_set(struct drm_encoder *encoder,
}
}
}
else
{
if
(
drm
->
device
.
info
.
chipset
!=
0x11
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
!=
0x11
)
{
/* reset them */
int
i
;
for
(
i
=
0
;
i
<
3
;
i
++
)
{
...
...
@@ -464,7 +464,7 @@ static void nv04_dfp_commit(struct drm_encoder *encoder)
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_FP_TG_CONTROL
);
/* This could use refinement for flatpanels, but it should work this way */
if
(
drm
->
device
.
info
.
chipset
<
0x44
)
if
(
drm
->
client
.
device
.
info
.
chipset
<
0x44
)
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_TEST_CONTROL
+
nv04_dac_output_offset
(
encoder
),
0xf0000000
);
else
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_TEST_CONTROL
+
nv04_dac_output_offset
(
encoder
),
0x00100000
);
...
...
@@ -486,7 +486,7 @@ static void nv04_dfp_update_backlight(struct drm_encoder *encoder, int mode)
{
#ifdef __powerpc__
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
/* BIOS scripts usually take care of the backlight, thanks
* Apple for your consistency.
...
...
@@ -624,7 +624,7 @@ static void nv04_tmds_slave_init(struct drm_encoder *encoder)
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
dcb_output
*
dcb
=
nouveau_encoder
(
encoder
)
->
dcb
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
device
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
client
.
device
);
struct
nvkm_i2c_bus
*
bus
=
nvkm_i2c_bus_find
(
i2c
,
NVKM_I2C_BUS_PRI
);
struct
nvkm_i2c_bus_probe
info
[]
=
{
{
...
...
drivers/gpu/drm/nouveau/dispnv04/disp.c
View file @
1167c6bc
...
...
@@ -35,7 +35,7 @@ int
nv04_display_create
(
struct
drm_device
*
dev
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
device
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
client
.
device
);
struct
dcb_table
*
dcb
=
&
drm
->
vbios
.
dcb
;
struct
drm_connector
*
connector
,
*
ct
;
struct
drm_encoder
*
encoder
;
...
...
@@ -48,7 +48,7 @@ nv04_display_create(struct drm_device *dev)
if
(
!
disp
)
return
-
ENOMEM
;
nvif_object_map
(
&
drm
->
device
.
object
);
nvif_object_map
(
&
drm
->
client
.
device
.
object
);
nouveau_display
(
dev
)
->
priv
=
disp
;
nouveau_display
(
dev
)
->
dtor
=
nv04_display_destroy
;
...
...
@@ -139,7 +139,7 @@ nv04_display_destroy(struct drm_device *dev)
nouveau_display
(
dev
)
->
priv
=
NULL
;
kfree
(
disp
);
nvif_object_unmap
(
&
drm
->
device
.
object
);
nvif_object_unmap
(
&
drm
->
client
.
device
.
object
);
}
int
...
...
drivers/gpu/drm/nouveau/dispnv04/disp.h
View file @
1167c6bc
...
...
@@ -129,7 +129,7 @@ nv_two_heads(struct drm_device *dev)
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
const
int
impl
=
dev
->
pdev
->
device
&
0x0ff0
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
&&
impl
!=
0x0100
&&
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
&&
impl
!=
0x0100
&&
impl
!=
0x0150
&&
impl
!=
0x01a0
&&
impl
!=
0x0200
)
return
true
;
...
...
@@ -148,7 +148,7 @@ nv_two_reg_pll(struct drm_device *dev)
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
const
int
impl
=
dev
->
pdev
->
device
&
0x0ff0
;
if
(
impl
==
0x0310
||
impl
==
0x0340
||
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CURIE
)
if
(
impl
==
0x0310
||
impl
==
0x0340
||
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CURIE
)
return
true
;
return
false
;
}
...
...
@@ -170,7 +170,7 @@ nouveau_bios_run_init_table(struct drm_device *dev, u16 table,
struct
dcb_output
*
outp
,
int
crtc
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_bios
*
bios
=
nvxx_bios
(
&
drm
->
device
);
struct
nvkm_bios
*
bios
=
nvxx_bios
(
&
drm
->
client
.
device
);
struct
nvbios_init
init
=
{
.
subdev
=
&
bios
->
subdev
,
.
bios
=
bios
,
...
...
drivers/gpu/drm/nouveau/dispnv04/hw.c
View file @
1167c6bc
...
...
@@ -89,7 +89,7 @@ NVSetOwner(struct drm_device *dev, int owner)
if
(
owner
==
1
)
owner
*=
3
;
if
(
drm
->
device
.
info
.
chipset
==
0x11
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
)
{
/* This might seem stupid, but the blob does it and
* omitting it often locks the system up.
*/
...
...
@@ -100,7 +100,7 @@ NVSetOwner(struct drm_device *dev, int owner)
/* CR44 is always changed on CRTC0 */
NVWriteVgaCrtc
(
dev
,
0
,
NV_CIO_CRE_44
,
owner
);
if
(
drm
->
device
.
info
.
chipset
==
0x11
)
{
/* set me harder */
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
)
{
/* set me harder */
NVWriteVgaCrtc
(
dev
,
0
,
NV_CIO_CRE_2E
,
owner
);
NVWriteVgaCrtc
(
dev
,
0
,
NV_CIO_CRE_2E
,
owner
);
}
...
...
@@ -149,7 +149,7 @@ nouveau_hw_decode_pll(struct drm_device *dev, uint32_t reg1, uint32_t pll1,
pllvals
->
NM1
=
pll1
&
0xffff
;
if
(
nv_two_reg_pll
(
dev
)
&&
pll2
&
NV31_RAMDAC_ENABLE_VCO2
)
pllvals
->
NM2
=
pll2
&
0xffff
;
else
if
(
drm
->
device
.
info
.
chipset
==
0x30
||
drm
->
device
.
info
.
chipset
==
0x35
)
{
else
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x30
||
drm
->
client
.
device
.
info
.
chipset
==
0x35
)
{
pllvals
->
M1
&=
0xf
;
/* only 4 bits */
if
(
pll1
&
NV30_RAMDAC_ENABLE_VCO2
)
{
pllvals
->
M2
=
(
pll1
>>
4
)
&
0x7
;
...
...
@@ -165,8 +165,8 @@ nouveau_hw_get_pllvals(struct drm_device *dev, enum nvbios_pll_type plltype,
struct
nvkm_pll_vals
*
pllvals
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvkm_bios
*
bios
=
nvxx_bios
(
&
drm
->
device
);
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
struct
nvkm_bios
*
bios
=
nvxx_bios
(
&
drm
->
client
.
device
);
uint32_t
reg1
,
pll1
,
pll2
=
0
;
struct
nvbios_pll
pll_lim
;
int
ret
;
...
...
@@ -184,7 +184,7 @@ nouveau_hw_get_pllvals(struct drm_device *dev, enum nvbios_pll_type plltype,
pll2
=
nvif_rd32
(
device
,
reg2
);
}
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CELSIUS
&&
reg1
>=
NV_PRAMDAC_VPLL_COEFF
)
{
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CELSIUS
&&
reg1
>=
NV_PRAMDAC_VPLL_COEFF
)
{
uint32_t
ramdac580
=
NVReadRAMDAC
(
dev
,
0
,
NV_PRAMDAC_580
);
/* check whether vpll has been forced into single stage mode */
...
...
@@ -252,7 +252,7 @@ nouveau_hw_fix_bad_vpll(struct drm_device *dev, int head)
*/
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
struct
nvkm_clk
*
clk
=
nvxx_clk
(
device
);
struct
nvkm_bios
*
bios
=
nvxx_bios
(
device
);
struct
nvbios_pll
pll_lim
;
...
...
@@ -391,21 +391,21 @@ nv_save_state_ramdac(struct drm_device *dev, int head,
struct
nv04_crtc_reg
*
regp
=
&
state
->
crtc_reg
[
head
];
int
i
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
regp
->
nv10_cursync
=
NVReadRAMDAC
(
dev
,
head
,
NV_RAMDAC_NV10_CURSYNC
);
nouveau_hw_get_pllvals
(
dev
,
head
?
PLL_VPLL1
:
PLL_VPLL0
,
&
regp
->
pllvals
);
state
->
pllsel
=
NVReadRAMDAC
(
dev
,
0
,
NV_PRAMDAC_PLL_COEFF_SELECT
);
if
(
nv_two_heads
(
dev
))
state
->
sel_clk
=
NVReadRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
);
if
(
drm
->
device
.
info
.
chipset
==
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
)
regp
->
dither
=
NVReadRAMDAC
(
dev
,
head
,
NV_RAMDAC_DITHER_NV11
);
regp
->
ramdac_gen_ctrl
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_GENERAL_CONTROL
);
if
(
nv_gf4_disp_arch
(
dev
))
regp
->
ramdac_630
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_630
);
if
(
drm
->
device
.
info
.
chipset
>=
0x30
)
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x30
)
regp
->
ramdac_634
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_634
);
regp
->
tv_setup
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_TV_SETUP
);
...
...
@@ -447,7 +447,7 @@ nv_save_state_ramdac(struct drm_device *dev, int head,
if
(
nv_gf4_disp_arch
(
dev
))
regp
->
ramdac_8c0
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_8C0
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
regp
->
ramdac_a20
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_A20
);
regp
->
ramdac_a24
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_A24
);
regp
->
ramdac_a34
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_A34
);
...
...
@@ -463,26 +463,26 @@ nv_load_state_ramdac(struct drm_device *dev, int head,
struct
nv04_mode_state
*
state
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_clk
*
clk
=
nvxx_clk
(
&
drm
->
device
);
struct
nvkm_clk
*
clk
=
nvxx_clk
(
&
drm
->
client
.
device
);
struct
nv04_crtc_reg
*
regp
=
&
state
->
crtc_reg
[
head
];
uint32_t
pllreg
=
head
?
NV_RAMDAC_VPLL2
:
NV_PRAMDAC_VPLL_COEFF
;
int
i
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
NVWriteRAMDAC
(
dev
,
head
,
NV_RAMDAC_NV10_CURSYNC
,
regp
->
nv10_cursync
);
clk
->
pll_prog
(
clk
,
pllreg
,
&
regp
->
pllvals
);
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_PLL_COEFF_SELECT
,
state
->
pllsel
);
if
(
nv_two_heads
(
dev
))
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
,
state
->
sel_clk
);
if
(
drm
->
device
.
info
.
chipset
==
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
)
NVWriteRAMDAC
(
dev
,
head
,
NV_RAMDAC_DITHER_NV11
,
regp
->
dither
);
NVWriteRAMDAC
(
dev
,
head
,
NV_PRAMDAC_GENERAL_CONTROL
,
regp
->
ramdac_gen_ctrl
);
if
(
nv_gf4_disp_arch
(
dev
))
NVWriteRAMDAC
(
dev
,
head
,
NV_PRAMDAC_630
,
regp
->
ramdac_630
);
if
(
drm
->
device
.
info
.
chipset
>=
0x30
)
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x30
)
NVWriteRAMDAC
(
dev
,
head
,
NV_PRAMDAC_634
,
regp
->
ramdac_634
);
NVWriteRAMDAC
(
dev
,
head
,
NV_PRAMDAC_TV_SETUP
,
regp
->
tv_setup
);
...
...
@@ -519,7 +519,7 @@ nv_load_state_ramdac(struct drm_device *dev, int head,
if
(
nv_gf4_disp_arch
(
dev
))
NVWriteRAMDAC
(
dev
,
head
,
NV_PRAMDAC_8C0
,
regp
->
ramdac_8c0
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
NVWriteRAMDAC
(
dev
,
head
,
NV_PRAMDAC_A20
,
regp
->
ramdac_a20
);
NVWriteRAMDAC
(
dev
,
head
,
NV_PRAMDAC_A24
,
regp
->
ramdac_a24
);
NVWriteRAMDAC
(
dev
,
head
,
NV_PRAMDAC_A34
,
regp
->
ramdac_a34
);
...
...
@@ -600,10 +600,10 @@ nv_save_state_ext(struct drm_device *dev, int head,
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_FFLWM__INDEX
);
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_21
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_KELVIN
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_KELVIN
)
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_47
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
rd_cio_state
(
dev
,
head
,
regp
,
0x9f
);
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_49
);
...
...
@@ -612,14 +612,14 @@ nv_save_state_ext(struct drm_device *dev, int head,
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_HCUR_ADDR2_INDEX
);
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_ILACE__INDEX
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
regp
->
crtc_830
=
NVReadCRTC
(
dev
,
head
,
NV_PCRTC_830
);
regp
->
crtc_834
=
NVReadCRTC
(
dev
,
head
,
NV_PCRTC_834
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
regp
->
gpio_ext
=
NVReadCRTC
(
dev
,
head
,
NV_PCRTC_GPIO_EXT
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
regp
->
crtc_850
=
NVReadCRTC
(
dev
,
head
,
NV_PCRTC_850
);
if
(
nv_two_heads
(
dev
))
...
...
@@ -631,7 +631,7 @@ nv_save_state_ext(struct drm_device *dev, int head,
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_SCRATCH3__INDEX
);
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_SCRATCH4__INDEX
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_EBR_INDEX
);
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_CSB
);
rd_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_4B
);
...
...
@@ -660,12 +660,12 @@ nv_load_state_ext(struct drm_device *dev, int head,
struct
nv04_mode_state
*
state
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
struct
nv04_crtc_reg
*
regp
=
&
state
->
crtc_reg
[
head
];
uint32_t
reg900
;
int
i
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
if
(
nv_two_heads
(
dev
))
/* setting ENGINE_CTRL (EC) *must* come before
* CIO_CRE_LCD, as writing CRE_LCD sets bits 16 & 17 in
...
...
@@ -677,20 +677,20 @@ nv_load_state_ext(struct drm_device *dev, int head,
nvif_wr32
(
device
,
NV_PVIDEO_INTR_EN
,
0
);
nvif_wr32
(
device
,
NV_PVIDEO_OFFSET_BUFF
(
0
),
0
);
nvif_wr32
(
device
,
NV_PVIDEO_OFFSET_BUFF
(
1
),
0
);
nvif_wr32
(
device
,
NV_PVIDEO_LIMIT
(
0
),
drm
->
device
.
info
.
ram_size
-
1
);
nvif_wr32
(
device
,
NV_PVIDEO_LIMIT
(
1
),
drm
->
device
.
info
.
ram_size
-
1
);
nvif_wr32
(
device
,
NV_PVIDEO_UVPLANE_LIMIT
(
0
),
drm
->
device
.
info
.
ram_size
-
1
);
nvif_wr32
(
device
,
NV_PVIDEO_UVPLANE_LIMIT
(
1
),
drm
->
device
.
info
.
ram_size
-
1
);
nvif_wr32
(
device
,
NV_PVIDEO_LIMIT
(
0
),
drm
->
client
.
device
.
info
.
ram_size
-
1
);
nvif_wr32
(
device
,
NV_PVIDEO_LIMIT
(
1
),
drm
->
client
.
device
.
info
.
ram_size
-
1
);
nvif_wr32
(
device
,
NV_PVIDEO_UVPLANE_LIMIT
(
0
),
drm
->
client
.
device
.
info
.
ram_size
-
1
);
nvif_wr32
(
device
,
NV_PVIDEO_UVPLANE_LIMIT
(
1
),
drm
->
client
.
device
.
info
.
ram_size
-
1
);
nvif_wr32
(
device
,
NV_PBUS_POWERCTRL_2
,
0
);
NVWriteCRTC
(
dev
,
head
,
NV_PCRTC_CURSOR_CONFIG
,
regp
->
cursor_cfg
);
NVWriteCRTC
(
dev
,
head
,
NV_PCRTC_830
,
regp
->
crtc_830
);
NVWriteCRTC
(
dev
,
head
,
NV_PCRTC_834
,
regp
->
crtc_834
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
NVWriteCRTC
(
dev
,
head
,
NV_PCRTC_GPIO_EXT
,
regp
->
gpio_ext
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
{
NVWriteCRTC
(
dev
,
head
,
NV_PCRTC_850
,
regp
->
crtc_850
);
reg900
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_900
);
...
...
@@ -713,23 +713,23 @@ nv_load_state_ext(struct drm_device *dev, int head,
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_FF_INDEX
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_FFLWM__INDEX
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_KELVIN
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_KELVIN
)
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_47
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
wr_cio_state
(
dev
,
head
,
regp
,
0x9f
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_49
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_HCUR_ADDR0_INDEX
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_HCUR_ADDR1_INDEX
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_HCUR_ADDR2_INDEX
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
nv_fix_nv40_hw_cursor
(
dev
,
head
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_ILACE__INDEX
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_SCRATCH3__INDEX
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_SCRATCH4__INDEX
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_EBR_INDEX
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_CSB
);
wr_cio_state
(
dev
,
head
,
regp
,
NV_CIO_CRE_4B
);
...
...
@@ -737,14 +737,14 @@ nv_load_state_ext(struct drm_device *dev, int head,
}
/* NV11 and NV20 stop at 0x52. */
if
(
nv_gf4_disp_arch
(
dev
))
{
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_KELVIN
)
{
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_KELVIN
)
{
/* Not waiting for vertical retrace before modifying
CRE_53/CRE_54 causes lockups. */
nvif_msec
(
&
drm
->
device
,
650
,
nvif_msec
(
&
drm
->
client
.
device
,
650
,
if
(
(
nvif_rd32
(
device
,
NV_PRMCIO_INP0__COLOR
)
&
8
))
break
;
);
nvif_msec
(
&
drm
->
device
,
650
,
nvif_msec
(
&
drm
->
client
.
device
,
650
,
if
(
!
(
nvif_rd32
(
device
,
NV_PRMCIO_INP0__COLOR
)
&
8
))
break
;
);
...
...
@@ -770,7 +770,7 @@ static void
nv_save_state_palette
(
struct
drm_device
*
dev
,
int
head
,
struct
nv04_mode_state
*
state
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
int
head_offset
=
head
*
NV_PRMDIO_SIZE
,
i
;
nvif_wr08
(
device
,
NV_PRMDIO_PIXEL_MASK
+
head_offset
,
...
...
@@ -789,7 +789,7 @@ void
nouveau_hw_load_state_palette
(
struct
drm_device
*
dev
,
int
head
,
struct
nv04_mode_state
*
state
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
int
head_offset
=
head
*
NV_PRMDIO_SIZE
,
i
;
nvif_wr08
(
device
,
NV_PRMDIO_PIXEL_MASK
+
head_offset
,
...
...
@@ -809,7 +809,7 @@ void nouveau_hw_save_state(struct drm_device *dev, int head,
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
if
(
drm
->
device
.
info
.
chipset
==
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
)
/* NB: no attempt is made to restore the bad pll later on */
nouveau_hw_fix_bad_vpll
(
dev
,
head
);
nv_save_state_ramdac
(
dev
,
head
,
state
);
...
...
drivers/gpu/drm/nouveau/dispnv04/hw.h
View file @
1167c6bc
...
...
@@ -60,7 +60,7 @@ extern void nouveau_calc_arb(struct drm_device *, int vclk, int bpp,
static
inline
uint32_t
NVReadCRTC
(
struct
drm_device
*
dev
,
int
head
,
uint32_t
reg
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
uint32_t
val
;
if
(
head
)
reg
+=
NV_PCRTC0_SIZE
;
...
...
@@ -71,7 +71,7 @@ static inline uint32_t NVReadCRTC(struct drm_device *dev,
static
inline
void
NVWriteCRTC
(
struct
drm_device
*
dev
,
int
head
,
uint32_t
reg
,
uint32_t
val
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
if
(
head
)
reg
+=
NV_PCRTC0_SIZE
;
nvif_wr32
(
device
,
reg
,
val
);
...
...
@@ -80,7 +80,7 @@ static inline void NVWriteCRTC(struct drm_device *dev,
static
inline
uint32_t
NVReadRAMDAC
(
struct
drm_device
*
dev
,
int
head
,
uint32_t
reg
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
uint32_t
val
;
if
(
head
)
reg
+=
NV_PRAMDAC0_SIZE
;
...
...
@@ -91,7 +91,7 @@ static inline uint32_t NVReadRAMDAC(struct drm_device *dev,
static
inline
void
NVWriteRAMDAC
(
struct
drm_device
*
dev
,
int
head
,
uint32_t
reg
,
uint32_t
val
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
if
(
head
)
reg
+=
NV_PRAMDAC0_SIZE
;
nvif_wr32
(
device
,
reg
,
val
);
...
...
@@ -120,7 +120,7 @@ static inline void nv_write_tmds(struct drm_device *dev,
static
inline
void
NVWriteVgaCrtc
(
struct
drm_device
*
dev
,
int
head
,
uint8_t
index
,
uint8_t
value
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
nvif_wr08
(
device
,
NV_PRMCIO_CRX__COLOR
+
head
*
NV_PRMCIO_SIZE
,
index
);
nvif_wr08
(
device
,
NV_PRMCIO_CR__COLOR
+
head
*
NV_PRMCIO_SIZE
,
value
);
}
...
...
@@ -128,7 +128,7 @@ static inline void NVWriteVgaCrtc(struct drm_device *dev,
static
inline
uint8_t
NVReadVgaCrtc
(
struct
drm_device
*
dev
,
int
head
,
uint8_t
index
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
uint8_t
val
;
nvif_wr08
(
device
,
NV_PRMCIO_CRX__COLOR
+
head
*
NV_PRMCIO_SIZE
,
index
);
val
=
nvif_rd08
(
device
,
NV_PRMCIO_CR__COLOR
+
head
*
NV_PRMCIO_SIZE
);
...
...
@@ -165,13 +165,13 @@ static inline uint8_t NVReadVgaCrtc5758(struct drm_device *dev, int head, uint8_
static
inline
uint8_t
NVReadPRMVIO
(
struct
drm_device
*
dev
,
int
head
,
uint32_t
reg
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
uint8_t
val
;
/* Only NV4x have two pvio ranges; other twoHeads cards MUST call
* NVSetOwner for the relevant head to be programmed */
if
(
head
&&
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
head
&&
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
reg
+=
NV_PRMVIO_SIZE
;
val
=
nvif_rd08
(
device
,
reg
);
...
...
@@ -181,12 +181,12 @@ static inline uint8_t NVReadPRMVIO(struct drm_device *dev,
static
inline
void
NVWritePRMVIO
(
struct
drm_device
*
dev
,
int
head
,
uint32_t
reg
,
uint8_t
value
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
/* Only NV4x have two pvio ranges; other twoHeads cards MUST call
* NVSetOwner for the relevant head to be programmed */
if
(
head
&&
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
head
&&
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
reg
+=
NV_PRMVIO_SIZE
;
nvif_wr08
(
device
,
reg
,
value
);
...
...
@@ -194,14 +194,14 @@ static inline void NVWritePRMVIO(struct drm_device *dev,
static
inline
void
NVSetEnablePalette
(
struct
drm_device
*
dev
,
int
head
,
bool
enable
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
nvif_rd08
(
device
,
NV_PRMCIO_INP0__COLOR
+
head
*
NV_PRMCIO_SIZE
);
nvif_wr08
(
device
,
NV_PRMCIO_ARX
+
head
*
NV_PRMCIO_SIZE
,
enable
?
0
:
0x20
);
}
static
inline
bool
NVGetEnablePalette
(
struct
drm_device
*
dev
,
int
head
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
nvif_rd08
(
device
,
NV_PRMCIO_INP0__COLOR
+
head
*
NV_PRMCIO_SIZE
);
return
!
(
nvif_rd08
(
device
,
NV_PRMCIO_ARX
+
head
*
NV_PRMCIO_SIZE
)
&
0x20
);
}
...
...
@@ -209,7 +209,7 @@ static inline bool NVGetEnablePalette(struct drm_device *dev, int head)
static
inline
void
NVWriteVgaAttr
(
struct
drm_device
*
dev
,
int
head
,
uint8_t
index
,
uint8_t
value
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
if
(
NVGetEnablePalette
(
dev
,
head
))
index
&=
~
0x20
;
else
...
...
@@ -223,7 +223,7 @@ static inline void NVWriteVgaAttr(struct drm_device *dev,
static
inline
uint8_t
NVReadVgaAttr
(
struct
drm_device
*
dev
,
int
head
,
uint8_t
index
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
uint8_t
val
;
if
(
NVGetEnablePalette
(
dev
,
head
))
index
&=
~
0x20
;
...
...
@@ -259,10 +259,10 @@ static inline void NVVgaProtect(struct drm_device *dev, int head, bool protect)
static
inline
bool
nv_heads_tied
(
struct
drm_device
*
dev
)
{
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
device
.
object
;
struct
nvif_object
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
.
object
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
if
(
drm
->
device
.
info
.
chipset
==
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
)
return
!!
(
nvif_rd32
(
device
,
NV_PBUS_DEBUG_1
)
&
(
1
<<
28
));
return
NVReadVgaCrtc
(
dev
,
0
,
NV_CIO_CRE_44
)
&
0x4
;
...
...
@@ -318,7 +318,7 @@ NVLockVgaCrtcs(struct drm_device *dev, bool lock)
NVWriteVgaCrtc
(
dev
,
0
,
NV_CIO_SR_LOCK_INDEX
,
lock
?
NV_CIO_SR_LOCK_VALUE
:
NV_CIO_SR_UNLOCK_RW_VALUE
);
/* NV11 has independently lockable extended crtcs, except when tied */
if
(
drm
->
device
.
info
.
chipset
==
0x11
&&
!
nv_heads_tied
(
dev
))
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x11
&&
!
nv_heads_tied
(
dev
))
NVWriteVgaCrtc
(
dev
,
1
,
NV_CIO_SR_LOCK_INDEX
,
lock
?
NV_CIO_SR_LOCK_VALUE
:
NV_CIO_SR_UNLOCK_RW_VALUE
);
...
...
@@ -335,7 +335,7 @@ static inline int nv_cursor_width(struct drm_device *dev)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
return
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
?
NV10_CURSOR_SIZE
:
NV04_CURSOR_SIZE
;
return
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
?
NV10_CURSOR_SIZE
:
NV04_CURSOR_SIZE
;
}
static
inline
void
...
...
@@ -357,7 +357,7 @@ nv_set_crtc_base(struct drm_device *dev, int head, uint32_t offset)
NVWriteCRTC
(
dev
,
head
,
NV_PCRTC_START
,
offset
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_TNT
)
{
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_TNT
)
{
/*
* Hilarious, the 24th bit doesn't want to stick to
* PCRTC_START...
...
...
@@ -382,7 +382,7 @@ nv_show_cursor(struct drm_device *dev, int head, bool show)
*
curctl1
&=
~
MASK
(
NV_CIO_CRE_HCUR_ADDR1_ENABLE
);
NVWriteVgaCrtc
(
dev
,
head
,
NV_CIO_CRE_HCUR_ADDR1_INDEX
,
*
curctl1
);
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
nv_fix_nv40_hw_cursor
(
dev
,
head
);
}
...
...
@@ -398,7 +398,7 @@ nv_pitch_align(struct drm_device *dev, uint32_t width, int bpp)
bpp
=
8
;
/* Alignment requirements taken from the Haiku driver */
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_TNT
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_TNT
)
mask
=
128
/
bpp
-
1
;
else
mask
=
512
/
bpp
-
1
;
...
...
drivers/gpu/drm/nouveau/dispnv04/overlay.c
View file @
1167c6bc
...
...
@@ -97,7 +97,7 @@ nv10_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
uint32_t
src_w
,
uint32_t
src_h
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
plane
->
dev
);
struct
nvif_object
*
dev
=
&
drm
->
device
.
object
;
struct
nvif_object
*
dev
=
&
drm
->
client
.
device
.
object
;
struct
nouveau_plane
*
nv_plane
=
container_of
(
plane
,
struct
nouveau_plane
,
base
);
struct
nouveau_framebuffer
*
nv_fb
=
nouveau_framebuffer
(
fb
);
...
...
@@ -119,7 +119,7 @@ nv10_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
if
(
format
>
0xffff
)
return
-
ERANGE
;
if
(
drm
->
device
.
info
.
chipset
>=
0x30
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x30
)
{
if
(
crtc_w
<
(
src_w
>>
1
)
||
crtc_h
<
(
src_h
>>
1
))
return
-
ERANGE
;
}
else
{
...
...
@@ -174,7 +174,7 @@ nv10_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
static
int
nv10_disable_plane
(
struct
drm_plane
*
plane
)
{
struct
nvif_object
*
dev
=
&
nouveau_drm
(
plane
->
dev
)
->
device
.
object
;
struct
nvif_object
*
dev
=
&
nouveau_drm
(
plane
->
dev
)
->
client
.
device
.
object
;
struct
nouveau_plane
*
nv_plane
=
container_of
(
plane
,
struct
nouveau_plane
,
base
);
...
...
@@ -198,7 +198,7 @@ nv_destroy_plane(struct drm_plane *plane)
static
void
nv10_set_params
(
struct
nouveau_plane
*
plane
)
{
struct
nvif_object
*
dev
=
&
nouveau_drm
(
plane
->
base
.
dev
)
->
device
.
object
;
struct
nvif_object
*
dev
=
&
nouveau_drm
(
plane
->
base
.
dev
)
->
client
.
device
.
object
;
u32
luma
=
(
plane
->
brightness
-
512
)
<<
16
|
plane
->
contrast
;
u32
chroma
=
((
sin_mul
(
plane
->
hue
,
plane
->
saturation
)
&
0xffff
)
<<
16
)
|
(
cos_mul
(
plane
->
hue
,
plane
->
saturation
)
&
0xffff
);
...
...
@@ -268,7 +268,7 @@ nv10_overlay_init(struct drm_device *device)
if
(
!
plane
)
return
;
switch
(
drm
->
device
.
info
.
chipset
)
{
switch
(
drm
->
client
.
device
.
info
.
chipset
)
{
case
0x10
:
case
0x11
:
case
0x15
:
...
...
@@ -347,7 +347,7 @@ nv04_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
uint32_t
src_x
,
uint32_t
src_y
,
uint32_t
src_w
,
uint32_t
src_h
)
{
struct
nvif_object
*
dev
=
&
nouveau_drm
(
plane
->
dev
)
->
device
.
object
;
struct
nvif_object
*
dev
=
&
nouveau_drm
(
plane
->
dev
)
->
client
.
device
.
object
;
struct
nouveau_plane
*
nv_plane
=
container_of
(
plane
,
struct
nouveau_plane
,
base
);
struct
nouveau_framebuffer
*
nv_fb
=
nouveau_framebuffer
(
fb
);
...
...
@@ -427,7 +427,7 @@ nv04_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
static
int
nv04_disable_plane
(
struct
drm_plane
*
plane
)
{
struct
nvif_object
*
dev
=
&
nouveau_drm
(
plane
->
dev
)
->
device
.
object
;
struct
nvif_object
*
dev
=
&
nouveau_drm
(
plane
->
dev
)
->
client
.
device
.
object
;
struct
nouveau_plane
*
nv_plane
=
container_of
(
plane
,
struct
nouveau_plane
,
base
);
...
...
@@ -495,7 +495,7 @@ nv04_overlay_init(struct drm_device *device)
void
nouveau_overlay_init
(
struct
drm_device
*
device
)
{
struct
nvif_device
*
dev
=
&
nouveau_drm
(
device
)
->
device
;
struct
nvif_device
*
dev
=
&
nouveau_drm
(
device
)
->
client
.
device
;
if
(
dev
->
info
.
chipset
<
0x10
)
nv04_overlay_init
(
device
);
else
if
(
dev
->
info
.
chipset
<=
0x40
)
...
...
drivers/gpu/drm/nouveau/dispnv04/tvnv04.c
View file @
1167c6bc
...
...
@@ -54,7 +54,7 @@ static struct nvkm_i2c_bus_probe nv04_tv_encoder_info[] = {
int
nv04_tv_identify
(
struct
drm_device
*
dev
,
int
i2c_index
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
device
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
client
.
device
);
struct
nvkm_i2c_bus
*
bus
=
nvkm_i2c_bus_find
(
i2c
,
i2c_index
);
if
(
bus
)
{
return
nvkm_i2c_bus_probe
(
bus
,
"TV encoder"
,
...
...
@@ -206,7 +206,7 @@ nv04_tv_create(struct drm_connector *connector, struct dcb_output *entry)
struct
drm_encoder
*
encoder
;
struct
drm_device
*
dev
=
connector
->
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
device
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
client
.
device
);
struct
nvkm_i2c_bus
*
bus
=
nvkm_i2c_bus_find
(
i2c
,
entry
->
i2c_index
);
int
type
,
ret
;
...
...
drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
View file @
1167c6bc
...
...
@@ -46,7 +46,7 @@ static uint32_t nv42_tv_sample_load(struct drm_encoder *encoder)
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
device
);
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
client
.
device
);
uint32_t
testval
,
regoffset
=
nv04_dac_output_offset
(
encoder
);
uint32_t
gpio0
,
gpio1
,
fp_htotal
,
fp_hsync_start
,
fp_hsync_end
,
fp_control
,
test_ctrl
,
dacclk
,
ctv_14
,
ctv_1c
,
ctv_6c
;
...
...
@@ -130,7 +130,7 @@ static bool
get_tv_detect_quirks
(
struct
drm_device
*
dev
,
uint32_t
*
pin_mask
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
if
(
device
->
quirk
&&
device
->
quirk
->
tv_pin_mask
)
{
*
pin_mask
=
device
->
quirk
->
tv_pin_mask
;
...
...
@@ -154,8 +154,8 @@ nv17_tv_detect(struct drm_encoder *encoder, struct drm_connector *connector)
return
connector_status_disconnected
;
if
(
reliable
)
{
if
(
drm
->
device
.
info
.
chipset
==
0x42
||
drm
->
device
.
info
.
chipset
==
0x43
)
if
(
drm
->
client
.
device
.
info
.
chipset
==
0x42
||
drm
->
client
.
device
.
info
.
chipset
==
0x43
)
tv_enc
->
pin_mask
=
nv42_tv_sample_load
(
encoder
)
>>
28
&
0xe
;
else
...
...
@@ -362,7 +362,7 @@ static void nv17_tv_dpms(struct drm_encoder *encoder, int mode)
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
device
);
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
client
.
device
);
struct
nv17_tv_state
*
regs
=
&
to_tv_enc
(
encoder
)
->
state
;
struct
nv17_tv_norm_params
*
tv_norm
=
get_tv_norm
(
encoder
);
...
...
@@ -435,7 +435,7 @@ static void nv17_tv_prepare(struct drm_encoder *encoder)
/* Set the DACCLK register */
dacclk
=
(
NVReadRAMDAC
(
dev
,
0
,
dacclk_off
)
&
~
0x30
)
|
0x1
;
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
)
dacclk
|=
0x1a
<<
16
;
if
(
tv_norm
->
kind
==
CTV_ENC_MODE
)
{
...
...
@@ -492,7 +492,7 @@ static void nv17_tv_mode_set(struct drm_encoder *encoder,
tv_regs
->
ptv_614
=
0x13
;
}
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_RANKINE
)
{
tv_regs
->
ptv_500
=
0xe8e0
;
tv_regs
->
ptv_504
=
0x1710
;
tv_regs
->
ptv_604
=
0x0
;
...
...
@@ -587,7 +587,7 @@ static void nv17_tv_commit(struct drm_encoder *encoder)
nv17_tv_state_load
(
dev
,
&
to_tv_enc
(
encoder
)
->
state
);
/* This could use refinement for flatpanels, but it should work */
if
(
drm
->
device
.
info
.
chipset
<
0x44
)
if
(
drm
->
client
.
device
.
info
.
chipset
<
0x44
)
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_TEST_CONTROL
+
nv04_dac_output_offset
(
encoder
),
0xf0000000
);
...
...
drivers/gpu/drm/nouveau/dispnv04/tvnv17.h
View file @
1167c6bc
...
...
@@ -130,13 +130,13 @@ void nv17_ctv_update_rescaler(struct drm_encoder *encoder);
static
inline
void
nv_write_ptv
(
struct
drm_device
*
dev
,
uint32_t
reg
,
uint32_t
val
)
{
struct
nvif_device
*
device
=
&
nouveau_drm
(
dev
)
->
device
;
struct
nvif_device
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
;
nvif_wr32
(
&
device
->
object
,
reg
,
val
);
}
static
inline
uint32_t
nv_read_ptv
(
struct
drm_device
*
dev
,
uint32_t
reg
)
{
struct
nvif_device
*
device
=
&
nouveau_drm
(
dev
)
->
device
;
struct
nvif_device
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
;
return
nvif_rd32
(
&
device
->
object
,
reg
);
}
...
...
drivers/gpu/drm/nouveau/nouveau_abi16.c
View file @
1167c6bc
...
...
@@ -87,7 +87,7 @@ nouveau_abi16_put(struct nouveau_abi16 *abi16, int ret)
s32
nouveau_abi16_swclass
(
struct
nouveau_drm
*
drm
)
{
switch
(
drm
->
device
.
info
.
family
)
{
switch
(
drm
->
client
.
device
.
info
.
family
)
{
case
NV_DEVICE_INFO_V0_TNT
:
return
NVIF_CLASS_SW_NV04
;
case
NV_DEVICE_INFO_V0_CELSIUS
:
...
...
@@ -175,7 +175,7 @@ nouveau_abi16_ioctl_getparam(ABI16_IOCTL_ARGS)
{
struct
nouveau_cli
*
cli
=
nouveau_cli
(
file_priv
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
struct
nvkm_gr
*
gr
=
nvxx_gr
(
device
);
struct
drm_nouveau_getparam
*
getparam
=
data
;
...
...
drivers/gpu/drm/nouveau/nouveau_backlight.c
View file @
1167c6bc
...
...
@@ -65,7 +65,7 @@ static int
nv40_get_intensity
(
struct
backlight_device
*
bd
)
{
struct
nouveau_drm
*
drm
=
bl_get_data
(
bd
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
int
val
=
(
nvif_rd32
(
device
,
NV40_PMC_BACKLIGHT
)
&
NV40_PMC_BACKLIGHT_MASK
)
>>
16
;
...
...
@@ -76,7 +76,7 @@ static int
nv40_set_intensity
(
struct
backlight_device
*
bd
)
{
struct
nouveau_drm
*
drm
=
bl_get_data
(
bd
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
int
val
=
bd
->
props
.
brightness
;
int
reg
=
nvif_rd32
(
device
,
NV40_PMC_BACKLIGHT
);
...
...
@@ -96,7 +96,7 @@ static int
nv40_backlight_init
(
struct
drm_connector
*
connector
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
connector
->
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
struct
backlight_properties
props
;
struct
backlight_device
*
bd
;
struct
backlight_connector
bl_connector
;
...
...
@@ -133,7 +133,7 @@ nv50_get_intensity(struct backlight_device *bd)
{
struct
nouveau_encoder
*
nv_encoder
=
bl_get_data
(
bd
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
nv_encoder
->
base
.
base
.
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
int
or
=
nv_encoder
->
or
;
u32
div
=
1025
;
u32
val
;
...
...
@@ -148,7 +148,7 @@ nv50_set_intensity(struct backlight_device *bd)
{
struct
nouveau_encoder
*
nv_encoder
=
bl_get_data
(
bd
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
nv_encoder
->
base
.
base
.
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
int
or
=
nv_encoder
->
or
;
u32
div
=
1025
;
u32
val
=
(
bd
->
props
.
brightness
*
div
)
/
100
;
...
...
@@ -169,7 +169,7 @@ nva3_get_intensity(struct backlight_device *bd)
{
struct
nouveau_encoder
*
nv_encoder
=
bl_get_data
(
bd
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
nv_encoder
->
base
.
base
.
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
int
or
=
nv_encoder
->
or
;
u32
div
,
val
;
...
...
@@ -187,7 +187,7 @@ nva3_set_intensity(struct backlight_device *bd)
{
struct
nouveau_encoder
*
nv_encoder
=
bl_get_data
(
bd
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
nv_encoder
->
base
.
base
.
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
int
or
=
nv_encoder
->
or
;
u32
div
,
val
;
...
...
@@ -213,7 +213,7 @@ static int
nv50_backlight_init
(
struct
drm_connector
*
connector
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
connector
->
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
struct
nouveau_encoder
*
nv_encoder
;
struct
backlight_properties
props
;
struct
backlight_device
*
bd
;
...
...
@@ -231,9 +231,9 @@ nv50_backlight_init(struct drm_connector *connector)
if
(
!
nvif_rd32
(
device
,
NV50_PDISP_SOR_PWM_CTL
(
nv_encoder
->
or
)))
return
0
;
if
(
drm
->
device
.
info
.
chipset
<=
0xa0
||
drm
->
device
.
info
.
chipset
==
0xaa
||
drm
->
device
.
info
.
chipset
==
0xac
)
if
(
drm
->
client
.
device
.
info
.
chipset
<=
0xa0
||
drm
->
client
.
device
.
info
.
chipset
==
0xaa
||
drm
->
client
.
device
.
info
.
chipset
==
0xac
)
ops
=
&
nv50_bl_ops
;
else
ops
=
&
nva3_bl_ops
;
...
...
@@ -265,7 +265,7 @@ int
nouveau_backlight_init
(
struct
drm_device
*
dev
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
struct
drm_connector
*
connector
;
if
(
apple_gmux_present
())
{
...
...
drivers/gpu/drm/nouveau/nouveau_bios.c
View file @
1167c6bc
...
...
@@ -215,7 +215,7 @@ int call_lvds_script(struct drm_device *dev, struct dcb_output *dcbent, int head
*/
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
struct
nvbios
*
bios
=
&
drm
->
vbios
;
uint8_t
lvds_ver
=
bios
->
data
[
bios
->
fp
.
lvdsmanufacturerpointer
];
uint32_t
sel_clk_binding
,
sel_clk
;
...
...
@@ -319,7 +319,7 @@ static int
get_fp_strap
(
struct
drm_device
*
dev
,
struct
nvbios
*
bios
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
/*
* The fp strap is normally dictated by the "User Strap" in
...
...
@@ -333,10 +333,10 @@ get_fp_strap(struct drm_device *dev, struct nvbios *bios)
if
(
bios
->
major_version
<
5
&&
bios
->
data
[
0x48
]
&
0x4
)
return
NVReadVgaCrtc5758
(
dev
,
0
,
0xf
)
&
0xf
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_MAXWELL
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_MAXWELL
)
return
nvif_rd32
(
device
,
0x001800
)
&
0x0000000f
;
else
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
return
(
nvif_rd32
(
device
,
NV_PEXTDEV_BOOT_0
)
>>
24
)
&
0xf
;
else
return
(
nvif_rd32
(
device
,
NV_PEXTDEV_BOOT_0
)
>>
16
)
&
0xf
;
...
...
@@ -638,7 +638,7 @@ int run_tmds_table(struct drm_device *dev, struct dcb_output *dcbent, int head,
*/
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
struct
nvbios
*
bios
=
&
drm
->
vbios
;
int
cv
=
bios
->
chip_version
;
uint16_t
clktable
=
0
,
scriptptr
;
...
...
@@ -1255,7 +1255,7 @@ olddcb_table(struct drm_device *dev)
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
u8
*
dcb
=
NULL
;
if
(
drm
->
device
.
info
.
family
>
NV_DEVICE_INFO_V0_TNT
)
if
(
drm
->
client
.
device
.
info
.
family
>
NV_DEVICE_INFO_V0_TNT
)
dcb
=
ROMPTR
(
dev
,
drm
->
vbios
.
data
[
0x36
]);
if
(
!
dcb
)
{
NV_WARN
(
drm
,
"No DCB data found in VBIOS
\n
"
);
...
...
@@ -1918,7 +1918,7 @@ static int load_nv17_hwsq_ucode_entry(struct drm_device *dev, struct nvbios *bio
*/
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
uint8_t
bytes_to_write
;
uint16_t
hwsq_entry_offset
;
int
i
;
...
...
@@ -2012,7 +2012,7 @@ uint8_t *nouveau_bios_embedded_edid(struct drm_device *dev)
static
bool
NVInitVBIOS
(
struct
drm_device
*
dev
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_bios
*
bios
=
nvxx_bios
(
&
drm
->
device
);
struct
nvkm_bios
*
bios
=
nvxx_bios
(
&
drm
->
client
.
device
);
struct
nvbios
*
legacy
=
&
drm
->
vbios
;
memset
(
legacy
,
0
,
sizeof
(
struct
nvbios
));
...
...
@@ -2064,7 +2064,7 @@ nouveau_bios_posted(struct drm_device *dev)
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
unsigned
htotal
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
return
true
;
htotal
=
NVReadVgaCrtc
(
dev
,
0
,
0x06
);
...
...
drivers/gpu/drm/nouveau/nouveau_bo.c
View file @
1167c6bc
...
...
@@ -48,7 +48,7 @@ nv10_bo_update_tile_region(struct drm_device *dev, struct nouveau_drm_tile *reg,
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
int
i
=
reg
-
drm
->
tile
.
reg
;
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
struct
nvkm_fb
*
fb
=
device
->
fb
;
struct
nvkm_fb_tile
*
tile
=
&
fb
->
tile
.
region
[
i
];
...
...
@@ -100,7 +100,7 @@ nv10_bo_set_tiling(struct drm_device *dev, u32 addr,
u32
size
,
u32
pitch
,
u32
flags
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_fb
*
fb
=
nvxx_fb
(
&
drm
->
device
);
struct
nvkm_fb
*
fb
=
nvxx_fb
(
&
drm
->
client
.
device
);
struct
nouveau_drm_tile
*
tile
,
*
found
=
NULL
;
int
i
;
...
...
@@ -144,7 +144,7 @@ nouveau_bo_fixup_align(struct nouveau_bo *nvbo, u32 flags,
int
*
align
,
int
*
size
)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
nvbo
->
bo
.
bdev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
if
(
device
->
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
nvbo
->
tile_mode
)
{
...
...
@@ -210,7 +210,7 @@ nouveau_bo_new(struct nouveau_cli *cli, int size, int align,
nvbo
->
bo
.
bdev
=
&
drm
->
ttm
.
bdev
;
nvbo
->
cli
=
cli
;
if
(
!
nvxx_device
(
&
drm
->
device
)
->
func
->
cpu_coherent
)
if
(
!
nvxx_device
(
&
drm
->
client
.
device
)
->
func
->
cpu_coherent
)
nvbo
->
force_coherent
=
flags
&
TTM_PL_FLAG_UNCACHED
;
nvbo
->
page_shift
=
12
;
...
...
@@ -256,10 +256,10 @@ static void
set_placement_range
(
struct
nouveau_bo
*
nvbo
,
uint32_t
type
)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
nvbo
->
bo
.
bdev
);
u32
vram_pages
=
drm
->
device
.
info
.
ram_size
>>
PAGE_SHIFT
;
u32
vram_pages
=
drm
->
client
.
device
.
info
.
ram_size
>>
PAGE_SHIFT
;
unsigned
i
,
fpfn
,
lpfn
;
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CELSIUS
&&
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CELSIUS
&&
nvbo
->
tile_mode
&&
(
type
&
TTM_PL_FLAG_VRAM
)
&&
nvbo
->
bo
.
mem
.
num_pages
<
vram_pages
/
4
)
{
/*
...
...
@@ -317,7 +317,7 @@ nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t memtype, bool contig)
if
(
ret
)
return
ret
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
&&
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
&&
memtype
==
TTM_PL_FLAG_VRAM
&&
contig
)
{
if
(
nvbo
->
tile_flags
&
NOUVEAU_GEM_TILE_NONCONTIG
)
{
if
(
bo
->
mem
.
mem_type
==
TTM_PL_VRAM
)
{
...
...
@@ -444,7 +444,7 @@ void
nouveau_bo_sync_for_device
(
struct
nouveau_bo
*
nvbo
)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
nvbo
->
bo
.
bdev
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
struct
ttm_dma_tt
*
ttm_dma
=
(
struct
ttm_dma_tt
*
)
nvbo
->
bo
.
ttm
;
int
i
;
...
...
@@ -464,7 +464,7 @@ void
nouveau_bo_sync_for_cpu
(
struct
nouveau_bo
*
nvbo
)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
nvbo
->
bo
.
bdev
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
struct
ttm_dma_tt
*
ttm_dma
=
(
struct
ttm_dma_tt
*
)
nvbo
->
bo
.
ttm
;
int
i
;
...
...
@@ -580,9 +580,9 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
TTM_PL_FLAG_WC
;
man
->
default_caching
=
TTM_PL_FLAG_WC
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
/* Some BARs do not support being ioremapped WC */
if
(
nvxx_bar
(
&
drm
->
device
)
->
iomap_uncached
)
{
if
(
nvxx_bar
(
&
drm
->
client
.
device
)
->
iomap_uncached
)
{
man
->
available_caching
=
TTM_PL_FLAG_UNCACHED
;
man
->
default_caching
=
TTM_PL_FLAG_UNCACHED
;
}
...
...
@@ -595,7 +595,7 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
}
break
;
case
TTM_PL_TT
:
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
man
->
func
=
&
nouveau_gart_manager
;
else
if
(
!
drm
->
agp
.
bridge
)
...
...
@@ -1034,7 +1034,7 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, bool intr,
* old nvkm_mem node, these will get cleaned up after ttm has
* destroyed the ttm_mem_reg
*/
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
ret
=
nouveau_bo_move_prep
(
drm
,
bo
,
new_mem
);
if
(
ret
)
return
ret
;
...
...
@@ -1230,7 +1230,7 @@ nouveau_bo_vm_bind(struct ttm_buffer_object *bo, struct ttm_mem_reg *new_mem,
if
(
new_mem
->
mem_type
!=
TTM_PL_VRAM
)
return
0
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_CELSIUS
)
{
*
new_tile
=
nv10_bo_set_tiling
(
dev
,
offset
,
new_mem
->
size
,
nvbo
->
tile_mode
,
nvbo
->
tile_flags
);
...
...
@@ -1269,7 +1269,7 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr,
if
(
nvbo
->
pin_refcnt
)
NV_WARN
(
drm
,
"Moving pinned object %p!
\n
"
,
nvbo
);
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
ret
=
nouveau_bo_vm_bind
(
bo
,
new_mem
,
&
new_tile
);
if
(
ret
)
return
ret
;
...
...
@@ -1304,7 +1304,7 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr,
ret
=
ttm_bo_move_memcpy
(
bo
,
intr
,
no_wait_gpu
,
new_mem
);
out:
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
ret
)
nouveau_bo_vm_cleanup
(
bo
,
NULL
,
&
new_tile
);
else
...
...
@@ -1328,7 +1328,7 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
{
struct
ttm_mem_type_manager
*
man
=
&
bdev
->
man
[
mem
->
mem_type
];
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
bdev
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
struct
nvkm_mem
*
node
=
mem
->
mm_node
;
int
ret
;
...
...
@@ -1351,7 +1351,7 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
mem
->
bus
.
is_iomem
=
!
drm
->
agp
.
cma
;
}
#endif
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
||
!
node
->
memtype
)
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
||
!
node
->
memtype
)
/* untiled */
break
;
/* fallthrough, tiled memory */
...
...
@@ -1359,10 +1359,10 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
mem
->
bus
.
offset
=
mem
->
start
<<
PAGE_SHIFT
;
mem
->
bus
.
base
=
device
->
func
->
resource_addr
(
device
,
1
);
mem
->
bus
.
is_iomem
=
true
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
struct
nvkm_bar
*
bar
=
nvxx_bar
(
&
drm
->
device
);
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
struct
nvkm_bar
*
bar
=
nvxx_bar
(
&
drm
->
client
.
device
);
int
page_shift
=
12
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_FERMI
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_FERMI
)
page_shift
=
node
->
page_shift
;
ret
=
nvkm_bar_umap
(
bar
,
node
->
size
<<
12
,
page_shift
,
...
...
@@ -1397,7 +1397,7 @@ nouveau_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
bo
->
bdev
);
struct
nouveau_bo
*
nvbo
=
nouveau_bo
(
bo
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
u32
mappable
=
device
->
func
->
resource_size
(
device
,
1
)
>>
PAGE_SHIFT
;
int
i
,
ret
;
...
...
@@ -1405,7 +1405,7 @@ nouveau_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
* nothing to do here.
*/
if
(
bo
->
mem
.
mem_type
!=
TTM_PL_VRAM
)
{
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
||
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
||
!
nouveau_bo_tile_layout
(
nvbo
))
return
0
;
...
...
@@ -1420,7 +1420,7 @@ nouveau_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
}
/* make sure bo is in mappable vram */
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
||
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
||
bo
->
mem
.
start
+
bo
->
mem
.
num_pages
<
mappable
)
return
0
;
...
...
@@ -1462,7 +1462,7 @@ nouveau_ttm_tt_populate(struct ttm_tt *ttm)
}
drm
=
nouveau_bdev
(
ttm
->
bdev
);
device
=
nvxx_device
(
&
drm
->
device
);
device
=
nvxx_device
(
&
drm
->
client
.
device
);
dev
=
drm
->
dev
;
pdev
=
device
->
dev
;
...
...
@@ -1519,7 +1519,7 @@ nouveau_ttm_tt_unpopulate(struct ttm_tt *ttm)
return
;
drm
=
nouveau_bdev
(
ttm
->
bdev
);
device
=
nvxx_device
(
&
drm
->
device
);
device
=
nvxx_device
(
&
drm
->
client
.
device
);
dev
=
drm
->
dev
;
pdev
=
device
->
dev
;
...
...
drivers/gpu/drm/nouveau/nouveau_connector.c
View file @
1167c6bc
...
...
@@ -419,7 +419,7 @@ nouveau_connector_ddc_detect(struct drm_connector *connector)
struct
drm_device
*
dev
=
connector
->
dev
;
struct
nouveau_connector
*
nv_connector
=
nouveau_connector
(
connector
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
device
);
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
client
.
device
);
struct
nouveau_encoder
*
nv_encoder
;
struct
drm_encoder
*
encoder
;
int
i
,
panel
=
-
ENODEV
;
...
...
@@ -521,7 +521,7 @@ nouveau_connector_set_encoder(struct drm_connector *connector,
return
;
nv_connector
->
detected_encoder
=
nv_encoder
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
connector
->
interlace_allowed
=
true
;
connector
->
doublescan_allowed
=
true
;
}
else
...
...
@@ -531,8 +531,8 @@ nouveau_connector_set_encoder(struct drm_connector *connector,
connector
->
interlace_allowed
=
false
;
}
else
{
connector
->
doublescan_allowed
=
true
;
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_KELVIN
||
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CELSIUS
&&
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_KELVIN
||
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CELSIUS
&&
(
dev
->
pdev
->
device
&
0x0ff0
)
!=
0x0100
&&
(
dev
->
pdev
->
device
&
0x0ff0
)
!=
0x0150
))
/* HW is broken */
...
...
@@ -984,17 +984,17 @@ get_tmds_link_bandwidth(struct drm_connector *connector, bool hdmi)
/* Note: these limits are conservative, some Fermi's
* can do 297 MHz. Unclear how this can be determined.
*/
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_KEPLER
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_KEPLER
)
return
297000
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_FERMI
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_FERMI
)
return
225000
;
}
if
(
dcb
->
location
!=
DCB_LOC_ON_CHIP
||
drm
->
device
.
info
.
chipset
>=
0x46
)
drm
->
client
.
device
.
info
.
chipset
>=
0x46
)
return
165000
;
else
if
(
drm
->
device
.
info
.
chipset
>=
0x40
)
else
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x40
)
return
155000
;
else
if
(
drm
->
device
.
info
.
chipset
>=
0x18
)
else
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x18
)
return
135000
;
else
return
112000
;
...
...
drivers/gpu/drm/nouveau/nouveau_debugfs.c
View file @
1167c6bc
...
...
@@ -259,8 +259,9 @@ nouveau_debugfs_init(struct nouveau_drm *drm)
if
(
!
drm
->
debugfs
)
return
-
ENOMEM
;
ret
=
nvif_object_init
(
&
drm
->
device
.
object
,
0
,
NVIF_CLASS_CONTROL
,
NULL
,
0
,
&
drm
->
debugfs
->
ctrl
);
ret
=
nvif_object_init
(
&
drm
->
client
.
device
.
object
,
0
,
NVIF_CLASS_CONTROL
,
NULL
,
0
,
&
drm
->
debugfs
->
ctrl
);
if
(
ret
)
return
ret
;
...
...
drivers/gpu/drm/nouveau/nouveau_display.c
View file @
1167c6bc
...
...
@@ -495,7 +495,7 @@ int
nouveau_display_create
(
struct
drm_device
*
dev
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
struct
nouveau_display
*
disp
;
int
ret
;
...
...
@@ -512,15 +512,15 @@ nouveau_display_create(struct drm_device *dev)
dev
->
mode_config
.
min_width
=
0
;
dev
->
mode_config
.
min_height
=
0
;
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_CELSIUS
)
{
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_CELSIUS
)
{
dev
->
mode_config
.
max_width
=
2048
;
dev
->
mode_config
.
max_height
=
2048
;
}
else
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
dev
->
mode_config
.
max_width
=
4096
;
dev
->
mode_config
.
max_height
=
4096
;
}
else
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_FERMI
)
{
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_FERMI
)
{
dev
->
mode_config
.
max_width
=
8192
;
dev
->
mode_config
.
max_height
=
8192
;
}
else
{
...
...
@@ -531,7 +531,7 @@ nouveau_display_create(struct drm_device *dev)
dev
->
mode_config
.
preferred_depth
=
24
;
dev
->
mode_config
.
prefer_shadow
=
1
;
if
(
drm
->
device
.
info
.
chipset
<
0x11
)
if
(
drm
->
client
.
device
.
info
.
chipset
<
0x11
)
dev
->
mode_config
.
async_page_flip
=
false
;
else
dev
->
mode_config
.
async_page_flip
=
true
;
...
...
@@ -558,7 +558,7 @@ nouveau_display_create(struct drm_device *dev)
int
i
;
for
(
i
=
0
,
ret
=
-
ENODEV
;
ret
&&
i
<
ARRAY_SIZE
(
oclass
);
i
++
)
{
ret
=
nvif_object_init
(
&
drm
->
device
.
object
,
0
,
ret
=
nvif_object_init
(
&
drm
->
client
.
device
.
object
,
0
,
oclass
[
i
],
NULL
,
0
,
&
disp
->
disp
);
}
...
...
@@ -1067,7 +1067,7 @@ nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev,
args
->
size
=
roundup
(
args
->
size
,
PAGE_SIZE
);
/* Use VRAM if there is any ; otherwise fallback to system memory */
if
(
nouveau_drm
(
dev
)
->
device
.
info
.
ram_size
!=
0
)
if
(
nouveau_drm
(
dev
)
->
client
.
device
.
info
.
ram_size
!=
0
)
domain
=
NOUVEAU_GEM_DOMAIN_VRAM
;
else
domain
=
NOUVEAU_GEM_DOMAIN_GART
;
...
...
drivers/gpu/drm/nouveau/nouveau_drm.c
View file @
1167c6bc
...
...
@@ -116,6 +116,7 @@ nouveau_cli_fini(struct nouveau_cli *cli)
{
nvkm_vm_ref
(
NULL
,
&
nvxx_client
(
&
cli
->
base
)
->
vm
,
NULL
);
usif_client_fini
(
cli
);
nvif_device_fini
(
&
cli
->
device
);
nvif_client_fini
(
&
cli
->
base
);
}
...
...
@@ -143,6 +144,16 @@ nouveau_cli_init(struct nouveau_drm *drm, const char *sname,
goto
done
;
}
ret
=
nvif_device_init
(
&
cli
->
base
.
object
,
0
,
NV_DEVICE
,
&
(
struct
nv_device_v0
)
{
.
device
=
~
0
,
},
sizeof
(
struct
nv_device_v0
),
&
cli
->
device
);
if
(
ret
)
{
NV_ERROR
(
drm
,
"Device allocation failed: %d
\n
"
,
ret
);
goto
done
;
}
done:
if
(
ret
)
nouveau_cli_fini
(
cli
);
...
...
@@ -170,7 +181,7 @@ nouveau_accel_fini(struct nouveau_drm *drm)
static
void
nouveau_accel_init
(
struct
nouveau_drm
*
drm
)
{
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
struct
nvif_sclass
*
sclass
;
u32
arg0
,
arg1
;
int
ret
,
i
,
n
;
...
...
@@ -224,7 +235,7 @@ nouveau_accel_init(struct nouveau_drm *drm)
}
if
(
device
->
info
.
family
>=
NV_DEVICE_INFO_V0_KEPLER
)
{
ret
=
nouveau_channel_new
(
drm
,
&
drm
->
device
,
ret
=
nouveau_channel_new
(
drm
,
&
drm
->
client
.
device
,
NVA06F_V0_ENGINE_CE0
|
NVA06F_V0_ENGINE_CE1
,
0
,
&
drm
->
cechan
);
...
...
@@ -237,7 +248,7 @@ nouveau_accel_init(struct nouveau_drm *drm)
if
(
device
->
info
.
chipset
>=
0xa3
&&
device
->
info
.
chipset
!=
0xaa
&&
device
->
info
.
chipset
!=
0xac
)
{
ret
=
nouveau_channel_new
(
drm
,
&
drm
->
device
,
ret
=
nouveau_channel_new
(
drm
,
&
drm
->
client
.
device
,
NvDmaFB
,
NvDmaTT
,
&
drm
->
cechan
);
if
(
ret
)
NV_ERROR
(
drm
,
"failed to create ce channel, %d
\n
"
,
ret
);
...
...
@@ -249,7 +260,8 @@ nouveau_accel_init(struct nouveau_drm *drm)
arg1
=
NvDmaTT
;
}
ret
=
nouveau_channel_new
(
drm
,
&
drm
->
device
,
arg0
,
arg1
,
&
drm
->
channel
);
ret
=
nouveau_channel_new
(
drm
,
&
drm
->
client
.
device
,
arg0
,
arg1
,
&
drm
->
channel
);
if
(
ret
)
{
NV_ERROR
(
drm
,
"failed to create kernel channel, %d
\n
"
,
ret
);
nouveau_accel_fini
(
drm
);
...
...
@@ -289,8 +301,8 @@ nouveau_accel_init(struct nouveau_drm *drm)
}
if
(
device
->
info
.
family
<
NV_DEVICE_INFO_V0_FERMI
)
{
ret
=
nvkm_gpuobj_new
(
nvxx_device
(
&
drm
->
device
),
32
,
0
,
false
,
NULL
,
&
drm
->
notify
);
ret
=
nvkm_gpuobj_new
(
nvxx_device
(
&
drm
->
client
.
device
),
32
,
0
,
false
,
NULL
,
&
drm
->
notify
);
if
(
ret
)
{
NV_ERROR
(
drm
,
"failed to allocate notifier, %d
\n
"
,
ret
);
nouveau_accel_fini
(
drm
);
...
...
@@ -425,6 +437,8 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
if
(
ret
)
return
ret
;
dev
->
irq_enabled
=
true
;
nvxx_client
(
&
drm
->
client
.
base
)
->
debug
=
nvkm_dbgopt
(
nouveau_debug
,
"DRM"
);
...
...
@@ -433,33 +447,24 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
nouveau_get_hdmi_dev
(
drm
);
ret
=
nvif_device_init
(
&
drm
->
client
.
base
.
object
,
0
,
NV_DEVICE
,
&
(
struct
nv_device_v0
)
{
.
device
=
~
0
,
},
sizeof
(
struct
nv_device_v0
),
&
drm
->
device
);
if
(
ret
)
goto
fail_device
;
dev
->
irq_enabled
=
true
;
/* workaround an odd issue on nvc1 by disabling the device's
* nosnoop capability. hopefully won't cause issues until a
* better fix is found - assuming there is one...
*/
if
(
drm
->
device
.
info
.
chipset
==
0xc1
)
nvif_mask
(
&
drm
->
device
.
object
,
0x00088080
,
0x00000800
,
0x00000000
);
if
(
drm
->
client
.
device
.
info
.
chipset
==
0xc1
)
nvif_mask
(
&
drm
->
client
.
device
.
object
,
0x00088080
,
0x00000800
,
0x00000000
);
nouveau_vga_init
(
drm
);
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
!
nvxx_device
(
&
drm
->
device
)
->
mmu
)
{
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
!
nvxx_device
(
&
drm
->
client
.
device
)
->
mmu
)
{
ret
=
-
ENOSYS
;
goto
fail_device
;
}
ret
=
nvkm_vm_new
(
nvxx_device
(
&
drm
->
device
),
0
,
(
1ULL
<<
40
),
0x1000
,
NULL
,
&
drm
->
client
.
vm
);
ret
=
nvkm_vm_new
(
nvxx_device
(
&
drm
->
client
.
device
),
0
,
(
1ULL
<<
40
),
0x1000
,
NULL
,
&
drm
->
client
.
vm
);
if
(
ret
)
goto
fail_device
;
...
...
@@ -509,7 +514,6 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
fail_ttm:
nouveau_vga_fini
(
drm
);
fail_device:
nvif_device_fini
(
&
drm
->
device
);
nouveau_cli_fini
(
&
drm
->
client
);
kfree
(
drm
);
return
ret
;
...
...
@@ -540,7 +544,6 @@ nouveau_drm_unload(struct drm_device *dev)
nouveau_ttm_fini
(
drm
);
nouveau_vga_fini
(
drm
);
nvif_device_fini
(
&
drm
->
device
);
if
(
drm
->
hdmi_device
)
pci_dev_put
(
drm
->
hdmi_device
);
nouveau_cli_fini
(
&
drm
->
client
);
...
...
@@ -756,7 +759,7 @@ nouveau_pmops_runtime_resume(struct device *dev)
{
struct
pci_dev
*
pdev
=
to_pci_dev
(
dev
);
struct
drm_device
*
drm_dev
=
pci_get_drvdata
(
pdev
);
struct
nvif_device
*
device
=
&
nouveau_drm
(
drm_dev
)
->
device
;
struct
nvif_device
*
device
=
&
nouveau_drm
(
drm_dev
)
->
client
.
device
;
int
ret
;
if
(
nouveau_runtime_pm
==
0
)
...
...
@@ -848,9 +851,9 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv)
cli
->
base
.
super
=
false
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
ret
=
nvkm_vm_new
(
nvxx_device
(
&
drm
->
device
),
0
,
(
1ULL
<<
40
)
,
0x1000
,
NULL
,
&
cli
->
vm
);
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
{
ret
=
nvkm_vm_new
(
nvxx_device
(
&
drm
->
client
.
device
),
0
,
(
1ULL
<<
40
),
0x1000
,
NULL
,
&
cli
->
vm
);
if
(
ret
)
goto
done
;
...
...
drivers/gpu/drm/nouveau/nouveau_drv.h
View file @
1167c6bc
...
...
@@ -89,6 +89,8 @@ struct nouveau_cli {
struct
drm_device
*
dev
;
struct
mutex
mutex
;
struct
nvif_device
device
;
struct
nvkm_vm
*
vm
;
/*XXX*/
struct
list_head
head
;
void
*
abi16
;
...
...
@@ -112,7 +114,6 @@ struct nouveau_drm {
struct
nouveau_cli
client
;
struct
drm_device
*
dev
;
struct
nvif_device
device
;
struct
list_head
clients
;
struct
{
...
...
drivers/gpu/drm/nouveau/nouveau_fbcon.c
View file @
1167c6bc
...
...
@@ -60,7 +60,7 @@ nouveau_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
{
struct
nouveau_fbdev
*
fbcon
=
info
->
par
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
fbcon
->
helper
.
dev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
int
ret
;
if
(
info
->
state
!=
FBINFO_STATE_RUNNING
)
...
...
@@ -92,7 +92,7 @@ nouveau_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *image)
{
struct
nouveau_fbdev
*
fbcon
=
info
->
par
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
fbcon
->
helper
.
dev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
int
ret
;
if
(
info
->
state
!=
FBINFO_STATE_RUNNING
)
...
...
@@ -124,7 +124,7 @@ nouveau_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
{
struct
nouveau_fbdev
*
fbcon
=
info
->
par
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
fbcon
->
helper
.
dev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
int
ret
;
if
(
info
->
state
!=
FBINFO_STATE_RUNNING
)
...
...
@@ -266,10 +266,10 @@ nouveau_fbcon_accel_init(struct drm_device *dev)
struct
fb_info
*
info
=
fbcon
->
helper
.
fbdev
;
int
ret
;
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
ret
=
nv04_fbcon_accel_init
(
info
);
else
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_FERMI
)
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_FERMI
)
ret
=
nv50_fbcon_accel_init
(
info
);
else
ret
=
nvc0_fbcon_accel_init
(
info
);
...
...
@@ -324,7 +324,7 @@ nouveau_fbcon_create(struct drm_fb_helper *helper,
container_of
(
helper
,
struct
nouveau_fbdev
,
helper
);
struct
drm_device
*
dev
=
fbcon
->
helper
.
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
struct
fb_info
*
info
;
struct
nouveau_framebuffer
*
fb
;
struct
nouveau_channel
*
chan
;
...
...
@@ -516,10 +516,10 @@ nouveau_fbcon_init(struct drm_device *dev)
if
(
ret
)
goto
fini
;
if
(
drm
->
device
.
info
.
ram_size
<=
32
*
1024
*
1024
)
if
(
drm
->
client
.
device
.
info
.
ram_size
<=
32
*
1024
*
1024
)
preferred_bpp
=
8
;
else
if
(
drm
->
device
.
info
.
ram_size
<=
64
*
1024
*
1024
)
if
(
drm
->
client
.
device
.
info
.
ram_size
<=
64
*
1024
*
1024
)
preferred_bpp
=
16
;
else
preferred_bpp
=
32
;
...
...
drivers/gpu/drm/nouveau/nouveau_gem.c
View file @
1167c6bc
...
...
@@ -206,7 +206,7 @@ nouveau_gem_new(struct nouveau_cli *cli, int size, int align, uint32_t domain,
*/
nvbo
->
valid_domains
=
NOUVEAU_GEM_DOMAIN_VRAM
|
NOUVEAU_GEM_DOMAIN_GART
;
if
(
drm
->
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
if
(
drm
->
client
.
device
.
info
.
family
>=
NV_DEVICE_INFO_V0_TESLA
)
nvbo
->
valid_domains
&=
domain
;
/* Initialize the embedded gem-object. We return a single gem-reference
...
...
@@ -257,7 +257,7 @@ nouveau_gem_ioctl_new(struct drm_device *dev, void *data,
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nouveau_cli
*
cli
=
nouveau_cli
(
file_priv
);
struct
nvkm_fb
*
fb
=
nvxx_fb
(
&
drm
->
device
);
struct
nvkm_fb
*
fb
=
nvxx_fb
(
&
drm
->
client
.
device
);
struct
drm_nouveau_gem_new
*
req
=
data
;
struct
nouveau_bo
*
nvbo
=
NULL
;
int
ret
=
0
;
...
...
@@ -496,7 +496,7 @@ validate_list(struct nouveau_channel *chan, struct nouveau_cli *cli,
return
ret
;
}
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
{
if
(
nvbo
->
bo
.
offset
==
b
->
presumed
.
offset
&&
((
nvbo
->
bo
.
mem
.
mem_type
==
TTM_PL_VRAM
&&
b
->
presumed
.
domain
&
NOUVEAU_GEM_DOMAIN_VRAM
)
||
...
...
@@ -767,7 +767,7 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data,
push
[
i
].
length
);
}
}
else
if
(
drm
->
device
.
info
.
chipset
>=
0x25
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x25
)
{
ret
=
RING_SPACE
(
chan
,
req
->
nr_push
*
2
);
if
(
ret
)
{
NV_PRINTK
(
err
,
cli
,
"cal_space: %d
\n
"
,
ret
);
...
...
@@ -840,7 +840,7 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data,
req
->
suffix0
=
0x00000000
;
req
->
suffix1
=
0x00000000
;
}
else
if
(
drm
->
device
.
info
.
chipset
>=
0x25
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x25
)
{
req
->
suffix0
=
0x00020000
;
req
->
suffix1
=
0x00000000
;
}
else
{
...
...
drivers/gpu/drm/nouveau/nouveau_hwmon.c
View file @
1167c6bc
...
...
@@ -43,7 +43,7 @@ nouveau_hwmon_show_temp(struct device *d, struct device_attribute *a, char *buf)
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
int
temp
=
nvkm_therm_temp_get
(
therm
);
if
(
temp
<
0
)
...
...
@@ -69,7 +69,7 @@ nouveau_hwmon_temp1_auto_point1_temp(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_THRS_FAN_BOOST
)
*
1000
);
...
...
@@ -81,7 +81,7 @@ nouveau_hwmon_set_temp1_auto_point1_temp(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
if
(
kstrtol
(
buf
,
10
,
&
value
)
==
-
EINVAL
)
...
...
@@ -102,7 +102,7 @@ nouveau_hwmon_temp1_auto_point1_temp_hyst(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_THRS_FAN_BOOST_HYST
)
*
1000
);
...
...
@@ -114,7 +114,7 @@ nouveau_hwmon_set_temp1_auto_point1_temp_hyst(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
if
(
kstrtol
(
buf
,
10
,
&
value
)
==
-
EINVAL
)
...
...
@@ -134,7 +134,7 @@ nouveau_hwmon_max_temp(struct device *d, struct device_attribute *a, char *buf)
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_THRS_DOWN_CLK
)
*
1000
);
...
...
@@ -145,7 +145,7 @@ nouveau_hwmon_set_max_temp(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
if
(
kstrtol
(
buf
,
10
,
&
value
)
==
-
EINVAL
)
...
...
@@ -165,7 +165,7 @@ nouveau_hwmon_max_temp_hyst(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_THRS_DOWN_CLK_HYST
)
*
1000
);
...
...
@@ -176,7 +176,7 @@ nouveau_hwmon_set_max_temp_hyst(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
if
(
kstrtol
(
buf
,
10
,
&
value
)
==
-
EINVAL
)
...
...
@@ -197,7 +197,7 @@ nouveau_hwmon_critical_temp(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_THRS_CRITICAL
)
*
1000
);
...
...
@@ -209,7 +209,7 @@ nouveau_hwmon_set_critical_temp(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
if
(
kstrtol
(
buf
,
10
,
&
value
)
==
-
EINVAL
)
...
...
@@ -230,7 +230,7 @@ nouveau_hwmon_critical_temp_hyst(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_THRS_CRITICAL_HYST
)
*
1000
);
...
...
@@ -243,7 +243,7 @@ nouveau_hwmon_set_critical_temp_hyst(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
if
(
kstrtol
(
buf
,
10
,
&
value
)
==
-
EINVAL
)
...
...
@@ -263,7 +263,7 @@ nouveau_hwmon_emergency_temp(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_THRS_SHUTDOWN
)
*
1000
);
...
...
@@ -275,7 +275,7 @@ nouveau_hwmon_set_emergency_temp(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
if
(
kstrtol
(
buf
,
10
,
&
value
)
==
-
EINVAL
)
...
...
@@ -296,7 +296,7 @@ nouveau_hwmon_emergency_temp_hyst(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_THRS_SHUTDOWN_HYST
)
*
1000
);
...
...
@@ -309,7 +309,7 @@ nouveau_hwmon_set_emergency_temp_hyst(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
if
(
kstrtol
(
buf
,
10
,
&
value
)
==
-
EINVAL
)
...
...
@@ -349,7 +349,7 @@ nouveau_hwmon_show_fan1_input(struct device *d, struct device_attribute *attr,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
return
snprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
nvkm_therm_fan_sense
(
therm
));
}
...
...
@@ -362,7 +362,7 @@ nouveau_hwmon_get_pwm1_enable(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
int
ret
;
ret
=
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_FAN_MODE
);
...
...
@@ -378,7 +378,7 @@ nouveau_hwmon_set_pwm1_enable(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
int
ret
;
...
...
@@ -401,7 +401,7 @@ nouveau_hwmon_get_pwm1(struct device *d, struct device_attribute *a, char *buf)
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
int
ret
;
ret
=
therm
->
fan_get
(
therm
);
...
...
@@ -417,7 +417,7 @@ nouveau_hwmon_set_pwm1(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
int
ret
=
-
ENODEV
;
long
value
;
...
...
@@ -441,7 +441,7 @@ nouveau_hwmon_get_pwm1_min(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
int
ret
;
ret
=
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_FAN_MIN_DUTY
);
...
...
@@ -457,7 +457,7 @@ nouveau_hwmon_set_pwm1_min(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
int
ret
;
...
...
@@ -481,7 +481,7 @@ nouveau_hwmon_get_pwm1_max(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
int
ret
;
ret
=
therm
->
attr_get
(
therm
,
NVKM_THERM_ATTR_FAN_MAX_DUTY
);
...
...
@@ -497,7 +497,7 @@ nouveau_hwmon_set_pwm1_max(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
long
value
;
int
ret
;
...
...
@@ -521,7 +521,7 @@ nouveau_hwmon_get_in0_input(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_volt
*
volt
=
nvxx_volt
(
&
drm
->
device
);
struct
nvkm_volt
*
volt
=
nvxx_volt
(
&
drm
->
client
.
device
);
int
ret
;
ret
=
nvkm_volt_get
(
volt
);
...
...
@@ -540,7 +540,7 @@ nouveau_hwmon_get_in0_min(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_volt
*
volt
=
nvxx_volt
(
&
drm
->
device
);
struct
nvkm_volt
*
volt
=
nvxx_volt
(
&
drm
->
client
.
device
);
if
(
!
volt
||
!
volt
->
min_uv
)
return
-
ENODEV
;
...
...
@@ -557,7 +557,7 @@ nouveau_hwmon_get_in0_max(struct device *d,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_volt
*
volt
=
nvxx_volt
(
&
drm
->
device
);
struct
nvkm_volt
*
volt
=
nvxx_volt
(
&
drm
->
client
.
device
);
if
(
!
volt
||
!
volt
->
max_uv
)
return
-
ENODEV
;
...
...
@@ -584,7 +584,7 @@ nouveau_hwmon_get_power1_input(struct device *d, struct device_attribute *a,
{
struct
drm_device
*
dev
=
dev_get_drvdata
(
d
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_iccsense
*
iccsense
=
nvxx_iccsense
(
&
drm
->
device
);
struct
nvkm_iccsense
*
iccsense
=
nvxx_iccsense
(
&
drm
->
client
.
device
);
int
result
=
nvkm_iccsense_read_all
(
iccsense
);
if
(
result
<
0
)
...
...
@@ -664,9 +664,9 @@ nouveau_hwmon_init(struct drm_device *dev)
{
#if defined(CONFIG_HWMON) || (defined(MODULE) && defined(CONFIG_HWMON_MODULE))
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
device
);
struct
nvkm_volt
*
volt
=
nvxx_volt
(
&
drm
->
device
);
struct
nvkm_iccsense
*
iccsense
=
nvxx_iccsense
(
&
drm
->
device
);
struct
nvkm_therm
*
therm
=
nvxx_therm
(
&
drm
->
client
.
device
);
struct
nvkm_volt
*
volt
=
nvxx_volt
(
&
drm
->
client
.
device
);
struct
nvkm_iccsense
*
iccsense
=
nvxx_iccsense
(
&
drm
->
client
.
device
);
struct
nouveau_hwmon
*
hwmon
;
struct
device
*
hwmon_dev
;
int
ret
=
0
;
...
...
drivers/gpu/drm/nouveau/nouveau_led.c
View file @
1167c6bc
...
...
@@ -38,7 +38,7 @@ nouveau_led_get_brightness(struct led_classdev *led)
{
struct
drm_device
*
drm_dev
=
container_of
(
led
,
struct
nouveau_led
,
led
)
->
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
drm_dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
u32
div
,
duty
;
div
=
nvif_rd32
(
device
,
0x61c880
)
&
0x00ffffff
;
...
...
@@ -55,7 +55,7 @@ nouveau_led_set_brightness(struct led_classdev *led, enum led_brightness value)
{
struct
drm_device
*
drm_dev
=
container_of
(
led
,
struct
nouveau_led
,
led
)
->
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
drm_dev
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
u32
input_clk
=
27e6
;
/* PDISPLAY.SOR[1].PWM is connected to the crystal */
u32
freq
=
100
;
/* this is what nvidia uses and it should be good-enough */
...
...
@@ -78,7 +78,7 @@ int
nouveau_led_init
(
struct
drm_device
*
dev
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
device
);
struct
nvkm_gpio
*
gpio
=
nvxx_gpio
(
&
drm
->
client
.
device
);
struct
dcb_gpio_func
logo_led
;
int
ret
;
...
...
drivers/gpu/drm/nouveau/nouveau_sgdma.c
View file @
1167c6bc
...
...
@@ -100,7 +100,7 @@ nouveau_sgdma_create_ttm(struct ttm_bo_device *bdev,
if
(
!
nvbe
)
return
NULL
;
if
(
drm
->
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
if
(
drm
->
client
.
device
.
info
.
family
<
NV_DEVICE_INFO_V0_TESLA
)
nvbe
->
ttm
.
ttm
.
func
=
&
nv04_sgdma_backend
;
else
nvbe
->
ttm
.
ttm
.
func
=
&
nv50_sgdma_backend
;
...
...
drivers/gpu/drm/nouveau/nouveau_ttm.c
View file @
1167c6bc
...
...
@@ -36,7 +36,7 @@ static int
nouveau_vram_manager_init
(
struct
ttm_mem_type_manager
*
man
,
unsigned
long
psize
)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
man
->
bdev
);
struct
nvkm_fb
*
fb
=
nvxx_fb
(
&
drm
->
device
);
struct
nvkm_fb
*
fb
=
nvxx_fb
(
&
drm
->
client
.
device
);
man
->
priv
=
fb
;
return
0
;
}
...
...
@@ -67,7 +67,7 @@ nouveau_vram_manager_del(struct ttm_mem_type_manager *man,
struct
ttm_mem_reg
*
mem
)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
man
->
bdev
);
struct
nvkm_ram
*
ram
=
nvxx_fb
(
&
drm
->
device
)
->
ram
;
struct
nvkm_ram
*
ram
=
nvxx_fb
(
&
drm
->
client
.
device
)
->
ram
;
nvkm_mem_node_cleanup
(
mem
->
mm_node
);
ram
->
func
->
put
(
ram
,
(
struct
nvkm_mem
**
)
&
mem
->
mm_node
);
}
...
...
@@ -79,13 +79,13 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man,
struct
ttm_mem_reg
*
mem
)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
man
->
bdev
);
struct
nvkm_ram
*
ram
=
nvxx_fb
(
&
drm
->
device
)
->
ram
;
struct
nvkm_ram
*
ram
=
nvxx_fb
(
&
drm
->
client
.
device
)
->
ram
;
struct
nouveau_bo
*
nvbo
=
nouveau_bo
(
bo
);
struct
nvkm_mem
*
node
;
u32
size_nc
=
0
;
int
ret
;
if
(
drm
->
device
.
info
.
ram_size
==
0
)
if
(
drm
->
client
.
device
.
info
.
ram_size
==
0
)
return
-
ENOMEM
;
if
(
nvbo
->
tile_flags
&
NOUVEAU_GEM_TILE_NONCONTIG
)
...
...
@@ -150,7 +150,7 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
node
->
page_shift
=
12
;
switch
(
drm
->
device
.
info
.
family
)
{
switch
(
drm
->
client
.
device
.
info
.
family
)
{
case
NV_DEVICE_INFO_V0_TNT
:
case
NV_DEVICE_INFO_V0_CELSIUS
:
case
NV_DEVICE_INFO_V0_KELVIN
:
...
...
@@ -158,7 +158,7 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
case
NV_DEVICE_INFO_V0_CURIE
:
break
;
case
NV_DEVICE_INFO_V0_TESLA
:
if
(
drm
->
device
.
info
.
chipset
!=
0x50
)
if
(
drm
->
client
.
device
.
info
.
chipset
!=
0x50
)
node
->
memtype
=
(
nvbo
->
tile_flags
&
0x7f00
)
>>
8
;
break
;
case
NV_DEVICE_INFO_V0_FERMI
:
...
...
@@ -169,7 +169,7 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
break
;
default:
NV_WARN
(
drm
,
"%s: unhandled family type %x
\n
"
,
__func__
,
drm
->
device
.
info
.
family
);
drm
->
client
.
device
.
info
.
family
);
break
;
}
...
...
@@ -197,7 +197,7 @@ static int
nv04_gart_manager_init
(
struct
ttm_mem_type_manager
*
man
,
unsigned
long
psize
)
{
struct
nouveau_drm
*
drm
=
nouveau_bdev
(
man
->
bdev
);
struct
nvkm_mmu
*
mmu
=
nvxx_mmu
(
&
drm
->
device
);
struct
nvkm_mmu
*
mmu
=
nvxx_mmu
(
&
drm
->
client
.
device
);
struct
nv04_mmu
*
priv
=
(
void
*
)
mmu
;
struct
nvkm_vm
*
vm
=
NULL
;
nvkm_vm_ref
(
priv
->
vm
,
&
vm
,
NULL
);
...
...
@@ -339,7 +339,7 @@ nouveau_ttm_global_release(struct nouveau_drm *drm)
int
nouveau_ttm_init
(
struct
nouveau_drm
*
drm
)
{
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
struct
nvkm_pci
*
pci
=
device
->
pci
;
struct
drm_device
*
dev
=
drm
->
dev
;
u8
bits
;
...
...
@@ -352,8 +352,8 @@ nouveau_ttm_init(struct nouveau_drm *drm)
drm
->
agp
.
cma
=
pci
->
agp
.
cma
;
}
bits
=
nvxx_mmu
(
&
drm
->
device
)
->
dma_bits
;
if
(
nvxx_device
(
&
drm
->
device
)
->
func
->
pci
)
{
bits
=
nvxx_mmu
(
&
drm
->
client
.
device
)
->
dma_bits
;
if
(
nvxx_device
(
&
drm
->
client
.
device
)
->
func
->
pci
)
{
if
(
drm
->
agp
.
bridge
)
bits
=
32
;
}
else
if
(
device
->
func
->
tegra
)
{
...
...
@@ -396,7 +396,7 @@ nouveau_ttm_init(struct nouveau_drm *drm)
}
/* VRAM init */
drm
->
gem
.
vram_available
=
drm
->
device
.
info
.
ram_user
;
drm
->
gem
.
vram_available
=
drm
->
client
.
device
.
info
.
ram_user
;
arch_io_reserve_memtype_wc
(
device
->
func
->
resource_addr
(
device
,
1
),
device
->
func
->
resource_size
(
device
,
1
));
...
...
@@ -413,7 +413,7 @@ nouveau_ttm_init(struct nouveau_drm *drm)
/* GART init */
if
(
!
drm
->
agp
.
bridge
)
{
drm
->
gem
.
gart_available
=
nvxx_mmu
(
&
drm
->
device
)
->
limit
;
drm
->
gem
.
gart_available
=
nvxx_mmu
(
&
drm
->
client
.
device
)
->
limit
;
}
else
{
drm
->
gem
.
gart_available
=
drm
->
agp
.
size
;
}
...
...
@@ -433,7 +433,7 @@ nouveau_ttm_init(struct nouveau_drm *drm)
void
nouveau_ttm_fini
(
struct
nouveau_drm
*
drm
)
{
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
device
);
struct
nvkm_device
*
device
=
nvxx_device
(
&
drm
->
client
.
device
);
ttm_bo_clean_mm
(
&
drm
->
ttm
.
bdev
,
TTM_PL_VRAM
);
ttm_bo_clean_mm
(
&
drm
->
ttm
.
bdev
,
TTM_PL_TT
);
...
...
drivers/gpu/drm/nouveau/nouveau_vga.c
View file @
1167c6bc
...
...
@@ -13,13 +13,13 @@ static unsigned int
nouveau_vga_set_decode
(
void
*
priv
,
bool
state
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
priv
);
struct
nvif_object
*
device
=
&
drm
->
device
.
object
;
struct
nvif_object
*
device
=
&
drm
->
client
.
device
.
object
;
if
(
drm
->
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
&&
drm
->
device
.
info
.
chipset
>=
0x4c
)
if
(
drm
->
client
.
device
.
info
.
family
==
NV_DEVICE_INFO_V0_CURIE
&&
drm
->
client
.
device
.
info
.
chipset
>=
0x4c
)
nvif_wr32
(
device
,
0x088060
,
state
);
else
if
(
drm
->
device
.
info
.
chipset
>=
0x40
)
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0x40
)
nvif_wr32
(
device
,
0x088054
,
state
);
else
nvif_wr32
(
device
,
0x001854
,
state
);
...
...
drivers/gpu/drm/nouveau/nv04_fbcon.c
View file @
1167c6bc
...
...
@@ -136,7 +136,7 @@ nv04_fbcon_accel_init(struct fb_info *info)
struct
drm_device
*
dev
=
nfbdev
->
helper
.
dev
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nouveau_channel
*
chan
=
drm
->
channel
;
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
int
surface_fmt
,
pattern_fmt
,
rect_fmt
;
int
ret
;
...
...
drivers/gpu/drm/nouveau/nv50_display.c
View file @
1167c6bc
...
...
@@ -447,18 +447,18 @@ nv50_dmac_ctxdma_new(struct nv50_dmac *dmac, struct nouveau_framebuffer *fb)
args
.
base
.
target
=
NV_DMA_V0_TARGET_VRAM
;
args
.
base
.
access
=
NV_DMA_V0_ACCESS_RDWR
;
args
.
base
.
start
=
0
;
args
.
base
.
limit
=
drm
->
device
.
info
.
ram_user
-
1
;
args
.
base
.
limit
=
drm
->
client
.
device
.
info
.
ram_user
-
1
;
if
(
drm
->
device
.
info
.
chipset
<
0x80
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
<
0x80
)
{
args
.
nv50
.
part
=
NV50_DMA_V0_PART_256
;
argc
+=
sizeof
(
args
.
nv50
);
}
else
if
(
drm
->
device
.
info
.
chipset
<
0xc0
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
<
0xc0
)
{
args
.
nv50
.
part
=
NV50_DMA_V0_PART_256
;
args
.
nv50
.
kind
=
kind
;
argc
+=
sizeof
(
args
.
nv50
);
}
else
if
(
drm
->
device
.
info
.
chipset
<
0xd0
)
{
if
(
drm
->
client
.
device
.
info
.
chipset
<
0xd0
)
{
args
.
gf100
.
kind
=
kind
;
argc
+=
sizeof
(
args
.
gf100
);
}
else
{
...
...
@@ -848,7 +848,7 @@ nv50_wndw_atomic_check_acquire(struct nv50_wndw *wndw,
asyw
->
image
.
kind
=
(
fb
->
nvbo
->
tile_flags
&
0x0000ff00
)
>>
8
;
if
(
asyw
->
image
.
kind
)
{
asyw
->
image
.
layout
=
0
;
if
(
drm
->
device
.
info
.
chipset
>=
0xc0
)
if
(
drm
->
client
.
device
.
info
.
chipset
>=
0xc0
)
asyw
->
image
.
block
=
fb
->
nvbo
->
tile_mode
>>
4
;
else
asyw
->
image
.
block
=
fb
->
nvbo
->
tile_mode
;
...
...
@@ -1397,7 +1397,7 @@ nv50_base_ntfy_wait_begun(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
wndw
->
plane
.
dev
);
struct
nv50_disp
*
disp
=
nv50_disp
(
wndw
->
plane
.
dev
);
if
(
nvif_msec
(
&
drm
->
device
,
2000ULL
,
if
(
nvif_msec
(
&
drm
->
client
.
device
,
2000ULL
,
u32
data
=
nouveau_bo_rd32
(
disp
->
sync
,
asyw
->
ntfy
.
offset
/
4
);
if
((
data
&
0xc0000000
)
==
0x40000000
)
break
;
...
...
@@ -1522,7 +1522,7 @@ nv50_base_new(struct nouveau_drm *drm, struct nv50_head *head,
return
ret
;
}
ret
=
nv50_base_create
(
&
drm
->
device
,
disp
->
disp
,
base
->
id
,
ret
=
nv50_base_create
(
&
drm
->
client
.
device
,
disp
->
disp
,
base
->
id
,
disp
->
sync
->
bo
.
offset
,
&
base
->
chan
);
if
(
ret
)
return
ret
;
...
...
@@ -2394,7 +2394,7 @@ static int
nv50_head_create
(
struct
drm_device
*
dev
,
int
index
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
nvif_device
*
device
=
&
drm
->
device
;
struct
nvif_device
*
device
=
&
drm
->
client
.
device
;
struct
nv50_disp
*
disp
=
nv50_disp
(
dev
);
struct
nv50_head
*
head
;
struct
nv50_base
*
base
;
...
...
@@ -2667,7 +2667,7 @@ static int
nv50_dac_create
(
struct
drm_connector
*
connector
,
struct
dcb_output
*
dcbe
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
connector
->
dev
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
device
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
client
.
device
);
struct
nvkm_i2c_bus
*
bus
;
struct
nouveau_encoder
*
nv_encoder
;
struct
drm_encoder
*
encoder
;
...
...
@@ -3657,7 +3657,7 @@ nv50_sor_create(struct drm_connector *connector, struct dcb_output *dcbe)
{
struct
nouveau_connector
*
nv_connector
=
nouveau_connector
(
connector
);
struct
nouveau_drm
*
drm
=
nouveau_drm
(
connector
->
dev
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
device
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
client
.
device
);
struct
nouveau_encoder
*
nv_encoder
;
struct
drm_encoder
*
encoder
;
int
type
,
ret
;
...
...
@@ -3842,7 +3842,7 @@ static int
nv50_pior_create
(
struct
drm_connector
*
connector
,
struct
dcb_output
*
dcbe
)
{
struct
nouveau_drm
*
drm
=
nouveau_drm
(
connector
->
dev
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
device
);
struct
nvkm_i2c
*
i2c
=
nvxx_i2c
(
&
drm
->
client
.
device
);
struct
nvkm_i2c_bus
*
bus
=
NULL
;
struct
nvkm_i2c_aux
*
aux
=
NULL
;
struct
i2c_adapter
*
ddc
;
...
...
@@ -3915,7 +3915,7 @@ nv50_disp_atomic_commit_core(struct nouveau_drm *drm, u32 interlock)
evo_data
(
push
,
0x00000000
);
nouveau_bo_wr32
(
disp
->
sync
,
0
,
0x00000000
);
evo_kick
(
push
,
core
);
if
(
nvif_msec
(
&
drm
->
device
,
2000ULL
,
if
(
nvif_msec
(
&
drm
->
client
.
device
,
2000ULL
,
if
(
nouveau_bo_rd32
(
disp
->
sync
,
0
))
break
;
usleep_range
(
1
,
2
);
...
...
@@ -4427,7 +4427,7 @@ module_param_named(atomic, nouveau_atomic, int, 0400);
int
nv50_display_create
(
struct
drm_device
*
dev
)
{
struct
nvif_device
*
device
=
&
nouveau_drm
(
dev
)
->
device
;
struct
nvif_device
*
device
=
&
nouveau_drm
(
dev
)
->
client
.
device
;
struct
nouveau_drm
*
drm
=
nouveau_drm
(
dev
);
struct
dcb_table
*
dcb
=
&
drm
->
vbios
.
dcb
;
struct
drm_connector
*
connector
,
*
tmp
;
...
...
drivers/gpu/drm/nouveau/nv84_fence.c
View file @
1167c6bc
...
...
@@ -193,7 +193,7 @@ nv84_fence_destroy(struct nouveau_drm *drm)
int
nv84_fence_create
(
struct
nouveau_drm
*
drm
)
{
struct
nvkm_fifo
*
fifo
=
nvxx_fifo
(
&
drm
->
device
);
struct
nvkm_fifo
*
fifo
=
nvxx_fifo
(
&
drm
->
client
.
device
);
struct
nv84_fence_priv
*
priv
;
u32
domain
;
int
ret
;
...
...
@@ -213,7 +213,7 @@ nv84_fence_create(struct nouveau_drm *drm)
priv
->
base
.
uevent
=
true
;
/* Use VRAM if there is any ; otherwise fallback to system memory */
domain
=
drm
->
device
.
info
.
ram_size
!=
0
?
TTM_PL_FLAG_VRAM
:
domain
=
drm
->
client
.
device
.
info
.
ram_size
!=
0
?
TTM_PL_FLAG_VRAM
:
/*
* fences created in sysmem must be non-cached or we
* will lose CPU/GPU coherency!
...
...
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