Merge tag 'amd-drm-fixes-5.9-2020-08-20' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
amd-drm-fixes-5.9-2020-08-20: amdgpu: - Fixes for Navy Flounder - Misc display fixes - RAS fix amdkfd: - SDMA fix for renoir Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200820041938.3928-1-alexander.deucher@amd.com
This commit is contained in:
commit
ba9086a6df
|
@ -195,19 +195,32 @@ static uint32_t get_sdma_rlc_reg_offset(struct amdgpu_device *adev,
|
||||||
unsigned int engine_id,
|
unsigned int engine_id,
|
||||||
unsigned int queue_id)
|
unsigned int queue_id)
|
||||||
{
|
{
|
||||||
uint32_t sdma_engine_reg_base[2] = {
|
uint32_t sdma_engine_reg_base = 0;
|
||||||
SOC15_REG_OFFSET(SDMA0, 0,
|
uint32_t sdma_rlc_reg_offset;
|
||||||
mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL,
|
|
||||||
SOC15_REG_OFFSET(SDMA1, 0,
|
switch (engine_id) {
|
||||||
mmSDMA1_RLC0_RB_CNTL) - mmSDMA1_RLC0_RB_CNTL
|
default:
|
||||||
};
|
dev_warn(adev->dev,
|
||||||
uint32_t retval = sdma_engine_reg_base[engine_id]
|
"Invalid sdma engine id (%d), using engine id 0\n",
|
||||||
|
engine_id);
|
||||||
|
fallthrough;
|
||||||
|
case 0:
|
||||||
|
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0,
|
||||||
|
mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA1, 0,
|
||||||
|
mmSDMA1_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sdma_rlc_reg_offset = sdma_engine_reg_base
|
||||||
+ queue_id * (mmSDMA0_RLC1_RB_CNTL - mmSDMA0_RLC0_RB_CNTL);
|
+ queue_id * (mmSDMA0_RLC1_RB_CNTL - mmSDMA0_RLC0_RB_CNTL);
|
||||||
|
|
||||||
pr_debug("RLC register offset for SDMA%d RLC%d: 0x%x\n", engine_id,
|
pr_debug("RLC register offset for SDMA%d RLC%d: 0x%x\n", engine_id,
|
||||||
queue_id, retval);
|
queue_id, sdma_rlc_reg_offset);
|
||||||
|
|
||||||
return retval;
|
return sdma_rlc_reg_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct v9_mqd *get_mqd(void *mqd)
|
static inline struct v9_mqd *get_mqd(void *mqd)
|
||||||
|
|
|
@ -1243,7 +1243,6 @@ void amdgpu_ras_debugfs_remove(struct amdgpu_device *adev,
|
||||||
if (!obj || !obj->ent)
|
if (!obj || !obj->ent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
debugfs_remove(obj->ent);
|
|
||||||
obj->ent = NULL;
|
obj->ent = NULL;
|
||||||
put_obj(obj);
|
put_obj(obj);
|
||||||
}
|
}
|
||||||
|
@ -1257,7 +1256,6 @@ static void amdgpu_ras_debugfs_remove_all(struct amdgpu_device *adev)
|
||||||
amdgpu_ras_debugfs_remove(adev, &obj->head);
|
amdgpu_ras_debugfs_remove(adev, &obj->head);
|
||||||
}
|
}
|
||||||
|
|
||||||
debugfs_remove_recursive(con->dir);
|
|
||||||
con->dir = NULL;
|
con->dir = NULL;
|
||||||
}
|
}
|
||||||
/* debugfs end */
|
/* debugfs end */
|
||||||
|
|
|
@ -179,12 +179,11 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHIP_SIENNA_CICHLID:
|
case CHIP_SIENNA_CICHLID:
|
||||||
|
case CHIP_NAVY_FLOUNDER:
|
||||||
err = psp_init_ta_microcode(&adev->psp, chip_name);
|
err = psp_init_ta_microcode(&adev->psp, chip_name);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
break;
|
break;
|
||||||
case CHIP_NAVY_FLOUNDER:
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1108,6 +1108,18 @@ static enum bp_result bios_parser_enable_disp_power_gating(
|
||||||
action);
|
action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum bp_result bios_parser_enable_lvtma_control(
|
||||||
|
struct dc_bios *dcb,
|
||||||
|
uint8_t uc_pwr_on)
|
||||||
|
{
|
||||||
|
struct bios_parser *bp = BP_FROM_DCB(dcb);
|
||||||
|
|
||||||
|
if (!bp->cmd_tbl.enable_lvtma_control)
|
||||||
|
return BP_RESULT_FAILURE;
|
||||||
|
|
||||||
|
return bp->cmd_tbl.enable_lvtma_control(bp, uc_pwr_on);
|
||||||
|
}
|
||||||
|
|
||||||
static bool bios_parser_is_accelerated_mode(
|
static bool bios_parser_is_accelerated_mode(
|
||||||
struct dc_bios *dcb)
|
struct dc_bios *dcb)
|
||||||
{
|
{
|
||||||
|
@ -2208,7 +2220,9 @@ static const struct dc_vbios_funcs vbios_funcs = {
|
||||||
.get_board_layout_info = bios_get_board_layout_info,
|
.get_board_layout_info = bios_get_board_layout_info,
|
||||||
.pack_data_tables = bios_parser_pack_data_tables,
|
.pack_data_tables = bios_parser_pack_data_tables,
|
||||||
|
|
||||||
.get_atom_dc_golden_table = bios_get_atom_dc_golden_table
|
.get_atom_dc_golden_table = bios_get_atom_dc_golden_table,
|
||||||
|
|
||||||
|
.enable_lvtma_control = bios_parser_enable_lvtma_control
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool bios_parser2_construct(
|
static bool bios_parser2_construct(
|
||||||
|
|
|
@ -904,6 +904,33 @@ static unsigned int get_smu_clock_info_v3_1(struct bios_parser *bp, uint8_t id)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
******************************************************************************
|
||||||
|
**
|
||||||
|
** LVTMA CONTROL
|
||||||
|
**
|
||||||
|
******************************************************************************
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
static enum bp_result enable_lvtma_control(
|
||||||
|
struct bios_parser *bp,
|
||||||
|
uint8_t uc_pwr_on);
|
||||||
|
|
||||||
|
static void init_enable_lvtma_control(struct bios_parser *bp)
|
||||||
|
{
|
||||||
|
/* TODO add switch for table vrsion */
|
||||||
|
bp->cmd_tbl.enable_lvtma_control = enable_lvtma_control;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum bp_result enable_lvtma_control(
|
||||||
|
struct bios_parser *bp,
|
||||||
|
uint8_t uc_pwr_on)
|
||||||
|
{
|
||||||
|
enum bp_result result = BP_RESULT_FAILURE;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp)
|
void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp)
|
||||||
{
|
{
|
||||||
init_dig_encoder_control(bp);
|
init_dig_encoder_control(bp);
|
||||||
|
@ -919,4 +946,5 @@ void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp)
|
||||||
init_set_dce_clock(bp);
|
init_set_dce_clock(bp);
|
||||||
init_get_smu_clock_info(bp);
|
init_get_smu_clock_info(bp);
|
||||||
|
|
||||||
|
init_enable_lvtma_control(bp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,8 @@ struct cmd_tbl {
|
||||||
struct bp_set_dce_clock_parameters *bp_params);
|
struct bp_set_dce_clock_parameters *bp_params);
|
||||||
unsigned int (*get_smu_clock_info)(
|
unsigned int (*get_smu_clock_info)(
|
||||||
struct bios_parser *bp, uint8_t id);
|
struct bios_parser *bp, uint8_t id);
|
||||||
|
enum bp_result (*enable_lvtma_control)(struct bios_parser *bp,
|
||||||
|
uint8_t uc_pwr_on);
|
||||||
};
|
};
|
||||||
|
|
||||||
void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp);
|
void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp);
|
||||||
|
|
|
@ -136,6 +136,10 @@ struct dc_vbios_funcs {
|
||||||
|
|
||||||
enum bp_result (*get_atom_dc_golden_table)(
|
enum bp_result (*get_atom_dc_golden_table)(
|
||||||
struct dc_bios *dcb);
|
struct dc_bios *dcb);
|
||||||
|
|
||||||
|
enum bp_result (*enable_lvtma_control)(
|
||||||
|
struct dc_bios *bios,
|
||||||
|
uint8_t uc_pwr_on);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bios_registers {
|
struct bios_registers {
|
||||||
|
|
|
@ -842,6 +842,17 @@ void dce110_edp_power_control(
|
||||||
cntl.coherent = false;
|
cntl.coherent = false;
|
||||||
cntl.lanes_number = LANE_COUNT_FOUR;
|
cntl.lanes_number = LANE_COUNT_FOUR;
|
||||||
cntl.hpd_sel = link->link_enc->hpd_source;
|
cntl.hpd_sel = link->link_enc->hpd_source;
|
||||||
|
|
||||||
|
if (ctx->dc->ctx->dmub_srv &&
|
||||||
|
ctx->dc->debug.dmub_command_table) {
|
||||||
|
if (cntl.action == TRANSMITTER_CONTROL_POWER_ON)
|
||||||
|
bp_result = ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios,
|
||||||
|
LVTMA_CONTROL_POWER_ON);
|
||||||
|
else
|
||||||
|
bp_result = ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios,
|
||||||
|
LVTMA_CONTROL_POWER_OFF);
|
||||||
|
}
|
||||||
|
|
||||||
bp_result = link_transmitter_control(ctx->dc_bios, &cntl);
|
bp_result = link_transmitter_control(ctx->dc_bios, &cntl);
|
||||||
|
|
||||||
if (!power_up)
|
if (!power_up)
|
||||||
|
@ -919,8 +930,21 @@ void dce110_edp_backlight_control(
|
||||||
/*edp 1.2*/
|
/*edp 1.2*/
|
||||||
if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON)
|
if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON)
|
||||||
edp_receiver_ready_T7(link);
|
edp_receiver_ready_T7(link);
|
||||||
|
|
||||||
|
if (ctx->dc->ctx->dmub_srv &&
|
||||||
|
ctx->dc->debug.dmub_command_table) {
|
||||||
|
if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON)
|
||||||
|
ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios,
|
||||||
|
LVTMA_CONTROL_LCD_BLON);
|
||||||
|
else
|
||||||
|
ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios,
|
||||||
|
LVTMA_CONTROL_LCD_BLOFF);
|
||||||
|
}
|
||||||
|
|
||||||
link_transmitter_control(ctx->dc_bios, &cntl);
|
link_transmitter_control(ctx->dc_bios, &cntl);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (enable && link->dpcd_sink_ext_caps.bits.oled)
|
if (enable && link->dpcd_sink_ext_caps.bits.oled)
|
||||||
msleep(OLED_POST_T7_DELAY);
|
msleep(OLED_POST_T7_DELAY);
|
||||||
|
|
||||||
|
|
|
@ -1457,8 +1457,8 @@ static void dcn20_update_dchubp_dpp(
|
||||||
|
|
||||||
/* Any updates are handled in dc interface, just need to apply existing for plane enable */
|
/* Any updates are handled in dc interface, just need to apply existing for plane enable */
|
||||||
if ((pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed ||
|
if ((pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed ||
|
||||||
pipe_ctx->update_flags.bits.scaler || pipe_ctx->update_flags.bits.viewport)
|
pipe_ctx->update_flags.bits.scaler || viewport_changed == true) &&
|
||||||
&& pipe_ctx->stream->cursor_attributes.address.quad_part != 0) {
|
pipe_ctx->stream->cursor_attributes.address.quad_part != 0) {
|
||||||
dc->hwss.set_cursor_position(pipe_ctx);
|
dc->hwss.set_cursor_position(pipe_ctx);
|
||||||
dc->hwss.set_cursor_attribute(pipe_ctx);
|
dc->hwss.set_cursor_attribute(pipe_ctx);
|
||||||
|
|
||||||
|
|
|
@ -167,7 +167,9 @@
|
||||||
LE_SF(DCIO_SOFT_RESET, UNIPHYB_SOFT_RESET, mask_sh),\
|
LE_SF(DCIO_SOFT_RESET, UNIPHYB_SOFT_RESET, mask_sh),\
|
||||||
LE_SF(DCIO_SOFT_RESET, UNIPHYC_SOFT_RESET, mask_sh),\
|
LE_SF(DCIO_SOFT_RESET, UNIPHYC_SOFT_RESET, mask_sh),\
|
||||||
LE_SF(DCIO_SOFT_RESET, UNIPHYD_SOFT_RESET, mask_sh),\
|
LE_SF(DCIO_SOFT_RESET, UNIPHYD_SOFT_RESET, mask_sh),\
|
||||||
LE_SF(DCIO_SOFT_RESET, UNIPHYE_SOFT_RESET, mask_sh)
|
LE_SF(DCIO_SOFT_RESET, UNIPHYE_SOFT_RESET, mask_sh),\
|
||||||
|
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DP4, mask_sh),\
|
||||||
|
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE, mask_sh)
|
||||||
|
|
||||||
#define LINK_ENCODER_MASK_SH_LIST_DCN20(mask_sh)\
|
#define LINK_ENCODER_MASK_SH_LIST_DCN20(mask_sh)\
|
||||||
LINK_ENCODER_MASK_SH_LIST_DCN10(mask_sh),\
|
LINK_ENCODER_MASK_SH_LIST_DCN10(mask_sh),\
|
||||||
|
|
|
@ -61,7 +61,10 @@
|
||||||
DPCS_DCN2_MASK_SH_LIST(mask_sh),\
|
DPCS_DCN2_MASK_SH_LIST(mask_sh),\
|
||||||
LE_SF(DPCSTX0_DPCSTX_TX_CNTL, DPCS_TX_DATA_ORDER_INVERT_18_BIT, mask_sh),\
|
LE_SF(DPCSTX0_DPCSTX_TX_CNTL, DPCS_TX_DATA_ORDER_INVERT_18_BIT, mask_sh),\
|
||||||
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL0, RDPCS_PHY_TX_VBOOST_LVL, mask_sh),\
|
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL0, RDPCS_PHY_TX_VBOOST_LVL, mask_sh),\
|
||||||
LE_SF(RDPCSTX0_RDPCSTX_CLOCK_CNTL, RDPCS_TX_CLK_EN, mask_sh)
|
LE_SF(RDPCSTX0_RDPCSTX_CLOCK_CNTL, RDPCS_TX_CLK_EN, mask_sh),\
|
||||||
|
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DP4, mask_sh),\
|
||||||
|
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE, mask_sh)
|
||||||
|
|
||||||
|
|
||||||
void dcn30_link_encoder_construct(
|
void dcn30_link_encoder_construct(
|
||||||
struct dcn20_link_encoder *enc20,
|
struct dcn20_link_encoder *enc20,
|
||||||
|
|
|
@ -491,6 +491,7 @@ static const struct dcn10_link_enc_hpd_registers link_enc_hpd_regs[] = {
|
||||||
[id] = {\
|
[id] = {\
|
||||||
LE_DCN3_REG_LIST(id), \
|
LE_DCN3_REG_LIST(id), \
|
||||||
UNIPHY_DCN2_REG_LIST(phyid), \
|
UNIPHY_DCN2_REG_LIST(phyid), \
|
||||||
|
SRI(DP_DPHY_INTERNAL_CTRL, DP, id) \
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct dce110_aux_registers_shift aux_shift = {
|
static const struct dce110_aux_registers_shift aux_shift = {
|
||||||
|
|
|
@ -63,6 +63,7 @@ typedef struct {
|
||||||
|
|
||||||
#define BPP_INVALID 0
|
#define BPP_INVALID 0
|
||||||
#define BPP_BLENDED_PIPE 0xffffffff
|
#define BPP_BLENDED_PIPE 0xffffffff
|
||||||
|
#define DCN30_MAX_DSC_IMAGE_WIDTH 5184
|
||||||
|
|
||||||
static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib);
|
static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib);
|
||||||
static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation(
|
static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation(
|
||||||
|
@ -3984,6 +3985,9 @@ void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
||||||
} else if (v->PlaneRequiredDISPCLKWithoutODMCombine > v->MaxDispclkRoundedDownToDFSGranularity) {
|
} else if (v->PlaneRequiredDISPCLKWithoutODMCombine > v->MaxDispclkRoundedDownToDFSGranularity) {
|
||||||
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
|
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
|
||||||
v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1;
|
v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1;
|
||||||
|
} else if (v->DSCEnabled[k] && (v->HActive[k] > DCN30_MAX_DSC_IMAGE_WIDTH)) {
|
||||||
|
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
|
||||||
|
v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1;
|
||||||
} else {
|
} else {
|
||||||
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
|
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
|
||||||
v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithoutODMCombine;
|
v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithoutODMCombine;
|
||||||
|
|
|
@ -101,6 +101,13 @@ enum bp_pipe_control_action {
|
||||||
ASIC_PIPE_INIT
|
ASIC_PIPE_INIT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum bp_lvtma_control_action {
|
||||||
|
LVTMA_CONTROL_LCD_BLOFF = 2,
|
||||||
|
LVTMA_CONTROL_LCD_BLON = 3,
|
||||||
|
LVTMA_CONTROL_POWER_ON = 12,
|
||||||
|
LVTMA_CONTROL_POWER_OFF = 13
|
||||||
|
};
|
||||||
|
|
||||||
struct bp_encoder_control {
|
struct bp_encoder_control {
|
||||||
enum bp_encoder_control_action action;
|
enum bp_encoder_control_action action;
|
||||||
enum engine_id engine_id;
|
enum engine_id engine_id;
|
||||||
|
|
|
@ -431,6 +431,9 @@ struct fixed31_32 dc_fixpt_log(struct fixed31_32 arg);
|
||||||
*/
|
*/
|
||||||
static inline struct fixed31_32 dc_fixpt_pow(struct fixed31_32 arg1, struct fixed31_32 arg2)
|
static inline struct fixed31_32 dc_fixpt_pow(struct fixed31_32 arg1, struct fixed31_32 arg2)
|
||||||
{
|
{
|
||||||
|
if (arg1.value == 0)
|
||||||
|
return arg2.value == 0 ? dc_fixpt_one : dc_fixpt_zero;
|
||||||
|
|
||||||
return dc_fixpt_exp(
|
return dc_fixpt_exp(
|
||||||
dc_fixpt_mul(
|
dc_fixpt_mul(
|
||||||
dc_fixpt_log(arg1),
|
dc_fixpt_log(arg1),
|
||||||
|
|
|
@ -2204,14 +2204,17 @@ static const struct throttling_logging_label {
|
||||||
};
|
};
|
||||||
static void arcturus_log_thermal_throttling_event(struct smu_context *smu)
|
static void arcturus_log_thermal_throttling_event(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
int throttler_idx, throtting_events = 0, buf_idx = 0;
|
int throttler_idx, throtting_events = 0, buf_idx = 0;
|
||||||
struct amdgpu_device *adev = smu->adev;
|
struct amdgpu_device *adev = smu->adev;
|
||||||
uint32_t throttler_status;
|
uint32_t throttler_status;
|
||||||
char log_buf[256];
|
char log_buf[256];
|
||||||
|
|
||||||
arcturus_get_smu_metrics_data(smu,
|
ret = arcturus_get_smu_metrics_data(smu,
|
||||||
METRICS_THROTTLER_STATUS,
|
METRICS_THROTTLER_STATUS,
|
||||||
&throttler_status);
|
&throttler_status);
|
||||||
|
if (ret)
|
||||||
|
return;
|
||||||
|
|
||||||
memset(log_buf, 0, sizeof(log_buf));
|
memset(log_buf, 0, sizeof(log_buf));
|
||||||
for (throttler_idx = 0; throttler_idx < ARRAY_SIZE(logging_label);
|
for (throttler_idx = 0; throttler_idx < ARRAY_SIZE(logging_label);
|
||||||
|
|
Loading…
Reference in New Issue