Loading drivers/gpu/drm/tegra/dc.c +13 −17 Original line number Diff line number Diff line Loading @@ -1700,6 +1700,11 @@ static void tegra_dc_commit_state(struct tegra_dc *dc, dev_err(dc->dev, "failed to set clock rate to %lu Hz\n", state->pclk); err = clk_set_rate(dc->clk, state->pclk); if (err < 0) dev_err(dc->dev, "failed to set clock %pC to %lu Hz: %d\n", dc->clk, state->pclk, err); } DRM_DEBUG_KMS("rate: %lu, div: %u\n", clk_get_rate(dc->clk), Loading @@ -1710,11 +1715,6 @@ static void tegra_dc_commit_state(struct tegra_dc *dc, value = SHIFT_CLK_DIVIDER(state->div) | PIXEL_CLK_DIVIDER_PCD1; tegra_dc_writel(dc, value, DC_DISP_DISP_CLOCK_CONTROL); } err = clk_set_rate(dc->clk, state->pclk); if (err < 0) dev_err(dc->dev, "failed to set clock %pC to %lu Hz: %d\n", dc->clk, state->pclk, err); } static void tegra_dc_stop(struct tegra_dc *dc) Loading Loading @@ -2513,22 +2513,18 @@ static int tegra_dc_couple(struct tegra_dc *dc) * POWER_CONTROL registers during CRTC enabling. */ if (dc->soc->coupled_pm && dc->pipe == 1) { u32 flags = DL_FLAG_PM_RUNTIME | DL_FLAG_AUTOREMOVE_CONSUMER; struct device_link *link; struct device *partner; struct device *companion; struct tegra_dc *parent; partner = driver_find_device(dc->dev->driver, NULL, NULL, companion = driver_find_device(dc->dev->driver, NULL, (const void *)0, tegra_dc_match_by_pipe); if (!partner) if (!companion) return -EPROBE_DEFER; link = device_link_add(dc->dev, partner, flags); if (!link) { dev_err(dc->dev, "failed to link controllers\n"); return -EINVAL; } parent = dev_get_drvdata(companion); dc->client.parent = &parent->client; dev_dbg(dc->dev, "coupled to %s\n", dev_name(partner)); dev_dbg(dc->dev, "coupled to %s\n", dev_name(companion)); } return 0; Loading drivers/gpu/drm/tegra/sor.c +7 −0 Original line number Diff line number Diff line Loading @@ -3115,6 +3115,12 @@ static int tegra_sor_init(struct host1x_client *client) * kernel is possible. */ if (sor->rst) { err = pm_runtime_resume_and_get(sor->dev); if (err < 0) { dev_err(sor->dev, "failed to get runtime PM: %d\n", err); return err; } err = reset_control_acquire(sor->rst); if (err < 0) { dev_err(sor->dev, "failed to acquire SOR reset: %d\n", Loading Loading @@ -3148,6 +3154,7 @@ static int tegra_sor_init(struct host1x_client *client) } reset_control_release(sor->rst); pm_runtime_put(sor->dev); } err = clk_prepare_enable(sor->clk_safe); Loading drivers/gpu/host1x/bus.c +6 −4 Original line number Diff line number Diff line Loading @@ -705,8 +705,9 @@ void host1x_driver_unregister(struct host1x_driver *driver) EXPORT_SYMBOL(host1x_driver_unregister); /** * host1x_client_register() - register a host1x client * __host1x_client_register() - register a host1x client * @client: host1x client * @key: lock class key for the client-specific mutex * * Registers a host1x client with each host1x controller instance. Note that * each client will only match their parent host1x controller and will only be Loading @@ -715,13 +716,14 @@ EXPORT_SYMBOL(host1x_driver_unregister); * device and call host1x_device_init(), which will in turn call each client's * &host1x_client_ops.init implementation. */ int host1x_client_register(struct host1x_client *client) int __host1x_client_register(struct host1x_client *client, struct lock_class_key *key) { struct host1x *host1x; int err; INIT_LIST_HEAD(&client->list); mutex_init(&client->lock); __mutex_init(&client->lock, "host1x client lock", key); client->usecount = 0; mutex_lock(&devices_lock); Loading @@ -742,7 +744,7 @@ int host1x_client_register(struct host1x_client *client) return 0; } EXPORT_SYMBOL(host1x_client_register); EXPORT_SYMBOL(__host1x_client_register); /** * host1x_client_unregister() - unregister a host1x client Loading include/linux/host1x.h +8 −1 Original line number Diff line number Diff line Loading @@ -320,7 +320,14 @@ static inline struct host1x_device *to_host1x_device(struct device *dev) int host1x_device_init(struct host1x_device *device); int host1x_device_exit(struct host1x_device *device); int host1x_client_register(struct host1x_client *client); int __host1x_client_register(struct host1x_client *client, struct lock_class_key *key); #define host1x_client_register(class) \ ({ \ static struct lock_class_key __key; \ __host1x_client_register(class, &__key); \ }) int host1x_client_unregister(struct host1x_client *client); int host1x_client_suspend(struct host1x_client *client); Loading Loading
drivers/gpu/drm/tegra/dc.c +13 −17 Original line number Diff line number Diff line Loading @@ -1700,6 +1700,11 @@ static void tegra_dc_commit_state(struct tegra_dc *dc, dev_err(dc->dev, "failed to set clock rate to %lu Hz\n", state->pclk); err = clk_set_rate(dc->clk, state->pclk); if (err < 0) dev_err(dc->dev, "failed to set clock %pC to %lu Hz: %d\n", dc->clk, state->pclk, err); } DRM_DEBUG_KMS("rate: %lu, div: %u\n", clk_get_rate(dc->clk), Loading @@ -1710,11 +1715,6 @@ static void tegra_dc_commit_state(struct tegra_dc *dc, value = SHIFT_CLK_DIVIDER(state->div) | PIXEL_CLK_DIVIDER_PCD1; tegra_dc_writel(dc, value, DC_DISP_DISP_CLOCK_CONTROL); } err = clk_set_rate(dc->clk, state->pclk); if (err < 0) dev_err(dc->dev, "failed to set clock %pC to %lu Hz: %d\n", dc->clk, state->pclk, err); } static void tegra_dc_stop(struct tegra_dc *dc) Loading Loading @@ -2513,22 +2513,18 @@ static int tegra_dc_couple(struct tegra_dc *dc) * POWER_CONTROL registers during CRTC enabling. */ if (dc->soc->coupled_pm && dc->pipe == 1) { u32 flags = DL_FLAG_PM_RUNTIME | DL_FLAG_AUTOREMOVE_CONSUMER; struct device_link *link; struct device *partner; struct device *companion; struct tegra_dc *parent; partner = driver_find_device(dc->dev->driver, NULL, NULL, companion = driver_find_device(dc->dev->driver, NULL, (const void *)0, tegra_dc_match_by_pipe); if (!partner) if (!companion) return -EPROBE_DEFER; link = device_link_add(dc->dev, partner, flags); if (!link) { dev_err(dc->dev, "failed to link controllers\n"); return -EINVAL; } parent = dev_get_drvdata(companion); dc->client.parent = &parent->client; dev_dbg(dc->dev, "coupled to %s\n", dev_name(partner)); dev_dbg(dc->dev, "coupled to %s\n", dev_name(companion)); } return 0; Loading
drivers/gpu/drm/tegra/sor.c +7 −0 Original line number Diff line number Diff line Loading @@ -3115,6 +3115,12 @@ static int tegra_sor_init(struct host1x_client *client) * kernel is possible. */ if (sor->rst) { err = pm_runtime_resume_and_get(sor->dev); if (err < 0) { dev_err(sor->dev, "failed to get runtime PM: %d\n", err); return err; } err = reset_control_acquire(sor->rst); if (err < 0) { dev_err(sor->dev, "failed to acquire SOR reset: %d\n", Loading Loading @@ -3148,6 +3154,7 @@ static int tegra_sor_init(struct host1x_client *client) } reset_control_release(sor->rst); pm_runtime_put(sor->dev); } err = clk_prepare_enable(sor->clk_safe); Loading
drivers/gpu/host1x/bus.c +6 −4 Original line number Diff line number Diff line Loading @@ -705,8 +705,9 @@ void host1x_driver_unregister(struct host1x_driver *driver) EXPORT_SYMBOL(host1x_driver_unregister); /** * host1x_client_register() - register a host1x client * __host1x_client_register() - register a host1x client * @client: host1x client * @key: lock class key for the client-specific mutex * * Registers a host1x client with each host1x controller instance. Note that * each client will only match their parent host1x controller and will only be Loading @@ -715,13 +716,14 @@ EXPORT_SYMBOL(host1x_driver_unregister); * device and call host1x_device_init(), which will in turn call each client's * &host1x_client_ops.init implementation. */ int host1x_client_register(struct host1x_client *client) int __host1x_client_register(struct host1x_client *client, struct lock_class_key *key) { struct host1x *host1x; int err; INIT_LIST_HEAD(&client->list); mutex_init(&client->lock); __mutex_init(&client->lock, "host1x client lock", key); client->usecount = 0; mutex_lock(&devices_lock); Loading @@ -742,7 +744,7 @@ int host1x_client_register(struct host1x_client *client) return 0; } EXPORT_SYMBOL(host1x_client_register); EXPORT_SYMBOL(__host1x_client_register); /** * host1x_client_unregister() - unregister a host1x client Loading
include/linux/host1x.h +8 −1 Original line number Diff line number Diff line Loading @@ -320,7 +320,14 @@ static inline struct host1x_device *to_host1x_device(struct device *dev) int host1x_device_init(struct host1x_device *device); int host1x_device_exit(struct host1x_device *device); int host1x_client_register(struct host1x_client *client); int __host1x_client_register(struct host1x_client *client, struct lock_class_key *key); #define host1x_client_register(class) \ ({ \ static struct lock_class_key __key; \ __host1x_client_register(class, &__key); \ }) int host1x_client_unregister(struct host1x_client *client); int host1x_client_suspend(struct host1x_client *client); Loading