Message ID | 1396641450-12854-3-git-send-email-sboyd@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Apr 04, 2014 at 12:57:27PM -0700, Stephen Boyd wrote: > Krait CPUs have a handful of L2 cache controller registers that > live behind a cp15 based indirection register. First you program > the indirection register (l2cpselr) to point the L2 'window' > register (l2cpdr) at what you want to read/write. Then you > read/write the 'window' register to do what you want. The > l2cpselr register is not banked per-cpu so we must lock around > accesses to it to prevent other CPUs from re-pointing l2cpdr > underneath us. > > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Russell King <linux@arm.linux.org.uk> > Cc: Courtney Cavin <courtney.cavin@sonymobile.com> > Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> > --- > arch/arm/common/Kconfig | 3 ++ > arch/arm/common/Makefile | 1 + > arch/arm/common/krait-l2-accessors.c | 58 +++++++++++++++++++++++++++++++ > arch/arm/include/asm/krait-l2-accessors.h | 20 +++++++++++ > 4 files changed, 82 insertions(+) > create mode 100644 arch/arm/common/krait-l2-accessors.c > create mode 100644 arch/arm/include/asm/krait-l2-accessors.h > > diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig > index c3a4e9ceba34..9da52dc6260b 100644 > --- a/arch/arm/common/Kconfig > +++ b/arch/arm/common/Kconfig > @@ -9,6 +9,9 @@ config DMABOUNCE > bool > select ZONE_DMA > > +config KRAIT_L2_ACCESSORS > + bool > + > config SHARP_LOCOMO > bool > > diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile > index 70b1eff477b3..6b2cddf6e8d0 100644 > --- a/arch/arm/common/Makefile > +++ b/arch/arm/common/Makefile > @@ -7,6 +7,7 @@ obj-y += firmware.o > obj-$(CONFIG_ICST) += icst.o > obj-$(CONFIG_SA1111) += sa1111.o > obj-$(CONFIG_DMABOUNCE) += dmabounce.o > +obj-$(CONFIG_KRAIT_L2_ACCESSORS) += krait-l2-accessors.o > obj-$(CONFIG_SHARP_LOCOMO) += locomo.o > obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o > obj-$(CONFIG_SHARP_SCOOP) += scoop.o > diff --git a/arch/arm/common/krait-l2-accessors.c b/arch/arm/common/krait-l2-accessors.c > new file mode 100644 > index 000000000000..5d514bbc88a6 > --- /dev/null > +++ b/arch/arm/common/krait-l2-accessors.c > @@ -0,0 +1,58 @@ > +/* > + * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 and > + * only version 2 as published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. Can we refer to COPYING here instead of adding that boilerplate to every file? > + */ > + > +#include <linux/spinlock.h> > +#include <linux/export.h> > + > +#include <asm/barrier.h> > +#include <asm/krait-l2-accessors.h> > + > +static DEFINE_RAW_SPINLOCK(krait_l2_lock); > + > +void krait_set_l2_indirect_reg(u32 addr, u32 val) > +{ > + unsigned long flags; > + > + raw_spin_lock_irqsave(&krait_l2_lock, flags); > + /* > + * Select the L2 window by poking l2cpselr, then write to the window > + * via l2cpdr. > + */ > + asm volatile ("mcr p15, 3, %0, c15, c0, 6 @ l2cpselr" : : "r" (addr)); > + isb(); > + asm volatile ("mcr p15, 3, %0, c15, c0, 7 @ l2cpdr" : : "r" (val)); > + isb(); > + > + raw_spin_unlock_irqrestore(&krait_l2_lock, flags); > +} > +EXPORT_SYMBOL(krait_set_l2_indirect_reg); > + > +u32 krait_get_l2_indirect_reg(u32 addr) > +{ > + u32 val; > + unsigned long flags; > + > + raw_spin_lock_irqsave(&krait_l2_lock, flags); > + /* > + * Select the L2 window by poking l2cpselr, then read from the window > + * via l2cpdr. > + */ > + asm volatile ("mcr p15, 3, %0, c15, c0, 6 @ l2cpselr" : : "r" (addr)); > + isb(); > + asm volatile ("mrc p15, 3, %0, c15, c0, 7 @ l2cpdr" : "=r" (val)); > + > + raw_spin_unlock_irqrestore(&krait_l2_lock, flags); > + > + return val; > +} > +EXPORT_SYMBOL(krait_get_l2_indirect_reg); > diff --git a/arch/arm/include/asm/krait-l2-accessors.h b/arch/arm/include/asm/krait-l2-accessors.h > new file mode 100644 > index 000000000000..48fe5527bc01 > --- /dev/null > +++ b/arch/arm/include/asm/krait-l2-accessors.h > @@ -0,0 +1,20 @@ > +/* > + * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 and > + * only version 2 as published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. Ditto. Thanks.
On 04/07, Borislav Petkov wrote: > On Fri, Apr 04, 2014 at 12:57:27PM -0700, Stephen Boyd wrote: > > diff --git a/arch/arm/common/krait-l2-accessors.c b/arch/arm/common/krait-l2-accessors.c > > new file mode 100644 > > index 000000000000..5d514bbc88a6 > > --- /dev/null > > +++ b/arch/arm/common/krait-l2-accessors.c > > @@ -0,0 +1,58 @@ > > +/* > > + * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. > > + * > > + * This program is free software; you can redistribute it and/or modify > > + * it under the terms of the GNU General Public License version 2 and > > + * only version 2 as published by the Free Software Foundation. > > + * > > + * This program is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + * GNU General Public License for more details. > > Can we refer to COPYING here instead of adding that boilerplate to every > file? No. This is the template I'm told to use.
On Mon, Apr 07, 2014 at 02:56:49PM -0700, Stephen Boyd wrote:
> No. This is the template I'm told to use.
By whom? And why?
Hi Borislav, On 04/08/2014 02:43 AM, Borislav Petkov wrote: > On Mon, Apr 07, 2014 at 02:56:49PM -0700, Stephen Boyd wrote: >> No. This is the template I'm told to use. > > By whom? And why? As I understand it, the license authors. They find it important to maintain clarity even when files get copied into other projects. http://www.gnu.org/licenses/gpl-howto.html http://www.gnu.org/licenses/gpl-faq.html#NoticeInSourceFile Regards, Christopher
On Tue, Apr 08, 2014 at 10:25:01AM -0400, Christopher Covington wrote: > As I understand it, the license authors. They find it important to maintain > clarity even when files get copied into other projects. > > http://www.gnu.org/licenses/gpl-howto.html > > http://www.gnu.org/licenses/gpl-faq.html#NoticeInSourceFile Right, so what is wrong with stating the same thing in two lines: "Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. This file is licensed under GNU GPLv2. See COPYING for full license text."
On Tue, 8 Apr 2014 17:10:56 +0200 Borislav Petkov <bp@alien8.de> wrote: > On Tue, Apr 08, 2014 at 10:25:01AM -0400, Christopher Covington wrote: > > As I understand it, the license authors. They find it important to maintain > > clarity even when files get copied into other projects. > > > > http://www.gnu.org/licenses/gpl-howto.html > > > > http://www.gnu.org/licenses/gpl-faq.html#NoticeInSourceFile > > Right, so what is wrong with stating the same thing in two lines: > > "Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. > > This file is licensed under GNU GPLv2. See COPYING for full license text. The COPYING file may not be present. There may be cases where the absence of the warranty statement in the header is problematic etc etc. Corporate legals have their own policies on this and there is no point fighting them because - they are the ones qualified to make the decision - the corporate legal angle is often "do this or don't release it" - we have huge numbers of files using that same no warranty in every file, and major companies who specify it must be present in their code releases Including the without warranty is standard practice at a lot of companies. It's not even wasting space - it'll compress beautifully as there are already lots of similar headers all over the tree. Alan -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Apr 08, 2014 at 05:19:29PM +0100, One Thousand Gnomes wrote: > Including the without warranty is standard practice at a lot of > companies. It's not even wasting space - it'll compress beautifully as > there are already lots of similar headers all over the tree. Right, I was just trying to find out from Stephen/Christopher whether they're actually really required by legal to slap the boilerplate or they can get by with a smaller chunk. That's all. But thanks for this Alan, I was hoping someone would school me on the legal practice wrt license boilerplates in the kernel, and there you are. :-) Thanks.
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig index c3a4e9ceba34..9da52dc6260b 100644 --- a/arch/arm/common/Kconfig +++ b/arch/arm/common/Kconfig @@ -9,6 +9,9 @@ config DMABOUNCE bool select ZONE_DMA +config KRAIT_L2_ACCESSORS + bool + config SHARP_LOCOMO bool diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile index 70b1eff477b3..6b2cddf6e8d0 100644 --- a/arch/arm/common/Makefile +++ b/arch/arm/common/Makefile @@ -7,6 +7,7 @@ obj-y += firmware.o obj-$(CONFIG_ICST) += icst.o obj-$(CONFIG_SA1111) += sa1111.o obj-$(CONFIG_DMABOUNCE) += dmabounce.o +obj-$(CONFIG_KRAIT_L2_ACCESSORS) += krait-l2-accessors.o obj-$(CONFIG_SHARP_LOCOMO) += locomo.o obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o obj-$(CONFIG_SHARP_SCOOP) += scoop.o diff --git a/arch/arm/common/krait-l2-accessors.c b/arch/arm/common/krait-l2-accessors.c new file mode 100644 index 000000000000..5d514bbc88a6 --- /dev/null +++ b/arch/arm/common/krait-l2-accessors.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <linux/spinlock.h> +#include <linux/export.h> + +#include <asm/barrier.h> +#include <asm/krait-l2-accessors.h> + +static DEFINE_RAW_SPINLOCK(krait_l2_lock); + +void krait_set_l2_indirect_reg(u32 addr, u32 val) +{ + unsigned long flags; + + raw_spin_lock_irqsave(&krait_l2_lock, flags); + /* + * Select the L2 window by poking l2cpselr, then write to the window + * via l2cpdr. + */ + asm volatile ("mcr p15, 3, %0, c15, c0, 6 @ l2cpselr" : : "r" (addr)); + isb(); + asm volatile ("mcr p15, 3, %0, c15, c0, 7 @ l2cpdr" : : "r" (val)); + isb(); + + raw_spin_unlock_irqrestore(&krait_l2_lock, flags); +} +EXPORT_SYMBOL(krait_set_l2_indirect_reg); + +u32 krait_get_l2_indirect_reg(u32 addr) +{ + u32 val; + unsigned long flags; + + raw_spin_lock_irqsave(&krait_l2_lock, flags); + /* + * Select the L2 window by poking l2cpselr, then read from the window + * via l2cpdr. + */ + asm volatile ("mcr p15, 3, %0, c15, c0, 6 @ l2cpselr" : : "r" (addr)); + isb(); + asm volatile ("mrc p15, 3, %0, c15, c0, 7 @ l2cpdr" : "=r" (val)); + + raw_spin_unlock_irqrestore(&krait_l2_lock, flags); + + return val; +} +EXPORT_SYMBOL(krait_get_l2_indirect_reg); diff --git a/arch/arm/include/asm/krait-l2-accessors.h b/arch/arm/include/asm/krait-l2-accessors.h new file mode 100644 index 000000000000..48fe5527bc01 --- /dev/null +++ b/arch/arm/include/asm/krait-l2-accessors.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __ASMARM_KRAIT_L2_ACCESSORS_H +#define __ASMARM_KRAIT_L2_ACCESSORS_H + +extern void krait_set_l2_indirect_reg(u32 addr, u32 val); +extern u32 krait_get_l2_indirect_reg(u32 addr); + +#endif
Krait CPUs have a handful of L2 cache controller registers that live behind a cp15 based indirection register. First you program the indirection register (l2cpselr) to point the L2 'window' register (l2cpdr) at what you want to read/write. Then you read/write the 'window' register to do what you want. The l2cpselr register is not banked per-cpu so we must lock around accesses to it to prevent other CPUs from re-pointing l2cpdr underneath us. Cc: Mark Rutland <mark.rutland@arm.com> Cc: Russell King <linux@arm.linux.org.uk> Cc: Courtney Cavin <courtney.cavin@sonymobile.com> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> --- arch/arm/common/Kconfig | 3 ++ arch/arm/common/Makefile | 1 + arch/arm/common/krait-l2-accessors.c | 58 +++++++++++++++++++++++++++++++ arch/arm/include/asm/krait-l2-accessors.h | 20 +++++++++++ 4 files changed, 82 insertions(+) create mode 100644 arch/arm/common/krait-l2-accessors.c create mode 100644 arch/arm/include/asm/krait-l2-accessors.h