* [PATCH 1/4] compat-drivers: backport fb_info->skip_vt_switch using ifdefs
From: Luis R. Rodriguez @ 2013-03-28 12:04 UTC (permalink / raw)
To: FlorianSchandinat
Cc: linux-fbdev, dri-devel, jbarnes, backports, cocci, linux-kernel,
julia.lawall, rodrigo.vivi, daniel.vetter, rafael.j.wysocki,
Luis R. Rodriguez
In-Reply-To: <1364472270-9297-1-git-send-email-mcgrof@do-not-panic.com>
From: "Luis R. Rodriguez" <mcgrof@do-not-panic.com>
Commit 3cf2667 as of next-20130301 extended the struct fb_info
with a skip_vt_switch to allow drivers to skip the VT switch
at suspend/resume time. For older kernels we can skip this
as all this switch does is call pm_vt_switch_required() with true
or false depending on this new flag and later
pm_vt_switch_unregister() would not have been made.
This patch cannot be broken down further so I'm pegging
this as the first one with 4 digits under the DRM folder
for collateral evolutions. This reflects its as atomic as
is possible. As we'll see on the next commit, these type
of collateral evolutions can best be backported not by
keeping ifdef's as below but instead by using a wrapper
caller, to help reduce with the amount of lines of code
we need. If a static inline is added upstream for these
changes, then no code is required for backporting, at all,
we'd just implement the static inline later upstream as
a no-op.
The tradeoffs to consider for this is if we can live with
these practices upstream, we may be able to support full
subsystems only with a compat module, and no need for
patches. This also means less code and likely less bugs
on the distribution front when backporting is required.
At least IMHO this may be worthy to consider at least to
support kernels listed as supported on kernel.org. We could
just leave the ifdef hell to older unsupported kernels.
Relevant commits below, starting with the first one that
added this new collateral evolution.
commit 3cf2667b9f8b2c2fe298a427deb399e52321da6b
Author: Jesse Barnes <jbarnes@virtuousgeek.org>
Date: Mon Feb 4 13:37:21 2013 +0000
fb: add support for drivers not needing VT switch at suspend/resume time
Use the new PM routines to indicate whether we need to VT switch at suspend
and resume time. When a new driver is bound, set its flag accordingly,
and when unbound, remove it from the PM's console tracking list.
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
commit 24576d23976746cb52e7700c4cadbf4bc1bc3472
Author: Jesse Barnes <jbarnes@virtuousgeek.org>
Date: Tue Mar 26 09:25:45 2013 -0700
drm/i915: enable VT switchless resume v3
With the other bits in place, we can do this safely.
v2: disable backlight on suspend to prevent premature enablement on resume
v3: disable CRTCs on suspend to allow RTD3 (Kristen)
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: cocci@systeme.lip6.fr
Cc: backports@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: Julia Lawall <julia.lawall@lip6.fr>
Cc: Rodrigo Vivi <rodrigo.vivi@gmail.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
---
.../drm/0001-fb-info-vt_switch.patch | 73 ++++++++++++++++++++
1 file changed, 73 insertions(+)
create mode 100644 patches/collateral-evolutions/drm/0001-fb-info-vt_switch.patch
diff --git a/patches/collateral-evolutions/drm/0001-fb-info-vt_switch.patch b/patches/collateral-evolutions/drm/0001-fb-info-vt_switch.patch
new file mode 100644
index 0000000..cdced87
--- /dev/null
+++ b/patches/collateral-evolutions/drm/0001-fb-info-vt_switch.patch
@@ -0,0 +1,73 @@
+Commit 3cf2667 as of next-20130301 extended the struct fb_info
+with a skip_vt_switch to allow drivers to skip the VT switch
+at suspend/resume time. For older kernels we can skip this
+as all this switch does is call pm_vt_switch_required() with true
+or false depending on this new flag and later
+pm_vt_switch_unregister() would not have been made.
+
+This patch cannot be broken down further so I'm pegging
+this as the first one with 4 digits under the DRM folder
+for collateral evolutions. This reflects its as atomic as
+is possible. As we'll see on the next commit, these type
+of collateral evolutions can best be backported not by
+keeping ifdef's as below but instead by using a wrapper
+caller, to help reduce with the amount of lines of code
+we need. If a static inline is added upstream for these
+changes, then no code is required for backporting, at all,
+we'd just implement the static inline later upstream as
+a no-op.
+
+The tradeoffs to consider for this is if we can live with
+these practices upstream, we may be able to support full
+subsystems only with a compat module, and no need for
+patches. This also means less code and likely less bugs
+on the distribution front when backporting is required.
+At least IMHO this may be worthy to consider at least to
+support kernels listed as supported on kernel.org. We could
+just leave the ifdef hell to older unsupported kernels.
+
+Relevant commits below, starting with the first one that
+added this new collateral evolution.
+
+commit 3cf2667b9f8b2c2fe298a427deb399e52321da6b
+Author: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Mon Feb 4 13:37:21 2013 +0000
+
+ fb: add support for drivers not needing VT switch at suspend/resume time
+
+ Use the new PM routines to indicate whether we need to VT switch at suspend
+ and resume time. When a new driver is bound, set its flag accordingly,
+ and when unbound, remove it from the PM's console tracking list.
+
+ Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+ Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+ Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+
+commit 24576d23976746cb52e7700c4cadbf4bc1bc3472
+Author: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Tue Mar 26 09:25:45 2013 -0700
+
+ drm/i915: enable VT switchless resume v3
+
+ With the other bits in place, we can do this safely.
+
+ v2: disable backlight on suspend to prevent premature enablement on resume
+ v3: disable CRTCs on suspend to allow RTD3 (Kristen)
+
+ Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+ Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com>
+ Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+
+--- a/drivers/gpu/drm/i915/intel_fb.c
++++ b/drivers/gpu/drm/i915/intel_fb.c
+@@ -150,8 +150,10 @@ static int intelfb_create(struct drm_fb_
+ }
+ info->screen_size = size;
+
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0))
+ /* This driver doesn't need a VT switch to restore the mode on resume */
+ info->skip_vt_switch = true;
++#endif
+
+ drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth);
+ drm_fb_helper_fill_var(info, &ifbdev->helper, sizes->fb_width, sizes->fb_height);
--
1.7.10.4
^ permalink raw reply related
* [PATCH] compat/compat-drivers/linux-next: fb skip_vt_switch
From: Luis R. Rodriguez @ 2013-03-28 12:04 UTC (permalink / raw)
To: FlorianSchandinat
Cc: linux-fbdev, dri-devel, jbarnes, backports, cocci, linux-kernel,
julia.lawall, rodrigo.vivi, daniel.vetter, rafael.j.wysocki,
Luis R. Rodriguez
From: "Luis R. Rodriguez" <mcgrof@do-not-panic.com>
I maintain the the compat-drivers project [0] which aims at backporting the
Linux kernel drivers down to older kernels, automatically [1]. Thanks to
Ozan Caglayan as a GSoC project we now backport DRM drivers.
The initial framework we had set up to help with the automatic juice was
simply quilt refresh to help with hunk offsets, later it consisted of
writing cleaner diffs, then compartamentalizing shared differences into a
compat backport module [2].
Recently I looked into Coccinelle SmPL to help push for collateral evolutions
on the Linux kernel to be written when possible with SmPL [3] given that, as
discussed with Julia, the very inverse of the grammar may allow us to backport
that collateral evolution on older kernels. I'm still experimenting with that,
but another benefit of studying INRIA's Coccinelle work is that the concept
of collateral evolutions is now formalized and as I've studied their work
I'm realizing we have different categories for collateral evolutions. From
what I've experienced through the backport work, data structure changes are
the more difficult collateral evolutions to backport. Instead of updates on
our compat module these require manual diffs... One strategy to simplify
backporting these data structure changes however was to replace the uses of
the new elements on the data structure with static inlines and requiring
the heavy changes to be implementd on a helper. That is, we actually simplfied
the backport by changing the form of the collateral evolution.
The new commit by Jesse that extended the fb_info with a skip_vt_switch
element is the simplest example of a data structure expansion. We'd backport
this by adding a static inline to compat so that new kernels muck with the
new element and for older kernels this would be a no-op. This reduces the
size of the backport and unclutters the required patch with #idefs, and
insteads leaves only a replacement of the usage of the new elements with
a static inline, this however would still be required on our end:
- info->skip_vt_switch = true;
+ fb_enable_skip_vt_switch(info);
So we'd then have to just add this static inline change for each new driver...
There may be a way to get SmPL to do this for us...
However... if the static inline makes it upstream it means 0 changes are
required for *any* driver!
I've been reluctant to request a change upstream because of these side
backport benefits but due to this case's simplcity I figured I'd shoot
this out for review now.
A more elaborate example would be the netdev_attach_ops() which is not
yet upstream. This exands to this simple inline for new kernels:
static inline void netdev_attach_ops(struct net_device *dev,
const struct net_device_ops *ops)
{
dev->netdev_ops = ops;
}
For older kernels this expands to:
void netdev_attach_ops(struct net_device *dev,
const struct net_device_ops *ops)
{
dev->open = ops->ndo_open;
dev->init = ops->ndo_init;
dev->stop = ops->ndo_stop;
dev->hard_start_xmit = ops->ndo_start_xmit;
dev->change_rx_flags = ops->ndo_change_rx_flags;
dev->set_multicast_list = ops->ndo_set_multicast_list;
dev->validate_addr = ops->ndo_validate_addr;
dev->do_ioctl = ops->ndo_do_ioctl;
dev->set_config = ops->ndo_set_config;
dev->change_mtu = ops->ndo_change_mtu;
dev->set_mac_address = ops->ndo_set_mac_address;
dev->tx_timeout = ops->ndo_tx_timeout;
if (ops->ndo_get_stats)
dev->get_stats = ops->ndo_get_stats;
dev->vlan_rx_register = ops->ndo_vlan_rx_register;
dev->vlan_rx_add_vid = ops->ndo_vlan_rx_add_vid;
dev->vlan_rx_kill_vid = ops->ndo_vlan_rx_kill_vid;
#ifdef CONFIG_NET_POLL_CONTROLLER
dev->poll_controller = ops->ndo_poll_controller;
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
dev->select_queue = ops->ndo_select_queue;
#endif
}
Even though we have the static inline in compat it still means
every driver must be changed to use it. For example:
--- a/drivers/net/usb/rndis_host.c
+++ b/drivers/net/usb/rndis_host.c
@@ -358,7 +358,7 @@ generic_rndis_bind(struct usbnet *dev, s
dev->rx_urb_size &= ~(dev->maxpacket - 1);
u.init->max_transfer_size = cpu_to_le32(dev->rx_urb_size);
- net->netdev_ops = &rndis_netdev_ops;
+ netdev_attach_ops(net, &rndis_netdev_ops);
retval = rndis_command(dev, u.header, CONTROL_BUFFER_SIZE);
if (unlikely(retval < 0)) {
This is just one driver. The patch that deals with this collateral
evolution is now 290 lines. I've been working with Julia to express
these type of tranformations as SmPL grammar, seeing if its possible
to use the inverse of SmPL in the long run, and so on... but in the end,
if we add a static inline upstream for small changes like these -- we'd
end up requring zero changes for the backport of these type of collateral
evolutions.
This should mean less bugs and cleaner backport code and maintenance.
Curious if video guys would care to accept this as an example simple
test case to help with the project with this respective small
collateral evolution and test case.
What follows are patches that deal with the changes on all the projects.
I'll apply the compat and compat-driver patches now as these are required,
but if my fb patch (patch #4 in this series) is accepted it'd simpify
backporting this collateral evolution for all video drivers tremendously.
[0] https://backports.wiki.kernel.org
[1] http://www.do-not-panic.com/2012/08/automatically-backporting-linux-kernel.html
[2] https://git.kernel.org/cgit/linux/kernel/git/mcgrof/compat.git/
[3] http://www.do-not-panic.com/2012/08/optimizing-backporting-collateral.html
linux-next:
Luis R. Rodriguez (1):
fb: add helpers to enable and test for the skip_vt_switch
drivers/gpu/drm/i915/intel_fb.c | 2 +-
drivers/video/fbmem.c | 2 +-
include/linux/fb.h | 10 ++++++++++
3 files changed, 12 insertions(+), 2 deletions(-)
compat:
Luis R. Rodriguez (1):
compat: backport fb_info->skip_vt_switch using a static inline
include/linux/compat-3.10.h | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
compat-drivers:
Luis R. Rodriguez (2):
compat-drivers: backport fb_info->skip_vt_switch using ifdefs
compat-drivers: simplify backport fb_info->skip_vt_switch CE
.../drm/0001-fb-info-vt_switch.patch | 56 ++++++++++++++++++++
1 file changed, 56 insertions(+)
create mode 100644 patches/collateral-evolutions/drm/0001-fb-info-vt_switch.patch
--
1.7.10.4
^ permalink raw reply
* Re: [PATCH 6/6] video: fb: vt8500: Convert framebuffer drivers to standardized binding
From: Tony Prisk @ 2013-03-28 5:04 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <5152D39F.1090104@ti.com>
On Wed, 2013-03-27 at 13:10 +0200, Tomi Valkeinen wrote:
> Hi,
>
> On 2013-03-27 10:47, Tony Prisk wrote:
> > Now that a display timing binding is available, convert our almost identical
> > binding to use the standard binding.
> >
> > This patch converts the vt8500 and wm8505 framebuffer drivers and
> > associated dts/dtsi files to use the standard binding as defined in
> > bindings/video/display-timing.txt.
> >
> > There are two side-effects of making this conversion:
> >
> > 1) The fb node should now be in the board file, rather than the soc file as
> > the display-timing node is a child of the fb node.
> >
> > 2) We still require a bits per pixel property to initialize the framebuffer
> > for the different lcd panels. Rather than including this as part of the
> > display timing, it is moved into the framebuffer node.
> >
> > I have also taken the opportunity to alphabetise the includes of each
> > driver to avoid double-ups.
>
> I don't think this is correct. I don't have that much experience with
> DT, but I think you should have, for example:
>
> wm8850.dtsi:
>
> fb: fb@d8051700 {
> compatible = "wm,wm8505-fb";
> reg = <0xd8051700 0x200>;
> };
>
> wm8850-w70v2.dts:
>
> &fb {
> bits-per-pixel = <16>;
>
> display-timings {
> native-mode = <&timing0>;
> timing0: 800x480 {
> clock-frequency = <0>;
> ...
> };
> };
> };
>
> So, the core fb part should be in the SoC's file, as it's part of the
> SoC. And the stuff that tells what kind of display is attached is in the
> board dts file.
>
> Also, just a word of warning, I think the videomode series I've sent for
> review will cause some breakage with this series if the videomode series
> is accepted. Nothing difficult to fix, though, but we'll need some extra
> management to avoid compilation failures.
>
> Tomi
>
>
Thanks for the feedback and the heads-up.
I believe you are correct about the DT info - it looks right when
described the way you did, so I have changed it.
If there is no other feedback, I will post a version 2 after Easter.
Regards
Tony P
^ permalink raw reply
* Re: [PATCH] video: fixed missing iounmap coccinelle errors
From: Tony Prisk @ 2013-03-28 4:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1364427805-11972-1-git-send-email-epure.andrei@gmail.com>
On Thu, 2013-03-28 at 01:43 +0200, Andrei Epure wrote:
> Modified or added the necessary goto statements so that the ioremapped
> regions get unmapped before return.
>
> Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
> ---
> drivers/video/vt8500lcdfb.c | 7 ++++---
> drivers/video/wm8505fb.c | 7 ++++---
> 2 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
> index aa2579c..b4ccca2 100644
> --- a/drivers/video/vt8500lcdfb.c
> +++ b/drivers/video/vt8500lcdfb.c
> @@ -350,7 +350,7 @@ static int vt8500lcd_probe(struct platform_device *pdev)
> if (!np) {
> pr_err("%s: No display description in Device Tree\n", __func__);
> ret = -EINVAL;
> - goto failed_free_res;
> + goto failed_free_io;
> }
>
> /*
> @@ -369,7 +369,7 @@ static int vt8500lcd_probe(struct platform_device *pdev)
> ret |= of_property_read_u32(np, "bpp", &bpp);
> if (ret) {
> pr_err("%s: Unable to read display properties\n", __func__);
> - goto failed_free_res;
> + goto failed_free_io;
> }
> of_mode.vmode = FB_VMODE_NONINTERLACED;
>
> @@ -379,7 +379,8 @@ static int vt8500lcd_probe(struct platform_device *pdev)
> GFP_KERNEL);
> if (!fb_mem_virt) {
> pr_err("%s: Failed to allocate framebuffer\n", __func__);
> - return -ENOMEM;
> + ret = -ENOMEM;
> + goto failed_free_io;
> };
>
> fbi->fb.fix.smem_start = fb_mem_phys;
> diff --git a/drivers/video/wm8505fb.c b/drivers/video/wm8505fb.c
> index 4dd0580..2e8298e 100644
> --- a/drivers/video/wm8505fb.c
> +++ b/drivers/video/wm8505fb.c
> @@ -332,7 +332,7 @@ static int wm8505fb_probe(struct platform_device *pdev)
> if (!np) {
> pr_err("%s: No display description in Device Tree\n", __func__);
> ret = -EINVAL;
> - goto failed_free_res;
> + goto failed_free_io;
> }
>
> /*
> @@ -351,7 +351,7 @@ static int wm8505fb_probe(struct platform_device *pdev)
> ret |= of_property_read_u32(np, "bpp", &bpp);
> if (ret) {
> pr_err("%s: Unable to read display properties\n", __func__);
> - goto failed_free_res;
> + goto failed_free_io;
> }
>
> of_mode.vmode = FB_VMODE_NONINTERLACED;
> @@ -369,7 +369,8 @@ static int wm8505fb_probe(struct platform_device *pdev)
> GFP_KERNEL);
> if (!fb_mem_virt) {
> pr_err("%s: Failed to allocate framebuffer\n", __func__);
> - return -ENOMEM;
> + ret = -ENOMEM;
> + goto failed_free_io;
> };
>
> fbi->fb.var.xres_virtual = of_mode.xres;
NACK
Already have a patch queued up for this from Julia Lawall
Regards
Tony P
^ permalink raw reply
* Re: [Bulk] [PATCH] video: fix invalid free of devm_ allocated data
From: Tony Prisk @ 2013-03-28 4:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1364428524-13821-1-git-send-email-epure.andrei@gmail.com>
On Thu, 2013-03-28 at 01:55 +0200, Andrei Epure wrote:
> The objects allocated by devm_* APIs are managed by devres and are freed when
> the device is detached. Hence there is no need to use kfree() explicitly.
> Patch found using coccinelle.
>
> Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
> ---
> drivers/video/vt8500lcdfb.c | 3 ---
> drivers/video/wm8505fb.c | 3 ---
> 2 files changed, 6 deletions(-)
>
> diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
> index b4ccca2..ea3ee61 100644
> --- a/drivers/video/vt8500lcdfb.c
> +++ b/drivers/video/vt8500lcdfb.c
> @@ -465,7 +465,6 @@ failed_free_res:
> release_mem_region(res->start, resource_size(res));
> failed_fbi:
> platform_set_drvdata(pdev, NULL);
> - kfree(fbi);
> failed:
> return ret;
> }
> @@ -494,8 +493,6 @@ static int vt8500lcd_remove(struct platform_device *pdev)
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> release_mem_region(res->start, resource_size(res));
>
> - kfree(fbi);
> -
> return 0;
> }
>
> diff --git a/drivers/video/wm8505fb.c b/drivers/video/wm8505fb.c
> index 2e8298e..34a2de1 100644
> --- a/drivers/video/wm8505fb.c
> +++ b/drivers/video/wm8505fb.c
> @@ -427,7 +427,6 @@ failed_free_res:
> release_mem_region(res->start, resource_size(res));
> failed_fbi:
> platform_set_drvdata(pdev, NULL);
> - kfree(fbi);
> failed:
> return ret;
> }
> @@ -451,8 +450,6 @@ static int wm8505fb_remove(struct platform_device *pdev)
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> release_mem_region(res->start, resource_size(res));
>
> - kfree(fbi);
> -
> return 0;
> }
>
NACK
Already have a patch queued up for this from Julia Lawall
Regards
Tony P
^ permalink raw reply
* Re: [PATCH] video: mmp: removed reference preceded by free
From: Zhou Zhu @ 2013-03-28 1:38 UTC (permalink / raw)
To: Andrei Epure
Cc: FlorianSchandinat@gmx.de, akpm@linux-foundation.org,
haojian.zhuang@gmail.com, Lisa Du, linux-fbdev@vger.kernel.org,
linux-kernel@vger.kernel.org
In-Reply-To: <1364417318-26650-1-git-send-email-epure.andrei@gmail.com>
On 03/28/2013 04:48 AM, Andrei Epure wrote:
> Patch found with coccinelle.
>
> Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
> ---
> drivers/video/mmp/core.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/drivers/video/mmp/core.c b/drivers/video/mmp/core.c
> index 9ed8341..84de263 100644
> --- a/drivers/video/mmp/core.c
> +++ b/drivers/video/mmp/core.c
> @@ -252,7 +252,5 @@ void mmp_unregister_path(struct mmp_path *path)
>
> kfree(path);
> mutex_unlock(&disp_lock);
> -
> - dev_info(path->dev, "de-register %s\n", path->name);
> }
> EXPORT_SYMBOL_GPL(mmp_unregister_path);
>
Acked-by: Zhou Zhu <zzhu3@marvell.com>
^ permalink raw reply
* Re: [PATCH] video: exynos: remove useless safety check in list traversal
From: Donghwa Lee @ 2013-03-28 0:04 UTC (permalink / raw)
To: Andrei Epure
Cc: inki.dae, kyungmin.park, FlorianSchandinat, linux-fbdev,
linux-kernel
In-Reply-To: <1364419145-30375-1-git-send-email-epure.andrei@gmail.com>
Hi,
It looks good to me.
Acked-by: Donghwa Lee <dh09.lee@samsung.com>
Best regard,
Donghwa Lee
On Thu, Mar 28, 2013 at 06:19, Andrei Epure wrote:
> list_for_each_entry_safe() does not require safety check.
> Patch found using coccinelle.
>
> Signed-off-by: Andrei Epure<epure.andrei@gmail.com>
> ---
> drivers/video/exynos/exynos_mipi_dsi.c | 16 ++++++----------
> 1 file changed, 6 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/video/exynos/exynos_mipi_dsi.c b/drivers/video/exynos/exynos_mipi_dsi.c
> index dd5e5e9..fe84f08 100644
> --- a/drivers/video/exynos/exynos_mipi_dsi.c
> +++ b/drivers/video/exynos/exynos_mipi_dsi.c
> @@ -214,8 +214,6 @@ static struct mipi_dsim_ddi *exynos_mipi_dsi_find_lcd_device(
> mutex_lock(&mipi_dsim_lock);
>
> list_for_each_entry_safe(dsim_ddi, next, &dsim_ddi_list, list) {
> - if (!dsim_ddi)
> - goto out;
>
> lcd_dev = dsim_ddi->dsim_lcd_dev;
> if (!lcd_dev)
> @@ -473,17 +471,15 @@ static int exynos_mipi_dsi_remove(struct platform_device *pdev)
> clk_disable(dsim->clock);
>
> list_for_each_entry_safe(dsim_ddi, next, &dsim_ddi_list, list) {
> - if (dsim_ddi) {
> - if (dsim->id != dsim_ddi->bus_id)
> - continue;
> + if (dsim->id != dsim_ddi->bus_id)
> + continue;
>
> - dsim_lcd_drv = dsim_ddi->dsim_lcd_drv;
> + dsim_lcd_drv = dsim_ddi->dsim_lcd_drv;
>
> - if (dsim_lcd_drv->remove)
> - dsim_lcd_drv->remove(dsim_ddi->dsim_lcd_dev);
> + if (dsim_lcd_drv->remove)
> + dsim_lcd_drv->remove(dsim_ddi->dsim_lcd_dev);
>
> - kfree(dsim_ddi);
> - }
> + kfree(dsim_ddi);
> }
>
> return 0;
^ permalink raw reply
* [PATCH] video: fix invalid free of devm_ allocated data
From: Andrei Epure @ 2013-03-27 23:55 UTC (permalink / raw)
To: linux-arm-kernel
The objects allocated by devm_* APIs are managed by devres and are freed when
the device is detached. Hence there is no need to use kfree() explicitly.
Patch found using coccinelle.
Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
---
drivers/video/vt8500lcdfb.c | 3 ---
drivers/video/wm8505fb.c | 3 ---
2 files changed, 6 deletions(-)
diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
index b4ccca2..ea3ee61 100644
--- a/drivers/video/vt8500lcdfb.c
+++ b/drivers/video/vt8500lcdfb.c
@@ -465,7 +465,6 @@ failed_free_res:
release_mem_region(res->start, resource_size(res));
failed_fbi:
platform_set_drvdata(pdev, NULL);
- kfree(fbi);
failed:
return ret;
}
@@ -494,8 +493,6 @@ static int vt8500lcd_remove(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(res->start, resource_size(res));
- kfree(fbi);
-
return 0;
}
diff --git a/drivers/video/wm8505fb.c b/drivers/video/wm8505fb.c
index 2e8298e..34a2de1 100644
--- a/drivers/video/wm8505fb.c
+++ b/drivers/video/wm8505fb.c
@@ -427,7 +427,6 @@ failed_free_res:
release_mem_region(res->start, resource_size(res));
failed_fbi:
platform_set_drvdata(pdev, NULL);
- kfree(fbi);
failed:
return ret;
}
@@ -451,8 +450,6 @@ static int wm8505fb_remove(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(res->start, resource_size(res));
- kfree(fbi);
-
return 0;
}
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH] video: exynos: Convert to devm_ioremap_resource()
From: Donghwa Lee @ 2013-03-27 23:52 UTC (permalink / raw)
To: Andrei Epure
Cc: inki.dae, kyungmin.park, FlorianSchandinat, linux-fbdev,
linux-kernel
In-Reply-To: <1364416081-24113-1-git-send-email-epure.andrei@gmail.com>
Hi,
Please refer to the following link.
http://marc.info/?l=linux-fbdev&m\x135963121130437&w=2
Best regard,
Donghwa Lee
On Thu, Mar 28, 2013 at 05:28, Andrei Epure wrote:
> The new devm_ioremap_resource() provides its own error messages.
> Patch found using coccinelle.
>
> Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
> ---
> drivers/video/exynos/exynos_mipi_dsi.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/video/exynos/exynos_mipi_dsi.c b/drivers/video/exynos/exynos_mipi_dsi.c
> index fac7df6..dd5e5e9 100644
> --- a/drivers/video/exynos/exynos_mipi_dsi.c
> +++ b/drivers/video/exynos/exynos_mipi_dsi.c
> @@ -384,10 +384,9 @@ static int exynos_mipi_dsi_probe(struct platform_device *pdev)
>
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>
> - dsim->reg_base = devm_request_and_ioremap(&pdev->dev, res);
> - if (!dsim->reg_base) {
> - dev_err(&pdev->dev, "failed to remap io region\n");
> - ret = -ENOMEM;
> + dsim->reg_base = devm_ioremap_resource(&pdev->dev, res);
> + if (IS_ERR(dsim->reg_base)) {
> + ret = PTR_ERR(dsim->reg_base);
> goto error;
> }
>
^ permalink raw reply
* [PATCH] video: fixed missing iounmap coccinelle errors
From: Andrei Epure @ 2013-03-27 23:43 UTC (permalink / raw)
To: linux-arm-kernel
Modified or added the necessary goto statements so that the ioremapped
regions get unmapped before return.
Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
---
drivers/video/vt8500lcdfb.c | 7 ++++---
drivers/video/wm8505fb.c | 7 ++++---
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
index aa2579c..b4ccca2 100644
--- a/drivers/video/vt8500lcdfb.c
+++ b/drivers/video/vt8500lcdfb.c
@@ -350,7 +350,7 @@ static int vt8500lcd_probe(struct platform_device *pdev)
if (!np) {
pr_err("%s: No display description in Device Tree\n", __func__);
ret = -EINVAL;
- goto failed_free_res;
+ goto failed_free_io;
}
/*
@@ -369,7 +369,7 @@ static int vt8500lcd_probe(struct platform_device *pdev)
ret |= of_property_read_u32(np, "bpp", &bpp);
if (ret) {
pr_err("%s: Unable to read display properties\n", __func__);
- goto failed_free_res;
+ goto failed_free_io;
}
of_mode.vmode = FB_VMODE_NONINTERLACED;
@@ -379,7 +379,8 @@ static int vt8500lcd_probe(struct platform_device *pdev)
GFP_KERNEL);
if (!fb_mem_virt) {
pr_err("%s: Failed to allocate framebuffer\n", __func__);
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto failed_free_io;
};
fbi->fb.fix.smem_start = fb_mem_phys;
diff --git a/drivers/video/wm8505fb.c b/drivers/video/wm8505fb.c
index 4dd0580..2e8298e 100644
--- a/drivers/video/wm8505fb.c
+++ b/drivers/video/wm8505fb.c
@@ -332,7 +332,7 @@ static int wm8505fb_probe(struct platform_device *pdev)
if (!np) {
pr_err("%s: No display description in Device Tree\n", __func__);
ret = -EINVAL;
- goto failed_free_res;
+ goto failed_free_io;
}
/*
@@ -351,7 +351,7 @@ static int wm8505fb_probe(struct platform_device *pdev)
ret |= of_property_read_u32(np, "bpp", &bpp);
if (ret) {
pr_err("%s: Unable to read display properties\n", __func__);
- goto failed_free_res;
+ goto failed_free_io;
}
of_mode.vmode = FB_VMODE_NONINTERLACED;
@@ -369,7 +369,8 @@ static int wm8505fb_probe(struct platform_device *pdev)
GFP_KERNEL);
if (!fb_mem_virt) {
pr_err("%s: Failed to allocate framebuffer\n", __func__);
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto failed_free_io;
};
fbi->fb.var.xres_virtual = of_mode.xres;
--
1.7.9.5
^ permalink raw reply related
* [PATCH] video: exynos: remove useless safety check in list traversal
From: Andrei Epure @ 2013-03-27 21:19 UTC (permalink / raw)
To: inki.dae, dh09.lee, kyungmin.park, FlorianSchandinat
Cc: linux-fbdev, linux-kernel, Andrei Epure
list_for_each_entry_safe() does not require safety check.
Patch found using coccinelle.
Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
---
drivers/video/exynos/exynos_mipi_dsi.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/drivers/video/exynos/exynos_mipi_dsi.c b/drivers/video/exynos/exynos_mipi_dsi.c
index dd5e5e9..fe84f08 100644
--- a/drivers/video/exynos/exynos_mipi_dsi.c
+++ b/drivers/video/exynos/exynos_mipi_dsi.c
@@ -214,8 +214,6 @@ static struct mipi_dsim_ddi *exynos_mipi_dsi_find_lcd_device(
mutex_lock(&mipi_dsim_lock);
list_for_each_entry_safe(dsim_ddi, next, &dsim_ddi_list, list) {
- if (!dsim_ddi)
- goto out;
lcd_dev = dsim_ddi->dsim_lcd_dev;
if (!lcd_dev)
@@ -473,17 +471,15 @@ static int exynos_mipi_dsi_remove(struct platform_device *pdev)
clk_disable(dsim->clock);
list_for_each_entry_safe(dsim_ddi, next, &dsim_ddi_list, list) {
- if (dsim_ddi) {
- if (dsim->id != dsim_ddi->bus_id)
- continue;
+ if (dsim->id != dsim_ddi->bus_id)
+ continue;
- dsim_lcd_drv = dsim_ddi->dsim_lcd_drv;
+ dsim_lcd_drv = dsim_ddi->dsim_lcd_drv;
- if (dsim_lcd_drv->remove)
- dsim_lcd_drv->remove(dsim_ddi->dsim_lcd_dev);
+ if (dsim_lcd_drv->remove)
+ dsim_lcd_drv->remove(dsim_ddi->dsim_lcd_dev);
- kfree(dsim_ddi);
- }
+ kfree(dsim_ddi);
}
return 0;
--
1.7.9.5
^ permalink raw reply related
* [PATCH] video: mmp: removed reference preceded by free
From: Andrei Epure @ 2013-03-27 20:48 UTC (permalink / raw)
To: FlorianSchandinat
Cc: akpm, haojian.zhuang, cldu, zzhu3, linux-fbdev, linux-kernel,
Andrei Epure
Patch found with coccinelle.
Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
---
drivers/video/mmp/core.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/video/mmp/core.c b/drivers/video/mmp/core.c
index 9ed8341..84de263 100644
--- a/drivers/video/mmp/core.c
+++ b/drivers/video/mmp/core.c
@@ -252,7 +252,5 @@ void mmp_unregister_path(struct mmp_path *path)
kfree(path);
mutex_unlock(&disp_lock);
-
- dev_info(path->dev, "de-register %s\n", path->name);
}
EXPORT_SYMBOL_GPL(mmp_unregister_path);
--
1.7.9.5
^ permalink raw reply related
* [PATCH] video: omap2: dss: use PTR_RET function
From: Andrei Epure @ 2013-03-27 20:35 UTC (permalink / raw)
To: tomi.valkeinen, FlorianSchandinat
Cc: sumit.semwal, archit, cmahapatra, linux-omap, linux-fbdev,
linux-kernel, Andrei Epure
Use PTR_RET function instead of IS_ERR + PTR_ERR.
Patch found using coccinelle.
Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
---
drivers/video/omap2/dss/core.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index f8779d4..60cc6fe 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -181,10 +181,7 @@ int dss_debugfs_create_file(const char *name, void (*write)(struct seq_file *))
d = debugfs_create_file(name, S_IRUGO, dss_debugfs_dir,
write, &dss_debug_fops);
- if (IS_ERR(d))
- return PTR_ERR(d);
-
- return 0;
+ return PTR_RET(d);
}
#else /* CONFIG_OMAP2_DSS_DEBUGFS */
static inline int dss_initialize_debugfs(void)
--
1.7.9.5
^ permalink raw reply related
* [PATCH] video: exynos: Convert to devm_ioremap_resource()
From: Andrei Epure @ 2013-03-27 20:28 UTC (permalink / raw)
To: inki.dae, dh09.lee, kyungmin.park, FlorianSchandinat
Cc: linux-fbdev, linux-kernel, Andrei Epure
The new devm_ioremap_resource() provides its own error messages.
Patch found using coccinelle.
Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
---
drivers/video/exynos/exynos_mipi_dsi.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/video/exynos/exynos_mipi_dsi.c b/drivers/video/exynos/exynos_mipi_dsi.c
index fac7df6..dd5e5e9 100644
--- a/drivers/video/exynos/exynos_mipi_dsi.c
+++ b/drivers/video/exynos/exynos_mipi_dsi.c
@@ -384,10 +384,9 @@ static int exynos_mipi_dsi_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- dsim->reg_base = devm_request_and_ioremap(&pdev->dev, res);
- if (!dsim->reg_base) {
- dev_err(&pdev->dev, "failed to remap io region\n");
- ret = -ENOMEM;
+ dsim->reg_base = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(dsim->reg_base)) {
+ ret = PTR_ERR(dsim->reg_base);
goto error;
}
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH 00/26] DSS device model change
From: Tony Lindgren @ 2013-03-27 20:25 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-omap, linux-fbdev, Archit Taneja
In-Reply-To: <51528E1F.9080608@ti.com>
* Tomi Valkeinen <tomi.valkeinen@ti.com> [130326 23:18]:
> On 2013-03-26 19:10, Tony Lindgren wrote:
> > * Tomi Valkeinen <tomi.valkeinen@ti.com> [130326 06:38]:
> >> Note about board files: I only convert a few board files here for example. I
> >> have a branch with board file changes for all the affected board files. I did
> >> not include them as they are more or less identical. If this series looks good,
> >> I will create an independent branch for the arch/arm stuff, so it can be pulled
> >> separately.
> >
> > Great looks good to me thanks.
>
> To make the DSS work properly after this device model change, we also
> need to solve the problem related to multiple display devices on the
> same video bus.
>
> Did the approach I suggested in
>
> http://permalink.gmane.org/gmane.linux.ports.arm.omap/96039
>
> look ok? Overo is the most complex one, I think the rest of the boards
> that require changes have just LCD and DVI that conflict. But it still
> means we'll have that kind of choice Kconfig option for all those boards.
Yes I think that's the best way to go until we just drop the board-*.c
files in favor of device tree.
Regards,
Tony
^ permalink raw reply
* [PATCH] drivers: video: matrox: changed kmalloc+memset with kzalloc
From: Andrei Epure @ 2013-03-27 20:12 UTC (permalink / raw)
To: FlorianSchandinat, linux-fbdev; +Cc: linux-kernel, Andrei Epure
Signed-off-by: Andrei Epure <epure.andrei@gmail.com>
---
drivers/video/matrox/matroxfb_base.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/video/matrox/matroxfb_base.c b/drivers/video/matrox/matroxfb_base.c
index 401a56e..2456529 100644
--- a/drivers/video/matrox/matroxfb_base.c
+++ b/drivers/video/matrox/matroxfb_base.c
@@ -2029,10 +2029,9 @@ static int matroxfb_probe(struct pci_dev* pdev, const struct pci_device_id* dumm
return -1;
}
- minfo = kmalloc(sizeof(*minfo), GFP_KERNEL);
+ minfo = kzalloc(sizeof(*minfo), GFP_KERNEL);
if (!minfo)
return -1;
- memset(minfo, 0, sizeof(*minfo));
minfo->pcidev = pdev;
minfo->dead = 0;
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH] powerpc: remove PReP
From: Benjamin Herrenschmidt @ 2013-03-27 15:27 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Paul Bolle, Florian Tobias Schandinat, linux-doc, linux-fbdev,
linux-kernel, Paul Mackerras, Rob Landley, Bjorn Helgaas,
linuxppc-dev, Adam Belay
In-Reply-To: <CAMuHMdVs-Xxu9e=8WZbTBXE1_+iYOBKODgj9_EKmVbZA3z=8JA@mail.gmail.com>
On Wed, 2013-03-27 at 13:05 +0100, Geert Uytterhoeven wrote:
> On Wed, Mar 27, 2013 at 11:47 AM, Paul Bolle <pebolle@tiscali.nl> wrote:
> > 3) I removed two files in documentation that are almost entirely PReP
> > specific. The remaining lines looked uninteresting.
>
> > --- a/Documentation/powerpc/sound.txt
> > +++ /dev/null
>
> > -2. IBM CHRP
> > -
> > - I have only tested this on the 43P-150. Build the kernel with the cs4232
> > - set as a module and load the module with irq=9 dma=1 dma2=2 io=0x550
>
> This section is CHRP-specific. The cs4232 driver also worked on the
> CHRP LongTrail.
> But I don't remember if the parameter values above also applied to LongTrail.
> I do remember it didn't work without specifing the right parameters, so you
> probably want to keep this section.
Isn't LongTrail support LongDead ? Can we still boot these things at
all ? Anybody still has a functional one ?
Cheers,
Ben.
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
^ permalink raw reply
* Re: [PATCH] powerpc: remove PReP
From: Paul Bolle @ 2013-03-27 12:55 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: linux-fbdev, Florian Tobias Schandinat, linux-doc, linux-kernel,
Paul Mackerras, Rob Landley, Bjorn Helgaas, linuxppc-dev
In-Reply-To: <1364388152.1345.29.camel@x61.thuisdomein>
By the way, I get bounces from Adam's address:
> I'm sorry to have to inform you that your message could not
> be delivered to one or more recipients. It's attached below.
>
> For further assistance, please send mail to <postmaster>
>
> If you do so, please include this problem report. You can
> delete your own text from the attached returned message.
>
> <abelay@mit.edu>: 550 5.1.1 <abelay@mit.edu>... User unknown
(It's now removed from the CC line.) Does anyone know what's going on
here?
Paul Bolle
^ permalink raw reply
* Re: [PATCH] powerpc: remove PReP
From: Paul Bolle @ 2013-03-27 12:42 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: linux-fbdev, Florian Tobias Schandinat, linux-doc, linux-kernel,
Paul Mackerras, Rob Landley, Bjorn Helgaas, linuxppc-dev,
Adam Belay
In-Reply-To: <CAMuHMdVs-Xxu9e=8WZbTBXE1_+iYOBKODgj9_EKmVbZA3z=8JA@mail.gmail.com>
On Wed, 2013-03-27 at 13:05 +0100, Geert Uytterhoeven wrote:
> This section is CHRP-specific. The cs4232 driver also worked on the
> CHRP LongTrail.
> But I don't remember if the parameter values above also applied to LongTrail.
> I do remember it didn't work without specifing the right parameters, so you
> probably want to keep this section.
My reasoning was quite simply that this file was 14 years old so that
probably nobody is using that stuff anymore. Are people actually using
CHRP (whatever that is)? Anyhow, cs4232 is mentioned in some other files
too:
$ git grep -l -n cs4232 Documentation/
Documentation/powerpc/sound.txt
Documentation/sound/alsa/ALSA-Configuration.txt
Documentation/sound/alsa/alsa-parameters.txt
Documentation/sound/oss/Introduction
Documentation/sound/oss/Tropez+
Could these few lines be dumped in one of these (except
powerpc/sound.txt, of course)?
Paul Bolle
^ permalink raw reply
* Re: [PATCH] powerpc: remove PReP
From: Geert Uytterhoeven @ 2013-03-27 12:05 UTC (permalink / raw)
To: Paul Bolle
Cc: linux-fbdev, Florian Tobias Schandinat, linux-doc, linux-kernel,
Paul Mackerras, Rob Landley, Bjorn Helgaas, linuxppc-dev,
Adam Belay
In-Reply-To: <1364381223.1345.18.camel@x61.thuisdomein>
On Wed, Mar 27, 2013 at 11:47 AM, Paul Bolle <pebolle@tiscali.nl> wrote:
> 3) I removed two files in documentation that are almost entirely PReP
> specific. The remaining lines looked uninteresting.
> --- a/Documentation/powerpc/sound.txt
> +++ /dev/null
> -2. IBM CHRP
> -
> - I have only tested this on the 43P-150. Build the kernel with the cs4232
> - set as a module and load the module with irq=9 dma=1 dma2=2 io=0x550
This section is CHRP-specific. The cs4232 driver also worked on the
CHRP LongTrail.
But I don't remember if the parameter values above also applied to LongTrail.
I do remember it didn't work without specifing the right parameters, so you
probably want to keep this section.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply
* Re: [PATCH 16/26] OMAPDSS: TFP410: convert to platform device
From: Archit Taneja @ 2013-03-27 11:29 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-omap, linux-fbdev
In-Reply-To: <5152D49A.2090309@ti.com>
On Wednesday 27 March 2013 04:44 PM, Tomi Valkeinen wrote:
> On 2013-03-27 13:11, Archit Taneja wrote:
>> On Tuesday 26 March 2013 07:03 PM, Tomi Valkeinen wrote:
>>> Convert TFP410 driver from omap_dss_driver to a platform driver. The
>>> driver uses the new panel support from omapdss.
>>>
>>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
>>> ---
>>> drivers/video/omap2/displays/panel-tfp410.c | 205
>>> +++++++++++++++++----------
>>> 1 file changed, 128 insertions(+), 77 deletions(-)
>>>
>
>>> - ddata->i2c_adapter = adapter;
>>> + dssdev = &ddata->dssdev;
>>> + dssdev->driver = &tfp410_driver;
>>> + dssdev->panel.timings = tfp410_default_timings;
>>> + dssdev->name = ddata->name;
>>> + dssdev->phy.dpi.data_lines = ddata->data_lines;
>>> + dssdev->panel_dev = &pdev->dev;
>>
>> Some of the omap_dss_device fields populated here(like data_lines) are
>> not going to be used anywhere. Are you populating all of them just for
>> the sake of clarity, so that they can be removed in another series later
>> on? Or is there some other reason?
>
> Unfortunately the datalines are used in
> omapdss_default_get_recommended_bpp(). So there are some fields
> populated just to keep things working, and I expect that they are
> removed later.
Ah okay, missed that. I guess it will be easier to remove these later on
anyway.
Archit
^ permalink raw reply
* Re: [PATCH 16/26] OMAPDSS: TFP410: convert to platform device
From: Archit Taneja @ 2013-03-27 11:23 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-omap, linux-fbdev
In-Reply-To: <1364304836-18134-17-git-send-email-tomi.valkeinen@ti.com>
On Tuesday 26 March 2013 07:03 PM, Tomi Valkeinen wrote:
> Convert TFP410 driver from omap_dss_driver to a platform driver. The
> driver uses the new panel support from omapdss.
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
> ---
> drivers/video/omap2/displays/panel-tfp410.c | 205 +++++++++++++++++----------
> 1 file changed, 128 insertions(+), 77 deletions(-)
>
> diff --git a/drivers/video/omap2/displays/panel-tfp410.c b/drivers/video/omap2/displays/panel-tfp410.c
> index 8281baa..a225ea1 100644
> --- a/drivers/video/omap2/displays/panel-tfp410.c
> +++ b/drivers/video/omap2/displays/panel-tfp410.c
> @@ -22,10 +22,13 @@
> #include <video/omapdss.h>
> #include <linux/i2c.h>
> #include <linux/gpio.h>
> +#include <linux/platform_device.h>
> #include <drm/drm_edid.h>
>
> #include <video/omap-panel-tfp410.h>
>
> +static struct omap_dss_driver tfp410_driver;
> +
> static const struct omap_video_timings tfp410_default_timings = {
> .x_res = 640,
> .y_res = 480,
> @@ -48,121 +51,152 @@ static const struct omap_video_timings tfp410_default_timings = {
> };
>
> struct panel_drv_data {
> - struct omap_dss_device *dssdev;
> + struct omap_dss_device dssdev;
>
> struct mutex lock;
>
> + const char *name;
> +
> int pd_gpio;
> + int data_lines;
> +
> + struct omap_video_timings timings;
>
> struct i2c_adapter *i2c_adapter;
> };
>
> -static int tfp410_power_on(struct omap_dss_device *dssdev)
> +#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev)
> +
> +static int tfp410_probe_pdata(struct platform_device *pdev)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> - int r;
> + struct tfp410_platform_data *pdata = dev_get_platdata(&pdev->dev);
> + struct panel_drv_data *ddata = dev_get_drvdata(&pdev->dev);
> + int r, gpio, i2c_bus_num;
>
> - if (dssdev->state = OMAP_DSS_DISPLAY_ACTIVE)
> - return 0;
> + ddata->name = pdata->name;
>
> - omapdss_dpi_set_timings(dssdev, &dssdev->panel.timings);
> - omapdss_dpi_set_data_lines(dssdev, dssdev->phy.dpi.data_lines);
> + gpio = pdata->power_down_gpio;
>
> - r = omapdss_dpi_display_enable(dssdev);
> - if (r)
> - goto err0;
> + if (gpio_is_valid(gpio)) {
> + r = devm_gpio_request_one(&pdev->dev, gpio,
> + GPIOF_OUT_INIT_LOW, "tfp410 pd");
> + if (r) {
> + dev_err(&pdev->dev, "Failed to request PD GPIO %d\n",
> + gpio);
> + return r;
> + }
>
> - if (gpio_is_valid(ddata->pd_gpio))
> - gpio_set_value_cansleep(ddata->pd_gpio, 1);
> + ddata->pd_gpio = gpio;
> + } else {
> + ddata->pd_gpio = -1;
> + }
>
> - return 0;
> -err0:
> - return r;
> -}
> + ddata->data_lines = pdata->data_lines;
>
> -static void tfp410_power_off(struct omap_dss_device *dssdev)
> -{
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + i2c_bus_num = pdata->i2c_bus_num;
>
> - if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
> - return;
> + if (i2c_bus_num != -1) {
> + struct i2c_adapter *adapter;
>
> - if (gpio_is_valid(ddata->pd_gpio))
> - gpio_set_value_cansleep(ddata->pd_gpio, 0);
> + adapter = i2c_get_adapter(i2c_bus_num);
> + if (!adapter) {
> + dev_err(&pdev->dev,
> + "Failed to get I2C adapter, bus %d\n",
> + i2c_bus_num);
> + return -EINVAL;
> + }
>
> - omapdss_dpi_display_disable(dssdev);
> + ddata->i2c_adapter = adapter;
> + }
> +
> + return 0;
> }
>
> -static int tfp410_probe(struct omap_dss_device *dssdev)
> +static int tfp410_probe(struct platform_device *pdev)
> {
> + struct tfp410_platform_data *pdata = dev_get_platdata(&pdev->dev);
> + struct omap_dss_device *dssdev;
> struct panel_drv_data *ddata;
> int r;
> - int i2c_bus_num;
>
> - ddata = devm_kzalloc(&dssdev->dev, sizeof(*ddata), GFP_KERNEL);
> + ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL);
> if (!ddata)
> return -ENOMEM;
>
> - dssdev->panel.timings = tfp410_default_timings;
> + dev_set_drvdata(&pdev->dev, ddata);
>
> - ddata->dssdev = dssdev;
> mutex_init(&ddata->lock);
>
> - if (dssdev->data) {
> - struct tfp410_platform_data *pdata = dssdev->data;
> -
> - ddata->pd_gpio = pdata->power_down_gpio;
> - i2c_bus_num = pdata->i2c_bus_num;
> - } else {
> - ddata->pd_gpio = -1;
> - i2c_bus_num = -1;
> - }
> -
> - if (gpio_is_valid(ddata->pd_gpio)) {
> - r = devm_gpio_request_one(&dssdev->dev, ddata->pd_gpio,
> - GPIOF_OUT_INIT_LOW, "tfp410 pd");
> - if (r) {
> - dev_err(&dssdev->dev, "Failed to request PD GPIO %d\n",
> - ddata->pd_gpio);
> + if (pdata) {
> + r = tfp410_probe_pdata(pdev);
> + if (r)
> return r;
> - }
> + } else {
> + return -ENODEV;
> }
>
> - if (i2c_bus_num != -1) {
> - struct i2c_adapter *adapter;
> + ddata->timings = tfp410_default_timings;
>
> - adapter = i2c_get_adapter(i2c_bus_num);
> - if (!adapter) {
> - dev_err(&dssdev->dev, "Failed to get I2C adapter, bus %d\n",
> - i2c_bus_num);
> - return -EINVAL;
> - }
> -
> - ddata->i2c_adapter = adapter;
> + dssdev = &ddata->dssdev;
> + dssdev->driver = &tfp410_driver;
> + dssdev->panel.timings = tfp410_default_timings;
> + dssdev->name = ddata->name;
> + dssdev->phy.dpi.data_lines = ddata->data_lines;
> + dssdev->panel_dev = &pdev->dev;
Some of the omap_dss_device fields populated here(like data_lines) are
not going to be used anywhere. Are you populating all of them just for
the sake of clarity, so that they can be removed in another series later
on? Or is there some other reason?
Archit
> +
> + r = omap_dpi_register_panel(dssdev);
> + if (r) {
> + dev_err(&pdev->dev, "Failed to register panel\n");
> + return r;
> }
>
> - dev_set_drvdata(&dssdev->dev, ddata);
> -
> return 0;
> }
>
> -static void __exit tfp410_remove(struct omap_dss_device *dssdev)
> +static int __exit tfp410_remove(struct platform_device *pdev)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + struct panel_drv_data *ddata = dev_get_drvdata(&pdev->dev);
>
> mutex_lock(&ddata->lock);
>
> + omap_dpi_free_panel(&ddata->dssdev);
> +
> if (ddata->i2c_adapter)
> i2c_put_adapter(ddata->i2c_adapter);
>
> - dev_set_drvdata(&dssdev->dev, NULL);
> + dev_set_drvdata(&pdev->dev, NULL);
>
> mutex_unlock(&ddata->lock);
> +
> + return 0;
> +}
> +
> +static int tfp410_power_on(struct omap_dss_device *dssdev)
> +{
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
> + int r;
> +
> + if (dssdev->state = OMAP_DSS_DISPLAY_ACTIVE)
> + return 0;
> +
> + omapdss_dpi_set_timings(dssdev, &ddata->timings);
> + omapdss_dpi_set_data_lines(dssdev, ddata->data_lines);
> +
> + r = omapdss_dpi_display_enable(dssdev);
> + if (r)
> + goto err0;
> +
> + if (gpio_is_valid(ddata->pd_gpio))
> + gpio_set_value_cansleep(ddata->pd_gpio, 1);
> +
> + return 0;
> +err0:
> + return r;
> }
>
> static int tfp410_enable(struct omap_dss_device *dssdev)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
> int r;
>
> mutex_lock(&ddata->lock);
> @@ -176,9 +210,22 @@ static int tfp410_enable(struct omap_dss_device *dssdev)
> return r;
> }
>
> +static void tfp410_power_off(struct omap_dss_device *dssdev)
> +{
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
> +
> + if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
> + return;
> +
> + if (gpio_is_valid(ddata->pd_gpio))
> + gpio_set_value_cansleep(ddata->pd_gpio, 0);
> +
> + omapdss_dpi_display_disable(dssdev);
> +}
> +
> static void tfp410_disable(struct omap_dss_device *dssdev)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
>
> mutex_lock(&ddata->lock);
>
> @@ -192,18 +239,19 @@ static void tfp410_disable(struct omap_dss_device *dssdev)
> static void tfp410_set_timings(struct omap_dss_device *dssdev,
> struct omap_video_timings *timings)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
>
> mutex_lock(&ddata->lock);
> omapdss_dpi_set_timings(dssdev, timings);
> dssdev->panel.timings = *timings;
> + ddata->timings = *timings;
> mutex_unlock(&ddata->lock);
> }
>
> static void tfp410_get_timings(struct omap_dss_device *dssdev,
> struct omap_video_timings *timings)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
>
> mutex_lock(&ddata->lock);
> *timings = dssdev->panel.timings;
> @@ -213,7 +261,7 @@ static void tfp410_get_timings(struct omap_dss_device *dssdev,
> static int tfp410_check_timings(struct omap_dss_device *dssdev,
> struct omap_video_timings *timings)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
> int r;
>
> mutex_lock(&ddata->lock);
> @@ -258,7 +306,7 @@ static int tfp410_ddc_read(struct i2c_adapter *adapter,
> static int tfp410_read_edid(struct omap_dss_device *dssdev,
> u8 *edid, int len)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
> int r, l, bytes_read;
>
> mutex_lock(&ddata->lock);
> @@ -298,7 +346,7 @@ err:
>
> static bool tfp410_detect(struct omap_dss_device *dssdev)
> {
> - struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev);
> + struct panel_drv_data *ddata = to_panel_data(dssdev);
> unsigned char out;
> int r;
>
> @@ -319,9 +367,6 @@ out:
> }
>
> static struct omap_dss_driver tfp410_driver = {
> - .probe = tfp410_probe,
> - .remove = __exit_p(tfp410_remove),
> -
> .enable = tfp410_enable,
> .disable = tfp410_disable,
>
> @@ -329,23 +374,29 @@ static struct omap_dss_driver tfp410_driver = {
> .get_timings = tfp410_get_timings,
> .check_timings = tfp410_check_timings,
>
> + .get_resolution = omapdss_default_get_resolution,
> +
> .read_edid = tfp410_read_edid,
> .detect = tfp410_detect,
> +};
>
> - .driver = {
> - .name = "tfp410",
> - .owner = THIS_MODULE,
> +static struct platform_driver tfp410_platform_driver = {
> + .probe = tfp410_probe,
> + .remove = __exit_p(tfp410_remove),
> + .driver = {
> + .name = "tfp410",
> + .owner = THIS_MODULE,
> },
> };
>
> static int __init tfp410_init(void)
> {
> - return omap_dss_register_driver(&tfp410_driver);
> + return platform_driver_register(&tfp410_platform_driver);
> }
>
> static void __exit tfp410_exit(void)
> {
> - omap_dss_unregister_driver(&tfp410_driver);
> + platform_driver_unregister(&tfp410_platform_driver);
> }
>
> module_init(tfp410_init);
>
^ permalink raw reply
* Re: [PATCH 16/26] OMAPDSS: TFP410: convert to platform device
From: Tomi Valkeinen @ 2013-03-27 11:14 UTC (permalink / raw)
To: Archit Taneja; +Cc: linux-omap, linux-fbdev
In-Reply-To: <5152D3E8.9040603@ti.com>
[-- Attachment #1: Type: text/plain, Size: 1231 bytes --]
On 2013-03-27 13:11, Archit Taneja wrote:
> On Tuesday 26 March 2013 07:03 PM, Tomi Valkeinen wrote:
>> Convert TFP410 driver from omap_dss_driver to a platform driver. The
>> driver uses the new panel support from omapdss.
>>
>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
>> ---
>> drivers/video/omap2/displays/panel-tfp410.c | 205
>> +++++++++++++++++----------
>> 1 file changed, 128 insertions(+), 77 deletions(-)
>>
>> - ddata->i2c_adapter = adapter;
>> + dssdev = &ddata->dssdev;
>> + dssdev->driver = &tfp410_driver;
>> + dssdev->panel.timings = tfp410_default_timings;
>> + dssdev->name = ddata->name;
>> + dssdev->phy.dpi.data_lines = ddata->data_lines;
>> + dssdev->panel_dev = &pdev->dev;
>
> Some of the omap_dss_device fields populated here(like data_lines) are
> not going to be used anywhere. Are you populating all of them just for
> the sake of clarity, so that they can be removed in another series later
> on? Or is there some other reason?
Unfortunately the datalines are used in
omapdss_default_get_recommended_bpp(). So there are some fields
populated just to keep things working, and I expect that they are
removed later.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 899 bytes --]
^ permalink raw reply
* Re: [PATCH 6/6] video: fb: vt8500: Convert framebuffer drivers to standardized binding
From: Tomi Valkeinen @ 2013-03-27 11:10 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1364374021-10844-7-git-send-email-linux@prisktech.co.nz>
[-- Attachment #1: Type: text/plain, Size: 1717 bytes --]
Hi,
On 2013-03-27 10:47, Tony Prisk wrote:
> Now that a display timing binding is available, convert our almost identical
> binding to use the standard binding.
>
> This patch converts the vt8500 and wm8505 framebuffer drivers and
> associated dts/dtsi files to use the standard binding as defined in
> bindings/video/display-timing.txt.
>
> There are two side-effects of making this conversion:
>
> 1) The fb node should now be in the board file, rather than the soc file as
> the display-timing node is a child of the fb node.
>
> 2) We still require a bits per pixel property to initialize the framebuffer
> for the different lcd panels. Rather than including this as part of the
> display timing, it is moved into the framebuffer node.
>
> I have also taken the opportunity to alphabetise the includes of each
> driver to avoid double-ups.
I don't think this is correct. I don't have that much experience with
DT, but I think you should have, for example:
wm8850.dtsi:
fb: fb@d8051700 {
compatible = "wm,wm8505-fb";
reg = <0xd8051700 0x200>;
};
wm8850-w70v2.dts:
&fb {
bits-per-pixel = <16>;
display-timings {
native-mode = <&timing0>;
timing0: 800x480 {
clock-frequency = <0>;
...
};
};
};
So, the core fb part should be in the SoC's file, as it's part of the
SoC. And the stuff that tells what kind of display is attached is in the
board dts file.
Also, just a word of warning, I think the videomode series I've sent for
review will cause some breakage with this series if the videomode series
is accepted. Nothing difficult to fix, though, but we'll need some extra
management to avoid compilation failures.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 899 bytes --]
^ permalink raw reply
* [PATCH] powerpc: remove PReP
From: Paul Bolle @ 2013-03-27 10:47 UTC (permalink / raw)
To: Benjamin Herrenschmidt, Paul Mackerras, Rob Landley, Adam Belay,
Bjorn Helgaas, Florian Tobias Schandinat
Cc: linux-fbdev, linuxppc-dev, linux-kernel, linux-doc
In-Reply-To: <20130322042159.GC26908@concordia>
PPC_PREP is marked as BROKEN since v2.6.15. Remove all PReP specific
code now.
Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
---
0) Suggested by Michael.
1) Sent as one patch. powerpc is the biggest chunk (if one includes the
doc changes). Is it easier if I split this into a number maintainer
specific patches? Ie, split into: powerpc, doc, pnp and fb.
2) None of this is tested. None! Since I'm not actually involved in
powerpc in any way, not everyone might consider me the first choice to
do this cleanup.
3) I removed two files in documentation that are almost entirely PReP
specific. The remaining lines looked uninteresting.
4) I grepped thoroughly for second order effects. I also grepped for
remaining references to PReP. This patch has all things I thought that
could be dropped. Perhaps doing
git grep -n PReP | grep -v -i -e rewritten -e dougan
might still reveal, to those familiar with PReP, a few places of
outdated stuff.
Documentation/powerpc/00-INDEX | 4 --
Documentation/powerpc/sound.txt | 81 ---------------------------------
Documentation/powerpc/zImage_layout.txt | 47 -------------------
arch/powerpc/Kconfig | 8 ++--
arch/powerpc/include/asm/dma.h | 5 --
arch/powerpc/include/asm/io.h | 4 --
arch/powerpc/include/asm/processor.h | 9 +---
arch/powerpc/kernel/setup-common.c | 6 ---
arch/powerpc/platforms/Kconfig | 3 +-
arch/powerpc/platforms/prep/Kconfig | 23 ----------
drivers/pnp/pnpbios/core.c | 9 +---
drivers/video/cirrusfb.c | 62 +++++--------------------
12 files changed, 19 insertions(+), 242 deletions(-)
delete mode 100644 Documentation/powerpc/sound.txt
delete mode 100644 Documentation/powerpc/zImage_layout.txt
delete mode 100644 arch/powerpc/platforms/prep/Kconfig
diff --git a/Documentation/powerpc/00-INDEX b/Documentation/powerpc/00-INDEX
index 5620fb5..dd9e928 100644
--- a/Documentation/powerpc/00-INDEX
+++ b/Documentation/powerpc/00-INDEX
@@ -14,10 +14,6 @@ hvcs.txt
- IBM "Hypervisor Virtual Console Server" Installation Guide
mpc52xx.txt
- Linux 2.6.x on MPC52xx family
-sound.txt
- - info on sound support under Linux/PPC
-zImage_layout.txt
- - info on the kernel images for Linux/PPC
qe_firmware.txt
- describes the layout of firmware binaries for the Freescale QUICC
Engine and the code that parses and uploads the microcode therein.
diff --git a/Documentation/powerpc/sound.txt b/Documentation/powerpc/sound.txt
deleted file mode 100644
index df23d95..0000000
--- a/Documentation/powerpc/sound.txt
+++ /dev/null
@@ -1,81 +0,0 @@
- Information about PowerPC Sound support
-==================================-
-Please mail me (Cort Dougan, cort@fsmlabs.com) if you have questions,
-comments or corrections.
-
-Last Change: 6.16.99
-
-This just covers sound on the PReP and CHRP systems for now and later
-will contain information on the PowerMac's.
-
-Sound on PReP has been tested and is working with the PowerStack and IBM
-Power Series onboard sound systems which are based on the cs4231(2) chip.
-The sound options when doing the make config are a bit different from
-the default, though.
-
-The I/O base, irq and dma lines that you enter during the make config
-are ignored and are set when booting according to the machine type.
-This is so that one binary can be used for Motorola and IBM machines
-which use different values and isn't allowed by the driver, so things
-are hacked together in such a way as to allow this information to be
-set automatically on boot.
-
-1. Motorola PowerStack PReP machines
-
- Enable support for "Crystal CS4232 based (PnP) cards" and for the
- Microsoft Sound System. The MSS isn't used, but some of the routines
- that the CS4232 driver uses are in it.
-
- Although the options you set are ignored and determined automatically
- on boot these are included for information only:
-
- (830) CS4232 audio I/O base 530, 604, E80 or F40
- (10) CS4232 audio IRQ 5, 7, 9, 11, 12 or 15
- (6) CS4232 audio DMA 0, 1 or 3
- (7) CS4232 second (duplex) DMA 0, 1 or 3
-
- This will allow simultaneous record and playback, as 2 different dma
- channels are used.
-
- The sound will be all left channel and very low volume since the
- auxiliary input isn't muted by default. I had the changes necessary
- for this in the kernel but the sound driver maintainer didn't want
- to include them since it wasn't common in other machines. To fix this
- you need to mute it using a mixer utility of some sort (if you find one
- please let me know) or by patching the driver yourself and recompiling.
-
- There is a problem on the PowerStack 2's (PowerStack Pro's) using a
- different irq/drq than the kernel expects. Unfortunately, I don't know
- which irq/drq it is so if anyone knows please email me.
-
- Midi is not supported since the cs4232 driver doesn't support midi yet.
-
-2. IBM PowerPersonal PReP machines
-
- I've only tested sound on the Power Personal Series of IBM workstations
- so if you try it on others please let me know the result. I'm especially
- interested in the 43p's sound system, which I know nothing about.
-
- Enable support for "Crystal CS4232 based (PnP) cards" and for the
- Microsoft Sound System. The MSS isn't used, but some of the routines
- that the CS4232 driver uses are in it.
-
- Although the options you set are ignored and determined automatically
- on boot these are included for information only:
-
- (530) CS4232 audio I/O base 530, 604, E80 or F40
- (5) CS4232 audio IRQ 5, 7, 9, 11, 12 or 15
- (1) CS4232 audio DMA 0, 1 or 3
- (7) CS4232 second (duplex) DMA 0, 1 or 3
- (330) CS4232 MIDI I/O base 330, 370, 3B0 or 3F0
- (9) CS4232 MIDI IRQ 5, 7, 9, 11, 12 or 15
-
- This setup does _NOT_ allow for recording yet.
-
- Midi is not supported since the cs4232 driver doesn't support midi yet.
-
-2. IBM CHRP
-
- I have only tested this on the 43P-150. Build the kernel with the cs4232
- set as a module and load the module with irq=9 dma=1 dma2=2 io=0x550
diff --git a/Documentation/powerpc/zImage_layout.txt b/Documentation/powerpc/zImage_layout.txt
deleted file mode 100644
index 048e015..0000000
--- a/Documentation/powerpc/zImage_layout.txt
+++ /dev/null
@@ -1,47 +0,0 @@
- Information about the Linux/PPC kernel images
-==================================-
-Please mail me (Cort Dougan, cort@fsmlabs.com) if you have questions,
-comments or corrections.
-
-This document is meant to answer several questions I've had about how
-the PReP system boots and how Linux/PPC interacts with that mechanism.
-It would be nice if we could have information on how other architectures
-boot here as well. If you have anything to contribute, please
-let me know.
-
-
-1. PReP boot file
-
- This is the file necessary to boot PReP systems from floppy or
- hard drive. The firmware reads the PReP partition table entry
- and will load the image accordingly.
-
- To boot the zImage, copy it onto a floppy with dd if=zImage of=/dev/fd0h1440
- or onto a PReP hard drive partition with dd if=zImage of=/dev/sda4
- assuming you've created a PReP partition (type 0x41) with fdisk on
- /dev/sda4.
-
- The layout of the image format is:
-
- 0x0 +------------+
- | | PReP partition table entry
- | |
- 0x400 +------------+
- | | Bootstrap program code + data
- | |
- | |
- +------------+
- | | compressed kernel, elf header removed
- +------------+
- | | initrd (if loaded)
- +------------+
- | | Elf section table for bootstrap program
- +------------+
-
-
-2. MBX boot file
-
- The MBX boards can load an elf image, and relocate it to the
- proper location in memory - it copies the image to the location it was
- linked at.
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index ea5bb04..bc0a44f 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -647,14 +647,14 @@ menu "Bus options"
config ISA
bool "Support for ISA-bus hardware"
- depends on PPC_PREP || PPC_CHRP
+ depends on PPC_CHRP
select PPC_I8259
help
Find out whether you have ISA slots on your motherboard. ISA is the
name of a bus system, i.e. the way the CPU talks to the other stuff
inside your box. If you have an Apple machine, say N here; if you
- have an IBM RS/6000 or pSeries machine or a PReP machine, say Y. If
- you have an embedded board, consult your board documentation.
+ have an IBM RS/6000 or pSeries machine, say Y. If you have an
+ embedded board, consult your board documentation.
config ZONE_DMA
bool
@@ -969,7 +969,7 @@ config TASK_SIZE_BOOL
config TASK_SIZE
hex "Size of user task space" if TASK_SIZE_BOOL
- default "0x80000000" if PPC_PREP || PPC_8xx
+ default "0x80000000" if PPC_8xx
default "0xc0000000"
config CONSISTENT_SIZE_BOOL
diff --git a/arch/powerpc/include/asm/dma.h b/arch/powerpc/include/asm/dma.h
index f6813e9..a5c6d83 100644
--- a/arch/powerpc/include/asm/dma.h
+++ b/arch/powerpc/include/asm/dma.h
@@ -16,10 +16,6 @@
*
* None of this really applies for Power Macintoshes. There is
* basically just enough here to get kernel/dma.c to compile.
- *
- * There may be some comments or restrictions made here which are
- * not valid for the PReP platform. Take what you read
- * with a grain of salt.
*/
#include <asm/io.h>
@@ -57,7 +53,6 @@
* - page registers for 5-7 don't use data bit 0, represent 128K pages
* - page registers for 0-3 use bit 0, represent 64K pages
*
- * On PReP, DMA transfers are limited to the lower 16MB of _physical_ memory.
* On CHRP, the W83C553F (and VLSI Tollgate?) support full 32 bit addressing.
* Note that addresses loaded into registers must be _physical_ addresses,
* not logical addresses (which may differ if paging is active).
diff --git a/arch/powerpc/include/asm/io.h b/arch/powerpc/include/asm/io.h
index f94ef42..dd15e5e 100644
--- a/arch/powerpc/include/asm/io.h
+++ b/arch/powerpc/include/asm/io.h
@@ -15,10 +15,6 @@
extern int check_legacy_ioport(unsigned long base_port);
#define I8042_DATA_REG 0x60
#define FDC_BASE 0x3f0
-/* only relevant for PReP */
-#define _PIDXR 0x279
-#define _PNPWRP 0xa79
-#define PNPBIOS_BASE 0xf000
#if defined(CONFIG_PPC64) && defined(CONFIG_PCI)
extern struct pci_dev *isa_bridge_pcidev;
diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
index 7ff9eaa..0a4cc5d 100644
--- a/arch/powerpc/include/asm/processor.h
+++ b/arch/powerpc/include/asm/processor.h
@@ -40,7 +40,7 @@
* -- BenH.
*/
-/* PREP sub-platform types see residual.h for these */
+/* PREP sub-platform types. Unused */
#define _PREP_Motorola 0x01 /* motorola prep */
#define _PREP_Firm 0x02 /* firmworks prep */
#define _PREP_IBM 0x00 /* ibm prep */
@@ -56,13 +56,6 @@
extern int _chrp_type;
-#ifdef CONFIG_PPC_PREP
-
-/* what kind of prep workstation we are */
-extern int _prep_type;
-
-#endif /* CONFIG_PPC_PREP */
-
#endif /* defined(__KERNEL__) && defined(CONFIG_PPC32) */
/*
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index bdc499c..63d051f 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -621,12 +621,6 @@ int check_legacy_ioport(unsigned long base_port)
case FDC_BASE: /* FDC1 */
np = of_find_node_by_type(NULL, "fdc");
break;
-#ifdef CONFIG_PPC_PREP
- case _PIDXR:
- case _PNPWRP:
- case PNPBIOS_BASE:
- /* implement me */
-#endif
default:
/* ipmi is supposed to fail here */
break;
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 52de8bc..9089ae7 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -6,7 +6,6 @@ source "arch/powerpc/platforms/chrp/Kconfig"
source "arch/powerpc/platforms/512x/Kconfig"
source "arch/powerpc/platforms/52xx/Kconfig"
source "arch/powerpc/platforms/powermac/Kconfig"
-source "arch/powerpc/platforms/prep/Kconfig"
source "arch/powerpc/platforms/maple/Kconfig"
source "arch/powerpc/platforms/pasemi/Kconfig"
source "arch/powerpc/platforms/ps3/Kconfig"
@@ -233,7 +232,7 @@ endmenu
config PPC601_SYNC_FIX
bool "Workarounds for PPC601 bugs"
- depends on 6xx && (PPC_PREP || PPC_PMAC)
+ depends on 6xx && PPC_PMAC
help
Some versions of the PPC601 (the first PowerPC chip) have bugs which
mean that extra synchronization instructions are required near
diff --git a/arch/powerpc/platforms/prep/Kconfig b/arch/powerpc/platforms/prep/Kconfig
deleted file mode 100644
index 1547f66..0000000
--- a/arch/powerpc/platforms/prep/Kconfig
+++ /dev/null
@@ -1,23 +0,0 @@
-config PPC_PREP
- bool "PowerPC Reference Platform (PReP) based machines"
- depends on 6xx && BROKEN
- select HAVE_PCSPKR_PLATFORM
- select MPIC
- select PPC_I8259
- select PPC_INDIRECT_PCI
- select PPC_UDBG_16550
- select PPC_NATIVE
- default n
-
-config PREP_RESIDUAL
- bool "Support for PReP Residual Data"
- depends on PPC_PREP
- help
- Some PReP systems have residual data passed to the kernel by the
- firmware. This allows detection of memory size, devices present and
- other useful pieces of information. Sometimes this information is
- not present or incorrect, in which case it could lead to the machine
- behaving incorrectly. If this happens, either disable PREP_RESIDUAL
- or pass the 'noresidual' option to the kernel.
-
- If you are running a PReP system, say Y here, otherwise say N.
diff --git a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c
index 5d66e55..9b86a01 100644
--- a/drivers/pnp/pnpbios/core.c
+++ b/drivers/pnp/pnpbios/core.c
@@ -513,10 +513,6 @@ static int __init pnpbios_init(void)
{
int ret;
-#if defined(CONFIG_PPC)
- if (check_legacy_ioport(PNPBIOS_BASE))
- return -ENODEV;
-#endif
if (pnpbios_disabled || dmi_check_system(pnpbios_dmi_table) ||
paravirt_enabled()) {
printk(KERN_INFO "PnPBIOS: Disabled\n");
@@ -570,10 +566,7 @@ fs_initcall(pnpbios_init);
static int __init pnpbios_thread_init(void)
{
struct task_struct *task;
-#if defined(CONFIG_PPC)
- if (check_legacy_ioport(PNPBIOS_BASE))
- return 0;
-#endif
+
if (pnpbios_disabled)
return 0;
diff --git a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c
index c3dbbe6..97db3ba 100644
--- a/drivers/video/cirrusfb.c
+++ b/drivers/video/cirrusfb.c
@@ -53,12 +53,6 @@
#ifdef CONFIG_AMIGA
#include <asm/amigahw.h>
#endif
-#ifdef CONFIG_PPC_PREP
-#include <asm/machdep.h>
-#define isPReP machine_is(prep)
-#else
-#define isPReP 0
-#endif
#include <video/vga.h>
#include <video/cirrus.h>
@@ -557,30 +551,18 @@ static int cirrusfb_check_var(struct fb_var_screeninfo *var,
break;
case 16:
- if (isPReP) {
- var->red.offset = 2;
- var->green.offset = -3;
- var->blue.offset = 8;
- } else {
- var->red.offset = 11;
- var->green.offset = 5;
- var->blue.offset = 0;
- }
+ var->red.offset = 11;
+ var->green.offset = 5;
+ var->blue.offset = 0;
var->red.length = 5;
var->green.length = 6;
var->blue.length = 5;
break;
case 24:
- if (isPReP) {
- var->red.offset = 0;
- var->green.offset = 8;
- var->blue.offset = 16;
- } else {
- var->red.offset = 16;
- var->green.offset = 8;
- var->blue.offset = 0;
- }
+ var->red.offset = 16;
+ var->green.offset = 8;
+ var->blue.offset = 0;
var->red.length = 8;
var->green.length = 8;
var->blue.length = 8;
@@ -1874,17 +1856,6 @@ static void cirrusfb_imageblit(struct fb_info *info,
}
}
-#ifdef CONFIG_PPC_PREP
-#define PREP_VIDEO_BASE ((volatile unsigned long) 0xC0000000)
-#define PREP_IO_BASE ((volatile unsigned char *) 0x80000000)
-static void get_prep_addrs(unsigned long *display, unsigned long *registers)
-{
- *display = PREP_VIDEO_BASE;
- *registers = (unsigned long) PREP_IO_BASE;
-}
-
-#endif /* CONFIG_PPC_PREP */
-
#ifdef CONFIG_PCI
static int release_io_ports;
@@ -2139,21 +2110,12 @@ static int cirrusfb_pci_register(struct pci_dev *pdev,
dev_dbg(info->device, " base address 1 is 0x%Lx\n",
(unsigned long long)pdev->resource[1].start);
- if (isPReP) {
- pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0, 0x00000000);
-#ifdef CONFIG_PPC_PREP
- get_prep_addrs(&board_addr, &info->fix.mmio_start);
-#endif
- /* PReP dies if we ioremap the IO registers, but it works w/out... */
- cinfo->regbase = (char __iomem *) info->fix.mmio_start;
- } else {
- dev_dbg(info->device,
- "Attempt to get PCI info for Cirrus Graphics Card\n");
- get_pci_addrs(pdev, &board_addr, &info->fix.mmio_start);
- /* FIXME: this forces VGA. alternatives? */
- cinfo->regbase = NULL;
- cinfo->laguna_mmio = ioremap(info->fix.mmio_start, 0x1000);
- }
+ dev_dbg(info->device,
+ "Attempt to get PCI info for Cirrus Graphics Card\n");
+ get_pci_addrs(pdev, &board_addr, &info->fix.mmio_start);
+ /* FIXME: this forces VGA. alternatives? */
+ cinfo->regbase = NULL;
+ cinfo->laguna_mmio = ioremap(info->fix.mmio_start, 0x1000);
dev_dbg(info->device, "Board address: 0x%lx, register address: 0x%lx\n",
board_addr, info->fix.mmio_start);
--
1.7.11.7
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox