Commit 596a1d32 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm/tegra/for-4.4-rc1' of git://anongit.freedesktop.org/tegra/linux into drm-next

drm/tegra: Changes for v4.4-rc1

Just a couple of minor fixes and cleanups for this cycle.

* tag 'drm/tegra/for-4.4-rc1' of git://anongit.freedesktop.org/tegra/linux:
  drm/tegra: dc: Request/free syncpoint at init/exit
  drm/tegra: fb: Remove gratuituous blank line
  gpu: host1x: Fix MLOCK's debug info
parents cb0fb271 2bcdcbfa
...@@ -1694,6 +1694,7 @@ static int tegra_dc_debugfs_exit(struct tegra_dc *dc) ...@@ -1694,6 +1694,7 @@ static int tegra_dc_debugfs_exit(struct tegra_dc *dc)
static int tegra_dc_init(struct host1x_client *client) static int tegra_dc_init(struct host1x_client *client)
{ {
struct drm_device *drm = dev_get_drvdata(client->parent); struct drm_device *drm = dev_get_drvdata(client->parent);
unsigned long flags = HOST1X_SYNCPT_CLIENT_MANAGED;
struct tegra_dc *dc = host1x_client_to_dc(client); struct tegra_dc *dc = host1x_client_to_dc(client);
struct tegra_drm *tegra = drm->dev_private; struct tegra_drm *tegra = drm->dev_private;
struct drm_plane *primary = NULL; struct drm_plane *primary = NULL;
...@@ -1701,6 +1702,10 @@ static int tegra_dc_init(struct host1x_client *client) ...@@ -1701,6 +1702,10 @@ static int tegra_dc_init(struct host1x_client *client)
u32 value; u32 value;
int err; int err;
dc->syncpt = host1x_syncpt_request(dc->dev, flags);
if (!dc->syncpt)
dev_warn(dc->dev, "failed to allocate syncpoint\n");
if (tegra->domain) { if (tegra->domain) {
err = iommu_attach_device(tegra->domain, dc->dev); err = iommu_attach_device(tegra->domain, dc->dev);
if (err < 0) { if (err < 0) {
...@@ -1847,6 +1852,8 @@ static int tegra_dc_exit(struct host1x_client *client) ...@@ -1847,6 +1852,8 @@ static int tegra_dc_exit(struct host1x_client *client)
dc->domain = NULL; dc->domain = NULL;
} }
host1x_syncpt_free(dc->syncpt);
return 0; return 0;
} }
...@@ -1959,7 +1966,6 @@ static int tegra_dc_parse_dt(struct tegra_dc *dc) ...@@ -1959,7 +1966,6 @@ static int tegra_dc_parse_dt(struct tegra_dc *dc)
static int tegra_dc_probe(struct platform_device *pdev) static int tegra_dc_probe(struct platform_device *pdev)
{ {
unsigned long flags = HOST1X_SYNCPT_CLIENT_MANAGED;
const struct of_device_id *id; const struct of_device_id *id;
struct resource *regs; struct resource *regs;
struct tegra_dc *dc; struct tegra_dc *dc;
...@@ -2034,10 +2040,6 @@ static int tegra_dc_probe(struct platform_device *pdev) ...@@ -2034,10 +2040,6 @@ static int tegra_dc_probe(struct platform_device *pdev)
return -ENXIO; return -ENXIO;
} }
dc->syncpt = host1x_syncpt_request(&pdev->dev, flags);
if (!dc->syncpt)
dev_warn(&pdev->dev, "failed to allocate syncpoint\n");
INIT_LIST_HEAD(&dc->client.list); INIT_LIST_HEAD(&dc->client.list);
dc->client.ops = &dc_client_ops; dc->client.ops = &dc_client_ops;
dc->client.dev = &pdev->dev; dc->client.dev = &pdev->dev;
...@@ -2065,8 +2067,6 @@ static int tegra_dc_remove(struct platform_device *pdev) ...@@ -2065,8 +2067,6 @@ static int tegra_dc_remove(struct platform_device *pdev)
struct tegra_dc *dc = platform_get_drvdata(pdev); struct tegra_dc *dc = platform_get_drvdata(pdev);
int err; int err;
host1x_syncpt_free(dc->syncpt);
err = host1x_client_unregister(&dc->client); err = host1x_client_unregister(&dc->client);
if (err < 0) { if (err < 0) {
dev_err(&pdev->dev, "failed to unregister host1x client: %d\n", dev_err(&pdev->dev, "failed to unregister host1x client: %d\n",
......
...@@ -341,7 +341,6 @@ static int tegra_fbdev_init(struct tegra_fbdev *fbdev, ...@@ -341,7 +341,6 @@ static int tegra_fbdev_init(struct tegra_fbdev *fbdev,
static void tegra_fbdev_exit(struct tegra_fbdev *fbdev) static void tegra_fbdev_exit(struct tegra_fbdev *fbdev)
{ {
drm_fb_helper_unregister_fbi(&fbdev->base); drm_fb_helper_unregister_fbi(&fbdev->base);
drm_fb_helper_release_fbi(&fbdev->base); drm_fb_helper_release_fbi(&fbdev->base);
......
...@@ -298,7 +298,7 @@ static void host1x_debug_show_mlocks(struct host1x *host, struct output *o) ...@@ -298,7 +298,7 @@ static void host1x_debug_show_mlocks(struct host1x *host, struct output *o)
host1x_sync_readl(host, HOST1X_SYNC_MLOCK_OWNER(i)); host1x_sync_readl(host, HOST1X_SYNC_MLOCK_OWNER(i));
if (HOST1X_SYNC_MLOCK_OWNER_CH_OWNS_V(owner)) if (HOST1X_SYNC_MLOCK_OWNER_CH_OWNS_V(owner))
host1x_debug_output(o, "%d: locked by channel %d\n", host1x_debug_output(o, "%d: locked by channel %d\n",
i, HOST1X_SYNC_MLOCK_OWNER_CHID_F(owner)); i, HOST1X_SYNC_MLOCK_OWNER_CHID_V(owner));
else if (HOST1X_SYNC_MLOCK_OWNER_CPU_OWNS_V(owner)) else if (HOST1X_SYNC_MLOCK_OWNER_CPU_OWNS_V(owner))
host1x_debug_output(o, "%d: locked by cpu\n", i); host1x_debug_output(o, "%d: locked by cpu\n", i);
else else
......
...@@ -131,12 +131,12 @@ static inline u32 host1x_sync_mlock_owner_r(unsigned int id) ...@@ -131,12 +131,12 @@ static inline u32 host1x_sync_mlock_owner_r(unsigned int id)
} }
#define HOST1X_SYNC_MLOCK_OWNER(id) \ #define HOST1X_SYNC_MLOCK_OWNER(id) \
host1x_sync_mlock_owner_r(id) host1x_sync_mlock_owner_r(id)
static inline u32 host1x_sync_mlock_owner_chid_f(u32 v) static inline u32 host1x_sync_mlock_owner_chid_v(u32 v)
{ {
return (v & 0xf) << 8; return (v >> 8) & 0xf;
} }
#define HOST1X_SYNC_MLOCK_OWNER_CHID_F(v) \ #define HOST1X_SYNC_MLOCK_OWNER_CHID_V(v) \
host1x_sync_mlock_owner_chid_f(v) host1x_sync_mlock_owner_chid_v(v)
static inline u32 host1x_sync_mlock_owner_cpu_owns_v(u32 r) static inline u32 host1x_sync_mlock_owner_cpu_owns_v(u32 r)
{ {
return (r >> 1) & 0x1; return (r >> 1) & 0x1;
......
...@@ -131,12 +131,12 @@ static inline u32 host1x_sync_mlock_owner_r(unsigned int id) ...@@ -131,12 +131,12 @@ static inline u32 host1x_sync_mlock_owner_r(unsigned int id)
} }
#define HOST1X_SYNC_MLOCK_OWNER(id) \ #define HOST1X_SYNC_MLOCK_OWNER(id) \
host1x_sync_mlock_owner_r(id) host1x_sync_mlock_owner_r(id)
static inline u32 host1x_sync_mlock_owner_chid_f(u32 v) static inline u32 host1x_sync_mlock_owner_chid_v(u32 v)
{ {
return (v & 0xf) << 8; return (v >> 8) & 0xf;
} }
#define HOST1X_SYNC_MLOCK_OWNER_CHID_F(v) \ #define HOST1X_SYNC_MLOCK_OWNER_CHID_V(v) \
host1x_sync_mlock_owner_chid_f(v) host1x_sync_mlock_owner_chid_v(v)
static inline u32 host1x_sync_mlock_owner_cpu_owns_v(u32 r) static inline u32 host1x_sync_mlock_owner_cpu_owns_v(u32 r)
{ {
return (r >> 1) & 0x1; return (r >> 1) & 0x1;
......
...@@ -131,12 +131,12 @@ static inline u32 host1x_sync_mlock_owner_r(unsigned int id) ...@@ -131,12 +131,12 @@ static inline u32 host1x_sync_mlock_owner_r(unsigned int id)
} }
#define HOST1X_SYNC_MLOCK_OWNER(id) \ #define HOST1X_SYNC_MLOCK_OWNER(id) \
host1x_sync_mlock_owner_r(id) host1x_sync_mlock_owner_r(id)
static inline u32 host1x_sync_mlock_owner_chid_f(u32 v) static inline u32 host1x_sync_mlock_owner_chid_v(u32 v)
{ {
return (v & 0xf) << 8; return (v >> 8) & 0xf;
} }
#define HOST1X_SYNC_MLOCK_OWNER_CHID_F(v) \ #define HOST1X_SYNC_MLOCK_OWNER_CHID_V(v) \
host1x_sync_mlock_owner_chid_f(v) host1x_sync_mlock_owner_chid_v(v)
static inline u32 host1x_sync_mlock_owner_cpu_owns_v(u32 r) static inline u32 host1x_sync_mlock_owner_cpu_owns_v(u32 r)
{ {
return (r >> 1) & 0x1; return (r >> 1) & 0x1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment