Re: [PATCH] arc: enable unaligned access in kernel mode

2016-12-22 Thread Vineet Gupta
On 12/21/2016 03:40 AM, Alexey Brodkin wrote:
> This enables misaligned access handling even in kernel mode.
> Some wireless drivers (ath9k-htc and mt7601u) use misaligned accesses
> here and there and to cope with that without fixing stuff in the drivers
> we're just gracefully handling it on ARC.
> 
> Signed-off-by: Alexey Brodkin 
> Cc: John Crispin 
> ---
>  arch/arc/kernel/unaligned.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arc/kernel/unaligned.c b/arch/arc/kernel/unaligned.c
> index abd961f3e763..58b7415e47ca 100644
> --- a/arch/arc/kernel/unaligned.c
> +++ b/arch/arc/kernel/unaligned.c
> @@ -205,8 +205,8 @@ int misaligned_fixup(unsigned long address, struct 
> pt_regs *regs,
>   struct disasm_state state;
>   char buf[TASK_COMM_LEN];
>  
> - /* handle user mode only and only if enabled by sysadmin */
> - if (!user_mode(regs) || !unaligned_enabled)
> + /* handle only if enabled by sysadmin */
> + if (!unaligned_enabled)

This in theory seems OK but AFAIKR we discussed this internally for STAR
9000974739- [openwrt/AXS101] unaligned access on connection of the first 
wireless
client

One of the crash logs had Interrupt Active while failing to emulate unaligned
access - despite this patch.

> [ECR   ]: 0x00230400 => Misaligned r/w from 0x9e67a22b
> [   51.63] [EFA   ]: 0x9e67a22b
> [   51.63] [BLINK ]: br_multicast_add_group+0x246/0x284
> [   51.63] [ERET  ]: br_multicast_add_group+0xae/0x284
> [   51.65] [STAT32]: 0x020e : K   A1 E2 E1
   

It seemed to me at the time that allowing this from kernel mode might require 
more
things - like not allowing preemption or disabling further interrupts ? I looked
in CRM but can't find more details - do u remember !

Can we try and reproduce that new-issue-after-patch or perhaps just add this 
patch
as it is and deal with any fallouts later ?

-Vineet

>   return 1;
>  
>   if (no_unaligned_warning) {
> 


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[GIT PULL] ARC updates for 4.10-rc1 part 2

2016-12-22 Thread Vineet Gupta
Hi Linus,

Please pull.

Thx and Happy holidays !
-Vineet

->
The following changes since commit 7badf6fefca8278e749e82411fdb98b123cca50e:

  ARC: axs10x: really enable ARC PGU (2016-11-30 11:54:25 -0800)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc.git/
tags/arc-4.10-rc1-part2

for you to fetch changes up to 08fe007968b2b45e831daf74899f79a54d73f773:

  ARC: mm: arc700: Don't assume 2 colours for aliasing VIPT dcache (2016-12-19
11:55:17 -0800)


2nd round of ARC udpates for 4.10rc1

 - Fix for aliasing VIPT dcache in old ARC700 cores

 - micro-optimization in ARC700 ProtV handler

 - Enable SG_CHAIN  [Vladimir]

 - ARC HS38 core intc default to prio 1


Vineet Gupta (5):
  ARC: ARCompact entry: elide re-reading ECR in ProtV handler
  ARCv2: entry: document intr disable in hard isr
  ARCv2: intc: default all interrupts to priority 1
  ARC: mm: No need to save cache version in @cpuinfo
  ARC: mm: arc700: Don't assume 2 colours for aliasing VIPT dcache

Vladimir Kondratiev (1):
  ARC: enable SG chaining

 .../features/io/sg-chain/arch-support.txt  |  2 +-
 arch/arc/Kconfig   |  1 +
 arch/arc/include/asm/arcregs.h |  2 +-
 arch/arc/include/asm/cacheflush.h  |  6 +++--
 arch/arc/include/asm/irqflags-arcv2.h  |  6 ++---
 arch/arc/kernel/entry-arcv2.S  | 24 ++-
 arch/arc/kernel/entry-compact.S|  2 +-
 arch/arc/kernel/intc-arcv2.c   | 10 
 arch/arc/mm/cache.c| 28 ++
 9 files changed, 46 insertions(+), 35 deletions(-)

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH 2/2] arc: Fix xCCM size check

2016-12-22 Thread Vineet Gupta
On 12/22/2016 06:09 AM, Alexey Brodkin wrote:
> CONFIG_ARC_ICCM_SZ in menuconfig is specified in kB while
> "cpu->Xccm.sz" contains value in bytes thus direct comparison fails
> leading to boot-time panic like that:
> --->8-
> IDENTITY: ARCVER [0x52] ARCNUM [0x1] CHIPID [ 0x0]
> processor [1]   : ARC HS38 R2.1 (ARCv2 ISA)
> Timers  : Timer0 Timer1 Local-64-bit-Ctr (not used)
> ISA Extn: atomic ll64 unalign (not used)
> : mpy[opt 9] div_rem norm barrel-shift swap minmax swape
> BPU : full match, cache:2048, Predict Table:16384
> MMU [v0]: 0k PAGE, JTLB 0 (0x0), uDTLB 0, uITLB 0
> I-Cache : N/A
> D-Cache : N/A
> Peripherals : 0xf000, IO-Coherency (disabled)
> Vector Table: 0x8000
> FPU : SP DP
> DEBUG   : ActionPoint smaRT RTT
> Extn [CCM]  : DCCM @ e000, 256 KB / ICCM: @ 6000, 256 KB
> OS ABI [v4] : 64-bit data any register aligned
> Extn [SMP]  : ARConnect (v2): 2 cores with IPI IDU DEBUG GFRC
> Kernel panic - not syncing: Linux built with incorrect DCCM Size
>
> ---[ end Kernel panic - not syncing: Linux built with incorrect DCCM Size
> --->8-
>
> Signed-off-by: Alexey Brodkin 
> Cc: Igor Guryanov 
> Cc: sta...@vger.kernel.org
> ---
>  arch/arc/kernel/setup.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
> index ee574f37f365..601dab6fe5e0 100644
> --- a/arch/arc/kernel/setup.c
> +++ b/arch/arc/kernel/setup.c
> @@ -333,12 +333,12 @@ static void arc_chk_core_config(void)
>   if ((unsigned int)__arc_dccm_base != cpu->dccm.base_addr)
>   panic("Linux built with incorrect DCCM Base address\n");
>  
> - if (CONFIG_ARC_DCCM_SZ != cpu->dccm.sz)
> + if (CONFIG_ARC_DCCM_SZ != TO_KB(cpu->dccm.sz))

Could we just avoid this existing TO_KB non sense in multiple places by keeping
the *ccm.sz unit consistent with CONFIG_ARC_*CCM_SZ ?
so
-cpu->iccm.sz = 4096 << iccm.sz;/* 8K to 512K */
+cpu->iccm.sz = 4 << iccm.sz;/* 8K to 512K */

Since we only want to keep ccm size to kb granularity

And while at it, rename @sz placeholder in bcr_(i|d)ccm_arc(v2,compact) to sz_k

-Vineet

>   panic("Linux built with incorrect DCCM Size\n");
>  #endif
>  
>  #ifdef CONFIG_ARC_HAS_ICCM
> - if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz)
> + if (CONFIG_ARC_ICCM_SZ != TO_KB(cpu->iccm.sz))
>   panic("Linux built with incorrect ICCM Size\n");
>  #endif
>  


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH 0/2] Minor fixes for CCMs

2016-12-22 Thread Vineet Gupta
On 12/22/2016 06:09 AM, Alexey Brodkin wrote:
> It turned out current implementation of CCM support doesn't work at all.
> There're 2 isseus:
>  * Data/code which is supposed to be in DCCM or ICCM accordingly gets
>merged in common .data and .text sections so CCMs won't be used
>  * Kerenl will panic on early boot because comparison of CCM sizes
>is implemented incorrectly

FWIW, for current hsdk bringup I won't recommend to switch them on just yet !

>
> This short series fixes both issues above so CCMs are usable again.
> And both patches indeed should be back-ported to stable kernels.
>
> Alexey Brodkin (2):
>   arc: rename xCCM sections so they are not merged in global .data/.text
>   arc: Fix xCCM size check
>
>  arch/arc/include/asm/linkage.h | 6 +++---
>  arch/arc/kernel/setup.c| 4 ++--
>  arch/arc/kernel/vmlinux.lds.S  | 8 
>  3 files changed, 9 insertions(+), 9 deletions(-)
>


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH 1/2] arc: rename xCCM sections so they are not merged in global .data/.text

