本文整理汇总了C++中dm_read_reg函数的典型用法代码示例。如果您正苦于以下问题:C++ dm_read_reg函数的具体用法?C++ dm_read_reg怎么用?C++ dm_read_reg使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dm_read_reg函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: dce110_compressor_is_fbc_enabled_in_hw
bool dce110_compressor_is_fbc_enabled_in_hw(
struct compressor *compressor,
uint32_t *inst)
{
/* Check the hardware register */
uint32_t value;
value = dm_read_reg(compressor->ctx, mmFBC_STATUS);
if (get_reg_field_value(value, FBC_STATUS, FBC_ENABLE_STATUS)) {
if (inst != NULL)
*inst = compressor->attached_inst;
return true;
}
value = dm_read_reg(compressor->ctx, mmFBC_MISC);
if (get_reg_field_value(value, FBC_MISC, FBC_STOP_ON_HFLIP_EVENT)) {
value = dm_read_reg(compressor->ctx, mmFBC_CNTL);
if (get_reg_field_value(value, FBC_CNTL, FBC_GRPH_COMP_EN)) {
if (inst != NULL)
*inst =
compressor->attached_inst;
return true;
}
}
return false;
}
开发者ID:lcavalcante,项目名称:linux,代码行数:27,代码来源:dce110_compressor.c
示例2: hpd_ack
static bool hpd_ack(
struct irq_service *irq_service,
const struct irq_source_info *info)
{
uint32_t addr = info->status_reg;
uint32_t value = dm_read_reg(irq_service->ctx, addr);
uint32_t current_status =
get_reg_field_value(
value,
HPD0_DC_HPD_INT_STATUS,
DC_HPD_SENSE_DELAYED);
dal_irq_service_ack_generic(irq_service, info);
value = dm_read_reg(irq_service->ctx, info->enable_reg);
set_reg_field_value(
value,
current_status ? 0 : 1,
HPD0_DC_HPD_INT_CONTROL,
DC_HPD_INT_POLARITY);
dm_write_reg(irq_service->ctx, info->enable_reg, value);
return true;
}
开发者ID:MaxKellermann,项目名称:linux,代码行数:26,代码来源:irq_service_dce120.c
示例3: enable_afmt_clock
static void enable_afmt_clock(
const struct hw_ctx_audio *hw_ctx,
enum engine_id engine_id,
bool enable_flag)
{
uint32_t engine_offs = engine_offset[engine_id];
uint32_t value;
uint32_t count = 0;
uint32_t enable = enable_flag ? 1:0;
/* Enable Audio packets*/
value = dm_read_reg(hw_ctx->ctx, mmAFMT_CNTL + engine_offs);
/*enable AFMT clock*/
set_reg_field_value(value, enable,
AFMT_CNTL, AFMT_AUDIO_CLOCK_EN);
dm_write_reg(hw_ctx->ctx, mmAFMT_CNTL + engine_offs, value);
/*wait for AFMT clock to turn on,
* the expectation is that this
* should complete in 1-2 reads)
*/
do {
/* Wait for 1us between subsequent register reads.*/
udelay(1);
value = dm_read_reg(hw_ctx->ctx,
mmAFMT_CNTL + engine_offs);
} while (get_reg_field_value(value,
AFMT_CNTL, AFMT_AUDIO_CLOCK_ON) !=
enable && count++ < 10);
}
开发者ID:RadeonOpenCompute,项目名称:ROCK-Kernel-Driver,代码行数:31,代码来源:hw_ctx_audio_dce112.c
示例4: program_urgency_watermark
static void program_urgency_watermark(
const struct dc_context *ctx,
const uint32_t urgency_addr,
const uint32_t wm_addr,
struct dce_watermarks marks_low,
uint32_t total_dest_line_time_ns)
{
/* register value */
uint32_t urgency_cntl = 0;
uint32_t wm_mask_cntl = 0;
/*Write mask to enable reading/writing of watermark set A*/
wm_mask_cntl = dm_read_reg(ctx, wm_addr);
set_reg_field_value(wm_mask_cntl,
1,
DPGV0_WATERMARK_MASK_CONTROL,
URGENCY_WATERMARK_MASK);
dm_write_reg(ctx, wm_addr, wm_mask_cntl);
urgency_cntl = dm_read_reg(ctx, urgency_addr);
set_reg_field_value(
urgency_cntl,
marks_low.a_mark,
DPGV0_PIPE_URGENCY_CONTROL,
URGENCY_LOW_WATERMARK);
set_reg_field_value(
urgency_cntl,
total_dest_line_time_ns,
DPGV0_PIPE_URGENCY_CONTROL,
URGENCY_HIGH_WATERMARK);
dm_write_reg(ctx, urgency_addr, urgency_cntl);
/*Write mask to enable reading/writing of watermark set B*/
wm_mask_cntl = dm_read_reg(ctx, wm_addr);
set_reg_field_value(wm_mask_cntl,
2,
DPGV0_WATERMARK_MASK_CONTROL,
URGENCY_WATERMARK_MASK);
dm_write_reg(ctx, wm_addr, wm_mask_cntl);
urgency_cntl = dm_read_reg(ctx, urgency_addr);
set_reg_field_value(urgency_cntl,
marks_low.b_mark,
DPGV0_PIPE_URGENCY_CONTROL,
URGENCY_LOW_WATERMARK);
set_reg_field_value(urgency_cntl,
total_dest_line_time_ns,
DPGV0_PIPE_URGENCY_CONTROL,
URGENCY_HIGH_WATERMARK);
dm_write_reg(ctx, urgency_addr, urgency_cntl);
}
开发者ID:MaxKellermann,项目名称:linux,代码行数:56,代码来源:dce110_mem_input_v.c
示例5: dce110_compressor_set_fbc_invalidation_triggers
void dce110_compressor_set_fbc_invalidation_triggers(
struct compressor *compressor,
uint32_t fbc_trigger)
{
/* Disable region hit event, FBC_MEMORY_REGION_MASK = 0 (bits 16-19)
* for DCE 11 regions cannot be used - does not work with S/G
*/
uint32_t addr = mmFBC_CLIENT_REGION_MASK;
uint32_t value = dm_read_reg(compressor->ctx, addr);
set_reg_field_value(
value,
0,
FBC_CLIENT_REGION_MASK,
FBC_MEMORY_REGION_MASK);
dm_write_reg(compressor->ctx, addr, value);
/* Setup events when to clear all CSM entries (effectively marking
* current compressed data invalid)
* For DCE 11 CSM metadata 11111 means - "Not Compressed"
* Used as the initial value of the metadata sent to the compressor
* after invalidation, to indicate that the compressor should attempt
* to compress all chunks on the current pass. Also used when the chunk
* is not successfully written to memory.
* When this CSM value is detected, FBC reads from the uncompressed
* buffer. Set events according to passed in value, these events are
* valid for DCE11:
* - bit 0 - display register updated
* - bit 28 - memory write from any client except from MCIF
* - bit 29 - CG static screen signal is inactive
* In addition, DCE11.1 also needs to set new DCE11.1 specific events
* that are used to trigger invalidation on certain register changes,
* for example enabling of Alpha Compression may trigger invalidation of
* FBC once bit is set. These events are as follows:
* - Bit 2 - FBC_GRPH_COMP_EN register updated
* - Bit 3 - FBC_SRC_SEL register updated
* - Bit 4 - FBC_MIN_COMPRESSION register updated
* - Bit 5 - FBC_ALPHA_COMP_EN register updated
* - Bit 6 - FBC_ZERO_ALPHA_CHUNK_SKIP_EN register updated
* - Bit 7 - FBC_FORCE_COPY_TO_COMP_BUF register updated
*/
addr = mmFBC_IDLE_FORCE_CLEAR_MASK;
value = dm_read_reg(compressor->ctx, addr);
set_reg_field_value(
value,
fbc_trigger |
FBC_IDLE_FORCE_GRPH_COMP_EN |
FBC_IDLE_FORCE_SRC_SEL_CHANGE |
FBC_IDLE_FORCE_MIN_COMPRESSION_CHANGE |
FBC_IDLE_FORCE_ALPHA_COMP_EN |
FBC_IDLE_FORCE_ZERO_ALPHA_CHUNK_SKIP_EN |
FBC_IDLE_FORCE_FORCE_COPY_TO_COMP_BUF,
FBC_IDLE_FORCE_CLEAR_MASK,
FBC_IDLE_FORCE_CLEAR_MASK);
dm_write_reg(compressor->ctx, addr, value);
}
开发者ID:lcavalcante,项目名称:linux,代码行数:56,代码来源:dce110_compressor.c
示例6: dce110_compressor_enable_fbc
void dce110_compressor_enable_fbc(
struct compressor *compressor,
struct compr_addr_and_pitch_params *params)
{
struct dce110_compressor *cp110 = TO_DCE110_COMPRESSOR(compressor);
if (compressor->options.bits.FBC_SUPPORT &&
(!dce110_compressor_is_fbc_enabled_in_hw(compressor, NULL))) {
uint32_t addr;
uint32_t value, misc_value;
addr = mmFBC_CNTL;
value = dm_read_reg(compressor->ctx, addr);
set_reg_field_value(value, 1, FBC_CNTL, FBC_GRPH_COMP_EN);
set_reg_field_value(
value,
params->inst,
FBC_CNTL, FBC_SRC_SEL);
dm_write_reg(compressor->ctx, addr, value);
/* Keep track of enum controller_id FBC is attached to */
compressor->is_enabled = true;
compressor->attached_inst = params->inst;
cp110->offsets = reg_offsets[params->inst];
/* Toggle it as there is bug in HW */
set_reg_field_value(value, 0, FBC_CNTL, FBC_GRPH_COMP_EN);
dm_write_reg(compressor->ctx, addr, value);
/* FBC usage with scatter & gather for dce110 */
misc_value = dm_read_reg(compressor->ctx, mmFBC_MISC);
set_reg_field_value(misc_value, 1,
FBC_MISC, FBC_INVALIDATE_ON_ERROR);
set_reg_field_value(misc_value, 1,
FBC_MISC, FBC_DECOMPRESS_ERROR_CLEAR);
set_reg_field_value(misc_value, 0x14,
FBC_MISC, FBC_SLOW_REQ_INTERVAL);
dm_write_reg(compressor->ctx, mmFBC_MISC, misc_value);
/* Enable FBC */
set_reg_field_value(value, 1, FBC_CNTL, FBC_GRPH_COMP_EN);
dm_write_reg(compressor->ctx, addr, value);
wait_for_fbc_state_changed(cp110, true);
}
}
开发者ID:lcavalcante,项目名称:linux,代码行数:50,代码来源:dce110_compressor.c
示例7: power_on_lut
static void power_on_lut(struct transform *xfm,
bool power_on, bool inputgamma, bool regamma)
{
uint32_t value = dm_read_reg(xfm->ctx, mmDCFEV_MEM_PWR_CTRL);
int i;
if (power_on) {
if (inputgamma)
set_reg_field_value(
value,
1,
DCFEV_MEM_PWR_CTRL,
COL_MAN_INPUT_GAMMA_MEM_PWR_DIS);
if (regamma)
set_reg_field_value(
value,
1,
DCFEV_MEM_PWR_CTRL,
COL_MAN_GAMMA_CORR_MEM_PWR_DIS);
} else {
if (inputgamma)
set_reg_field_value(
value,
0,
DCFEV_MEM_PWR_CTRL,
COL_MAN_INPUT_GAMMA_MEM_PWR_DIS);
if (regamma)
set_reg_field_value(
value,
0,
DCFEV_MEM_PWR_CTRL,
COL_MAN_GAMMA_CORR_MEM_PWR_DIS);
}
dm_write_reg(xfm->ctx, mmDCFEV_MEM_PWR_CTRL, value);
for (i = 0; i < 3; i++) {
value = dm_read_reg(xfm->ctx, mmDCFEV_MEM_PWR_CTRL);
if (get_reg_field_value(value,
DCFEV_MEM_PWR_CTRL,
COL_MAN_INPUT_GAMMA_MEM_PWR_DIS) &&
get_reg_field_value(value,
DCFEV_MEM_PWR_CTRL,
COL_MAN_GAMMA_CORR_MEM_PWR_DIS))
break;
udelay(2);
}
}
开发者ID:MaxKellermann,项目名称:linux,代码行数:49,代码来源:dce110_opp_regamma_v.c
示例8: setup_i2c_polling
static void setup_i2c_polling(
struct dc_context *ctx,
const uint32_t addr,
bool enable_detect,
bool detect_mode)
{
uint32_t value;
value = dm_read_reg(ctx, addr);
set_reg_field_value(
value,
enable_detect,
DC_I2C_DDC1_SETUP,
DC_I2C_DDC1_ENABLE);
set_reg_field_value(
value,
enable_detect,
DC_I2C_DDC1_SETUP,
DC_I2C_DDC1_EDID_DETECT_ENABLE);
if (enable_detect)
set_reg_field_value(
value,
detect_mode,
DC_I2C_DDC1_SETUP,
DC_I2C_DDC1_EDID_DETECT_MODE);
dm_write_reg(ctx, addr, value);
}
开发者ID:RadeonOpenCompute,项目名称:ROCK-Kernel-Driver,代码行数:31,代码来源:hw_ddc_dce80.c
示例9: dce110_opp_power_on_regamma_lut_v
void dce110_opp_power_on_regamma_lut_v(
struct transform *xfm,
bool power_on)
{
uint32_t value = dm_read_reg(xfm->ctx, mmDCFEV_MEM_PWR_CTRL);
set_reg_field_value(
value,
0,
DCFEV_MEM_PWR_CTRL,
COL_MAN_GAMMA_CORR_MEM_PWR_FORCE);
set_reg_field_value(
value,
power_on,
DCFEV_MEM_PWR_CTRL,
COL_MAN_GAMMA_CORR_MEM_PWR_DIS);
set_reg_field_value(
value,
0,
DCFEV_MEM_PWR_CTRL,
COL_MAN_INPUT_GAMMA_MEM_PWR_FORCE);
set_reg_field_value(
value,
power_on,
DCFEV_MEM_PWR_CTRL,
COL_MAN_INPUT_GAMMA_MEM_PWR_DIS);
dm_write_reg(xfm->ctx, mmDCFEV_MEM_PWR_CTRL, value);
}
开发者ID:MaxKellermann,项目名称:linux,代码行数:32,代码来源:dce110_opp_regamma_v.c
示例10: get_value
static enum gpio_result get_value(
const struct hw_gpio_pin *ptr,
uint32_t *value)
{
struct hw_hpd_dce110 *pin = HPD_DCE110_FROM_BASE(ptr);
/* in Interrupt mode we ask for SENSE bit */
if (ptr->mode == GPIO_MODE_INTERRUPT) {
uint32_t regval;
uint32_t hpd_delayed = 0;
uint32_t hpd_sense = 0;
regval = dm_read_reg(
ptr->ctx,
pin->addr.DC_HPD_INT_STATUS);
hpd_delayed = get_reg_field_value(
regval,
DC_HPD_INT_STATUS,
DC_HPD_SENSE_DELAYED);
hpd_sense = get_reg_field_value(
regval,
DC_HPD_INT_STATUS,
DC_HPD_SENSE);
*value = hpd_delayed;
return GPIO_RESULT_OK;
}
/* in any other modes, operate as normal GPIO */
return dal_hw_gpio_get_value(ptr, value);
}
开发者ID:RadeonOpenCompute,项目名称:ROCK-Kernel-Driver,代码行数:35,代码来源:hw_hpd_dce110.c
示例11: wait_for_fbc_state_changed
static void wait_for_fbc_state_changed(
struct dce110_compressor *cp110,
bool enabled)
{
uint8_t counter = 0;
uint32_t addr = mmFBC_STATUS;
uint32_t value;
while (counter < 10) {
value = dm_read_reg(cp110->base.ctx, addr);
if (get_reg_field_value(
value,
FBC_STATUS,
FBC_ENABLE_STATUS) == enabled)
break;
msleep(10);
counter++;
}
if (counter == 10) {
DC_LOG_WARNING("%s: wait counter exceeded, changes to HW not applied",
__func__);
} else {
DC_LOG_SYNC("FBC status changed to %d", enabled);
}
}
开发者ID:lcavalcante,项目名称:linux,代码行数:28,代码来源:dce110_compressor.c
示例12: generic_reg_get
uint32_t generic_reg_get(const struct dc_context *ctx, uint32_t addr,
uint8_t shift, uint32_t mask, uint32_t *field_value)
{
uint32_t reg_val = dm_read_reg(ctx, addr);
*field_value = get_reg_field_value_ex(reg_val, mask, shift);
return reg_val;
}
开发者ID:avagin,项目名称:linux,代码行数:7,代码来源:dc_helper.c
示例13: get_clock
static uint32_t get_clock(struct display_clock *dc)
{
uint32_t disp_clock = get_validation_clock(dc);
uint32_t target_div = INVALID_DIVIDER;
uint32_t addr = mmDENTIST_DISPCLK_CNTL;
uint32_t value = 0;
uint32_t field = 0;
struct display_clock_dce110 *disp_clk = DCLCK110_FROM_BASE(dc);
if (disp_clk->dfs_bypass_enabled && disp_clk->dfs_bypass_disp_clk)
return disp_clk->dfs_bypass_disp_clk;
/* Read the mmDENTIST_DISPCLK_CNTL to get the currently programmed
DID DENTIST_DISPCLK_WDIVIDER.*/
value = dm_read_reg(dc->ctx, addr);
field = get_reg_field_value(
value, DENTIST_DISPCLK_CNTL, DENTIST_DISPCLK_WDIVIDER);
/* Convert DENTIST_DISPCLK_WDIVIDER to actual divider*/
target_div = dal_divider_range_get_divider(
divider_ranges,
DIVIDER_RANGE_MAX,
field);
if (target_div != INVALID_DIVIDER)
/* Calculate the current DFS clock in KHz.
Should be okay up to 42.9 THz before overflowing.*/
disp_clock = (DIVIDER_RANGE_SCALE_FACTOR
* disp_clk->dentist_vco_freq_khz) / target_div;
return disp_clock;
}
开发者ID:RadeonOpenCompute,项目名称:ROCK-Kernel-Driver,代码行数:31,代码来源:display_clock_dce110.c
示例14: dce110_tg_v_program_blank_color
static void dce110_tg_v_program_blank_color(struct timing_generator *tg,
const struct tg_color *black_color)
{
uint32_t addr = mmCRTCV_BLACK_COLOR;
uint32_t value = dm_read_reg(tg->ctx, addr);
set_reg_field_value(
value,
black_color->color_b_cb,
CRTCV_BLACK_COLOR,
CRTC_BLACK_COLOR_B_CB);
set_reg_field_value(
value,
black_color->color_g_y,
CRTCV_BLACK_COLOR,
CRTC_BLACK_COLOR_G_Y);
set_reg_field_value(
value,
black_color->color_r_cr,
CRTCV_BLACK_COLOR,
CRTC_BLACK_COLOR_R_CR);
dm_write_reg(tg->ctx, addr, value);
addr = mmCRTCV_BLANK_DATA_COLOR;
dm_write_reg(tg->ctx, addr, value);
}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:27,代码来源:dce110_timing_generator_v.c
示例15: enable_dp_audio
/* enable DP audio */
static void enable_dp_audio(
const struct hw_ctx_audio *hw_ctx,
enum engine_id engine_id)
{
const uint32_t addr = mmDP_SEC_CNTL + engine_offset[engine_id];
uint32_t value;
/* Enable Audio packets */
value = dm_read_reg(hw_ctx->ctx, addr);
set_reg_field_value(value, 1,
DP_SEC_CNTL,
DP_SEC_ASP_ENABLE);
dm_write_reg(hw_ctx->ctx, addr, value);
/* Program the ATP and AIP next */
set_reg_field_value(value, 1,
DP_SEC_CNTL,
DP_SEC_ATP_ENABLE);
set_reg_field_value(value, 1,
DP_SEC_CNTL,
DP_SEC_AIP_ENABLE);
dm_write_reg(hw_ctx->ctx, addr, value);
/* Program STREAM_ENABLE after all the other enables. */
set_reg_field_value(value, 1,
DP_SEC_CNTL,
DP_SEC_STREAM_ENABLE);
dm_write_reg(hw_ctx->ctx, addr, value);
}
开发者ID:RadeonOpenCompute,项目名称:ROCK-Kernel-Driver,代码行数:35,代码来源:hw_ctx_audio_dce112.c
示例16: dce80_stream_encoder_stop_dp_info_packets
void dce80_stream_encoder_stop_dp_info_packets(
struct stream_encoder *enc)
{
/* stop generic packets on DP */
struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
struct dc_context *ctx = enc110->base.ctx;
uint32_t addr = LINK_REG(DP_SEC_CNTL);
uint32_t value = dm_read_reg(ctx, addr);
set_reg_field_value(value, 0, DP_SEC_CNTL, DP_SEC_GSP0_ENABLE);
set_reg_field_value(value, 0, DP_SEC_CNTL, DP_SEC_GSP1_ENABLE);
set_reg_field_value(value, 0, DP_SEC_CNTL, DP_SEC_GSP2_ENABLE);
set_reg_field_value(value, 0, DP_SEC_CNTL, DP_SEC_GSP3_ENABLE);
set_reg_field_value(value, 0, DP_SEC_CNTL, DP_SEC_AVI_ENABLE);
set_reg_field_value(value, 0, DP_SEC_CNTL, DP_SEC_MPG_ENABLE);
set_reg_field_value(value, 0, DP_SEC_CNTL, DP_SEC_STREAM_ENABLE);
/* this register shared with audio info frame.
* therefore we need to keep master enabled
* if at least one of the fields is not 0
*/
if (value)
set_reg_field_value(
value,
1,
DP_SEC_CNTL,
DP_SEC_STREAM_ENABLE);
dm_write_reg(ctx, addr, value);
}
开发者ID:RadeonOpenCompute,项目名称:ROCK-Kernel-Driver,代码行数:31,代码来源:dce80_stream_encoder.c
示例17: set_truncation
/**
* set_truncation
* 1) set truncation depth: 0 for 18 bpp or 1 for 24 bpp
* 2) enable truncation
* 3) HW remove 12bit FMT support for DCE8 power saving reason.
*/
static void set_truncation(
struct dce80_opp *opp80,
const struct bit_depth_reduction_params *params)
{
uint32_t value = 0;
uint32_t addr = FMT_REG(mmFMT_BIT_DEPTH_CONTROL);
/*Disable truncation*/
value = dm_read_reg(opp80->base.ctx, addr);
set_reg_field_value(value, 0,
FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_EN);
set_reg_field_value(value, 0,
FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_DEPTH);
set_reg_field_value(value, 0,
FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_MODE);
dm_write_reg(opp80->base.ctx, addr, value);
/* no 10bpc trunc on DCE8*/
if (params->flags.TRUNCATE_ENABLED == 0 ||
params->flags.TRUNCATE_DEPTH == 2)
return;
/*Set truncation depth and Enable truncation*/
set_reg_field_value(value, 1,
FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_EN);
set_reg_field_value(value, params->flags.TRUNCATE_MODE,
FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_MODE);
set_reg_field_value(value, params->flags.TRUNCATE_DEPTH,
FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_DEPTH);
dm_write_reg(opp80->base.ctx, addr, value);
}
开发者ID:RadeonOpenCompute,项目名称:ROCK-Kernel-Driver,代码行数:40,代码来源:dce80_opp_formatter.c
示例18: dce110_compressor_power_up_fbc
void dce110_compressor_power_up_fbc(struct compressor *compressor)
{
uint32_t value;
uint32_t addr;
addr = mmFBC_CNTL;
value = dm_read_reg(compressor->ctx, addr);
set_reg_field_value(value, 0, FBC_CNTL, FBC_GRPH_COMP_EN);
set_reg_field_value(value, 1, FBC_CNTL, FBC_EN);
set_reg_field_value(value, 2, FBC_CNTL, FBC_COHERENCY_MODE);
if (compressor->options.bits.CLK_GATING_DISABLED == 1) {
/* HW needs to do power measurement comparison. */
set_reg_field_value(
value,
0,
FBC_CNTL,
FBC_COMP_CLK_GATE_EN);
}
dm_write_reg(compressor->ctx, addr, value);
addr = mmFBC_COMP_MODE;
value = dm_read_reg(compressor->ctx, addr);
set_reg_field_value(value, 1, FBC_COMP_MODE, FBC_RLE_EN);
set_reg_field_value(value, 1, FBC_COMP_MODE, FBC_DPCM4_RGB_EN);
set_reg_field_value(value, 1, FBC_COMP_MODE, FBC_IND_EN);
dm_write_reg(compressor->ctx, addr, value);
addr = mmFBC_COMP_CNTL;
value = dm_read_reg(compressor->ctx, addr);
set_reg_field_value(value, 1, FBC_COMP_CNTL, FBC_DEPTH_RGB08_EN);
dm_write_reg(compressor->ctx, addr, value);
/*FBC_MIN_COMPRESSION 0 ==> 2:1 */
/* 1 ==> 4:1 */
/* 2 ==> 8:1 */
/* 0xF ==> 1:1 */
set_reg_field_value(value, 0xF, FBC_COMP_CNTL, FBC_MIN_COMPRESSION);
dm_write_reg(compressor->ctx, addr, value);
compressor->min_compress_ratio = FBC_COMPRESS_RATIO_1TO1;
value = 0;
dm_write_reg(compressor->ctx, mmFBC_IND_LUT0, value);
value = 0xFFFFFF;
dm_write_reg(compressor->ctx, mmFBC_IND_LUT1, value);
}
开发者ID:lcavalcante,项目名称:linux,代码行数:45,代码来源:dce110_compressor.c
示例19: hw_initialize
/* initialize HW state */
static void hw_initialize(
const struct hw_ctx_audio *hw_ctx)
{
uint32_t stream_id = FROM_BASE(hw_ctx)->azalia_stream_id;
uint32_t addr;
/* we only need to program the following registers once, so we only do
it for the first audio stream.*/
if (stream_id != FIRST_AUDIO_STREAM_ID)
return;
/* Suport R5 - 32khz
* Suport R6 - 44.1khz
* Suport R7 - 48khz
*/
addr = mmAZALIA_F0_CODEC_FUNCTION_PARAMETER_SUPPORTED_SIZE_RATES;
{
uint32_t value;
value = dm_read_reg(hw_ctx->ctx, addr);
set_reg_field_value(value, 0x70,
AZALIA_F0_CODEC_FUNCTION_PARAMETER_SUPPORTED_SIZE_RATES,
AUDIO_RATE_CAPABILITIES);
dm_write_reg(hw_ctx->ctx, addr, value);
}
/*Keep alive bit to verify HW block in BU. */
addr = mmAZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES;
{
uint32_t value;
value = dm_read_reg(hw_ctx->ctx, addr);
set_reg_field_value(value, 1,
AZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES,
CLKSTOP);
set_reg_field_value(value, 1,
AZALIA_F0_CODEC_FUNCTION_PARAMETER_POWER_STATES,
EPSS);
dm_write_reg(hw_ctx->ctx, addr, value);
}
}
开发者ID:RadeonOpenCompute,项目名称:ROCK-Kernel-Driver,代码行数:46,代码来源:hw_ctx_audio_dce112.c
示例20: generic_reg_get2
uint32_t generic_reg_get2(const struct dc_context *ctx, uint32_t addr,
uint8_t shift1, uint32_t mask1, uint32_t *field_value1,
uint8_t shift2, uint32_t mask2, uint32_t *field_value2)
{
uint32_t reg_val = dm_read_reg(ctx, addr);
*field_value1 = get_reg_field_value_ex(reg_val, mask1, shift1);
*field_value2 = get_reg_field_value_ex(reg_val, mask2, shift2);
return reg_val;
}
开发者ID:avagin,项目名称:linux,代码行数:9,代码来源:dc_helper.c
注:本文中的dm_read_reg函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论