diff options
79 files changed, 537 insertions, 165 deletions
diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl index c526d8194883..7df3134ebc0e 100644 --- a/Documentation/DocBook/drm.tmpl +++ b/Documentation/DocBook/drm.tmpl | |||
@@ -2502,7 +2502,7 @@ void intel_crt_init(struct drm_device *dev) | |||
2502 | <td valign="top" >Description/Restrictions</td> | 2502 | <td valign="top" >Description/Restrictions</td> |
2503 | </tr> | 2503 | </tr> |
2504 | <tr> | 2504 | <tr> |
2505 | <td rowspan="19" valign="top" >DRM</td> | 2505 | <td rowspan="20" valign="top" >DRM</td> |
2506 | <td rowspan="2" valign="top" >Generic</td> | 2506 | <td rowspan="2" valign="top" >Generic</td> |
2507 | <td valign="top" >“EDID”</td> | 2507 | <td valign="top" >“EDID”</td> |
2508 | <td valign="top" >BLOB | IMMUTABLE</td> | 2508 | <td valign="top" >BLOB | IMMUTABLE</td> |
@@ -2518,6 +2518,14 @@ void intel_crt_init(struct drm_device *dev) | |||
2518 | <td valign="top" >Contains DPMS operation mode value.</td> | 2518 | <td valign="top" >Contains DPMS operation mode value.</td> |
2519 | </tr> | 2519 | </tr> |
2520 | <tr> | 2520 | <tr> |
2521 | <td rowspan="1" valign="top" >Plane</td> | ||
2522 | <td valign="top" >“type”</td> | ||
2523 | <td valign="top" >ENUM | IMMUTABLE</td> | ||
2524 | <td valign="top" >{ "Overlay", "Primary", "Cursor" }</td> | ||
2525 | <td valign="top" >Plane</td> | ||
2526 | <td valign="top" >Plane type</td> | ||
2527 | </tr> | ||
2528 | <tr> | ||
2521 | <td rowspan="2" valign="top" >DVI-I</td> | 2529 | <td rowspan="2" valign="top" >DVI-I</td> |
2522 | <td valign="top" >“subconnector”</td> | 2530 | <td valign="top" >“subconnector”</td> |
2523 | <td valign="top" >ENUM</td> | 2531 | <td valign="top" >ENUM</td> |
diff --git a/drivers/gpu/Makefile b/drivers/gpu/Makefile index d8a22c2a579d..70da9eb52a42 100644 --- a/drivers/gpu/Makefile +++ b/drivers/gpu/Makefile | |||
@@ -1,2 +1,3 @@ | |||
1 | obj-y += drm/ vga/ | 1 | obj-y += drm/ vga/ |
2 | obj-$(CONFIG_TEGRA_HOST1X) += host1x/ | 2 | obj-$(CONFIG_TEGRA_HOST1X) += host1x/ |
3 | obj-$(CONFIG_IMX_IPUV3_CORE) += ipu-v3/ | ||
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c index 567cfbde0883..8ab3cd1a8cdb 100644 --- a/drivers/gpu/drm/armada/armada_drv.c +++ b/drivers/gpu/drm/armada/armada_drv.c | |||
@@ -402,7 +402,7 @@ static struct platform_driver armada_drm_platform_driver = { | |||
402 | 402 | ||
403 | static int __init armada_drm_init(void) | 403 | static int __init armada_drm_init(void) |
404 | { | 404 | { |
405 | armada_drm_driver.num_ioctls = DRM_ARRAY_SIZE(armada_ioctls); | 405 | armada_drm_driver.num_ioctls = ARRAY_SIZE(armada_ioctls); |
406 | return platform_driver_register(&armada_drm_platform_driver); | 406 | return platform_driver_register(&armada_drm_platform_driver); |
407 | } | 407 | } |
408 | module_init(armada_drm_init); | 408 | module_init(armada_drm_init); |
diff --git a/drivers/gpu/drm/ast/ast_post.c b/drivers/gpu/drm/ast/ast_post.c index 4e5ea3898e72..38d437f3a267 100644 --- a/drivers/gpu/drm/ast/ast_post.c +++ b/drivers/gpu/drm/ast/ast_post.c | |||
@@ -1083,7 +1083,7 @@ static void get_ddr3_info(struct ast_private *ast, struct ast2300_dram_param *pa | |||
1083 | case AST_DRAM_4Gx16: | 1083 | case AST_DRAM_4Gx16: |
1084 | param->dram_config = 0x133; | 1084 | param->dram_config = 0x133; |
1085 | break; | 1085 | break; |
1086 | }; /* switch size */ | 1086 | } /* switch size */ |
1087 | 1087 | ||
1088 | switch (param->vram_size) { | 1088 | switch (param->vram_size) { |
1089 | default: | 1089 | default: |
@@ -1454,7 +1454,7 @@ static void get_ddr2_info(struct ast_private *ast, struct ast2300_dram_param *pa | |||
1454 | case AST_DRAM_4Gx16: | 1454 | case AST_DRAM_4Gx16: |
1455 | param->dram_config = 0x123; | 1455 | param->dram_config = 0x123; |
1456 | break; | 1456 | break; |
1457 | }; /* switch size */ | 1457 | } /* switch size */ |
1458 | 1458 | ||
1459 | switch (param->vram_size) { | 1459 | switch (param->vram_size) { |
1460 | default: | 1460 | default: |
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 7be21781d3bd..dfa9769b26b5 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
@@ -3471,18 +3471,21 @@ static bool drm_assign_hdmi_deep_color_info(struct edid *edid, | |||
3471 | 3471 | ||
3472 | if (hdmi[6] & DRM_EDID_HDMI_DC_30) { | 3472 | if (hdmi[6] & DRM_EDID_HDMI_DC_30) { |
3473 | dc_bpc = 10; | 3473 | dc_bpc = 10; |
3474 | info->edid_hdmi_dc_modes |= DRM_EDID_HDMI_DC_30; | ||
3474 | DRM_DEBUG("%s: HDMI sink does deep color 30.\n", | 3475 | DRM_DEBUG("%s: HDMI sink does deep color 30.\n", |
3475 | connector->name); | 3476 | connector->name); |
3476 | } | 3477 | } |
3477 | 3478 | ||
3478 | if (hdmi[6] & DRM_EDID_HDMI_DC_36) { | 3479 | if (hdmi[6] & DRM_EDID_HDMI_DC_36) { |
3479 | dc_bpc = 12; | 3480 | dc_bpc = 12; |
3481 | info->edid_hdmi_dc_modes |= DRM_EDID_HDMI_DC_36; | ||
3480 | DRM_DEBUG("%s: HDMI sink does deep color 36.\n", | 3482 | DRM_DEBUG("%s: HDMI sink does deep color 36.\n", |
3481 | connector->name); | 3483 | connector->name); |
3482 | } | 3484 | } |
3483 | 3485 | ||
3484 | if (hdmi[6] & DRM_EDID_HDMI_DC_48) { | 3486 | if (hdmi[6] & DRM_EDID_HDMI_DC_48) { |
3485 | dc_bpc = 16; | 3487 | dc_bpc = 16; |
3488 | info->edid_hdmi_dc_modes |= DRM_EDID_HDMI_DC_48; | ||
3486 | DRM_DEBUG("%s: HDMI sink does deep color 48.\n", | 3489 | DRM_DEBUG("%s: HDMI sink does deep color 48.\n", |
3487 | connector->name); | 3490 | connector->name); |
3488 | } | 3491 | } |
diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c index 5e05dbc60082..a8ffc8c1477b 100644 --- a/drivers/gpu/drm/exynos/exynos_dp_core.c +++ b/drivers/gpu/drm/exynos/exynos_dp_core.c | |||
@@ -1087,7 +1087,7 @@ static void exynos_dp_dpms(struct exynos_drm_display *display, int mode) | |||
1087 | break; | 1087 | break; |
1088 | default: | 1088 | default: |
1089 | break; | 1089 | break; |
1090 | }; | 1090 | } |
1091 | dp->dpms_mode = mode; | 1091 | dp->dpms_mode = mode; |
1092 | } | 1092 | } |
1093 | 1093 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c index f1b8587cc63d..482127f633c5 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c | |||
@@ -152,7 +152,7 @@ static void exynos_dpi_dpms(struct exynos_drm_display *display, int mode) | |||
152 | break; | 152 | break; |
153 | default: | 153 | default: |
154 | break; | 154 | break; |
155 | }; | 155 | } |
156 | ctx->dpms_mode = mode; | 156 | ctx->dpms_mode = mode; |
157 | } | 157 | } |
158 | 158 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 5d225dd58a87..d91f27777537 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c | |||
@@ -573,7 +573,7 @@ static int exynos_drm_platform_probe(struct platform_device *pdev) | |||
573 | int ret; | 573 | int ret; |
574 | 574 | ||
575 | pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); | 575 | pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); |
576 | exynos_drm_driver.num_ioctls = DRM_ARRAY_SIZE(exynos_ioctls); | 576 | exynos_drm_driver.num_ioctls = ARRAY_SIZE(exynos_ioctls); |
577 | 577 | ||
578 | #ifdef CONFIG_DRM_EXYNOS_FIMD | 578 | #ifdef CONFIG_DRM_EXYNOS_FIMD |
579 | ret = platform_driver_register(&fimd_driver); | 579 | ret = platform_driver_register(&fimd_driver); |
diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_pkg_sender.c b/drivers/gpu/drm/gma500/mdfld_dsi_pkg_sender.c index 489ffd2c66e5..87885d8c06e8 100644 --- a/drivers/gpu/drm/gma500/mdfld_dsi_pkg_sender.c +++ b/drivers/gpu/drm/gma500/mdfld_dsi_pkg_sender.c | |||
@@ -148,7 +148,7 @@ static int handle_dsi_error(struct mdfld_dsi_pkg_sender *sender, u32 mask) | |||
148 | break; | 148 | break; |
149 | case BIT(14): | 149 | case BIT(14): |
150 | /*wait for all fifo empty*/ | 150 | /*wait for all fifo empty*/ |
151 | /*wait_for_all_fifos_empty(sender)*/; | 151 | /*wait_for_all_fifos_empty(sender)*/ |
152 | break; | 152 | break; |
153 | case BIT(15): | 153 | case BIT(15): |
154 | dev_dbg(sender->dev->dev, "No Action required\n"); | 154 | dev_dbg(sender->dev->dev, "No Action required\n"); |
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c index 59ea45e5c97e..6e8fe9ec02b5 100644 --- a/drivers/gpu/drm/gma500/psb_drv.c +++ b/drivers/gpu/drm/gma500/psb_drv.c | |||
@@ -477,7 +477,7 @@ static struct drm_driver driver = { | |||
477 | .lastclose = psb_driver_lastclose, | 477 | .lastclose = psb_driver_lastclose, |
478 | .preclose = psb_driver_preclose, | 478 | .preclose = psb_driver_preclose, |
479 | 479 | ||
480 | .num_ioctls = DRM_ARRAY_SIZE(psb_ioctls), | 480 | .num_ioctls = ARRAY_SIZE(psb_ioctls), |
481 | .device_is_agp = psb_driver_device_is_agp, | 481 | .device_is_agp = psb_driver_device_is_agp, |
482 | .irq_preinstall = psb_irq_preinstall, | 482 | .irq_preinstall = psb_irq_preinstall, |
483 | .irq_postinstall = psb_irq_postinstall, | 483 | .irq_postinstall = psb_irq_postinstall, |
diff --git a/drivers/gpu/drm/i810/i810_dma.c b/drivers/gpu/drm/i810/i810_dma.c index aeace37415aa..e88bac1d781f 100644 --- a/drivers/gpu/drm/i810/i810_dma.c +++ b/drivers/gpu/drm/i810/i810_dma.c | |||
@@ -1251,7 +1251,7 @@ const struct drm_ioctl_desc i810_ioctls[] = { | |||
1251 | DRM_IOCTL_DEF_DRV(I810_FLIP, i810_flip_bufs, DRM_AUTH|DRM_UNLOCKED), | 1251 | DRM_IOCTL_DEF_DRV(I810_FLIP, i810_flip_bufs, DRM_AUTH|DRM_UNLOCKED), |
1252 | }; | 1252 | }; |
1253 | 1253 | ||
1254 | int i810_max_ioctl = DRM_ARRAY_SIZE(i810_ioctls); | 1254 | int i810_max_ioctl = ARRAY_SIZE(i810_ioctls); |
1255 | 1255 | ||
1256 | /** | 1256 | /** |
1257 | * Determine if the device really is AGP or not. | 1257 | * Determine if the device really is AGP or not. |
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index b9159ade5e85..4c22a5b7f4c5 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
@@ -1986,7 +1986,7 @@ const struct drm_ioctl_desc i915_ioctls[] = { | |||
1986 | DRM_IOCTL_DEF_DRV(I915_GEM_USERPTR, i915_gem_userptr_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), | 1986 | DRM_IOCTL_DEF_DRV(I915_GEM_USERPTR, i915_gem_userptr_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), |
1987 | }; | 1987 | }; |
1988 | 1988 | ||
1989 | int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls); | 1989 | int i915_max_ioctl = ARRAY_SIZE(i915_ioctls); |
1990 | 1990 | ||
1991 | /* | 1991 | /* |
1992 | * This is really ugly: Because old userspace abused the linux agp interface to | 1992 | * This is really ugly: Because old userspace abused the linux agp interface to |
diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c index 3c59584161c2..2e0613e26251 100644 --- a/drivers/gpu/drm/i915/i915_ioc32.c +++ b/drivers/gpu/drm/i915/i915_ioc32.c | |||
@@ -208,7 +208,7 @@ long i915_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
208 | if (nr < DRM_COMMAND_BASE) | 208 | if (nr < DRM_COMMAND_BASE) |
209 | return drm_compat_ioctl(filp, cmd, arg); | 209 | return drm_compat_ioctl(filp, cmd, arg); |
210 | 210 | ||
211 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(i915_compat_ioctls)) | 211 | if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(i915_compat_ioctls)) |
212 | fn = i915_compat_ioctls[nr - DRM_COMMAND_BASE]; | 212 | fn = i915_compat_ioctls[nr - DRM_COMMAND_BASE]; |
213 | 213 | ||
214 | if (fn != NULL) | 214 | if (fn != NULL) |
diff --git a/drivers/gpu/drm/mga/mga_ioc32.c b/drivers/gpu/drm/mga/mga_ioc32.c index 86b4bb804852..729bfd56b55f 100644 --- a/drivers/gpu/drm/mga/mga_ioc32.c +++ b/drivers/gpu/drm/mga/mga_ioc32.c | |||
@@ -214,7 +214,7 @@ long mga_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
214 | if (nr < DRM_COMMAND_BASE) | 214 | if (nr < DRM_COMMAND_BASE) |
215 | return drm_compat_ioctl(filp, cmd, arg); | 215 | return drm_compat_ioctl(filp, cmd, arg); |
216 | 216 | ||
217 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) | 217 | if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(mga_compat_ioctls)) |
218 | fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; | 218 | fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; |
219 | 219 | ||
220 | if (fn != NULL) | 220 | if (fn != NULL) |
diff --git a/drivers/gpu/drm/mga/mga_state.c b/drivers/gpu/drm/mga/mga_state.c index 3cb58df5237e..792f924496fc 100644 --- a/drivers/gpu/drm/mga/mga_state.c +++ b/drivers/gpu/drm/mga/mga_state.c | |||
@@ -1099,4 +1099,4 @@ const struct drm_ioctl_desc mga_ioctls[] = { | |||
1099 | DRM_IOCTL_DEF_DRV(MGA_DMA_BOOTSTRAP, mga_dma_bootstrap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | 1099 | DRM_IOCTL_DEF_DRV(MGA_DMA_BOOTSTRAP, mga_dma_bootstrap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
1100 | }; | 1100 | }; |
1101 | 1101 | ||
1102 | int mga_max_ioctl = DRM_ARRAY_SIZE(mga_ioctls); | 1102 | int mga_max_ioctl = ARRAY_SIZE(mga_ioctls); |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvf0.c b/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvf0.c index 0fab95e49f53..dec03f04114d 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvf0.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvf0.c | |||
@@ -842,7 +842,7 @@ nvf0_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info) | |||
842 | u16 magic3 = 0x0648; | 842 | u16 magic3 = 0x0648; |
843 | magic[gpc][0] = 0x10000000 | (magic0 << 16) | offset; | 843 | magic[gpc][0] = 0x10000000 | (magic0 << 16) | offset; |
844 | magic[gpc][1] = 0x00000000 | (magic1 << 16); | 844 | magic[gpc][1] = 0x00000000 | (magic1 << 16); |
845 | offset += 0x0324 * (priv->tpc_nr[gpc] - 1);; | 845 | offset += 0x0324 * (priv->tpc_nr[gpc] - 1); |
846 | magic[gpc][2] = 0x10000000 | (magic2 << 16) | offset; | 846 | magic[gpc][2] = 0x10000000 | (magic2 << 16) | offset; |
847 | magic[gpc][3] = 0x00000000 | (magic3 << 16); | 847 | magic[gpc][3] = 0x00000000 | (magic3 << 16); |
848 | offset += 0x0324; | 848 | offset += 0x0324; |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nv50.c b/drivers/gpu/drm/nouveau/core/engine/graph/nv50.c index 2c7809e1a09b..1a2d56493cf6 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/nv50.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/nv50.c | |||
@@ -901,7 +901,7 @@ nv50_graph_ctor(struct nouveau_object *parent, struct nouveau_object *engine, | |||
901 | nv_engine(priv)->sclass = nvaf_graph_sclass; | 901 | nv_engine(priv)->sclass = nvaf_graph_sclass; |
902 | break; | 902 | break; |
903 | 903 | ||
904 | }; | 904 | } |
905 | 905 | ||
906 | /* unfortunate hw bug workaround... */ | 906 | /* unfortunate hw bug workaround... */ |
907 | if (nv_device(priv)->chipset != 0x50 && | 907 | if (nv_device(priv)->chipset != 0x50 && |
diff --git a/drivers/gpu/drm/nouveau/nouveau_ioc32.c b/drivers/gpu/drm/nouveau/nouveau_ioc32.c index c1a7e5a73a26..462679a8fec5 100644 --- a/drivers/gpu/drm/nouveau/nouveau_ioc32.c +++ b/drivers/gpu/drm/nouveau/nouveau_ioc32.c | |||
@@ -57,7 +57,7 @@ long nouveau_compat_ioctl(struct file *filp, unsigned int cmd, | |||
57 | return drm_compat_ioctl(filp, cmd, arg); | 57 | return drm_compat_ioctl(filp, cmd, arg); |
58 | 58 | ||
59 | #if 0 | 59 | #if 0 |
60 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) | 60 | if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(mga_compat_ioctls)) |
61 | fn = nouveau_compat_ioctls[nr - DRM_COMMAND_BASE]; | 61 | fn = nouveau_compat_ioctls[nr - DRM_COMMAND_BASE]; |
62 | #endif | 62 | #endif |
63 | if (fn != NULL) | 63 | if (fn != NULL) |
diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c index 0bb86e6d41b4..b110883f8253 100644 --- a/drivers/gpu/drm/qxl/qxl_ioctl.c +++ b/drivers/gpu/drm/qxl/qxl_ioctl.c | |||
@@ -451,4 +451,4 @@ const struct drm_ioctl_desc qxl_ioctls[] = { | |||
451 | DRM_AUTH|DRM_UNLOCKED), | 451 | DRM_AUTH|DRM_UNLOCKED), |
452 | }; | 452 | }; |
453 | 453 | ||
454 | int qxl_max_ioctls = DRM_ARRAY_SIZE(qxl_ioctls); | 454 | int qxl_max_ioctls = ARRAY_SIZE(qxl_ioctls); |
diff --git a/drivers/gpu/drm/r128/r128_ioc32.c b/drivers/gpu/drm/r128/r128_ioc32.c index b0d0fd3e4376..663f38c63ba6 100644 --- a/drivers/gpu/drm/r128/r128_ioc32.c +++ b/drivers/gpu/drm/r128/r128_ioc32.c | |||
@@ -203,7 +203,7 @@ long r128_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
203 | if (nr < DRM_COMMAND_BASE) | 203 | if (nr < DRM_COMMAND_BASE) |
204 | return drm_compat_ioctl(filp, cmd, arg); | 204 | return drm_compat_ioctl(filp, cmd, arg); |
205 | 205 | ||
206 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(r128_compat_ioctls)) | 206 | if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(r128_compat_ioctls)) |
207 | fn = r128_compat_ioctls[nr - DRM_COMMAND_BASE]; | 207 | fn = r128_compat_ioctls[nr - DRM_COMMAND_BASE]; |
208 | 208 | ||
209 | if (fn != NULL) | 209 | if (fn != NULL) |
diff --git a/drivers/gpu/drm/r128/r128_state.c b/drivers/gpu/drm/r128/r128_state.c index 97064dd434c2..575e986f82a7 100644 --- a/drivers/gpu/drm/r128/r128_state.c +++ b/drivers/gpu/drm/r128/r128_state.c | |||
@@ -1641,4 +1641,4 @@ const struct drm_ioctl_desc r128_ioctls[] = { | |||
1641 | DRM_IOCTL_DEF_DRV(R128_GETPARAM, r128_getparam, DRM_AUTH), | 1641 | DRM_IOCTL_DEF_DRV(R128_GETPARAM, r128_getparam, DRM_AUTH), |
1642 | }; | 1642 | }; |
1643 | 1643 | ||
1644 | int r128_max_ioctl = DRM_ARRAY_SIZE(r128_ioctls); | 1644 | int r128_max_ioctl = ARRAY_SIZE(r128_ioctls); |
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index 76c30f2da3fb..26c12a3fe430 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | |||
@@ -962,6 +962,9 @@ static bool atombios_crtc_prepare_pll(struct drm_crtc *crtc, struct drm_display_ | |||
962 | struct radeon_connector_atom_dig *dig_connector = | 962 | struct radeon_connector_atom_dig *dig_connector = |
963 | radeon_connector->con_priv; | 963 | radeon_connector->con_priv; |
964 | int dp_clock; | 964 | int dp_clock; |
965 | |||
966 | /* Assign mode clock for hdmi deep color max clock limit check */ | ||
967 | radeon_connector->pixelclock_for_modeset = mode->clock; | ||
965 | radeon_crtc->bpc = radeon_get_monitor_bpc(connector); | 968 | radeon_crtc->bpc = radeon_get_monitor_bpc(connector); |
966 | 969 | ||
967 | switch (encoder_mode) { | 970 | switch (encoder_mode) { |
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 69a00d64716e..dcd4518a9b08 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -80,6 +80,7 @@ extern int sumo_rlc_init(struct radeon_device *rdev); | |||
80 | extern void si_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); | 80 | extern void si_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); |
81 | extern void si_rlc_reset(struct radeon_device *rdev); | 81 | extern void si_rlc_reset(struct radeon_device *rdev); |
82 | extern void si_init_uvd_internal_cg(struct radeon_device *rdev); | 82 | extern void si_init_uvd_internal_cg(struct radeon_device *rdev); |
83 | static u32 cik_get_cu_active_bitmap(struct radeon_device *rdev, u32 se, u32 sh); | ||
83 | extern int cik_sdma_resume(struct radeon_device *rdev); | 84 | extern int cik_sdma_resume(struct radeon_device *rdev); |
84 | extern void cik_sdma_enable(struct radeon_device *rdev, bool enable); | 85 | extern void cik_sdma_enable(struct radeon_device *rdev, bool enable); |
85 | extern void cik_sdma_fini(struct radeon_device *rdev); | 86 | extern void cik_sdma_fini(struct radeon_device *rdev); |
@@ -3257,7 +3258,7 @@ static void cik_gpu_init(struct radeon_device *rdev) | |||
3257 | u32 mc_shared_chmap, mc_arb_ramcfg; | 3258 | u32 mc_shared_chmap, mc_arb_ramcfg; |
3258 | u32 hdp_host_path_cntl; | 3259 | u32 hdp_host_path_cntl; |
3259 | u32 tmp; | 3260 | u32 tmp; |
3260 | int i, j; | 3261 | int i, j, k; |
3261 | 3262 | ||
3262 | switch (rdev->family) { | 3263 | switch (rdev->family) { |
3263 | case CHIP_BONAIRE: | 3264 | case CHIP_BONAIRE: |
@@ -3446,6 +3447,15 @@ static void cik_gpu_init(struct radeon_device *rdev) | |||
3446 | rdev->config.cik.max_sh_per_se, | 3447 | rdev->config.cik.max_sh_per_se, |
3447 | rdev->config.cik.max_backends_per_se); | 3448 | rdev->config.cik.max_backends_per_se); |
3448 | 3449 | ||
3450 | for (i = 0; i < rdev->config.cik.max_shader_engines; i++) { | ||
3451 | for (j = 0; j < rdev->config.cik.max_sh_per_se; j++) { | ||
3452 | for (k = 0; k < rdev->config.cik.max_cu_per_sh; k++) { | ||
3453 | rdev->config.cik.active_cus += | ||
3454 | hweight32(cik_get_cu_active_bitmap(rdev, i, j)); | ||
3455 | } | ||
3456 | } | ||
3457 | } | ||
3458 | |||
3449 | /* set HW defaults for 3D engine */ | 3459 | /* set HW defaults for 3D engine */ |
3450 | WREG32(CP_MEQ_THRESHOLDS, MEQ1_START(0x30) | MEQ2_START(0x60)); | 3460 | WREG32(CP_MEQ_THRESHOLDS, MEQ1_START(0x30) | MEQ2_START(0x60)); |
3451 | 3461 | ||
@@ -3698,7 +3708,7 @@ bool cik_semaphore_ring_emit(struct radeon_device *rdev, | |||
3698 | unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; | 3708 | unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; |
3699 | 3709 | ||
3700 | radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); | 3710 | radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); |
3701 | radeon_ring_write(ring, addr & 0xffffffff); | 3711 | radeon_ring_write(ring, lower_32_bits(addr)); |
3702 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xffff) | sel); | 3712 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xffff) | sel); |
3703 | 3713 | ||
3704 | return true; | 3714 | return true; |
@@ -3818,7 +3828,7 @@ void cik_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib) | |||
3818 | radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); | 3828 | radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); |
3819 | radeon_ring_write(ring, WRITE_DATA_DST_SEL(1)); | 3829 | radeon_ring_write(ring, WRITE_DATA_DST_SEL(1)); |
3820 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); | 3830 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); |
3821 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr) & 0xffffffff); | 3831 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr)); |
3822 | radeon_ring_write(ring, next_rptr); | 3832 | radeon_ring_write(ring, next_rptr); |
3823 | } | 3833 | } |
3824 | 3834 | ||
@@ -5446,7 +5456,7 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev) | |||
5446 | (u32)(rdev->dummy_page.addr >> 12)); | 5456 | (u32)(rdev->dummy_page.addr >> 12)); |
5447 | WREG32(VM_CONTEXT1_CNTL2, 4); | 5457 | WREG32(VM_CONTEXT1_CNTL2, 4); |
5448 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | | 5458 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | |
5449 | PAGE_TABLE_BLOCK_SIZE(RADEON_VM_BLOCK_SIZE - 9) | | 5459 | PAGE_TABLE_BLOCK_SIZE(radeon_vm_block_size - 9) | |
5450 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 5460 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
5451 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | | 5461 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | |
5452 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 5462 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c index 1347162ca1a4..8e9d0f1d858e 100644 --- a/drivers/gpu/drm/radeon/cik_sdma.c +++ b/drivers/gpu/drm/radeon/cik_sdma.c | |||
@@ -141,7 +141,7 @@ void cik_sdma_ring_ib_execute(struct radeon_device *rdev, | |||
141 | next_rptr += 4; | 141 | next_rptr += 4; |
142 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0)); | 142 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0)); |
143 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); | 143 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); |
144 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr) & 0xffffffff); | 144 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr)); |
145 | radeon_ring_write(ring, 1); /* number of DWs to follow */ | 145 | radeon_ring_write(ring, 1); /* number of DWs to follow */ |
146 | radeon_ring_write(ring, next_rptr); | 146 | radeon_ring_write(ring, next_rptr); |
147 | } | 147 | } |
@@ -151,7 +151,7 @@ void cik_sdma_ring_ib_execute(struct radeon_device *rdev, | |||
151 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0)); | 151 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0)); |
152 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_INDIRECT_BUFFER, 0, extra_bits)); | 152 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_INDIRECT_BUFFER, 0, extra_bits)); |
153 | radeon_ring_write(ring, ib->gpu_addr & 0xffffffe0); /* base must be 32 byte aligned */ | 153 | radeon_ring_write(ring, ib->gpu_addr & 0xffffffe0); /* base must be 32 byte aligned */ |
154 | radeon_ring_write(ring, upper_32_bits(ib->gpu_addr) & 0xffffffff); | 154 | radeon_ring_write(ring, upper_32_bits(ib->gpu_addr)); |
155 | radeon_ring_write(ring, ib->length_dw); | 155 | radeon_ring_write(ring, ib->length_dw); |
156 | 156 | ||
157 | } | 157 | } |
@@ -203,8 +203,8 @@ void cik_sdma_fence_ring_emit(struct radeon_device *rdev, | |||
203 | 203 | ||
204 | /* write the fence */ | 204 | /* write the fence */ |
205 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_FENCE, 0, 0)); | 205 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_FENCE, 0, 0)); |
206 | radeon_ring_write(ring, addr & 0xffffffff); | 206 | radeon_ring_write(ring, lower_32_bits(addr)); |
207 | radeon_ring_write(ring, upper_32_bits(addr) & 0xffffffff); | 207 | radeon_ring_write(ring, upper_32_bits(addr)); |
208 | radeon_ring_write(ring, fence->seq); | 208 | radeon_ring_write(ring, fence->seq); |
209 | /* generate an interrupt */ | 209 | /* generate an interrupt */ |
210 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_TRAP, 0, 0)); | 210 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_TRAP, 0, 0)); |
@@ -233,7 +233,7 @@ bool cik_sdma_semaphore_ring_emit(struct radeon_device *rdev, | |||
233 | 233 | ||
234 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_SEMAPHORE, 0, extra_bits)); | 234 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_SEMAPHORE, 0, extra_bits)); |
235 | radeon_ring_write(ring, addr & 0xfffffff8); | 235 | radeon_ring_write(ring, addr & 0xfffffff8); |
236 | radeon_ring_write(ring, upper_32_bits(addr) & 0xffffffff); | 236 | radeon_ring_write(ring, upper_32_bits(addr)); |
237 | 237 | ||
238 | return true; | 238 | return true; |
239 | } | 239 | } |
@@ -551,10 +551,10 @@ int cik_copy_dma(struct radeon_device *rdev, | |||
551 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_COPY, SDMA_COPY_SUB_OPCODE_LINEAR, 0)); | 551 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_COPY, SDMA_COPY_SUB_OPCODE_LINEAR, 0)); |
552 | radeon_ring_write(ring, cur_size_in_bytes); | 552 | radeon_ring_write(ring, cur_size_in_bytes); |
553 | radeon_ring_write(ring, 0); /* src/dst endian swap */ | 553 | radeon_ring_write(ring, 0); /* src/dst endian swap */ |
554 | radeon_ring_write(ring, src_offset & 0xffffffff); | 554 | radeon_ring_write(ring, lower_32_bits(src_offset)); |
555 | radeon_ring_write(ring, upper_32_bits(src_offset) & 0xffffffff); | 555 | radeon_ring_write(ring, upper_32_bits(src_offset)); |
556 | radeon_ring_write(ring, dst_offset & 0xffffffff); | 556 | radeon_ring_write(ring, lower_32_bits(dst_offset)); |
557 | radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xffffffff); | 557 | radeon_ring_write(ring, upper_32_bits(dst_offset)); |
558 | src_offset += cur_size_in_bytes; | 558 | src_offset += cur_size_in_bytes; |
559 | dst_offset += cur_size_in_bytes; | 559 | dst_offset += cur_size_in_bytes; |
560 | } | 560 | } |
@@ -605,7 +605,7 @@ int cik_sdma_ring_test(struct radeon_device *rdev, | |||
605 | } | 605 | } |
606 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0)); | 606 | radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0)); |
607 | radeon_ring_write(ring, rdev->vram_scratch.gpu_addr & 0xfffffffc); | 607 | radeon_ring_write(ring, rdev->vram_scratch.gpu_addr & 0xfffffffc); |
608 | radeon_ring_write(ring, upper_32_bits(rdev->vram_scratch.gpu_addr) & 0xffffffff); | 608 | radeon_ring_write(ring, upper_32_bits(rdev->vram_scratch.gpu_addr)); |
609 | radeon_ring_write(ring, 1); /* number of DWs to follow */ | 609 | radeon_ring_write(ring, 1); /* number of DWs to follow */ |
610 | radeon_ring_write(ring, 0xDEADBEEF); | 610 | radeon_ring_write(ring, 0xDEADBEEF); |
611 | radeon_ring_unlock_commit(rdev, ring); | 611 | radeon_ring_unlock_commit(rdev, ring); |
@@ -660,7 +660,7 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) | |||
660 | 660 | ||
661 | ib.ptr[0] = SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0); | 661 | ib.ptr[0] = SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0); |
662 | ib.ptr[1] = rdev->vram_scratch.gpu_addr & 0xfffffffc; | 662 | ib.ptr[1] = rdev->vram_scratch.gpu_addr & 0xfffffffc; |
663 | ib.ptr[2] = upper_32_bits(rdev->vram_scratch.gpu_addr) & 0xffffffff; | 663 | ib.ptr[2] = upper_32_bits(rdev->vram_scratch.gpu_addr); |
664 | ib.ptr[3] = 1; | 664 | ib.ptr[3] = 1; |
665 | ib.ptr[4] = 0xDEADBEEF; | 665 | ib.ptr[4] = 0xDEADBEEF; |
666 | ib.length_dw = 5; | 666 | ib.length_dw = 5; |
@@ -752,9 +752,9 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, | |||
752 | ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_COPY, SDMA_WRITE_SUB_OPCODE_LINEAR, 0); | 752 | ib->ptr[ib->length_dw++] = SDMA_PACKET(SDMA_OPCODE_COPY, SDMA_WRITE_SUB_OPCODE_LINEAR, 0); |
753 | ib->ptr[ib->length_dw++] = bytes; | 753 | ib->ptr[ib->length_dw++] = bytes; |
754 | ib->ptr[ib->length_dw++] = 0; /* src/dst endian swap */ | 754 | ib->ptr[ib->length_dw++] = 0; /* src/dst endian swap */ |
755 | ib->ptr[ib->length_dw++] = src & 0xffffffff; | 755 | ib->ptr[ib->length_dw++] = lower_32_bits(src); |
756 | ib->ptr[ib->length_dw++] = upper_32_bits(src); | 756 | ib->ptr[ib->length_dw++] = upper_32_bits(src); |
757 | ib->ptr[ib->length_dw++] = pe & 0xffffffff; | 757 | ib->ptr[ib->length_dw++] = lower_32_bits(pe); |
758 | ib->ptr[ib->length_dw++] = upper_32_bits(pe); | 758 | ib->ptr[ib->length_dw++] = upper_32_bits(pe); |
759 | 759 | ||
760 | pe += bytes; | 760 | pe += bytes; |
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 653eff814504..e2f605224e8c 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -3337,6 +3337,18 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
3337 | disabled_rb_mask &= ~(1 << i); | 3337 | disabled_rb_mask &= ~(1 << i); |
3338 | } | 3338 | } |
3339 | 3339 | ||
3340 | for (i = 0; i < rdev->config.evergreen.num_ses; i++) { | ||
3341 | u32 simd_disable_bitmap; | ||
3342 | |||
3343 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_INDEX(i)); | ||
3344 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_INDEX(i)); | ||
3345 | simd_disable_bitmap = (RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0xffff0000) >> 16; | ||
3346 | simd_disable_bitmap |= 0xffffffff << rdev->config.evergreen.max_simds; | ||
3347 | tmp <<= 16; | ||
3348 | tmp |= simd_disable_bitmap; | ||
3349 | } | ||
3350 | rdev->config.evergreen.active_simds = hweight32(~tmp); | ||
3351 | |||
3340 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); | 3352 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); |
3341 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); | 3353 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); |
3342 | 3354 | ||
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index 1d3209ffbbdc..5a33ca681867 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c | |||
@@ -1057,6 +1057,18 @@ static void cayman_gpu_init(struct radeon_device *rdev) | |||
1057 | disabled_rb_mask &= ~(1 << i); | 1057 | disabled_rb_mask &= ~(1 << i); |
1058 | } | 1058 | } |
1059 | 1059 | ||
1060 | for (i = 0; i < rdev->config.cayman.max_shader_engines; i++) { | ||
1061 | u32 simd_disable_bitmap; | ||
1062 | |||
1063 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_INDEX(i)); | ||
1064 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_INDEX(i)); | ||
1065 | simd_disable_bitmap = (RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0xffff0000) >> 16; | ||
1066 | simd_disable_bitmap |= 0xffffffff << rdev->config.cayman.max_simds_per_se; | ||
1067 | tmp <<= 16; | ||
1068 | tmp |= simd_disable_bitmap; | ||
1069 | } | ||
1070 | rdev->config.cayman.active_simds = hweight32(~tmp); | ||
1071 | |||
1060 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); | 1072 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); |
1061 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); | 1073 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); |
1062 | 1074 | ||
@@ -1268,7 +1280,7 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev) | |||
1268 | (u32)(rdev->dummy_page.addr >> 12)); | 1280 | (u32)(rdev->dummy_page.addr >> 12)); |
1269 | WREG32(VM_CONTEXT1_CNTL2, 4); | 1281 | WREG32(VM_CONTEXT1_CNTL2, 4); |
1270 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | | 1282 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | |
1271 | PAGE_TABLE_BLOCK_SIZE(RADEON_VM_BLOCK_SIZE - 9) | | 1283 | PAGE_TABLE_BLOCK_SIZE(radeon_vm_block_size - 9) | |
1272 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 1284 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
1273 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | | 1285 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | |
1274 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 1286 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
@@ -1346,7 +1358,7 @@ void cayman_fence_ring_emit(struct radeon_device *rdev, | |||
1346 | /* EVENT_WRITE_EOP - flush caches, send int */ | 1358 | /* EVENT_WRITE_EOP - flush caches, send int */ |
1347 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); | 1359 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); |
1348 | radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT_TS) | EVENT_INDEX(5)); | 1360 | radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT_TS) | EVENT_INDEX(5)); |
1349 | radeon_ring_write(ring, addr & 0xffffffff); | 1361 | radeon_ring_write(ring, lower_32_bits(addr)); |
1350 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); | 1362 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); |
1351 | radeon_ring_write(ring, fence->seq); | 1363 | radeon_ring_write(ring, fence->seq); |
1352 | radeon_ring_write(ring, 0); | 1364 | radeon_ring_write(ring, 0); |
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index ad99813cfa8f..1544efcf1c3a 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c | |||
@@ -682,15 +682,11 @@ void r100_pci_gart_disable(struct radeon_device *rdev) | |||
682 | WREG32(RADEON_AIC_HI_ADDR, 0); | 682 | WREG32(RADEON_AIC_HI_ADDR, 0); |
683 | } | 683 | } |
684 | 684 | ||
685 | int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr) | 685 | void r100_pci_gart_set_page(struct radeon_device *rdev, unsigned i, |
686 | uint64_t addr) | ||
686 | { | 687 | { |
687 | u32 *gtt = rdev->gart.ptr; | 688 | u32 *gtt = rdev->gart.ptr; |
688 | |||
689 | if (i < 0 || i > rdev->gart.num_gpu_pages) { | ||
690 | return -EINVAL; | ||
691 | } | ||
692 | gtt[i] = cpu_to_le32(lower_32_bits(addr)); | 689 | gtt[i] = cpu_to_le32(lower_32_bits(addr)); |
693 | return 0; | ||
694 | } | 690 | } |
695 | 691 | ||
696 | void r100_pci_gart_fini(struct radeon_device *rdev) | 692 | void r100_pci_gart_fini(struct radeon_device *rdev) |
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c index 206caf9700b7..3c21d77a483d 100644 --- a/drivers/gpu/drm/radeon/r300.c +++ b/drivers/gpu/drm/radeon/r300.c | |||
@@ -72,13 +72,11 @@ void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev) | |||
72 | #define R300_PTE_WRITEABLE (1 << 2) | 72 | #define R300_PTE_WRITEABLE (1 << 2) |
73 | #define R300_PTE_READABLE (1 << 3) | 73 | #define R300_PTE_READABLE (1 << 3) |
74 | 74 | ||
75 | int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr) | 75 | void rv370_pcie_gart_set_page(struct radeon_device *rdev, unsigned i, |
76 | uint64_t addr) | ||
76 | { | 77 | { |
77 | void __iomem *ptr = rdev->gart.ptr; | 78 | void __iomem *ptr = rdev->gart.ptr; |
78 | 79 | ||
79 | if (i < 0 || i > rdev->gart.num_gpu_pages) { | ||
80 | return -EINVAL; | ||
81 | } | ||
82 | addr = (lower_32_bits(addr) >> 8) | | 80 | addr = (lower_32_bits(addr) >> 8) | |
83 | ((upper_32_bits(addr) & 0xff) << 24) | | 81 | ((upper_32_bits(addr) & 0xff) << 24) | |
84 | R300_PTE_WRITEABLE | R300_PTE_READABLE; | 82 | R300_PTE_WRITEABLE | R300_PTE_READABLE; |
@@ -86,7 +84,6 @@ int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr) | |||
86 | * on powerpc without HW swappers, it'll get swapped on way | 84 | * on powerpc without HW swappers, it'll get swapped on way |
87 | * into VRAM - so no need for cpu_to_le32 on VRAM tables */ | 85 | * into VRAM - so no need for cpu_to_le32 on VRAM tables */ |
88 | writel(addr, ((void __iomem *)ptr) + (i * 4)); | 86 | writel(addr, ((void __iomem *)ptr) + (i * 4)); |
89 | return 0; | ||
90 | } | 87 | } |
91 | 88 | ||
92 | int rv370_pcie_gart_init(struct radeon_device *rdev) | 89 | int rv370_pcie_gart_init(struct radeon_device *rdev) |
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index c75881223d18..c66952d4b00c 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -1958,6 +1958,9 @@ static void r600_gpu_init(struct radeon_device *rdev) | |||
1958 | if (tmp < rdev->config.r600.max_simds) { | 1958 | if (tmp < rdev->config.r600.max_simds) { |
1959 | rdev->config.r600.max_simds = tmp; | 1959 | rdev->config.r600.max_simds = tmp; |
1960 | } | 1960 | } |
1961 | tmp = rdev->config.r600.max_simds - | ||
1962 | r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R6XX_MAX_SIMDS_MASK); | ||
1963 | rdev->config.r600.active_simds = tmp; | ||
1961 | 1964 | ||
1962 | disabled_rb_mask = (RREG32(CC_RB_BACKEND_DISABLE) >> 16) & R6XX_MAX_BACKENDS_MASK; | 1965 | disabled_rb_mask = (RREG32(CC_RB_BACKEND_DISABLE) >> 16) & R6XX_MAX_BACKENDS_MASK; |
1963 | tmp = (tiling_config & PIPE_TILING__MASK) >> PIPE_TILING__SHIFT; | 1966 | tmp = (tiling_config & PIPE_TILING__MASK) >> PIPE_TILING__SHIFT; |
@@ -2724,7 +2727,7 @@ void r600_fence_ring_emit(struct radeon_device *rdev, | |||
2724 | /* EVENT_WRITE_EOP - flush caches, send int */ | 2727 | /* EVENT_WRITE_EOP - flush caches, send int */ |
2725 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); | 2728 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); |
2726 | radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT_TS) | EVENT_INDEX(5)); | 2729 | radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT_TS) | EVENT_INDEX(5)); |
2727 | radeon_ring_write(ring, addr & 0xffffffff); | 2730 | radeon_ring_write(ring, lower_32_bits(addr)); |
2728 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); | 2731 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); |
2729 | radeon_ring_write(ring, fence->seq); | 2732 | radeon_ring_write(ring, fence->seq); |
2730 | radeon_ring_write(ring, 0); | 2733 | radeon_ring_write(ring, 0); |
@@ -2763,7 +2766,7 @@ bool r600_semaphore_ring_emit(struct radeon_device *rdev, | |||
2763 | sel |= PACKET3_SEM_WAIT_ON_SIGNAL; | 2766 | sel |= PACKET3_SEM_WAIT_ON_SIGNAL; |
2764 | 2767 | ||
2765 | radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); | 2768 | radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); |
2766 | radeon_ring_write(ring, addr & 0xffffffff); | 2769 | radeon_ring_write(ring, lower_32_bits(addr)); |
2767 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | sel); | 2770 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | sel); |
2768 | 2771 | ||
2769 | return true; | 2772 | return true; |
@@ -2824,9 +2827,9 @@ int r600_copy_cpdma(struct radeon_device *rdev, | |||
2824 | if (size_in_bytes == 0) | 2827 | if (size_in_bytes == 0) |
2825 | tmp |= PACKET3_CP_DMA_CP_SYNC; | 2828 | tmp |= PACKET3_CP_DMA_CP_SYNC; |
2826 | radeon_ring_write(ring, PACKET3(PACKET3_CP_DMA, 4)); | 2829 | radeon_ring_write(ring, PACKET3(PACKET3_CP_DMA, 4)); |
2827 | radeon_ring_write(ring, src_offset & 0xffffffff); | 2830 | radeon_ring_write(ring, lower_32_bits(src_offset)); |
2828 | radeon_ring_write(ring, tmp); | 2831 | radeon_ring_write(ring, tmp); |
2829 | radeon_ring_write(ring, dst_offset & 0xffffffff); | 2832 | radeon_ring_write(ring, lower_32_bits(dst_offset)); |
2830 | radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff); | 2833 | radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff); |
2831 | radeon_ring_write(ring, cur_size_in_bytes); | 2834 | radeon_ring_write(ring, cur_size_in_bytes); |
2832 | src_offset += cur_size_in_bytes; | 2835 | src_offset += cur_size_in_bytes; |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 7501ba318c67..4b0bbf88d5c0 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -100,6 +100,8 @@ extern int radeon_dpm; | |||
100 | extern int radeon_aspm; | 100 | extern int radeon_aspm; |
101 | extern int radeon_runtime_pm; | 101 | extern int radeon_runtime_pm; |
102 | extern int radeon_hard_reset; | 102 | extern int radeon_hard_reset; |
103 | extern int radeon_vm_size; | ||
104 | extern int radeon_vm_block_size; | ||
103 | 105 | ||
104 | /* | 106 | /* |
105 | * Copy from radeon_drv.h so we don't have to include both and have conflicting | 107 | * Copy from radeon_drv.h so we don't have to include both and have conflicting |
@@ -837,13 +839,8 @@ struct radeon_mec { | |||
837 | /* maximum number of VMIDs */ | 839 | /* maximum number of VMIDs */ |
838 | #define RADEON_NUM_VM 16 | 840 | #define RADEON_NUM_VM 16 |
839 | 841 | ||
840 | /* defines number of bits in page table versus page directory, | ||
841 | * a page is 4KB so we have 12 bits offset, 9 bits in the page | ||
842 | * table and the remaining 19 bits are in the page directory */ | ||
843 | #define RADEON_VM_BLOCK_SIZE 9 | ||
844 | |||
845 | /* number of entries in page table */ | 842 | /* number of entries in page table */ |
846 | #define RADEON_VM_PTE_COUNT (1 << RADEON_VM_BLOCK_SIZE) | 843 | #define RADEON_VM_PTE_COUNT (1 << radeon_vm_block_size) |
847 | 844 | ||
848 | /* PTBs (Page Table Blocks) need to be aligned to 32K */ | 845 | /* PTBs (Page Table Blocks) need to be aligned to 32K */ |
849 | #define RADEON_VM_PTB_ALIGN_SIZE 32768 | 846 | #define RADEON_VM_PTB_ALIGN_SIZE 32768 |
@@ -997,8 +994,8 @@ struct radeon_cs_reloc { | |||
997 | struct radeon_bo *robj; | 994 | struct radeon_bo *robj; |
998 | struct ttm_validate_buffer tv; | 995 | struct ttm_validate_buffer tv; |
999 | uint64_t gpu_offset; | 996 | uint64_t gpu_offset; |
1000 | unsigned domain; | 997 | unsigned prefered_domains; |
1001 | unsigned alt_domain; | 998 | unsigned allowed_domains; |
1002 | uint32_t tiling_flags; | 999 | uint32_t tiling_flags; |
1003 | uint32_t handle; | 1000 | uint32_t handle; |
1004 | }; | 1001 | }; |
@@ -1782,7 +1779,8 @@ struct radeon_asic { | |||
1782 | /* gart */ | 1779 | /* gart */ |
1783 | struct { | 1780 | struct { |
1784 | void (*tlb_flush)(struct radeon_device *rdev); | 1781 | void (*tlb_flush)(struct radeon_device *rdev); |
1785 | int (*set_page)(struct radeon_device *rdev, int i, uint64_t addr); | 1782 | void (*set_page)(struct radeon_device *rdev, unsigned i, |
1783 | uint64_t addr); | ||
1786 | } gart; | 1784 | } gart; |
1787 | struct { | 1785 | struct { |
1788 | int (*init)(struct radeon_device *rdev); | 1786 | int (*init)(struct radeon_device *rdev); |
@@ -1934,6 +1932,7 @@ struct r600_asic { | |||
1934 | unsigned tiling_group_size; | 1932 | unsigned tiling_group_size; |
1935 | unsigned tile_config; | 1933 | unsigned tile_config; |
1936 | unsigned backend_map; | 1934 | unsigned backend_map; |
1935 | unsigned active_simds; | ||
1937 | }; | 1936 | }; |
1938 | 1937 | ||
1939 | struct rv770_asic { | 1938 | struct rv770_asic { |
@@ -1959,6 +1958,7 @@ struct rv770_asic { | |||
1959 | unsigned tiling_group_size; | 1958 | unsigned tiling_group_size; |
1960 | unsigned tile_config; | 1959 | unsigned tile_config; |
1961 | unsigned backend_map; | 1960 | unsigned backend_map; |
1961 | unsigned active_simds; | ||
1962 | }; | 1962 | }; |
1963 | 1963 | ||
1964 | struct evergreen_asic { | 1964 | struct evergreen_asic { |
@@ -1985,6 +1985,7 @@ struct evergreen_asic { | |||
1985 | unsigned tiling_group_size; | 1985 | unsigned tiling_group_size; |
1986 | unsigned tile_config; | 1986 | unsigned tile_config; |
1987 | unsigned backend_map; | 1987 | unsigned backend_map; |
1988 | unsigned active_simds; | ||
1988 | }; | 1989 | }; |
1989 | 1990 | ||
1990 | struct cayman_asic { | 1991 | struct cayman_asic { |
@@ -2023,6 +2024,7 @@ struct cayman_asic { | |||
2023 | unsigned multi_gpu_tile_size; | 2024 | unsigned multi_gpu_tile_size; |
2024 | 2025 | ||
2025 | unsigned tile_config; | 2026 | unsigned tile_config; |
2027 | unsigned active_simds; | ||
2026 | }; | 2028 | }; |
2027 | 2029 | ||
2028 | struct si_asic { | 2030 | struct si_asic { |
@@ -2053,6 +2055,7 @@ struct si_asic { | |||
2053 | 2055 | ||
2054 | unsigned tile_config; | 2056 | unsigned tile_config; |
2055 | uint32_t tile_mode_array[32]; | 2057 | uint32_t tile_mode_array[32]; |
2058 | uint32_t active_cus; | ||
2056 | }; | 2059 | }; |
2057 | 2060 | ||
2058 | struct cik_asic { | 2061 | struct cik_asic { |
@@ -2084,6 +2087,7 @@ struct cik_asic { | |||
2084 | unsigned tile_config; | 2087 | unsigned tile_config; |
2085 | uint32_t tile_mode_array[32]; | 2088 | uint32_t tile_mode_array[32]; |
2086 | uint32_t macrotile_mode_array[16]; | 2089 | uint32_t macrotile_mode_array[16]; |
2090 | uint32_t active_cus; | ||
2087 | }; | 2091 | }; |
2088 | 2092 | ||
2089 | union radeon_asic_config { | 2093 | union radeon_asic_config { |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index 34ea53d980a1..34b9aa9e3c06 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
@@ -2029,8 +2029,8 @@ static struct radeon_asic ci_asic = { | |||
2029 | .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, | 2029 | .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, |
2030 | .dma = &cik_copy_dma, | 2030 | .dma = &cik_copy_dma, |
2031 | .dma_ring_index = R600_RING_TYPE_DMA_INDEX, | 2031 | .dma_ring_index = R600_RING_TYPE_DMA_INDEX, |
2032 | .copy = &cik_copy_cpdma, | 2032 | .copy = &cik_copy_dma, |
2033 | .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, | 2033 | .copy_ring_index = R600_RING_TYPE_DMA_INDEX, |
2034 | }, | 2034 | }, |
2035 | .surface = { | 2035 | .surface = { |
2036 | .set_reg = r600_set_surface_reg, | 2036 | .set_reg = r600_set_surface_reg, |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index 0eab015b2cfb..01e7c0ad8f01 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h | |||
@@ -67,7 +67,8 @@ bool r100_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp); | |||
67 | int r100_asic_reset(struct radeon_device *rdev); | 67 | int r100_asic_reset(struct radeon_device *rdev); |
68 | u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc); | 68 | u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc); |
69 | void r100_pci_gart_tlb_flush(struct radeon_device *rdev); | 69 | void r100_pci_gart_tlb_flush(struct radeon_device *rdev); |
70 | int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr); | 70 | void r100_pci_gart_set_page(struct radeon_device *rdev, unsigned i, |
71 | uint64_t addr); | ||
71 | void r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring); | 72 | void r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring); |
72 | int r100_irq_set(struct radeon_device *rdev); | 73 | int r100_irq_set(struct radeon_device *rdev); |
73 | int r100_irq_process(struct radeon_device *rdev); | 74 | int r100_irq_process(struct radeon_device *rdev); |
@@ -171,7 +172,8 @@ extern void r300_fence_ring_emit(struct radeon_device *rdev, | |||
171 | struct radeon_fence *fence); | 172 | struct radeon_fence *fence); |
172 | extern int r300_cs_parse(struct radeon_cs_parser *p); | 173 | extern int r300_cs_parse(struct radeon_cs_parser *p); |
173 | extern void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev); | 174 | extern void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev); |
174 | extern int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr); | 175 | extern void rv370_pcie_gart_set_page(struct radeon_device *rdev, unsigned i, |
176 | uint64_t addr); | ||
175 | extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes); | 177 | extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes); |
176 | extern int rv370_get_pcie_lanes(struct radeon_device *rdev); | 178 | extern int rv370_get_pcie_lanes(struct radeon_device *rdev); |
177 | extern void r300_set_reg_safe(struct radeon_device *rdev); | 179 | extern void r300_set_reg_safe(struct radeon_device *rdev); |
@@ -206,7 +208,8 @@ extern void rs400_fini(struct radeon_device *rdev); | |||
206 | extern int rs400_suspend(struct radeon_device *rdev); | 208 | extern int rs400_suspend(struct radeon_device *rdev); |
207 | extern int rs400_resume(struct radeon_device *rdev); | 209 | extern int rs400_resume(struct radeon_device *rdev); |
208 | void rs400_gart_tlb_flush(struct radeon_device *rdev); | 210 | void rs400_gart_tlb_flush(struct radeon_device *rdev); |
209 | int rs400_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr); | 211 | void rs400_gart_set_page(struct radeon_device *rdev, unsigned i, |
212 | uint64_t addr); | ||
210 | uint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg); | 213 | uint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg); |
211 | void rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); | 214 | void rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); |
212 | int rs400_gart_init(struct radeon_device *rdev); | 215 | int rs400_gart_init(struct radeon_device *rdev); |
@@ -229,7 +232,8 @@ int rs600_irq_process(struct radeon_device *rdev); | |||
229 | void rs600_irq_disable(struct radeon_device *rdev); | 232 | void rs600_irq_disable(struct radeon_device *rdev); |
230 | u32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc); | 233 | u32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc); |
231 | void rs600_gart_tlb_flush(struct radeon_device *rdev); | 234 | void rs600_gart_tlb_flush(struct radeon_device *rdev); |
232 | int rs600_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr); | 235 | void rs600_gart_set_page(struct radeon_device *rdev, unsigned i, |
236 | uint64_t addr); | ||
233 | uint32_t rs600_mc_rreg(struct radeon_device *rdev, uint32_t reg); | 237 | uint32_t rs600_mc_rreg(struct radeon_device *rdev, uint32_t reg); |
234 | void rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); | 238 | void rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); |
235 | void rs600_bandwidth_update(struct radeon_device *rdev); | 239 | void rs600_bandwidth_update(struct radeon_device *rdev); |
diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c index 9ab30976287d..6a03624fadaa 100644 --- a/drivers/gpu/drm/radeon/radeon_bios.c +++ b/drivers/gpu/drm/radeon/radeon_bios.c | |||
@@ -626,7 +626,7 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev) | |||
626 | vhdr->DeviceID != rdev->pdev->device) { | 626 | vhdr->DeviceID != rdev->pdev->device) { |
627 | DRM_INFO("ACPI VFCT table is not for this card\n"); | 627 | DRM_INFO("ACPI VFCT table is not for this card\n"); |
628 | goto out_unmap; | 628 | goto out_unmap; |
629 | }; | 629 | } |
630 | 630 | ||
631 | if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength > tbl_size) { | 631 | if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength > tbl_size) { |
632 | DRM_ERROR("ACPI VFCT image truncated\n"); | 632 | DRM_ERROR("ACPI VFCT image truncated\n"); |
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 4522f7dce653..933c5c39654d 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
@@ -101,6 +101,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector) | |||
101 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | 101 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
102 | struct radeon_connector_atom_dig *dig_connector; | 102 | struct radeon_connector_atom_dig *dig_connector; |
103 | int bpc = 8; | 103 | int bpc = 8; |
104 | int mode_clock, max_tmds_clock; | ||
104 | 105 | ||
105 | switch (connector->connector_type) { | 106 | switch (connector->connector_type) { |
106 | case DRM_MODE_CONNECTOR_DVII: | 107 | case DRM_MODE_CONNECTOR_DVII: |
@@ -166,6 +167,36 @@ int radeon_get_monitor_bpc(struct drm_connector *connector) | |||
166 | connector->name, bpc); | 167 | connector->name, bpc); |
167 | bpc = 12; | 168 | bpc = 12; |
168 | } | 169 | } |
170 | |||
171 | /* Any defined maximum tmds clock limit we must not exceed? */ | ||
172 | if (connector->max_tmds_clock > 0) { | ||
173 | /* mode_clock is clock in kHz for mode to be modeset on this connector */ | ||
174 | mode_clock = radeon_connector->pixelclock_for_modeset; | ||
175 | |||
176 | /* Maximum allowable input clock in kHz */ | ||
177 | max_tmds_clock = connector->max_tmds_clock * 1000; | ||
178 | |||
179 | DRM_DEBUG("%s: hdmi mode dotclock %d kHz, max tmds input clock %d kHz.\n", | ||
180 | connector->name, mode_clock, max_tmds_clock); | ||
181 | |||
182 | /* Check if bpc is within clock limit. Try to degrade gracefully otherwise */ | ||
183 | if ((bpc == 12) && (mode_clock * 3/2 > max_tmds_clock)) { | ||
184 | if ((connector->display_info.edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_30) && | ||
185 | (mode_clock * 5/4 <= max_tmds_clock)) | ||
186 | bpc = 10; | ||
187 | else | ||
188 | bpc = 8; | ||
189 | |||
190 | DRM_DEBUG("%s: HDMI deep color 12 bpc exceeds max tmds clock. Using %d bpc.\n", | ||
191 | connector->name, bpc); | ||
192 | } | ||
193 | |||
194 | if ((bpc == 10) && (mode_clock * 5/4 > max_tmds_clock)) { | ||
195 | bpc = 8; | ||
196 | DRM_DEBUG("%s: HDMI deep color 10 bpc exceeds max tmds clock. Using %d bpc.\n", | ||
197 | connector->name, bpc); | ||
198 | } | ||
199 | } | ||
169 | } | 200 | } |
170 | 201 | ||
171 | DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n", | 202 | DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n", |
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c index 41ecf8a60611..71a143461478 100644 --- a/drivers/gpu/drm/radeon/radeon_cs.c +++ b/drivers/gpu/drm/radeon/radeon_cs.c | |||
@@ -140,10 +140,10 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p) | |||
140 | if (p->ring == R600_RING_TYPE_UVD_INDEX && | 140 | if (p->ring == R600_RING_TYPE_UVD_INDEX && |
141 | (i == 0 || drm_pci_device_is_agp(p->rdev->ddev))) { | 141 | (i == 0 || drm_pci_device_is_agp(p->rdev->ddev))) { |
142 | /* TODO: is this still needed for NI+ ? */ | 142 | /* TODO: is this still needed for NI+ ? */ |
143 | p->relocs[i].domain = | 143 | p->relocs[i].prefered_domains = |
144 | RADEON_GEM_DOMAIN_VRAM; | 144 | RADEON_GEM_DOMAIN_VRAM; |
145 | 145 | ||
146 | p->relocs[i].alt_domain = | 146 | p->relocs[i].allowed_domains = |
147 | RADEON_GEM_DOMAIN_VRAM; | 147 | RADEON_GEM_DOMAIN_VRAM; |
148 | 148 | ||
149 | /* prioritize this over any other relocation */ | 149 | /* prioritize this over any other relocation */ |
@@ -158,10 +158,10 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p) | |||
158 | return -EINVAL; | 158 | return -EINVAL; |
159 | } | 159 | } |
160 | 160 | ||
161 | p->relocs[i].domain = domain; | 161 | p->relocs[i].prefered_domains = domain; |
162 | if (domain == RADEON_GEM_DOMAIN_VRAM) | 162 | if (domain == RADEON_GEM_DOMAIN_VRAM) |
163 | domain |= RADEON_GEM_DOMAIN_GTT; | 163 | domain |= RADEON_GEM_DOMAIN_GTT; |
164 | p->relocs[i].alt_domain = domain; | 164 | p->relocs[i].allowed_domains = domain; |
165 | } | 165 | } |
166 | 166 | ||
167 | p->relocs[i].tv.bo = &p->relocs[i].robj->tbo; | 167 | p->relocs[i].tv.bo = &p->relocs[i].robj->tbo; |
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 31565de1116c..03686fab842d 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -1052,6 +1052,43 @@ static void radeon_check_arguments(struct radeon_device *rdev) | |||
1052 | radeon_agpmode = 0; | 1052 | radeon_agpmode = 0; |
1053 | break; | 1053 | break; |
1054 | } | 1054 | } |
1055 | |||
1056 | if (!radeon_check_pot_argument(radeon_vm_size)) { | ||
1057 | dev_warn(rdev->dev, "VM size (%d) must be a power of 2\n", | ||
1058 | radeon_vm_size); | ||
1059 | radeon_vm_size = 4096; | ||
1060 | } | ||
1061 | |||
1062 | if (radeon_vm_size < 4) { | ||
1063 | dev_warn(rdev->dev, "VM size (%d) to small, min is 4MB\n", | ||
1064 | radeon_vm_size); | ||
1065 | radeon_vm_size = 4096; | ||
1066 | } | ||
1067 | |||
1068 | /* | ||
1069 | * Max GPUVM size for Cayman, SI and CI are 40 bits. | ||
1070 | */ | ||
1071 | if (radeon_vm_size > 1024*1024) { | ||
1072 | dev_warn(rdev->dev, "VM size (%d) to large, max is 1TB\n", | ||
1073 | radeon_vm_size); | ||
1074 | radeon_vm_size = 4096; | ||
1075 | } | ||
1076 | |||
1077 | /* defines number of bits in page table versus page directory, | ||
1078 | * a page is 4KB so we have 12 bits offset, minimum 9 bits in the | ||
1079 | * page table and the remaining bits are in the page directory */ | ||
1080 | if (radeon_vm_block_size < 9) { | ||
1081 | dev_warn(rdev->dev, "VM page table size (%d) to small\n", | ||
1082 | radeon_vm_block_size); | ||
1083 | radeon_vm_block_size = 9; | ||
1084 | } | ||
1085 | |||
1086 | if (radeon_vm_block_size > 24 || | ||
1087 | radeon_vm_size < (1ull << radeon_vm_block_size)) { | ||
1088 | dev_warn(rdev->dev, "VM page table size (%d) to large\n", | ||
1089 | radeon_vm_block_size); | ||
1090 | radeon_vm_block_size = 9; | ||
1091 | } | ||
1055 | } | 1092 | } |
1056 | 1093 | ||
1057 | /** | 1094 | /** |
@@ -1197,17 +1234,16 @@ int radeon_device_init(struct radeon_device *rdev, | |||
1197 | if (r) | 1234 | if (r) |
1198 | return r; | 1235 | return r; |
1199 | 1236 | ||
1237 | radeon_check_arguments(rdev); | ||
1200 | /* Adjust VM size here. | 1238 | /* Adjust VM size here. |
1201 | * Currently set to 4GB ((1 << 20) 4k pages). | 1239 | * Max GPUVM size for cayman+ is 40 bits. |
1202 | * Max GPUVM size for cayman and SI is 40 bits. | ||
1203 | */ | 1240 | */ |
1204 | rdev->vm_manager.max_pfn = 1 << 20; | 1241 | rdev->vm_manager.max_pfn = radeon_vm_size << 8; |
1205 | 1242 | ||
1206 | /* Set asic functions */ | 1243 | /* Set asic functions */ |
1207 | r = radeon_asic_init(rdev); | 1244 | r = radeon_asic_init(rdev); |
1208 | if (r) | 1245 | if (r) |
1209 | return r; | 1246 | return r; |
1210 | radeon_check_arguments(rdev); | ||
1211 | 1247 | ||
1212 | /* all of the newer IGP chips have an internal gart | 1248 | /* all of the newer IGP chips have an internal gart |
1213 | * However some rs4xx report as AGP, so remove that here. | 1249 | * However some rs4xx report as AGP, so remove that here. |
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index a4e725c6b8c8..5ed617056b9c 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c | |||
@@ -462,9 +462,6 @@ static void radeon_flip_work_func(struct work_struct *__work) | |||
462 | /* We borrow the event spin lock for protecting flip_work */ | 462 | /* We borrow the event spin lock for protecting flip_work */ |
463 | spin_lock_irqsave(&crtc->dev->event_lock, flags); | 463 | spin_lock_irqsave(&crtc->dev->event_lock, flags); |
464 | 464 | ||
465 | /* update crtc fb */ | ||
466 | crtc->primary->fb = fb; | ||
467 | |||
468 | /* set the proper interrupt */ | 465 | /* set the proper interrupt */ |
469 | radeon_irq_kms_pflip_irq_get(rdev, radeon_crtc->crtc_id); | 466 | radeon_irq_kms_pflip_irq_get(rdev, radeon_crtc->crtc_id); |
470 | 467 | ||
@@ -539,6 +536,9 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc, | |||
539 | } | 536 | } |
540 | radeon_crtc->flip_work = work; | 537 | radeon_crtc->flip_work = work; |
541 | 538 | ||
539 | /* update crtc fb */ | ||
540 | crtc->primary->fb = fb; | ||
541 | |||
542 | spin_unlock_irqrestore(&crtc->dev->event_lock, flags); | 542 | spin_unlock_irqrestore(&crtc->dev->event_lock, flags); |
543 | 543 | ||
544 | queue_work(radeon_crtc->flip_queue, &work->flip_work); | 544 | queue_work(radeon_crtc->flip_queue, &work->flip_work); |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 15447a4119f4..6e3017413386 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -81,9 +81,10 @@ | |||
81 | * 2.37.0 - allow GS ring setup on r6xx/r7xx | 81 | * 2.37.0 - allow GS ring setup on r6xx/r7xx |
82 | * 2.38.0 - RADEON_GEM_OP (GET_INITIAL_DOMAIN, SET_INITIAL_DOMAIN), | 82 | * 2.38.0 - RADEON_GEM_OP (GET_INITIAL_DOMAIN, SET_INITIAL_DOMAIN), |
83 | * CIK: 1D and linear tiling modes contain valid PIPE_CONFIG | 83 | * CIK: 1D and linear tiling modes contain valid PIPE_CONFIG |
84 | * 2.39.0 - Add INFO query for number of active CUs | ||
84 | */ | 85 | */ |
85 | #define KMS_DRIVER_MAJOR 2 | 86 | #define KMS_DRIVER_MAJOR 2 |
86 | #define KMS_DRIVER_MINOR 38 | 87 | #define KMS_DRIVER_MINOR 39 |
87 | #define KMS_DRIVER_PATCHLEVEL 0 | 88 | #define KMS_DRIVER_PATCHLEVEL 0 |
88 | int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); | 89 | int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); |
89 | int radeon_driver_unload_kms(struct drm_device *dev); | 90 | int radeon_driver_unload_kms(struct drm_device *dev); |
@@ -172,6 +173,8 @@ int radeon_dpm = -1; | |||
172 | int radeon_aspm = -1; | 173 | int radeon_aspm = -1; |
173 | int radeon_runtime_pm = -1; | 174 | int radeon_runtime_pm = -1; |
174 | int radeon_hard_reset = 0; | 175 | int radeon_hard_reset = 0; |
176 | int radeon_vm_size = 4096; | ||
177 | int radeon_vm_block_size = 9; | ||
175 | 178 | ||
176 | MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); | 179 | MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); |
177 | module_param_named(no_wb, radeon_no_wb, int, 0444); | 180 | module_param_named(no_wb, radeon_no_wb, int, 0444); |
@@ -239,6 +242,12 @@ module_param_named(runpm, radeon_runtime_pm, int, 0444); | |||
239 | MODULE_PARM_DESC(hard_reset, "PCI config reset (1 = force enable, 0 = disable (default))"); | 242 | MODULE_PARM_DESC(hard_reset, "PCI config reset (1 = force enable, 0 = disable (default))"); |
240 | module_param_named(hard_reset, radeon_hard_reset, int, 0444); | 243 | module_param_named(hard_reset, radeon_hard_reset, int, 0444); |
241 | 244 | ||
245 | MODULE_PARM_DESC(vm_size, "VM address space size in megabytes (default 4GB)"); | ||
246 | module_param_named(vm_size, radeon_vm_size, int, 0444); | ||
247 | |||
248 | MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default 9)"); | ||
249 | module_param_named(vm_block_size, radeon_vm_block_size, int, 0444); | ||
250 | |||
242 | static struct pci_device_id pciidlist[] = { | 251 | static struct pci_device_id pciidlist[] = { |
243 | radeon_PCI_IDS | 252 | radeon_PCI_IDS |
244 | }; | 253 | }; |
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c index a77b1c13ea43..913787085dfa 100644 --- a/drivers/gpu/drm/radeon/radeon_fence.c +++ b/drivers/gpu/drm/radeon/radeon_fence.c | |||
@@ -819,15 +819,35 @@ static int radeon_debugfs_fence_info(struct seq_file *m, void *data) | |||
819 | return 0; | 819 | return 0; |
820 | } | 820 | } |
821 | 821 | ||
822 | /** | ||
823 | * radeon_debugfs_gpu_reset - manually trigger a gpu reset | ||
824 | * | ||
825 | * Manually trigger a gpu reset at the next fence wait. | ||
826 | */ | ||
827 | static int radeon_debugfs_gpu_reset(struct seq_file *m, void *data) | ||
828 | { | ||
829 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
830 | struct drm_device *dev = node->minor->dev; | ||
831 | struct radeon_device *rdev = dev->dev_private; | ||
832 | |||
833 | down_read(&rdev->exclusive_lock); | ||
834 | seq_printf(m, "%d\n", rdev->needs_reset); | ||
835 | rdev->needs_reset = true; | ||
836 | up_read(&rdev->exclusive_lock); | ||
837 | |||
838 | return 0; | ||
839 | } | ||
840 | |||
822 | static struct drm_info_list radeon_debugfs_fence_list[] = { | 841 | static struct drm_info_list radeon_debugfs_fence_list[] = { |
823 | {"radeon_fence_info", &radeon_debugfs_fence_info, 0, NULL}, | 842 | {"radeon_fence_info", &radeon_debugfs_fence_info, 0, NULL}, |
843 | {"radeon_gpu_reset", &radeon_debugfs_gpu_reset, 0, NULL} | ||
824 | }; | 844 | }; |
825 | #endif | 845 | #endif |
826 | 846 | ||
827 | int radeon_debugfs_fence_init(struct radeon_device *rdev) | 847 | int radeon_debugfs_fence_init(struct radeon_device *rdev) |
828 | { | 848 | { |
829 | #if defined(CONFIG_DEBUG_FS) | 849 | #if defined(CONFIG_DEBUG_FS) |
830 | return radeon_debugfs_add_files(rdev, radeon_debugfs_fence_list, 1); | 850 | return radeon_debugfs_add_files(rdev, radeon_debugfs_fence_list, 2); |
831 | #else | 851 | #else |
832 | return 0; | 852 | return 0; |
833 | #endif | 853 | #endif |
diff --git a/drivers/gpu/drm/radeon/radeon_ioc32.c b/drivers/gpu/drm/radeon/radeon_ioc32.c index bdb0f93e73bc..0b98ea134579 100644 --- a/drivers/gpu/drm/radeon/radeon_ioc32.c +++ b/drivers/gpu/drm/radeon/radeon_ioc32.c | |||
@@ -399,7 +399,7 @@ long radeon_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
399 | if (nr < DRM_COMMAND_BASE) | 399 | if (nr < DRM_COMMAND_BASE) |
400 | return drm_compat_ioctl(filp, cmd, arg); | 400 | return drm_compat_ioctl(filp, cmd, arg); |
401 | 401 | ||
402 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(radeon_compat_ioctls)) | 402 | if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(radeon_compat_ioctls)) |
403 | fn = radeon_compat_ioctls[nr - DRM_COMMAND_BASE]; | 403 | fn = radeon_compat_ioctls[nr - DRM_COMMAND_BASE]; |
404 | 404 | ||
405 | if (fn != NULL) | 405 | if (fn != NULL) |
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index eaaedba04675..35d931881b4b 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
@@ -513,6 +513,22 @@ static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file | |||
513 | value_size = sizeof(uint64_t); | 513 | value_size = sizeof(uint64_t); |
514 | value64 = atomic64_read(&rdev->gtt_usage); | 514 | value64 = atomic64_read(&rdev->gtt_usage); |
515 | break; | 515 | break; |
516 | case RADEON_INFO_ACTIVE_CU_COUNT: | ||
517 | if (rdev->family >= CHIP_BONAIRE) | ||
518 | *value = rdev->config.cik.active_cus; | ||
519 | else if (rdev->family >= CHIP_TAHITI) | ||
520 | *value = rdev->config.si.active_cus; | ||
521 | else if (rdev->family >= CHIP_CAYMAN) | ||
522 | *value = rdev->config.cayman.active_simds; | ||
523 | else if (rdev->family >= CHIP_CEDAR) | ||
524 | *value = rdev->config.evergreen.active_simds; | ||
525 | else if (rdev->family >= CHIP_RV770) | ||
526 | *value = rdev->config.rv770.active_simds; | ||
527 | else if (rdev->family >= CHIP_R600) | ||
528 | *value = rdev->config.r600.active_simds; | ||
529 | else | ||
530 | *value = 1; | ||
531 | break; | ||
516 | default: | 532 | default: |
517 | DRM_DEBUG_KMS("Invalid request %d\n", info->request); | 533 | DRM_DEBUG_KMS("Invalid request %d\n", info->request); |
518 | return -EINVAL; | 534 | return -EINVAL; |
@@ -859,4 +875,4 @@ const struct drm_ioctl_desc radeon_ioctls_kms[] = { | |||
859 | DRM_IOCTL_DEF_DRV(RADEON_GEM_VA, radeon_gem_va_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), | 875 | DRM_IOCTL_DEF_DRV(RADEON_GEM_VA, radeon_gem_va_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), |
860 | DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), | 876 | DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), |
861 | }; | 877 | }; |
862 | int radeon_max_kms_ioctl = DRM_ARRAY_SIZE(radeon_ioctls_kms); | 878 | int radeon_max_kms_ioctl = ARRAY_SIZE(radeon_ioctls_kms); |
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h index ea72ad889a11..ad0e4b8cc7e3 100644 --- a/drivers/gpu/drm/radeon/radeon_mode.h +++ b/drivers/gpu/drm/radeon/radeon_mode.h | |||
@@ -506,6 +506,7 @@ struct radeon_connector { | |||
506 | struct radeon_i2c_chan *router_bus; | 506 | struct radeon_i2c_chan *router_bus; |
507 | enum radeon_connector_audio audio; | 507 | enum radeon_connector_audio audio; |
508 | enum radeon_connector_dither dither; | 508 | enum radeon_connector_dither dither; |
509 | int pixelclock_for_modeset; | ||
509 | }; | 510 | }; |
510 | 511 | ||
511 | struct radeon_framebuffer { | 512 | struct radeon_framebuffer { |
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index 2918087e572f..6c717b257d6d 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c | |||
@@ -446,7 +446,7 @@ int radeon_bo_list_validate(struct radeon_device *rdev, | |||
446 | list_for_each_entry(lobj, head, tv.head) { | 446 | list_for_each_entry(lobj, head, tv.head) { |
447 | bo = lobj->robj; | 447 | bo = lobj->robj; |
448 | if (!bo->pin_count) { | 448 | if (!bo->pin_count) { |
449 | u32 domain = lobj->domain; | 449 | u32 domain = lobj->prefered_domains; |
450 | u32 current_domain = | 450 | u32 current_domain = |
451 | radeon_mem_type_to_domain(bo->tbo.mem.mem_type); | 451 | radeon_mem_type_to_domain(bo->tbo.mem.mem_type); |
452 | 452 | ||
@@ -458,7 +458,7 @@ int radeon_bo_list_validate(struct radeon_device *rdev, | |||
458 | * into account. We don't want to disallow buffer moves | 458 | * into account. We don't want to disallow buffer moves |
459 | * completely. | 459 | * completely. |
460 | */ | 460 | */ |
461 | if ((lobj->alt_domain & current_domain) != 0 && | 461 | if ((lobj->allowed_domains & current_domain) != 0 && |
462 | (domain & current_domain) == 0 && /* will be moved */ | 462 | (domain & current_domain) == 0 && /* will be moved */ |
463 | bytes_moved > bytes_moved_threshold) { | 463 | bytes_moved > bytes_moved_threshold) { |
464 | /* don't move it */ | 464 | /* don't move it */ |
@@ -476,8 +476,9 @@ int radeon_bo_list_validate(struct radeon_device *rdev, | |||
476 | initial_bytes_moved; | 476 | initial_bytes_moved; |
477 | 477 | ||
478 | if (unlikely(r)) { | 478 | if (unlikely(r)) { |
479 | if (r != -ERESTARTSYS && domain != lobj->alt_domain) { | 479 | if (r != -ERESTARTSYS && |
480 | domain = lobj->alt_domain; | 480 | domain != lobj->allowed_domains) { |
481 | domain = lobj->allowed_domains; | ||
481 | goto retry; | 482 | goto retry; |
482 | } | 483 | } |
483 | ttm_eu_backoff_reservation(ticket, head); | 484 | ttm_eu_backoff_reservation(ticket, head); |
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c index 2bdae61c0ac0..12c663e86ca1 100644 --- a/drivers/gpu/drm/radeon/radeon_pm.c +++ b/drivers/gpu/drm/radeon/radeon_pm.c | |||
@@ -984,6 +984,8 @@ void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable) | |||
984 | if (enable) { | 984 | if (enable) { |
985 | mutex_lock(&rdev->pm.mutex); | 985 | mutex_lock(&rdev->pm.mutex); |
986 | rdev->pm.dpm.uvd_active = true; | 986 | rdev->pm.dpm.uvd_active = true; |
987 | /* disable this for now */ | ||
988 | #if 0 | ||
987 | if ((rdev->pm.dpm.sd == 1) && (rdev->pm.dpm.hd == 0)) | 989 | if ((rdev->pm.dpm.sd == 1) && (rdev->pm.dpm.hd == 0)) |
988 | dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_SD; | 990 | dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_SD; |
989 | else if ((rdev->pm.dpm.sd == 2) && (rdev->pm.dpm.hd == 0)) | 991 | else if ((rdev->pm.dpm.sd == 2) && (rdev->pm.dpm.hd == 0)) |
@@ -993,6 +995,7 @@ void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable) | |||
993 | else if ((rdev->pm.dpm.sd == 0) && (rdev->pm.dpm.hd == 2)) | 995 | else if ((rdev->pm.dpm.sd == 0) && (rdev->pm.dpm.hd == 2)) |
994 | dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_HD2; | 996 | dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_HD2; |
995 | else | 997 | else |
998 | #endif | ||
996 | dpm_state = POWER_STATE_TYPE_INTERNAL_UVD; | 999 | dpm_state = POWER_STATE_TYPE_INTERNAL_UVD; |
997 | rdev->pm.dpm.state = dpm_state; | 1000 | rdev->pm.dpm.state = dpm_state; |
998 | mutex_unlock(&rdev->pm.mutex); | 1001 | mutex_unlock(&rdev->pm.mutex); |
diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c index b576549fc783..23bb64fd775f 100644 --- a/drivers/gpu/drm/radeon/radeon_state.c +++ b/drivers/gpu/drm/radeon/radeon_state.c | |||
@@ -3258,4 +3258,4 @@ struct drm_ioctl_desc radeon_ioctls[] = { | |||
3258 | DRM_IOCTL_DEF_DRV(RADEON_CS, r600_cs_legacy_ioctl, DRM_AUTH) | 3258 | DRM_IOCTL_DEF_DRV(RADEON_CS, r600_cs_legacy_ioctl, DRM_AUTH) |
3259 | }; | 3259 | }; |
3260 | 3260 | ||
3261 | int radeon_max_ioctl = DRM_ARRAY_SIZE(radeon_ioctls); | 3261 | int radeon_max_ioctl = ARRAY_SIZE(radeon_ioctls); |
diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c index 1b65ae2433cd..a4ad270e8261 100644 --- a/drivers/gpu/drm/radeon/radeon_uvd.c +++ b/drivers/gpu/drm/radeon/radeon_uvd.c | |||
@@ -812,7 +812,8 @@ void radeon_uvd_note_usage(struct radeon_device *rdev) | |||
812 | (rdev->pm.dpm.hd != hd)) { | 812 | (rdev->pm.dpm.hd != hd)) { |
813 | rdev->pm.dpm.sd = sd; | 813 | rdev->pm.dpm.sd = sd; |
814 | rdev->pm.dpm.hd = hd; | 814 | rdev->pm.dpm.hd = hd; |
815 | streams_changed = true; | 815 | /* disable this for now */ |
816 | /*streams_changed = true;*/ | ||
816 | } | 817 | } |
817 | } | 818 | } |
818 | 819 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c index 3971d968af6c..aa21c31a846c 100644 --- a/drivers/gpu/drm/radeon/radeon_vce.c +++ b/drivers/gpu/drm/radeon/radeon_vce.c | |||
@@ -66,6 +66,7 @@ int radeon_vce_init(struct radeon_device *rdev) | |||
66 | case CHIP_BONAIRE: | 66 | case CHIP_BONAIRE: |
67 | case CHIP_KAVERI: | 67 | case CHIP_KAVERI: |
68 | case CHIP_KABINI: | 68 | case CHIP_KABINI: |
69 | case CHIP_HAWAII: | ||
69 | case CHIP_MULLINS: | 70 | case CHIP_MULLINS: |
70 | fw_name = FIRMWARE_BONAIRE; | 71 | fw_name = FIRMWARE_BONAIRE; |
71 | break; | 72 | break; |
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index a72e9c81805d..899d9126cad6 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c | |||
@@ -59,7 +59,7 @@ | |||
59 | */ | 59 | */ |
60 | static unsigned radeon_vm_num_pdes(struct radeon_device *rdev) | 60 | static unsigned radeon_vm_num_pdes(struct radeon_device *rdev) |
61 | { | 61 | { |
62 | return rdev->vm_manager.max_pfn >> RADEON_VM_BLOCK_SIZE; | 62 | return rdev->vm_manager.max_pfn >> radeon_vm_block_size; |
63 | } | 63 | } |
64 | 64 | ||
65 | /** | 65 | /** |
@@ -140,8 +140,8 @@ struct radeon_cs_reloc *radeon_vm_get_bos(struct radeon_device *rdev, | |||
140 | /* add the vm page table to the list */ | 140 | /* add the vm page table to the list */ |
141 | list[0].gobj = NULL; | 141 | list[0].gobj = NULL; |
142 | list[0].robj = vm->page_directory; | 142 | list[0].robj = vm->page_directory; |
143 | list[0].domain = RADEON_GEM_DOMAIN_VRAM; | 143 | list[0].prefered_domains = RADEON_GEM_DOMAIN_VRAM; |
144 | list[0].alt_domain = RADEON_GEM_DOMAIN_VRAM; | 144 | list[0].allowed_domains = RADEON_GEM_DOMAIN_VRAM; |
145 | list[0].tv.bo = &vm->page_directory->tbo; | 145 | list[0].tv.bo = &vm->page_directory->tbo; |
146 | list[0].tiling_flags = 0; | 146 | list[0].tiling_flags = 0; |
147 | list[0].handle = 0; | 147 | list[0].handle = 0; |
@@ -153,8 +153,8 @@ struct radeon_cs_reloc *radeon_vm_get_bos(struct radeon_device *rdev, | |||
153 | 153 | ||
154 | list[idx].gobj = NULL; | 154 | list[idx].gobj = NULL; |
155 | list[idx].robj = vm->page_tables[i].bo; | 155 | list[idx].robj = vm->page_tables[i].bo; |
156 | list[idx].domain = RADEON_GEM_DOMAIN_VRAM; | 156 | list[idx].prefered_domains = RADEON_GEM_DOMAIN_VRAM; |
157 | list[idx].alt_domain = RADEON_GEM_DOMAIN_VRAM; | 157 | list[idx].allowed_domains = RADEON_GEM_DOMAIN_VRAM; |
158 | list[idx].tv.bo = &list[idx].robj->tbo; | 158 | list[idx].tv.bo = &list[idx].robj->tbo; |
159 | list[idx].tiling_flags = 0; | 159 | list[idx].tiling_flags = 0; |
160 | list[idx].handle = 0; | 160 | list[idx].handle = 0; |
@@ -474,8 +474,10 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, | |||
474 | bo_va->valid = false; | 474 | bo_va->valid = false; |
475 | list_move(&bo_va->vm_list, head); | 475 | list_move(&bo_va->vm_list, head); |
476 | 476 | ||
477 | soffset = (soffset / RADEON_GPU_PAGE_SIZE) >> RADEON_VM_BLOCK_SIZE; | 477 | soffset = (soffset / RADEON_GPU_PAGE_SIZE) >> radeon_vm_block_size; |
478 | eoffset = (eoffset / RADEON_GPU_PAGE_SIZE) >> RADEON_VM_BLOCK_SIZE; | 478 | eoffset = (eoffset / RADEON_GPU_PAGE_SIZE) >> radeon_vm_block_size; |
479 | |||
480 | BUG_ON(eoffset >= radeon_vm_num_pdes(rdev)); | ||
479 | 481 | ||
480 | if (eoffset > vm->max_pde_used) | 482 | if (eoffset > vm->max_pde_used) |
481 | vm->max_pde_used = eoffset; | 483 | vm->max_pde_used = eoffset; |
@@ -583,10 +585,9 @@ static uint32_t radeon_vm_page_flags(uint32_t flags) | |||
583 | int radeon_vm_update_page_directory(struct radeon_device *rdev, | 585 | int radeon_vm_update_page_directory(struct radeon_device *rdev, |
584 | struct radeon_vm *vm) | 586 | struct radeon_vm *vm) |
585 | { | 587 | { |
586 | static const uint32_t incr = RADEON_VM_PTE_COUNT * 8; | ||
587 | |||
588 | struct radeon_bo *pd = vm->page_directory; | 588 | struct radeon_bo *pd = vm->page_directory; |
589 | uint64_t pd_addr = radeon_bo_gpu_offset(pd); | 589 | uint64_t pd_addr = radeon_bo_gpu_offset(pd); |
590 | uint32_t incr = RADEON_VM_PTE_COUNT * 8; | ||
590 | uint64_t last_pde = ~0, last_pt = ~0; | 591 | uint64_t last_pde = ~0, last_pt = ~0; |
591 | unsigned count = 0, pt_idx, ndw; | 592 | unsigned count = 0, pt_idx, ndw; |
592 | struct radeon_ib ib; | 593 | struct radeon_ib ib; |
@@ -757,8 +758,7 @@ static void radeon_vm_update_ptes(struct radeon_device *rdev, | |||
757 | uint64_t start, uint64_t end, | 758 | uint64_t start, uint64_t end, |
758 | uint64_t dst, uint32_t flags) | 759 | uint64_t dst, uint32_t flags) |
759 | { | 760 | { |
760 | static const uint64_t mask = RADEON_VM_PTE_COUNT - 1; | 761 | uint64_t mask = RADEON_VM_PTE_COUNT - 1; |
761 | |||
762 | uint64_t last_pte = ~0, last_dst = ~0; | 762 | uint64_t last_pte = ~0, last_dst = ~0; |
763 | unsigned count = 0; | 763 | unsigned count = 0; |
764 | uint64_t addr; | 764 | uint64_t addr; |
@@ -768,7 +768,7 @@ static void radeon_vm_update_ptes(struct radeon_device *rdev, | |||
768 | 768 | ||
769 | /* walk over the address space and update the page tables */ | 769 | /* walk over the address space and update the page tables */ |
770 | for (addr = start; addr < end; ) { | 770 | for (addr = start; addr < end; ) { |
771 | uint64_t pt_idx = addr >> RADEON_VM_BLOCK_SIZE; | 771 | uint64_t pt_idx = addr >> radeon_vm_block_size; |
772 | struct radeon_bo *pt = vm->page_tables[pt_idx].bo; | 772 | struct radeon_bo *pt = vm->page_tables[pt_idx].bo; |
773 | unsigned nptes; | 773 | unsigned nptes; |
774 | uint64_t pte; | 774 | uint64_t pte; |
@@ -873,13 +873,13 @@ int radeon_vm_bo_update(struct radeon_device *rdev, | |||
873 | /* padding, etc. */ | 873 | /* padding, etc. */ |
874 | ndw = 64; | 874 | ndw = 64; |
875 | 875 | ||
876 | if (RADEON_VM_BLOCK_SIZE > 11) | 876 | if (radeon_vm_block_size > 11) |
877 | /* reserve space for one header for every 2k dwords */ | 877 | /* reserve space for one header for every 2k dwords */ |
878 | ndw += (nptes >> 11) * 4; | 878 | ndw += (nptes >> 11) * 4; |
879 | else | 879 | else |
880 | /* reserve space for one header for | 880 | /* reserve space for one header for |
881 | every (1 << BLOCK_SIZE) entries */ | 881 | every (1 << BLOCK_SIZE) entries */ |
882 | ndw += (nptes >> RADEON_VM_BLOCK_SIZE) * 4; | 882 | ndw += (nptes >> radeon_vm_block_size) * 4; |
883 | 883 | ||
884 | /* reserve space for pte addresses */ | 884 | /* reserve space for pte addresses */ |
885 | ndw += nptes * 2; | 885 | ndw += nptes * 2; |
diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c index 130d5cc50d43..a0f96decece3 100644 --- a/drivers/gpu/drm/radeon/rs400.c +++ b/drivers/gpu/drm/radeon/rs400.c | |||
@@ -212,21 +212,16 @@ void rs400_gart_fini(struct radeon_device *rdev) | |||
212 | #define RS400_PTE_WRITEABLE (1 << 2) | 212 | #define RS400_PTE_WRITEABLE (1 << 2) |
213 | #define RS400_PTE_READABLE (1 << 3) | 213 | #define RS400_PTE_READABLE (1 << 3) |
214 | 214 | ||
215 | int rs400_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr) | 215 | void rs400_gart_set_page(struct radeon_device *rdev, unsigned i, uint64_t addr) |
216 | { | 216 | { |
217 | uint32_t entry; | 217 | uint32_t entry; |
218 | u32 *gtt = rdev->gart.ptr; | 218 | u32 *gtt = rdev->gart.ptr; |
219 | 219 | ||
220 | if (i < 0 || i > rdev->gart.num_gpu_pages) { | ||
221 | return -EINVAL; | ||
222 | } | ||
223 | |||
224 | entry = (lower_32_bits(addr) & PAGE_MASK) | | 220 | entry = (lower_32_bits(addr) & PAGE_MASK) | |
225 | ((upper_32_bits(addr) & 0xff) << 4) | | 221 | ((upper_32_bits(addr) & 0xff) << 4) | |
226 | RS400_PTE_WRITEABLE | RS400_PTE_READABLE; | 222 | RS400_PTE_WRITEABLE | RS400_PTE_READABLE; |
227 | entry = cpu_to_le32(entry); | 223 | entry = cpu_to_le32(entry); |
228 | gtt[i] = entry; | 224 | gtt[i] = entry; |
229 | return 0; | ||
230 | } | 225 | } |
231 | 226 | ||
232 | int rs400_mc_wait_for_idle(struct radeon_device *rdev) | 227 | int rs400_mc_wait_for_idle(struct radeon_device *rdev) |
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c index 0a8be63926d8..d1a35cb1c91d 100644 --- a/drivers/gpu/drm/radeon/rs600.c +++ b/drivers/gpu/drm/radeon/rs600.c | |||
@@ -626,17 +626,16 @@ static void rs600_gart_fini(struct radeon_device *rdev) | |||
626 | radeon_gart_table_vram_free(rdev); | 626 | radeon_gart_table_vram_free(rdev); |
627 | } | 627 | } |
628 | 628 | ||
629 | int rs600_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr) | 629 | void rs600_gart_set_page(struct radeon_device *rdev, unsigned i, uint64_t addr) |
630 | { | 630 | { |
631 | void __iomem *ptr = (void *)rdev->gart.ptr; | 631 | void __iomem *ptr = (void *)rdev->gart.ptr; |
632 | 632 | ||
633 | if (i < 0 || i > rdev->gart.num_gpu_pages) { | ||
634 | return -EINVAL; | ||
635 | } | ||
636 | addr = addr & 0xFFFFFFFFFFFFF000ULL; | 633 | addr = addr & 0xFFFFFFFFFFFFF000ULL; |
637 | addr |= R600_PTE_GART; | 634 | if (addr == rdev->dummy_page.addr) |
635 | addr |= R600_PTE_SYSTEM | R600_PTE_SNOOPED; | ||
636 | else | ||
637 | addr |= R600_PTE_GART; | ||
638 | writeq(addr, ptr + (i * 8)); | 638 | writeq(addr, ptr + (i * 8)); |
639 | return 0; | ||
640 | } | 639 | } |
641 | 640 | ||
642 | int rs600_irq_set(struct radeon_device *rdev) | 641 | int rs600_irq_set(struct radeon_device *rdev) |
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 97b776666b75..da8703d8d455 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
@@ -1327,6 +1327,9 @@ static void rv770_gpu_init(struct radeon_device *rdev) | |||
1327 | if (tmp < rdev->config.rv770.max_simds) { | 1327 | if (tmp < rdev->config.rv770.max_simds) { |
1328 | rdev->config.rv770.max_simds = tmp; | 1328 | rdev->config.rv770.max_simds = tmp; |
1329 | } | 1329 | } |
1330 | tmp = rdev->config.rv770.max_simds - | ||
1331 | r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R7XX_MAX_SIMDS_MASK); | ||
1332 | rdev->config.rv770.active_simds = tmp; | ||
1330 | 1333 | ||
1331 | switch (rdev->config.rv770.max_tile_pipes) { | 1334 | switch (rdev->config.rv770.max_tile_pipes) { |
1332 | case 1: | 1335 | case 1: |
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index d64ef9115b69..730cee2c34cf 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -71,6 +71,7 @@ MODULE_FIRMWARE("radeon/HAINAN_mc2.bin"); | |||
71 | MODULE_FIRMWARE("radeon/HAINAN_rlc.bin"); | 71 | MODULE_FIRMWARE("radeon/HAINAN_rlc.bin"); |
72 | MODULE_FIRMWARE("radeon/HAINAN_smc.bin"); | 72 | MODULE_FIRMWARE("radeon/HAINAN_smc.bin"); |
73 | 73 | ||
74 | static u32 si_get_cu_active_bitmap(struct radeon_device *rdev, u32 se, u32 sh); | ||
74 | static void si_pcie_gen3_enable(struct radeon_device *rdev); | 75 | static void si_pcie_gen3_enable(struct radeon_device *rdev); |
75 | static void si_program_aspm(struct radeon_device *rdev); | 76 | static void si_program_aspm(struct radeon_device *rdev); |
76 | extern void sumo_rlc_fini(struct radeon_device *rdev); | 77 | extern void sumo_rlc_fini(struct radeon_device *rdev); |
@@ -2900,7 +2901,7 @@ static void si_gpu_init(struct radeon_device *rdev) | |||
2900 | u32 sx_debug_1; | 2901 | u32 sx_debug_1; |
2901 | u32 hdp_host_path_cntl; | 2902 | u32 hdp_host_path_cntl; |
2902 | u32 tmp; | 2903 | u32 tmp; |
2903 | int i, j; | 2904 | int i, j, k; |
2904 | 2905 | ||
2905 | switch (rdev->family) { | 2906 | switch (rdev->family) { |
2906 | case CHIP_TAHITI: | 2907 | case CHIP_TAHITI: |
@@ -3098,6 +3099,14 @@ static void si_gpu_init(struct radeon_device *rdev) | |||
3098 | rdev->config.si.max_sh_per_se, | 3099 | rdev->config.si.max_sh_per_se, |
3099 | rdev->config.si.max_cu_per_sh); | 3100 | rdev->config.si.max_cu_per_sh); |
3100 | 3101 | ||
3102 | for (i = 0; i < rdev->config.si.max_shader_engines; i++) { | ||
3103 | for (j = 0; j < rdev->config.si.max_sh_per_se; j++) { | ||
3104 | for (k = 0; k < rdev->config.si.max_cu_per_sh; k++) { | ||
3105 | rdev->config.si.active_cus += | ||
3106 | hweight32(si_get_cu_active_bitmap(rdev, i, j)); | ||
3107 | } | ||
3108 | } | ||
3109 | } | ||
3101 | 3110 | ||
3102 | /* set HW defaults for 3D engine */ | 3111 | /* set HW defaults for 3D engine */ |
3103 | WREG32(CP_QUEUE_THRESHOLDS, (ROQ_IB1_START(0x16) | | 3112 | WREG32(CP_QUEUE_THRESHOLDS, (ROQ_IB1_START(0x16) | |
@@ -3186,7 +3195,7 @@ void si_fence_ring_emit(struct radeon_device *rdev, | |||
3186 | /* EVENT_WRITE_EOP - flush caches, send int */ | 3195 | /* EVENT_WRITE_EOP - flush caches, send int */ |
3187 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); | 3196 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); |
3188 | radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5)); | 3197 | radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5)); |
3189 | radeon_ring_write(ring, addr & 0xffffffff); | 3198 | radeon_ring_write(ring, lower_32_bits(addr)); |
3190 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); | 3199 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); |
3191 | radeon_ring_write(ring, fence->seq); | 3200 | radeon_ring_write(ring, fence->seq); |
3192 | radeon_ring_write(ring, 0); | 3201 | radeon_ring_write(ring, 0); |
@@ -3219,7 +3228,7 @@ void si_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib) | |||
3219 | radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); | 3228 | radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); |
3220 | radeon_ring_write(ring, (1 << 8)); | 3229 | radeon_ring_write(ring, (1 << 8)); |
3221 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); | 3230 | radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc); |
3222 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr) & 0xffffffff); | 3231 | radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr)); |
3223 | radeon_ring_write(ring, next_rptr); | 3232 | radeon_ring_write(ring, next_rptr); |
3224 | } | 3233 | } |
3225 | 3234 | ||
@@ -4095,7 +4104,7 @@ static int si_pcie_gart_enable(struct radeon_device *rdev) | |||
4095 | (u32)(rdev->dummy_page.addr >> 12)); | 4104 | (u32)(rdev->dummy_page.addr >> 12)); |
4096 | WREG32(VM_CONTEXT1_CNTL2, 4); | 4105 | WREG32(VM_CONTEXT1_CNTL2, 4); |
4097 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | | 4106 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | |
4098 | PAGE_TABLE_BLOCK_SIZE(RADEON_VM_BLOCK_SIZE - 9) | | 4107 | PAGE_TABLE_BLOCK_SIZE(radeon_vm_block_size - 9) | |
4099 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 4108 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
4100 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | | 4109 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | |
4101 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 4110 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
diff --git a/drivers/gpu/drm/radeon/si_dma.c b/drivers/gpu/drm/radeon/si_dma.c index 9a660f861d2c..e24c94b6d14d 100644 --- a/drivers/gpu/drm/radeon/si_dma.c +++ b/drivers/gpu/drm/radeon/si_dma.c | |||
@@ -88,8 +88,8 @@ void si_dma_vm_set_page(struct radeon_device *rdev, | |||
88 | 88 | ||
89 | ib->ptr[ib->length_dw++] = DMA_PACKET(DMA_PACKET_COPY, | 89 | ib->ptr[ib->length_dw++] = DMA_PACKET(DMA_PACKET_COPY, |
90 | 1, 0, 0, bytes); | 90 | 1, 0, 0, bytes); |
91 | ib->ptr[ib->length_dw++] = pe & 0xffffffff; | 91 | ib->ptr[ib->length_dw++] = lower_32_bits(pe); |
92 | ib->ptr[ib->length_dw++] = src & 0xffffffff; | 92 | ib->ptr[ib->length_dw++] = lower_32_bits(src); |
93 | ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; | 93 | ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff; |
94 | ib->ptr[ib->length_dw++] = upper_32_bits(src) & 0xff; | 94 | ib->ptr[ib->length_dw++] = upper_32_bits(src) & 0xff; |
95 | 95 | ||
@@ -220,8 +220,8 @@ int si_copy_dma(struct radeon_device *rdev, | |||
220 | cur_size_in_bytes = 0xFFFFF; | 220 | cur_size_in_bytes = 0xFFFFF; |
221 | size_in_bytes -= cur_size_in_bytes; | 221 | size_in_bytes -= cur_size_in_bytes; |
222 | radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 1, 0, 0, cur_size_in_bytes)); | 222 | radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 1, 0, 0, cur_size_in_bytes)); |
223 | radeon_ring_write(ring, dst_offset & 0xffffffff); | 223 | radeon_ring_write(ring, lower_32_bits(dst_offset)); |
224 | radeon_ring_write(ring, src_offset & 0xffffffff); | 224 | radeon_ring_write(ring, lower_32_bits(src_offset)); |
225 | radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff); | 225 | radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff); |
226 | radeon_ring_write(ring, upper_32_bits(src_offset) & 0xff); | 226 | radeon_ring_write(ring, upper_32_bits(src_offset) & 0xff); |
227 | src_offset += cur_size_in_bytes; | 227 | src_offset += cur_size_in_bytes; |
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c index 9a3567bedaae..58918868f894 100644 --- a/drivers/gpu/drm/radeon/si_dpm.c +++ b/drivers/gpu/drm/radeon/si_dpm.c | |||
@@ -1948,6 +1948,10 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) | |||
1948 | si_pi->cac_weights = cac_weights_cape_verde_pro; | 1948 | si_pi->cac_weights = cac_weights_cape_verde_pro; |
1949 | si_pi->dte_data = dte_data_cape_verde; | 1949 | si_pi->dte_data = dte_data_cape_verde; |
1950 | break; | 1950 | break; |
1951 | case 0x682C: | ||
1952 | si_pi->cac_weights = cac_weights_cape_verde_pro; | ||
1953 | si_pi->dte_data = dte_data_sun_xt; | ||
1954 | break; | ||
1951 | case 0x6825: | 1955 | case 0x6825: |
1952 | case 0x6827: | 1956 | case 0x6827: |
1953 | si_pi->cac_weights = cac_weights_heathrow; | 1957 | si_pi->cac_weights = cac_weights_heathrow; |
@@ -1971,10 +1975,9 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) | |||
1971 | si_pi->dte_data = dte_data_venus_xt; | 1975 | si_pi->dte_data = dte_data_venus_xt; |
1972 | break; | 1976 | break; |
1973 | case 0x6823: | 1977 | case 0x6823: |
1974 | si_pi->cac_weights = cac_weights_chelsea_pro; | ||
1975 | si_pi->dte_data = dte_data_venus_pro; | ||
1976 | break; | ||
1977 | case 0x682B: | 1978 | case 0x682B: |
1979 | case 0x6822: | ||
1980 | case 0x682A: | ||
1978 | si_pi->cac_weights = cac_weights_chelsea_pro; | 1981 | si_pi->cac_weights = cac_weights_chelsea_pro; |
1979 | si_pi->dte_data = dte_data_venus_pro; | 1982 | si_pi->dte_data = dte_data_venus_pro; |
1980 | break; | 1983 | break; |
@@ -1988,6 +1991,7 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) | |||
1988 | case 0x6601: | 1991 | case 0x6601: |
1989 | case 0x6621: | 1992 | case 0x6621: |
1990 | case 0x6603: | 1993 | case 0x6603: |
1994 | case 0x6605: | ||
1991 | si_pi->cac_weights = cac_weights_mars_pro; | 1995 | si_pi->cac_weights = cac_weights_mars_pro; |
1992 | si_pi->lcac_config = lcac_mars_pro; | 1996 | si_pi->lcac_config = lcac_mars_pro; |
1993 | si_pi->cac_override = cac_override_oland; | 1997 | si_pi->cac_override = cac_override_oland; |
@@ -1998,6 +2002,7 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) | |||
1998 | case 0x6600: | 2002 | case 0x6600: |
1999 | case 0x6606: | 2003 | case 0x6606: |
2000 | case 0x6620: | 2004 | case 0x6620: |
2005 | case 0x6604: | ||
2001 | si_pi->cac_weights = cac_weights_mars_xt; | 2006 | si_pi->cac_weights = cac_weights_mars_xt; |
2002 | si_pi->lcac_config = lcac_mars_pro; | 2007 | si_pi->lcac_config = lcac_mars_pro; |
2003 | si_pi->cac_override = cac_override_oland; | 2008 | si_pi->cac_override = cac_override_oland; |
@@ -2006,6 +2011,8 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) | |||
2006 | update_dte_from_pl2 = true; | 2011 | update_dte_from_pl2 = true; |
2007 | break; | 2012 | break; |
2008 | case 0x6611: | 2013 | case 0x6611: |
2014 | case 0x6613: | ||
2015 | case 0x6608: | ||
2009 | si_pi->cac_weights = cac_weights_oland_pro; | 2016 | si_pi->cac_weights = cac_weights_oland_pro; |
2010 | si_pi->lcac_config = lcac_mars_pro; | 2017 | si_pi->lcac_config = lcac_mars_pro; |
2011 | si_pi->cac_override = cac_override_oland; | 2018 | si_pi->cac_override = cac_override_oland; |
diff --git a/drivers/gpu/drm/radeon/uvd_v2_2.c b/drivers/gpu/drm/radeon/uvd_v2_2.c index d1771004cb52..8bfdadd56598 100644 --- a/drivers/gpu/drm/radeon/uvd_v2_2.c +++ b/drivers/gpu/drm/radeon/uvd_v2_2.c | |||
@@ -45,7 +45,7 @@ void uvd_v2_2_fence_emit(struct radeon_device *rdev, | |||
45 | radeon_ring_write(ring, PACKET0(UVD_CONTEXT_ID, 0)); | 45 | radeon_ring_write(ring, PACKET0(UVD_CONTEXT_ID, 0)); |
46 | radeon_ring_write(ring, fence->seq); | 46 | radeon_ring_write(ring, fence->seq); |
47 | radeon_ring_write(ring, PACKET0(UVD_GPCOM_VCPU_DATA0, 0)); | 47 | radeon_ring_write(ring, PACKET0(UVD_GPCOM_VCPU_DATA0, 0)); |
48 | radeon_ring_write(ring, addr & 0xffffffff); | 48 | radeon_ring_write(ring, lower_32_bits(addr)); |
49 | radeon_ring_write(ring, PACKET0(UVD_GPCOM_VCPU_DATA1, 0)); | 49 | radeon_ring_write(ring, PACKET0(UVD_GPCOM_VCPU_DATA1, 0)); |
50 | radeon_ring_write(ring, upper_32_bits(addr) & 0xff); | 50 | radeon_ring_write(ring, upper_32_bits(addr) & 0xff); |
51 | radeon_ring_write(ring, PACKET0(UVD_GPCOM_VCPU_CMD, 0)); | 51 | radeon_ring_write(ring, PACKET0(UVD_GPCOM_VCPU_CMD, 0)); |
diff --git a/drivers/gpu/drm/savage/savage_bci.c b/drivers/gpu/drm/savage/savage_bci.c index d2b2df9e26f3..c97cdc9ab239 100644 --- a/drivers/gpu/drm/savage/savage_bci.c +++ b/drivers/gpu/drm/savage/savage_bci.c | |||
@@ -1079,4 +1079,4 @@ const struct drm_ioctl_desc savage_ioctls[] = { | |||
1079 | DRM_IOCTL_DEF_DRV(SAVAGE_BCI_EVENT_WAIT, savage_bci_event_wait, DRM_AUTH), | 1079 | DRM_IOCTL_DEF_DRV(SAVAGE_BCI_EVENT_WAIT, savage_bci_event_wait, DRM_AUTH), |
1080 | }; | 1080 | }; |
1081 | 1081 | ||
1082 | int savage_max_ioctl = DRM_ARRAY_SIZE(savage_ioctls); | 1082 | int savage_max_ioctl = ARRAY_SIZE(savage_ioctls); |
diff --git a/drivers/gpu/drm/sis/sis_mm.c b/drivers/gpu/drm/sis/sis_mm.c index 0573be0d2933..77f288e4a0a6 100644 --- a/drivers/gpu/drm/sis/sis_mm.c +++ b/drivers/gpu/drm/sis/sis_mm.c | |||
@@ -359,4 +359,4 @@ const struct drm_ioctl_desc sis_ioctls[] = { | |||
359 | DRM_IOCTL_DEF_DRV(SIS_FB_INIT, sis_fb_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY), | 359 | DRM_IOCTL_DEF_DRV(SIS_FB_INIT, sis_fb_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY), |
360 | }; | 360 | }; |
361 | 361 | ||
362 | int sis_max_ioctl = DRM_ARRAY_SIZE(sis_ioctls); | 362 | int sis_max_ioctl = ARRAY_SIZE(sis_ioctls); |
diff --git a/drivers/gpu/drm/via/via_dma.c b/drivers/gpu/drm/via/via_dma.c index a18479c6b6da..6fc0648dd37f 100644 --- a/drivers/gpu/drm/via/via_dma.c +++ b/drivers/gpu/drm/via/via_dma.c | |||
@@ -737,4 +737,4 @@ const struct drm_ioctl_desc via_ioctls[] = { | |||
737 | DRM_IOCTL_DEF_DRV(VIA_BLIT_SYNC, via_dma_blit_sync, DRM_AUTH) | 737 | DRM_IOCTL_DEF_DRV(VIA_BLIT_SYNC, via_dma_blit_sync, DRM_AUTH) |
738 | }; | 738 | }; |
739 | 739 | ||
740 | int via_max_ioctl = DRM_ARRAY_SIZE(via_ioctls); | 740 | int via_max_ioctl = ARRAY_SIZE(via_ioctls); |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index 6bdd15eea7e8..246a62bab378 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |||
@@ -1417,7 +1417,7 @@ static struct drm_driver driver = { | |||
1417 | .enable_vblank = vmw_enable_vblank, | 1417 | .enable_vblank = vmw_enable_vblank, |
1418 | .disable_vblank = vmw_disable_vblank, | 1418 | .disable_vblank = vmw_disable_vblank, |
1419 | .ioctls = vmw_ioctls, | 1419 | .ioctls = vmw_ioctls, |
1420 | .num_ioctls = DRM_ARRAY_SIZE(vmw_ioctls), | 1420 | .num_ioctls = ARRAY_SIZE(vmw_ioctls), |
1421 | .master_create = vmw_master_create, | 1421 | .master_create = vmw_master_create, |
1422 | .master_destroy = vmw_master_destroy, | 1422 | .master_destroy = vmw_master_destroy, |
1423 | .master_set = vmw_master_set, | 1423 | .master_set = vmw_master_set, |
diff --git a/drivers/gpu/ipu-v3/Kconfig b/drivers/gpu/ipu-v3/Kconfig new file mode 100644 index 000000000000..2f228a2f2a48 --- /dev/null +++ b/drivers/gpu/ipu-v3/Kconfig | |||
@@ -0,0 +1,7 @@ | |||
1 | config IMX_IPUV3_CORE | ||
2 | tristate "IPUv3 core support" | ||
3 | depends on SOC_IMX5 || SOC_IMX6Q || SOC_IMX6SL || ARCH_MULTIPLATFORM | ||
4 | depends on RESET_CONTROLLER | ||
5 | help | ||
6 | Choose this if you have a i.MX5/6 system and want to use the Image | ||
7 | Processing Unit. This option only enables IPU base support. | ||
diff --git a/drivers/staging/imx-drm/ipu-v3/Makefile b/drivers/gpu/ipu-v3/Makefile index 28ed72e98a96..1887972b4ac2 100644 --- a/drivers/staging/imx-drm/ipu-v3/Makefile +++ b/drivers/gpu/ipu-v3/Makefile | |||
@@ -1,3 +1,3 @@ | |||
1 | obj-$(CONFIG_DRM_IMX_IPUV3_CORE) += imx-ipu-v3.o | 1 | obj-$(CONFIG_IMX_IPUV3_CORE) += imx-ipu-v3.o |
2 | 2 | ||
3 | imx-ipu-v3-objs := ipu-common.o ipu-dc.o ipu-di.o ipu-dp.o ipu-dmfc.o | 3 | imx-ipu-v3-objs := ipu-common.o ipu-dc.o ipu-di.o ipu-dp.o ipu-dmfc.o ipu-smfc.o |
diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c index ca85d3d70ae3..719788ce7d9f 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-common.c +++ b/drivers/gpu/ipu-v3/ipu-common.c | |||
@@ -31,7 +31,7 @@ | |||
31 | 31 | ||
32 | #include <drm/drm_fourcc.h> | 32 | #include <drm/drm_fourcc.h> |
33 | 33 | ||
34 | #include "imx-ipu-v3.h" | 34 | #include <video/imx-ipu-v3.h> |
35 | #include "ipu-prv.h" | 35 | #include "ipu-prv.h" |
36 | 36 | ||
37 | static inline u32 ipu_cm_read(struct ipu_soc *ipu, unsigned offset) | 37 | static inline u32 ipu_cm_read(struct ipu_soc *ipu, unsigned offset) |
@@ -661,6 +661,39 @@ int ipu_module_disable(struct ipu_soc *ipu, u32 mask) | |||
661 | } | 661 | } |
662 | EXPORT_SYMBOL_GPL(ipu_module_disable); | 662 | EXPORT_SYMBOL_GPL(ipu_module_disable); |
663 | 663 | ||
664 | int ipu_csi_enable(struct ipu_soc *ipu, int csi) | ||
665 | { | ||
666 | return ipu_module_enable(ipu, csi ? IPU_CONF_CSI1_EN : IPU_CONF_CSI0_EN); | ||
667 | } | ||
668 | EXPORT_SYMBOL_GPL(ipu_csi_enable); | ||
669 | |||
670 | int ipu_csi_disable(struct ipu_soc *ipu, int csi) | ||
671 | { | ||
672 | return ipu_module_disable(ipu, csi ? IPU_CONF_CSI1_EN : IPU_CONF_CSI0_EN); | ||
673 | } | ||
674 | EXPORT_SYMBOL_GPL(ipu_csi_disable); | ||
675 | |||
676 | int ipu_smfc_enable(struct ipu_soc *ipu) | ||
677 | { | ||
678 | return ipu_module_enable(ipu, IPU_CONF_SMFC_EN); | ||
679 | } | ||
680 | EXPORT_SYMBOL_GPL(ipu_smfc_enable); | ||
681 | |||
682 | int ipu_smfc_disable(struct ipu_soc *ipu) | ||
683 | { | ||
684 | return ipu_module_disable(ipu, IPU_CONF_SMFC_EN); | ||
685 | } | ||
686 | EXPORT_SYMBOL_GPL(ipu_smfc_disable); | ||
687 | |||
688 | int ipu_idmac_get_current_buffer(struct ipuv3_channel *channel) | ||
689 | { | ||
690 | struct ipu_soc *ipu = channel->ipu; | ||
691 | unsigned int chno = channel->num; | ||
692 | |||
693 | return (ipu_cm_read(ipu, IPU_CHA_CUR_BUF(chno)) & idma_mask(chno)) ? 1 : 0; | ||
694 | } | ||
695 | EXPORT_SYMBOL_GPL(ipu_idmac_get_current_buffer); | ||
696 | |||
664 | void ipu_idmac_select_buffer(struct ipuv3_channel *channel, u32 buf_num) | 697 | void ipu_idmac_select_buffer(struct ipuv3_channel *channel, u32 buf_num) |
665 | { | 698 | { |
666 | struct ipu_soc *ipu = channel->ipu; | 699 | struct ipu_soc *ipu = channel->ipu; |
@@ -874,8 +907,17 @@ static int ipu_submodules_init(struct ipu_soc *ipu, | |||
874 | goto err_dp; | 907 | goto err_dp; |
875 | } | 908 | } |
876 | 909 | ||
910 | ret = ipu_smfc_init(ipu, dev, ipu_base + | ||
911 | devtype->cm_ofs + IPU_CM_SMFC_REG_OFS); | ||
912 | if (ret) { | ||
913 | unit = "smfc"; | ||
914 | goto err_smfc; | ||
915 | } | ||
916 | |||
877 | return 0; | 917 | return 0; |
878 | 918 | ||
919 | err_smfc: | ||
920 | ipu_dp_exit(ipu); | ||
879 | err_dp: | 921 | err_dp: |
880 | ipu_dmfc_exit(ipu); | 922 | ipu_dmfc_exit(ipu); |
881 | err_dmfc: | 923 | err_dmfc: |
@@ -947,6 +989,7 @@ EXPORT_SYMBOL_GPL(ipu_idmac_channel_irq); | |||
947 | 989 | ||
948 | static void ipu_submodules_exit(struct ipu_soc *ipu) | 990 | static void ipu_submodules_exit(struct ipu_soc *ipu) |
949 | { | 991 | { |
992 | ipu_smfc_exit(ipu); | ||
950 | ipu_dp_exit(ipu); | 993 | ipu_dp_exit(ipu); |
951 | ipu_dmfc_exit(ipu); | 994 | ipu_dmfc_exit(ipu); |
952 | ipu_dc_exit(ipu); | 995 | ipu_dc_exit(ipu); |
@@ -971,6 +1014,7 @@ static void platform_device_unregister_children(struct platform_device *pdev) | |||
971 | struct ipu_platform_reg { | 1014 | struct ipu_platform_reg { |
972 | struct ipu_client_platformdata pdata; | 1015 | struct ipu_client_platformdata pdata; |
973 | const char *name; | 1016 | const char *name; |
1017 | int reg_offset; | ||
974 | }; | 1018 | }; |
975 | 1019 | ||
976 | static const struct ipu_platform_reg client_reg[] = { | 1020 | static const struct ipu_platform_reg client_reg[] = { |
@@ -992,13 +1036,29 @@ static const struct ipu_platform_reg client_reg[] = { | |||
992 | .dma[1] = -EINVAL, | 1036 | .dma[1] = -EINVAL, |
993 | }, | 1037 | }, |
994 | .name = "imx-ipuv3-crtc", | 1038 | .name = "imx-ipuv3-crtc", |
1039 | }, { | ||
1040 | .pdata = { | ||
1041 | .csi = 0, | ||
1042 | .dma[0] = IPUV3_CHANNEL_CSI0, | ||
1043 | .dma[1] = -EINVAL, | ||
1044 | }, | ||
1045 | .reg_offset = IPU_CM_CSI0_REG_OFS, | ||
1046 | .name = "imx-ipuv3-camera", | ||
1047 | }, { | ||
1048 | .pdata = { | ||
1049 | .csi = 1, | ||
1050 | .dma[0] = IPUV3_CHANNEL_CSI1, | ||
1051 | .dma[1] = -EINVAL, | ||
1052 | }, | ||
1053 | .reg_offset = IPU_CM_CSI1_REG_OFS, | ||
1054 | .name = "imx-ipuv3-camera", | ||
995 | }, | 1055 | }, |
996 | }; | 1056 | }; |
997 | 1057 | ||
998 | static DEFINE_MUTEX(ipu_client_id_mutex); | 1058 | static DEFINE_MUTEX(ipu_client_id_mutex); |
999 | static int ipu_client_id; | 1059 | static int ipu_client_id; |
1000 | 1060 | ||
1001 | static int ipu_add_client_devices(struct ipu_soc *ipu) | 1061 | static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base) |
1002 | { | 1062 | { |
1003 | struct device *dev = ipu->dev; | 1063 | struct device *dev = ipu->dev; |
1004 | unsigned i; | 1064 | unsigned i; |
@@ -1012,9 +1072,19 @@ static int ipu_add_client_devices(struct ipu_soc *ipu) | |||
1012 | for (i = 0; i < ARRAY_SIZE(client_reg); i++) { | 1072 | for (i = 0; i < ARRAY_SIZE(client_reg); i++) { |
1013 | const struct ipu_platform_reg *reg = &client_reg[i]; | 1073 | const struct ipu_platform_reg *reg = &client_reg[i]; |
1014 | struct platform_device *pdev; | 1074 | struct platform_device *pdev; |
1015 | 1075 | struct resource res; | |
1016 | pdev = platform_device_register_data(dev, reg->name, | 1076 | |
1017 | id++, ®->pdata, sizeof(reg->pdata)); | 1077 | if (reg->reg_offset) { |
1078 | memset(&res, 0, sizeof(res)); | ||
1079 | res.flags = IORESOURCE_MEM; | ||
1080 | res.start = ipu_base + ipu->devtype->cm_ofs + reg->reg_offset; | ||
1081 | res.end = res.start + PAGE_SIZE - 1; | ||
1082 | pdev = platform_device_register_resndata(dev, reg->name, | ||
1083 | id++, &res, 1, ®->pdata, sizeof(reg->pdata)); | ||
1084 | } else { | ||
1085 | pdev = platform_device_register_data(dev, reg->name, | ||
1086 | id++, ®->pdata, sizeof(reg->pdata)); | ||
1087 | } | ||
1018 | 1088 | ||
1019 | if (IS_ERR(pdev)) | 1089 | if (IS_ERR(pdev)) |
1020 | goto err_register; | 1090 | goto err_register; |
@@ -1210,7 +1280,7 @@ static int ipu_probe(struct platform_device *pdev) | |||
1210 | if (ret) | 1280 | if (ret) |
1211 | goto failed_submodules_init; | 1281 | goto failed_submodules_init; |
1212 | 1282 | ||
1213 | ret = ipu_add_client_devices(ipu); | 1283 | ret = ipu_add_client_devices(ipu, ipu_base); |
1214 | if (ret) { | 1284 | if (ret) { |
1215 | dev_err(&pdev->dev, "adding client devices failed with %d\n", | 1285 | dev_err(&pdev->dev, "adding client devices failed with %d\n", |
1216 | ret); | 1286 | ret); |
diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-dc.c b/drivers/gpu/ipu-v3/ipu-dc.c index d5de8bb5c803..9f1e5efa3acf 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-dc.c +++ b/drivers/gpu/ipu-v3/ipu-dc.c | |||
@@ -20,8 +20,7 @@ | |||
20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
22 | 22 | ||
23 | #include "../imx-drm.h" | 23 | #include <video/imx-ipu-v3.h> |
24 | #include "imx-ipu-v3.h" | ||
25 | #include "ipu-prv.h" | 24 | #include "ipu-prv.h" |
26 | 25 | ||
27 | #define DC_MAP_CONF_PTR(n) (0x108 + ((n) & ~0x1) * 2) | 26 | #define DC_MAP_CONF_PTR(n) (0x108 + ((n) & ~0x1) * 2) |
diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-di.c b/drivers/gpu/ipu-v3/ipu-di.c index 82a9ebad697c..42e60b447ae7 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-di.c +++ b/drivers/gpu/ipu-v3/ipu-di.c | |||
@@ -20,7 +20,7 @@ | |||
20 | #include <linux/err.h> | 20 | #include <linux/err.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | 22 | ||
23 | #include "imx-ipu-v3.h" | 23 | #include <video/imx-ipu-v3.h> |
24 | #include "ipu-prv.h" | 24 | #include "ipu-prv.h" |
25 | 25 | ||
26 | struct ipu_di { | 26 | struct ipu_di { |
diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-dmfc.c b/drivers/gpu/ipu-v3/ipu-dmfc.c index 45213017fa4b..e1493ab36ca2 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-dmfc.c +++ b/drivers/gpu/ipu-v3/ipu-dmfc.c | |||
@@ -17,7 +17,7 @@ | |||
17 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
19 | 19 | ||
20 | #include "imx-ipu-v3.h" | 20 | #include <video/imx-ipu-v3.h> |
21 | #include "ipu-prv.h" | 21 | #include "ipu-prv.h" |
22 | 22 | ||
23 | #define DMFC_RD_CHAN 0x0000 | 23 | #define DMFC_RD_CHAN 0x0000 |
diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-dp.c b/drivers/gpu/ipu-v3/ipu-dp.c index 58f87c8d7c07..e17fa3f7c4b6 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-dp.c +++ b/drivers/gpu/ipu-v3/ipu-dp.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
20 | #include <linux/err.h> | 20 | #include <linux/err.h> |
21 | 21 | ||
22 | #include "imx-ipu-v3.h" | 22 | #include <video/imx-ipu-v3.h> |
23 | #include "ipu-prv.h" | 23 | #include "ipu-prv.h" |
24 | 24 | ||
25 | #define DP_SYNC 0 | 25 | #define DP_SYNC 0 |
diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-prv.h b/drivers/gpu/ipu-v3/ipu-prv.h index 4df00501adc2..acf181183f0b 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-prv.h +++ b/drivers/gpu/ipu-v3/ipu-prv.h | |||
@@ -22,7 +22,7 @@ struct ipu_soc; | |||
22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | 24 | ||
25 | #include "imx-ipu-v3.h" | 25 | #include <video/imx-ipu-v3.h> |
26 | 26 | ||
27 | #define IPUV3_CHANNEL_CSI0 0 | 27 | #define IPUV3_CHANNEL_CSI0 0 |
28 | #define IPUV3_CHANNEL_CSI1 1 | 28 | #define IPUV3_CHANNEL_CSI1 1 |
@@ -151,6 +151,8 @@ struct ipuv3_channel { | |||
151 | struct ipu_dc_priv; | 151 | struct ipu_dc_priv; |
152 | struct ipu_dmfc_priv; | 152 | struct ipu_dmfc_priv; |
153 | struct ipu_di; | 153 | struct ipu_di; |
154 | struct ipu_smfc_priv; | ||
155 | |||
154 | struct ipu_devtype; | 156 | struct ipu_devtype; |
155 | 157 | ||
156 | struct ipu_soc { | 158 | struct ipu_soc { |
@@ -178,6 +180,7 @@ struct ipu_soc { | |||
178 | struct ipu_dp_priv *dp_priv; | 180 | struct ipu_dp_priv *dp_priv; |
179 | struct ipu_dmfc_priv *dmfc_priv; | 181 | struct ipu_dmfc_priv *dmfc_priv; |
180 | struct ipu_di *di_priv[2]; | 182 | struct ipu_di *di_priv[2]; |
183 | struct ipu_smfc_priv *smfc_priv; | ||
181 | }; | 184 | }; |
182 | 185 | ||
183 | void ipu_srm_dp_sync_update(struct ipu_soc *ipu); | 186 | void ipu_srm_dp_sync_update(struct ipu_soc *ipu); |
@@ -203,4 +206,7 @@ void ipu_dc_exit(struct ipu_soc *ipu); | |||
203 | int ipu_cpmem_init(struct ipu_soc *ipu, struct device *dev, unsigned long base); | 206 | int ipu_cpmem_init(struct ipu_soc *ipu, struct device *dev, unsigned long base); |
204 | void ipu_cpmem_exit(struct ipu_soc *ipu); | 207 | void ipu_cpmem_exit(struct ipu_soc *ipu); |
205 | 208 | ||
209 | int ipu_smfc_init(struct ipu_soc *ipu, struct device *dev, unsigned long base); | ||
210 | void ipu_smfc_exit(struct ipu_soc *ipu); | ||
211 | |||
206 | #endif /* __IPU_PRV_H__ */ | 212 | #endif /* __IPU_PRV_H__ */ |
diff --git a/drivers/gpu/ipu-v3/ipu-smfc.c b/drivers/gpu/ipu-v3/ipu-smfc.c new file mode 100644 index 000000000000..e4f85ad286fc --- /dev/null +++ b/drivers/gpu/ipu-v3/ipu-smfc.c | |||
@@ -0,0 +1,97 @@ | |||
1 | /* | ||
2 | * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | #define DEBUG | ||
12 | #include <linux/export.h> | ||
13 | #include <linux/types.h> | ||
14 | #include <linux/init.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/errno.h> | ||
17 | #include <linux/spinlock.h> | ||
18 | #include <linux/delay.h> | ||
19 | #include <linux/clk.h> | ||
20 | #include <video/imx-ipu-v3.h> | ||
21 | |||
22 | #include "ipu-prv.h" | ||
23 | |||
24 | struct ipu_smfc_priv { | ||
25 | void __iomem *base; | ||
26 | spinlock_t lock; | ||
27 | }; | ||
28 | |||
29 | /*SMFC Registers */ | ||
30 | #define SMFC_MAP 0x0000 | ||
31 | #define SMFC_WMC 0x0004 | ||
32 | #define SMFC_BS 0x0008 | ||
33 | |||
34 | int ipu_smfc_set_burstsize(struct ipu_soc *ipu, int channel, int burstsize) | ||
35 | { | ||
36 | struct ipu_smfc_priv *smfc = ipu->smfc_priv; | ||
37 | unsigned long flags; | ||
38 | u32 val, shift; | ||
39 | |||
40 | spin_lock_irqsave(&smfc->lock, flags); | ||
41 | |||
42 | shift = channel * 4; | ||
43 | val = readl(smfc->base + SMFC_BS); | ||
44 | val &= ~(0xf << shift); | ||
45 | val |= burstsize << shift; | ||
46 | writel(val, smfc->base + SMFC_BS); | ||
47 | |||
48 | spin_unlock_irqrestore(&smfc->lock, flags); | ||
49 | |||
50 | return 0; | ||
51 | } | ||
52 | EXPORT_SYMBOL_GPL(ipu_smfc_set_burstsize); | ||
53 | |||
54 | int ipu_smfc_map_channel(struct ipu_soc *ipu, int channel, int csi_id, int mipi_id) | ||
55 | { | ||
56 | struct ipu_smfc_priv *smfc = ipu->smfc_priv; | ||
57 | unsigned long flags; | ||
58 | u32 val, shift; | ||
59 | |||
60 | spin_lock_irqsave(&smfc->lock, flags); | ||
61 | |||
62 | shift = channel * 3; | ||
63 | val = readl(smfc->base + SMFC_MAP); | ||
64 | val &= ~(0x7 << shift); | ||
65 | val |= ((csi_id << 2) | mipi_id) << shift; | ||
66 | writel(val, smfc->base + SMFC_MAP); | ||
67 | |||
68 | spin_unlock_irqrestore(&smfc->lock, flags); | ||
69 | |||
70 | return 0; | ||
71 | } | ||
72 | EXPORT_SYMBOL_GPL(ipu_smfc_map_channel); | ||
73 | |||
74 | int ipu_smfc_init(struct ipu_soc *ipu, struct device *dev, | ||
75 | unsigned long base) | ||
76 | { | ||
77 | struct ipu_smfc_priv *smfc; | ||
78 | |||
79 | smfc = devm_kzalloc(dev, sizeof(*smfc), GFP_KERNEL); | ||
80 | if (!smfc) | ||
81 | return -ENOMEM; | ||
82 | |||
83 | ipu->smfc_priv = smfc; | ||
84 | spin_lock_init(&smfc->lock); | ||
85 | |||
86 | smfc->base = devm_ioremap(dev, base, PAGE_SIZE); | ||
87 | if (!smfc->base) | ||
88 | return -ENOMEM; | ||
89 | |||
90 | pr_debug("%s: ioremap 0x%08lx -> %p\n", __func__, base, smfc->base); | ||
91 | |||
92 | return 0; | ||
93 | } | ||
94 | |||
95 | void ipu_smfc_exit(struct ipu_soc *ipu) | ||
96 | { | ||
97 | } | ||
diff --git a/drivers/staging/imx-drm/Kconfig b/drivers/staging/imx-drm/Kconfig index c6e8ba7b3e4e..82fb758a29bc 100644 --- a/drivers/staging/imx-drm/Kconfig +++ b/drivers/staging/imx-drm/Kconfig | |||
@@ -39,19 +39,10 @@ config DRM_IMX_LDB | |||
39 | Choose this to enable the internal LVDS Display Bridge (LDB) | 39 | Choose this to enable the internal LVDS Display Bridge (LDB) |
40 | found on i.MX53 and i.MX6 processors. | 40 | found on i.MX53 and i.MX6 processors. |
41 | 41 | ||
42 | config DRM_IMX_IPUV3_CORE | ||
43 | tristate "IPUv3 core support" | ||
44 | depends on DRM_IMX | ||
45 | depends on RESET_CONTROLLER | ||
46 | help | ||
47 | Choose this if you have a i.MX5/6 system and want | ||
48 | to use the IPU. This option only enables IPU base | ||
49 | support. | ||
50 | |||
51 | config DRM_IMX_IPUV3 | 42 | config DRM_IMX_IPUV3 |
52 | tristate "DRM Support for i.MX IPUv3" | 43 | tristate "DRM Support for i.MX IPUv3" |
53 | depends on DRM_IMX | 44 | depends on DRM_IMX |
54 | depends on DRM_IMX_IPUV3_CORE | 45 | depends on IMX_IPUV3_CORE |
55 | help | 46 | help |
56 | Choose this if you have a i.MX5 or i.MX6 processor. | 47 | Choose this if you have a i.MX5 or i.MX6 processor. |
57 | 48 | ||
diff --git a/drivers/staging/imx-drm/Makefile b/drivers/staging/imx-drm/Makefile index 129e3a3f59f1..582c438d8cbd 100644 --- a/drivers/staging/imx-drm/Makefile +++ b/drivers/staging/imx-drm/Makefile | |||
@@ -6,7 +6,6 @@ obj-$(CONFIG_DRM_IMX) += imxdrm.o | |||
6 | obj-$(CONFIG_DRM_IMX_PARALLEL_DISPLAY) += parallel-display.o | 6 | obj-$(CONFIG_DRM_IMX_PARALLEL_DISPLAY) += parallel-display.o |
7 | obj-$(CONFIG_DRM_IMX_TVE) += imx-tve.o | 7 | obj-$(CONFIG_DRM_IMX_TVE) += imx-tve.o |
8 | obj-$(CONFIG_DRM_IMX_LDB) += imx-ldb.o | 8 | obj-$(CONFIG_DRM_IMX_LDB) += imx-ldb.o |
9 | obj-$(CONFIG_DRM_IMX_IPUV3_CORE) += ipu-v3/ | ||
10 | 9 | ||
11 | imx-ipuv3-crtc-objs := ipuv3-crtc.o ipuv3-plane.o | 10 | imx-ipuv3-crtc-objs := ipuv3-crtc.o ipuv3-plane.o |
12 | obj-$(CONFIG_DRM_IMX_IPUV3) += imx-ipuv3-crtc.o | 11 | obj-$(CONFIG_DRM_IMX_IPUV3) += imx-ipuv3-crtc.o |
diff --git a/drivers/staging/imx-drm/imx-hdmi.c b/drivers/staging/imx-drm/imx-hdmi.c index 9fbe6d6a989d..76749231c48a 100644 --- a/drivers/staging/imx-drm/imx-hdmi.c +++ b/drivers/staging/imx-drm/imx-hdmi.c | |||
@@ -27,8 +27,8 @@ | |||
27 | #include <drm/drm_crtc_helper.h> | 27 | #include <drm/drm_crtc_helper.h> |
28 | #include <drm/drm_edid.h> | 28 | #include <drm/drm_edid.h> |
29 | #include <drm/drm_encoder_slave.h> | 29 | #include <drm/drm_encoder_slave.h> |
30 | #include <video/imx-ipu-v3.h> | ||
30 | 31 | ||
31 | #include "ipu-v3/imx-ipu-v3.h" | ||
32 | #include "imx-hdmi.h" | 32 | #include "imx-hdmi.h" |
33 | #include "imx-drm.h" | 33 | #include "imx-drm.h" |
34 | 34 | ||
diff --git a/drivers/staging/imx-drm/imx-tve.c b/drivers/staging/imx-drm/imx-tve.c index 4caef2b1653d..c628fcdc22ae 100644 --- a/drivers/staging/imx-drm/imx-tve.c +++ b/drivers/staging/imx-drm/imx-tve.c | |||
@@ -30,8 +30,8 @@ | |||
30 | #include <drm/drmP.h> | 30 | #include <drm/drmP.h> |
31 | #include <drm/drm_fb_helper.h> | 31 | #include <drm/drm_fb_helper.h> |
32 | #include <drm/drm_crtc_helper.h> | 32 | #include <drm/drm_crtc_helper.h> |
33 | #include <video/imx-ipu-v3.h> | ||
33 | 34 | ||
34 | #include "ipu-v3/imx-ipu-v3.h" | ||
35 | #include "imx-drm.h" | 35 | #include "imx-drm.h" |
36 | 36 | ||
37 | #define TVE_COM_CONF_REG 0x00 | 37 | #define TVE_COM_CONF_REG 0x00 |
diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c b/drivers/staging/imx-drm/ipuv3-crtc.c index c48f640db006..d6913d2e6f77 100644 --- a/drivers/staging/imx-drm/ipuv3-crtc.c +++ b/drivers/staging/imx-drm/ipuv3-crtc.c | |||
@@ -30,7 +30,7 @@ | |||
30 | #include <drm/drm_gem_cma_helper.h> | 30 | #include <drm/drm_gem_cma_helper.h> |
31 | #include <drm/drm_fb_cma_helper.h> | 31 | #include <drm/drm_fb_cma_helper.h> |
32 | 32 | ||
33 | #include "ipu-v3/imx-ipu-v3.h" | 33 | #include <video/imx-ipu-v3.h> |
34 | #include "imx-drm.h" | 34 | #include "imx-drm.h" |
35 | #include "ipuv3-plane.h" | 35 | #include "ipuv3-plane.h" |
36 | 36 | ||
diff --git a/drivers/staging/imx-drm/ipuv3-plane.c b/drivers/staging/imx-drm/ipuv3-plane.c index 27a8d735dae0..02b4486435a0 100644 --- a/drivers/staging/imx-drm/ipuv3-plane.c +++ b/drivers/staging/imx-drm/ipuv3-plane.c | |||
@@ -17,7 +17,7 @@ | |||
17 | #include <drm/drm_fb_cma_helper.h> | 17 | #include <drm/drm_fb_cma_helper.h> |
18 | #include <drm/drm_gem_cma_helper.h> | 18 | #include <drm/drm_gem_cma_helper.h> |
19 | 19 | ||
20 | #include "ipu-v3/imx-ipu-v3.h" | 20 | #include "video/imx-ipu-v3.h" |
21 | #include "ipuv3-plane.h" | 21 | #include "ipuv3-plane.h" |
22 | 22 | ||
23 | #define to_ipu_plane(x) container_of(x, struct ipu_plane, base) | 23 | #define to_ipu_plane(x) container_of(x, struct ipu_plane, base) |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index c7b4f0f927b1..8bf495ffb020 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
@@ -20,6 +20,7 @@ source "drivers/char/agp/Kconfig" | |||
20 | source "drivers/gpu/vga/Kconfig" | 20 | source "drivers/gpu/vga/Kconfig" |
21 | 21 | ||
22 | source "drivers/gpu/host1x/Kconfig" | 22 | source "drivers/gpu/host1x/Kconfig" |
23 | source "drivers/gpu/ipu-v3/Kconfig" | ||
23 | 24 | ||
24 | menu "Direct Rendering Manager" | 25 | menu "Direct Rendering Manager" |
25 | source "drivers/gpu/drm/Kconfig" | 26 | source "drivers/gpu/drm/Kconfig" |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 83222db41566..8af71a8e2c00 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -234,8 +234,6 @@ int drm_err(const char *func, const char *format, ...); | |||
234 | /** \name Internal types and structures */ | 234 | /** \name Internal types and structures */ |
235 | /*@{*/ | 235 | /*@{*/ |
236 | 236 | ||
237 | #define DRM_ARRAY_SIZE(x) ARRAY_SIZE(x) | ||
238 | |||
239 | #define DRM_IF_VERSION(maj, min) (maj << 16 | min) | 237 | #define DRM_IF_VERSION(maj, min) (maj << 16 | min) |
240 | 238 | ||
241 | /** | 239 | /** |
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index a7fac5686915..251b75e6bf7a 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -121,6 +121,9 @@ struct drm_display_info { | |||
121 | enum subpixel_order subpixel_order; | 121 | enum subpixel_order subpixel_order; |
122 | u32 color_formats; | 122 | u32 color_formats; |
123 | 123 | ||
124 | /* Mask of supported hdmi deep color modes */ | ||
125 | u8 edid_hdmi_dc_modes; | ||
126 | |||
124 | u8 cea_rev; | 127 | u8 cea_rev; |
125 | }; | 128 | }; |
126 | 129 | ||
diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h index aefa2f6afa3b..1cc0b610f162 100644 --- a/include/uapi/drm/radeon_drm.h +++ b/include/uapi/drm/radeon_drm.h | |||
@@ -1007,7 +1007,7 @@ struct drm_radeon_cs { | |||
1007 | #define RADEON_INFO_NUM_BYTES_MOVED 0x1d | 1007 | #define RADEON_INFO_NUM_BYTES_MOVED 0x1d |
1008 | #define RADEON_INFO_VRAM_USAGE 0x1e | 1008 | #define RADEON_INFO_VRAM_USAGE 0x1e |
1009 | #define RADEON_INFO_GTT_USAGE 0x1f | 1009 | #define RADEON_INFO_GTT_USAGE 0x1f |
1010 | 1010 | #define RADEON_INFO_ACTIVE_CU_COUNT 0x20 | |
1011 | 1011 | ||
1012 | struct drm_radeon_info { | 1012 | struct drm_radeon_info { |
1013 | uint32_t request; | 1013 | uint32_t request; |
diff --git a/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h b/include/video/imx-ipu-v3.h index c4d14ead5837..61d6d25caf95 100644 --- a/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h +++ b/include/video/imx-ipu-v3.h | |||
@@ -103,6 +103,7 @@ int ipu_idmac_wait_busy(struct ipuv3_channel *channel, int ms); | |||
103 | 103 | ||
104 | void ipu_idmac_set_double_buffer(struct ipuv3_channel *channel, | 104 | void ipu_idmac_set_double_buffer(struct ipuv3_channel *channel, |
105 | bool doublebuffer); | 105 | bool doublebuffer); |
106 | int ipu_idmac_get_current_buffer(struct ipuv3_channel *channel); | ||
106 | void ipu_idmac_select_buffer(struct ipuv3_channel *channel, u32 buf_num); | 107 | void ipu_idmac_select_buffer(struct ipuv3_channel *channel, u32 buf_num); |
107 | 108 | ||
108 | /* | 109 | /* |
@@ -160,6 +161,20 @@ int ipu_dp_set_window_pos(struct ipu_dp *, u16 x_pos, u16 y_pos); | |||
160 | int ipu_dp_set_global_alpha(struct ipu_dp *dp, bool enable, u8 alpha, | 161 | int ipu_dp_set_global_alpha(struct ipu_dp *dp, bool enable, u8 alpha, |
161 | bool bg_chan); | 162 | bool bg_chan); |
162 | 163 | ||
164 | /* | ||
165 | * IPU CMOS Sensor Interface (csi) functions | ||
166 | */ | ||
167 | int ipu_csi_enable(struct ipu_soc *ipu, int csi); | ||
168 | int ipu_csi_disable(struct ipu_soc *ipu, int csi); | ||
169 | |||
170 | /* | ||
171 | * IPU Sensor Multiple FIFO Controller (SMFC) functions | ||
172 | */ | ||
173 | int ipu_smfc_enable(struct ipu_soc *ipu); | ||
174 | int ipu_smfc_disable(struct ipu_soc *ipu); | ||
175 | int ipu_smfc_map_channel(struct ipu_soc *ipu, int channel, int csi_id, int mipi_id); | ||
176 | int ipu_smfc_set_burstsize(struct ipu_soc *ipu, int channel, int burstsize); | ||
177 | |||
163 | #define IPU_CPMEM_WORD(word, ofs, size) ((((word) * 160 + (ofs)) << 8) | (size)) | 178 | #define IPU_CPMEM_WORD(word, ofs, size) ((((word) * 160 + (ofs)) << 8) | (size)) |
164 | 179 | ||
165 | #define IPU_FIELD_UBO IPU_CPMEM_WORD(0, 46, 22) | 180 | #define IPU_FIELD_UBO IPU_CPMEM_WORD(0, 46, 22) |
@@ -316,6 +331,7 @@ static inline void ipu_cpmem_set_burstsize(struct ipu_ch_param __iomem *p, | |||
316 | }; | 331 | }; |
317 | 332 | ||
318 | struct ipu_client_platformdata { | 333 | struct ipu_client_platformdata { |
334 | int csi; | ||
319 | int di; | 335 | int di; |
320 | int dc; | 336 | int dc; |
321 | int dp; | 337 | int dp; |