* Re: Build regressions/improvements in v3.9-rc7
From: Geert Uytterhoeven @ 2013-04-16 18:56 UTC (permalink / raw)
To: Linux Kernel Development; +Cc: Linux/PPC Development, linux-sh
In-Reply-To: <alpine.DEB.2.00.1304162052210.2338@ayla.of.borg>
On Tue, 16 Apr 2013, Geert Uytterhoeven wrote:
> JFYI, when comparing v3.9-rc7 to v3.9-rc6[3], the summaries are:
> - build errors: +8/-10
+ drivers/pcmcia/electra_cf.c: error: implicit declaration of function '__ioremap_at' [-Werror=implicit-function-declaration]: => 225:2
+ drivers/pcmcia/electra_cf.c: error: implicit declaration of function '__iounmap_at' [-Werror=implicit-function-declaration]: => 316:3
+ drivers/pcmcia/electra_cf.c: error: implicit declaration of function 'in_le32' [-Werror=implicit-function-declaration]: => 70:2
+ drivers/pcmcia/electra_cf.c: error: implicit declaration of function 'ioremap' [-Werror=implicit-function-declaration]: => 213:2 + drivers/pcmcia/electra_cf.c: error: implicit declaration of function 'iounmap' [-Werror=implicit-function-declaration]: => 318:3
+ drivers/pcmcia/electra_cf.c: error: implicit declaration of function 'out_le32' [-Werror=implicit-function-declaration]: => 147:2
powerpc-randconfig
> - build warnings: +164/-34
And my eye fell on this one:
+ include/math-emu/double.h: warning: "__LITTLE_ENDIAN" is not defined [-Wundef]: => 59:5
+ include/math-emu/single.h: warning: "__LITTLE_ENDIAN" is not defined [-Wundef]: => 50:5
sh-randconfig
> [1] http://kisskb.ellerman.id.au/kisskb/head/6094/ (all 118 configs)
> [3] http://kisskb.ellerman.id.au/kisskb/head/6063/ (all 118 configs)
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 04/28] proc: Supply PDE attribute setting accessor functions [RFC]
From: Mauro Carvalho Chehab @ 2013-04-16 21:37 UTC (permalink / raw)
To: David Howells
Cc: alsa-devel, netdev, linux-wireless, linux-kernel, netfilter-devel,
viro, linux-pci, linux-fsdevel, linuxppc-dev, linux-media
In-Reply-To: <20130416182606.27773.55054.stgit@warthog.procyon.org.uk>
Em 16-04-2013 15:26, David Howells escreveu:
> Supply accessor functions to set attributes in proc_dir_entry structs.
>
> The following are supplied: proc_set_size() and proc_set_user().
>
> Signed-off-by: David Howells <dhowells@redhat.com>
> cc: linuxppc-dev@lists.ozlabs.org
> cc: linux-media@vger.kernel.org
> cc: netdev@vger.kernel.org
> cc: linux-wireless@vger.kernel.org
> cc: linux-pci@vger.kernel.org
> cc: netfilter-devel@vger.kernel.org
> cc: alsa-devel@alsa-project.org
> ---
>
> arch/powerpc/kernel/proc_powerpc.c | 2 +-
> arch/powerpc/platforms/pseries/reconfig.c | 2 +-
> drivers/media/pci/ttpci/av7110_ir.c | 2 +-
Weird that av7110 IR uses /proc... Well, this is an old, obsolete driver for
hardware that is not sold anymore for a long time... So, be it.
Acked-by: Mauro Carvalho Chehab <mchehab@redhat.com>
> drivers/net/irda/vlsi_ir.c | 2 +-
> drivers/net/wireless/airo.c | 34 +++++++++--------------------
> drivers/pci/proc.c | 2 +-
> fs/proc/generic.c | 13 +++++++++++
> include/linux/proc_fs.h | 5 ++++
> kernel/configs.c | 2 +-
> kernel/profile.c | 2 +-
> net/netfilter/xt_recent.c | 3 +--
> sound/core/info.c | 2 +-
> 12 files changed, 38 insertions(+), 33 deletions(-)
>
> diff --git a/arch/powerpc/kernel/proc_powerpc.c b/arch/powerpc/kernel/proc_powerpc.c
> index 41d8ee9..feb8580 100644
> --- a/arch/powerpc/kernel/proc_powerpc.c
> +++ b/arch/powerpc/kernel/proc_powerpc.c
> @@ -83,7 +83,7 @@ static int __init proc_ppc64_init(void)
> &page_map_fops, vdso_data);
> if (!pde)
> return 1;
> - pde->size = PAGE_SIZE;
> + proc_set_size(pde, PAGE_SIZE);
>
> return 0;
> }
> diff --git a/arch/powerpc/platforms/pseries/reconfig.c b/arch/powerpc/platforms/pseries/reconfig.c
> index d6491bd..f93cdf5 100644
> --- a/arch/powerpc/platforms/pseries/reconfig.c
> +++ b/arch/powerpc/platforms/pseries/reconfig.c
> @@ -452,7 +452,7 @@ static int proc_ppc64_create_ofdt(void)
>
> ent = proc_create("powerpc/ofdt", S_IWUSR, NULL, &ofdt_fops);
> if (ent)
> - ent->size = 0;
> + proc_set_size(ent, 0);
>
> return 0;
> }
> diff --git a/drivers/media/pci/ttpci/av7110_ir.c b/drivers/media/pci/ttpci/av7110_ir.c
> index eb82286..0e763a7 100644
> --- a/drivers/media/pci/ttpci/av7110_ir.c
> +++ b/drivers/media/pci/ttpci/av7110_ir.c
> @@ -375,7 +375,7 @@ int av7110_ir_init(struct av7110 *av7110)
> if (av_cnt == 1) {
> e = proc_create("av7110_ir", S_IWUSR, NULL, &av7110_ir_proc_fops);
> if (e)
> - e->size = 4 + 256 * sizeof(u16);
> + proc_set_size(e, 4 + 256 * sizeof(u16));
> }
>
> tasklet_init(&av7110->ir.ir_tasklet, av7110_emit_key, (unsigned long) &av7110->ir);
> diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c
> index e22cd4e..5f47584 100644
> --- a/drivers/net/irda/vlsi_ir.c
> +++ b/drivers/net/irda/vlsi_ir.c
> @@ -1678,7 +1678,7 @@ vlsi_irda_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> IRDA_WARNING("%s: failed to create proc entry\n",
> __func__);
> } else {
> - ent->size = 0;
> + proc_set_size(ent, 0);
> }
> idev->proc_entry = ent;
> }
> diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
> index 66e398d..21d0233 100644
> --- a/drivers/net/wireless/airo.c
> +++ b/drivers/net/wireless/airo.c
> @@ -4507,73 +4507,63 @@ static int setup_proc_entry( struct net_device *dev,
> airo_entry);
> if (!apriv->proc_entry)
> goto fail;
> - apriv->proc_entry->uid = proc_kuid;
> - apriv->proc_entry->gid = proc_kgid;
> + proc_set_user(apriv->proc_entry, proc_kuid, proc_kgid);
>
> /* Setup the StatsDelta */
> entry = proc_create_data("StatsDelta", S_IRUGO & proc_perm,
> apriv->proc_entry, &proc_statsdelta_ops, dev);
> if (!entry)
> goto fail_stats_delta;
> - entry->uid = proc_kuid;
> - entry->gid = proc_kgid;
> + proc_set_user(entry, proc_kuid, proc_kgid);
>
> /* Setup the Stats */
> entry = proc_create_data("Stats", S_IRUGO & proc_perm,
> apriv->proc_entry, &proc_stats_ops, dev);
> if (!entry)
> goto fail_stats;
> - entry->uid = proc_kuid;
> - entry->gid = proc_kgid;
> + proc_set_user(entry, proc_kuid, proc_kgid);
>
> /* Setup the Status */
> entry = proc_create_data("Status", S_IRUGO & proc_perm,
> apriv->proc_entry, &proc_status_ops, dev);
> if (!entry)
> goto fail_status;
> - entry->uid = proc_kuid;
> - entry->gid = proc_kgid;
> + proc_set_user(entry, proc_kuid, proc_kgid);
>
> /* Setup the Config */
> entry = proc_create_data("Config", proc_perm,
> apriv->proc_entry, &proc_config_ops, dev);
> if (!entry)
> goto fail_config;
> - entry->uid = proc_kuid;
> - entry->gid = proc_kgid;
> + proc_set_user(entry, proc_kuid, proc_kgid);
>
> /* Setup the SSID */
> entry = proc_create_data("SSID", proc_perm,
> apriv->proc_entry, &proc_SSID_ops, dev);
> if (!entry)
> goto fail_ssid;
> - entry->uid = proc_kuid;
> - entry->gid = proc_kgid;
> + proc_set_user(entry, proc_kuid, proc_kgid);
>
> /* Setup the APList */
> entry = proc_create_data("APList", proc_perm,
> apriv->proc_entry, &proc_APList_ops, dev);
> if (!entry)
> goto fail_aplist;
> - entry->uid = proc_kuid;
> - entry->gid = proc_kgid;
> + proc_set_user(entry, proc_kuid, proc_kgid);
>
> /* Setup the BSSList */
> entry = proc_create_data("BSSList", proc_perm,
> apriv->proc_entry, &proc_BSSList_ops, dev);
> if (!entry)
> goto fail_bsslist;
> - entry->uid = proc_kuid;
> - entry->gid = proc_kgid;
> + proc_set_user(entry, proc_kuid, proc_kgid);
>
> /* Setup the WepKey */
> entry = proc_create_data("WepKey", proc_perm,
> apriv->proc_entry, &proc_wepkey_ops, dev);
> if (!entry)
> goto fail_wepkey;
> - entry->uid = proc_kuid;
> - entry->gid = proc_kgid;
> -
> + proc_set_user(entry, proc_kuid, proc_kgid);
> return 0;
>
> fail_wepkey:
> @@ -5695,10 +5685,8 @@ static int __init airo_init_module( void )
>
> airo_entry = proc_mkdir_mode("driver/aironet", airo_perm, NULL);
>
> - if (airo_entry) {
> - airo_entry->uid = proc_kuid;
> - airo_entry->gid = proc_kgid;
> - }
> + if (airo_entry)
> + proc_set_user(airo_entry, proc_kuid, proc_kgid);
>
> for (i = 0; i < 4 && io[i] && irq[i]; i++) {
> airo_print_info("", "Trying to configure ISA adapter at irq=%d "
> diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
> index 12e4fb5..7cde7c1 100644
> --- a/drivers/pci/proc.c
> +++ b/drivers/pci/proc.c
> @@ -419,7 +419,7 @@ int pci_proc_attach_device(struct pci_dev *dev)
> &proc_bus_pci_operations, dev);
> if (!e)
> return -ENOMEM;
> - e->size = dev->cfg_size;
> + proc_set_size(e, dev->cfg_size);
> dev->procent = e;
>
> return 0;
> diff --git a/fs/proc/generic.c b/fs/proc/generic.c
> index 1c07cad..5f6f6c3 100644
> --- a/fs/proc/generic.c
> +++ b/fs/proc/generic.c
> @@ -498,6 +498,19 @@ out:
> return NULL;
> }
> EXPORT_SYMBOL(proc_create_data);
> +
> +void proc_set_size(struct proc_dir_entry *de, loff_t size)
> +{
> + de->size = size;
> +}
> +EXPORT_SYMBOL(proc_set_size);
> +
> +void proc_set_user(struct proc_dir_entry *de, kuid_t uid, kgid_t gid)
> +{
> + de->uid = uid;
> + de->gid = gid;
> +}
> +EXPORT_SYMBOL(proc_set_user);
>
> static void free_proc_entry(struct proc_dir_entry *de)
> {
> diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
> index 805edac..28a4d7e 100644
> --- a/include/linux/proc_fs.h
> +++ b/include/linux/proc_fs.h
> @@ -130,6 +130,9 @@ static inline struct proc_dir_entry *proc_create(const char *name, umode_t mode,
> extern struct proc_dir_entry *proc_net_mkdir(struct net *net, const char *name,
> struct proc_dir_entry *parent);
>
> +extern void proc_set_size(struct proc_dir_entry *, loff_t);
> +extern void proc_set_user(struct proc_dir_entry *, kuid_t, kgid_t);
> +
> extern struct file *proc_ns_fget(int fd);
> extern bool proc_ns_inode(struct inode *inode);
>
> @@ -158,6 +161,8 @@ static inline struct proc_dir_entry *proc_mkdir(const char *name,
> struct proc_dir_entry *parent) {return NULL;}
> static inline struct proc_dir_entry *proc_mkdir_mode(const char *name,
> umode_t mode, struct proc_dir_entry *parent) { return NULL; }
> +static inline void proc_set_size(struct proc_dir_entry *de, loff_t size) {}
> +static inline void proc_set_user(struct proc_dir_entry *de, kuid_t uid, kgid_t gid) {}
>
> struct tty_driver;
> static inline void proc_tty_register_driver(struct tty_driver *driver) {};
> diff --git a/kernel/configs.c b/kernel/configs.c
> index 42e8fa0..c18b1f1 100644
> --- a/kernel/configs.c
> +++ b/kernel/configs.c
> @@ -79,7 +79,7 @@ static int __init ikconfig_init(void)
> if (!entry)
> return -ENOMEM;
>
> - entry->size = kernel_config_data_size;
> + proc_set_size(entry, kernel_config_data_size);
>
> return 0;
> }
> diff --git a/kernel/profile.c b/kernel/profile.c
> index 524ce5e..0bf4007 100644
> --- a/kernel/profile.c
> +++ b/kernel/profile.c
> @@ -600,7 +600,7 @@ int __ref create_proc_profile(void) /* false positive from hotcpu_notifier */
> NULL, &proc_profile_operations);
> if (!entry)
> return 0;
> - entry->size = (1+prof_len) * sizeof(atomic_t);
> + proc_set_size(entry, (1 + prof_len) * sizeof(atomic_t));
> hotcpu_notifier(profile_cpu_callback, 0);
> return 0;
> }
> diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c
> index 3db2d38..1e657cf 100644
> --- a/net/netfilter/xt_recent.c
> +++ b/net/netfilter/xt_recent.c
> @@ -401,8 +401,7 @@ static int recent_mt_check(const struct xt_mtchk_param *par,
> ret = -ENOMEM;
> goto out;
> }
> - pde->uid = uid;
> - pde->gid = gid;
> + proc_set_user(pde, uid, gid);
> #endif
> spin_lock_bh(&recent_lock);
> list_add_tail(&t->list, &recent_net->tables);
> diff --git a/sound/core/info.c b/sound/core/info.c
> index 3aa8864..c7f41c3 100644
> --- a/sound/core/info.c
> +++ b/sound/core/info.c
> @@ -970,7 +970,7 @@ int snd_info_register(struct snd_info_entry * entry)
> mutex_unlock(&info_mutex);
> return -ENOMEM;
> }
> - p->size = entry->size;
> + proc_set_size(p, entry->size);
> }
> entry->p = p;
> if (entry->parent)
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* Re: RE: [PATCH v3] clk: add PowerPC corenet clock driver support
From: Mike Turquette @ 2013-04-16 22:27 UTC (permalink / raw)
To: Tang Yuantian-B29983, Tang Yuantian-B29983
Cc: ulf.hansson@linaro.org, Li Yang-R58472, linux-doc@vger.kernel.org,
viresh.kumar@linaro.org, devicetree-discuss@lists.ozlabs.org,
linux-kernel@vger.kernel.org, shawn.guo@linaro.org,
linuxppc-dev@lists.ozlabs.org, linus.walleij@linaro.org
In-Reply-To: <D07C73A334FF604B95B3CBD2A545D07B0B144FEF@039-SN2MPN1-013.039d.mgd.msft.net>
Quoting Tang Yuantian-B29983 (2013-04-15 23:59:34)
> Hi Mike,
> =
> I really appreciate if you can spend some times to review this patch.
> =
Yauntian,
Thanks for submitting this patch. I have frozen the changes I plan to
submit for 3.10, with the exception of any last-minute fixes. I'll take
a closer look at this after the merge window.
Regards,
Mike
> Thanks,
> Yuantian
> =
> =
> > -----Original Message-----
> > From: Tang Yuantian-B29983
> > Sent: 2013=E5=B9=B44=E6=9C=889=E6=97=A5 16:46
> > To: mturquette@linaro.org
> > Cc: linus.walleij@linaro.org; viresh.kumar@linaro.org;
> > shawn.guo@linaro.org; ulf.hansson@linaro.org; linux-
> > kernel@vger.kernel.org; devicetree-discuss@lists.ozlabs.org; linuxppc-
> > dev@lists.ozlabs.org; linux-doc@vger.kernel.org; Tang Yuantian-B29983;
> > Tang Yuantian-B29983; Li Yang-R58472
> > Subject: [PATCH v3] clk: add PowerPC corenet clock driver support
> > =
> > From: Tang Yuantian <yuantian.tang@freescale.com>
> > =
> > This adds the clock driver for Freescale PowerPC corenet series SoCs
> > using common clock infrastructure.
> > =
> > Signed-off-by: Tang Yuantian <Yuantian.Tang@freescale.com>
> > Signed-off-by: Li Yang <leoli@freescale.com>
> > ---
> > v3:
> > - remove the module author and description
> > v2:
> > - add the document for device tree clock bindings
> > =
> > arch/powerpc/platforms/Kconfig.cputype | 1 +
> > drivers/clk/Kconfig | 7 +
> > drivers/clk/Makefile | 1 +
> > drivers/clk/clk-ppc-corenet.c | 280
> > +++++++++++++++++++++++++++++++++
> > 4 files changed, 289 insertions(+)
> > create mode 100644 drivers/clk/clk-ppc-corenet.c
> > =
> > diff --git a/arch/powerpc/platforms/Kconfig.cputype
> > b/arch/powerpc/platforms/Kconfig.cputype
> > index 18e3b76..cf065b8 100644
> > --- a/arch/powerpc/platforms/Kconfig.cputype
> > +++ b/arch/powerpc/platforms/Kconfig.cputype
> > @@ -158,6 +158,7 @@ config E500
> > config PPC_E500MC
> > bool "e500mc Support"
> > select PPC_FPU
> > + select COMMON_CLK
> > depends on E500
> > help
> > This must be enabled for running on e500mc (and derivatives diff
> > --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig index a47e6ee..6e2fd9c
> > 100644
> > --- a/drivers/clk/Kconfig
> > +++ b/drivers/clk/Kconfig
> > @@ -63,6 +63,13 @@ config CLK_TWL6040
> > McPDM. McPDM module is using the external bit clock on the McPDM
> > bus
> > as functional clock.
> > =
> > +config CLK_PPC_CORENET
> > + bool "Clock driver for PowerPC corenet platforms"
> > + depends on PPC_E500MC && OF
> > + ---help---
> > + This adds the clock driver support for Freescale PowerPC corenet
> > + platforms using common clock framework.
> > +
> > endmenu
> > =
> > source "drivers/clk/mvebu/Kconfig"
> > diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index
> > 300d477..6720319 100644
> > --- a/drivers/clk/Makefile
> > +++ b/drivers/clk/Makefile
> > @@ -34,3 +34,4 @@ obj-$(CONFIG_X86) +=3D x86/
> > obj-$(CONFIG_COMMON_CLK_WM831X) +=3D clk-wm831x.o
> > obj-$(CONFIG_COMMON_CLK_MAX77686) +=3D clk-max77686.o
> > obj-$(CONFIG_CLK_TWL6040) +=3D clk-twl6040.o
> > +obj-$(CONFIG_CLK_PPC_CORENET) +=3D clk-ppc-corenet.o
> > diff --git a/drivers/clk/clk-ppc-corenet.c b/drivers/clk/clk-ppc-
> > corenet.c new file mode 100644 index 0000000..a2d483f
> > --- /dev/null
> > +++ b/drivers/clk/clk-ppc-corenet.c
> > @@ -0,0 +1,280 @@
> > +/*
> > + * Copyright 2013 Freescale Semiconductor, Inc.
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + *
> > + * clock driver for Freescale PowerPC corenet SoCs.
> > + */
> > +#include <linux/clk-provider.h>
> > +#include <linux/io.h>
> > +#include <linux/kernel.h>
> > +#include <linux/module.h>
> > +#include <linux/of_platform.h>
> > +#include <linux/of.h>
> > +#include <linux/slab.h>
> > +
> > +struct cmux_clk {
> > + struct clk_hw hw;
> > + void __iomem *reg;
> > + u32 flags;
> > +};
> > +
> > +#define PLL_KILL BIT(31)
> > +#define CLKSEL_SHIFT 27
> > +#define CLKSEL_ADJUST BIT(0)
> > +#define to_cmux_clk(p) container_of(p, struct cmux_clk, =
hw)
> > +
> > +static void __iomem *base;
> > +static unsigned int clocks_per_pll;
> > +
> > +static int cmux_set_parent(struct clk_hw *hw, u8 idx) {
> > + struct cmux_clk *clk =3D to_cmux_clk(hw);
> > + u32 clksel;
> > +
> > + clksel =3D ((idx / clocks_per_pll) << 2) + idx % clocks_per_pll;
> > + if (clk->flags & CLKSEL_ADJUST)
> > + clksel +=3D 8;
> > + clksel =3D (clksel & 0xf) << CLKSEL_SHIFT;
> > + iowrite32be(clksel, clk->reg);
> > +
> > + return 0;
> > +}
> > +
> > +static u8 cmux_get_parent(struct clk_hw *hw) {
> > + struct cmux_clk *clk =3D to_cmux_clk(hw);
> > + u32 clksel;
> > +
> > + clksel =3D ioread32be(clk->reg);
> > + clksel =3D (clksel >> CLKSEL_SHIFT) & 0xf;
> > + if (clk->flags & CLKSEL_ADJUST)
> > + clksel -=3D 8;
> > + clksel =3D (clksel >> 2) * clocks_per_pll + clksel % 4;
> > +
> > + return clksel;
> > +}
> > +
> > +const struct clk_ops cmux_ops =3D {
> > + .get_parent =3D cmux_get_parent,
> > + .set_parent =3D cmux_set_parent,
> > +};
> > +
> > +static void __init core_mux_init(struct device_node *np) {
> > + struct clk *clk;
> > + struct clk_init_data init;
> > + struct cmux_clk *cmux_clk;
> > + struct device_node *node;
> > + int rc, count, i;
> > + u32 offset;
> > + const char *clk_name;
> > + const char **parent_names;
> > +
> > + rc =3D of_property_read_u32(np, "reg", &offset);
> > + if (rc) {
> > + pr_err("%s: could not get reg property\n", np->name);
> > + return;
> > + }
> > +
> > + /* get the input clock source count */
> > + count =3D of_property_count_strings(np, "clock-names");
> > + if (count < 0) {
> > + pr_err("%s: get clock count error\n", np->name);
> > + return;
> > + }
> > + parent_names =3D kzalloc((sizeof(char *) * count), GFP_KERNEL);
> > + if (!parent_names) {
> > + pr_err("%s: could not allocate parent_names\n", __func__);
> > + return;
> > + }
> > +
> > + for (i =3D 0; i < count; i++)
> > + parent_names[i] =3D of_clk_get_parent_name(np, i);
> > +
> > + cmux_clk =3D kzalloc(sizeof(struct cmux_clk), GFP_KERNEL);
> > + if (!cmux_clk) {
> > + pr_err("%s: could not allocate cmux_clk\n", __func__);
> > + goto err_name;
> > + }
> > + cmux_clk->reg =3D base + offset;
> > +
> > + node =3D of_find_compatible_node(NULL, NULL, "fsl,p4080-clockgen"=
);
> > + if (node && (offset >=3D 0x80))
> > + cmux_clk->flags =3D CLKSEL_ADJUST;
> > +
> > + rc =3D of_property_read_string_index(np, "clock-output-names",
> > + 0, &clk_name);
> > + if (rc) {
> > + pr_err("%s: read clock names error\n", np->name);
> > + goto err_clk;
> > + }
> > +
> > + init.name =3D clk_name;
> > + init.ops =3D &cmux_ops;
> > + init.parent_names =3D parent_names;
> > + init.num_parents =3D count;
> > + init.flags =3D 0;
> > + cmux_clk->hw.init =3D &init;
> > +
> > + clk =3D clk_register(NULL, &cmux_clk->hw);
> > + if (IS_ERR(clk)) {
> > + pr_err("%s: could not register clock\n", clk_name);
> > + goto err_clk;
> > + }
> > +
> > + rc =3D of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > + if (rc) {
> > + pr_err("Could not register clock provider for node:%s\n",
> > + np->name);
> > + goto err_clk;
> > + }
> > + goto err_name;
> > +
> > +err_clk:
> > + kfree(cmux_clk);
> > +err_name:
> > + /* free *_names because they are reallocated when registered */
> > + kfree(parent_names);
> > +}
> > +
> > +static void __init core_pll_init(struct device_node *np) {
> > + u32 offset, mult;
> > + int i, rc, count;
> > + const char *clk_name, *parent_name;
> > + struct clk_onecell_data *onecell_data;
> > + struct clk **subclks;
> > +
> > + rc =3D of_property_read_u32(np, "reg", &offset);
> > + if (rc) {
> > + pr_err("%s: could not get reg property\n", np->name);
> > + return;
> > + }
> > +
> > + /* get the multiple of PLL */
> > + mult =3D ioread32be(base + offset);
> > +
> > + /* check if this PLL is disabled */
> > + if (mult & PLL_KILL) {
> > + pr_debug("PLL:%s is disabled\n", np->name);
> > + return;
> > + }
> > + mult =3D (mult >> 1) & 0x3f;
> > +
> > + parent_name =3D of_clk_get_parent_name(np, 0);
> > + if (!parent_name) {
> > + pr_err("PLL: %s must have a parent\n", np->name);
> > + return;
> > + }
> > +
> > + count =3D of_property_count_strings(np, "clock-output-names");
> > + if (count < 0 || count > 4) {
> > + pr_err("%s: clock is not supported\n", np->name);
> > + return;
> > + }
> > +
> > + /* output clock number per PLL */
> > + clocks_per_pll =3D count;
> > +
> > + subclks =3D kzalloc(sizeof(struct clk *) * count, GFP_KERNEL);
> > + if (!subclks) {
> > + pr_err("%s: could not allocate subclks\n", __func__);
> > + return;
> > + }
> > +
> > + onecell_data =3D kzalloc(sizeof(struct clk_onecell_data), GFP_KER=
NEL);
> > + if (!onecell_data) {
> > + pr_err("%s: could not allocate onecell_data\n", __func__);
> > + goto err_clks;
> > + }
> > +
> > + for (i =3D 0; i < count; i++) {
> > + rc =3D of_property_read_string_index(np, "clock-output-na=
mes",
> > + i, &clk_name);
> > + if (rc) {
> > + pr_err("%s: could not get clock names\n", np->nam=
e);
> > + goto err_cell;
> > + }
> > +
> > + /*
> > + * when count =3D=3D 4, there are 4 output clocks:
> > + * /1, /2, /3, /4 respectively
> > + * when count < 4, there are at least 2 output clocks:
> > + * /1, /2, (/4, if count =3D=3D 3) respectively.
> > + */
> > + if (count =3D=3D 4)
> > + subclks[i] =3D clk_register_fixed_factor(NULL, cl=
k_name,
> > + parent_name, 0, mult, 1 + i);
> > + else
> > +
> > + subclks[i] =3D clk_register_fixed_factor(NULL, cl=
k_name,
> > + parent_name, 0, mult, 1 << i);
> > +
> > + if (IS_ERR(subclks[i])) {
> > + pr_err("%s: could not register clock\n", clk_name=
);
> > + goto err_cell;
> > + }
> > + }
> > +
> > + onecell_data->clks =3D subclks;
> > + onecell_data->clk_num =3D count;
> > +
> > + rc =3D of_clk_add_provider(np, of_clk_src_onecell_get, onecell_da=
ta);
> > + if (rc) {
> > + pr_err("Could not register clk provider for node:%s\n",
> > + np->name);
> > + goto err_cell;
> > + }
> > +
> > + return;
> > +err_cell:
> > + kfree(onecell_data);
> > +err_clks:
> > + kfree(subclks);
> > +}
> > +
> > +static const struct of_device_id clk_match[] __initconst =3D {
> > + { .compatible =3D "fixed-clock", .data =3D of_fixed_clk_setup, },
> > + { .compatible =3D "fsl,core-pll-clock", .data =3D core_pll_init, =
},
> > + { .compatible =3D "fsl,core-mux-clock", .data =3D core_mux_init, =
},
> > + {}
> > +};
> > +
> > +static int __init ppc_corenet_clk_probe(struct platform_device *pdev) {
> > + struct device_node *np;
> > +
> > + np =3D pdev->dev.of_node;
> > + base =3D of_iomap(np, 0);
> > + if (!base) {
> > + dev_err(&pdev->dev, "iomap error\n");
> > + return -ENOMEM;
> > + }
> > + of_clk_init(clk_match);
> > +
> > + return 0;
> > +}
> > +
> > +static const struct of_device_id ppc_clk_ids[] __initconst =3D {
> > + { .compatible =3D "fsl,qoriq-clockgen-1.0", },
> > + { .compatible =3D "fsl,qoriq-clockgen-2", },
> > + {}
> > +};
> > +
> > +static struct platform_driver ppc_corenet_clk_driver =3D {
> > + .driver =3D {
> > + .name =3D "ppc_corenet_clock",
> > + .owner =3D THIS_MODULE,
> > + .of_match_table =3D ppc_clk_ids,
> > + },
> > + .probe =3D ppc_corenet_clk_probe,
> > +};
> > +
> > +static int __init ppc_corenet_clk_init(void) {
> > + return platform_driver_register(&ppc_corenet_clk_driver);
> > +}
> > +subsys_initcall(ppc_corenet_clk_init);
> > --
> > 1.8.0
^ permalink raw reply
* Re: [PATCH v3 1/4] powerpc/mpic: add irq_set_wake support
From: Scott Wood @ 2013-04-16 23:30 UTC (permalink / raw)
To: Wang Dongsheng-B40534; +Cc: Wood Scott-B07421, linuxppc-dev@lists.ozlabs.org
In-Reply-To: <ABB05CD9C9F68C46A5CEDC7F15439259EE77D8@039-SN2MPN1-021.039d.mgd.msft.net>
ACK
-Scott
On 04/16/2013 05:58:52 AM, Wang Dongsheng-B40534 wrote:
> Hi scott,
>=20
> Could you ACK these patches?
>=20
> [PATCH v3 2/4] powerpc/mpic: add global timer support
> [PATCH v3 3/4] powerpc/mpic: create mpic subsystem object
> [PATCH v3 4/4] powerpc/fsl: add MPIC timer wakeup support
>=20
> Thanks.
>=20
> > -----Original Message-----
> > From: Wang Dongsheng-B40534
> > Sent: Tuesday, April 09, 2013 10:22 AM
> > To: Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org; Wang Dongsheng-B40534
> > Subject: [PATCH v3 1/4] powerpc/mpic: add irq_set_wake support
> >
> > Add irq_set_wake support. Just add IRQF_NO_SUSPEND to =20
> desc->action->flag.
> > So the wake up interrupt will not be disable in suspend_device_irqs.
> >
> > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> > ---
> > v3:
> > * Modify: Change "EINVAL" to "ENXIO" in mpic_irq_set_wake()
> >
> > v2:
> > * Add: Check freescale chip in mpic_irq_set_wake().
> > * Remove: Support mpic_irq_set_wake() in ht_chip.
> >
> > arch/powerpc/sysdev/mpic.c | 18 ++++++++++++++++++
> > 1 file changed, 18 insertions(+)
> >
> > diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
> > index 3b2efd4..ae709d2 100644
> > --- a/arch/powerpc/sysdev/mpic.c
> > +++ b/arch/powerpc/sysdev/mpic.c
> > @@ -920,6 +920,22 @@ int mpic_set_irq_type(struct irq_data *d, =20
> unsigned
> > int flow_type)
> > return IRQ_SET_MASK_OK_NOCOPY;
> > }
> >
> > +static int mpic_irq_set_wake(struct irq_data *d, unsigned int on) {
> > + struct irq_desc *desc =3D container_of(d, struct irq_desc, =20
> irq_data);
> > + struct mpic *mpic =3D mpic_from_irq_data(d);
> > +
> > + if (!(mpic->flags & MPIC_FSL))
> > + return -ENXIO;
> > +
> > + if (on)
> > + desc->action->flags |=3D IRQF_NO_SUSPEND;
> > + else
> > + desc->action->flags &=3D ~IRQF_NO_SUSPEND;
> > +
> > + return 0;
> > +}
> > +
> > void mpic_set_vector(unsigned int virq, unsigned int vector) {
> > struct mpic *mpic =3D mpic_from_irq(virq); @@ -957,6 +973,7 @@ =20
> static
> > struct irq_chip mpic_irq_chip =3D {
> > .irq_unmask =3D mpic_unmask_irq,
> > .irq_eoi =3D mpic_end_irq,
> > .irq_set_type =3D mpic_set_irq_type,
> > + .irq_set_wake =3D mpic_irq_set_wake,
> > };
> >
> > #ifdef CONFIG_SMP
> > @@ -971,6 +988,7 @@ static struct irq_chip mpic_tm_chip =3D {
> > .irq_mask =3D mpic_mask_tm,
> > .irq_unmask =3D mpic_unmask_tm,
> > .irq_eoi =3D mpic_end_irq,
> > + .irq_set_wake =3D mpic_irq_set_wake,
> > };
> >
> > #ifdef CONFIG_MPIC_U3_HT_IRQS
> > --
> > 1.8.0
>=20
>=20
>=20
=
^ permalink raw reply
* RE: RE: [PATCH v3] clk: add PowerPC corenet clock driver support
From: Tang Yuantian-B29983 @ 2013-04-17 2:12 UTC (permalink / raw)
To: Mike Turquette
Cc: ulf.hansson@linaro.org, Li Yang-R58472, linux-doc@vger.kernel.org,
viresh.kumar@linaro.org, devicetree-discuss@lists.ozlabs.org,
linux-kernel@vger.kernel.org, shawn.guo@linaro.org,
linuxppc-dev@lists.ozlabs.org, linus.walleij@linaro.org
In-Reply-To: <20130416222721.19887.3395@quantum>
T0ssIHRoYW5rcy4NCg0KVGhhbmtzLA0KWXVhbnRpYW4NCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+IEZyb206IE1pa2UgVHVycXVldHRlIFttYWlsdG86bXR1cnF1ZXR0ZUBsaW5h
cm8ub3JnXQ0KPiBTZW50OiAyMDEz5bm0NOaciDE35pelIDY6MjcNCj4gVG86IFRhbmcgWXVhbnRp
YW4tQjI5OTgzOyBUYW5nIFl1YW50aWFuLUIyOTk4Mw0KPiBDYzogbGludXMud2FsbGVpakBsaW5h
cm8ub3JnOyB2aXJlc2gua3VtYXJAbGluYXJvLm9yZzsNCj4gc2hhd24uZ3VvQGxpbmFyby5vcmc7
IHVsZi5oYW5zc29uQGxpbmFyby5vcmc7IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJuZWwub3Jn
OyBkZXZpY2V0cmVlLWRpc2N1c3NAbGlzdHMub3psYWJzLm9yZzsgbGludXhwcGMtDQo+IGRldkBs
aXN0cy5vemxhYnMub3JnOyBsaW51eC1kb2NAdmdlci5rZXJuZWwub3JnOyBMaSBZYW5nLVI1ODQ3
Mg0KPiBTdWJqZWN0OiBSZTogUkU6IFtQQVRDSCB2M10gY2xrOiBhZGQgUG93ZXJQQyBjb3JlbmV0
IGNsb2NrIGRyaXZlciBzdXBwb3J0DQo+IA0KPiBRdW90aW5nIFRhbmcgWXVhbnRpYW4tQjI5OTgz
ICgyMDEzLTA0LTE1IDIzOjU5OjM0KQ0KPiA+IEhpIE1pa2UsDQo+ID4NCj4gPiBJIHJlYWxseSBh
cHByZWNpYXRlIGlmIHlvdSBjYW4gc3BlbmQgc29tZSB0aW1lcyB0byByZXZpZXcgdGhpcyBwYXRj
aC4NCj4gPg0KPiANCj4gWWF1bnRpYW4sDQo+IA0KPiBUaGFua3MgZm9yIHN1Ym1pdHRpbmcgdGhp
cyBwYXRjaC4gIEkgaGF2ZSBmcm96ZW4gdGhlIGNoYW5nZXMgSSBwbGFuIHRvDQo+IHN1Ym1pdCBm
b3IgMy4xMCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFueSBsYXN0LW1pbnV0ZSBmaXhlcy4gIEkn
bGwgdGFrZQ0KPiBhIGNsb3NlciBsb29rIGF0IHRoaXMgYWZ0ZXIgdGhlIG1lcmdlIHdpbmRvdy4N
Cj4gDQo+IFJlZ2FyZHMsDQo+IE1pa2UNCj4gDQo+ID4gVGhhbmtzLA0KPiA+IFl1YW50aWFuDQo+
ID4NCj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IFRh
bmcgWXVhbnRpYW4tQjI5OTgzDQo+ID4gPiBTZW50OiAyMDEz5bm0NOaciDnml6UgMTY6NDYNCj4g
PiA+IFRvOiBtdHVycXVldHRlQGxpbmFyby5vcmcNCj4gPiA+IENjOiBsaW51cy53YWxsZWlqQGxp
bmFyby5vcmc7IHZpcmVzaC5rdW1hckBsaW5hcm8ub3JnOw0KPiA+ID4gc2hhd24uZ3VvQGxpbmFy
by5vcmc7IHVsZi5oYW5zc29uQGxpbmFyby5vcmc7IGxpbnV4LQ0KPiA+ID4ga2VybmVsQHZnZXIu
a2VybmVsLm9yZzsgZGV2aWNldHJlZS1kaXNjdXNzQGxpc3RzLm96bGFicy5vcmc7DQo+ID4gPiBs
aW51eHBwYy0gZGV2QGxpc3RzLm96bGFicy5vcmc7IGxpbnV4LWRvY0B2Z2VyLmtlcm5lbC5vcmc7
IFRhbmcNCj4gPiA+IFl1YW50aWFuLUIyOTk4MzsgVGFuZyBZdWFudGlhbi1CMjk5ODM7IExpIFlh
bmctUjU4NDcyDQo+ID4gPiBTdWJqZWN0OiBbUEFUQ0ggdjNdIGNsazogYWRkIFBvd2VyUEMgY29y
ZW5ldCBjbG9jayBkcml2ZXIgc3VwcG9ydA0KPiA+ID4NCj4gPiA+IEZyb206IFRhbmcgWXVhbnRp
YW4gPHl1YW50aWFuLnRhbmdAZnJlZXNjYWxlLmNvbT4NCj4gPiA+DQo+ID4gPiBUaGlzIGFkZHMg
dGhlIGNsb2NrIGRyaXZlciBmb3IgRnJlZXNjYWxlIFBvd2VyUEMgY29yZW5ldCBzZXJpZXMgU29D
cw0KPiA+ID4gdXNpbmcgY29tbW9uIGNsb2NrIGluZnJhc3RydWN0dXJlLg0KPiA+ID4NCj4gPiA+
IFNpZ25lZC1vZmYtYnk6IFRhbmcgWXVhbnRpYW4gPFl1YW50aWFuLlRhbmdAZnJlZXNjYWxlLmNv
bT4NCj4gPiA+IFNpZ25lZC1vZmYtYnk6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+DQo+
ID4gPiAtLS0NCj4gPiA+IHYzOg0KPiA+ID4gICAgICAgLSByZW1vdmUgdGhlIG1vZHVsZSBhdXRo
b3IgYW5kIGRlc2NyaXB0aW9uDQo+ID4gPiB2MjoNCj4gPiA+ICAgICAgIC0gYWRkIHRoZSBkb2N1
bWVudCBmb3IgZGV2aWNlIHRyZWUgY2xvY2sgYmluZGluZ3MNCj4gPiA+DQo+ID4gPiAgYXJjaC9w
b3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgfCAgIDEgKw0KPiA+ID4gIGRyaXZlcnMv
Y2xrL0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgICA3ICsNCj4gPiA+ICBkcml2ZXJzL2Ns
ay9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gPiAgZHJpdmVycy9jbGsv
Y2xrLXBwYy1jb3JlbmV0LmMgICAgICAgICAgfCAyODANCj4gPiA+ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKw0KPiA+ID4gIDQgZmlsZXMgY2hhbmdlZCwgMjg5IGluc2VydGlvbnMo
KykNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jbGsvY2xrLXBwYy1jb3JlbmV0
LmMNCj4gPiA+DQo+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29u
ZmlnLmNwdXR5cGUNCj4gPiA+IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5
cGUNCj4gPiA+IGluZGV4IDE4ZTNiNzYuLmNmMDY1YjggMTAwNjQ0DQo+ID4gPiAtLS0gYS9hcmNo
L3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQ0KPiA+ID4gKysrIGIvYXJjaC9wb3dl
cnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUNCj4gPiA+IEBAIC0xNTgsNiArMTU4LDcgQEAg
Y29uZmlnIEU1MDANCj4gPiA+ICBjb25maWcgUFBDX0U1MDBNQw0KPiA+ID4gICAgICAgYm9vbCAi
ZTUwMG1jIFN1cHBvcnQiDQo+ID4gPiAgICAgICBzZWxlY3QgUFBDX0ZQVQ0KPiA+ID4gKyAgICAg
c2VsZWN0IENPTU1PTl9DTEsNCj4gPiA+ICAgICAgIGRlcGVuZHMgb24gRTUwMA0KPiA+ID4gICAg
ICAgaGVscA0KPiA+ID4gICAgICAgICBUaGlzIG11c3QgYmUgZW5hYmxlZCBmb3IgcnVubmluZyBv
biBlNTAwbWMgKGFuZCBkZXJpdmF0aXZlcw0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr
L0tjb25maWcgYi9kcml2ZXJzL2Nsay9LY29uZmlnIGluZGV4DQo+ID4gPiBhNDdlNmVlLi42ZTJm
ZDljDQo+ID4gPiAxMDA2NDQNCj4gPiA+IC0tLSBhL2RyaXZlcnMvY2xrL0tjb25maWcNCj4gPiA+
ICsrKyBiL2RyaXZlcnMvY2xrL0tjb25maWcNCj4gPiA+IEBAIC02Myw2ICs2MywxMyBAQCBjb25m
aWcgQ0xLX1RXTDYwNDANCj4gPiA+ICAgICAgICAgTWNQRE0uIE1jUERNIG1vZHVsZSBpcyB1c2lu
ZyB0aGUgZXh0ZXJuYWwgYml0IGNsb2NrIG9uIHRoZQ0KPiA+ID4gTWNQRE0gYnVzDQo+ID4gPiAg
ICAgICAgIGFzIGZ1bmN0aW9uYWwgY2xvY2suDQo+ID4gPg0KPiA+ID4gK2NvbmZpZyBDTEtfUFBD
X0NPUkVORVQNCj4gPiA+ICsgICAgIGJvb2wgIkNsb2NrIGRyaXZlciBmb3IgUG93ZXJQQyBjb3Jl
bmV0IHBsYXRmb3JtcyINCj4gPiA+ICsgICAgIGRlcGVuZHMgb24gUFBDX0U1MDBNQyAmJiBPRg0K
PiA+ID4gKyAgICAgLS0taGVscC0tLQ0KPiA+ID4gKyAgICAgICBUaGlzIGFkZHMgdGhlIGNsb2Nr
IGRyaXZlciBzdXBwb3J0IGZvciBGcmVlc2NhbGUgUG93ZXJQQw0KPiBjb3JlbmV0DQo+ID4gPiAr
ICAgICAgIHBsYXRmb3JtcyB1c2luZyBjb21tb24gY2xvY2sgZnJhbWV3b3JrLg0KPiA+ID4gKw0K
PiA+ID4gIGVuZG1lbnUNCj4gPiA+DQo+ID4gPiAgc291cmNlICJkcml2ZXJzL2Nsay9tdmVidS9L
Y29uZmlnIg0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL01ha2VmaWxlIGIvZHJpdmVy
cy9jbGsvTWFrZWZpbGUgaW5kZXgNCj4gPiA+IDMwMGQ0NzcuLjY3MjAzMTkgMTAwNjQ0DQo+ID4g
PiAtLS0gYS9kcml2ZXJzL2Nsay9NYWtlZmlsZQ0KPiA+ID4gKysrIGIvZHJpdmVycy9jbGsvTWFr
ZWZpbGUNCj4gPiA+IEBAIC0zNCwzICszNCw0IEBAIG9iai0kKENPTkZJR19YODYpICAgICAgICAg
ICArPSB4ODYvDQo+ID4gPiAgb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfV004MzFYKSArPSBjbGst
d204MzF4Lm8NCj4gPiA+ICBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NQVg3NzY4NikgKz0gY2xr
LW1heDc3Njg2Lm8NCj4gPiA+ICBvYmotJChDT05GSUdfQ0xLX1RXTDYwNDApICAgICs9IGNsay10
d2w2MDQwLm8NCj4gPiA+ICtvYmotJChDT05GSUdfQ0xLX1BQQ19DT1JFTkVUKSAgICAgICAgKz0g
Y2xrLXBwYy1jb3JlbmV0Lm8NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGstcHBj
LWNvcmVuZXQuYyBiL2RyaXZlcnMvY2xrL2Nsay1wcGMtDQo+ID4gPiBjb3JlbmV0LmMgbmV3IGZp
bGUgbW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMC4uYTJkNDgzZg0KPiA+ID4gLS0tIC9kZXYvbnVs
bA0KPiA+ID4gKysrIGIvZHJpdmVycy9jbGsvY2xrLXBwYy1jb3JlbmV0LmMNCj4gPiA+IEBAIC0w
LDAgKzEsMjgwIEBADQo+ID4gPiArLyoNCj4gPiA+ICsgKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2Nh
bGUgU2VtaWNvbmR1Y3RvciwgSW5jLg0KPiA+ID4gKyAqDQo+ID4gPiArICogVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiA+ID4g
K21vZGlmeQ0KPiA+ID4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyDQo+ID4gPiArYXMNCj4gPiA+ICsgKiBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIGNs
b2NrIGRyaXZlciBmb3IgRnJlZXNjYWxlIFBvd2VyUEMgY29yZW5ldCBTb0NzLg0KPiA+ID4gKyAq
Lw0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCj4gPiA+ICsjaW5jbHVk
ZSA8bGludXgvaW8uaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ID4gPiAr
I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0
Zm9ybS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxs
aW51eC9zbGFiLmg+DQo+ID4gPiArDQo+ID4gPiArc3RydWN0IGNtdXhfY2xrIHsNCj4gPiA+ICsg
ICAgIHN0cnVjdCBjbGtfaHcgaHc7DQo+ID4gPiArICAgICB2b2lkIF9faW9tZW0gKnJlZzsNCj4g
PiA+ICsgICAgIHUzMiBmbGFnczsNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUg
UExMX0tJTEwgICAgICAgICAgICAgICAgICAgICBCSVQoMzEpDQo+ID4gPiArI2RlZmluZSAgICAg
IENMS1NFTF9TSElGVCAgICAgICAgICAgIDI3DQo+ID4gPiArI2RlZmluZSBDTEtTRUxfQURKVVNU
ICAgICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgdG9fY211eF9jbGsocCkgICAg
ICAgICAgICAgICBjb250YWluZXJfb2YocCwgc3RydWN0IGNtdXhfY2xrLA0KPiBodykNCj4gPiA+
ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBfX2lvbWVtICpiYXNlOw0KPiA+ID4gK3N0YXRpYyB1bnNp
Z25lZCBpbnQgY2xvY2tzX3Blcl9wbGw7DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBjbXV4
X3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGlkeCkgew0KPiA+ID4gKyAgICAgc3Ry
dWN0IGNtdXhfY2xrICpjbGsgPSB0b19jbXV4X2Nsayhodyk7DQo+ID4gPiArICAgICB1MzIgY2xr
c2VsOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgY2xrc2VsID0gKChpZHggLyBjbG9ja3NfcGVyX3Bs
bCkgPDwgMikgKyBpZHggJSBjbG9ja3NfcGVyX3BsbDsNCj4gPiA+ICsgICAgIGlmIChjbGstPmZs
YWdzICYgQ0xLU0VMX0FESlVTVCkNCj4gPiA+ICsgICAgICAgICAgICAgY2xrc2VsICs9IDg7DQo+
ID4gPiArICAgICBjbGtzZWwgPSAoY2xrc2VsICYgMHhmKSA8PCBDTEtTRUxfU0hJRlQ7DQo+ID4g
PiArICAgICBpb3dyaXRlMzJiZShjbGtzZWwsIGNsay0+cmVnKTsNCj4gPiA+ICsNCj4gPiA+ICsg
ICAgIHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdTggY211eF9n
ZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KSB7DQo+ID4gPiArICAgICBzdHJ1Y3QgY211eF9j
bGsgKmNsayA9IHRvX2NtdXhfY2xrKGh3KTsNCj4gPiA+ICsgICAgIHUzMiBjbGtzZWw7DQo+ID4g
PiArDQo+ID4gPiArICAgICBjbGtzZWwgPSBpb3JlYWQzMmJlKGNsay0+cmVnKTsNCj4gPiA+ICsg
ICAgIGNsa3NlbCA9IChjbGtzZWwgPj4gQ0xLU0VMX1NISUZUKSAmIDB4ZjsNCj4gPiA+ICsgICAg
IGlmIChjbGstPmZsYWdzICYgQ0xLU0VMX0FESlVTVCkNCj4gPiA+ICsgICAgICAgICAgICAgY2xr
c2VsIC09IDg7DQo+ID4gPiArICAgICBjbGtzZWwgPSAoY2xrc2VsID4+IDIpICogY2xvY2tzX3Bl
cl9wbGwgKyBjbGtzZWwgJSA0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgcmV0dXJuIGNsa3NlbDsN
Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArY29uc3Qgc3RydWN0IGNsa19vcHMgY211eF9vcHMg
PSB7DQo+ID4gPiArICAgICAuZ2V0X3BhcmVudCA9IGNtdXhfZ2V0X3BhcmVudCwNCj4gPiA+ICsg
ICAgIC5zZXRfcGFyZW50ID0gY211eF9zZXRfcGFyZW50LCB9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0
YXRpYyB2b2lkIF9faW5pdCBjb3JlX211eF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApIHsN
Cj4gPiA+ICsgICAgIHN0cnVjdCBjbGsgKmNsazsNCj4gPiA+ICsgICAgIHN0cnVjdCBjbGtfaW5p
dF9kYXRhIGluaXQ7DQo+ID4gPiArICAgICBzdHJ1Y3QgY211eF9jbGsgKmNtdXhfY2xrOw0KPiA+
ID4gKyAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlOw0KPiA+ID4gKyAgICAgaW50IHJjLCBj
b3VudCwgaTsNCj4gPiA+ICsgICAgIHUzMiAgICAgb2Zmc2V0Ow0KPiA+ID4gKyAgICAgY29uc3Qg
Y2hhciAqY2xrX25hbWU7DQo+ID4gPiArICAgICBjb25zdCBjaGFyICoqcGFyZW50X25hbWVzOw0K
PiA+ID4gKw0KPiA+ID4gKyAgICAgcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlZyIs
ICZvZmZzZXQpOw0KPiA+ID4gKyAgICAgaWYgKHJjKSB7DQo+ID4gPiArICAgICAgICAgICAgIHBy
X2VycigiJXM6IGNvdWxkIG5vdCBnZXQgcmVnIHByb3BlcnR5XG4iLCBucC0+bmFtZSk7DQo+ID4g
PiArICAgICAgICAgICAgIHJldHVybjsNCj4gPiA+ICsgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg
ICAgIC8qIGdldCB0aGUgaW5wdXQgY2xvY2sgc291cmNlIGNvdW50ICovDQo+ID4gPiArICAgICBj
b3VudCA9IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3MobnAsICJjbG9jay1uYW1lcyIpOw0KPiA+
ID4gKyAgICAgaWYgKGNvdW50IDwgMCkgew0KPiA+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIiVz
OiBnZXQgY2xvY2sgY291bnQgZXJyb3JcbiIsIG5wLT5uYW1lKTsNCj4gPiA+ICsgICAgICAgICAg
ICAgcmV0dXJuOw0KPiA+ID4gKyAgICAgfQ0KPiA+ID4gKyAgICAgcGFyZW50X25hbWVzID0ga3ph
bGxvYygoc2l6ZW9mKGNoYXIgKikgKiBjb3VudCksIEdGUF9LRVJORUwpOw0KPiA+ID4gKyAgICAg
aWYgKCFwYXJlbnRfbmFtZXMpIHsNCj4gPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCIlczogY291
bGQgbm90IGFsbG9jYXRlIHBhcmVudF9uYW1lc1xuIiwNCj4gX19mdW5jX18pOw0KPiA+ID4gKyAg
ICAgICAgICAgICByZXR1cm47DQo+ID4gPiArICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICBm
b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCj4gPiA+ICsgICAgICAgICAgICAgcGFyZW50X25h
bWVzW2ldID0gb2ZfY2xrX2dldF9wYXJlbnRfbmFtZShucCwgaSk7DQo+ID4gPiArDQo+ID4gPiAr
ICAgICBjbXV4X2NsayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbXV4X2NsayksIEdGUF9LRVJO
RUwpOw0KPiA+ID4gKyAgICAgaWYgKCFjbXV4X2Nsaykgew0KPiA+ID4gKyAgICAgICAgICAgICBw
cl9lcnIoIiVzOiBjb3VsZCBub3QgYWxsb2NhdGUgY211eF9jbGtcbiIsIF9fZnVuY19fKTsNCj4g
PiA+ICsgICAgICAgICAgICAgZ290byBlcnJfbmFtZTsNCj4gPiA+ICsgICAgIH0NCj4gPiA+ICsg
ICAgIGNtdXhfY2xrLT5yZWcgPSBiYXNlICsgb2Zmc2V0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAg
bm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wscDQwODAtDQo+
IGNsb2NrZ2VuIik7DQo+ID4gPiArICAgICBpZiAobm9kZSAmJiAob2Zmc2V0ID49IDB4ODApKQ0K
PiA+ID4gKyAgICAgICAgICAgICBjbXV4X2Nsay0+ZmxhZ3MgPSBDTEtTRUxfQURKVVNUOw0KPiA+
ID4gKw0KPiA+ID4gKyAgICAgcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChucCwg
ImNsb2NrLW91dHB1dC1uYW1lcyIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgMCwgJmNs
a19uYW1lKTsNCj4gPiA+ICsgICAgIGlmIChyYykgew0KPiA+ID4gKyAgICAgICAgICAgICBwcl9l
cnIoIiVzOiByZWFkIGNsb2NrIG5hbWVzIGVycm9yXG4iLCBucC0+bmFtZSk7DQo+ID4gPiArICAg
ICAgICAgICAgIGdvdG8gZXJyX2NsazsNCj4gPiA+ICsgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg
ICAgIGluaXQubmFtZSA9IGNsa19uYW1lOw0KPiA+ID4gKyAgICAgaW5pdC5vcHMgPSAmY211eF9v
cHM7DQo+ID4gPiArICAgICBpbml0LnBhcmVudF9uYW1lcyA9IHBhcmVudF9uYW1lczsNCj4gPiA+
ICsgICAgIGluaXQubnVtX3BhcmVudHMgPSBjb3VudDsNCj4gPiA+ICsgICAgIGluaXQuZmxhZ3Mg
PSAwOw0KPiA+ID4gKyAgICAgY211eF9jbGstPmh3LmluaXQgPSAmaW5pdDsNCj4gPiA+ICsNCj4g
PiA+ICsgICAgIGNsayA9IGNsa19yZWdpc3RlcihOVUxMLCAmY211eF9jbGstPmh3KTsNCj4gPiA+
ICsgICAgIGlmIChJU19FUlIoY2xrKSkgew0KPiA+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIiVz
OiBjb3VsZCBub3QgcmVnaXN0ZXIgY2xvY2tcbiIsIGNsa19uYW1lKTsNCj4gPiA+ICsgICAgICAg
ICAgICAgZ290byBlcnJfY2xrOw0KPiA+ID4gKyAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAg
cmMgPSBvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7
DQo+ID4gPiArICAgICBpZiAocmMpIHsNCj4gPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJDb3Vs
ZCBub3QgcmVnaXN0ZXIgY2xvY2sgcHJvdmlkZXIgZm9yDQo+IG5vZGU6JXNcbiIsDQo+ID4gPiAr
ICAgICAgICAgICAgICAgICAgICAgIG5wLT5uYW1lKTsNCj4gPiA+ICsgICAgICAgICAgICAgZ290
byBlcnJfY2xrOw0KPiA+ID4gKyAgICAgfQ0KPiA+ID4gKyAgICAgZ290byBlcnJfbmFtZTsNCj4g
PiA+ICsNCj4gPiA+ICtlcnJfY2xrOg0KPiA+ID4gKyAgICAga2ZyZWUoY211eF9jbGspOw0KPiA+
ID4gK2Vycl9uYW1lOg0KPiA+ID4gKyAgICAgLyogZnJlZSAqX25hbWVzIGJlY2F1c2UgdGhleSBh
cmUgcmVhbGxvY2F0ZWQgd2hlbiByZWdpc3RlcmVkICovDQo+ID4gPiArICAgICBrZnJlZShwYXJl
bnRfbmFtZXMpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBfX2luaXQg
Y29yZV9wbGxfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKSB7DQo+ID4gPiArICAgICB1MzIg
b2Zmc2V0LCBtdWx0Ow0KPiA+ID4gKyAgICAgaW50IGksIHJjLCBjb3VudDsNCj4gPiA+ICsgICAg
IGNvbnN0IGNoYXIgKmNsa19uYW1lLCAqcGFyZW50X25hbWU7DQo+ID4gPiArICAgICBzdHJ1Y3Qg
Y2xrX29uZWNlbGxfZGF0YSAqb25lY2VsbF9kYXRhOw0KPiA+ID4gKyAgICAgc3RydWN0IGNsayAg
ICAgICoqc3ViY2xrczsNCj4gPiA+ICsNCj4gPiA+ICsgICAgIHJjID0gb2ZfcHJvcGVydHlfcmVh
ZF91MzIobnAsICJyZWciLCAmb2Zmc2V0KTsNCj4gPiA+ICsgICAgIGlmIChyYykgew0KPiA+ID4g
KyAgICAgICAgICAgICBwcl9lcnIoIiVzOiBjb3VsZCBub3QgZ2V0IHJlZyBwcm9wZXJ0eVxuIiwg
bnAtPm5hbWUpOw0KPiA+ID4gKyAgICAgICAgICAgICByZXR1cm47DQo+ID4gPiArICAgICB9DQo+
ID4gPiArDQo+ID4gPiArICAgICAvKiBnZXQgdGhlIG11bHRpcGxlIG9mIFBMTCAqLw0KPiA+ID4g
KyAgICAgbXVsdCA9IGlvcmVhZDMyYmUoYmFzZSArIG9mZnNldCk7DQo+ID4gPiArDQo+ID4gPiAr
ICAgICAvKiBjaGVjayBpZiB0aGlzIFBMTCBpcyBkaXNhYmxlZCAqLw0KPiA+ID4gKyAgICAgaWYg
KG11bHQgJiBQTExfS0lMTCkgew0KPiA+ID4gKyAgICAgICAgICAgICBwcl9kZWJ1ZygiUExMOiVz
IGlzIGRpc2FibGVkXG4iLCBucC0+bmFtZSk7DQo+ID4gPiArICAgICAgICAgICAgIHJldHVybjsN
Cj4gPiA+ICsgICAgIH0NCj4gPiA+ICsgICAgIG11bHQgPSAobXVsdCA+PiAxKSAmIDB4M2Y7DQo+
ID4gPiArDQo+ID4gPiArICAgICBwYXJlbnRfbmFtZSA9IG9mX2Nsa19nZXRfcGFyZW50X25hbWUo
bnAsIDApOw0KPiA+ID4gKyAgICAgaWYgKCFwYXJlbnRfbmFtZSkgew0KPiA+ID4gKyAgICAgICAg
ICAgICBwcl9lcnIoIlBMTDogJXMgbXVzdCBoYXZlIGEgcGFyZW50XG4iLCBucC0+bmFtZSk7DQo+
ID4gPiArICAgICAgICAgICAgIHJldHVybjsNCj4gPiA+ICsgICAgIH0NCj4gPiA+ICsNCj4gPiA+
ICsgICAgIGNvdW50ID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhucCwgImNsb2NrLW91dHB1
dC1uYW1lcyIpOw0KPiA+ID4gKyAgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IDQpIHsNCj4g
PiA+ICsgICAgICAgICAgICAgcHJfZXJyKCIlczogY2xvY2sgaXMgbm90IHN1cHBvcnRlZFxuIiwg
bnAtPm5hbWUpOw0KPiA+ID4gKyAgICAgICAgICAgICByZXR1cm47DQo+ID4gPiArICAgICB9DQo+
ID4gPiArDQo+ID4gPiArICAgICAvKiBvdXRwdXQgY2xvY2sgbnVtYmVyIHBlciBQTEwgKi8NCj4g
PiA+ICsgICAgIGNsb2Nrc19wZXJfcGxsID0gY291bnQ7DQo+ID4gPiArDQo+ID4gPiArICAgICBz
dWJjbGtzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNsayAqKSAqIGNvdW50LCBHRlBfS0VSTkVM
KTsNCj4gPiA+ICsgICAgIGlmICghc3ViY2xrcykgew0KPiA+ID4gKyAgICAgICAgICAgICBwcl9l
cnIoIiVzOiBjb3VsZCBub3QgYWxsb2NhdGUgc3ViY2xrc1xuIiwgX19mdW5jX18pOw0KPiA+ID4g
KyAgICAgICAgICAgICByZXR1cm47DQo+ID4gPiArICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAg
ICBvbmVjZWxsX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSks
DQo+IEdGUF9LRVJORUwpOw0KPiA+ID4gKyAgICAgaWYgKCFvbmVjZWxsX2RhdGEpIHsNCj4gPiA+
ICsgICAgICAgICAgICAgcHJfZXJyKCIlczogY291bGQgbm90IGFsbG9jYXRlIG9uZWNlbGxfZGF0
YVxuIiwNCj4gX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9jbGtzOw0K
PiA+ID4gKyAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsNCj4gPiA+ICsgICAgICAgICAgICAgcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmlu
Z19pbmRleChucCwgImNsb2NrLW91dHB1dC0NCj4gbmFtZXMiLA0KPiA+ID4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaSwgJmNsa19uYW1lKTsNCj4gPiA+ICsgICAgICAgICAgICAgaWYg
KHJjKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgcHJfZXJyKCIlczogY291bGQgbm90
IGdldCBjbG9jayBuYW1lc1xuIiwgbnAtDQo+ID5uYW1lKTsNCj4gPiA+ICsgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGVycl9jZWxsOw0KPiA+ID4gKyAgICAgICAgICAgICB9DQo+ID4gPiArDQo+
ID4gPiArICAgICAgICAgICAgIC8qDQo+ID4gPiArICAgICAgICAgICAgICAqIHdoZW4gY291bnQg
PT0gNCwgdGhlcmUgYXJlIDQgb3V0cHV0IGNsb2NrczoNCj4gPiA+ICsgICAgICAgICAgICAgICog
LzEsIC8yLCAvMywgLzQgcmVzcGVjdGl2ZWx5DQo+ID4gPiArICAgICAgICAgICAgICAqIHdoZW4g
Y291bnQgPCA0LCB0aGVyZSBhcmUgYXQgbGVhc3QgMiBvdXRwdXQgY2xvY2tzOg0KPiA+ID4gKyAg
ICAgICAgICAgICAgKiAvMSwgLzIsICgvNCwgaWYgY291bnQgPT0gMykgcmVzcGVjdGl2ZWx5Lg0K
PiA+ID4gKyAgICAgICAgICAgICAgKi8NCj4gPiA+ICsgICAgICAgICAgICAgaWYgKGNvdW50ID09
IDQpDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgc3ViY2xrc1tpXSA9IGNsa19yZWdpc3Rl
cl9maXhlZF9mYWN0b3IoTlVMTCwNCj4gY2xrX25hbWUsDQo+ID4gPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF9uYW1lLCAwLCBtdWx0LCAxICsgaSk7DQo+ID4g
PiArICAgICAgICAgICAgIGVsc2UNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg
ICBzdWJjbGtzW2ldID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihOVUxMLA0KPiBjbGtfbmFt
ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X25h
bWUsIDAsIG11bHQsIDEgPDwgaSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgIGlmIChJ
U19FUlIoc3ViY2xrc1tpXSkpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcl9lcnIo
IiVzOiBjb3VsZCBub3QgcmVnaXN0ZXIgY2xvY2tcbiIsDQo+IGNsa19uYW1lKTsNCj4gPiA+ICsg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9jZWxsOw0KPiA+ID4gKyAgICAgICAgICAgICB9
DQo+ID4gPiArICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICBvbmVjZWxsX2RhdGEtPmNsa3Mg
PSBzdWJjbGtzOw0KPiA+ID4gKyAgICAgb25lY2VsbF9kYXRhLT5jbGtfbnVtID0gY291bnQ7DQo+
ID4gPiArDQo+ID4gPiArICAgICByYyA9IG9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19z
cmNfb25lY2VsbF9nZXQsDQo+IG9uZWNlbGxfZGF0YSk7DQo+ID4gPiArICAgICBpZiAocmMpIHsN
Cj4gPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJDb3VsZCBub3QgcmVnaXN0ZXIgY2xrIHByb3Zp
ZGVyIGZvciBub2RlOiVzXG4iLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBucC0+bmFt
ZSk7DQo+ID4gPiArICAgICAgICAgICAgIGdvdG8gZXJyX2NlbGw7DQo+ID4gPiArICAgICB9DQo+
ID4gPiArDQo+ID4gPiArICAgICByZXR1cm47DQo+ID4gPiArZXJyX2NlbGw6DQo+ID4gPiArICAg
ICBrZnJlZShvbmVjZWxsX2RhdGEpOw0KPiA+ID4gK2Vycl9jbGtzOg0KPiA+ID4gKyAgICAga2Zy
ZWUoc3ViY2xrcyk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1
Y3Qgb2ZfZGV2aWNlX2lkIGNsa19tYXRjaFtdIF9faW5pdGNvbnN0ID0gew0KPiA+ID4gKyAgICAg
eyAuY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayIsIC5kYXRhID0gb2ZfZml4ZWRfY2xrX3NldHVw
LCB9LA0KPiA+ID4gKyAgICAgeyAuY29tcGF0aWJsZSA9ICJmc2wsY29yZS1wbGwtY2xvY2siLCAu
ZGF0YSA9IGNvcmVfcGxsX2luaXQsIH0sDQo+ID4gPiArICAgICB7IC5jb21wYXRpYmxlID0gImZz
bCxjb3JlLW11eC1jbG9jayIsIC5kYXRhID0gY29yZV9tdXhfaW5pdCwgfSwNCj4gPiA+ICsgICAg
IHt9DQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IF9faW5pdCBwcGNfY29y
ZW5ldF9jbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gew0KPiA+ID4g
KyAgICAgc3RydWN0IGRldmljZV9ub2RlICpucDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgIG5wID0g
cGRldi0+ZGV2Lm9mX25vZGU7DQo+ID4gPiArICAgICBiYXNlID0gb2ZfaW9tYXAobnAsIDApOw0K
PiA+ID4gKyAgICAgaWYgKCFiYXNlKSB7DQo+ID4gPiArICAgICAgICAgICAgIGRldl9lcnIoJnBk
ZXYtPmRldiwgImlvbWFwIGVycm9yXG4iKTsNCj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F
Tk9NRU07DQo+ID4gPiArICAgICB9DQo+ID4gPiArICAgICBvZl9jbGtfaW5pdChjbGtfbWF0Y2gp
Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+
ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBwY19jbGtfaWRzW10gX19pbml0
Y29uc3QgPSB7DQo+ID4gPiArICAgICB7IC5jb21wYXRpYmxlID0gImZzbCxxb3JpcS1jbG9ja2dl
bi0xLjAiLCB9LA0KPiA+ID4gKyAgICAgeyAuY29tcGF0aWJsZSA9ICJmc2wscW9yaXEtY2xvY2tn
ZW4tMiIsIH0sDQo+ID4gPiArICAgICB7fQ0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3Rh
dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHBjX2NvcmVuZXRfY2xrX2RyaXZlciA9IHsNCj4g
PiA+ICsgICAgIC5kcml2ZXIgPSB7DQo+ID4gPiArICAgICAgICAgICAgIC5uYW1lID0gInBwY19j
b3JlbmV0X2Nsb2NrIiwNCj4gPiA+ICsgICAgICAgICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUs
DQo+ID4gPiArICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IHBwY19jbGtfaWRzLA0KPiA+
ID4gKyAgICAgfSwNCj4gPiA+ICsgICAgIC5wcm9iZSA9IHBwY19jb3JlbmV0X2Nsa19wcm9iZSwg
fTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IF9faW5pdCBwcGNfY29yZW5ldF9jbGtfaW5p
dCh2b2lkKSB7DQo+ID4gPiArICAgICByZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZw
cGNfY29yZW5ldF9jbGtfZHJpdmVyKTsNCj4gPiA+ICt9DQo+ID4gPiArc3Vic3lzX2luaXRjYWxs
KHBwY19jb3JlbmV0X2Nsa19pbml0KTsNCj4gPiA+IC0tDQo+ID4gPiAxLjguMA0KDQo=
^ permalink raw reply
* RE: [PATCH v2] of/base: release the node correctly in of_parse_phandle_with_args()
From: Tang Yuantian-B29983 @ 2013-04-17 2:44 UTC (permalink / raw)
To: Timur Tabi
Cc: devicetree-discuss, linuxppc-dev@lists.ozlabs.org, lkml,
Rob Herring
In-Reply-To: <CAOZdJXW8qKccGKic3R4o1aqJdbfHcBoAp62B4HPFnF=sUAEvuQ@mail.gmail.com>
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBUaW11ciBUYWJpIFttYWlsdG86
dGltdXJAdGFiaS5vcmddDQo+IFNlbnQ6IDIwMTPE6jTUwjE2yNUgMTk6MzcNCj4gVG86IFRhbmcg
WXVhbnRpYW4tQjI5OTgzDQo+IENjOiBHcmFudCBMaWtlbHk7IGRldmljZXRyZWUtZGlzY3Vzczsg
bGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IGxrbWw7DQo+IFJvYiBIZXJyaW5nDQo+IFN1
YmplY3Q6IFJlOiBbUEFUQ0ggdjJdIG9mL2Jhc2U6IHJlbGVhc2UgdGhlIG5vZGUgY29ycmVjdGx5
IGluDQo+IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKCkNCj4gDQo+IE9uIFR1ZSwgQXByIDks
IDIwMTMgYXQgMTA6MzYgUE0sICA8WXVhbnRpYW4uVGFuZ0BmcmVlc2NhbGUuY29tPiB3cm90ZToN
Cj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvdW5kIGl0ISByZXR1cm4gc3Vj
Y2VzcyAqLw0KPiANCj4gSSdtIHByZXR0eSBzdXJlIHRoaXMgY29tbWVudCBpcyBpbiB0aGUgd3Jv
bmcgcGxhY2UuDQoNCkl0IGlzIG5vdCBwZXJmZWN0LCBidXQgYWNjZXB0YWJsZS4NCg0KLVl1YW50
aWFuDQoNCg==
^ permalink raw reply
* Re: [PATCH v2] of/base: release the node correctly in of_parse_phandle_with_args()
From: Timur Tabi @ 2013-04-17 3:30 UTC (permalink / raw)
To: Tang Yuantian-B29983
Cc: devicetree-discuss, linuxppc-dev@lists.ozlabs.org, lkml,
Rob Herring
In-Reply-To: <D07C73A334FF604B95B3CBD2A545D07B0B1456B8@039-SN2MPN1-013.039d.mgd.msft.net>
Tang Yuantian-B29983 wrote:
>> >On Tue, Apr 9, 2013 at 10:36 PM,<Yuantian.Tang@freescale.com> wrote:
>>> > >
>>> > >+ /* Found it! return success */
>> >
>> >I'm pretty sure this comment is in the wrong place.
> It is not perfect, but acceptable.
Like I said, I'm pretty sure it's in the wrong place.
--
Timur Tabi
^ permalink raw reply
* Re: [PATCH V2 2/5] powerpc, perf: Add basic assembly code to read BHRB entries on POWER8
From: Anshuman Khandual @ 2013-04-17 4:00 UTC (permalink / raw)
To: Segher Boessenkool; +Cc: linuxppc-dev, mikey, linux-kernel
In-Reply-To: <AAEA07FE-7530-46D3-B2FC-B3FD8EC2C6E2@kernel.crashing.org>
On 04/16/2013 10:53 PM, Segher Boessenkool wrote:
>> +/* r3 = n (where n = [0-1023])
>> + * The maximum number of BHRB entries supported with PPC_MFBHRBE
>> instruction
>> + * is 1024. We have limited number of table entries here as POWER8
>> implements
>> + * 32 BHRB entries.
>> + */
>> +
>> +/* .global read_bhrb */
>> +_GLOBAL(read_bhrb)
>> + cmpldi r3,1023
>
> This should be 31, since that is the last entry in the table below.
Hey Segher,
Would fix this in the next version. Thanks for pointing it out.
Regards
Anshuman
^ permalink raw reply
* RE: [PATCH v2] of/base: release the node correctly in of_parse_phandle_with_args()
From: Tang Yuantian-B29983 @ 2013-04-17 4:49 UTC (permalink / raw)
To: Timur Tabi
Cc: devicetree-discuss, linuxppc-dev@lists.ozlabs.org, lkml,
Rob Herring
In-Reply-To: <516E1763.7040206@tabi.org>
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogVGltdXIgVGFiaSBbbWFp
bHRvOnRpbXVyQHRhYmkub3JnXQ0KPiBTZW50OiAyMDEzxOo01MIxN8jVIDExOjMxDQo+IFRvOiBU
YW5nIFl1YW50aWFuLUIyOTk4Mw0KPiBDYzogR3JhbnQgTGlrZWx5OyBkZXZpY2V0cmVlLWRpc2N1
c3M7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnOyBsa21sOw0KPiBSb2IgSGVycmluZw0K
PiBTdWJqZWN0OiBSZTogW1BBVENIIHYyXSBvZi9iYXNlOiByZWxlYXNlIHRoZSBub2RlIGNvcnJl
Y3RseSBpbg0KPiBvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncygpDQo+IA0KPiBUYW5nIFl1YW50
aWFuLUIyOTk4MyB3cm90ZToNCj4gPj4gPk9uIFR1ZSwgQXByIDksIDIwMTMgYXQgMTA6MzYgUE0s
PFl1YW50aWFuLlRhbmdAZnJlZXNjYWxlLmNvbT4gIHdyb3RlOg0KPiA+Pj4gPiA+DQo+ID4+PiA+
ID4rICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3VuZCBpdCEgcmV0dXJuIHN1Y2Nlc3MgKi8N
Cj4gPj4gPg0KPiA+PiA+SSdtIHByZXR0eSBzdXJlIHRoaXMgY29tbWVudCBpcyBpbiB0aGUgd3Jv
bmcgcGxhY2UuDQo+IA0KPiA+IEl0IGlzIG5vdCBwZXJmZWN0LCBidXQgYWNjZXB0YWJsZS4NCj4g
DQo+IExpa2UgSSBzYWlkLCBJJ20gcHJldHR5IHN1cmUgaXQncyBpbiB0aGUgd3JvbmcgcGxhY2Uu
DQo+IA0KDQpJdCB3YXMgcGxhY2VkIG9uIEVMU0Ugc3RhdGVtZW50IG9yaWdpbmFsbHksIEkgbW92
ZWQgaXQgdG8gSUYgc3RhdGVtZW50Lg0KV2h5IGlzIGl0IHNvIHdyb25nPw0KDQpUaGFua3MsDQpZ
dWFudGlhbg0K
^ permalink raw reply
* PowerPC, P2020RDB, application debug when the application is in tight loop, Sysrq
From: saikrishna gajula @ 2013-04-17 5:04 UTC (permalink / raw)
To: linuxppc-dev; +Cc: mikey, linux-kernel, khandual
[-- Attachment #1: Type: text/plain, Size: 4135 bytes --]
HI All,
I am new to this group. I am working on Freescale P2020
platform running linux 2.6.21. I am looking for debug mechanism/utility,
when a multi threaded application running on linux , appears to be hung (
running in a tight loop,deadlock) while not able to access the board
through serial/SSH/Telnet.
I was looking at Magic sysrq option in linux to generate the stack,
register dump when the application is hung. I am able to dump the call
trace in normal working conditions. But i can't use echo t >
/proc/sysrq-trigger and debug when the application hung.
I am using below piece of code(drivers/serial/8250.c) on P2020RDB to debug
the application where in , in hung situation, when i press 'y' followed by
't' on serial console it should go to sysrq handler, and dump the call
trace, but it is not happening.(simply board hung)
{
if(sysrq_enable_flag)
handle_sysrq(ch, up->port.info->tty);
sysrq_enable_flag = 0;
if(ch == 'y')
sysrq_enable_flag = 1;
}
It would be helpful if you provide any hint on the issue, or any other way
to debug the application in hang situations.
Thanks,
Sai
On Tue, Apr 16, 2013 at 9:24 PM, Anshuman Khandual <
khandual@linux.vnet.ibm.com> wrote:
> Branch History Rolling Buffer (BHRB) is a new PMU feaure
> in IBM
> POWER8 processor which records the branch instructions inside the execution
> pipeline. This patchset enables the basic functionality of the feature
> through
> generic perf branch stack sampling framework.
>
> Sample output
> -------------
> $./perf record -b top
> $./perf report
>
> Overhead Command Source Shared Object Source
> Symbol Target Shared Object Target Symbol
> # ........ ....... ....................
> ...................................... ....................
> ...................................
> #
>
> 7.82% top libc-2.11.2.so [k] _IO_vfscanf
> libc-2.11.2.so [k] _IO_vfscanf
> 6.17% top libc-2.11.2.so [k] _IO_vfscanf
> [unknown] [k] 00000000
> 2.37% top [unknown] [k] 0xf7aafb30
> [unknown] [k] 00000000
> 1.80% top [unknown] [k] 0x0fe07978
> libc-2.11.2.so [k] _IO_vfscanf
> 1.60% top libc-2.11.2.so [k] _IO_vfscanf
> [kernel.kallsyms] [k] .do_task_stat
> 1.20% top [kernel.kallsyms] [k] .do_task_stat
> [kernel.kallsyms] [k] .do_task_stat
> 1.02% top libc-2.11.2.so [k] vfprintf
> libc-2.11.2.so [k] vfprintf
> 0.92% top top [k] _init
> [unknown] [k] 0x0fe037f4
>
> Changes in V2
> --------------
> - Added copyright messages to the newly created files
> - Modified couple of commit messages
>
> Anshuman Khandual (5):
> powerpc, perf: Add new BHRB related instructions on POWER8
> powerpc, perf: Add basic assembly code to read BHRB entries on POWER8
> powerpc, perf: Add new BHRB related generic functions, data and flags
> powerpc, perf: Define BHRB generic functions, data and flags for POWER8
> powerpc, perf: Enable branch stack sampling framework support with BHRB
>
> arch/powerpc/include/asm/perf_event_server.h | 6 ++
> arch/powerpc/include/asm/ppc-opcode.h | 7 ++
> arch/powerpc/perf/Makefile | 2 +-
> arch/powerpc/perf/bhrb.S | 44 +++++++++++++
> arch/powerpc/perf/core-book3s.c | 96
> +++++++++++++++++++++++++++-
> arch/powerpc/perf/perf_event_bhrb.c | 85 ++++++++++++++++++++++++
> arch/powerpc/perf/power8-pmu.c | 57 ++++++++++++++++-
> 7 files changed, 292 insertions(+), 5 deletions(-)
> create mode 100644 arch/powerpc/perf/bhrb.S
> create mode 100644 arch/powerpc/perf/perf_event_bhrb.c
>
> --
> 1.7.11.7
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
>
[-- Attachment #2: Type: text/html, Size: 5464 bytes --]
^ permalink raw reply
* Re: [PATCH 4/8] Read/Write oops nvram partition via pstore
From: Aruna Balakrishnaiah @ 2013-04-17 5:19 UTC (permalink / raw)
To: Michael Ellerman
Cc: jkenisto, mahesh, linux-kernel, linuxppc-dev, paulus, anton
In-Reply-To: <516CEDB4.9090005@linux.vnet.ibm.com>
On Tuesday 16 April 2013 11:50 AM, Aruna Balakrishnaiah wrote:
>
> Currently with this patchset, pstore is not supporting compression of
> oops-messages
> since it involves some changes in the pstore framework.
>
> big_oops_buf will hold the large part of oops data which will be compressed
> and put
> to oops_buf.
>
> big_oops_buf: (1.45 of oops_partition_size)
Sorry, big_oops_buf is (2.22 of oops_data_sz)
where oops_data_sz is oops_partition_size - sizeof(oops_log_info).
where oops_log_info is oops header.
> _________________________
> | header | oops-text |
> |_________|_____________|
>
> <header> is added by the pstore.
>
> So in case compression fails:
>
> we would need to log the header + last few bytes of big_oops_buf to oops_buf.
> oops_buf: (this is of oops_partition_size)
>
We would need to log the header + last oops_data_sz bytes of big_oops_buf to
oops_buf.
So that we can have the header while throwing away the data that immediately
follows it.
> we need last few bytes of big_oops_buf as we need to log the recent messages of
> printk buffer. For which we need to know the header size and it involves some
> changes in the pstore framework.
>
Just communicating the header size from pstore would do the job for us.
> I have the compression patches ready, will be posting it soon as a separate set.
>
>> cheers
>>
>
^ permalink raw reply
* Re: [PATCH V2 5/5] powerpc, perf: Enable branch stack sampling framework support with BHRB
From: Michael Ellerman @ 2013-04-17 7:08 UTC (permalink / raw)
To: Anshuman Khandual; +Cc: linuxppc-dev, mikey, linux-kernel
In-Reply-To: <1366127650-1952-6-git-send-email-khandual@linux.vnet.ibm.com>
On Tue, Apr 16, 2013 at 09:24:10PM +0530, Anshuman Khandual wrote:
> This patch provides basic enablement for perf branch stack sampling framework
> on POWER8 processor with a new PMU feature called BHRB (Branch History Rolling
> Buffer).
>
> Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
> ---
> arch/powerpc/perf/core-book3s.c | 96 +++++++++++++++++++++++++++++++++++--
> arch/powerpc/perf/perf_event_bhrb.c | 85 ++++++++++++++++++++++++++++++++
> 2 files changed, 178 insertions(+), 3 deletions(-)
> create mode 100644 arch/powerpc/perf/perf_event_bhrb.c
>
> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
> index 4ac6e64..f4d1347 100644
> --- a/arch/powerpc/perf/core-book3s.c
> +++ b/arch/powerpc/perf/core-book3s.c
> @@ -19,6 +19,8 @@
> #include <asm/firmware.h>
> #include <asm/ptrace.h>
>
> +#define BHRB_MAX_ENTRIES 32
> +
> struct cpu_hw_events {
> int n_events;
> int n_percpu;
> @@ -38,11 +40,21 @@ struct cpu_hw_events {
>
> unsigned int group_flag;
> int n_txn_start;
> +
> + /* BHRB bits */
> + u64 bhrb_filter; /* BHRB HW branch filter */
> + int bhrb_users;
> + void *bhrb_context;
> + struct perf_branch_stack bhrb_stack;
> + struct perf_branch_entry bhrb_entries[BHRB_MAX_ENTRIES];
> };
> +
> DEFINE_PER_CPU(struct cpu_hw_events, cpu_hw_events);
>
> struct power_pmu *ppmu;
>
> +#include "perf_event_bhrb.c"
> +
Um, why are you doing that?
If it's code that should be in a header, put it in a header. If it's C
code, add it to the Makefile.
cheers
^ permalink raw reply
* [PATCH] powerpc: remove the unneeded trigger of decrementer interrupt in decrementer_check_overflow
From: Kevin Hao @ 2013-04-17 9:50 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc, Anton Blanchard
Previously in order to handle the edge sensitive decrementers,
we choose to set the decrementer to 1 to trigger a decrementer
interrupt when re-enabling interrupts. But with the rework of the
lazy EE, we would replay the decrementer interrupt when re-enabling
interrupts if a decrementer interrupt occurs with irq soft-disabled.
So there is no need to trigger a decrementer interrupt in this case
any more.
Signed-off-by: Kevin Hao <haokexin@gmail.com>
---
arch/powerpc/kernel/irq.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 4f97fe3..1af5744 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -116,8 +116,6 @@ static inline notrace int decrementer_check_overflow(void)
u64 now = get_tb_or_rtc();
u64 *next_tb = &__get_cpu_var(decrementers_next_tb);
- if (now >= *next_tb)
- set_dec(1);
return now >= *next_tb;
}
--
1.8.1.4
^ permalink raw reply related
* [PATCH] usb: remove redundant tdi_reset
From: Shengzhou Liu @ 2013-04-17 10:03 UTC (permalink / raw)
To: linuxppc-dev, stable, linux-usb; +Cc: Shengzhou Liu
We remove the redundant tdi_reset in ehci_setup since there
is already it in ehci_reset.
It was observed that the duplicated tdi_reset was causing
the PHY_CLK_VALID bit unstable.
Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
---
drivers/usb/host/ehci-hcd.c | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 416a6dc..83b5a17 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -670,9 +670,6 @@ int ehci_setup(struct usb_hcd *hcd)
if (retval)
return retval;
- if (ehci_is_TDI(ehci))
- tdi_reset(ehci);
-
ehci_reset(ehci);
return 0;
--
1.7.0.4
^ permalink raw reply related
* Re: [PATCH v2] of/base: release the node correctly in of_parse_phandle_with_args()
From: Timur Tabi @ 2013-04-17 11:27 UTC (permalink / raw)
To: Tang Yuantian-B29983
Cc: devicetree-discuss, linuxppc-dev@lists.ozlabs.org, lkml,
Rob Herring
In-Reply-To: <D07C73A334FF604B95B3CBD2A545D07B0B1457D2@039-SN2MPN1-013.039d.mgd.msft.net>
Tang Yuantian-B29983 wrote:
> It was placed on ELSE statement originally, I moved it to IF statement.
> Why is it so wrong?
Because the logic of the comment applies to the else-condition, not the
if-condtion.
--
Timur Tabi
^ permalink raw reply
* RE: [PATCH] Enable CONFIG_DEVTMPFS_MOUNT to ensure /dev can be mounted correctly
From: Luo Zhenhua-B19537 @ 2013-04-17 11:46 UTC (permalink / raw)
To: Michael Ellerman; +Cc: linuxppc-dev@ozlabs.org
In-Reply-To: <20130415050129.GB21147@concordia>
> -----Original Message-----
> From: Michael Ellerman [mailto:michael@ellerman.id.au]
> Sent: Monday, April 15, 2013 1:02 PM
>=20
> On Thu, Apr 11, 2013 at 09:56:30PM +0800, Zhenhua Luo wrote:
> > When using recent udev, the /dev node mount requires
> > CONFIG_DEVTMPFS_MOUNT is enabled in Kernel.
>=20
> Really?
>=20
> I know it makes life easier when you don't have an initramfs, but is it
> actually required now?
[Luo Zhenhua-B19537] I didn't use initramfs when the issue is found, I thin=
k the option is required to be enabled.=20
Best Regards,
Zhenhua
^ permalink raw reply
* Re: [PATCH V2 5/5] powerpc, perf: Enable branch stack sampling framework support with BHRB
From: Anshuman Khandual @ 2013-04-17 12:07 UTC (permalink / raw)
To: Michael Ellerman; +Cc: linuxppc-dev, mikey, linux-kernel
In-Reply-To: <20130417070852.GA29203@concordia>
On 04/17/2013 12:38 PM, Michael Ellerman wrote:
> On Tue, Apr 16, 2013 at 09:24:10PM +0530, Anshuman Khandual wrote:
>> This patch provides basic enablement for perf branch stack sampling framework
>> on POWER8 processor with a new PMU feature called BHRB (Branch History Rolling
>> Buffer).
>>
>> Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
>> ---
>> arch/powerpc/perf/core-book3s.c | 96 +++++++++++++++++++++++++++++++++++--
>> arch/powerpc/perf/perf_event_bhrb.c | 85 ++++++++++++++++++++++++++++++++
>> 2 files changed, 178 insertions(+), 3 deletions(-)
>> create mode 100644 arch/powerpc/perf/perf_event_bhrb.c
>>
>> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
>> index 4ac6e64..f4d1347 100644
>> --- a/arch/powerpc/perf/core-book3s.c
>> +++ b/arch/powerpc/perf/core-book3s.c
>> @@ -19,6 +19,8 @@
>> #include <asm/firmware.h>
>> #include <asm/ptrace.h>
>>
>> +#define BHRB_MAX_ENTRIES 32
>> +
>> struct cpu_hw_events {
>> int n_events;
>> int n_percpu;
>> @@ -38,11 +40,21 @@ struct cpu_hw_events {
>>
>> unsigned int group_flag;
>> int n_txn_start;
>> +
>> + /* BHRB bits */
>> + u64 bhrb_filter; /* BHRB HW branch filter */
>> + int bhrb_users;
>> + void *bhrb_context;
>> + struct perf_branch_stack bhrb_stack;
>> + struct perf_branch_entry bhrb_entries[BHRB_MAX_ENTRIES];
>> };
>> +
>> DEFINE_PER_CPU(struct cpu_hw_events, cpu_hw_events);
>>
>> struct power_pmu *ppmu;
>>
>> +#include "perf_event_bhrb.c"
>> +
>
> Um, why are you doing that?
>
There was no specific reason for that.
> If it's code that should be in a header, put it in a header. If it's C
> code, add it to the Makefile.
Sure I would get the new code in the Makefile. Thanks!
Regards
Anshuman
>
> cheers
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
>
^ permalink raw reply
* Re: [PATCH] Enable CONFIG_DEVTMPFS_MOUNT to ensure /dev can be mounted correctly
From: Gary Thomas @ 2013-04-17 12:27 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <CA452391058F6D4E9715FB2C29D9312A014D3107@039-SN2MPN1-021.039d.mgd.msft.net>
On 2013-04-17 05:46, Luo Zhenhua-B19537 wrote:
>> -----Original Message-----
>> From: Michael Ellerman [mailto:michael@ellerman.id.au]
>> Sent: Monday, April 15, 2013 1:02 PM
>>
>> On Thu, Apr 11, 2013 at 09:56:30PM +0800, Zhenhua Luo wrote:
>>> When using recent udev, the /dev node mount requires
>>> CONFIG_DEVTMPFS_MOUNT is enabled in Kernel.
>>
>> Really?
>>
>> I know it makes life easier when you don't have an initramfs, but is it
>> actually required now?
> [Luo Zhenhua-B19537] I didn't use initramfs when the issue is found, I think the option is required to be enabled.
>
Yes, it is required to get udev to work properly (versions of udev
newer than ~173)
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
^ permalink raw reply
* Re: [PATCHv3 2/2] radeon: use max_bus_speed to activate gen2 speeds
From: Lucas Kannebley Tavares @ 2013-04-17 12:38 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: David Airlie, DRI mailing list, Kleber Sacilotto de Souza,
Alex Deucher, Jerome Glisse, Thadeu Lima de Souza Cascardo,
Brian King, linuxppc-dev
In-Reply-To: <CAErSpo7vxSJix83DQcsARPWYWbx8UGxQ9FN61OtEJrEv7GhK=g@mail.gmail.com>
On 04/12/2013 01:38 PM, Bjorn Helgaas wrote:
> On Thu, Apr 11, 2013 at 7:13 AM, Lucas Kannebley Tavares
> <lucaskt@linux.vnet.ibm.com> wrote:
>> radeon currently uses a drm function to get the speed capabilities for
>> the bus. However, this is a non-standard method of performing this
>> detection and this patch changes it to use the max_bus_speed attribute.
>> ---
>> drivers/gpu/drm/radeon/evergreen.c | 9 ++-------
>> drivers/gpu/drm/radeon/r600.c | 8 +-------
>> drivers/gpu/drm/radeon/rv770.c | 8 +-------
>> 3 files changed, 4 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
>> index 305a657..3291f62 100644
>> --- a/drivers/gpu/drm/radeon/evergreen.c
>> +++ b/drivers/gpu/drm/radeon/evergreen.c
>> @@ -3855,8 +3855,7 @@ void evergreen_fini(struct radeon_device *rdev)
>>
>> void evergreen_pcie_gen2_enable(struct radeon_device *rdev)
>> {
>> - u32 link_width_cntl, speed_cntl, mask;
>> - int ret;
>> + u32 link_width_cntl, speed_cntl;
>>
>> if (radeon_pcie_gen2 == 0)
>> return;
>> @@ -3871,11 +3870,7 @@ void evergreen_pcie_gen2_enable(struct radeon_device *rdev)
>> if (ASIC_IS_X2(rdev))
>> return;
>>
>> - ret = drm_pcie_get_speed_cap_mask(rdev->ddev,&mask);
>> - if (ret != 0)
>> - return;
>> -
>> - if (!(mask& DRM_PCIE_SPEED_50))
>> + if (rdev->pdev->bus->max_bus_speed< PCIE_SPEED_5_0GT)
>
> For devices on a root bus, we previously dereferenced a NULL pointer
> in drm_pcie_get_speed_cap_mask() because pdev->bus->self is NULL on a
> root bus. (I think this is the original problem you tripped over,
> Lucas.)
>
> These patches fix that problem. On pseries, where the device *is* on
> a root bus, your patches set max_bus_speed so this will work as
> expected. On most other systems, max_bus_speed for root buses will be
> PCI_SPEED_UNKNOWN (set in pci_alloc_bus() and never updated because
> most arches don't have code like the pseries code you're adding).
>
> PCI_SPEED_UNKNOWN = 0xff, so if we see another machine with a GPU on
> the root bus, we'll attempt to enable Gen2 on the device even though
> we have no idea what the bus will support.
>
> That's why I originally suggested skipping the Gen2 stuff if
> "max_bus_speed == PCI_SPEED_UNKNOWN". I was just being conservative,
> thinking that it's better to have a functional but slow GPU rather
> than the unknown (to me) effects of enabling Gen2 on a link that might
> not support it. But I'm fine with this being either way.
You're right here, of course. I'll test for it being different from
5_0GT and 8_0GT instead. Though at some point I suppose someone will
want to tackle Gen3 speeds.
>
> It would be nice if we could get rid of drm_pcie_get_speed_cap_mask()
> altogether. It is exported, but I have no idea of anybody else uses
> it. Maybe it could at least be marked __deprecated now?
>
I'll mark it.
> I don't know who should take these patches. They don't touch
> drivers/pci, but I'd be happy to push them, given the appropriate ACKs
> from DRM and powerpc folks.
>
> Bjorn
>
>> return;
>>
>> speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL);
>> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
>> index 0740db3..64b90c0 100644
>> --- a/drivers/gpu/drm/radeon/r600.c
>> +++ b/drivers/gpu/drm/radeon/r600.c
>> @@ -4351,8 +4351,6 @@ static void r600_pcie_gen2_enable(struct radeon_device *rdev)
>> {
>> u32 link_width_cntl, lanes, speed_cntl, training_cntl, tmp;
>> u16 link_cntl2;
>> - u32 mask;
>> - int ret;
>>
>> if (radeon_pcie_gen2 == 0)
>> return;
>> @@ -4371,11 +4369,7 @@ static void r600_pcie_gen2_enable(struct radeon_device *rdev)
>> if (rdev->family<= CHIP_R600)
>> return;
>>
>> - ret = drm_pcie_get_speed_cap_mask(rdev->ddev,&mask);
>> - if (ret != 0)
>> - return;
>> -
>> - if (!(mask& DRM_PCIE_SPEED_50))
>> + if (rdev->pdev->bus->max_bus_speed< PCIE_SPEED_5_0GT)
>> return;
>>
>> speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL);
>> diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
>> index d63fe1d..c683c36 100644
>> --- a/drivers/gpu/drm/radeon/rv770.c
>> +++ b/drivers/gpu/drm/radeon/rv770.c
>> @@ -1238,8 +1238,6 @@ static void rv770_pcie_gen2_enable(struct radeon_device *rdev)
>> {
>> u32 link_width_cntl, lanes, speed_cntl, tmp;
>> u16 link_cntl2;
>> - u32 mask;
>> - int ret;
>>
>> if (radeon_pcie_gen2 == 0)
>> return;
>> @@ -1254,11 +1252,7 @@ static void rv770_pcie_gen2_enable(struct radeon_device *rdev)
>> if (ASIC_IS_X2(rdev))
>> return;
>>
>> - ret = drm_pcie_get_speed_cap_mask(rdev->ddev,&mask);
>> - if (ret != 0)
>> - return;
>> -
>> - if (!(mask& DRM_PCIE_SPEED_50))
>> + if (rdev->pdev->bus->max_bus_speed< PCIE_SPEED_5_0GT)
>> return;
>>
>> DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n");
>> --
>> 1.7.4.4
>>
>
--
Lucas Kannebley Tavares
Software Engineer
IBM Linux Technology Center
^ permalink raw reply
* Re: [PATCHv3 1/2] ppc64: perform proper max_bus_speed detection
From: Lucas Kannebley Tavares @ 2013-04-17 12:38 UTC (permalink / raw)
To: Michael Ellerman
Cc: David Airlie, Brian King, dri-devel, Kleber Sacilotto de Souza,
Alex Deucher, Jerome Glisse, Thadeu Lima de Souza Cascardo,
Bjorn Helgaas, linuxppc-dev
In-Reply-To: <20130415050001.GA21147@concordia>
On 04/15/2013 02:00 AM, Michael Ellerman wrote:
> On Thu, Apr 11, 2013 at 10:13:13AM -0300, Lucas Kannebley Tavares wrote:
>> On pseries machines the detection for max_bus_speed should be done
>> through an OpenFirmware property. This patch adds a function to perform this
>> detection and a hook to perform dynamic adding of the function only for
>> pseries.
>
> The crucial detail you didn't mention is that pcibios_root_bridge_prepare()
> already exists as a weak function in the PCI code and is called from
> pci_create_root_bus().
Adding this comment.
>
>> diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
>> index 8bcc9ca..15796b5 100644
>> --- a/arch/powerpc/platforms/pseries/setup.c
>> +++ b/arch/powerpc/platforms/pseries/setup.c
>> @@ -430,6 +430,8 @@ static void pSeries_machine_kexec(struct kimage *image)
>> }
>> #endif
>>
>> +int pseries_root_bridge_prepare(struct pci_host_bridge *bridge);
>> +
>
> Don't do that, put it in a header where it belongs.
>
And done as well.
> cheers
>
--
Lucas Kannebley Tavares
Software Engineer
IBM Linux Technology Center
^ permalink raw reply
* Re: [PATCHv3 1/2] ppc64: perform proper max_bus_speed detection
From: Lucas Kannebley Tavares @ 2013-04-17 12:40 UTC (permalink / raw)
To: Michael Ellerman
Cc: David Airlie, Brian King, dri-devel, Kleber Sacilotto de Souza,
Alex Deucher, Jerome Glisse, Thadeu Lima de Souza Cascardo,
Bjorn Helgaas, linuxppc-dev
In-Reply-To: <20130415114202.GA12701@concordia>
On 04/15/2013 08:42 AM, Michael Ellerman wrote:
> On Thu, Apr 11, 2013 at 10:13:13AM -0300, Lucas Kannebley Tavares wrote:
>> On pseries machines the detection for max_bus_speed should be done
>> through an OpenFirmware property. This patch adds a function to perform this
>> detection and a hook to perform dynamic adding of the function only for
>> pseries.
>
> This fails to build for me on ppc64_defconfig, with:
>
> arch/powerpc/include/asm/machdep.h:111:5: error: 'struct pci_host_bridge' declared inside parameter list [-Werror]
>
>
> Presumably you tested it using some other defconfig?
>
> cheers
>
Yes, I tested with another config, I did get warnings, though, so I
should've fixed that earlier.
Adding a forward declaration to prevent this from even throwing out
warnings.
--
Lucas Kannebley Tavares
Software Engineer
IBM Linux Technology Center
^ permalink raw reply
* RE: [PATCH v2] of/base: release the node correctly in of_parse_phandle_with_args()
From: Grant Likely @ 2013-04-17 14:57 UTC (permalink / raw)
To: Tang Yuantian-B29983, Tang Yuantian-B29983
Cc: devicetree-discuss@lists.ozlabs.org,
linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
rob.herring@calxeda.com
In-Reply-To: <D07C73A334FF604B95B3CBD2A545D07B0B144FD3@039-SN2MPN1-013.039d.mgd.msft.net>
On Tue, 16 Apr 2013 06:54:40 +0000, Tang Yuantian-B29983 <B29983@freescale.com> wrote:
> Hi Grant.likely,
>
> I really preciate if you can spend some times to review this patch.
Applied, thanks.
g.
^ permalink raw reply
* Re: [PATCH] usb: remove redundant tdi_reset
From: Alan Stern @ 2013-04-17 15:03 UTC (permalink / raw)
To: Shengzhou Liu; +Cc: linux-usb, linuxppc-dev, stable
In-Reply-To: <1366193026-20871-1-git-send-email-Shengzhou.Liu@freescale.com>
On Wed, 17 Apr 2013, Shengzhou Liu wrote:
> We remove the redundant tdi_reset in ehci_setup since there
> is already it in ehci_reset.
> It was observed that the duplicated tdi_reset was causing
> the PHY_CLK_VALID bit unstable.
>
> Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
> ---
> drivers/usb/host/ehci-hcd.c | 3 ---
> 1 files changed, 0 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
> index 416a6dc..83b5a17 100644
> --- a/drivers/usb/host/ehci-hcd.c
> +++ b/drivers/usb/host/ehci-hcd.c
> @@ -670,9 +670,6 @@ int ehci_setup(struct usb_hcd *hcd)
> if (retval)
> return retval;
>
> - if (ehci_is_TDI(ehci))
> - tdi_reset(ehci);
> -
> ehci_reset(ehci);
>
> return 0;
Acked-by: Alan Stern <stern@rowland.harvard.edu>
This should be applied to stable kernels going back to 3.6.
In case you are wondering why that redudant call was added, I did it
because some of the PCI drivers (Intel and TDI) already had calls to
tdi_reset. The commit removed those calls, so the new one was added
in.
^ permalink raw reply
* Re: [PATCH v7 3/3] of/pci: mips: convert to common of_pci_range_parser
From: Linus Walleij @ 2013-04-17 15:42 UTC (permalink / raw)
To: Andrew Murray
Cc: linux-mips, siva.kallam, linux-pci, Thierry Reding, Liviu.Dudau,
Paul Mackerras, linux-samsung-soc, Russell King - ARM Linux,
Jingoo Han, Jason Gunthorpe, Thomas Abraham, Arnd Bergmann,
devicetree-discuss@lists.ozlabs.org, Rob Herring, Kukjin Kim,
bhelgaas@google.com, linux-arm-kernel@lists.infradead.org,
Thomas Petazzoni, Michal Simek, linux-kernel@vger.kernel.org,
suren.reddy, linuxppc-dev@lists.ozlabs.org list
In-Reply-To: <1366107508-12672-4-git-send-email-Andrew.Murray@arm.com>
On Tue, Apr 16, 2013 at 12:18 PM, Andrew Murray <Andrew.Murray@arm.com> wrote:
> This patch converts the pci_load_of_ranges function to use the new common
> of_pci_range_parser.
>
> Signed-off-by: Andrew Murray <Andrew.Murray@arm.com>
> Signed-off-by: Liviu Dudau <Liviu.Dudau@arm.com>
> Reviewed-by: Rob Herring <rob.herring@calxeda.com>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply
* Re: [PATCH v7 1/3] of/pci: Unify pci_process_bridge_OF_ranges from Microblaze and PowerPC
From: Grant Likely @ 2013-04-17 16:00 UTC (permalink / raw)
To: Andrew Murray, linux-mips@linux-mips.org,
linuxppc-dev@lists.ozlabs.org
Cc: siva.kallam@samsung.com, linux-pci@vger.kernel.org,
linus.walleij@linaro.org, thierry.reding@avionic-design.de,
Liviu Dudau, paulus@samba.org, linux-samsung-soc@vger.kernel.org,
linux@arm.linux.org.uk, jg1.han@samsung.com,
jgunthorpe@obsidianresearch.com, thomas.abraham@linaro.org,
arnd@arndb.de, devicetree-discuss@lists.ozlabs.org,
rob.herring@calxeda.com, kgene.kim@samsung.com,
bhelgaas@google.com, linux-arm-kernel@lists.infradead.org,
thomas.petazzoni@free-electrons.com, monstr@monstr.eu,
linux-kernel@vger.kernel.org, suren.reddy@samsung.com
In-Reply-To: <20130416103005.GB12726@arm.com>
On Tue, 16 Apr 2013 11:30:06 +0100, Andrew Murray <andrew.murray@arm.com> wrote:
> On Tue, Apr 16, 2013 at 11:18:26AM +0100, Andrew Murray wrote:
> > The pci_process_bridge_OF_ranges function, used to parse the "ranges"
> > property of a PCI host device, is found in both Microblaze and PowerPC
> > architectures. These implementations are nearly identical. This patch
> > moves this common code to a common place.
> >
> > Signed-off-by: Andrew Murray <Andrew.Murray@arm.com>
> > Signed-off-by: Liviu Dudau <Liviu.Dudau@arm.com>
> > Reviewed-by: Rob Herring <rob.herring@calxeda.com>
> > Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> > Tested-by: Linus Walleij <linus.walleij@linaro.org>
> > Acked-by: Michal Simek <monstr@monstr.eu>
> > ---
> > arch/microblaze/include/asm/pci-bridge.h | 5 +-
> > arch/microblaze/pci/pci-common.c | 192 ----------------------------
> > arch/powerpc/include/asm/pci-bridge.h | 5 +-
> > arch/powerpc/kernel/pci-common.c | 192 ----------------------------
>
> Is there anyone on linuxppc-dev/linux-mips that can help test this patchset?
>
> I've tested that it builds on powerpc with a variety of configs (some which
> include fsl_pci.c implementation). Though I don't have hardware to verify that
> it works.
>
> I haven't tested this builds or runs on MIPS.
>
> You shouldn't see any difference in behaviour or new warnings and PCI devices
> should continue to operate as before.
I've got through a line-by-line comparison between powerpc, microblaze,
and then new code. The differences are purely cosmetic, so I have
absolutely no concerns about this patch. I've applied it to my tree.
g.
^ permalink raw reply
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