drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c- Extension
.c- Size
- 6393 bytes
- Lines
- 247
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
drm/drm_atomic_helper.hdrm/drm_device.hdrm/drm_edid.hdrm/drm_fourcc.hdrm/drm_framebuffer.hdrm/drm_probe_helper.hdrm/drm_writeback.hrcar_du_crtc.hrcar_du_drv.hrcar_du_kms.hrcar_du_writeback.h
Detected Declarations
struct rcar_du_wb_conn_statestruct rcar_du_wb_jobfunction rcar_du_wb_conn_get_modesfunction rcar_du_wb_prepare_jobfunction rcar_du_wb_cleanup_jobfunction rcar_du_wb_conn_duplicate_statefunction rcar_du_wb_conn_destroy_statefunction rcar_du_wb_conn_resetfunction rcar_du_wb_enc_atomic_checkfunction rcar_du_writeback_initfunction rcar_du_writeback_setupfunction rcar_du_writeback_complete
Annotated Snippet
struct rcar_du_wb_conn_state {
struct drm_connector_state state;
const struct rcar_du_format_info *format;
};
#define to_rcar_wb_conn_state(s) \
container_of(s, struct rcar_du_wb_conn_state, state)
/**
* struct rcar_du_wb_job - Driver-private data for writeback jobs
* @sg_tables: scatter-gather tables for the framebuffer memory
*/
struct rcar_du_wb_job {
struct sg_table sg_tables[3];
};
static int rcar_du_wb_conn_get_modes(struct drm_connector *connector)
{
struct drm_device *dev = connector->dev;
return drm_add_modes_noedid(connector, dev->mode_config.max_width,
dev->mode_config.max_height);
}
static int rcar_du_wb_prepare_job(struct drm_writeback_connector *connector,
struct drm_writeback_job *job)
{
struct rcar_du_crtc *rcrtc = wb_to_rcar_crtc(connector);
struct rcar_du_wb_job *rjob;
int ret;
if (!job->fb)
return 0;
rjob = kzalloc_obj(*rjob);
if (!rjob)
return -ENOMEM;
/* Map the framebuffer to the VSP. */
ret = rcar_du_vsp_map_fb(rcrtc->vsp, job->fb, rjob->sg_tables);
if (ret < 0) {
kfree(rjob);
return ret;
}
job->priv = rjob;
return 0;
}
static void rcar_du_wb_cleanup_job(struct drm_writeback_connector *connector,
struct drm_writeback_job *job)
{
struct rcar_du_crtc *rcrtc = wb_to_rcar_crtc(connector);
struct rcar_du_wb_job *rjob = job->priv;
if (!job->fb)
return;
rcar_du_vsp_unmap_fb(rcrtc->vsp, job->fb, rjob->sg_tables);
kfree(rjob);
}
static const struct drm_connector_helper_funcs rcar_du_wb_conn_helper_funcs = {
.get_modes = rcar_du_wb_conn_get_modes,
.prepare_writeback_job = rcar_du_wb_prepare_job,
.cleanup_writeback_job = rcar_du_wb_cleanup_job,
};
static struct drm_connector_state *
rcar_du_wb_conn_duplicate_state(struct drm_connector *connector)
{
struct rcar_du_wb_conn_state *copy;
if (WARN_ON(!connector->state))
return NULL;
copy = kzalloc_obj(*copy);
if (!copy)
return NULL;
__drm_atomic_helper_connector_duplicate_state(connector, ©->state);
return ©->state;
}
static void rcar_du_wb_conn_destroy_state(struct drm_connector *connector,
struct drm_connector_state *state)
{
__drm_atomic_helper_connector_destroy_state(state);
kfree(to_rcar_wb_conn_state(state));
Annotation
- Immediate include surface: `drm/drm_atomic_helper.h`, `drm/drm_device.h`, `drm/drm_edid.h`, `drm/drm_fourcc.h`, `drm/drm_framebuffer.h`, `drm/drm_probe_helper.h`, `drm/drm_writeback.h`, `rcar_du_crtc.h`.
- Detected declarations: `struct rcar_du_wb_conn_state`, `struct rcar_du_wb_job`, `function rcar_du_wb_conn_get_modes`, `function rcar_du_wb_prepare_job`, `function rcar_du_wb_cleanup_job`, `function rcar_du_wb_conn_duplicate_state`, `function rcar_du_wb_conn_destroy_state`, `function rcar_du_wb_conn_reset`, `function rcar_du_wb_enc_atomic_check`, `function rcar_du_writeback_init`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.