dram_info
DIV_ROUND_CLOSEST(dram_info->fsb_freq, 1000) == latency->fsb_freq &&
DIV_ROUND_CLOSEST(dram_info->mem_freq, 1000) == latency->mem_freq)
intel_dram_type_str(dram_info->type),
dram_info->fsb_freq, dram_info->mem_freq);
const struct dram_info *dram_info = intel_dram_info(display->drm);
bool is_ddr3 = dram_info->type == INTEL_DRAM_DDR3;
const struct dram_info *dram_info,
qi->num_points = dram_info->num_qgv_points;
qi->num_psf_points = dram_info->num_psf_gv_points;
switch (dram_info->type) {
MISSING_CASE(dram_info->type);
switch (dram_info->type) {
qi->t_bl = dram_info->type == INTEL_DRAM_DDR4 ? 4 : 8;
const struct dram_info *dram_info,
int num_channels = max_t(u8, 1, dram_info->num_channels);
ret = icl_get_qgv_points(display, dram_info, &qi, is_y_tile);
const struct dram_info *dram_info,
int num_channels = max_t(u8, 1, dram_info->num_channels);
ret = icl_get_qgv_points(display, dram_info, &qi, is_y_tile);
(dram_info->type == INTEL_DRAM_LPDDR4 || dram_info->type == INTEL_DRAM_LPDDR5))
const struct dram_info *dram_info,
int num_channels = dram_info->num_channels;
ret = icl_get_qgv_points(display, dram_info, &qi, true);
const struct dram_info *dram_info = intel_dram_info(display->drm);
tgl_get_bw_info(display, dram_info, &xe3lpd_3002_sa_info);
tgl_get_bw_info(display, dram_info, &xe3lpd_sa_info);
dram_info->type == INTEL_DRAM_GDDR_ECC)
xe2_hpd_get_bw_info(display, dram_info, &xe2_hpd_ecc_sa_info);
xe2_hpd_get_bw_info(display, dram_info, &xe2_hpd_sa_info);
tgl_get_bw_info(display, dram_info, &mtl_sa_info);
tgl_get_bw_info(display, dram_info, &adlp_sa_info);
tgl_get_bw_info(display, dram_info, &adls_sa_info);
tgl_get_bw_info(display, dram_info, &rkl_sa_info);
tgl_get_bw_info(display, dram_info, &tgl_sa_info);
icl_get_bw_info(display, dram_info, &icl_sa_info);
const struct dram_info *dram_info = intel_dram_info(display->drm);
if (table[config].num_channels == dram_info->num_channels &&
table[config].type == dram_info->type)
const struct dram_info *dram_info = intel_dram_info(display->drm);
return dram_info->symmetric_memory;
const struct dram_info *dram_info = intel_dram_info(display->drm);
if (!display->platform.dg2 && dram_info->has_16gb_dimms)
const struct dram_info *dram_info;
struct dram_info;
static int i915_get_dram_info(struct drm_i915_private *i915, struct dram_info *dram_info)
dram_info->fsb_freq = intel_fsb_freq(i915);
if (dram_info->fsb_freq)
drm_dbg(&i915->drm, "FSB frequency: %d kHz\n", dram_info->fsb_freq);
dram_info->mem_freq = intel_mem_freq(i915);
if (dram_info->mem_freq)
drm_dbg(&i915->drm, "DDR speed: %d kHz\n", dram_info->mem_freq);
dram_info->type = pnv_dram_type(i915);
skl_dram_get_channels_info(struct drm_i915_private *i915, struct dram_info *dram_info)
dram_info->has_16gb_dimms = true;
dram_info->num_channels++;
dram_info->num_channels++;
if (dram_info->num_channels == 0) {
dram_info->has_16gb_dimms = ch0.is_16gb_dimm || ch1.is_16gb_dimm;
dram_info->symmetric_memory = intel_is_dram_symmetric(&ch0, &ch1);
str_yes_no(dram_info->symmetric_memory));
str_yes_no(dram_info->has_16gb_dimms));
skl_get_dram_info(struct drm_i915_private *i915, struct dram_info *dram_info)
dram_info->type = skl_get_dram_type(i915);
ret = skl_dram_get_channels_info(i915, dram_info);
static int bxt_get_dram_info(struct drm_i915_private *i915, struct dram_info *dram_info)
dram_info->num_channels++;
dram_info->type != INTEL_DRAM_UNKNOWN &&
dram_info->type != type);
dram_info->type = type;
if (dram_info->type == INTEL_DRAM_UNKNOWN || valid_ranks == 0) {
struct dram_info *dram_info)
dram_info->type = INTEL_DRAM_DDR4;
dram_info->type = INTEL_DRAM_DDR5;
dram_info->type = INTEL_DRAM_LPDDR5;
dram_info->type = INTEL_DRAM_LPDDR4;
dram_info->type = INTEL_DRAM_DDR3;
dram_info->type = INTEL_DRAM_LPDDR3;
dram_info->type = INTEL_DRAM_DDR4;
dram_info->type = INTEL_DRAM_DDR3;
dram_info->type = INTEL_DRAM_LPDDR3;
dram_info->type = INTEL_DRAM_LPDDR4;
dram_info->num_channels = (val & 0xf0) >> 4;
dram_info->num_qgv_points = (val & 0xf00) >> 8;
dram_info->num_psf_gv_points = (val & 0x3000) >> 12;
static int gen11_get_dram_info(struct drm_i915_private *i915, struct dram_info *dram_info)
ret = skl_dram_get_channels_info(i915, dram_info);
return icl_pcode_read_mem_global_info(i915, dram_info);
static int gen12_get_dram_info(struct drm_i915_private *i915, struct dram_info *dram_info)
return icl_pcode_read_mem_global_info(i915, dram_info);
static int xelpdp_get_dram_info(struct drm_i915_private *i915, struct dram_info *dram_info)
dram_info->type = INTEL_DRAM_DDR4;
dram_info->type = INTEL_DRAM_DDR5;
dram_info->type = INTEL_DRAM_LPDDR5;
dram_info->type = INTEL_DRAM_LPDDR4;
dram_info->type = INTEL_DRAM_DDR3;
dram_info->type = INTEL_DRAM_LPDDR3;
dram_info->type = INTEL_DRAM_GDDR;
dram_info->type = INTEL_DRAM_GDDR_ECC;
dram_info->num_channels = REG_FIELD_GET(MTL_N_OF_POPULATED_CH_MASK, val);
dram_info->num_qgv_points = REG_FIELD_GET(MTL_N_OF_ENABLED_QGV_POINTS_MASK, val);
struct dram_info *dram_info;
dram_info = drmm_kzalloc(&i915->drm, sizeof(*dram_info), GFP_KERNEL);
if (!dram_info)
i915->dram_info = dram_info;
ret = xelpdp_get_dram_info(i915, dram_info);
ret = gen12_get_dram_info(i915, dram_info);
ret = gen11_get_dram_info(i915, dram_info);
ret = bxt_get_dram_info(i915, dram_info);
ret = skl_get_dram_info(i915, dram_info);
ret = i915_get_dram_info(i915, dram_info);
intel_dram_type_str(dram_info->type));
drm_dbg_kms(&i915->drm, "DRAM channels: %u\n", dram_info->num_channels);
drm_dbg_kms(&i915->drm, "Num QGV points %u\n", dram_info->num_qgv_points);
drm_dbg_kms(&i915->drm, "Num PSF GV points %u\n", dram_info->num_psf_gv_points);
const struct dram_info *intel_dram_info(struct drm_device *drm)
return i915->dram_info;
const struct dram_info *intel_dram_info(struct drm_device *drm);
struct iwx_dram_sec_info dram_info;
struct iwx_dram_sec_info dram_info;