tree: git://anongit.freedesktop.org/drm/drm-tip drm-tip
head: d4794b009ccd1ef8816e15c833f07ab696911a8d
commit: bd6ee5d2d2032416ba36ec6c24bf513f4ff0d338 [2/8] Merge remote-tracking
branch 'drm-misc/drm-misc-next' into drm-tip
config: x86_64-randconfig-s5-02041749 (attached as .config)
compiler: gcc-8 (Debian 8.2.0-14) 8.2.0
reproduce:
git checkout bd6ee5d2d2032416ba36ec6c24bf513f4ff0d338
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
drivers/gpu/drm//arm/display/komeda/komeda_dev.c: In function
'komeda_parse_pipe_dt':
>> drivers/gpu/drm//arm/display/komeda/komeda_dev.c:27:3: error: implicit
>> declaration of function 'DRM_ERROR'; did you mean 'DRM_IOR'?
>> [-Werror=implicit-function-declaration]
DRM_ERROR("get aclk for pipeline %d failed!\n", pipe_id);
^~~~~~~~~
DRM_IOR
drivers/gpu/drm//arm/display/komeda/komeda_dev.c: In function
'komeda_dev_create':
>> drivers/gpu/drm//arm/display/komeda/komeda_dev.c:127:2: error: implicit
>> declaration of function 'DRM_INFO'; did you mean 'DRM_IO'?
>> [-Werror=implicit-function-declaration]
DRM_INFO("Found ARM Mali-D%x version r%dp%d\n",
^~~~~~~~
DRM_IO
drivers/gpu/drm//arm/display/komeda/komeda_dev.c: In function
'komeda_dev_destroy':
drivers/gpu/drm//arm/display/komeda/komeda_dev.c:170:3: error: implicit
declaration of function 'devm_iounmap'; did you mean 'pci_iounmap'?
[-Werror=implicit-function-declaration]
devm_iounmap(dev, mdev->reg_base);
^~~~~~~~~~~~
pci_iounmap
Cyclomatic Complexity 1 include/linux/err.h:ERR_PTR
Cyclomatic Complexity 1 include/linux/err.h:PTR_ERR
Cyclomatic Complexity 1 include/linux/err.h:IS_ERR
Cyclomatic Complexity 1 include/linux/device.h:devm_kzalloc
Cyclomatic Complexity 2 include/linux/of.h:of_property_read_u32_array
Cyclomatic Complexity 1 include/linux/of.h:of_property_read_u32
Cyclomatic Complexity 3 include/linux/clk.h:clk_prepare_enable
Cyclomatic Complexity 1 include/linux/clk.h:clk_disable_unprepare
Cyclomatic Complexity 1
drivers/gpu/drm//arm/display/komeda/komeda_dev.h:komeda_product_match
Cyclomatic Complexity 5
drivers/gpu/drm//arm/display/komeda/komeda_dev.c:komeda_parse_pipe_dt
Cyclomatic Complexity 5
drivers/gpu/drm//arm/display/komeda/komeda_dev.c:komeda_parse_dt
Cyclomatic Complexity 7
drivers/gpu/drm//arm/display/komeda/komeda_dev.c:komeda_dev_destroy
Cyclomatic Complexity 9
drivers/gpu/drm//arm/display/komeda/komeda_dev.c:komeda_dev_create
cc1: some warnings being treated as errors
--
drivers/gpu/drm//arm/display/komeda/komeda_pipeline.c: In function
'komeda_pipeline_add':
>> drivers/gpu/drm//arm/display/komeda/komeda_pipeline.c:18:3: error: implicit
>> declaration of function 'DRM_ERROR'; did you mean 'DRM_IOR'?
>> [-Werror=implicit-function-declaration]
DRM_ERROR("Exceed max support %d pipelines.\n",
^~~~~~~~~
DRM_IOR
Cyclomatic Complexity 1 include/linux/device.h:devm_kzalloc
Cyclomatic Complexity 4
drivers/gpu/drm//arm/display/komeda/komeda_pipeline.c:komeda_pipeline_add
Cyclomatic Complexity 9
drivers/gpu/drm//arm/display/komeda/komeda_pipeline.c:komeda_pipeline_get_component_pos
Cyclomatic Complexity 2
drivers/gpu/drm//arm/display/komeda/komeda_pipeline.c:komeda_pipeline_get_component
Cyclomatic Complexity 12
drivers/gpu/drm//arm/display/komeda/komeda_pipeline.c:komeda_component_add
Cyclomatic Complexity 1
drivers/gpu/drm//arm/display/komeda/komeda_pipeline.c:komeda_component_destroy
Cyclomatic Complexity 2
drivers/gpu/drm//arm/display/komeda/komeda_pipeline.c:komeda_pipeline_destroy
cc1: some warnings being treated as errors
--
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:32:15: error: variable
'komeda_kms_driver' has initializer but incomplete type
static struct drm_driver komeda_kms_driver = {
^~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:33:3: error: 'struct
drm_driver' has no member named 'driver_features'
.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
^~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:33:21: error: 'DRIVER_GEM'
undeclared here (not in a function)
.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
^~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:33:34: error:
'DRIVER_MODESET' undeclared here (not in a function); did you mean
'HRTIMER_MODE_SOFT'?
.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
^~~~~~~~~~~~~~
HRTIMER_MODE_SOFT
>> drivers/gpu/drm//arm/display/komeda/komeda_kms.c:33:51: error:
>> 'DRIVER_ATOMIC' undeclared here (not in a function); did you mean
>> 'DRM_UT_ATOMIC'?
.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
^~~~~~~~~~~~~
DRM_UT_ATOMIC
>> drivers/gpu/drm//arm/display/komeda/komeda_kms.c:34:7: error: 'DRIVER_PRIME'
>> undeclared here (not in a function); did you mean 'DRM_UT_PRIME'?
DRIVER_PRIME,
^~~~~~~~~~~~
DRM_UT_PRIME
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:33:21: warning: excess
elements in struct initializer
.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
^~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:33:21: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:35:3: error: 'struct
drm_driver' has no member named 'lastclose'
.lastclose = drm_fb_helper_lastclose,
^~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:35:17: warning: excess
elements in struct initializer
.lastclose = drm_fb_helper_lastclose,
^~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:35:17: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:36:3: error: 'struct
drm_driver' has no member named 'gem_free_object_unlocked'
.gem_free_object_unlocked = drm_gem_cma_free_object,
^~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:36:30: warning: excess
elements in struct initializer
.gem_free_object_unlocked = drm_gem_cma_free_object,
^~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:36:30: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:37:3: error: 'struct
drm_driver' has no member named 'gem_vm_ops'
.gem_vm_ops = &drm_gem_cma_vm_ops,
^~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:37:18: warning: excess
elements in struct initializer
.gem_vm_ops = &drm_gem_cma_vm_ops,
^
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:37:18: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:38:3: error: 'struct
drm_driver' has no member named 'dumb_create'
.dumb_create = komeda_gem_cma_dumb_create,
^~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:38:19: warning: excess
elements in struct initializer
.dumb_create = komeda_gem_cma_dumb_create,
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:38:19: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:39:3: error: 'struct
drm_driver' has no member named 'prime_handle_to_fd'
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
^~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:39:25: warning: excess
elements in struct initializer
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:39:25: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:40:3: error: 'struct
drm_driver' has no member named 'prime_fd_to_handle'
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
^~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:40:25: warning: excess
elements in struct initializer
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:40:25: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:41:3: error: 'struct
drm_driver' has no member named 'gem_prime_export'
.gem_prime_export = drm_gem_prime_export,
^~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:41:23: warning: excess
elements in struct initializer
.gem_prime_export = drm_gem_prime_export,
^~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:41:23: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:42:3: error: 'struct
drm_driver' has no member named 'gem_prime_import'
.gem_prime_import = drm_gem_prime_import,
^~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:42:23: warning: excess
elements in struct initializer
.gem_prime_import = drm_gem_prime_import,
^~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:42:23: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:43:3: error: 'struct
drm_driver' has no member named 'gem_prime_get_sg_table'
.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
^~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:43:29: warning: excess
elements in struct initializer
.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:43:29: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:44:3: error: 'struct
drm_driver' has no member named 'gem_prime_import_sg_table'
.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:44:31: warning: excess
elements in struct initializer
.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:44:31: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:45:3: error: 'struct
drm_driver' has no member named 'gem_prime_vmap'
.gem_prime_vmap = drm_gem_cma_prime_vmap,
^~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:45:22: warning: excess
elements in struct initializer
.gem_prime_vmap = drm_gem_cma_prime_vmap,
^~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:45:22: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:46:3: error: 'struct
drm_driver' has no member named 'gem_prime_vunmap'
.gem_prime_vunmap = drm_gem_cma_prime_vunmap,
^~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:46:23: warning: excess
elements in struct initializer
.gem_prime_vunmap = drm_gem_cma_prime_vunmap,
^~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:46:23: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:47:3: error: 'struct
drm_driver' has no member named 'gem_prime_mmap'
.gem_prime_mmap = drm_gem_cma_prime_mmap,
^~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:47:22: warning: excess
elements in struct initializer
.gem_prime_mmap = drm_gem_cma_prime_mmap,
^~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:47:22: note: (near
initialization for 'komeda_kms_driver')
drivers/gpu/drm//arm/display/komeda/komeda_kms.c:48:3: error: 'struct
drm_driver' has no member named 'fops'
.fops = &komeda_cma_fops,
--
In file included from drivers/gpu/drm//arm/display/komeda/komeda_crtc.c:15:
drivers/gpu/drm//arm/display/komeda/komeda_kms.h:87:20: error: field 'base'
has incomplete type
struct drm_device base;
^~~~
drivers/gpu/drm//arm/display/komeda/komeda_crtc.c: In function
'komeda_kms_setup_crtcs':
>> drivers/gpu/drm//arm/display/komeda/komeda_crtc.c:45:3: error: implicit
>> declaration of function 'DRM_INFO'; did you mean 'DRM_IO'?
>> [-Werror=implicit-function-declaration]
DRM_INFO("crtc%d: master(pipe-%d) slave(%s) output: %s.\n",
^~~~~~~~
DRM_IO
drivers/gpu/drm//arm/display/komeda/komeda_crtc.c: In function
'komeda_crtc_add':
drivers/gpu/drm//arm/display/komeda/komeda_crtc.c:88:2: error: implicit
declaration of function 'drm_crtc_vblank_reset'; did you mean
'drm_crtc_commit_get'? [-Werror=implicit-function-declaration]
drm_crtc_vblank_reset(crtc);
^~~~~~~~~~~~~~~~~~~~~
drm_crtc_commit_get
cc1: some warnings being treated as errors
vim +27 drivers/gpu/drm//arm/display/komeda/komeda_dev.c
bd628c1b james qian wang (Arm Technology China 2019-01-03 11)
29e56aec james qian wang (Arm Technology China 2019-01-03 12) static int
komeda_parse_pipe_dt(struct komeda_dev *mdev, struct device_node *np)
29e56aec james qian wang (Arm Technology China 2019-01-03 13) {
29e56aec james qian wang (Arm Technology China 2019-01-03 14) struct
komeda_pipeline *pipe;
29e56aec james qian wang (Arm Technology China 2019-01-03 15) struct
clk *clk;
29e56aec james qian wang (Arm Technology China 2019-01-03 16) u32
pipe_id;
29e56aec james qian wang (Arm Technology China 2019-01-03 17) int ret
= 0;
29e56aec james qian wang (Arm Technology China 2019-01-03 18)
29e56aec james qian wang (Arm Technology China 2019-01-03 19) ret =
of_property_read_u32(np, "reg", &pipe_id);
29e56aec james qian wang (Arm Technology China 2019-01-03 20) if (ret
!= 0 || pipe_id >= mdev->n_pipelines)
29e56aec james qian wang (Arm Technology China 2019-01-03 21)
return -EINVAL;
29e56aec james qian wang (Arm Technology China 2019-01-03 22)
29e56aec james qian wang (Arm Technology China 2019-01-03 23) pipe =
mdev->pipelines[pipe_id];
29e56aec james qian wang (Arm Technology China 2019-01-03 24)
29e56aec james qian wang (Arm Technology China 2019-01-03 25) clk =
of_clk_get_by_name(np, "aclk");
29e56aec james qian wang (Arm Technology China 2019-01-03 26) if
(IS_ERR(clk)) {
29e56aec james qian wang (Arm Technology China 2019-01-03 @27)
DRM_ERROR("get aclk for pipeline %d failed!\n", pipe_id);
29e56aec james qian wang (Arm Technology China 2019-01-03 28)
return PTR_ERR(clk);
29e56aec james qian wang (Arm Technology China 2019-01-03 29) }
29e56aec james qian wang (Arm Technology China 2019-01-03 30)
pipe->aclk = clk;
29e56aec james qian wang (Arm Technology China 2019-01-03 31)
29e56aec james qian wang (Arm Technology China 2019-01-03 32) clk =
of_clk_get_by_name(np, "pxclk");
29e56aec james qian wang (Arm Technology China 2019-01-03 33) if
(IS_ERR(clk)) {
29e56aec james qian wang (Arm Technology China 2019-01-03 34)
DRM_ERROR("get pxclk for pipeline %d failed!\n", pipe_id);
29e56aec james qian wang (Arm Technology China 2019-01-03 35)
return PTR_ERR(clk);
29e56aec james qian wang (Arm Technology China 2019-01-03 36) }
29e56aec james qian wang (Arm Technology China 2019-01-03 37)
pipe->pxlclk = clk;
29e56aec james qian wang (Arm Technology China 2019-01-03 38)
29e56aec james qian wang (Arm Technology China 2019-01-03 39) /* enum
ports */
29e56aec james qian wang (Arm Technology China 2019-01-03 40)
pipe->of_output_dev =
29e56aec james qian wang (Arm Technology China 2019-01-03 41)
of_graph_get_remote_node(np, KOMEDA_OF_PORT_OUTPUT, 0);
29e56aec james qian wang (Arm Technology China 2019-01-03 42)
pipe->of_output_port =
29e56aec james qian wang (Arm Technology China 2019-01-03 43)
of_graph_get_port_by_id(np, KOMEDA_OF_PORT_OUTPUT);
29e56aec james qian wang (Arm Technology China 2019-01-03 44)
29e56aec james qian wang (Arm Technology China 2019-01-03 45)
pipe->of_node = np;
29e56aec james qian wang (Arm Technology China 2019-01-03 46)
29e56aec james qian wang (Arm Technology China 2019-01-03 47) return
0;
29e56aec james qian wang (Arm Technology China 2019-01-03 48) }
29e56aec james qian wang (Arm Technology China 2019-01-03 49)
29e56aec james qian wang (Arm Technology China 2019-01-03 50) static int
komeda_parse_dt(struct device *dev, struct komeda_dev *mdev)
29e56aec james qian wang (Arm Technology China 2019-01-03 51) {
29e56aec james qian wang (Arm Technology China 2019-01-03 52) struct
device_node *child, *np = dev->of_node;
29e56aec james qian wang (Arm Technology China 2019-01-03 53) struct
clk *clk;
29e56aec james qian wang (Arm Technology China 2019-01-03 54) int ret;
29e56aec james qian wang (Arm Technology China 2019-01-03 55)
29e56aec james qian wang (Arm Technology China 2019-01-03 56) clk =
devm_clk_get(dev, "mclk");
29e56aec james qian wang (Arm Technology China 2019-01-03 57) if
(IS_ERR(clk))
29e56aec james qian wang (Arm Technology China 2019-01-03 58)
return PTR_ERR(clk);
29e56aec james qian wang (Arm Technology China 2019-01-03 59)
29e56aec james qian wang (Arm Technology China 2019-01-03 60)
mdev->mclk = clk;
29e56aec james qian wang (Arm Technology China 2019-01-03 61)
29e56aec james qian wang (Arm Technology China 2019-01-03 62)
for_each_available_child_of_node(np, child) {
29e56aec james qian wang (Arm Technology China 2019-01-03 63)
if (of_node_cmp(child->name, "pipeline") == 0) {
29e56aec james qian wang (Arm Technology China 2019-01-03 64)
ret = komeda_parse_pipe_dt(mdev, child);
29e56aec james qian wang (Arm Technology China 2019-01-03 65)
if (ret) {
29e56aec james qian wang (Arm Technology China 2019-01-03 66)
DRM_ERROR("parse pipeline dt error!\n");
29e56aec james qian wang (Arm Technology China 2019-01-03 67)
of_node_put(child);
29e56aec james qian wang (Arm Technology China 2019-01-03 68)
break;
29e56aec james qian wang (Arm Technology China 2019-01-03 69)
}
29e56aec james qian wang (Arm Technology China 2019-01-03 70)
}
29e56aec james qian wang (Arm Technology China 2019-01-03 71) }
29e56aec james qian wang (Arm Technology China 2019-01-03 72)
29e56aec james qian wang (Arm Technology China 2019-01-03 73) return
ret;
29e56aec james qian wang (Arm Technology China 2019-01-03 74) }
29e56aec james qian wang (Arm Technology China 2019-01-03 75)
bd628c1b james qian wang (Arm Technology China 2019-01-03 76) struct
komeda_dev *komeda_dev_create(struct device *dev)
bd628c1b james qian wang (Arm Technology China 2019-01-03 77) {
bd628c1b james qian wang (Arm Technology China 2019-01-03 78) struct
platform_device *pdev = to_platform_device(dev);
bd628c1b james qian wang (Arm Technology China 2019-01-03 79) const
struct komeda_product_data *product;
bd628c1b james qian wang (Arm Technology China 2019-01-03 80) struct
komeda_dev *mdev;
bd628c1b james qian wang (Arm Technology China 2019-01-03 81) struct
resource *io_res;
bd628c1b james qian wang (Arm Technology China 2019-01-03 82) int err
= 0;
bd628c1b james qian wang (Arm Technology China 2019-01-03 83)
bd628c1b james qian wang (Arm Technology China 2019-01-03 84) product
= of_device_get_match_data(dev);
bd628c1b james qian wang (Arm Technology China 2019-01-03 85) if
(!product)
bd628c1b james qian wang (Arm Technology China 2019-01-03 86)
return ERR_PTR(-ENODEV);
bd628c1b james qian wang (Arm Technology China 2019-01-03 87)
bd628c1b james qian wang (Arm Technology China 2019-01-03 88) io_res
= platform_get_resource(pdev, IORESOURCE_MEM, 0);
bd628c1b james qian wang (Arm Technology China 2019-01-03 89) if
(!io_res) {
bd628c1b james qian wang (Arm Technology China 2019-01-03 90)
DRM_ERROR("No registers defined.\n");
bd628c1b james qian wang (Arm Technology China 2019-01-03 91)
return ERR_PTR(-ENODEV);
bd628c1b james qian wang (Arm Technology China 2019-01-03 92) }
bd628c1b james qian wang (Arm Technology China 2019-01-03 93)
bd628c1b james qian wang (Arm Technology China 2019-01-03 94) mdev =
devm_kzalloc(dev, sizeof(*mdev), GFP_KERNEL);
bd628c1b james qian wang (Arm Technology China 2019-01-03 95) if
(!mdev)
bd628c1b james qian wang (Arm Technology China 2019-01-03 96)
return ERR_PTR(-ENOMEM);
bd628c1b james qian wang (Arm Technology China 2019-01-03 97)
bd628c1b james qian wang (Arm Technology China 2019-01-03 98)
mdev->dev = dev;
bd628c1b james qian wang (Arm Technology China 2019-01-03 99)
mdev->reg_base = devm_ioremap_resource(dev, io_res);
bd628c1b james qian wang (Arm Technology China 2019-01-03 100) if
(IS_ERR(mdev->reg_base)) {
bd628c1b james qian wang (Arm Technology China 2019-01-03 101)
DRM_ERROR("Map register space failed.\n");
bd628c1b james qian wang (Arm Technology China 2019-01-03 102)
err = PTR_ERR(mdev->reg_base);
bd628c1b james qian wang (Arm Technology China 2019-01-03 103)
mdev->reg_base = NULL;
bd628c1b james qian wang (Arm Technology China 2019-01-03 104)
goto err_cleanup;
bd628c1b james qian wang (Arm Technology China 2019-01-03 105) }
bd628c1b james qian wang (Arm Technology China 2019-01-03 106)
bd628c1b james qian wang (Arm Technology China 2019-01-03 107)
mdev->pclk = devm_clk_get(dev, "pclk");
bd628c1b james qian wang (Arm Technology China 2019-01-03 108) if
(IS_ERR(mdev->pclk)) {
bd628c1b james qian wang (Arm Technology China 2019-01-03 109)
DRM_ERROR("Get APB clk failed.\n");
bd628c1b james qian wang (Arm Technology China 2019-01-03 110)
err = PTR_ERR(mdev->pclk);
bd628c1b james qian wang (Arm Technology China 2019-01-03 111)
mdev->pclk = NULL;
bd628c1b james qian wang (Arm Technology China 2019-01-03 112)
goto err_cleanup;
bd628c1b james qian wang (Arm Technology China 2019-01-03 113) }
bd628c1b james qian wang (Arm Technology China 2019-01-03 114)
bd628c1b james qian wang (Arm Technology China 2019-01-03 115) /*
Enable APB clock to access the registers */
bd628c1b james qian wang (Arm Technology China 2019-01-03 116)
clk_prepare_enable(mdev->pclk);
bd628c1b james qian wang (Arm Technology China 2019-01-03 117)
bd628c1b james qian wang (Arm Technology China 2019-01-03 118)
mdev->funcs = product->identify(mdev->reg_base, &mdev->chip);
bd628c1b james qian wang (Arm Technology China 2019-01-03 119) if
(!komeda_product_match(mdev, product->product_id)) {
bd628c1b james qian wang (Arm Technology China 2019-01-03 120)
DRM_ERROR("DT configured %x mismatch with real HW %x.\n",
bd628c1b james qian wang (Arm Technology China 2019-01-03 121)
product->product_id,
bd628c1b james qian wang (Arm Technology China 2019-01-03 122)
MALIDP_CORE_ID_PRODUCT_ID(mdev->chip.core_id));
bd628c1b james qian wang (Arm Technology China 2019-01-03 123)
err = -ENODEV;
bd628c1b james qian wang (Arm Technology China 2019-01-03 124)
goto err_cleanup;
bd628c1b james qian wang (Arm Technology China 2019-01-03 125) }
bd628c1b james qian wang (Arm Technology China 2019-01-03 126)
bd628c1b james qian wang (Arm Technology China 2019-01-03 @127)
DRM_INFO("Found ARM Mali-D%x version r%dp%d\n",
bd628c1b james qian wang (Arm Technology China 2019-01-03 128)
MALIDP_CORE_ID_PRODUCT_ID(mdev->chip.core_id),
bd628c1b james qian wang (Arm Technology China 2019-01-03 129)
MALIDP_CORE_ID_MAJOR(mdev->chip.core_id),
bd628c1b james qian wang (Arm Technology China 2019-01-03 130)
MALIDP_CORE_ID_MINOR(mdev->chip.core_id));
bd628c1b james qian wang (Arm Technology China 2019-01-03 131)
981d29d2 james qian wang (Arm Technology China 2019-01-03 132)
mdev->funcs->init_format_table(mdev);
981d29d2 james qian wang (Arm Technology China 2019-01-03 133)
bd628c1b james qian wang (Arm Technology China 2019-01-03 134) err =
mdev->funcs->enum_resources(mdev);
bd628c1b james qian wang (Arm Technology China 2019-01-03 135) if
(err) {
bd628c1b james qian wang (Arm Technology China 2019-01-03 136)
DRM_ERROR("enumerate display resource failed.\n");
bd628c1b james qian wang (Arm Technology China 2019-01-03 137)
goto err_cleanup;
bd628c1b james qian wang (Arm Technology China 2019-01-03 138) }
bd628c1b james qian wang (Arm Technology China 2019-01-03 139)
29e56aec james qian wang (Arm Technology China 2019-01-03 140) err =
komeda_parse_dt(dev, mdev);
29e56aec james qian wang (Arm Technology China 2019-01-03 141) if
(err) {
29e56aec james qian wang (Arm Technology China 2019-01-03 142)
DRM_ERROR("parse device tree failed.\n");
29e56aec james qian wang (Arm Technology China 2019-01-03 143)
goto err_cleanup;
29e56aec james qian wang (Arm Technology China 2019-01-03 144) }
29e56aec james qian wang (Arm Technology China 2019-01-03 145)
bd628c1b james qian wang (Arm Technology China 2019-01-03 146) return
mdev;
bd628c1b james qian wang (Arm Technology China 2019-01-03 147)
bd628c1b james qian wang (Arm Technology China 2019-01-03 148) err_cleanup:
bd628c1b james qian wang (Arm Technology China 2019-01-03 149)
komeda_dev_destroy(mdev);
bd628c1b james qian wang (Arm Technology China 2019-01-03 150) return
ERR_PTR(err);
bd628c1b james qian wang (Arm Technology China 2019-01-03 151) }
bd628c1b james qian wang (Arm Technology China 2019-01-03 152)
:::::: The code at line 27 was first introduced by commit
:::::: 29e56aec911dd784c1a29f28254f74fcd683bfe0 drm/komeda: Add DT parsing
:::::: TO: james qian wang (Arm Technology China) <[email protected]>
:::::: CC: Liviu Dudau <[email protected]>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip
_______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