2016-12-22 Thread Vineet Gupta
On 12/22/2016 06:09 AM, Alexey Brodkin wrote:
> If Linux kernel is compiled with "-ffunction-sections" each function is 
> placed in
> its own section named ".text.function_name". This is required for
> discarding of not-used functions during final linkage. But in the end
> all ".text.XXX" sections are merged in the global ".text" section of
> vmlinux Elf.
>
> The same happens with data sections when "-fdata-sections" are used.
>
> That means our ".data.arcfp" and ".text.arcfp" sections get silently
> merged in global ".data" and ".text" sections even though we want to
> put them in separate memory regions in case ICCM and/or DCCM exist in
> the ARC core.
>
> Solution is as simple as addition of one extra period in section name.
>
> Signed-off-by: Alexey Brodkin 
> Cc: Igor Guryanov 
> Cc: sta...@vger.kernel.org

For stable backport -I think there is no point in CC'ing them initially.
Better to make a note in the patch and conclude at the time of patch review and 
I
can in the end add the CC tag so this gets pulled automatically w/o CC'ing the
stable mailing list at all !

> ---
>  arch/arc/include/asm/linkage.h | 6 +++---
>  arch/arc/kernel/vmlinux.lds.S  | 8 
>  2 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
> index b29f1a9fd6f7..3a5f13d65ee1 100644
> --- a/arch/arc/include/asm/linkage.h
> +++ b/arch/arc/include/asm/linkage.h
> @@ -28,7 +28,7 @@
>  /* annotation for data we want in DCCM - if enabled in .config */
>  .macro ARCFP_CODE
>  #ifdef CONFIG_ARC_HAS_ICCM
> - .section .text.arcfp, "ax",@progbits
> + .section .text..arcfp, "ax",@progbits

Why not turn this around and call it arcfp.text and arcfp.data etc - just like
done for other special sections such as sched, cpuidle, lock... Just so we are
consistent with normal kernel convention !

>  #else
>   .section .text, "ax",@progbits
>  #endif
> @@ -47,13 +47,13 @@
>  #else/* !__ASSEMBLY__ */
>  
>  #ifdef CONFIG_ARC_HAS_ICCM
> -#define __arcfp_code __attribute__((__section__(".text.arcfp")))
> +#define __arcfp_code __attribute__((__section__(".text..arcfp")))
>  #else
>  #define __arcfp_code __attribute__((__section__(".text")))
>  #endif
>  
>  #ifdef CONFIG_ARC_HAS_DCCM
> -#define __arcfp_data __attribute__((__section__(".data.arcfp")))
> +#define __arcfp_data __attribute__((__section__(".data..arcfp")))
>  #else
>  #define __arcfp_data __attribute__((__section__(".data")))
>  #endif
> diff --git a/arch/arc/kernel/vmlinux.lds.S b/arch/arc/kernel/vmlinux.lds.S
> index f35ed578e007..f69ae479ee73 100644
> --- a/arch/arc/kernel/vmlinux.lds.S
> +++ b/arch/arc/kernel/vmlinux.lds.S
> @@ -37,8 +37,8 @@ SECTIONS
>   }
>  
>  #ifdef CONFIG_ARC_HAS_ICCM
> - .text.arcfp : {
> - *(.text.arcfp)
> + .text..arcfp : {
> + *(.text..arcfp)
>   . = ALIGN(CONFIG_ARC_ICCM_SZ * 1024);
>   }
>  #endif
> @@ -151,8 +151,8 @@ SECTIONS
>  #ifdef CONFIG_ARC_HAS_DCCM
>   . = CONFIG_ARC_DCCM_BASE;
>   __arc_dccm_base = .;
> - .data.arcfp : {
> - *(.data.arcfp)
> + .data..arcfp : {
> + *(.data..arcfp)
>   }
>   . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
>  #endif


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH 1/2] arc: rename xCCM sections so they are not merged in global .data/.text

2016-12-22 Thread Alexey Brodkin
If Linux kernel is compiled with "-ffunction-sections" each function is placed 
in
its own section named ".text.function_name". This is required for
discarding of not-used functions during final linkage. But in the end
all ".text.XXX" sections are merged in the global ".text" section of
vmlinux Elf.

The same happens with data sections when "-fdata-sections" are used.

That means our ".data.arcfp" and ".text.arcfp" sections get silently
merged in global ".data" and ".text" sections even though we want to
put them in separate memory regions in case ICCM and/or DCCM exist in
the ARC core.

Solution is as simple as addition of one extra period in section name.

Signed-off-by: Alexey Brodkin 
Cc: Igor Guryanov 
Cc: sta...@vger.kernel.org
---
 arch/arc/include/asm/linkage.h | 6 +++---
 arch/arc/kernel/vmlinux.lds.S  | 8 
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
index b29f1a9fd6f7..3a5f13d65ee1 100644
--- a/arch/arc/include/asm/linkage.h
+++ b/arch/arc/include/asm/linkage.h
@@ -28,7 +28,7 @@
 /* annotation for data we want in DCCM - if enabled in .config */
 .macro ARCFP_CODE
 #ifdef CONFIG_ARC_HAS_ICCM
-   .section .text.arcfp, "ax",@progbits
+   .section .text..arcfp, "ax",@progbits
 #else
.section .text, "ax",@progbits
 #endif
@@ -47,13 +47,13 @@
 #else  /* !__ASSEMBLY__ */
 
 #ifdef CONFIG_ARC_HAS_ICCM
-#define __arcfp_code __attribute__((__section__(".text.arcfp")))
+#define __arcfp_code __attribute__((__section__(".text..arcfp")))
 #else
 #define __arcfp_code __attribute__((__section__(".text")))
 #endif
 
 #ifdef CONFIG_ARC_HAS_DCCM
-#define __arcfp_data __attribute__((__section__(".data.arcfp")))
+#define __arcfp_data __attribute__((__section__(".data..arcfp")))
 #else
 #define __arcfp_data __attribute__((__section__(".data")))
 #endif
diff --git a/arch/arc/kernel/vmlinux.lds.S b/arch/arc/kernel/vmlinux.lds.S
index f35ed578e007..f69ae479ee73 100644
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -37,8 +37,8 @@ SECTIONS
}
 
 #ifdef CONFIG_ARC_HAS_ICCM
-   .text.arcfp : {
-   *(.text.arcfp)
+   .text..arcfp : {
+   *(.text..arcfp)
. = ALIGN(CONFIG_ARC_ICCM_SZ * 1024);
}
 #endif
@@ -151,8 +151,8 @@ SECTIONS
 #ifdef CONFIG_ARC_HAS_DCCM
. = CONFIG_ARC_DCCM_BASE;
__arc_dccm_base = .;
-   .data.arcfp : {
-   *(.data.arcfp)
+   .data..arcfp : {
+   *(.data..arcfp)
}
. = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
 #endif
-- 
2.7.4


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH 2/2] arc: Fix xCCM size check

2016-12-22 Thread Alexey Brodkin
CONFIG_ARC_ICCM_SZ in menuconfig is specified in kB while
"cpu->Xccm.sz" contains value in bytes thus direct comparison fails
leading to boot-time panic like that:
--->8-
IDENTITY: ARCVER [0x52] ARCNUM [0x1] CHIPID [ 0x0]
processor [1]   : ARC HS38 R2.1 (ARCv2 ISA)
Timers  : Timer0 Timer1 Local-64-bit-Ctr (not used)
ISA Extn: atomic ll64 unalign (not used)
: mpy[opt 9] div_rem norm barrel-shift swap minmax swape
BPU : full match, cache:2048, Predict Table:16384
MMU [v0]: 0k PAGE, JTLB 0 (0x0), uDTLB 0, uITLB 0
I-Cache : N/A
D-Cache : N/A
Peripherals : 0xf000, IO-Coherency (disabled)
Vector Table: 0x8000
FPU : SP DP
DEBUG   : ActionPoint smaRT RTT
Extn [CCM]  : DCCM @ e000, 256 KB / ICCM: @ 6000, 256 KB
OS ABI [v4] : 64-bit data any register aligned
Extn [SMP]  : ARConnect (v2): 2 cores with IPI IDU DEBUG GFRC
Kernel panic - not syncing: Linux built with incorrect DCCM Size

---[ end Kernel panic - not syncing: Linux built with incorrect DCCM Size
--->8-

Signed-off-by: Alexey Brodkin 
Cc: Igor Guryanov 
Cc: sta...@vger.kernel.org
---
 arch/arc/kernel/setup.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
index ee574f37f365..601dab6fe5e0 100644
--- a/arch/arc/kernel/setup.c
+++ b/arch/arc/kernel/setup.c
@@ -333,12 +333,12 @@ static void arc_chk_core_config(void)
if ((unsigned int)__arc_dccm_base != cpu->dccm.base_addr)
panic("Linux built with incorrect DCCM Base address\n");
 
-   if (CONFIG_ARC_DCCM_SZ != cpu->dccm.sz)
+   if (CONFIG_ARC_DCCM_SZ != TO_KB(cpu->dccm.sz))
panic("Linux built with incorrect DCCM Size\n");
 #endif
 
 #ifdef CONFIG_ARC_HAS_ICCM
-   if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz)
+   if (CONFIG_ARC_ICCM_SZ != TO_KB(cpu->iccm.sz))
panic("Linux built with incorrect ICCM Size\n");
 #endif
 
-- 
2.7.4


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc