* [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init()
@ 2022-03-22 13:17 Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 2/7] drm/gma500: Uninstall interrupts on driver removal Patrik Jakobsson
` (6 more replies)
0 siblings, 7 replies; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 13:17 UTC (permalink / raw)
To: dri-devel; +Cc: daniel.vetter, sam, tzimmermann
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
drivers/gpu/drm/gma500/framebuffer.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
index 45df9de22007..2b99c996fdc2 100644
--- a/drivers/gpu/drm/gma500/framebuffer.c
+++ b/drivers/gpu/drm/gma500/framebuffer.c
@@ -514,7 +514,8 @@ void psb_modeset_init(struct drm_device *dev)
struct pci_dev *pdev = to_pci_dev(dev->dev);
int i;
- drm_mode_config_init(dev);
+ if (drmm_mode_config_init(dev))
+ return;
dev->mode_config.min_width = 0;
dev->mode_config.min_height = 0;
@@ -546,6 +547,5 @@ void psb_modeset_cleanup(struct drm_device *dev)
if (dev_priv->modeset) {
drm_kms_helper_poll_fini(dev);
psb_fbdev_fini(dev);
- drm_mode_config_cleanup(dev);
}
}
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/7] drm/gma500: Uninstall interrupts on driver removal
2022-03-22 13:17 [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Patrik Jakobsson
@ 2022-03-22 13:17 ` Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 3/7] drm/gma500: Make use of the drm connector iterator Patrik Jakobsson
` (5 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 13:17 UTC (permalink / raw)
To: dri-devel; +Cc: daniel.vetter, sam, tzimmermann
Reloading the driver revealed that the interrupt handler never got
uninstalled.
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
drivers/gpu/drm/gma500/psb_drv.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index 82d51e9821ad..b231fddb8817 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -173,6 +173,8 @@ static void psb_driver_unload(struct drm_device *dev)
gma_backlight_exit(dev);
psb_modeset_cleanup(dev);
+ gma_irq_uninstall(dev);
+
if (dev_priv->ops->chip_teardown)
dev_priv->ops->chip_teardown(dev);
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/7] drm/gma500: Make use of the drm connector iterator
2022-03-22 13:17 [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 2/7] drm/gma500: Uninstall interrupts on driver removal Patrik Jakobsson
@ 2022-03-22 13:17 ` Patrik Jakobsson
2022-03-22 14:39 ` Daniel Vetter
2022-03-22 13:17 ` [PATCH 4/7] drm/gma500: gma500 don't register non-hotpluggable connectors Patrik Jakobsson
` (4 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 13:17 UTC (permalink / raw)
To: dri-devel; +Cc: daniel.vetter, sam, tzimmermann
This makes sure we're using proper locking when iterating the list of
connectors.
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
drivers/gpu/drm/gma500/cdv_device.c | 10 ++++++--
drivers/gpu/drm/gma500/cdv_intel_display.c | 9 +++++--
drivers/gpu/drm/gma500/framebuffer.c | 6 +++--
drivers/gpu/drm/gma500/gma_display.c | 16 ++++++++-----
drivers/gpu/drm/gma500/oaktrail_crtc.c | 17 ++++++++-----
drivers/gpu/drm/gma500/oaktrail_lvds.c | 15 ++++++------
drivers/gpu/drm/gma500/psb_device.c | 28 +++++++++++++++-------
drivers/gpu/drm/gma500/psb_drv.c | 10 ++++----
drivers/gpu/drm/gma500/psb_intel_display.c | 15 ++++++++----
9 files changed, 84 insertions(+), 42 deletions(-)
diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c
index f854f58bcbb3..dd32b484dd82 100644
--- a/drivers/gpu/drm/gma500/cdv_device.c
+++ b/drivers/gpu/drm/gma500/cdv_device.c
@@ -262,6 +262,7 @@ static int cdv_save_display_registers(struct drm_device *dev)
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
struct pci_dev *pdev = to_pci_dev(dev->dev);
struct psb_save_area *regs = &dev_priv->regs;
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
dev_dbg(dev->dev, "Saving GPU registers.\n");
@@ -298,8 +299,10 @@ static int cdv_save_display_registers(struct drm_device *dev)
regs->cdv.saveIER = REG_READ(PSB_INT_ENABLE_R);
regs->cdv.saveIMR = REG_READ(PSB_INT_MASK_R);
- list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter)
connector->funcs->dpms(connector, DRM_MODE_DPMS_OFF);
+ drm_connector_list_iter_end(&conn_iter);
return 0;
}
@@ -317,6 +320,7 @@ static int cdv_restore_display_registers(struct drm_device *dev)
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
struct pci_dev *pdev = to_pci_dev(dev->dev);
struct psb_save_area *regs = &dev_priv->regs;
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
u32 temp;
@@ -373,8 +377,10 @@ static int cdv_restore_display_registers(struct drm_device *dev)
drm_mode_config_reset(dev);
- list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter)
connector->funcs->dpms(connector, DRM_MODE_DPMS_ON);
+ drm_connector_list_iter_end(&conn_iter);
/* Resume the modeset for every activated CRTC */
drm_helper_resume_force_mode(dev);
diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c
index 94ebc48a4349..0c3ddcdc29dc 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_display.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_display.c
@@ -584,13 +584,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
bool ok;
bool is_lvds = false;
bool is_dp = false;
- struct drm_mode_config *mode_config = &dev->mode_config;
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
const struct gma_limit_t *limit;
u32 ddi_select = 0;
bool is_edp = false;
- list_for_each_entry(connector, &mode_config->connector_list, head) {
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
struct gma_encoder *gma_encoder =
gma_attached_encoder(connector);
@@ -613,10 +614,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
is_edp = true;
break;
default:
+ drm_connector_list_iter_end(&conn_iter);
DRM_ERROR("invalid output type.\n");
return 0;
}
+
+ break;
}
+ drm_connector_list_iter_end(&conn_iter);
if (dev_priv->dplla_96mhz)
/* low-end sku, 96/100 mhz */
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
index 2b99c996fdc2..0ac6ea5fd3a1 100644
--- a/drivers/gpu/drm/gma500/framebuffer.c
+++ b/drivers/gpu/drm/gma500/framebuffer.c
@@ -451,6 +451,7 @@ static const struct drm_mode_config_funcs psb_mode_funcs = {
static void psb_setup_outputs(struct drm_device *dev)
{
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
drm_mode_create_scaling_mode_property(dev);
@@ -461,8 +462,8 @@ static void psb_setup_outputs(struct drm_device *dev)
"backlight", 0, 100);
dev_priv->ops->output_init(dev);
- list_for_each_entry(connector, &dev->mode_config.connector_list,
- head) {
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
struct drm_encoder *encoder = &gma_encoder->base;
int crtc_mask = 0, clone_mask = 0;
@@ -505,6 +506,7 @@ static void psb_setup_outputs(struct drm_device *dev)
encoder->possible_clones =
gma_connector_clones(dev, clone_mask);
}
+ drm_connector_list_iter_end(&conn_iter);
}
void psb_modeset_init(struct drm_device *dev)
diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
index 1d7964c339f4..e8157464d9eb 100644
--- a/drivers/gpu/drm/gma500/gma_display.c
+++ b/drivers/gpu/drm/gma500/gma_display.c
@@ -27,17 +27,21 @@
bool gma_pipe_has_type(struct drm_crtc *crtc, int type)
{
struct drm_device *dev = crtc->dev;
- struct drm_mode_config *mode_config = &dev->mode_config;
- struct drm_connector *l_entry;
+ struct drm_connector_list_iter conn_iter;
+ struct drm_connector *connector;
- list_for_each_entry(l_entry, &mode_config->connector_list, head) {
- if (l_entry->encoder && l_entry->encoder->crtc == crtc) {
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
+ if (connector->encoder && connector->encoder->crtc == crtc) {
struct gma_encoder *gma_encoder =
- gma_attached_encoder(l_entry);
- if (gma_encoder->type == type)
+ gma_attached_encoder(connector);
+ if (gma_encoder->type == type) {
+ drm_connector_list_iter_end(&conn_iter);
return true;
+ }
}
}
+ drm_connector_list_iter_end(&conn_iter);
return false;
}
diff --git a/drivers/gpu/drm/gma500/oaktrail_crtc.c b/drivers/gpu/drm/gma500/oaktrail_crtc.c
index 36c7c2686c90..873c17cf8fb4 100644
--- a/drivers/gpu/drm/gma500/oaktrail_crtc.c
+++ b/drivers/gpu/drm/gma500/oaktrail_crtc.c
@@ -372,9 +372,9 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
bool ok, is_sdvo = false;
bool is_lvds = false;
bool is_mipi = false;
- struct drm_mode_config *mode_config = &dev->mode_config;
struct gma_encoder *gma_encoder = NULL;
uint64_t scalingType = DRM_MODE_SCALE_FULLSCREEN;
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
int i;
int need_aux = gma_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ? 1 : 0;
@@ -392,7 +392,8 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
adjusted_mode,
sizeof(struct drm_display_mode));
- list_for_each_entry(connector, &mode_config->connector_list, head) {
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
if (!connector->encoder || connector->encoder->crtc != crtc)
continue;
@@ -409,8 +410,16 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
is_mipi = true;
break;
}
+
+ break;
}
+ if (gma_encoder)
+ drm_object_property_get_value(&connector->base,
+ dev->mode_config.scaling_mode_property, &scalingType);
+
+ drm_connector_list_iter_end(&conn_iter);
+
/* Disable the VGA plane that we never use */
for (i = 0; i <= need_aux; i++)
REG_WRITE_WITH_AUX(VGACNTRL, VGA_DISP_DISABLE, i);
@@ -424,10 +433,6 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
(mode->crtc_vdisplay - 1), i);
}
- if (gma_encoder)
- drm_object_property_get_value(&connector->base,
- dev->mode_config.scaling_mode_property, &scalingType);
-
if (scalingType == DRM_MODE_SCALE_NO_SCALE) {
/* Moorestown doesn't have register support for centering so
* we need to mess with the h/vblank and h/vsync start and
diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c
index 28b995ef2844..04852dbc7fb3 100644
--- a/drivers/gpu/drm/gma500/oaktrail_lvds.c
+++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c
@@ -85,7 +85,7 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
struct drm_device *dev = encoder->dev;
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev;
- struct drm_mode_config *mode_config = &dev->mode_config;
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector = NULL;
struct drm_crtc *crtc = encoder->crtc;
u32 lvds_port;
@@ -112,21 +112,22 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
REG_WRITE(LVDS, lvds_port);
/* Find the connector we're trying to set up */
- list_for_each_entry(connector, &mode_config->connector_list, head) {
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
if (connector->encoder && connector->encoder->crtc == crtc)
break;
}
- if (list_entry_is_head(connector, &mode_config->connector_list, head)) {
+ if (!connector) {
+ drm_connector_list_iter_end(&conn_iter);
DRM_ERROR("Couldn't find connector when setting mode");
gma_power_end(dev);
return;
}
- drm_object_property_get_value(
- &connector->base,
- dev->mode_config.scaling_mode_property,
- &v);
+ drm_object_property_get_value( &connector->base,
+ dev->mode_config.scaling_mode_property, &v);
+ drm_connector_list_iter_end(&conn_iter);
if (v == DRM_MODE_SCALE_NO_SCALE)
REG_WRITE(PFIT_CONTROL, 0);
diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c
index 59f325165667..71534f4ca834 100644
--- a/drivers/gpu/drm/gma500/psb_device.c
+++ b/drivers/gpu/drm/gma500/psb_device.c
@@ -168,8 +168,10 @@ static void psb_init_pm(struct drm_device *dev)
static int psb_save_display_registers(struct drm_device *dev)
{
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
+ struct gma_connector *gma_connector;
struct drm_crtc *crtc;
- struct gma_connector *connector;
+ struct drm_connector_list_iter conn_iter;
+ struct drm_connector *connector;
struct psb_state *regs = &dev_priv->regs.psb;
/* Display arbitration control + watermarks */
@@ -189,9 +191,13 @@ static int psb_save_display_registers(struct drm_device *dev)
dev_priv->ops->save_crtc(crtc);
}
- list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
- if (connector->save)
- connector->save(&connector->base);
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
+ gma_connector = to_gma_connector(connector);
+ if (gma_connector->save)
+ gma_connector->save(connector);
+ }
+ drm_connector_list_iter_end(&conn_iter);
drm_modeset_unlock_all(dev);
return 0;
@@ -206,8 +212,10 @@ static int psb_save_display_registers(struct drm_device *dev)
static int psb_restore_display_registers(struct drm_device *dev)
{
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
+ struct gma_connector *gma_connector;
struct drm_crtc *crtc;
- struct gma_connector *connector;
+ struct drm_connector_list_iter conn_iter;
+ struct drm_connector *connector;
struct psb_state *regs = &dev_priv->regs.psb;
/* Display arbitration + watermarks */
@@ -228,9 +236,13 @@ static int psb_restore_display_registers(struct drm_device *dev)
if (drm_helper_crtc_in_use(crtc))
dev_priv->ops->restore_crtc(crtc);
- list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
- if (connector->restore)
- connector->restore(&connector->base);
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
+ gma_connector = to_gma_connector(connector);
+ if (gma_connector->restore)
+ gma_connector->restore(connector);
+ }
+ drm_connector_list_iter_end(&conn_iter);
drm_modeset_unlock_all(dev);
return 0;
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index b231fddb8817..bb0e3288e35b 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -236,10 +236,11 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
unsigned long resource_start, resource_len;
unsigned long irqflags;
- int ret = -ENOMEM;
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
struct gma_encoder *gma_encoder;
struct psb_gtt *pg;
+ int ret = -ENOMEM;
/* initializing driver private data */
@@ -390,9 +391,9 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
psb_fbdev_init(dev);
drm_kms_helper_poll_init(dev);
- /* Only add backlight support if we have LVDS output */
- list_for_each_entry(connector, &dev->mode_config.connector_list,
- head) {
+ /* Only add backlight support if we have LVDS or MIPI output */
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
gma_encoder = gma_attached_encoder(connector);
switch (gma_encoder->type) {
@@ -402,6 +403,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
break;
}
}
+ drm_connector_list_iter_end(&conn_iter);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
index a99859b5b13a..fb8234f4d128 100644
--- a/drivers/gpu/drm/gma500/psb_intel_display.c
+++ b/drivers/gpu/drm/gma500/psb_intel_display.c
@@ -106,7 +106,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
u32 dpll = 0, fp = 0, dspcntr, pipeconf;
bool ok, is_sdvo = false;
bool is_lvds = false, is_tv = false;
- struct drm_mode_config *mode_config = &dev->mode_config;
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
const struct gma_limit_t *limit;
@@ -116,7 +116,8 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
return 0;
}
- list_for_each_entry(connector, &mode_config->connector_list, head) {
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
if (!connector->encoder
@@ -135,6 +136,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
break;
}
}
+ drm_connector_list_iter_end(&conn_iter);
refclk = 96000;
@@ -534,16 +536,19 @@ struct drm_crtc *psb_intel_get_crtc_from_pipe(struct drm_device *dev, int pipe)
int gma_connector_clones(struct drm_device *dev, int type_mask)
{
- int index_mask = 0;
+ struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
+ int index_mask = 0;
int entry = 0;
- list_for_each_entry(connector, &dev->mode_config.connector_list,
- head) {
+ drm_connector_list_iter_begin(dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
if (type_mask & (1 << gma_encoder->type))
index_mask |= (1 << entry);
entry++;
}
+ drm_connector_list_iter_end(&conn_iter);
+
return index_mask;
}
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 4/7] drm/gma500: gma500 don't register non-hotpluggable connectors
2022-03-22 13:17 [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 2/7] drm/gma500: Uninstall interrupts on driver removal Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 3/7] drm/gma500: Make use of the drm connector iterator Patrik Jakobsson
@ 2022-03-22 13:17 ` Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 5/7] drm/gma500: Free the correct connector allocation Patrik Jakobsson
` (3 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 13:17 UTC (permalink / raw)
To: dri-devel; +Cc: daniel.vetter, sam, tzimmermann
According to docs we should only register connectors that are
hotpluggable. No connectors in gma500 are hotpluggable.
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
drivers/gpu/drm/gma500/cdv_intel_crt.c | 3 ---
drivers/gpu/drm/gma500/cdv_intel_dp.c | 3 ---
drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 2 --
drivers/gpu/drm/gma500/cdv_intel_lvds.c | 2 --
drivers/gpu/drm/gma500/oaktrail_hdmi.c | 1 -
drivers/gpu/drm/gma500/oaktrail_lvds.c | 1 -
drivers/gpu/drm/gma500/psb_intel_lvds.c | 2 --
drivers/gpu/drm/gma500/psb_intel_sdvo.c | 2 --
8 files changed, 16 deletions(-)
diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c
index 4a9bb4994a26..1ae0fbbda0eb 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_crt.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c
@@ -194,7 +194,6 @@ static void cdv_intel_crt_destroy(struct drm_connector *connector)
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
psb_intel_i2c_destroy(gma_encoder->ddc_bus);
- drm_connector_unregister(connector);
drm_connector_cleanup(connector);
kfree(connector);
}
@@ -281,8 +280,6 @@ void cdv_intel_crt_init(struct drm_device *dev,
drm_connector_helper_add(connector,
&cdv_intel_crt_connector_helper_funcs);
- drm_connector_register(connector);
-
return;
failed_ddc:
drm_encoder_cleanup(&gma_encoder->base);
diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c b/drivers/gpu/drm/gma500/cdv_intel_dp.c
index f562e91337c7..3fba9d4e785d 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_dp.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c
@@ -1866,7 +1866,6 @@ cdv_intel_dp_destroy(struct drm_connector *connector)
intel_dp->panel_fixed_mode = NULL;
}
i2c_del_adapter(&intel_dp->adapter);
- drm_connector_unregister(connector);
drm_connector_cleanup(connector);
kfree(connector);
}
@@ -1990,8 +1989,6 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev
connector->interlace_allowed = false;
connector->doublescan_allowed = false;
- drm_connector_register(connector);
-
/* Set up the DDC bus. */
switch (output_reg) {
case DP_B:
diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
index e525689f84f0..e0d4c49b3c92 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
@@ -245,7 +245,6 @@ static void cdv_hdmi_destroy(struct drm_connector *connector)
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
psb_intel_i2c_destroy(gma_encoder->i2c_bus);
- drm_connector_unregister(connector);
drm_connector_cleanup(connector);
kfree(connector);
}
@@ -352,7 +351,6 @@ void cdv_hdmi_init(struct drm_device *dev,
hdmi_priv->hdmi_i2c_adapter = &(gma_encoder->i2c_bus->adapter);
hdmi_priv->dev = dev;
- drm_connector_register(connector);
return;
failed_ddc:
diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
index 9e1cdb11023c..851a3cc4653e 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
@@ -329,7 +329,6 @@ static void cdv_intel_lvds_destroy(struct drm_connector *connector)
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
psb_intel_i2c_destroy(gma_encoder->i2c_bus);
- drm_connector_unregister(connector);
drm_connector_cleanup(connector);
kfree(connector);
}
@@ -647,7 +646,6 @@ void cdv_intel_lvds_init(struct drm_device *dev,
out:
mutex_unlock(&dev->mode_config.mutex);
- drm_connector_register(connector);
return;
failed_find:
diff --git a/drivers/gpu/drm/gma500/oaktrail_hdmi.c b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
index 6eef60a5ac27..b5946a1cdcd5 100644
--- a/drivers/gpu/drm/gma500/oaktrail_hdmi.c
+++ b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
@@ -654,7 +654,6 @@ void oaktrail_hdmi_init(struct drm_device *dev,
connector->display_info.subpixel_order = SubPixelHorizontalRGB;
connector->interlace_allowed = false;
connector->doublescan_allowed = false;
- drm_connector_register(connector);
dev_info(dev->dev, "HDMI initialised.\n");
return;
diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c
index 04852dbc7fb3..aed5de8f8245 100644
--- a/drivers/gpu/drm/gma500/oaktrail_lvds.c
+++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c
@@ -401,7 +401,6 @@ void oaktrail_lvds_init(struct drm_device *dev,
out:
mutex_unlock(&dev->mode_config.mutex);
- drm_connector_register(connector);
return;
failed_find:
diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c
index ac97e0d3c7dd..ec8f0b504ccc 100644
--- a/drivers/gpu/drm/gma500/psb_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c
@@ -525,7 +525,6 @@ void psb_intel_lvds_destroy(struct drm_connector *connector)
struct psb_intel_lvds_priv *lvds_priv = gma_encoder->dev_priv;
psb_intel_i2c_destroy(lvds_priv->ddc_bus);
- drm_connector_unregister(connector);
drm_connector_cleanup(connector);
kfree(connector);
}
@@ -782,7 +781,6 @@ void psb_intel_lvds_init(struct drm_device *dev,
*/
out:
mutex_unlock(&dev->mode_config.mutex);
- drm_connector_register(connector);
return;
failed_find:
diff --git a/drivers/gpu/drm/gma500/psb_intel_sdvo.c b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
index 042c4392e676..5b72a759a182 100644
--- a/drivers/gpu/drm/gma500/psb_intel_sdvo.c
+++ b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
@@ -1542,7 +1542,6 @@ static int psb_intel_sdvo_get_modes(struct drm_connector *connector)
static void psb_intel_sdvo_destroy(struct drm_connector *connector)
{
- drm_connector_unregister(connector);
drm_connector_cleanup(connector);
kfree(connector);
}
@@ -1932,7 +1931,6 @@ psb_intel_sdvo_connector_init(struct psb_intel_sdvo_connector *connector,
connector->base.restore = psb_intel_sdvo_restore;
gma_connector_attach_encoder(&connector->base, &encoder->base);
- drm_connector_register(&connector->base.base);
}
static void
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 5/7] drm/gma500: Free the correct connector allocation
2022-03-22 13:17 [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Patrik Jakobsson
` (2 preceding siblings ...)
2022-03-22 13:17 ` [PATCH 4/7] drm/gma500: gma500 don't register non-hotpluggable connectors Patrik Jakobsson
@ 2022-03-22 13:17 ` Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 6/7] drm/gma500: Declare a few functions static Patrik Jakobsson
` (2 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 13:17 UTC (permalink / raw)
To: dri-devel; +Cc: daniel.vetter, sam, tzimmermann
The allocation is made for the gma_connector object so we must use the
same address when free()ing the object.
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
drivers/gpu/drm/gma500/cdv_intel_crt.c | 3 ++-
drivers/gpu/drm/gma500/cdv_intel_dp.c | 3 ++-
drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 3 ++-
drivers/gpu/drm/gma500/cdv_intel_lvds.c | 3 ++-
drivers/gpu/drm/gma500/psb_intel_lvds.c | 3 ++-
drivers/gpu/drm/gma500/psb_intel_sdvo.c | 4 +++-
6 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c
index 1ae0fbbda0eb..6bcd18c63c31 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_crt.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c
@@ -191,11 +191,12 @@ static enum drm_connector_status cdv_intel_crt_detect(
static void cdv_intel_crt_destroy(struct drm_connector *connector)
{
+ struct gma_connector *gma_connector = to_gma_connector(connector);
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
psb_intel_i2c_destroy(gma_encoder->ddc_bus);
drm_connector_cleanup(connector);
- kfree(connector);
+ kfree(gma_connector);
}
static int cdv_intel_crt_get_modes(struct drm_connector *connector)
diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c b/drivers/gpu/drm/gma500/cdv_intel_dp.c
index 3fba9d4e785d..72b1b2fc3c27 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_dp.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c
@@ -1857,6 +1857,7 @@ cdv_intel_dp_set_property(struct drm_connector *connector,
static void
cdv_intel_dp_destroy(struct drm_connector *connector)
{
+ struct gma_connector *gma_connector = to_gma_connector(connector);
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
struct cdv_intel_dp *intel_dp = gma_encoder->dev_priv;
@@ -1867,7 +1868,7 @@ cdv_intel_dp_destroy(struct drm_connector *connector)
}
i2c_del_adapter(&intel_dp->adapter);
drm_connector_cleanup(connector);
- kfree(connector);
+ kfree(gma_connector);
}
static const struct drm_encoder_helper_funcs cdv_intel_dp_helper_funcs = {
diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
index e0d4c49b3c92..8987e555e113 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
@@ -242,11 +242,12 @@ static enum drm_mode_status cdv_hdmi_mode_valid(struct drm_connector *connector,
static void cdv_hdmi_destroy(struct drm_connector *connector)
{
+ struct gma_connector *gma_connector = to_gma_connector(connector);
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
psb_intel_i2c_destroy(gma_encoder->i2c_bus);
drm_connector_cleanup(connector);
- kfree(connector);
+ kfree(gma_connector);
}
static const struct drm_encoder_helper_funcs cdv_hdmi_helper_funcs = {
diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
index 851a3cc4653e..98d9f5483a7c 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
@@ -326,11 +326,12 @@ static int cdv_intel_lvds_get_modes(struct drm_connector *connector)
*/
static void cdv_intel_lvds_destroy(struct drm_connector *connector)
{
+ struct gma_connector *gma_connector = to_gma_connector(connector);
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
psb_intel_i2c_destroy(gma_encoder->i2c_bus);
drm_connector_cleanup(connector);
- kfree(connector);
+ kfree(gma_connector);
}
static int cdv_intel_lvds_set_property(struct drm_connector *connector,
diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c
index ec8f0b504ccc..cad00380b386 100644
--- a/drivers/gpu/drm/gma500/psb_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c
@@ -521,12 +521,13 @@ static int psb_intel_lvds_get_modes(struct drm_connector *connector)
*/
void psb_intel_lvds_destroy(struct drm_connector *connector)
{
+ struct gma_connector *gma_connector = to_gma_connector(connector);
struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
struct psb_intel_lvds_priv *lvds_priv = gma_encoder->dev_priv;
psb_intel_i2c_destroy(lvds_priv->ddc_bus);
drm_connector_cleanup(connector);
- kfree(connector);
+ kfree(gma_connector);
}
int psb_intel_lvds_set_property(struct drm_connector *connector,
diff --git a/drivers/gpu/drm/gma500/psb_intel_sdvo.c b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
index 5b72a759a182..a85aace25548 100644
--- a/drivers/gpu/drm/gma500/psb_intel_sdvo.c
+++ b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
@@ -1542,8 +1542,10 @@ static int psb_intel_sdvo_get_modes(struct drm_connector *connector)
static void psb_intel_sdvo_destroy(struct drm_connector *connector)
{
+ struct gma_connector *gma_connector = to_gma_connector(connector);
+
drm_connector_cleanup(connector);
- kfree(connector);
+ kfree(gma_connector);
}
static bool psb_intel_sdvo_detect_hdmi_audio(struct drm_connector *connector)
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 6/7] drm/gma500: Declare a few functions static
2022-03-22 13:17 [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Patrik Jakobsson
` (3 preceding siblings ...)
2022-03-22 13:17 ` [PATCH 5/7] drm/gma500: Free the correct connector allocation Patrik Jakobsson
@ 2022-03-22 13:17 ` Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 7/7] drm/gma500: Add crtc prefix to vblank functions Patrik Jakobsson
2022-03-22 19:30 ` [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Thomas Zimmermann
6 siblings, 0 replies; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 13:17 UTC (permalink / raw)
To: dri-devel; +Cc: daniel.vetter, sam, tzimmermann
These functions are not used outside of their file scope so can be
declared as static.
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
drivers/gpu/drm/gma500/gma_display.c | 15 +++++++--------
drivers/gpu/drm/gma500/psb_drv.c | 2 +-
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
index e8157464d9eb..369bc1f751cb 100644
--- a/drivers/gpu/drm/gma500/gma_display.c
+++ b/drivers/gpu/drm/gma500/gma_display.c
@@ -176,9 +176,9 @@ void gma_crtc_load_lut(struct drm_crtc *crtc)
}
}
-int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
- u32 size,
- struct drm_modeset_acquire_ctx *ctx)
+static int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+ u16 *blue, u32 size,
+ struct drm_modeset_acquire_ctx *ctx)
{
gma_crtc_load_lut(crtc);
@@ -323,10 +323,9 @@ void gma_crtc_dpms(struct drm_crtc *crtc, int mode)
REG_WRITE(DSPARB, 0x3F3E);
}
-int gma_crtc_cursor_set(struct drm_crtc *crtc,
- struct drm_file *file_priv,
- uint32_t handle,
- uint32_t width, uint32_t height)
+static int gma_crtc_cursor_set(struct drm_crtc *crtc,
+ struct drm_file *file_priv, uint32_t handle,
+ uint32_t width, uint32_t height)
{
struct drm_device *dev = crtc->dev;
struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
@@ -439,7 +438,7 @@ int gma_crtc_cursor_set(struct drm_crtc *crtc,
return ret;
}
-int gma_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
+static int gma_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
{
struct drm_device *dev = crtc->dev;
struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index bb0e3288e35b..2aff54d505e2 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -100,7 +100,7 @@ static const struct drm_ioctl_desc psb_ioctls[] = {
*
* Soft reset the graphics engine and then reload the necessary registers.
*/
-void psb_spank(struct drm_psb_private *dev_priv)
+static void psb_spank(struct drm_psb_private *dev_priv)
{
PSB_WSGX32(_PSB_CS_RESET_BIF_RESET | _PSB_CS_RESET_DPM_RESET |
_PSB_CS_RESET_TA_RESET | _PSB_CS_RESET_USE_RESET |
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 7/7] drm/gma500: Add crtc prefix to vblank functions
2022-03-22 13:17 [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Patrik Jakobsson
` (4 preceding siblings ...)
2022-03-22 13:17 ` [PATCH 6/7] drm/gma500: Declare a few functions static Patrik Jakobsson
@ 2022-03-22 13:17 ` Patrik Jakobsson
2022-03-22 19:36 ` Thomas Zimmermann
2022-03-22 19:30 ` [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Thomas Zimmermann
6 siblings, 1 reply; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 13:17 UTC (permalink / raw)
To: dri-devel; +Cc: daniel.vetter, sam, tzimmermann
These functions operate on a crtc and should be prefixed properly.
Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
drivers/gpu/drm/gma500/gma_display.c | 6 +++---
drivers/gpu/drm/gma500/psb_irq.c | 6 +++---
drivers/gpu/drm/gma500/psb_irq.h | 6 +++---
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
index 369bc1f751cb..34ec3fca09ba 100644
--- a/drivers/gpu/drm/gma500/gma_display.c
+++ b/drivers/gpu/drm/gma500/gma_display.c
@@ -575,9 +575,9 @@ const struct drm_crtc_funcs gma_crtc_funcs = {
.set_config = gma_crtc_set_config,
.destroy = gma_crtc_destroy,
.page_flip = gma_crtc_page_flip,
- .enable_vblank = gma_enable_vblank,
- .disable_vblank = gma_disable_vblank,
- .get_vblank_counter = gma_get_vblank_counter,
+ .enable_vblank = gma_crtc_enable_vblank,
+ .disable_vblank = gma_crtc_disable_vblank,
+ .get_vblank_counter = gma_crtc_get_vblank_counter,
};
/*
diff --git a/drivers/gpu/drm/gma500/psb_irq.c b/drivers/gpu/drm/gma500/psb_irq.c
index 2e8ded532930..e6e6d61bbeab 100644
--- a/drivers/gpu/drm/gma500/psb_irq.c
+++ b/drivers/gpu/drm/gma500/psb_irq.c
@@ -371,7 +371,7 @@ void gma_irq_uninstall(struct drm_device *dev)
free_irq(pdev->irq, dev);
}
-int gma_enable_vblank(struct drm_crtc *crtc)
+int gma_crtc_enable_vblank(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
unsigned int pipe = crtc->index;
@@ -404,7 +404,7 @@ int gma_enable_vblank(struct drm_crtc *crtc)
return 0;
}
-void gma_disable_vblank(struct drm_crtc *crtc)
+void gma_crtc_disable_vblank(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
unsigned int pipe = crtc->index;
@@ -428,7 +428,7 @@ void gma_disable_vblank(struct drm_crtc *crtc)
/* Called from drm generic code, passed a 'crtc', which
* we use as a pipe index
*/
-u32 gma_get_vblank_counter(struct drm_crtc *crtc)
+u32 gma_crtc_get_vblank_counter(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
unsigned int pipe = crtc->index;
diff --git a/drivers/gpu/drm/gma500/psb_irq.h b/drivers/gpu/drm/gma500/psb_irq.h
index c22878914f5b..b51e395194ff 100644
--- a/drivers/gpu/drm/gma500/psb_irq.h
+++ b/drivers/gpu/drm/gma500/psb_irq.h
@@ -20,9 +20,9 @@ void gma_irq_postinstall(struct drm_device *dev);
int gma_irq_install(struct drm_device *dev, unsigned int irq);
void gma_irq_uninstall(struct drm_device *dev);
-int gma_enable_vblank(struct drm_crtc *crtc);
-void gma_disable_vblank(struct drm_crtc *crtc);
-u32 gma_get_vblank_counter(struct drm_crtc *crtc);
+int gma_crtc_enable_vblank(struct drm_crtc *crtc);
+void gma_crtc_disable_vblank(struct drm_crtc *crtc);
+u32 gma_crtc_get_vblank_counter(struct drm_crtc *crtc);
void gma_enable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask);
void gma_disable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask);
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 3/7] drm/gma500: Make use of the drm connector iterator
2022-03-22 13:17 ` [PATCH 3/7] drm/gma500: Make use of the drm connector iterator Patrik Jakobsson
@ 2022-03-22 14:39 ` Daniel Vetter
2022-03-22 15:46 ` Patrik Jakobsson
0 siblings, 1 reply; 15+ messages in thread
From: Daniel Vetter @ 2022-03-22 14:39 UTC (permalink / raw)
To: Patrik Jakobsson; +Cc: daniel.vetter, sam, tzimmermann, dri-devel
On Tue, Mar 22, 2022 at 02:17:38PM +0100, Patrik Jakobsson wrote:
> This makes sure we're using proper locking when iterating the list of
> connectors.
>
> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Note that this is only needed if your driver deals with hotpluggable
connectors. Since gma500 doesn't, not really a need to convert this over,
but it also doesn't hurt.
If the kerneldoc doesn't explain this, maybe we should add it? Care for a
patch.
Either way on the entire series:
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
I'll leave it up to you whether you want to push this one too or not.
-Daniel
> ---
> drivers/gpu/drm/gma500/cdv_device.c | 10 ++++++--
> drivers/gpu/drm/gma500/cdv_intel_display.c | 9 +++++--
> drivers/gpu/drm/gma500/framebuffer.c | 6 +++--
> drivers/gpu/drm/gma500/gma_display.c | 16 ++++++++-----
> drivers/gpu/drm/gma500/oaktrail_crtc.c | 17 ++++++++-----
> drivers/gpu/drm/gma500/oaktrail_lvds.c | 15 ++++++------
> drivers/gpu/drm/gma500/psb_device.c | 28 +++++++++++++++-------
> drivers/gpu/drm/gma500/psb_drv.c | 10 ++++----
> drivers/gpu/drm/gma500/psb_intel_display.c | 15 ++++++++----
> 9 files changed, 84 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c
> index f854f58bcbb3..dd32b484dd82 100644
> --- a/drivers/gpu/drm/gma500/cdv_device.c
> +++ b/drivers/gpu/drm/gma500/cdv_device.c
> @@ -262,6 +262,7 @@ static int cdv_save_display_registers(struct drm_device *dev)
> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> struct pci_dev *pdev = to_pci_dev(dev->dev);
> struct psb_save_area *regs = &dev_priv->regs;
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
>
> dev_dbg(dev->dev, "Saving GPU registers.\n");
> @@ -298,8 +299,10 @@ static int cdv_save_display_registers(struct drm_device *dev)
> regs->cdv.saveIER = REG_READ(PSB_INT_ENABLE_R);
> regs->cdv.saveIMR = REG_READ(PSB_INT_MASK_R);
>
> - list_for_each_entry(connector, &dev->mode_config.connector_list, head)
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter)
> connector->funcs->dpms(connector, DRM_MODE_DPMS_OFF);
> + drm_connector_list_iter_end(&conn_iter);
>
> return 0;
> }
> @@ -317,6 +320,7 @@ static int cdv_restore_display_registers(struct drm_device *dev)
> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> struct pci_dev *pdev = to_pci_dev(dev->dev);
> struct psb_save_area *regs = &dev_priv->regs;
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
> u32 temp;
>
> @@ -373,8 +377,10 @@ static int cdv_restore_display_registers(struct drm_device *dev)
>
> drm_mode_config_reset(dev);
>
> - list_for_each_entry(connector, &dev->mode_config.connector_list, head)
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter)
> connector->funcs->dpms(connector, DRM_MODE_DPMS_ON);
> + drm_connector_list_iter_end(&conn_iter);
>
> /* Resume the modeset for every activated CRTC */
> drm_helper_resume_force_mode(dev);
> diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c
> index 94ebc48a4349..0c3ddcdc29dc 100644
> --- a/drivers/gpu/drm/gma500/cdv_intel_display.c
> +++ b/drivers/gpu/drm/gma500/cdv_intel_display.c
> @@ -584,13 +584,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
> bool ok;
> bool is_lvds = false;
> bool is_dp = false;
> - struct drm_mode_config *mode_config = &dev->mode_config;
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
> const struct gma_limit_t *limit;
> u32 ddi_select = 0;
> bool is_edp = false;
>
> - list_for_each_entry(connector, &mode_config->connector_list, head) {
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> struct gma_encoder *gma_encoder =
> gma_attached_encoder(connector);
>
> @@ -613,10 +614,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
> is_edp = true;
> break;
> default:
> + drm_connector_list_iter_end(&conn_iter);
> DRM_ERROR("invalid output type.\n");
> return 0;
> }
> +
> + break;
> }
> + drm_connector_list_iter_end(&conn_iter);
>
> if (dev_priv->dplla_96mhz)
> /* low-end sku, 96/100 mhz */
> diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
> index 2b99c996fdc2..0ac6ea5fd3a1 100644
> --- a/drivers/gpu/drm/gma500/framebuffer.c
> +++ b/drivers/gpu/drm/gma500/framebuffer.c
> @@ -451,6 +451,7 @@ static const struct drm_mode_config_funcs psb_mode_funcs = {
> static void psb_setup_outputs(struct drm_device *dev)
> {
> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
>
> drm_mode_create_scaling_mode_property(dev);
> @@ -461,8 +462,8 @@ static void psb_setup_outputs(struct drm_device *dev)
> "backlight", 0, 100);
> dev_priv->ops->output_init(dev);
>
> - list_for_each_entry(connector, &dev->mode_config.connector_list,
> - head) {
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
> struct drm_encoder *encoder = &gma_encoder->base;
> int crtc_mask = 0, clone_mask = 0;
> @@ -505,6 +506,7 @@ static void psb_setup_outputs(struct drm_device *dev)
> encoder->possible_clones =
> gma_connector_clones(dev, clone_mask);
> }
> + drm_connector_list_iter_end(&conn_iter);
> }
>
> void psb_modeset_init(struct drm_device *dev)
> diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
> index 1d7964c339f4..e8157464d9eb 100644
> --- a/drivers/gpu/drm/gma500/gma_display.c
> +++ b/drivers/gpu/drm/gma500/gma_display.c
> @@ -27,17 +27,21 @@
> bool gma_pipe_has_type(struct drm_crtc *crtc, int type)
> {
> struct drm_device *dev = crtc->dev;
> - struct drm_mode_config *mode_config = &dev->mode_config;
> - struct drm_connector *l_entry;
> + struct drm_connector_list_iter conn_iter;
> + struct drm_connector *connector;
>
> - list_for_each_entry(l_entry, &mode_config->connector_list, head) {
> - if (l_entry->encoder && l_entry->encoder->crtc == crtc) {
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> + if (connector->encoder && connector->encoder->crtc == crtc) {
> struct gma_encoder *gma_encoder =
> - gma_attached_encoder(l_entry);
> - if (gma_encoder->type == type)
> + gma_attached_encoder(connector);
> + if (gma_encoder->type == type) {
> + drm_connector_list_iter_end(&conn_iter);
> return true;
> + }
> }
> }
> + drm_connector_list_iter_end(&conn_iter);
>
> return false;
> }
> diff --git a/drivers/gpu/drm/gma500/oaktrail_crtc.c b/drivers/gpu/drm/gma500/oaktrail_crtc.c
> index 36c7c2686c90..873c17cf8fb4 100644
> --- a/drivers/gpu/drm/gma500/oaktrail_crtc.c
> +++ b/drivers/gpu/drm/gma500/oaktrail_crtc.c
> @@ -372,9 +372,9 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
> bool ok, is_sdvo = false;
> bool is_lvds = false;
> bool is_mipi = false;
> - struct drm_mode_config *mode_config = &dev->mode_config;
> struct gma_encoder *gma_encoder = NULL;
> uint64_t scalingType = DRM_MODE_SCALE_FULLSCREEN;
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
> int i;
> int need_aux = gma_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ? 1 : 0;
> @@ -392,7 +392,8 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
> adjusted_mode,
> sizeof(struct drm_display_mode));
>
> - list_for_each_entry(connector, &mode_config->connector_list, head) {
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> if (!connector->encoder || connector->encoder->crtc != crtc)
> continue;
>
> @@ -409,8 +410,16 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
> is_mipi = true;
> break;
> }
> +
> + break;
> }
>
> + if (gma_encoder)
> + drm_object_property_get_value(&connector->base,
> + dev->mode_config.scaling_mode_property, &scalingType);
> +
> + drm_connector_list_iter_end(&conn_iter);
> +
> /* Disable the VGA plane that we never use */
> for (i = 0; i <= need_aux; i++)
> REG_WRITE_WITH_AUX(VGACNTRL, VGA_DISP_DISABLE, i);
> @@ -424,10 +433,6 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
> (mode->crtc_vdisplay - 1), i);
> }
>
> - if (gma_encoder)
> - drm_object_property_get_value(&connector->base,
> - dev->mode_config.scaling_mode_property, &scalingType);
> -
> if (scalingType == DRM_MODE_SCALE_NO_SCALE) {
> /* Moorestown doesn't have register support for centering so
> * we need to mess with the h/vblank and h/vsync start and
> diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c
> index 28b995ef2844..04852dbc7fb3 100644
> --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c
> +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c
> @@ -85,7 +85,7 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
> struct drm_device *dev = encoder->dev;
> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev;
> - struct drm_mode_config *mode_config = &dev->mode_config;
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector = NULL;
> struct drm_crtc *crtc = encoder->crtc;
> u32 lvds_port;
> @@ -112,21 +112,22 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
> REG_WRITE(LVDS, lvds_port);
>
> /* Find the connector we're trying to set up */
> - list_for_each_entry(connector, &mode_config->connector_list, head) {
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> if (connector->encoder && connector->encoder->crtc == crtc)
> break;
> }
>
> - if (list_entry_is_head(connector, &mode_config->connector_list, head)) {
> + if (!connector) {
> + drm_connector_list_iter_end(&conn_iter);
> DRM_ERROR("Couldn't find connector when setting mode");
> gma_power_end(dev);
> return;
> }
>
> - drm_object_property_get_value(
> - &connector->base,
> - dev->mode_config.scaling_mode_property,
> - &v);
> + drm_object_property_get_value( &connector->base,
> + dev->mode_config.scaling_mode_property, &v);
> + drm_connector_list_iter_end(&conn_iter);
>
> if (v == DRM_MODE_SCALE_NO_SCALE)
> REG_WRITE(PFIT_CONTROL, 0);
> diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c
> index 59f325165667..71534f4ca834 100644
> --- a/drivers/gpu/drm/gma500/psb_device.c
> +++ b/drivers/gpu/drm/gma500/psb_device.c
> @@ -168,8 +168,10 @@ static void psb_init_pm(struct drm_device *dev)
> static int psb_save_display_registers(struct drm_device *dev)
> {
> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> + struct gma_connector *gma_connector;
> struct drm_crtc *crtc;
> - struct gma_connector *connector;
> + struct drm_connector_list_iter conn_iter;
> + struct drm_connector *connector;
> struct psb_state *regs = &dev_priv->regs.psb;
>
> /* Display arbitration control + watermarks */
> @@ -189,9 +191,13 @@ static int psb_save_display_registers(struct drm_device *dev)
> dev_priv->ops->save_crtc(crtc);
> }
>
> - list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
> - if (connector->save)
> - connector->save(&connector->base);
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> + gma_connector = to_gma_connector(connector);
> + if (gma_connector->save)
> + gma_connector->save(connector);
> + }
> + drm_connector_list_iter_end(&conn_iter);
>
> drm_modeset_unlock_all(dev);
> return 0;
> @@ -206,8 +212,10 @@ static int psb_save_display_registers(struct drm_device *dev)
> static int psb_restore_display_registers(struct drm_device *dev)
> {
> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> + struct gma_connector *gma_connector;
> struct drm_crtc *crtc;
> - struct gma_connector *connector;
> + struct drm_connector_list_iter conn_iter;
> + struct drm_connector *connector;
> struct psb_state *regs = &dev_priv->regs.psb;
>
> /* Display arbitration + watermarks */
> @@ -228,9 +236,13 @@ static int psb_restore_display_registers(struct drm_device *dev)
> if (drm_helper_crtc_in_use(crtc))
> dev_priv->ops->restore_crtc(crtc);
>
> - list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
> - if (connector->restore)
> - connector->restore(&connector->base);
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> + gma_connector = to_gma_connector(connector);
> + if (gma_connector->restore)
> + gma_connector->restore(connector);
> + }
> + drm_connector_list_iter_end(&conn_iter);
>
> drm_modeset_unlock_all(dev);
> return 0;
> diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
> index b231fddb8817..bb0e3288e35b 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.c
> +++ b/drivers/gpu/drm/gma500/psb_drv.c
> @@ -236,10 +236,11 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> unsigned long resource_start, resource_len;
> unsigned long irqflags;
> - int ret = -ENOMEM;
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
> struct gma_encoder *gma_encoder;
> struct psb_gtt *pg;
> + int ret = -ENOMEM;
>
> /* initializing driver private data */
>
> @@ -390,9 +391,9 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
> psb_fbdev_init(dev);
> drm_kms_helper_poll_init(dev);
>
> - /* Only add backlight support if we have LVDS output */
> - list_for_each_entry(connector, &dev->mode_config.connector_list,
> - head) {
> + /* Only add backlight support if we have LVDS or MIPI output */
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> gma_encoder = gma_attached_encoder(connector);
>
> switch (gma_encoder->type) {
> @@ -402,6 +403,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
> break;
> }
> }
> + drm_connector_list_iter_end(&conn_iter);
>
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
> index a99859b5b13a..fb8234f4d128 100644
> --- a/drivers/gpu/drm/gma500/psb_intel_display.c
> +++ b/drivers/gpu/drm/gma500/psb_intel_display.c
> @@ -106,7 +106,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
> u32 dpll = 0, fp = 0, dspcntr, pipeconf;
> bool ok, is_sdvo = false;
> bool is_lvds = false, is_tv = false;
> - struct drm_mode_config *mode_config = &dev->mode_config;
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
> const struct gma_limit_t *limit;
>
> @@ -116,7 +116,8 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
> return 0;
> }
>
> - list_for_each_entry(connector, &mode_config->connector_list, head) {
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
>
> if (!connector->encoder
> @@ -135,6 +136,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
> break;
> }
> }
> + drm_connector_list_iter_end(&conn_iter);
>
> refclk = 96000;
>
> @@ -534,16 +536,19 @@ struct drm_crtc *psb_intel_get_crtc_from_pipe(struct drm_device *dev, int pipe)
>
> int gma_connector_clones(struct drm_device *dev, int type_mask)
> {
> - int index_mask = 0;
> + struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
> + int index_mask = 0;
> int entry = 0;
>
> - list_for_each_entry(connector, &dev->mode_config.connector_list,
> - head) {
> + drm_connector_list_iter_begin(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
> if (type_mask & (1 << gma_encoder->type))
> index_mask |= (1 << entry);
> entry++;
> }
> + drm_connector_list_iter_end(&conn_iter);
> +
> return index_mask;
> }
> --
> 2.35.1
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/7] drm/gma500: Make use of the drm connector iterator
2022-03-22 14:39 ` Daniel Vetter
@ 2022-03-22 15:46 ` Patrik Jakobsson
2022-03-22 19:34 ` Thomas Zimmermann
0 siblings, 1 reply; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 15:46 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Daniel Vetter, Sam Ravnborg, Thomas Zimmermann, dri-devel
On Tue, Mar 22, 2022 at 3:39 PM Daniel Vetter <daniel@ffwll.ch> wrote:
>
> On Tue, Mar 22, 2022 at 02:17:38PM +0100, Patrik Jakobsson wrote:
> > This makes sure we're using proper locking when iterating the list of
> > connectors.
> >
> > Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
>
> Note that this is only needed if your driver deals with hotpluggable
> connectors. Since gma500 doesn't, not really a need to convert this over,
> but it also doesn't hurt.
Good point. Not sure but I think there is a slight possibility that
Cedarview can support DP MST. If someone adds support for DP MST then
this code would make sense. I was never able to exercise the DP code
because I couldn't find an eDP cable that fits the Intel DN2800MT (my
only device with DP). Do you happen to know what the 40-pin connector
is called? Perhaps Intel has some standard for eDP connectors?
>
> If the kerneldoc doesn't explain this, maybe we should add it? Care for a
> patch.
I didn't see it being mentioned anywhere. I'll send a patch.
>
> Either way on the entire series:
>
> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Thanks for having a look.
>
> I'll leave it up to you whether you want to push this one too or not.
> -Daniel
>
> > ---
> > drivers/gpu/drm/gma500/cdv_device.c | 10 ++++++--
> > drivers/gpu/drm/gma500/cdv_intel_display.c | 9 +++++--
> > drivers/gpu/drm/gma500/framebuffer.c | 6 +++--
> > drivers/gpu/drm/gma500/gma_display.c | 16 ++++++++-----
> > drivers/gpu/drm/gma500/oaktrail_crtc.c | 17 ++++++++-----
> > drivers/gpu/drm/gma500/oaktrail_lvds.c | 15 ++++++------
> > drivers/gpu/drm/gma500/psb_device.c | 28 +++++++++++++++-------
> > drivers/gpu/drm/gma500/psb_drv.c | 10 ++++----
> > drivers/gpu/drm/gma500/psb_intel_display.c | 15 ++++++++----
> > 9 files changed, 84 insertions(+), 42 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c
> > index f854f58bcbb3..dd32b484dd82 100644
> > --- a/drivers/gpu/drm/gma500/cdv_device.c
> > +++ b/drivers/gpu/drm/gma500/cdv_device.c
> > @@ -262,6 +262,7 @@ static int cdv_save_display_registers(struct drm_device *dev)
> > struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> > struct pci_dev *pdev = to_pci_dev(dev->dev);
> > struct psb_save_area *regs = &dev_priv->regs;
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector;
> >
> > dev_dbg(dev->dev, "Saving GPU registers.\n");
> > @@ -298,8 +299,10 @@ static int cdv_save_display_registers(struct drm_device *dev)
> > regs->cdv.saveIER = REG_READ(PSB_INT_ENABLE_R);
> > regs->cdv.saveIMR = REG_READ(PSB_INT_MASK_R);
> >
> > - list_for_each_entry(connector, &dev->mode_config.connector_list, head)
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter)
> > connector->funcs->dpms(connector, DRM_MODE_DPMS_OFF);
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > return 0;
> > }
> > @@ -317,6 +320,7 @@ static int cdv_restore_display_registers(struct drm_device *dev)
> > struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> > struct pci_dev *pdev = to_pci_dev(dev->dev);
> > struct psb_save_area *regs = &dev_priv->regs;
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector;
> > u32 temp;
> >
> > @@ -373,8 +377,10 @@ static int cdv_restore_display_registers(struct drm_device *dev)
> >
> > drm_mode_config_reset(dev);
> >
> > - list_for_each_entry(connector, &dev->mode_config.connector_list, head)
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter)
> > connector->funcs->dpms(connector, DRM_MODE_DPMS_ON);
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > /* Resume the modeset for every activated CRTC */
> > drm_helper_resume_force_mode(dev);
> > diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c
> > index 94ebc48a4349..0c3ddcdc29dc 100644
> > --- a/drivers/gpu/drm/gma500/cdv_intel_display.c
> > +++ b/drivers/gpu/drm/gma500/cdv_intel_display.c
> > @@ -584,13 +584,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
> > bool ok;
> > bool is_lvds = false;
> > bool is_dp = false;
> > - struct drm_mode_config *mode_config = &dev->mode_config;
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector;
> > const struct gma_limit_t *limit;
> > u32 ddi_select = 0;
> > bool is_edp = false;
> >
> > - list_for_each_entry(connector, &mode_config->connector_list, head) {
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > struct gma_encoder *gma_encoder =
> > gma_attached_encoder(connector);
> >
> > @@ -613,10 +614,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
> > is_edp = true;
> > break;
> > default:
> > + drm_connector_list_iter_end(&conn_iter);
> > DRM_ERROR("invalid output type.\n");
> > return 0;
> > }
> > +
> > + break;
> > }
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > if (dev_priv->dplla_96mhz)
> > /* low-end sku, 96/100 mhz */
> > diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
> > index 2b99c996fdc2..0ac6ea5fd3a1 100644
> > --- a/drivers/gpu/drm/gma500/framebuffer.c
> > +++ b/drivers/gpu/drm/gma500/framebuffer.c
> > @@ -451,6 +451,7 @@ static const struct drm_mode_config_funcs psb_mode_funcs = {
> > static void psb_setup_outputs(struct drm_device *dev)
> > {
> > struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector;
> >
> > drm_mode_create_scaling_mode_property(dev);
> > @@ -461,8 +462,8 @@ static void psb_setup_outputs(struct drm_device *dev)
> > "backlight", 0, 100);
> > dev_priv->ops->output_init(dev);
> >
> > - list_for_each_entry(connector, &dev->mode_config.connector_list,
> > - head) {
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
> > struct drm_encoder *encoder = &gma_encoder->base;
> > int crtc_mask = 0, clone_mask = 0;
> > @@ -505,6 +506,7 @@ static void psb_setup_outputs(struct drm_device *dev)
> > encoder->possible_clones =
> > gma_connector_clones(dev, clone_mask);
> > }
> > + drm_connector_list_iter_end(&conn_iter);
> > }
> >
> > void psb_modeset_init(struct drm_device *dev)
> > diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
> > index 1d7964c339f4..e8157464d9eb 100644
> > --- a/drivers/gpu/drm/gma500/gma_display.c
> > +++ b/drivers/gpu/drm/gma500/gma_display.c
> > @@ -27,17 +27,21 @@
> > bool gma_pipe_has_type(struct drm_crtc *crtc, int type)
> > {
> > struct drm_device *dev = crtc->dev;
> > - struct drm_mode_config *mode_config = &dev->mode_config;
> > - struct drm_connector *l_entry;
> > + struct drm_connector_list_iter conn_iter;
> > + struct drm_connector *connector;
> >
> > - list_for_each_entry(l_entry, &mode_config->connector_list, head) {
> > - if (l_entry->encoder && l_entry->encoder->crtc == crtc) {
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > + if (connector->encoder && connector->encoder->crtc == crtc) {
> > struct gma_encoder *gma_encoder =
> > - gma_attached_encoder(l_entry);
> > - if (gma_encoder->type == type)
> > + gma_attached_encoder(connector);
> > + if (gma_encoder->type == type) {
> > + drm_connector_list_iter_end(&conn_iter);
> > return true;
> > + }
> > }
> > }
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > return false;
> > }
> > diff --git a/drivers/gpu/drm/gma500/oaktrail_crtc.c b/drivers/gpu/drm/gma500/oaktrail_crtc.c
> > index 36c7c2686c90..873c17cf8fb4 100644
> > --- a/drivers/gpu/drm/gma500/oaktrail_crtc.c
> > +++ b/drivers/gpu/drm/gma500/oaktrail_crtc.c
> > @@ -372,9 +372,9 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
> > bool ok, is_sdvo = false;
> > bool is_lvds = false;
> > bool is_mipi = false;
> > - struct drm_mode_config *mode_config = &dev->mode_config;
> > struct gma_encoder *gma_encoder = NULL;
> > uint64_t scalingType = DRM_MODE_SCALE_FULLSCREEN;
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector;
> > int i;
> > int need_aux = gma_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ? 1 : 0;
> > @@ -392,7 +392,8 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
> > adjusted_mode,
> > sizeof(struct drm_display_mode));
> >
> > - list_for_each_entry(connector, &mode_config->connector_list, head) {
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > if (!connector->encoder || connector->encoder->crtc != crtc)
> > continue;
> >
> > @@ -409,8 +410,16 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
> > is_mipi = true;
> > break;
> > }
> > +
> > + break;
> > }
> >
> > + if (gma_encoder)
> > + drm_object_property_get_value(&connector->base,
> > + dev->mode_config.scaling_mode_property, &scalingType);
> > +
> > + drm_connector_list_iter_end(&conn_iter);
> > +
> > /* Disable the VGA plane that we never use */
> > for (i = 0; i <= need_aux; i++)
> > REG_WRITE_WITH_AUX(VGACNTRL, VGA_DISP_DISABLE, i);
> > @@ -424,10 +433,6 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
> > (mode->crtc_vdisplay - 1), i);
> > }
> >
> > - if (gma_encoder)
> > - drm_object_property_get_value(&connector->base,
> > - dev->mode_config.scaling_mode_property, &scalingType);
> > -
> > if (scalingType == DRM_MODE_SCALE_NO_SCALE) {
> > /* Moorestown doesn't have register support for centering so
> > * we need to mess with the h/vblank and h/vsync start and
> > diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c
> > index 28b995ef2844..04852dbc7fb3 100644
> > --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c
> > +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c
> > @@ -85,7 +85,7 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
> > struct drm_device *dev = encoder->dev;
> > struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> > struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev;
> > - struct drm_mode_config *mode_config = &dev->mode_config;
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector = NULL;
> > struct drm_crtc *crtc = encoder->crtc;
> > u32 lvds_port;
> > @@ -112,21 +112,22 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
> > REG_WRITE(LVDS, lvds_port);
> >
> > /* Find the connector we're trying to set up */
> > - list_for_each_entry(connector, &mode_config->connector_list, head) {
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > if (connector->encoder && connector->encoder->crtc == crtc)
> > break;
> > }
> >
> > - if (list_entry_is_head(connector, &mode_config->connector_list, head)) {
> > + if (!connector) {
> > + drm_connector_list_iter_end(&conn_iter);
> > DRM_ERROR("Couldn't find connector when setting mode");
> > gma_power_end(dev);
> > return;
> > }
> >
> > - drm_object_property_get_value(
> > - &connector->base,
> > - dev->mode_config.scaling_mode_property,
> > - &v);
> > + drm_object_property_get_value( &connector->base,
> > + dev->mode_config.scaling_mode_property, &v);
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > if (v == DRM_MODE_SCALE_NO_SCALE)
> > REG_WRITE(PFIT_CONTROL, 0);
> > diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c
> > index 59f325165667..71534f4ca834 100644
> > --- a/drivers/gpu/drm/gma500/psb_device.c
> > +++ b/drivers/gpu/drm/gma500/psb_device.c
> > @@ -168,8 +168,10 @@ static void psb_init_pm(struct drm_device *dev)
> > static int psb_save_display_registers(struct drm_device *dev)
> > {
> > struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> > + struct gma_connector *gma_connector;
> > struct drm_crtc *crtc;
> > - struct gma_connector *connector;
> > + struct drm_connector_list_iter conn_iter;
> > + struct drm_connector *connector;
> > struct psb_state *regs = &dev_priv->regs.psb;
> >
> > /* Display arbitration control + watermarks */
> > @@ -189,9 +191,13 @@ static int psb_save_display_registers(struct drm_device *dev)
> > dev_priv->ops->save_crtc(crtc);
> > }
> >
> > - list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
> > - if (connector->save)
> > - connector->save(&connector->base);
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > + gma_connector = to_gma_connector(connector);
> > + if (gma_connector->save)
> > + gma_connector->save(connector);
> > + }
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > drm_modeset_unlock_all(dev);
> > return 0;
> > @@ -206,8 +212,10 @@ static int psb_save_display_registers(struct drm_device *dev)
> > static int psb_restore_display_registers(struct drm_device *dev)
> > {
> > struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> > + struct gma_connector *gma_connector;
> > struct drm_crtc *crtc;
> > - struct gma_connector *connector;
> > + struct drm_connector_list_iter conn_iter;
> > + struct drm_connector *connector;
> > struct psb_state *regs = &dev_priv->regs.psb;
> >
> > /* Display arbitration + watermarks */
> > @@ -228,9 +236,13 @@ static int psb_restore_display_registers(struct drm_device *dev)
> > if (drm_helper_crtc_in_use(crtc))
> > dev_priv->ops->restore_crtc(crtc);
> >
> > - list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
> > - if (connector->restore)
> > - connector->restore(&connector->base);
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > + gma_connector = to_gma_connector(connector);
> > + if (gma_connector->restore)
> > + gma_connector->restore(connector);
> > + }
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > drm_modeset_unlock_all(dev);
> > return 0;
> > diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
> > index b231fddb8817..bb0e3288e35b 100644
> > --- a/drivers/gpu/drm/gma500/psb_drv.c
> > +++ b/drivers/gpu/drm/gma500/psb_drv.c
> > @@ -236,10 +236,11 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
> > struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
> > unsigned long resource_start, resource_len;
> > unsigned long irqflags;
> > - int ret = -ENOMEM;
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector;
> > struct gma_encoder *gma_encoder;
> > struct psb_gtt *pg;
> > + int ret = -ENOMEM;
> >
> > /* initializing driver private data */
> >
> > @@ -390,9 +391,9 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
> > psb_fbdev_init(dev);
> > drm_kms_helper_poll_init(dev);
> >
> > - /* Only add backlight support if we have LVDS output */
> > - list_for_each_entry(connector, &dev->mode_config.connector_list,
> > - head) {
> > + /* Only add backlight support if we have LVDS or MIPI output */
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > gma_encoder = gma_attached_encoder(connector);
> >
> > switch (gma_encoder->type) {
> > @@ -402,6 +403,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
> > break;
> > }
> > }
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > if (ret)
> > return ret;
> > diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
> > index a99859b5b13a..fb8234f4d128 100644
> > --- a/drivers/gpu/drm/gma500/psb_intel_display.c
> > +++ b/drivers/gpu/drm/gma500/psb_intel_display.c
> > @@ -106,7 +106,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
> > u32 dpll = 0, fp = 0, dspcntr, pipeconf;
> > bool ok, is_sdvo = false;
> > bool is_lvds = false, is_tv = false;
> > - struct drm_mode_config *mode_config = &dev->mode_config;
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector;
> > const struct gma_limit_t *limit;
> >
> > @@ -116,7 +116,8 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
> > return 0;
> > }
> >
> > - list_for_each_entry(connector, &mode_config->connector_list, head) {
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
> >
> > if (!connector->encoder
> > @@ -135,6 +136,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
> > break;
> > }
> > }
> > + drm_connector_list_iter_end(&conn_iter);
> >
> > refclk = 96000;
> >
> > @@ -534,16 +536,19 @@ struct drm_crtc *psb_intel_get_crtc_from_pipe(struct drm_device *dev, int pipe)
> >
> > int gma_connector_clones(struct drm_device *dev, int type_mask)
> > {
> > - int index_mask = 0;
> > + struct drm_connector_list_iter conn_iter;
> > struct drm_connector *connector;
> > + int index_mask = 0;
> > int entry = 0;
> >
> > - list_for_each_entry(connector, &dev->mode_config.connector_list,
> > - head) {
> > + drm_connector_list_iter_begin(dev, &conn_iter);
> > + drm_for_each_connector_iter(connector, &conn_iter) {
> > struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
> > if (type_mask & (1 << gma_encoder->type))
> > index_mask |= (1 << entry);
> > entry++;
> > }
> > + drm_connector_list_iter_end(&conn_iter);
> > +
> > return index_mask;
> > }
> > --
> > 2.35.1
> >
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init()
2022-03-22 13:17 [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Patrik Jakobsson
` (5 preceding siblings ...)
2022-03-22 13:17 ` [PATCH 7/7] drm/gma500: Add crtc prefix to vblank functions Patrik Jakobsson
@ 2022-03-22 19:30 ` Thomas Zimmermann
2022-03-22 19:32 ` Thomas Zimmermann
6 siblings, 1 reply; 15+ messages in thread
From: Thomas Zimmermann @ 2022-03-22 19:30 UTC (permalink / raw)
To: Patrik Jakobsson, dri-devel; +Cc: daniel.vetter, sam
[-- Attachment #1.1: Type: text/plain, Size: 1317 bytes --]
Hi Patrik
Am 22.03.22 um 14:17 schrieb Patrik Jakobsson:
> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
> ---
> drivers/gpu/drm/gma500/framebuffer.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
> index 45df9de22007..2b99c996fdc2 100644
> --- a/drivers/gpu/drm/gma500/framebuffer.c
> +++ b/drivers/gpu/drm/gma500/framebuffer.c
> @@ -514,7 +514,8 @@ void psb_modeset_init(struct drm_device *dev)
> struct pci_dev *pdev = to_pci_dev(dev->dev);
> int i;
>
> - drm_mode_config_init(dev);
> + if (drmm_mode_config_init(dev))
> + return;
This will fail without any notice. I suggest to return an error here or
at let psb_driver_load() fail.
Best regards
Thomas
>
> dev->mode_config.min_width = 0;
> dev->mode_config.min_height = 0;
> @@ -546,6 +547,5 @@ void psb_modeset_cleanup(struct drm_device *dev)
> if (dev_priv->modeset) {
> drm_kms_helper_poll_fini(dev);
> psb_fbdev_fini(dev);
> - drm_mode_config_cleanup(dev);
> }
> }
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init()
2022-03-22 19:30 ` [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Thomas Zimmermann
@ 2022-03-22 19:32 ` Thomas Zimmermann
2022-03-22 22:42 ` Patrik Jakobsson
0 siblings, 1 reply; 15+ messages in thread
From: Thomas Zimmermann @ 2022-03-22 19:32 UTC (permalink / raw)
To: Patrik Jakobsson, dri-devel; +Cc: daniel.vetter, sam
[-- Attachment #1.1: Type: text/plain, Size: 1567 bytes --]
Am 22.03.22 um 20:30 schrieb Thomas Zimmermann:
> Hi Patrik
>
> Am 22.03.22 um 14:17 schrieb Patrik Jakobsson:
>> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
>> ---
>> drivers/gpu/drm/gma500/framebuffer.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/gma500/framebuffer.c
>> b/drivers/gpu/drm/gma500/framebuffer.c
>> index 45df9de22007..2b99c996fdc2 100644
>> --- a/drivers/gpu/drm/gma500/framebuffer.c
>> +++ b/drivers/gpu/drm/gma500/framebuffer.c
>> @@ -514,7 +514,8 @@ void psb_modeset_init(struct drm_device *dev)
>> struct pci_dev *pdev = to_pci_dev(dev->dev);
>> int i;
>> - drm_mode_config_init(dev);
>> + if (drmm_mode_config_init(dev))
>> + return;
>
> This will fail without any notice. I suggest to return an error here or
> at let psb_driver_load() fail.
'and let psb_driver_load() fail'
>
> Best regards
> Thomas
>
>> dev->mode_config.min_width = 0;
>> dev->mode_config.min_height = 0;
>> @@ -546,6 +547,5 @@ void psb_modeset_cleanup(struct drm_device *dev)
>> if (dev_priv->modeset) {
>> drm_kms_helper_poll_fini(dev);
>> psb_fbdev_fini(dev);
>> - drm_mode_config_cleanup(dev);
>> }
>> }
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/7] drm/gma500: Make use of the drm connector iterator
2022-03-22 15:46 ` Patrik Jakobsson
@ 2022-03-22 19:34 ` Thomas Zimmermann
0 siblings, 0 replies; 15+ messages in thread
From: Thomas Zimmermann @ 2022-03-22 19:34 UTC (permalink / raw)
To: Patrik Jakobsson, Daniel Vetter; +Cc: Daniel Vetter, Sam Ravnborg, dri-devel
[-- Attachment #1.1: Type: text/plain, Size: 21226 bytes --]
Hi
Am 22.03.22 um 16:46 schrieb Patrik Jakobsson:
> On Tue, Mar 22, 2022 at 3:39 PM Daniel Vetter <daniel@ffwll.ch> wrote:
>>
>> On Tue, Mar 22, 2022 at 02:17:38PM +0100, Patrik Jakobsson wrote:
>>> This makes sure we're using proper locking when iterating the list of
>>> connectors.
>>>
>>> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
>>
>> Note that this is only needed if your driver deals with hotpluggable
>> connectors. Since gma500 doesn't, not really a need to convert this over,
>> but it also doesn't hurt.
I'd fix this if only for copy-pasters to not copy incorrect code. :)
>
> Good point. Not sure but I think there is a slight possibility that
> Cedarview can support DP MST. If someone adds support for DP MST then
> this code would make sense. I was never able to exercise the DP code
> because I couldn't find an eDP cable that fits the Intel DN2800MT (my
> only device with DP). Do you happen to know what the 40-pin connector
> is called? Perhaps Intel has some standard for eDP connectors?
>
>>
>> If the kerneldoc doesn't explain this, maybe we should add it? Care for a
>> patch.
>
> I didn't see it being mentioned anywhere. I'll send a patch.
>
>>
>> Either way on the entire series:
>>
>> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> Thanks for having a look.
>
>>
>> I'll leave it up to you whether you want to push this one too or not.
>> -Daniel
>>
>>> ---
>>> drivers/gpu/drm/gma500/cdv_device.c | 10 ++++++--
>>> drivers/gpu/drm/gma500/cdv_intel_display.c | 9 +++++--
>>> drivers/gpu/drm/gma500/framebuffer.c | 6 +++--
>>> drivers/gpu/drm/gma500/gma_display.c | 16 ++++++++-----
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c | 17 ++++++++-----
>>> drivers/gpu/drm/gma500/oaktrail_lvds.c | 15 ++++++------
>>> drivers/gpu/drm/gma500/psb_device.c | 28 +++++++++++++++-------
>>> drivers/gpu/drm/gma500/psb_drv.c | 10 ++++----
>>> drivers/gpu/drm/gma500/psb_intel_display.c | 15 ++++++++----
>>> 9 files changed, 84 insertions(+), 42 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c
>>> index f854f58bcbb3..dd32b484dd82 100644
>>> --- a/drivers/gpu/drm/gma500/cdv_device.c
>>> +++ b/drivers/gpu/drm/gma500/cdv_device.c
>>> @@ -262,6 +262,7 @@ static int cdv_save_display_registers(struct drm_device *dev)
>>> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
>>> struct pci_dev *pdev = to_pci_dev(dev->dev);
>>> struct psb_save_area *regs = &dev_priv->regs;
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector;
>>>
>>> dev_dbg(dev->dev, "Saving GPU registers.\n");
>>> @@ -298,8 +299,10 @@ static int cdv_save_display_registers(struct drm_device *dev)
>>> regs->cdv.saveIER = REG_READ(PSB_INT_ENABLE_R);
>>> regs->cdv.saveIMR = REG_READ(PSB_INT_MASK_R);
>>>
>>> - list_for_each_entry(connector, &dev->mode_config.connector_list, head)
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter)
>>> connector->funcs->dpms(connector, DRM_MODE_DPMS_OFF);
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> return 0;
>>> }
>>> @@ -317,6 +320,7 @@ static int cdv_restore_display_registers(struct drm_device *dev)
>>> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
>>> struct pci_dev *pdev = to_pci_dev(dev->dev);
>>> struct psb_save_area *regs = &dev_priv->regs;
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector;
>>> u32 temp;
>>>
>>> @@ -373,8 +377,10 @@ static int cdv_restore_display_registers(struct drm_device *dev)
>>>
>>> drm_mode_config_reset(dev);
>>>
>>> - list_for_each_entry(connector, &dev->mode_config.connector_list, head)
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter)
>>> connector->funcs->dpms(connector, DRM_MODE_DPMS_ON);
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> /* Resume the modeset for every activated CRTC */
>>> drm_helper_resume_force_mode(dev);
>>> diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c
>>> index 94ebc48a4349..0c3ddcdc29dc 100644
>>> --- a/drivers/gpu/drm/gma500/cdv_intel_display.c
>>> +++ b/drivers/gpu/drm/gma500/cdv_intel_display.c
>>> @@ -584,13 +584,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
>>> bool ok;
>>> bool is_lvds = false;
>>> bool is_dp = false;
>>> - struct drm_mode_config *mode_config = &dev->mode_config;
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector;
>>> const struct gma_limit_t *limit;
>>> u32 ddi_select = 0;
>>> bool is_edp = false;
>>>
>>> - list_for_each_entry(connector, &mode_config->connector_list, head) {
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> struct gma_encoder *gma_encoder =
>>> gma_attached_encoder(connector);
>>>
>>> @@ -613,10 +614,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
>>> is_edp = true;
>>> break;
>>> default:
>>> + drm_connector_list_iter_end(&conn_iter);
>>> DRM_ERROR("invalid output type.\n");
>>> return 0;
>>> }
>>> +
>>> + break;
>>> }
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> if (dev_priv->dplla_96mhz)
>>> /* low-end sku, 96/100 mhz */
>>> diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
>>> index 2b99c996fdc2..0ac6ea5fd3a1 100644
>>> --- a/drivers/gpu/drm/gma500/framebuffer.c
>>> +++ b/drivers/gpu/drm/gma500/framebuffer.c
>>> @@ -451,6 +451,7 @@ static const struct drm_mode_config_funcs psb_mode_funcs = {
>>> static void psb_setup_outputs(struct drm_device *dev)
>>> {
>>> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector;
>>>
>>> drm_mode_create_scaling_mode_property(dev);
>>> @@ -461,8 +462,8 @@ static void psb_setup_outputs(struct drm_device *dev)
>>> "backlight", 0, 100);
>>> dev_priv->ops->output_init(dev);
>>>
>>> - list_for_each_entry(connector, &dev->mode_config.connector_list,
>>> - head) {
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
>>> struct drm_encoder *encoder = &gma_encoder->base;
>>> int crtc_mask = 0, clone_mask = 0;
>>> @@ -505,6 +506,7 @@ static void psb_setup_outputs(struct drm_device *dev)
>>> encoder->possible_clones =
>>> gma_connector_clones(dev, clone_mask);
>>> }
>>> + drm_connector_list_iter_end(&conn_iter);
>>> }
>>>
>>> void psb_modeset_init(struct drm_device *dev)
>>> diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
>>> index 1d7964c339f4..e8157464d9eb 100644
>>> --- a/drivers/gpu/drm/gma500/gma_display.c
>>> +++ b/drivers/gpu/drm/gma500/gma_display.c
>>> @@ -27,17 +27,21 @@
>>> bool gma_pipe_has_type(struct drm_crtc *crtc, int type)
>>> {
>>> struct drm_device *dev = crtc->dev;
>>> - struct drm_mode_config *mode_config = &dev->mode_config;
>>> - struct drm_connector *l_entry;
>>> + struct drm_connector_list_iter conn_iter;
>>> + struct drm_connector *connector;
>>>
>>> - list_for_each_entry(l_entry, &mode_config->connector_list, head) {
>>> - if (l_entry->encoder && l_entry->encoder->crtc == crtc) {
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> + if (connector->encoder && connector->encoder->crtc == crtc) {
>>> struct gma_encoder *gma_encoder =
>>> - gma_attached_encoder(l_entry);
>>> - if (gma_encoder->type == type)
>>> + gma_attached_encoder(connector);
>>> + if (gma_encoder->type == type) {
>>> + drm_connector_list_iter_end(&conn_iter);
>>> return true;
>>> + }
>>> }
>>> }
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> return false;
>>> }
>>> diff --git a/drivers/gpu/drm/gma500/oaktrail_crtc.c b/drivers/gpu/drm/gma500/oaktrail_crtc.c
>>> index 36c7c2686c90..873c17cf8fb4 100644
>>> --- a/drivers/gpu/drm/gma500/oaktrail_crtc.c
>>> +++ b/drivers/gpu/drm/gma500/oaktrail_crtc.c
>>> @@ -372,9 +372,9 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
>>> bool ok, is_sdvo = false;
>>> bool is_lvds = false;
>>> bool is_mipi = false;
>>> - struct drm_mode_config *mode_config = &dev->mode_config;
>>> struct gma_encoder *gma_encoder = NULL;
>>> uint64_t scalingType = DRM_MODE_SCALE_FULLSCREEN;
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector;
>>> int i;
>>> int need_aux = gma_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ? 1 : 0;
>>> @@ -392,7 +392,8 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
>>> adjusted_mode,
>>> sizeof(struct drm_display_mode));
>>>
>>> - list_for_each_entry(connector, &mode_config->connector_list, head) {
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> if (!connector->encoder || connector->encoder->crtc != crtc)
>>> continue;
>>>
>>> @@ -409,8 +410,16 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
>>> is_mipi = true;
>>> break;
>>> }
>>> +
>>> + break;
>>> }
>>>
>>> + if (gma_encoder)
>>> + drm_object_property_get_value(&connector->base,
>>> + dev->mode_config.scaling_mode_property, &scalingType);
>>> +
>>> + drm_connector_list_iter_end(&conn_iter);
>>> +
>>> /* Disable the VGA plane that we never use */
>>> for (i = 0; i <= need_aux; i++)
>>> REG_WRITE_WITH_AUX(VGACNTRL, VGA_DISP_DISABLE, i);
>>> @@ -424,10 +433,6 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
>>> (mode->crtc_vdisplay - 1), i);
>>> }
>>>
>>> - if (gma_encoder)
>>> - drm_object_property_get_value(&connector->base,
>>> - dev->mode_config.scaling_mode_property, &scalingType);
>>> -
>>> if (scalingType == DRM_MODE_SCALE_NO_SCALE) {
>>> /* Moorestown doesn't have register support for centering so
>>> * we need to mess with the h/vblank and h/vsync start and
>>> diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c
>>> index 28b995ef2844..04852dbc7fb3 100644
>>> --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c
>>> +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c
>>> @@ -85,7 +85,7 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
>>> struct drm_device *dev = encoder->dev;
>>> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
>>> struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev;
>>> - struct drm_mode_config *mode_config = &dev->mode_config;
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector = NULL;
>>> struct drm_crtc *crtc = encoder->crtc;
>>> u32 lvds_port;
>>> @@ -112,21 +112,22 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
>>> REG_WRITE(LVDS, lvds_port);
>>>
>>> /* Find the connector we're trying to set up */
>>> - list_for_each_entry(connector, &mode_config->connector_list, head) {
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> if (connector->encoder && connector->encoder->crtc == crtc)
>>> break;
>>> }
>>>
>>> - if (list_entry_is_head(connector, &mode_config->connector_list, head)) {
>>> + if (!connector) {
>>> + drm_connector_list_iter_end(&conn_iter);
>>> DRM_ERROR("Couldn't find connector when setting mode");
>>> gma_power_end(dev);
>>> return;
>>> }
>>>
>>> - drm_object_property_get_value(
>>> - &connector->base,
>>> - dev->mode_config.scaling_mode_property,
>>> - &v);
>>> + drm_object_property_get_value( &connector->base,
>>> + dev->mode_config.scaling_mode_property, &v);
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> if (v == DRM_MODE_SCALE_NO_SCALE)
>>> REG_WRITE(PFIT_CONTROL, 0);
>>> diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c
>>> index 59f325165667..71534f4ca834 100644
>>> --- a/drivers/gpu/drm/gma500/psb_device.c
>>> +++ b/drivers/gpu/drm/gma500/psb_device.c
>>> @@ -168,8 +168,10 @@ static void psb_init_pm(struct drm_device *dev)
>>> static int psb_save_display_registers(struct drm_device *dev)
>>> {
>>> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
>>> + struct gma_connector *gma_connector;
>>> struct drm_crtc *crtc;
>>> - struct gma_connector *connector;
>>> + struct drm_connector_list_iter conn_iter;
>>> + struct drm_connector *connector;
>>> struct psb_state *regs = &dev_priv->regs.psb;
>>>
>>> /* Display arbitration control + watermarks */
>>> @@ -189,9 +191,13 @@ static int psb_save_display_registers(struct drm_device *dev)
>>> dev_priv->ops->save_crtc(crtc);
>>> }
>>>
>>> - list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
>>> - if (connector->save)
>>> - connector->save(&connector->base);
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> + gma_connector = to_gma_connector(connector);
>>> + if (gma_connector->save)
>>> + gma_connector->save(connector);
>>> + }
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> drm_modeset_unlock_all(dev);
>>> return 0;
>>> @@ -206,8 +212,10 @@ static int psb_save_display_registers(struct drm_device *dev)
>>> static int psb_restore_display_registers(struct drm_device *dev)
>>> {
>>> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
>>> + struct gma_connector *gma_connector;
>>> struct drm_crtc *crtc;
>>> - struct gma_connector *connector;
>>> + struct drm_connector_list_iter conn_iter;
>>> + struct drm_connector *connector;
>>> struct psb_state *regs = &dev_priv->regs.psb;
>>>
>>> /* Display arbitration + watermarks */
>>> @@ -228,9 +236,13 @@ static int psb_restore_display_registers(struct drm_device *dev)
>>> if (drm_helper_crtc_in_use(crtc))
>>> dev_priv->ops->restore_crtc(crtc);
>>>
>>> - list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
>>> - if (connector->restore)
>>> - connector->restore(&connector->base);
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> + gma_connector = to_gma_connector(connector);
>>> + if (gma_connector->restore)
>>> + gma_connector->restore(connector);
>>> + }
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> drm_modeset_unlock_all(dev);
>>> return 0;
>>> diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
>>> index b231fddb8817..bb0e3288e35b 100644
>>> --- a/drivers/gpu/drm/gma500/psb_drv.c
>>> +++ b/drivers/gpu/drm/gma500/psb_drv.c
>>> @@ -236,10 +236,11 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
>>> struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
>>> unsigned long resource_start, resource_len;
>>> unsigned long irqflags;
>>> - int ret = -ENOMEM;
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector;
>>> struct gma_encoder *gma_encoder;
>>> struct psb_gtt *pg;
>>> + int ret = -ENOMEM;
>>>
>>> /* initializing driver private data */
>>>
>>> @@ -390,9 +391,9 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
>>> psb_fbdev_init(dev);
>>> drm_kms_helper_poll_init(dev);
>>>
>>> - /* Only add backlight support if we have LVDS output */
>>> - list_for_each_entry(connector, &dev->mode_config.connector_list,
>>> - head) {
>>> + /* Only add backlight support if we have LVDS or MIPI output */
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> gma_encoder = gma_attached_encoder(connector);
>>>
>>> switch (gma_encoder->type) {
>>> @@ -402,6 +403,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
>>> break;
>>> }
>>> }
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> if (ret)
>>> return ret;
>>> diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
>>> index a99859b5b13a..fb8234f4d128 100644
>>> --- a/drivers/gpu/drm/gma500/psb_intel_display.c
>>> +++ b/drivers/gpu/drm/gma500/psb_intel_display.c
>>> @@ -106,7 +106,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
>>> u32 dpll = 0, fp = 0, dspcntr, pipeconf;
>>> bool ok, is_sdvo = false;
>>> bool is_lvds = false, is_tv = false;
>>> - struct drm_mode_config *mode_config = &dev->mode_config;
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector;
>>> const struct gma_limit_t *limit;
>>>
>>> @@ -116,7 +116,8 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
>>> return 0;
>>> }
>>>
>>> - list_for_each_entry(connector, &mode_config->connector_list, head) {
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
>>>
>>> if (!connector->encoder
>>> @@ -135,6 +136,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
>>> break;
>>> }
>>> }
>>> + drm_connector_list_iter_end(&conn_iter);
>>>
>>> refclk = 96000;
>>>
>>> @@ -534,16 +536,19 @@ struct drm_crtc *psb_intel_get_crtc_from_pipe(struct drm_device *dev, int pipe)
>>>
>>> int gma_connector_clones(struct drm_device *dev, int type_mask)
>>> {
>>> - int index_mask = 0;
>>> + struct drm_connector_list_iter conn_iter;
>>> struct drm_connector *connector;
>>> + int index_mask = 0;
>>> int entry = 0;
>>>
>>> - list_for_each_entry(connector, &dev->mode_config.connector_list,
>>> - head) {
>>> + drm_connector_list_iter_begin(dev, &conn_iter);
>>> + drm_for_each_connector_iter(connector, &conn_iter) {
>>> struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
>>> if (type_mask & (1 << gma_encoder->type))
>>> index_mask |= (1 << entry);
>>> entry++;
>>> }
>>> + drm_connector_list_iter_end(&conn_iter);
>>> +
>>> return index_mask;
>>> }
>>> --
>>> 2.35.1
>>>
>>
>> --
>> Daniel Vetter
>> Software Engineer, Intel Corporation
>> http://blog.ffwll.ch
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 7/7] drm/gma500: Add crtc prefix to vblank functions
2022-03-22 13:17 ` [PATCH 7/7] drm/gma500: Add crtc prefix to vblank functions Patrik Jakobsson
@ 2022-03-22 19:36 ` Thomas Zimmermann
2022-03-22 22:46 ` Patrik Jakobsson
0 siblings, 1 reply; 15+ messages in thread
From: Thomas Zimmermann @ 2022-03-22 19:36 UTC (permalink / raw)
To: Patrik Jakobsson, dri-devel; +Cc: daniel.vetter, sam
[-- Attachment #1.1: Type: text/plain, Size: 3651 bytes --]
Hi
Am 22.03.22 um 14:17 schrieb Patrik Jakobsson:
> These functions operate on a crtc and should be prefixed properly.
>
> Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
For the whole patchset:
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
If you like, please consider the few comments I had.
Best regards
Thomas
> ---
> drivers/gpu/drm/gma500/gma_display.c | 6 +++---
> drivers/gpu/drm/gma500/psb_irq.c | 6 +++---
> drivers/gpu/drm/gma500/psb_irq.h | 6 +++---
> 3 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
> index 369bc1f751cb..34ec3fca09ba 100644
> --- a/drivers/gpu/drm/gma500/gma_display.c
> +++ b/drivers/gpu/drm/gma500/gma_display.c
> @@ -575,9 +575,9 @@ const struct drm_crtc_funcs gma_crtc_funcs = {
> .set_config = gma_crtc_set_config,
> .destroy = gma_crtc_destroy,
> .page_flip = gma_crtc_page_flip,
> - .enable_vblank = gma_enable_vblank,
> - .disable_vblank = gma_disable_vblank,
> - .get_vblank_counter = gma_get_vblank_counter,
> + .enable_vblank = gma_crtc_enable_vblank,
> + .disable_vblank = gma_crtc_disable_vblank,
> + .get_vblank_counter = gma_crtc_get_vblank_counter,
> };
>
> /*
> diff --git a/drivers/gpu/drm/gma500/psb_irq.c b/drivers/gpu/drm/gma500/psb_irq.c
> index 2e8ded532930..e6e6d61bbeab 100644
> --- a/drivers/gpu/drm/gma500/psb_irq.c
> +++ b/drivers/gpu/drm/gma500/psb_irq.c
> @@ -371,7 +371,7 @@ void gma_irq_uninstall(struct drm_device *dev)
> free_irq(pdev->irq, dev);
> }
>
> -int gma_enable_vblank(struct drm_crtc *crtc)
> +int gma_crtc_enable_vblank(struct drm_crtc *crtc)
> {
> struct drm_device *dev = crtc->dev;
> unsigned int pipe = crtc->index;
> @@ -404,7 +404,7 @@ int gma_enable_vblank(struct drm_crtc *crtc)
> return 0;
> }
>
> -void gma_disable_vblank(struct drm_crtc *crtc)
> +void gma_crtc_disable_vblank(struct drm_crtc *crtc)
> {
> struct drm_device *dev = crtc->dev;
> unsigned int pipe = crtc->index;
> @@ -428,7 +428,7 @@ void gma_disable_vblank(struct drm_crtc *crtc)
> /* Called from drm generic code, passed a 'crtc', which
> * we use as a pipe index
> */
> -u32 gma_get_vblank_counter(struct drm_crtc *crtc)
> +u32 gma_crtc_get_vblank_counter(struct drm_crtc *crtc)
> {
> struct drm_device *dev = crtc->dev;
> unsigned int pipe = crtc->index;
> diff --git a/drivers/gpu/drm/gma500/psb_irq.h b/drivers/gpu/drm/gma500/psb_irq.h
> index c22878914f5b..b51e395194ff 100644
> --- a/drivers/gpu/drm/gma500/psb_irq.h
> +++ b/drivers/gpu/drm/gma500/psb_irq.h
> @@ -20,9 +20,9 @@ void gma_irq_postinstall(struct drm_device *dev);
> int gma_irq_install(struct drm_device *dev, unsigned int irq);
> void gma_irq_uninstall(struct drm_device *dev);
>
> -int gma_enable_vblank(struct drm_crtc *crtc);
> -void gma_disable_vblank(struct drm_crtc *crtc);
> -u32 gma_get_vblank_counter(struct drm_crtc *crtc);
> +int gma_crtc_enable_vblank(struct drm_crtc *crtc);
> +void gma_crtc_disable_vblank(struct drm_crtc *crtc);
> +u32 gma_crtc_get_vblank_counter(struct drm_crtc *crtc);
> void gma_enable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask);
> void gma_disable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask);
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init()
2022-03-22 19:32 ` Thomas Zimmermann
@ 2022-03-22 22:42 ` Patrik Jakobsson
0 siblings, 0 replies; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 22:42 UTC (permalink / raw)
To: Thomas Zimmermann; +Cc: Daniel Vetter, Sam Ravnborg, dri-devel
On Tue, Mar 22, 2022 at 8:32 PM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
>
>
> Am 22.03.22 um 20:30 schrieb Thomas Zimmermann:
> > Hi Patrik
> >
> > Am 22.03.22 um 14:17 schrieb Patrik Jakobsson:
> >> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
> >> ---
> >> drivers/gpu/drm/gma500/framebuffer.c | 4 ++--
> >> 1 file changed, 2 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/gma500/framebuffer.c
> >> b/drivers/gpu/drm/gma500/framebuffer.c
> >> index 45df9de22007..2b99c996fdc2 100644
> >> --- a/drivers/gpu/drm/gma500/framebuffer.c
> >> +++ b/drivers/gpu/drm/gma500/framebuffer.c
> >> @@ -514,7 +514,8 @@ void psb_modeset_init(struct drm_device *dev)
> >> struct pci_dev *pdev = to_pci_dev(dev->dev);
> >> int i;
> >> - drm_mode_config_init(dev);
> >> + if (drmm_mode_config_init(dev))
> >> + return;
> >
> > This will fail without any notice. I suggest to return an error here or
> > at let psb_driver_load() fail.
>
> 'and let psb_driver_load() fail'
Hi Thomas,
I did consider it but there are more places where psb_driver_load()
can fail so I think it deserves its own patch.
I'll send a follow-up.
-Patrik
>
> >
> > Best regards
> > Thomas
> >
> >> dev->mode_config.min_width = 0;
> >> dev->mode_config.min_height = 0;
> >> @@ -546,6 +547,5 @@ void psb_modeset_cleanup(struct drm_device *dev)
> >> if (dev_priv->modeset) {
> >> drm_kms_helper_poll_fini(dev);
> >> psb_fbdev_fini(dev);
> >> - drm_mode_config_cleanup(dev);
> >> }
> >> }
> >
>
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Maxfeldstr. 5, 90409 Nürnberg, Germany
> (HRB 36809, AG Nürnberg)
> Geschäftsführer: Ivo Totev
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 7/7] drm/gma500: Add crtc prefix to vblank functions
2022-03-22 19:36 ` Thomas Zimmermann
@ 2022-03-22 22:46 ` Patrik Jakobsson
0 siblings, 0 replies; 15+ messages in thread
From: Patrik Jakobsson @ 2022-03-22 22:46 UTC (permalink / raw)
To: Thomas Zimmermann; +Cc: Daniel Vetter, Sam Ravnborg, dri-devel
On Tue, Mar 22, 2022 at 8:36 PM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> Hi
>
> Am 22.03.22 um 14:17 schrieb Patrik Jakobsson:
> > These functions operate on a crtc and should be prefixed properly.
> >
> > Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
> > Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
>
> For the whole patchset:
>
> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
>
> If you like, please consider the few comments I had.
Thanks for the review.
>
> Best regards
> Thomas
>
>
> > ---
> > drivers/gpu/drm/gma500/gma_display.c | 6 +++---
> > drivers/gpu/drm/gma500/psb_irq.c | 6 +++---
> > drivers/gpu/drm/gma500/psb_irq.h | 6 +++---
> > 3 files changed, 9 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
> > index 369bc1f751cb..34ec3fca09ba 100644
> > --- a/drivers/gpu/drm/gma500/gma_display.c
> > +++ b/drivers/gpu/drm/gma500/gma_display.c
> > @@ -575,9 +575,9 @@ const struct drm_crtc_funcs gma_crtc_funcs = {
> > .set_config = gma_crtc_set_config,
> > .destroy = gma_crtc_destroy,
> > .page_flip = gma_crtc_page_flip,
> > - .enable_vblank = gma_enable_vblank,
> > - .disable_vblank = gma_disable_vblank,
> > - .get_vblank_counter = gma_get_vblank_counter,
> > + .enable_vblank = gma_crtc_enable_vblank,
> > + .disable_vblank = gma_crtc_disable_vblank,
> > + .get_vblank_counter = gma_crtc_get_vblank_counter,
> > };
> >
> > /*
> > diff --git a/drivers/gpu/drm/gma500/psb_irq.c b/drivers/gpu/drm/gma500/psb_irq.c
> > index 2e8ded532930..e6e6d61bbeab 100644
> > --- a/drivers/gpu/drm/gma500/psb_irq.c
> > +++ b/drivers/gpu/drm/gma500/psb_irq.c
> > @@ -371,7 +371,7 @@ void gma_irq_uninstall(struct drm_device *dev)
> > free_irq(pdev->irq, dev);
> > }
> >
> > -int gma_enable_vblank(struct drm_crtc *crtc)
> > +int gma_crtc_enable_vblank(struct drm_crtc *crtc)
> > {
> > struct drm_device *dev = crtc->dev;
> > unsigned int pipe = crtc->index;
> > @@ -404,7 +404,7 @@ int gma_enable_vblank(struct drm_crtc *crtc)
> > return 0;
> > }
> >
> > -void gma_disable_vblank(struct drm_crtc *crtc)
> > +void gma_crtc_disable_vblank(struct drm_crtc *crtc)
> > {
> > struct drm_device *dev = crtc->dev;
> > unsigned int pipe = crtc->index;
> > @@ -428,7 +428,7 @@ void gma_disable_vblank(struct drm_crtc *crtc)
> > /* Called from drm generic code, passed a 'crtc', which
> > * we use as a pipe index
> > */
> > -u32 gma_get_vblank_counter(struct drm_crtc *crtc)
> > +u32 gma_crtc_get_vblank_counter(struct drm_crtc *crtc)
> > {
> > struct drm_device *dev = crtc->dev;
> > unsigned int pipe = crtc->index;
> > diff --git a/drivers/gpu/drm/gma500/psb_irq.h b/drivers/gpu/drm/gma500/psb_irq.h
> > index c22878914f5b..b51e395194ff 100644
> > --- a/drivers/gpu/drm/gma500/psb_irq.h
> > +++ b/drivers/gpu/drm/gma500/psb_irq.h
> > @@ -20,9 +20,9 @@ void gma_irq_postinstall(struct drm_device *dev);
> > int gma_irq_install(struct drm_device *dev, unsigned int irq);
> > void gma_irq_uninstall(struct drm_device *dev);
> >
> > -int gma_enable_vblank(struct drm_crtc *crtc);
> > -void gma_disable_vblank(struct drm_crtc *crtc);
> > -u32 gma_get_vblank_counter(struct drm_crtc *crtc);
> > +int gma_crtc_enable_vblank(struct drm_crtc *crtc);
> > +void gma_crtc_disable_vblank(struct drm_crtc *crtc);
> > +u32 gma_crtc_get_vblank_counter(struct drm_crtc *crtc);
> > void gma_enable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask);
> > void gma_disable_pipestat(struct drm_psb_private *dev_priv, int pipe, u32 mask);
> >
>
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Maxfeldstr. 5, 90409 Nürnberg, Germany
> (HRB 36809, AG Nürnberg)
> Geschäftsführer: Ivo Totev
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2022-03-22 22:46 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-22 13:17 [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 2/7] drm/gma500: Uninstall interrupts on driver removal Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 3/7] drm/gma500: Make use of the drm connector iterator Patrik Jakobsson
2022-03-22 14:39 ` Daniel Vetter
2022-03-22 15:46 ` Patrik Jakobsson
2022-03-22 19:34 ` Thomas Zimmermann
2022-03-22 13:17 ` [PATCH 4/7] drm/gma500: gma500 don't register non-hotpluggable connectors Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 5/7] drm/gma500: Free the correct connector allocation Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 6/7] drm/gma500: Declare a few functions static Patrik Jakobsson
2022-03-22 13:17 ` [PATCH 7/7] drm/gma500: Add crtc prefix to vblank functions Patrik Jakobsson
2022-03-22 19:36 ` Thomas Zimmermann
2022-03-22 22:46 ` Patrik Jakobsson
2022-03-22 19:30 ` [PATCH 1/7] drm/gma500: Use managed drmm_mode_config_init() Thomas Zimmermann
2022-03-22 19:32 ` Thomas Zimmermann
2022-03-22 22:42 ` Patrik Jakobsson
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.