Commit 513f17f8 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sh-for-v6.4-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/glaubitz/sh-linux

Pull sh updates from John Paul Adrian Glaubitz:
 "This is a bit larger than my previous one and mainly consists of
  clean-up work in the arch/sh directory by Geert Uytterhoeven and Randy
  Dunlap.

  Additionally, this fixes a bug in the Storage Queue code that was
  discovered while I was reviewing a patch to switch the code to the
  bitmap API by Christophe Jaillet.

  So this contains both a fix for the original bug in the Storage Queue
  code that can be backported later as well as the Christophe's patch to
  swich the code to the bitmap API.

  Summary:

   - Use generic GCC library routines

   - sq: Use the bitmap API when applicable

   - sq: Fix incorrect element size for allocating bitmap buffer

   - pci: Remove unused variable in SH-7786 PCI Express code

   - mcount.S: fix build error when PRINTK is not enabled

   - remove sh5/sh64 last fragments

   - math-emu: fix macro redefined warning

   - init: use OF_EARLY_FLATTREE for early init

   - nmi_debug: fix return value of __setup handler

   - SH2007: drop the bad URL info"

* tag 'sh-for-v6.4-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/glaubitz/sh-linux:
  sh: Replace <uapi/asm/types.h> by <asm-generic/int-ll64.h>
  sh: Use generic GCC library routines
  sh: sq: Use the bitmap API when applicable
  sh: sq: Fix incorrect element size for allocating bitmap buffer
  sh: pci: Remove unused variable in SH-7786 PCI Express code
  sh: mcount.S: fix build error when PRINTK is not enabled
  sh: remove sh5/sh64 last fragments
  sh: math-emu: fix macro redefined warning
  sh: init: use OF_EARLY_FLATTREE for early init
  sh: nmi_debug: fix return value of __setup handler
  sh: SH2007: drop the bad URL info
parents 35fab927 e5c23bec
...@@ -160,7 +160,6 @@ directory name found in the arch/ directory. ...@@ -160,7 +160,6 @@ directory name found in the arch/ directory.
But some architectures such as x86 and sparc have aliases. But some architectures such as x86 and sparc have aliases.
- x86: i386 for 32 bit, x86_64 for 64 bit - x86: i386 for 32 bit, x86_64 for 64 bit
- sh: sh for 32 bit, sh64 for 64 bit
- sparc: sparc32 for 32 bit, sparc64 for 64 bit - sparc: sparc32 for 32 bit, sparc64 for 64 bit
CROSS_COMPILE CROSS_COMPILE
......
...@@ -70,7 +70,5 @@ Possible arch problems I found (and either tried to fix or didn't): ...@@ -70,7 +70,5 @@ Possible arch problems I found (and either tried to fix or didn't):
ia64 - is safe_halt call racy vs interrupts? (does it sleep?) (See #4a) ia64 - is safe_halt call racy vs interrupts? (does it sleep?) (See #4a)
sh64 - Is sleeping racy vs interrupts? (See #4a)
sparc - IRQs on at this point(?), change local_irq_save to _disable. sparc - IRQs on at this point(?), change local_irq_save to _disable.
- TODO: needs secondary CPUs to disable preempt (See #1) - TODO: needs secondary CPUs to disable preempt (See #1)
...@@ -70,7 +70,5 @@ arch/x86/kernel/process.c有轮询和睡眠空闲函数的例子。 ...@@ -70,7 +70,5 @@ arch/x86/kernel/process.c有轮询和睡眠空闲函数的例子。
ia64 - safe_halt的调用与中断相比,是否很荒谬? (它睡眠了吗) (参考 #4a) ia64 - safe_halt的调用与中断相比,是否很荒谬? (它睡眠了吗) (参考 #4a)
sh64 - 睡眠与中断相比,是否很荒谬? (参考 #4a)
sparc - 在这一点上,IRQ是开着的(?),把local_irq_save改为_disable。 sparc - 在这一点上,IRQ是开着的(?),把local_irq_save改为_disable。
- 待办事项: 需要第二个CPU来禁用抢占 (参考 #1) - 待办事项: 需要第二个CPU来禁用抢占 (参考 #1)
...@@ -20,6 +20,9 @@ config SUPERH ...@@ -20,6 +20,9 @@ config SUPERH
select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST
select GENERIC_IDLE_POLL_SETUP select GENERIC_IDLE_POLL_SETUP
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select GENERIC_LIB_ASHLDI3
select GENERIC_LIB_ASHRDI3
select GENERIC_LIB_LSHRDI3
select GENERIC_PCI_IOMAP if PCI select GENERIC_PCI_IOMAP if PCI
select GENERIC_SCHED_CLOCK select GENERIC_SCHED_CLOCK
select GENERIC_SMP_IDLE_THREAD select GENERIC_SMP_IDLE_THREAD
......
...@@ -15,7 +15,7 @@ config SH_STANDARD_BIOS ...@@ -15,7 +15,7 @@ config SH_STANDARD_BIOS
config STACK_DEBUG config STACK_DEBUG
bool "Check for stack overflows" bool "Check for stack overflows"
depends on DEBUG_KERNEL depends on DEBUG_KERNEL && PRINTK
help help
This option will cause messages to be printed if free stack space This option will cause messages to be printed if free stack space
drops below a certain limit. Saying Y here will add overhead to drops below a certain limit. Saying Y here will add overhead to
......
...@@ -358,7 +358,6 @@ config SH_SH2007 ...@@ -358,7 +358,6 @@ config SH_SH2007
intended for embedded applications. intended for embedded applications.
It has an Ethernet interface (SMC9118), direct connected It has an Ethernet interface (SMC9118), direct connected
Compact Flash socket, two serial ports and PC-104 bus. Compact Flash socket, two serial ports and PC-104 bus.
More information at <http://sh2000.sh-linux.org>.
config SH_APSH4A3A config SH_APSH4A3A
bool "AP-SH4A-3A" bool "AP-SH4A-3A"
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-or-later
#include "../../lib/ashldi3.c" #include "../../../../lib/ashldi3.c"
...@@ -31,7 +31,6 @@ struct sh7786_pcie_port { ...@@ -31,7 +31,6 @@ struct sh7786_pcie_port {
static struct sh7786_pcie_port *sh7786_pcie_ports; static struct sh7786_pcie_port *sh7786_pcie_ports;
static unsigned int nr_ports; static unsigned int nr_ports;
static unsigned long dma_pfn_offset;
size_t memsize; size_t memsize;
u64 memstart; u64 memstart;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#ifndef __ASM_SH_TYPES_H #ifndef __ASM_SH_TYPES_H
#define __ASM_SH_TYPES_H #define __ASM_SH_TYPES_H
#include <uapi/asm/types.h> #include <asm-generic/int-ll64.h>
/* /*
* These aren't exported outside the kernel to avoid name space clashes * These aren't exported outside the kernel to avoid name space clashes
......
...@@ -372,7 +372,6 @@ static struct subsys_interface sq_interface = { ...@@ -372,7 +372,6 @@ static struct subsys_interface sq_interface = {
static int __init sq_api_init(void) static int __init sq_api_init(void)
{ {
unsigned int nr_pages = 0x04000000 >> PAGE_SHIFT; unsigned int nr_pages = 0x04000000 >> PAGE_SHIFT;
unsigned int size = (nr_pages + (BITS_PER_LONG - 1)) / BITS_PER_LONG;
int ret = -ENOMEM; int ret = -ENOMEM;
printk(KERN_NOTICE "sq: Registering store queue API.\n"); printk(KERN_NOTICE "sq: Registering store queue API.\n");
...@@ -382,7 +381,7 @@ static int __init sq_api_init(void) ...@@ -382,7 +381,7 @@ static int __init sq_api_init(void)
if (unlikely(!sq_cache)) if (unlikely(!sq_cache))
return ret; return ret;
sq_bitmap = kzalloc(size, GFP_KERNEL); sq_bitmap = bitmap_zalloc(nr_pages, GFP_KERNEL);
if (unlikely(!sq_bitmap)) if (unlikely(!sq_bitmap))
goto out; goto out;
...@@ -393,7 +392,7 @@ static int __init sq_api_init(void) ...@@ -393,7 +392,7 @@ static int __init sq_api_init(void)
return 0; return 0;
out: out:
kfree(sq_bitmap); bitmap_free(sq_bitmap);
kmem_cache_destroy(sq_cache); kmem_cache_destroy(sq_cache);
return ret; return ret;
...@@ -402,7 +401,7 @@ static int __init sq_api_init(void) ...@@ -402,7 +401,7 @@ static int __init sq_api_init(void)
static void __exit sq_api_exit(void) static void __exit sq_api_exit(void)
{ {
subsys_interface_unregister(&sq_interface); subsys_interface_unregister(&sq_interface);
kfree(sq_bitmap); bitmap_free(sq_bitmap);
kmem_cache_destroy(sq_cache); kmem_cache_destroy(sq_cache);
} }
......
...@@ -64,7 +64,7 @@ ENTRY(_stext) ...@@ -64,7 +64,7 @@ ENTRY(_stext)
ldc r0, r6_bank ldc r0, r6_bank
#endif #endif
#ifdef CONFIG_OF_FLATTREE #ifdef CONFIG_OF_EARLY_FLATTREE
mov r4, r12 ! Store device tree blob pointer in r12 mov r4, r12 ! Store device tree blob pointer in r12
#endif #endif
...@@ -315,7 +315,7 @@ ENTRY(_stext) ...@@ -315,7 +315,7 @@ ENTRY(_stext)
10: 10:
#endif #endif
#ifdef CONFIG_OF_FLATTREE #ifdef CONFIG_OF_EARLY_FLATTREE
mov.l 8f, r0 ! Make flat device tree available early. mov.l 8f, r0 ! Make flat device tree available early.
jsr @r0 jsr @r0
mov r12, r4 mov r12, r4
...@@ -346,7 +346,7 @@ ENTRY(stack_start) ...@@ -346,7 +346,7 @@ ENTRY(stack_start)
5: .long start_kernel 5: .long start_kernel
6: .long cpu_init 6: .long cpu_init
7: .long init_thread_union 7: .long init_thread_union
#if defined(CONFIG_OF_FLATTREE) #if defined(CONFIG_OF_EARLY_FLATTREE)
8: .long sh_fdt_init 8: .long sh_fdt_init
#endif #endif
......
...@@ -49,7 +49,7 @@ static int __init nmi_debug_setup(char *str) ...@@ -49,7 +49,7 @@ static int __init nmi_debug_setup(char *str)
register_die_notifier(&nmi_debug_nb); register_die_notifier(&nmi_debug_nb);
if (*str != '=') if (*str != '=')
return 0; return 1;
for (p = str + 1; *p; p = sep + 1) { for (p = str + 1; *p; p = sep + 1) {
sep = strchr(p, ','); sep = strchr(p, ',');
...@@ -70,6 +70,6 @@ static int __init nmi_debug_setup(char *str) ...@@ -70,6 +70,6 @@ static int __init nmi_debug_setup(char *str)
break; break;
} }
return 0; return 1;
} }
__setup("nmi_debug", nmi_debug_setup); __setup("nmi_debug", nmi_debug_setup);
...@@ -244,7 +244,7 @@ void __init __weak plat_early_device_setup(void) ...@@ -244,7 +244,7 @@ void __init __weak plat_early_device_setup(void)
{ {
} }
#ifdef CONFIG_OF_FLATTREE #ifdef CONFIG_OF_EARLY_FLATTREE
void __ref sh_fdt_init(phys_addr_t dt_phys) void __ref sh_fdt_init(phys_addr_t dt_phys)
{ {
static int done = 0; static int done = 0;
...@@ -326,7 +326,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -326,7 +326,7 @@ void __init setup_arch(char **cmdline_p)
/* Let earlyprintk output early console messages */ /* Let earlyprintk output early console messages */
sh_early_platform_driver_probe("earlyprintk", 1, 1); sh_early_platform_driver_probe("earlyprintk", 1, 1);
#ifdef CONFIG_OF_FLATTREE #ifdef CONFIG_OF_EARLY_FLATTREE
#ifdef CONFIG_USE_BUILTIN_DTB #ifdef CONFIG_USE_BUILTIN_DTB
unflatten_and_copy_device_tree(); unflatten_and_copy_device_tree();
#else #else
......
...@@ -7,9 +7,7 @@ lib-y = delay.o memmove.o memchr.o \ ...@@ -7,9 +7,7 @@ lib-y = delay.o memmove.o memchr.o \
checksum.o strlen.o div64.o div64-generic.o checksum.o strlen.o div64.o div64-generic.o
# Extracted from libgcc # Extracted from libgcc
obj-y += movmem.o ashldi3.o ashrdi3.o lshrdi3.o \ obj-y += movmem.o ashlsi3.o ashrsi3.o ashiftrt.o lshrsi3.o udiv_qrnnd.o
ashlsi3.o ashrsi3.o ashiftrt.o lshrsi3.o \
udiv_qrnnd.o
udivsi3-y := udivsi3_i4i-Os.o udivsi3-y := udivsi3_i4i-Os.o
......
// SPDX-License-Identifier: GPL-2.0
#include <linux/module.h>
#include "libgcc.h"
long long __ashldi3(long long u, word_type b)
{
DWunion uu, w;
word_type bm;
if (b == 0)
return u;
uu.ll = u;
bm = 32 - b;
if (bm <= 0) {
w.s.low = 0;
w.s.high = (unsigned int) uu.s.low << -bm;
} else {
const unsigned int carries = (unsigned int) uu.s.low >> bm;
w.s.low = (unsigned int) uu.s.low << b;
w.s.high = ((unsigned int) uu.s.high << b) | carries;
}
return w.ll;
}
EXPORT_SYMBOL(__ashldi3);
// SPDX-License-Identifier: GPL-2.0
#include <linux/module.h>
#include "libgcc.h"
long long __ashrdi3(long long u, word_type b)
{
DWunion uu, w;
word_type bm;
if (b == 0)
return u;
uu.ll = u;
bm = 32 - b;
if (bm <= 0) {
/* w.s.high = 1..1 or 0..0 */
w.s.high =
uu.s.high >> 31;
w.s.low = uu.s.high >> -bm;
} else {
const unsigned int carries = (unsigned int) uu.s.high << bm;
w.s.high = uu.s.high >> b;
w.s.low = ((unsigned int) uu.s.low >> b) | carries;
}
return w.ll;
}
EXPORT_SYMBOL(__ashrdi3);
// SPDX-License-Identifier: GPL-2.0
#include <linux/module.h>
#include "libgcc.h"
long long __lshrdi3(long long u, word_type b)
{
DWunion uu, w;
word_type bm;
if (b == 0)
return u;
uu.ll = u;
bm = 32 - b;
if (bm <= 0) {
w.s.high = 0;
w.s.low = (unsigned int) uu.s.high >> -bm;
} else {
const unsigned int carries = (unsigned int) uu.s.high << bm;
w.s.high = (unsigned int) uu.s.high >> b;
w.s.low = ((unsigned int) uu.s.low >> b) | carries;
}
return w.ll;
}
EXPORT_SYMBOL(__lshrdi3);
...@@ -67,7 +67,3 @@ ...@@ -67,7 +67,3 @@
} while (0) } while (0)
#define abort() return 0 #define abort() return 0
#define __BYTE_ORDER __LITTLE_ENDIAN
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
# Mips port by Juan Quintela <quintela@mandrakesoft.com> # Mips port by Juan Quintela <quintela@mandrakesoft.com>
# IA64 port via Andreas Dilger # IA64 port via Andreas Dilger
# Arm port by Holger Schurig # Arm port by Holger Schurig
# sh64 port by Paul Mundt
# Random bits by Matt Mackall <mpm@selenic.com> # Random bits by Matt Mackall <mpm@selenic.com>
# M68k port by Geert Uytterhoeven and Andreas Schwab # M68k port by Geert Uytterhoeven and Andreas Schwab
# AArch64, PARISC ports by Kyle McMartin # AArch64, PARISC ports by Kyle McMartin
...@@ -100,12 +99,6 @@ my (@stack, $re, $dre, $sub, $x, $xs, $funcre, $min_stack); ...@@ -100,12 +99,6 @@ my (@stack, $re, $dre, $sub, $x, $xs, $funcre, $min_stack);
# 100092: e3 f0 ff c8 ff 71 lay %r15,-56(%r15) # 100092: e3 f0 ff c8 ff 71 lay %r15,-56(%r15)
$re = qr/.*(?:lay|ag?hi).*\%r15,-(([0-9]{2}|[3-9])[0-9]{2}) $re = qr/.*(?:lay|ag?hi).*\%r15,-(([0-9]{2}|[3-9])[0-9]{2})
(?:\(\%r15\))?$/ox; (?:\(\%r15\))?$/ox;
} elsif ($arch =~ /^sh64$/) {
#XXX: we only check for the immediate case presently,
# though we will want to check for the movi/sub
# pair for larger users. -- PFM.
#a00048e0: d4fc40f0 addi.l r15,-240,r15
$re = qr/.*addi\.l.*r15,-(([0-9]{2}|[3-9])[0-9]{2}),r15/o;
} elsif ($arch eq 'sparc' || $arch eq 'sparc64') { } elsif ($arch eq 'sparc' || $arch eq 'sparc64') {
# f0019d10: 9d e3 bf 90 save %sp, -112, %sp # f0019d10: 9d e3 bf 90 save %sp, -112, %sp
$re = qr/.*save.*%sp, -(([0-9]{2}|[3-9])[0-9]{2}), %sp/o; $re = qr/.*save.*%sp, -(([0-9]{2}|[3-9])[0-9]{2}), %sp/o;
......
...@@ -51,9 +51,7 @@ const char *const s390_triplets[] = { ...@@ -51,9 +51,7 @@ const char *const s390_triplets[] = {
const char *const sh_triplets[] = { const char *const sh_triplets[] = {
"sh-unknown-linux-gnu-", "sh-unknown-linux-gnu-",
"sh64-unknown-linux-gnu-",
"sh-linux-gnu-", "sh-linux-gnu-",
"sh64-linux-gnu-",
NULL NULL
}; };
......
...@@ -29,11 +29,6 @@ ifeq ($(ARCH),sparc64) ...@@ -29,11 +29,6 @@ ifeq ($(ARCH),sparc64)
SRCARCH := sparc SRCARCH := sparc
endif endif
# Additional ARCH settings for sh
ifeq ($(ARCH),sh64)
SRCARCH := sh
endif
# Additional ARCH settings for loongarch # Additional ARCH settings for loongarch
ifeq ($(ARCH),loongarch32) ifeq ($(ARCH),loongarch32)
SRCARCH := loongarch SRCARCH := loongarch
......
...@@ -90,7 +90,7 @@ endif ...@@ -90,7 +90,7 @@ endif
endif endif
ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64)) ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sparc64 x86_64))
TEST_GEN_FILES += va_128TBswitch TEST_GEN_FILES += va_128TBswitch
TEST_GEN_FILES += virtual_address_range TEST_GEN_FILES += virtual_address_range
TEST_GEN_FILES += write_to_hugetlbfs TEST_GEN_FILES += write_to_hugetlbfs
......
...@@ -132,7 +132,7 @@ else ...@@ -132,7 +132,7 @@ else
fi fi
# filter 64bit architectures # filter 64bit architectures
ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64" ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sparc64 x86_64"
if [ -z "$ARCH" ]; then if [ -z "$ARCH" ]; then
ARCH=$(uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/') ARCH=$(uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/')
fi fi
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment