mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 06:24:53 +08:00
fbdev fixes and updates for kernel v5.19-rc1
A buch of small fixes and cleanups, including: - vesafb: Fix a use-after-free due early fb_info cleanup - clcdfb: Fix refcount leak in clcdfb_of_vram_setup - hyperv_fb: Allow resolutions with size > 64 MB for Gen1 - pxa3xx-gcu: release the resources correctly in pxa3xx_gcu_probe/remove() - omapfb: Prevent compiler warning regarding hwa742_update_window_async() -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQS86RI+GtKfB8BJu973ErUQojoPXwUCYpUd8QAKCRD3ErUQojoP X8Y/AP4mkEybgsZ/FypYj7mOpI+m+5FizhqjyVpiOaWyIIYs9AEAn2jpE0Cw9NY/ //ynl2aq6jAnkmZ7/0FUZlr/XWAcfwo= =7bQ5 -----END PGP SIGNATURE----- Merge tag 'for-5.19/fbdev-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev Pull fbdev fixes and updates from Helge Deller: "A buch of small fixes and cleanups, including: - vesafb: Fix a use-after-free due early fb_info cleanup - clcdfb: Fix refcount leak in clcdfb_of_vram_setup - hyperv_fb: Allow resolutions with size > 64 MB for Gen1 - pxa3xx-gcu: release the resources correctly in pxa3xx_gcu_probe/remove() - omapfb: Prevent compiler warning regarding hwa742_update_window_async()" * tag 'for-5.19/fbdev-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev: video: fbdev: omap: Add prototype for hwa742_update_window_async() video: fbdev: vesafb: Fix a use-after-free due early fb_info cleanup video: fbdev: radeon: Fix spelling typo in comment video: fbdev: xen: remove setting of 'transp' parameter video: fbdev: pxa3xx-gcu: release the resources correctly in pxa3xx_gcu_probe/remove() video: fbdev: omapfb: simplify the return expression of nec_8048_connect() video: fbdev: omapfb: simplify the return expression of dsi_init_pll_data() video: fbdev: clcdfb: Fix refcount leak in clcdfb_of_vram_setup video: fbdev: hyperv_fb: Allow resolutions with size > 64 MB for Gen1
This commit is contained in:
commit
8ab2afa23b
@ -758,12 +758,15 @@ static int clcdfb_of_vram_setup(struct clcd_fb *fb)
|
||||
return -ENODEV;
|
||||
|
||||
fb->fb.screen_base = of_iomap(memory, 0);
|
||||
if (!fb->fb.screen_base)
|
||||
if (!fb->fb.screen_base) {
|
||||
of_node_put(memory);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
fb->fb.fix.smem_start = of_translate_address(memory,
|
||||
of_get_address(memory, 0, &size, NULL));
|
||||
fb->fb.fix.smem_len = size;
|
||||
of_node_put(memory);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -992,7 +992,6 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
|
||||
struct pci_dev *pdev = NULL;
|
||||
void __iomem *fb_virt;
|
||||
int gen2vm = efi_enabled(EFI_BOOT);
|
||||
resource_size_t pot_start, pot_end;
|
||||
phys_addr_t paddr;
|
||||
int ret;
|
||||
|
||||
@ -1043,23 +1042,7 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
|
||||
dio_fb_size =
|
||||
screen_width * screen_height * screen_depth / 8;
|
||||
|
||||
if (gen2vm) {
|
||||
pot_start = 0;
|
||||
pot_end = -1;
|
||||
} else {
|
||||
if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM) ||
|
||||
pci_resource_len(pdev, 0) < screen_fb_size) {
|
||||
pr_err("Resource not available or (0x%lx < 0x%lx)\n",
|
||||
(unsigned long) pci_resource_len(pdev, 0),
|
||||
(unsigned long) screen_fb_size);
|
||||
goto err1;
|
||||
}
|
||||
|
||||
pot_end = pci_resource_end(pdev, 0);
|
||||
pot_start = pot_end - screen_fb_size + 1;
|
||||
}
|
||||
|
||||
ret = vmbus_allocate_mmio(&par->mem, hdev, pot_start, pot_end,
|
||||
ret = vmbus_allocate_mmio(&par->mem, hdev, 0, -1,
|
||||
screen_fb_size, 0x100000, true);
|
||||
if (ret != 0) {
|
||||
pr_err("Unable to allocate framebuffer memory\n");
|
||||
|
@ -231,5 +231,9 @@ extern int omapfb_update_window_async(struct fb_info *fbi,
|
||||
struct omapfb_update_window *win,
|
||||
void (*callback)(void *),
|
||||
void *callback_data);
|
||||
extern int hwa742_update_window_async(struct fb_info *fbi,
|
||||
struct omapfb_update_window *win,
|
||||
void (*callback)(void *),
|
||||
void *callback_data);
|
||||
|
||||
#endif /* __OMAPFB_H */
|
||||
|
@ -117,16 +117,11 @@ static int nec_8048_connect(struct omap_dss_device *dssdev)
|
||||
{
|
||||
struct panel_drv_data *ddata = to_panel_data(dssdev);
|
||||
struct omap_dss_device *in = ddata->in;
|
||||
int r;
|
||||
|
||||
if (omapdss_device_is_connected(dssdev))
|
||||
return 0;
|
||||
|
||||
r = in->ops.dpi->connect(in, dssdev);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
return in->ops.dpi->connect(in, dssdev);
|
||||
}
|
||||
|
||||
static void nec_8048_disconnect(struct omap_dss_device *dssdev)
|
||||
|
@ -173,7 +173,6 @@ static int dsi_init_pll_data(struct platform_device *pdev, struct hdmi_pll_data
|
||||
{
|
||||
struct dss_pll *pll = &hpll->pll;
|
||||
struct clk *clk;
|
||||
int r;
|
||||
|
||||
clk = devm_clk_get(&pdev->dev, "sys_clk");
|
||||
if (IS_ERR(clk)) {
|
||||
@ -203,12 +202,7 @@ static int dsi_init_pll_data(struct platform_device *pdev, struct hdmi_pll_data
|
||||
}
|
||||
|
||||
pll->ops = &dsi_pll_ops;
|
||||
|
||||
r = dss_pll_register(pll);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
return dss_pll_register(pll);
|
||||
}
|
||||
|
||||
int hdmi_pll_init(struct platform_device *pdev, struct hdmi_pll_data *pll,
|
||||
|
@ -646,6 +646,7 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
|
||||
for (i = 0; i < 8; i++) {
|
||||
ret = pxa3xx_gcu_add_buffer(dev, priv);
|
||||
if (ret) {
|
||||
pxa3xx_gcu_free_buffers(dev, priv);
|
||||
dev_err(dev, "failed to allocate DMA memory\n");
|
||||
goto err_disable_clk;
|
||||
}
|
||||
@ -662,15 +663,15 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
|
||||
SHARED_SIZE, irq);
|
||||
return 0;
|
||||
|
||||
err_free_dma:
|
||||
dma_free_coherent(dev, SHARED_SIZE,
|
||||
priv->shared, priv->shared_phys);
|
||||
err_disable_clk:
|
||||
clk_disable_unprepare(priv->clk);
|
||||
|
||||
err_misc_deregister:
|
||||
misc_deregister(&priv->misc_dev);
|
||||
|
||||
err_disable_clk:
|
||||
clk_disable_unprepare(priv->clk);
|
||||
err_free_dma:
|
||||
dma_free_coherent(dev, SHARED_SIZE,
|
||||
priv->shared, priv->shared_phys);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -683,6 +684,7 @@ static int pxa3xx_gcu_remove(struct platform_device *pdev)
|
||||
pxa3xx_gcu_wait_idle(priv);
|
||||
misc_deregister(&priv->misc_dev);
|
||||
dma_free_coherent(dev, SHARED_SIZE, priv->shared, priv->shared_phys);
|
||||
clk_disable_unprepare(priv->clk);
|
||||
pxa3xx_gcu_free_buffers(dev, priv);
|
||||
|
||||
return 0;
|
||||
|
@ -490,11 +490,12 @@ static int vesafb_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct fb_info *info = platform_get_drvdata(pdev);
|
||||
|
||||
/* vesafb_destroy takes care of info cleanup */
|
||||
unregister_framebuffer(info);
|
||||
if (((struct vesafb_par *)(info->par))->region)
|
||||
release_region(0x3c0, 32);
|
||||
|
||||
/* vesafb_destroy takes care of info cleanup */
|
||||
unregister_framebuffer(info);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -223,7 +223,6 @@ static int xenfb_setcolreg(unsigned regno, unsigned red, unsigned green,
|
||||
red = CNVT_TOHW(red, info->var.red.length);
|
||||
green = CNVT_TOHW(green, info->var.green.length);
|
||||
blue = CNVT_TOHW(blue, info->var.blue.length);
|
||||
transp = CNVT_TOHW(transp, info->var.transp.length);
|
||||
#undef CNVT_TOHW
|
||||
|
||||
v = (red << info->var.red.offset) |
|
||||
|
@ -750,7 +750,7 @@
|
||||
#define WAIT_DMA_GUI_IDLE (1 << 9)
|
||||
#define WAIT_2D_IDLECLEAN (1 << 16)
|
||||
|
||||
/* SURFACE_CNTL bit consants */
|
||||
/* SURFACE_CNTL bit constants */
|
||||
#define SURF_TRANSLATION_DIS (1 << 8)
|
||||
#define NONSURF_AP0_SWP_16BPP (1 << 20)
|
||||
#define NONSURF_AP0_SWP_32BPP (1 << 21)
|
||||
|
Loading…
Reference in New Issue
Block a user