sh updates for v6.4

- 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
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEYv+KdYTgKVaVRgAGdCY7N/W1+RMFAmRIz0UACgkQdCY7N/W1
 +RMm1Q/9Hw5xMnxHbryDoBAqgwEOZRH+MUMBnAyMw3shqxO/Cp/nIAacvdNmF4Me
 iszDjATleshk8vbTwUE6cFPzKuLM8r4o1JfBvYSEBgkfs5YEEhoa+1TQZ6aYl3zD
 v6vcVQnobaV5dUc9yUA3FdG/vuXEj7wctZuqO0QYsC/bE5g/r1fFTEd37Jbo2qwg
 6sJ+xL8KEa29Abq9OP0QmeOWvHBuGcCLZNgagA4JxT7U4+jYhg0ddphw+c3yybnP
 FX1eFMulB98V/oDPCOlfrYsZAkQGoYPWwY0WI/nVg8ujA3lbRkSu6Fd9ic95/PGG
 KVjr6Mol6/+ESy4k/MB46bJzq0un2FPWhZzyfL0RoCbX2zQWBtC/1XbT0PmTsRud
 CzcPAMpNPDwUTcoSWdUpOfEAbxjIgGNhQBth9lRMNFhNkk8cwgk1UAN0LjBRm5nq
 MteTim3qCyiFkNlngpvSVbIokBKWllKAtPSL3wCi6OgQCNm7XWZxme2z8G5tVkit
 Q9bTVD5qMt24pRJsGsVho8wvRsqMmtl5hwMzFVP02WBNxb9csHpQHrhG7MRLN9kt
 0BPYU6erCcRl9DQ9HonUaKCmJDJEyxUcXan48TSyGzajFDnURS7AfkreO7NHQIbO
 YAaCvqCDwGVygBjUQtHLrBWlORjAD8IoMEJ1sivRzCeHXGlmI6s=
 =RGSv
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Linus Torvalds 2023-04-27 17:41:23 -07:00
commit 513f17f8d6
23 changed files with 20 additions and 137 deletions

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -1,2 +1,2 @@
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-or-later
#include "../../lib/ashldi3.c" #include "../../../../lib/ashldi3.c"

View file

@ -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;

View file

@ -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

View file

@ -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)
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)
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 @@ out:
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);
} }

View file

@ -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)
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)
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

View file

@ -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)
break; break;
} }
return 0; return 1;
} }
__setup("nmi_debug", nmi_debug_setup); __setup("nmi_debug", nmi_debug_setup);

View file

@ -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)
/* 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

View file

@ -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

View file

@ -1,30 +0,0 @@
// 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);

View file

@ -1,32 +0,0 @@
// 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);

View file

@ -1,30 +0,0 @@
// 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);

View file

@ -67,7 +67,3 @@
} while (0) } while (0)
#define abort() return 0 #define abort() return 0
#define __BYTE_ORDER __LITTLE_ENDIAN

View file

@ -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);
# 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;

View file

@ -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
}; };

View file

@ -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

View file

@ -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

View file

@ -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