include/linux/soc/qcom/ubwc.h
Source file repositories/reference/linux-study-clean/include/linux/soc/qcom/ubwc.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/soc/qcom/ubwc.h- Extension
.h- Size
- 3186 bytes
- Lines
- 125
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/bits.hlinux/printk.hlinux/types.h
Detected Declarations
struct qcom_ubwc_cfg_datafunction qcom_ubwc_get_ubwc_modefunction qcom_ubwc_min_acc_length_64bfunction qcom_ubwc_macrotile_modefunction qcom_ubwc_bank_spreadfunction qcom_ubwc_swizzlefunction qcom_ubwc_version_tagfunction qcom_ubwc_enable_amsbc
Annotated Snippet
struct qcom_ubwc_cfg_data {
u32 ubwc_enc_version;
/* Can be read from MDSS_BASE + 0x58 */
u32 ubwc_dec_version;
/**
* @ubwc_swizzle: Whether to enable level 1, 2 & 3 bank swizzling.
*
* UBWC 1.0 always enables all three levels.
* UBWC 2.0 removes level 1 bank swizzling, leaving levels 2 & 3.
* UBWC 4.0 adds the optional ability to disable levels 2 & 3.
*/
u32 ubwc_swizzle;
#define UBWC_SWIZZLE_ENABLE_LVL1 BIT(0)
#define UBWC_SWIZZLE_ENABLE_LVL2 BIT(1)
#define UBWC_SWIZZLE_ENABLE_LVL3 BIT(2)
/**
* @highest_bank_bit: Highest Bank Bit
*
* The Highest Bank Bit value represents the bit of the highest
* DDR bank. This should ideally use DRAM type detection.
*/
int highest_bank_bit;
bool ubwc_bank_spread;
/**
* @macrotile_mode: Macrotile Mode
*
* Whether to use 4-channel macrotiling mode or the newer
* 8-channel macrotiling mode introduced in UBWC 3.1. 0 is
* 4-channel and 1 is 8-channel.
*/
bool macrotile_mode;
};
#define UBWC_1_0 0x10000000
#define UBWC_2_0 0x20000000
#define UBWC_3_0 0x30000000
#define UBWC_3_1 0x30010000 /* UBWC 3.0 + Macrotile mode */
#define UBWC_4_0 0x40000000
#define UBWC_4_3 0x40030000
#define UBWC_5_0 0x50000000
#define UBWC_6_0 0x60000000
#if IS_ENABLED(CONFIG_QCOM_UBWC_CONFIG)
const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void);
#else
static inline const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void)
{
return ERR_PTR(-EOPNOTSUPP);
}
#endif
static inline bool qcom_ubwc_get_ubwc_mode(const struct qcom_ubwc_cfg_data *cfg)
{
bool ret = cfg->ubwc_enc_version == UBWC_1_0;
if (ret && !(cfg->ubwc_swizzle & UBWC_SWIZZLE_ENABLE_LVL1))
pr_err("UBWC config discrepancy - level 1 swizzling disabled on UBWC 1.0\n");
return ret;
}
/*
* This is the best guess, based on the MDSS driver, which worked so far.
*/
static inline bool qcom_ubwc_min_acc_length_64b(const struct qcom_ubwc_cfg_data *cfg)
{
return cfg->ubwc_enc_version == UBWC_1_0 &&
(cfg->ubwc_dec_version == UBWC_2_0 ||
cfg->ubwc_dec_version == UBWC_3_0);
}
static inline bool qcom_ubwc_macrotile_mode(const struct qcom_ubwc_cfg_data *cfg)
{
return cfg->macrotile_mode;
}
static inline bool qcom_ubwc_bank_spread(const struct qcom_ubwc_cfg_data *cfg)
{
return cfg->ubwc_bank_spread;
}
static inline u32 qcom_ubwc_swizzle(const struct qcom_ubwc_cfg_data *cfg)
{
return cfg->ubwc_swizzle;
}
static inline u32 qcom_ubwc_version_tag(const struct qcom_ubwc_cfg_data *cfg)
Annotation
- Immediate include surface: `linux/bits.h`, `linux/printk.h`, `linux/types.h`.
- Detected declarations: `struct qcom_ubwc_cfg_data`, `function qcom_ubwc_get_ubwc_mode`, `function qcom_ubwc_min_acc_length_64b`, `function qcom_ubwc_macrotile_mode`, `function qcom_ubwc_bank_spread`, `function qcom_ubwc_swizzle`, `function qcom_ubwc_version_tag`, `function qcom_ubwc_enable_amsbc`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.