@@ -282,7 +282,7 @@ r535_sor_bl_get(struct nvkm_ior *sor)
282
282
{
283
283
struct nvkm_disp * disp = sor -> disp ;
284
284
NV0073_CTRL_SPECIFIC_BACKLIGHT_BRIGHTNESS_PARAMS * ctrl ;
285
- int lvl ;
285
+ int ret , lvl ;
286
286
287
287
ctrl = nvkm_gsp_rm_ctrl_get (& disp -> rm .objcom ,
288
288
NV0073_CTRL_CMD_SPECIFIC_GET_BACKLIGHT_BRIGHTNESS ,
@@ -292,9 +292,11 @@ r535_sor_bl_get(struct nvkm_ior *sor)
292
292
293
293
ctrl -> displayId = BIT (sor -> asy .outp -> index );
294
294
295
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
296
- if (IS_ERR (ctrl ))
297
- return PTR_ERR (ctrl );
295
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
296
+ if (ret ) {
297
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
298
+ return ret ;
299
+ }
298
300
299
301
lvl = ctrl -> brightness ;
300
302
nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
@@ -649,9 +651,11 @@ r535_conn_new(struct nvkm_disp *disp, u32 id)
649
651
ctrl -> subDeviceInstance = 0 ;
650
652
ctrl -> displayId = BIT (id );
651
653
652
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
653
- if (IS_ERR (ctrl ))
654
- return (void * )ctrl ;
654
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
655
+ if (ret ) {
656
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
657
+ return ERR_PTR (ret );
658
+ }
655
659
656
660
list_for_each_entry (conn , & disp -> conns , head ) {
657
661
if (conn -> index == ctrl -> data [0 ].index ) {
@@ -686,7 +690,7 @@ r535_outp_acquire(struct nvkm_outp *outp, bool hda)
686
690
struct nvkm_disp * disp = outp -> disp ;
687
691
struct nvkm_ior * ior ;
688
692
NV0073_CTRL_DFP_ASSIGN_SOR_PARAMS * ctrl ;
689
- int or ;
693
+ int ret , or ;
690
694
691
695
ctrl = nvkm_gsp_rm_ctrl_get (& disp -> rm .objcom ,
692
696
NV0073_CTRL_CMD_DFP_ASSIGN_SOR , sizeof (* ctrl ));
@@ -699,9 +703,11 @@ r535_outp_acquire(struct nvkm_outp *outp, bool hda)
699
703
if (hda )
700
704
ctrl -> flags |= NVDEF (NV0073_CTRL , DFP_ASSIGN_SOR_FLAGS , AUDIO , OPTIMAL );
701
705
702
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
703
- if (IS_ERR (ctrl ))
704
- return PTR_ERR (ctrl );
706
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
707
+ if (ret ) {
708
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
709
+ return ret ;
710
+ }
705
711
706
712
for (or = 0 ; or < ARRAY_SIZE (ctrl -> sorAssignListWithTag ); or ++ ) {
707
713
if (ctrl -> sorAssignListWithTag [or ].displayMask & BIT (outp -> index )) {
@@ -727,6 +733,7 @@ static int
727
733
r535_disp_head_displayid (struct nvkm_disp * disp , int head , u32 * displayid )
728
734
{
729
735
NV0073_CTRL_SYSTEM_GET_ACTIVE_PARAMS * ctrl ;
736
+ int ret ;
730
737
731
738
ctrl = nvkm_gsp_rm_ctrl_get (& disp -> rm .objcom ,
732
739
NV0073_CTRL_CMD_SYSTEM_GET_ACTIVE , sizeof (* ctrl ));
@@ -736,9 +743,11 @@ r535_disp_head_displayid(struct nvkm_disp *disp, int head, u32 *displayid)
736
743
ctrl -> subDeviceInstance = 0 ;
737
744
ctrl -> head = head ;
738
745
739
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
740
- if (IS_ERR (ctrl ))
741
- return PTR_ERR (ctrl );
746
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
747
+ if (ret ) {
748
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
749
+ return ret ;
750
+ }
742
751
743
752
* displayid = ctrl -> displayId ;
744
753
nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
@@ -772,9 +781,11 @@ r535_outp_inherit(struct nvkm_outp *outp)
772
781
ctrl -> subDeviceInstance = 0 ;
773
782
ctrl -> displayId = displayid ;
774
783
775
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
776
- if (IS_ERR (ctrl ))
784
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
785
+ if (ret ) {
786
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
777
787
return NULL ;
788
+ }
778
789
779
790
id = ctrl -> index ;
780
791
proto = ctrl -> protocol ;
@@ -825,16 +836,19 @@ r535_outp_dfp_get_info(struct nvkm_outp *outp)
825
836
{
826
837
NV0073_CTRL_DFP_GET_INFO_PARAMS * ctrl ;
827
838
struct nvkm_disp * disp = outp -> disp ;
839
+ int ret ;
828
840
829
841
ctrl = nvkm_gsp_rm_ctrl_get (& disp -> rm .objcom , NV0073_CTRL_CMD_DFP_GET_INFO , sizeof (* ctrl ));
830
842
if (IS_ERR (ctrl ))
831
843
return PTR_ERR (ctrl );
832
844
833
845
ctrl -> displayId = BIT (outp -> index );
834
846
835
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
836
- if (IS_ERR (ctrl ))
837
- return PTR_ERR (ctrl );
847
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
848
+ if (ret ) {
849
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
850
+ return ret ;
851
+ }
838
852
839
853
nvkm_debug (& disp -> engine .subdev , "DFP %08x: flags:%08x flags2:%08x\n" ,
840
854
ctrl -> displayId , ctrl -> flags , ctrl -> flags2 );
@@ -858,9 +872,11 @@ r535_outp_detect(struct nvkm_outp *outp)
858
872
ctrl -> subDeviceInstance = 0 ;
859
873
ctrl -> displayMask = BIT (outp -> index );
860
874
861
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
862
- if (IS_ERR (ctrl ))
863
- return PTR_ERR (ctrl );
875
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
876
+ if (ret ) {
877
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
878
+ return ret ;
879
+ }
864
880
865
881
if (ctrl -> displayMask & BIT (outp -> index )) {
866
882
ret = r535_outp_dfp_get_info (outp );
@@ -895,6 +911,7 @@ r535_dp_mst_id_get(struct nvkm_outp *outp, u32 *pid)
895
911
{
896
912
NV0073_CTRL_CMD_DP_TOPOLOGY_ALLOCATE_DISPLAYID_PARAMS * ctrl ;
897
913
struct nvkm_disp * disp = outp -> disp ;
914
+ int ret ;
898
915
899
916
ctrl = nvkm_gsp_rm_ctrl_get (& disp -> rm .objcom ,
900
917
NV0073_CTRL_CMD_DP_TOPOLOGY_ALLOCATE_DISPLAYID ,
@@ -904,9 +921,11 @@ r535_dp_mst_id_get(struct nvkm_outp *outp, u32 *pid)
904
921
905
922
ctrl -> subDeviceInstance = 0 ;
906
923
ctrl -> displayId = BIT (outp -> index );
907
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
908
- if (IS_ERR (ctrl ))
909
- return PTR_ERR (ctrl );
924
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
925
+ if (ret ) {
926
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
927
+ return ret ;
928
+ }
910
929
911
930
* pid = ctrl -> displayIdAssigned ;
912
931
nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
@@ -964,9 +983,11 @@ r535_dp_train_target(struct nvkm_outp *outp, u8 target, bool mst, u8 link_nr, u8
964
983
!(outp -> dp .dpcd [DPCD_RC03 ] & DPCD_RC03_TPS4_SUPPORTED ))
965
984
ctrl -> cmd |= NVDEF (NV0073_CTRL , DP_CMD , POST_LT_ADJ_REQ_GRANTED , YES );
966
985
967
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
968
- if (IS_ERR (ctrl ))
969
- return PTR_ERR (ctrl );
986
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
987
+ if (ret ) {
988
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
989
+ return ret ;
990
+ }
970
991
971
992
ret = ctrl -> err ? - EIO : 0 ;
972
993
nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
@@ -1036,9 +1057,11 @@ r535_dp_aux_xfer(struct nvkm_outp *outp, u8 type, u32 addr, u8 *data, u8 *psize)
1036
1057
ctrl -> size = !ctrl -> bAddrOnly ? (size - 1 ) : 0 ;
1037
1058
memcpy (ctrl -> data , data , size );
1038
1059
1039
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
1040
- if (IS_ERR (ctrl ))
1060
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
1061
+ if (ret ) {
1062
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
1041
1063
return PTR_ERR (ctrl );
1064
+ }
1042
1065
1043
1066
memcpy (data , ctrl -> data , size );
1044
1067
* psize = ctrl -> size ;
@@ -1111,10 +1134,13 @@ r535_tmds_edid_get(struct nvkm_outp *outp, u8 *data, u16 *psize)
1111
1134
ctrl -> subDeviceInstance = 0 ;
1112
1135
ctrl -> displayId = BIT (outp -> index );
1113
1136
1114
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
1115
- if (IS_ERR (ctrl ))
1116
- return PTR_ERR (ctrl );
1137
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
1138
+ if (ret ) {
1139
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
1140
+ return ret ;
1141
+ }
1117
1142
1143
+ ret = - E2BIG ;
1118
1144
if (ctrl -> bufferSize <= * psize ) {
1119
1145
memcpy (data , ctrl -> edidBuffer , ctrl -> bufferSize );
1120
1146
* psize = ctrl -> bufferSize ;
@@ -1153,9 +1179,11 @@ r535_outp_new(struct nvkm_disp *disp, u32 id)
1153
1179
ctrl -> subDeviceInstance = 0 ;
1154
1180
ctrl -> displayId = BIT (id );
1155
1181
1156
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
1157
- if (IS_ERR (ctrl ))
1158
- return PTR_ERR (ctrl );
1182
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
1183
+ if (ret ) {
1184
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
1185
+ return ret ;
1186
+ }
1159
1187
1160
1188
switch (ctrl -> type ) {
1161
1189
case NV0073_CTRL_SPECIFIC_OR_TYPE_NONE :
@@ -1229,9 +1257,11 @@ r535_outp_new(struct nvkm_disp *disp, u32 id)
1229
1257
1230
1258
ctrl -> sorIndex = ~0 ;
1231
1259
1232
- ctrl = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , ctrl , sizeof (* ctrl ));
1233
- if (IS_ERR (ctrl ))
1234
- return PTR_ERR (ctrl );
1260
+ ret = nvkm_gsp_rm_ctrl_push (& disp -> rm .objcom , & ctrl , sizeof (* ctrl ));
1261
+ if (ret ) {
1262
+ nvkm_gsp_rm_ctrl_done (& disp -> rm .objcom , ctrl );
1263
+ return ret ;
1264
+ }
1235
1265
1236
1266
switch (NVVAL_GET (ctrl -> maxLinkRate , NV0073_CTRL_CMD , DP_GET_CAPS , MAX_LINK_RATE )) {
1237
1267
case NV0073_CTRL_CMD_DP_GET_CAPS_MAX_LINK_RATE_1_62 :
0 commit comments