mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-21 04:53:46 -04:00
drm/amd/display: Get fb base and fb offset for DMUB from registers
[Why] Under some hardware initialization sequences the fb base/fb offset provided can be zero or hardwareinit can happen too late. We want to ensure that we always have the correct fb_base/fb_offset when performing DMCUB hardware initialization so we can do DMCUB command table offloading during first dc hardware init. [How] Read from the DCN registers. VBIOS already filled these in for us. Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Wesley Chalmers <Wesley.Chalmers@amd.com> Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
07d4f90532
commit
153ca76021
@@ -54,6 +54,19 @@ const struct dmub_srv_common_regs dmub_srv_dcn20_regs = {
|
||||
|
||||
/* Shared functions. */
|
||||
|
||||
static void dmub_dcn20_get_fb_base_offset(struct dmub_srv *dmub,
|
||||
uint64_t *fb_base,
|
||||
uint64_t *fb_offset)
|
||||
{
|
||||
uint32_t tmp;
|
||||
|
||||
REG_GET(DCN_VM_FB_LOCATION_BASE, FB_BASE, &tmp);
|
||||
*fb_base = (uint64_t)tmp << 24;
|
||||
|
||||
REG_GET(DCN_VM_FB_OFFSET, FB_OFFSET, &tmp);
|
||||
*fb_offset = (uint64_t)tmp << 24;
|
||||
}
|
||||
|
||||
static inline void dmub_dcn20_translate_addr(const union dmub_addr *addr_in,
|
||||
uint64_t fb_base,
|
||||
uint64_t fb_offset,
|
||||
@@ -82,7 +95,9 @@ void dmub_dcn20_backdoor_load(struct dmub_srv *dmub,
|
||||
const struct dmub_window *cw1)
|
||||
{
|
||||
union dmub_addr offset;
|
||||
uint64_t fb_base = dmub->fb_base, fb_offset = dmub->fb_offset;
|
||||
uint64_t fb_base, fb_offset;
|
||||
|
||||
dmub_dcn20_get_fb_base_offset(dmub, &fb_base, &fb_offset);
|
||||
|
||||
REG_UPDATE(DMCUB_SEC_CNTL, DMCUB_SEC_RESET, 1);
|
||||
REG_UPDATE_2(DMCUB_MEM_CNTL, DMCUB_MEM_READ_SPACE, 0x3,
|
||||
@@ -118,7 +133,9 @@ void dmub_dcn20_setup_windows(struct dmub_srv *dmub,
|
||||
const struct dmub_window *cw6)
|
||||
{
|
||||
union dmub_addr offset;
|
||||
uint64_t fb_base = dmub->fb_base, fb_offset = dmub->fb_offset;
|
||||
uint64_t fb_base, fb_offset;
|
||||
|
||||
dmub_dcn20_get_fb_base_offset(dmub, &fb_base, &fb_offset);
|
||||
|
||||
dmub_dcn20_translate_addr(&cw2->offset, fb_base, fb_offset, &offset);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user