Lines Matching full:vpu

26 #include "vpu.h"
32 void vpu_writel(struct vpu_dev *vpu, u32 reg, u32 val) in vpu_writel() argument
34 writel(val, vpu->base + reg); in vpu_writel()
37 u32 vpu_readl(struct vpu_dev *vpu, u32 reg) in vpu_readl() argument
39 return readl(vpu->base + reg); in vpu_readl()
42 static void vpu_dev_get(struct vpu_dev *vpu) in vpu_dev_get() argument
44 if (atomic_inc_return(&vpu->ref_vpu) == 1 && vpu->res->setup) in vpu_dev_get()
45 vpu->res->setup(vpu); in vpu_dev_get()
48 static void vpu_dev_put(struct vpu_dev *vpu) in vpu_dev_put() argument
50 atomic_dec(&vpu->ref_vpu); in vpu_dev_put()
53 static void vpu_enc_get(struct vpu_dev *vpu) in vpu_enc_get() argument
55 if (atomic_inc_return(&vpu->ref_enc) == 1 && vpu->res->setup_encoder) in vpu_enc_get()
56 vpu->res->setup_encoder(vpu); in vpu_enc_get()
59 static void vpu_enc_put(struct vpu_dev *vpu) in vpu_enc_put() argument
61 atomic_dec(&vpu->ref_enc); in vpu_enc_put()
64 static void vpu_dec_get(struct vpu_dev *vpu) in vpu_dec_get() argument
66 if (atomic_inc_return(&vpu->ref_dec) == 1 && vpu->res->setup_decoder) in vpu_dec_get()
67 vpu->res->setup_decoder(vpu); in vpu_dec_get()
70 static void vpu_dec_put(struct vpu_dev *vpu) in vpu_dec_put() argument
72 atomic_dec(&vpu->ref_dec); in vpu_dec_put()
75 static int vpu_init_media_device(struct vpu_dev *vpu) in vpu_init_media_device() argument
77 vpu->mdev.dev = vpu->dev; in vpu_init_media_device()
78 strscpy(vpu->mdev.model, "amphion-vpu", sizeof(vpu->mdev.model)); in vpu_init_media_device()
79 strscpy(vpu->mdev.bus_info, "platform: amphion-vpu", sizeof(vpu->mdev.bus_info)); in vpu_init_media_device()
80 media_device_init(&vpu->mdev); in vpu_init_media_device()
81 vpu->v4l2_dev.mdev = &vpu->mdev; in vpu_init_media_device()
89 struct vpu_dev *vpu; in vpu_probe() local
93 vpu = devm_kzalloc(dev, sizeof(*vpu), GFP_KERNEL); in vpu_probe()
94 if (!vpu) in vpu_probe()
97 vpu->pdev = pdev; in vpu_probe()
98 vpu->dev = dev; in vpu_probe()
99 mutex_init(&vpu->lock); in vpu_probe()
100 INIT_LIST_HEAD(&vpu->cores); in vpu_probe()
101 platform_set_drvdata(pdev, vpu); in vpu_probe()
102 atomic_set(&vpu->ref_vpu, 0); in vpu_probe()
103 atomic_set(&vpu->ref_enc, 0); in vpu_probe()
104 atomic_set(&vpu->ref_dec, 0); in vpu_probe()
105 vpu->get_vpu = vpu_dev_get; in vpu_probe()
106 vpu->put_vpu = vpu_dev_put; in vpu_probe()
107 vpu->get_enc = vpu_enc_get; in vpu_probe()
108 vpu->put_enc = vpu_enc_put; in vpu_probe()
109 vpu->get_dec = vpu_dec_get; in vpu_probe()
110 vpu->put_dec = vpu_dec_put; in vpu_probe()
112 vpu->base = devm_platform_ioremap_resource(pdev, 0); in vpu_probe()
113 if (IS_ERR(vpu->base)) in vpu_probe()
114 return PTR_ERR(vpu->base); in vpu_probe()
116 vpu->res = of_device_get_match_data(dev); in vpu_probe()
117 if (!vpu->res) in vpu_probe()
122 ret = v4l2_device_register(dev, &vpu->v4l2_dev); in vpu_probe()
126 vpu_init_media_device(vpu); in vpu_probe()
127 vpu->encoder.type = VPU_CORE_TYPE_ENC; in vpu_probe()
128 vpu->encoder.function = MEDIA_ENT_F_PROC_VIDEO_ENCODER; in vpu_probe()
129 vpu->decoder.type = VPU_CORE_TYPE_DEC; in vpu_probe()
130 vpu->decoder.function = MEDIA_ENT_F_PROC_VIDEO_DECODER; in vpu_probe()
131 ret = vpu_add_func(vpu, &vpu->decoder); in vpu_probe()
134 ret = vpu_add_func(vpu, &vpu->encoder); in vpu_probe()
137 ret = media_device_register(&vpu->mdev); in vpu_probe()
140 vpu->debugfs = debugfs_create_dir("amphion_vpu", NULL); in vpu_probe()
147 vpu_remove_func(&vpu->encoder); in vpu_probe()
149 vpu_remove_func(&vpu->decoder); in vpu_probe()
151 media_device_cleanup(&vpu->mdev); in vpu_probe()
152 v4l2_device_unregister(&vpu->v4l2_dev); in vpu_probe()
162 struct vpu_dev *vpu = platform_get_drvdata(pdev); in vpu_remove() local
165 debugfs_remove_recursive(vpu->debugfs); in vpu_remove()
166 vpu->debugfs = NULL; in vpu_remove()
170 media_device_unregister(&vpu->mdev); in vpu_remove()
171 vpu_remove_func(&vpu->decoder); in vpu_remove()
172 vpu_remove_func(&vpu->encoder); in vpu_remove()
173 media_device_cleanup(&vpu->mdev); in vpu_remove()
174 v4l2_device_unregister(&vpu->v4l2_dev); in vpu_remove()
175 mutex_destroy(&vpu->lock); in vpu_remove()
222 { .compatible = "nxp,imx8qxp-vpu", .data = &imx8qxp_res },
223 { .compatible = "nxp,imx8qm-vpu", .data = &imx8qm_res },
232 .name = "amphion-vpu",
262 MODULE_DESCRIPTION("Linux VPU driver for Freescale i.MX8Q");