dmcu
struct dmcu_firmware_header_v1_0 dmcu;
if (dc->res_pool->dmcu != NULL)
dc->versions.dmcu_version = dc->res_pool->dmcu->dmcu_version;
struct dmcu *dmcu = core_dc->res_pool->dmcu;
if ((dmcu == NULL) ||
use_smooth_brightness = dmcu->funcs->is_dmcu_initialized(dmcu);
struct dmcu *dmcu = core_dc->res_pool->dmcu;
if (dmcu != NULL && link->psr_enabled)
dmcu->funcs->set_psr_enable(dmcu, enable, wait);
struct dmcu *dmcu = core_dc->res_pool->dmcu;
dmcu->funcs->set_psr_wait_loop(dmcu, actual_clk_khz / 1000 / 7);
struct dmcu *dmcu = core_dc->res_pool->dmcu;
dmcu->funcs->set_psr_wait_loop(dmcu,
static void dce_dmcu_set_psr_enable(struct dmcu *dmcu, bool enable, bool wait)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
dce_get_dmcu_psr_state(dmcu, &psr_state);
static bool dce_dmcu_setup_psr(struct dmcu *dmcu,
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG1),
dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG2),
dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG3),
static bool dce_is_dmcu_initialized(struct dmcu *dmcu)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
struct dmcu *dmcu,
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
if (dmcu->cached_wait_loop_number == wait_loop_number)
if (!dce_is_dmcu_initialized(dmcu))
dmcu->cached_wait_loop_number = wait_loop_number;
dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG1), masterCmdData1.u32);
struct dmcu *dmcu, unsigned int *psr_wait_loop_number)
*psr_wait_loop_number = dmcu->cached_wait_loop_number;
static void dcn10_get_dmcu_state(struct dmcu *dmcu)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
dmcu->dmcu_state = REG_READ(DMCU_IRAM_RD_DATA);
#define TO_DCE_DMCU(dmcu)\
static void dcn10_get_dmcu_version(struct dmcu *dmcu)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
container_of(dmcu, struct dce_dmcu, base)
dmcu->dmcu_version.interface_version = REG_READ(DMCU_IRAM_RD_DATA);
dmcu->dmcu_version.year = ((REG_READ(DMCU_IRAM_RD_DATA) << 8) |
dmcu->dmcu_version.month = REG_READ(DMCU_IRAM_RD_DATA);
dmcu->dmcu_version.date = REG_READ(DMCU_IRAM_RD_DATA);
if (dmcu->dmcu_version.interface_version != REG_READ(DC_DMCU_SCRATCH))
dmcu->dmcu_version.interface_version = 0;
static bool dcn10_dmcu_init(struct dmcu *dmcu)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
dcn10_get_dmcu_state(dmcu);
if (dmcu->dmcu_state == DMCU_RUNNING)
dcn10_get_dmcu_version(dmcu);
if (dmcu->dmcu_version.interface_version == 0)
dcn10_get_dmcu_state(dmcu);
if (dmcu->dmcu_state != DMCU_RUNNING)
static bool dcn10_dmcu_load_iram(struct dmcu *dmcu,
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
if (dmcu->dmcu_state != DMCU_RUNNING)
static void dcn10_get_dmcu_psr_state(struct dmcu *dmcu, uint32_t *psr_state)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
if (dmcu->dmcu_state != DMCU_RUNNING)
static void dcn10_dmcu_set_psr_enable(struct dmcu *dmcu, bool enable, bool wait)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
if (dmcu->dmcu_state != DMCU_RUNNING)
dcn10_get_dmcu_psr_state(dmcu, &psr_state);
dcn10_get_dmcu_psr_state(dmcu, &psr_state);
static bool dcn10_dmcu_setup_psr(struct dmcu *dmcu,
static bool dce_dmcu_init(struct dmcu *dmcu)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
if (dmcu->dmcu_state != DMCU_RUNNING)
bool dce_dmcu_load_iram(struct dmcu *dmcu,
dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG1),
dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG2),
dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG3),
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
struct dmcu *dmcu,
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
if (dmcu->dmcu_state != DMCU_RUNNING)
dmcu->cached_wait_loop_number = wait_loop_number;
dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG1), masterCmdData1.u32);
struct dmcu *dmcu, unsigned int *psr_wait_loop_number)
*psr_wait_loop_number = dmcu->cached_wait_loop_number;
static bool dcn10_is_dmcu_initialized(struct dmcu *dmcu)
if (dmcu->dmcu_state != DMCU_RUNNING)
struct dmcu *base = &dmcu_dce->base;
struct dmcu *dce_dmcu_create(
struct dmcu *dcn10_dmcu_create(
void dce_dmcu_destroy(struct dmcu **dmcu)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(*dmcu);
*dmcu = NULL;
static void dce_get_dmcu_psr_state(struct dmcu *dmcu, uint32_t *psr_state)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
struct dmcu base;
struct dmcu *dce_dmcu_create(
struct dmcu *dcn10_dmcu_create(
void dce_dmcu_destroy(struct dmcu **dmcu);
if (pool->base.dmcu != NULL)
dce_dmcu_destroy(&pool->base.dmcu);
pool->base.dmcu = dce_dmcu_create(ctx,
if (pool->base.dmcu == NULL) {
pool->base.dmcu = dce_dmcu_create(ctx,
if (pool->base.dmcu == NULL) {
if (pool->base.dmcu != NULL)
dce_dmcu_destroy(&pool->base.dmcu);
pool->base.dmcu = dce_dmcu_create(ctx,
if (pool->base.dmcu == NULL) {
if (pool->base.dmcu != NULL)
dce_dmcu_destroy(&pool->base.dmcu);
if (pool->base.dmcu != NULL)
dce_dmcu_destroy(&pool->base.dmcu);
pool->base.dmcu = dce_dmcu_create(ctx,
if (pool->base.dmcu == NULL) {
pool->base.dmcu = dce_dmcu_create(ctx,
if (pool->base.dmcu == NULL) {
pool->base.dmcu = dce_dmcu_create(ctx,
if (pool->base.dmcu == NULL) {
if (pool->base.dmcu != NULL)
dce_dmcu_destroy(&pool->base.dmcu);
pool->base.dmcu = dce_dmcu_create(ctx,
if (pool->base.dmcu == NULL) {
if (dmcu != NULL)
dmcu->funcs->dmcu_init(dmcu);
struct dmcu *dmcu = dc->res_pool->dmcu;
pool->base.dmcu = dcn10_dmcu_create(ctx,
if (pool->base.dmcu == NULL) {
if (pool->base.dmcu != NULL)
dce_dmcu_destroy(&pool->base.dmcu);
struct dmcu *dmcu;
bool (*dmcu_init)(struct dmcu *dmcu);
bool (*load_iram)(struct dmcu *dmcu,
void (*set_psr_enable)(struct dmcu *dmcu, bool enable, bool wait);
bool (*setup_psr)(struct dmcu *dmcu,
void (*get_psr_state)(struct dmcu *dmcu, uint32_t *psr_state);
void (*set_psr_wait_loop)(struct dmcu *dmcu,
void (*get_psr_wait_loop)(struct dmcu *dmcu,
bool (*is_dmcu_initialized)(struct dmcu *dmcu);