drm/ast: Embed struct drm_device in struct ast_private
authorThomas Zimmermann <tzimmermann@suse.de>
Thu, 30 Jul 2020 13:52:03 +0000 (15:52 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 3 Aug 2020 07:04:28 +0000 (09:04 +0200)
Turns struct ast_private into a subclass of struct drm_device by
embedding the latter. This allows for using DRM's managed device
allocation.

The use of struct drm_device.dev_private is deprecated. The patch
converts the last remaining users to to_ast_private().

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20200730135206.30239-7-tzimmermann@suse.de
drivers/gpu/drm/ast/ast_cursor.c
drivers/gpu/drm/ast/ast_drv.c
drivers/gpu/drm/ast/ast_drv.h
drivers/gpu/drm/ast/ast_main.c
drivers/gpu/drm/ast/ast_mm.c
drivers/gpu/drm/ast/ast_mode.c
drivers/gpu/drm/ast/ast_post.c

index 8d693c8b346f9870ca28a3ff847aa776b2576467..6c96f74cdb9e3c0dea6a65a4d3a0d2f65a45a946 100644 (file)
@@ -57,7 +57,7 @@ static void ast_cursor_release(struct drm_device *dev, void *ptr)
  */
 int ast_cursor_init(struct ast_private *ast)
 {
-       struct drm_device *dev = ast->dev;
+       struct drm_device *dev = &ast->base;
        size_t size, i;
        struct drm_gem_vram_object *gbo;
        void __iomem *vaddr;
@@ -168,7 +168,7 @@ static void update_cursor_image(u8 __iomem *dst, const u8 *src, int width, int h
 
 int ast_cursor_blit(struct ast_private *ast, struct drm_framebuffer *fb)
 {
-       struct drm_device *dev = ast->dev;
+       struct drm_device *dev = &ast->base;
        struct drm_gem_vram_object *gbo;
        int ret;
        void *src;
@@ -217,7 +217,7 @@ static void ast_cursor_set_base(struct ast_private *ast, u64 address)
 
 void ast_cursor_page_flip(struct ast_private *ast)
 {
-       struct drm_device *dev = ast->dev;
+       struct drm_device *dev = &ast->base;
        struct drm_gem_vram_object *gbo;
        s64 off;
 
index ad93c35b4cf70cb9b0af802ca725fba1be0559c0..c394383a7979304389efe2afd1507335ae3542eb 100644 (file)
@@ -124,7 +124,7 @@ static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                ret = PTR_ERR(ast);
                goto err_drm_dev_put;
        }
-       dev = ast->dev;
+       dev = &ast->base;
 
        ret = drm_dev_register(dev, ent->driver_data);
        if (ret)
index 210d62f69fb91c9bb3b1dba8b41d9fd903f95f35..acd9bbfec98ed03d161ba2d247908e181721b6b2 100644 (file)
@@ -116,7 +116,7 @@ to_ast_connector(struct drm_connector *connector)
 }
 
 struct ast_private {
-       struct drm_device *dev;
+       struct drm_device base;
 
        void __iomem *regs;
        void __iomem *ioregs;
@@ -156,7 +156,7 @@ struct ast_private {
 
 static inline struct ast_private *to_ast_private(struct drm_device *dev)
 {
-       return dev->dev_private;
+       return container_of(dev, struct ast_private, base);
 }
 
 struct ast_private *ast_device_create(struct drm_driver *drv,
index 8d46166f8462083ffefe7630f16777b4b0766789..792fb7f616ecdd9149a9f79083fb9b9f401255c9 100644 (file)
@@ -388,25 +388,17 @@ struct ast_private *ast_device_create(struct drm_driver *drv,
        bool need_post;
        int ret = 0;
 
-       dev = drm_dev_alloc(drv, &pdev->dev);
-       if (IS_ERR(dev))
-               return ERR_CAST(dev);
+       ast = devm_drm_dev_alloc(&pdev->dev, drv, struct ast_private, base);
+       if (IS_ERR(ast))
+               return ast;
+       dev = &ast->base;
 
        dev->pdev = pdev;
        pci_set_drvdata(pdev, dev);
 
-       ast = kzalloc(sizeof(struct ast_private), GFP_KERNEL);
-       if (!ast)
-               return ERR_PTR(-ENOMEM);
-
-       dev->dev_private = ast;
-       ast->dev = dev;
-
        ast->regs = pci_iomap(dev->pdev, 1, 0);
-       if (!ast->regs) {
-               ret = -EIO;
-               goto out_free;
-       }
+       if (!ast->regs)
+               return ERR_PTR(-EIO);
 
        /*
         * If we don't have IO space at all, use MMIO now and
@@ -421,17 +413,16 @@ struct ast_private *ast_device_create(struct drm_driver *drv,
        /* "map" IO regs if the above hasn't done so already */
        if (!ast->ioregs) {
                ast->ioregs = pci_iomap(dev->pdev, 2, 0);
-               if (!ast->ioregs) {
-                       ret = -EIO;
-                       goto out_free;
-               }
+               if (!ast->ioregs)
+                       return ERR_PTR(-EIO);
        }
 
        ast_detect_chip(dev, &need_post);
 
        ret = ast_get_dram_info(dev);
        if (ret)
-               goto out_free;
+               return ERR_PTR(ret);
+
        drm_info(dev, "dram MCLK=%u Mhz type=%d bus_width=%d\n",
                 ast->mclk, ast->dram_type, ast->dram_bus_width);
 
@@ -440,29 +431,22 @@ struct ast_private *ast_device_create(struct drm_driver *drv,
 
        ret = ast_mm_init(ast);
        if (ret)
-               goto out_free;
+               return ERR_PTR(ret);
 
        ret = ast_mode_config_init(ast);
        if (ret)
-               goto out_free;
+               return ERR_PTR(ret);
 
        return ast;
-
-out_free:
-       kfree(ast);
-       dev->dev_private = NULL;
-       return ERR_PTR(ret);
 }
 
 void ast_device_destroy(struct ast_private *ast)
 {
-       struct drm_device *dev = ast->dev;
+       struct drm_device *dev = &ast->base;
 
        /* enable standard VGA decode */
        ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa1, 0x04);
 
        ast_release_firmware(dev);
        kfree(ast->dp501_fw_addr);
-
-       kfree(ast);
 }
index 9186ec3ebbe0934ee96dc75308f28d23a53802a6..8392ebde504b33b226c8f71c718ccc12b9f15cb1 100644 (file)
@@ -85,9 +85,9 @@ static void ast_mm_release(struct drm_device *dev, void *ptr)
 
 int ast_mm_init(struct ast_private *ast)
 {
+       struct drm_device *dev = &ast->base;
        u32 vram_size;
        int ret;
-       struct drm_device *dev = ast->dev;
 
        vram_size = ast_get_vram_size(ast);
 
index 897a1ad2541eb0c9da4f2a80d17ee8b2bc46acd0..62fe682a7de63e3ea0be88fa8cf74be32d889e2d 100644 (file)
@@ -1063,7 +1063,7 @@ static const struct drm_mode_config_funcs ast_mode_config_funcs = {
 
 int ast_mode_config_init(struct ast_private *ast)
 {
-       struct drm_device *dev = ast->dev;
+       struct drm_device *dev = &ast->base;
        int ret;
 
        ret = ast_cursor_init(ast);
index b1d42a639eceac6470d3e0473059b0887245900c..8902c2f84bf99ab0def4b95870cfcc1816d66b22 100644 (file)
@@ -365,8 +365,8 @@ static void ast_init_dram_reg(struct drm_device *dev)
 
 void ast_post_gpu(struct drm_device *dev)
 {
-       u32 reg;
        struct ast_private *ast = to_ast_private(dev);
+       u32 reg;
 
        pci_read_config_dword(dev->pdev, 0x04, &reg);
        reg |= 0x3;