summaryrefslogtreecommitdiff
path: root/target
diff options
context:
space:
mode:
Diffstat (limited to 'target')
-rw-r--r--target/config/Config.in.binutils8
-rw-r--r--target/config/Config.in.compiler6
-rw-r--r--target/config/Config.in.cpu32
-rw-r--r--target/config/Config.in.libc12
-rw-r--r--target/config/Config.in.runtime2
-rw-r--r--target/config/Config.in.subsystem12
-rw-r--r--target/cris/systems/axis-89-device-server10
-rw-r--r--target/linux/Config.in1
-rw-r--r--target/linux/Config.in.kernelcfg2
-rw-r--r--target/linux/Config.in.kernelversion8
-rw-r--r--target/linux/config/Config.in.hpjornada12
-rw-r--r--target/linux/patches/5.4.292/arc.patch (renamed from target/linux/patches/5.4.289/arc.patch)0
-rw-r--r--target/linux/patches/5.4.292/arm-nommu.patch (renamed from target/linux/patches/5.4.289/arm-nommu.patch)0
-rw-r--r--target/linux/patches/5.4.292/darwin-dtc.patch (renamed from target/linux/patches/5.4.289/darwin-dtc.patch)0
-rw-r--r--target/linux/patches/5.4.292/dtc-noyaml.patch (renamed from target/linux/patches/5.4.289/dtc-noyaml.patch)0
-rw-r--r--target/linux/patches/5.4.292/macsonic.patch (renamed from target/linux/patches/5.4.289/macsonic.patch)0
-rw-r--r--target/linux/patches/5.4.292/or1k-more-ram.patch (renamed from target/linux/patches/5.4.289/or1k-more-ram.patch)0
-rw-r--r--target/linux/patches/5.4.292/relocs.patch (renamed from target/linux/patches/5.4.289/relocs.patch)0
-rw-r--r--target/linux/patches/5.4.292/sh4.patch (renamed from target/linux/patches/5.4.289/sh4.patch)0
-rw-r--r--target/linux/patches/5.4.292/startup.patch (renamed from target/linux/patches/5.4.289/startup.patch)0
-rw-r--r--target/linux/patches/6.12.37/armnommu-versatile.patch (renamed from target/linux/patches/6.12.25/armnommu-versatile.patch)0
-rw-r--r--target/linux/patches/6.12.37/hppa-cross-compile.patch (renamed from target/linux/patches/6.12.25/hppa-cross-compile.patch)0
-rw-r--r--target/linux/patches/6.12.37/macsonic.patch (renamed from target/linux/patches/6.12.25/macsonic.patch)0
-rw-r--r--target/linux/patches/6.12.37/mips-vdso-gcc15.patch12
-rw-r--r--target/linux/patches/6.15.6/0001-pcmcia-Add-Hitachi-HD6446x-PCMCIA-socket-support.patch720
-rw-r--r--target/linux/patches/6.15.6/orinoco.patch12933
-rwxr-xr-xtarget/sh/hp-jornada/Autorun.infbin0 -> 58 bytes
-rw-r--r--target/sh/hp-jornada/shlo.exebin0 -> 64000 bytes
-rw-r--r--target/sh/hp-jornada/shlo.txt.68015
-rw-r--r--target/sh/hp-jornada/shlo.txt.69015
-rw-r--r--target/sh/kernel/hp-jornada2201
-rw-r--r--target/sh/systems/hp-jornada13
32 files changed, 15983 insertions, 31 deletions
diff --git a/target/config/Config.in.binutils b/target/config/Config.in.binutils
index 3e141d4d6..0beb783f7 100644
--- a/target/config/Config.in.binutils
+++ b/target/config/Config.in.binutils
@@ -10,13 +10,17 @@ default ADK_TOOLCHAIN_BINUTILS_KVX if ADK_TARGET_ARCH_KVX
default ADK_TOOLCHAIN_BINUTILS_NDS32 if ADK_TARGET_ARCH_NDS32
default ADK_TOOLCHAIN_BINUTILS_2_26 if ADK_TARGET_ARCH_BFIN && ADK_TARGET_BINFMT_FDPIC
default ADK_TOOLCHAIN_BINUTILS_2_43_1 if ADK_TARGET_ARCH_NIOS2
-default ADK_TOOLCHAIN_BINUTILS_2_43_1 if ADK_TARGET_ARCH_X86_64
-default ADK_TOOLCHAIN_BINUTILS_2_44
+default ADK_TOOLCHAIN_BINUTILS_2_45
config ADK_TOOLCHAIN_BINUTILS_GIT
bool "git"
depends on !ADK_TARGET_ARCH_AVR32
+config ADK_TOOLCHAIN_BINUTILS_2_45
+ bool "2.45"
+ depends on !ADK_TARGET_ARCH_AVR32
+ depends on !ADK_TARGET_ARCH_NIOS2
+
config ADK_TOOLCHAIN_BINUTILS_2_44
bool "2.44"
depends on !ADK_TARGET_ARCH_AVR32
diff --git a/target/config/Config.in.compiler b/target/config/Config.in.compiler
index 57dcf54e3..be0ce72ff 100644
--- a/target/config/Config.in.compiler
+++ b/target/config/Config.in.compiler
@@ -37,19 +37,19 @@ config ADK_TOOLCHAIN_GCC_15
depends on !ADK_TARGET_ARCH_METAG
config ADK_TOOLCHAIN_GCC_14
- bool "14.2.0"
+ bool "14.3.0"
depends on !ADK_TARGET_ARCH_AVR32
depends on !ADK_TARGET_ARCH_CRIS
depends on !ADK_TARGET_ARCH_METAG
config ADK_TOOLCHAIN_GCC_13
- bool "13.3.0"
+ bool "13.4.0"
depends on !ADK_TARGET_ARCH_AVR32
depends on !ADK_TARGET_ARCH_CRIS
depends on !ADK_TARGET_ARCH_METAG
config ADK_TOOLCHAIN_GCC_12
- bool "12.4.0"
+ bool "12.5.0"
depends on !ADK_TARGET_ARCH_AVR32
depends on !ADK_TARGET_ARCH_CRIS
depends on !ADK_TARGET_ARCH_METAG
diff --git a/target/config/Config.in.cpu b/target/config/Config.in.cpu
index aea2b04b7..e0a91b003 100644
--- a/target/config/Config.in.cpu
+++ b/target/config/Config.in.cpu
@@ -1207,6 +1207,14 @@ config ADK_TARGET_CPU_PPC64_POWERPC64
depends on ADK_TARGET_BIG_ENDIAN
# riscv
+config ADK_TARGET_CPU_RISCV32_RV32IMADC
+ bool "rv32imadc"
+ select ADK_TARGET_SUPPORTS_THREADS
+ select ADK_TARGET_SUPPORTS_NPTL if ADK_TARGET_WITH_MMU
+ select ADK_TARGET_SUPPORTS_LT
+ select ADK_TARGET_ABI_ILP32D
+ depends on ADK_TARGET_ARCH_RISCV32
+
config ADK_TARGET_CPU_RISCV32_RV32IMAC
bool "rv32imac"
select ADK_TARGET_SUPPORTS_THREADS
@@ -1231,14 +1239,6 @@ config ADK_TARGET_CPU_RISCV32_RV32IMAFC
select ADK_TARGET_ABI_ILP32F
depends on ADK_TARGET_ARCH_RISCV32
-config ADK_TARGET_CPU_RISCV32_RV32IMADC
- bool "rv32imadc"
- select ADK_TARGET_SUPPORTS_THREADS
- select ADK_TARGET_SUPPORTS_NPTL if ADK_TARGET_WITH_MMU
- select ADK_TARGET_SUPPORTS_LT
- select ADK_TARGET_ABI_ILP32D
- depends on ADK_TARGET_ARCH_RISCV32
-
config ADK_TARGET_CPU_RISCV32_RV32IMAFDC
bool "rv32imafdc"
select ADK_TARGET_SUPPORTS_THREADS if ADK_TARGET_WITH_MMU
@@ -1246,6 +1246,14 @@ config ADK_TARGET_CPU_RISCV32_RV32IMAFDC
select ADK_TARGET_SUPPORTS_LT if ADK_TARGET_WITH_MMU
depends on ADK_TARGET_ARCH_RISCV32
+config ADK_TARGET_CPU_RISCV64_RV64IMADC
+ bool "rv64imadc"
+ select ADK_TARGET_SUPPORTS_THREADS
+ select ADK_TARGET_SUPPORTS_NPTL if ADK_TARGET_WITH_MMU
+ select ADK_TARGET_SUPPORTS_LT
+ select ADK_TARGET_ABI_LP64D
+ depends on ADK_TARGET_ARCH_RISCV64
+
config ADK_TARGET_CPU_RISCV64_RV64IMAC
bool "rv64imac"
select ADK_TARGET_SUPPORTS_THREADS
@@ -1270,14 +1278,6 @@ config ADK_TARGET_CPU_RISCV64_RV64IMAFC
select ADK_TARGET_ABI_LP64F
depends on ADK_TARGET_ARCH_RISCV64
-config ADK_TARGET_CPU_RISCV64_RV64IMADC
- bool "rv64imadc"
- select ADK_TARGET_SUPPORTS_THREADS
- select ADK_TARGET_SUPPORTS_NPTL if ADK_TARGET_WITH_MMU
- select ADK_TARGET_SUPPORTS_LT
- select ADK_TARGET_ABI_LP64D
- depends on ADK_TARGET_ARCH_RISCV64
-
config ADK_TARGET_CPU_RISCV64_RV64IMAFDC
bool "rv64imafdc"
select ADK_TARGET_SUPPORTS_THREADS if ADK_TARGET_WITH_MMU
diff --git a/target/config/Config.in.libc b/target/config/Config.in.libc
index 7f3157976..8b942b372 100644
--- a/target/config/Config.in.libc
+++ b/target/config/Config.in.libc
@@ -148,16 +148,16 @@ choice
prompt "Target C library version"
depends on !ADK_TARGET_CHOOSE_ARCH
-config ADK_TARGET_LIB_UCLIBC_NG_1_0_52
- bool "1.0.52"
+config ADK_TARGET_LIB_UCLIBC_NG_1_0_54
+ bool "1.0.54"
depends on ADK_TARGET_LIB_UCLIBC_NG
config ADK_TARGET_LIB_UCLIBC_NG_GIT
bool "git"
depends on ADK_TARGET_LIB_UCLIBC_NG && ADK_EXPERIMENTAL
-config ADK_TARGET_LIB_GLIBC_2_41
- bool "2.41"
+config ADK_TARGET_LIB_GLIBC_2_42
+ bool "2.42"
depends on ADK_TARGET_LIB_GLIBC
config ADK_TARGET_LIB_GLIBC_GIT
@@ -198,9 +198,9 @@ config ADK_TARGET_LIBC
config ADK_LIBC_VERSION
string
- default "1.0.52" if ADK_TARGET_LIB_UCLIBC_NG_1_0_52
+ default "1.0.54" if ADK_TARGET_LIB_UCLIBC_NG_1_0_54
default "1.2.5" if ADK_TARGET_LIB_MUSL_1_2_5
- default "2.41" if ADK_TARGET_LIB_GLIBC_2_40
+ default "2.42" if ADK_TARGET_LIB_GLIBC_2_42
default "4.4.0" if ADK_TARGET_LIB_NEWLIB_4_4_0
default "git" if ADK_TARGET_LIB_UCLIBC_NG_GIT || \
ADK_TARGET_LIB_MUSL_GIT || \
diff --git a/target/config/Config.in.runtime b/target/config/Config.in.runtime
index e1a5600f6..4f2b135c0 100644
--- a/target/config/Config.in.runtime
+++ b/target/config/Config.in.runtime
@@ -314,6 +314,7 @@ config ADK_RUNTIME_GETTY_VGA
default y if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
default y if ADK_TARGET_SYSTEM_LEMOTE_YEELONG
default y if ADK_TARGET_SYSTEM_ARANYM_M68K
+ default y if ADK_TARGET_SYSTEM_HP_JORNADA
default y if ADK_TARGET_MODEL_PCENGINES_ALIX1C
default n
help
@@ -367,6 +368,7 @@ config ADK_RUNTIME_CONSOLE_SERIAL_DEVICE
|| ADK_TARGET_SYSTEM_QEMU_AARCH64
default "ttyARC0" if ADK_TARGET_SYSTEM_SYNOPSYS_NSIM && ADK_TARGET_CPU_ARC_ARC700
default "ttySC1" if ADK_TARGET_SYSTEM_QEMU_SH
+ default "ttySC1" if ADK_TARGET_SYSTEM_HP_JORNADA
default "ttySC0" if ADK_TARGET_SYSTEM_SIM_H8300H
default "ttySC2" if ADK_TARGET_SYSTEM_HITACHI_EDOSK2674
default "ttySIF0" if ADK_TARGET_SYSTEM_SIPEED_MAIX_BIT
diff --git a/target/config/Config.in.subsystem b/target/config/Config.in.subsystem
index ce43f391c..1a8c46348 100644
--- a/target/config/Config.in.subsystem
+++ b/target/config/Config.in.subsystem
@@ -2,6 +2,18 @@
# material, please see the LICENCE file in the top-level directory.
choice
+prompt "HP Jornada model"
+depends on ADK_TARGET_SYSTEM_HP_JORNADA
+
+config ADK_TARGET_MODEL_HP_JORNADA_690
+ bool "HP Jornada 690"
+
+config ADK_TARGET_MODEL_HP_JORNADA_680
+ bool "HP Jornada 680"
+
+endchoice
+
+choice
prompt "PCengines ALIX model"
depends on ADK_TARGET_SYSTEM_PCENGINES_ALIX
diff --git a/target/cris/systems/axis-89-device-server b/target/cris/systems/axis-89-device-server
new file mode 100644
index 000000000..80449caea
--- /dev/null
+++ b/target/cris/systems/axis-89-device-server
@@ -0,0 +1,10 @@
+config ADK_TARGET_SYSTEM_AXIS_89_DEVICE_SERVER
+ bool "Axis 89 Device Server"
+ select ADK_TARGET_CPU_CRIS_CRISV32
+ select ADK_TARGET_WITH_MTD
+ select ADK_TARGET_WITH_NETDEVICE
+ select ADK_TARGET_KERNEL_ZIMAGE
+ select ADK_TARGET_KERNEL_WITH_COMPRESSION
+ help
+ Axis 89 Device Server
+
diff --git a/target/linux/Config.in b/target/linux/Config.in
index fb9d1810e..3709af90e 100644
--- a/target/linux/Config.in
+++ b/target/linux/Config.in
@@ -29,3 +29,4 @@ source target/linux/config/Config.in.kvm
source target/linux/config/Config.in.virtio
source target/linux/config/Config.in.debug
source target/linux/config/Config.in.compat
+source target/linux/config/Config.in.hpjornada
diff --git a/target/linux/Config.in.kernelcfg b/target/linux/Config.in.kernelcfg
index f8d33d5b7..d848147fc 100644
--- a/target/linux/Config.in.kernelcfg
+++ b/target/linux/Config.in.kernelcfg
@@ -72,6 +72,8 @@ config ADK_TARGET_LINUX_KERNEL_DEFCONFIG
default "default_defconfig" if ADK_TARGET_ARCH_KVX
default "ci20_defconfig" if ADK_TARGET_SYSTEM_IMGTEC_CI20
default "lemote2f_defconfig" if ADK_TARGET_SYSTEM_LEMOTE_FULOONG
+ default "etraxfs_defconfig" if ADK_TARGET_SYSTEM_AXIS_89_DEVICE_SERVER
+ default "hp6xx_defconfig" if ADK_TARGET_SYSTEM_HP_JORNADA
default ""
config ADK_TARGET_LINUX_KERNEL_CUSTOMCONFIG_PATH
diff --git a/target/linux/Config.in.kernelversion b/target/linux/Config.in.kernelversion
index c4399e070..372bb524e 100644
--- a/target/linux/Config.in.kernelversion
+++ b/target/linux/Config.in.kernelversion
@@ -39,8 +39,8 @@ config ADK_TARGET_LINUX_KERNEL_VERSION_GIT
depends on !ADK_TARGET_ARCH_NDS32
select ADK_HOST_NEED_LZ4 if ADK_TARGET_SYSTEM_PHYTEC_WEGA && ADK_TARGET_LINUX_KERNEL_VERSION_GIT
-config ADK_TARGET_LINUX_KERNEL_VERSION_6_14
- bool "6.14.4"
+config ADK_TARGET_LINUX_KERNEL_VERSION_6_15
+ bool "6.15.6"
depends on !ADK_TARGET_ARCH_AVR32
depends on !ADK_TARGET_ARCH_BFIN
depends on !ADK_TARGET_ARCH_C6X
@@ -51,7 +51,7 @@ config ADK_TARGET_LINUX_KERNEL_VERSION_6_14
depends on !ADK_TARGET_ARCH_NDS32
config ADK_TARGET_LINUX_KERNEL_VERSION_6_12
- bool "6.12.25"
+ bool "6.12.37"
depends on !ADK_TARGET_ARCH_AVR32
depends on !ADK_TARGET_ARCH_BFIN
depends on !ADK_TARGET_ARCH_C6X
@@ -105,7 +105,7 @@ config ADK_TARGET_LINUX_KERNEL_VERSION_5_10
depends on !ADK_TARGET_SYSTEM_SIPEED_MAIX_BIT
config ADK_TARGET_LINUX_KERNEL_VERSION_5_4
- bool "5.4.289"
+ bool "5.4.292"
depends on !ADK_TARGET_ARCH_AVR32
depends on !ADK_TARGET_ARCH_BFIN
depends on !ADK_TARGET_ARCH_CRIS
diff --git a/target/linux/config/Config.in.hpjornada b/target/linux/config/Config.in.hpjornada
new file mode 100644
index 000000000..fc46c316f
--- /dev/null
+++ b/target/linux/config/Config.in.hpjornada
@@ -0,0 +1,12 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+config ADK_LINUX_KERNEL_MEMORY_SIZE
+ hex
+ default "0x2000000"
+ depends on ADK_TARGET_MODEL_HP_JORNADA_690
+
+config ADK_LINUX_KERNEL_MEMORY_SIZE
+ hex
+ default "0x1000000"
+ depends on ADK_TARGET_MODEL_HP_JORNADA_680
diff --git a/target/linux/patches/5.4.289/arc.patch b/target/linux/patches/5.4.292/arc.patch
index 20810ce64..20810ce64 100644
--- a/target/linux/patches/5.4.289/arc.patch
+++ b/target/linux/patches/5.4.292/arc.patch
diff --git a/target/linux/patches/5.4.289/arm-nommu.patch b/target/linux/patches/5.4.292/arm-nommu.patch
index fdcec3f09..fdcec3f09 100644
--- a/target/linux/patches/5.4.289/arm-nommu.patch
+++ b/target/linux/patches/5.4.292/arm-nommu.patch
diff --git a/target/linux/patches/5.4.289/darwin-dtc.patch b/target/linux/patches/5.4.292/darwin-dtc.patch
index 0cdc23ab4..0cdc23ab4 100644
--- a/target/linux/patches/5.4.289/darwin-dtc.patch
+++ b/target/linux/patches/5.4.292/darwin-dtc.patch
diff --git a/target/linux/patches/5.4.289/dtc-noyaml.patch b/target/linux/patches/5.4.292/dtc-noyaml.patch
index 759bb01f7..759bb01f7 100644
--- a/target/linux/patches/5.4.289/dtc-noyaml.patch
+++ b/target/linux/patches/5.4.292/dtc-noyaml.patch
diff --git a/target/linux/patches/5.4.289/macsonic.patch b/target/linux/patches/5.4.292/macsonic.patch
index 75a6fcad2..75a6fcad2 100644
--- a/target/linux/patches/5.4.289/macsonic.patch
+++ b/target/linux/patches/5.4.292/macsonic.patch
diff --git a/target/linux/patches/5.4.289/or1k-more-ram.patch b/target/linux/patches/5.4.292/or1k-more-ram.patch
index 540dc43b5..540dc43b5 100644
--- a/target/linux/patches/5.4.289/or1k-more-ram.patch
+++ b/target/linux/patches/5.4.292/or1k-more-ram.patch
diff --git a/target/linux/patches/5.4.289/relocs.patch b/target/linux/patches/5.4.292/relocs.patch
index 5bcd974c7..5bcd974c7 100644
--- a/target/linux/patches/5.4.289/relocs.patch
+++ b/target/linux/patches/5.4.292/relocs.patch
diff --git a/target/linux/patches/5.4.289/sh4.patch b/target/linux/patches/5.4.292/sh4.patch
index 8ae79d49d..8ae79d49d 100644
--- a/target/linux/patches/5.4.289/sh4.patch
+++ b/target/linux/patches/5.4.292/sh4.patch
diff --git a/target/linux/patches/5.4.289/startup.patch b/target/linux/patches/5.4.292/startup.patch
index 081aa103a..081aa103a 100644
--- a/target/linux/patches/5.4.289/startup.patch
+++ b/target/linux/patches/5.4.292/startup.patch
diff --git a/target/linux/patches/6.12.25/armnommu-versatile.patch b/target/linux/patches/6.12.37/armnommu-versatile.patch
index f8f10f50b..f8f10f50b 100644
--- a/target/linux/patches/6.12.25/armnommu-versatile.patch
+++ b/target/linux/patches/6.12.37/armnommu-versatile.patch
diff --git a/target/linux/patches/6.12.25/hppa-cross-compile.patch b/target/linux/patches/6.12.37/hppa-cross-compile.patch
index 51c24fff2..51c24fff2 100644
--- a/target/linux/patches/6.12.25/hppa-cross-compile.patch
+++ b/target/linux/patches/6.12.37/hppa-cross-compile.patch
diff --git a/target/linux/patches/6.12.25/macsonic.patch b/target/linux/patches/6.12.37/macsonic.patch
index 51e76113b..51e76113b 100644
--- a/target/linux/patches/6.12.25/macsonic.patch
+++ b/target/linux/patches/6.12.37/macsonic.patch
diff --git a/target/linux/patches/6.12.37/mips-vdso-gcc15.patch b/target/linux/patches/6.12.37/mips-vdso-gcc15.patch
new file mode 100644
index 000000000..c18bc6c92
--- /dev/null
+++ b/target/linux/patches/6.12.37/mips-vdso-gcc15.patch
@@ -0,0 +1,12 @@
+diff -Nur linux-6.12.25.orig/arch/mips/vdso/Makefile linux-6.12.25/arch/mips/vdso/Makefile
+--- linux-6.12.25.orig/arch/mips/vdso/Makefile 2025-04-25 10:48:08.000000000 +0200
++++ linux-6.12.25/arch/mips/vdso/Makefile 2025-04-30 19:42:08.538362252 +0200
+@@ -30,7 +30,7 @@
+ -O3 -g -fPIC -fno-strict-aliasing -fno-common -fno-builtin -G 0 \
+ -mrelax-pic-calls $(call cc-option, -mexplicit-relocs) \
+ -fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \
+- $(call cc-option, -fno-asynchronous-unwind-tables)
++ $(call cc-option, -fno-asynchronous-unwind-tables) -std=gnu11
+ aflags-vdso := $(ccflags-vdso) \
+ -D__ASSEMBLY__ -Wa,-gdwarf-2
+
diff --git a/target/linux/patches/6.15.6/0001-pcmcia-Add-Hitachi-HD6446x-PCMCIA-socket-support.patch b/target/linux/patches/6.15.6/0001-pcmcia-Add-Hitachi-HD6446x-PCMCIA-socket-support.patch
new file mode 100644
index 000000000..5c46fe5e4
--- /dev/null
+++ b/target/linux/patches/6.15.6/0001-pcmcia-Add-Hitachi-HD6446x-PCMCIA-socket-support.patch
@@ -0,0 +1,720 @@
+From b6ffbcb525539139a9b2255b992622f92757ea37 Mon Sep 17 00:00:00 2001
+From: Artur Rojek <contact@artur-rojek.eu>
+Date: Fri, 1 Aug 2025 22:52:22 +0200
+Subject: [PATCH] pcmcia: Add Hitachi HD6446x PCMCIA socket support
+
+Introduce support for the PC Card Controller part of the Hitachi HD6446x
+series of Intelligent Peripheral Controllers.
+
+WIP code. DO NOT UPSTREAM!
+---
+ arch/sh/boards/mach-hp6xx/setup.c | 45 ++-
+ arch/sh/cchips/hd6446x/hd64461.c | 56 +++-
+ arch/sh/include/asm/hd64461.h | 6 +-
+ drivers/pcmcia/Kconfig | 7 +
+ drivers/pcmcia/Makefile | 1 +
+ drivers/pcmcia/hd6446x_pcc.c | 453 ++++++++++++++++++++++++++++++
+ include/pcmcia/hd6446x_pcc.h | 9 +
+ 7 files changed, 569 insertions(+), 8 deletions(-)
+ create mode 100644 drivers/pcmcia/hd6446x_pcc.c
+ create mode 100644 include/pcmcia/hd6446x_pcc.h
+
+diff --git a/arch/sh/boards/mach-hp6xx/setup.c b/arch/sh/boards/mach-hp6xx/setup.c
+index 2ceead68d7bf..c697b8e1f5ac 100644
+--- a/arch/sh/boards/mach-hp6xx/setup.c
++++ b/arch/sh/boards/mach-hp6xx/setup.c
+@@ -18,19 +18,23 @@
+ #include <mach/hp6xx.h>
+ #include <cpu/dac.h>
+
++#include <pcmcia/hd6446x_pcc.h>
++
+ #define SCPCR 0xa4000116
+ #define SCPDR 0xa4000136
+
++#define CF_MEM_ATTR (0x15000000 - 0)
++
+ /* CF Slot */
+ static struct resource cf_ide_resources[] = {
+ [0] = {
+- .start = 0x15000000 + 0x1f0,
+- .end = 0x15000000 + 0x1f0 + 0x08 - 0x01,
++ .start = CF_MEM_ATTR + 0x1f0,
++ .end = CF_MEM_ATTR + 0x1f0 + 0x08 - 0x01,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+- .start = 0x15000000 + 0x1fe,
+- .end = 0x15000000 + 0x1fe + 0x01,
++ .start = CF_MEM_ATTR + 0x1fe,
++ .end = CF_MEM_ATTR + 0x1fe + 0x01,
+ .flags = IORESOURCE_MEM,
+ },
+ [2] = {
+@@ -51,6 +55,36 @@ static struct platform_device jornadakbd_device = {
+ .id = -1,
+ };
+
++static struct resource hd6446x_pcc_resources[] = {
++ [0] = {
++ .start = HD64461_PCC0ISR,
++ .end = HD64461_PCC0ISR + 0x10,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = HD64461_PCC0_BASE,
++ .end = HD64461_PCC0_BASE + 0x4000000,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = HD64461_IRQ_PCC0,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct hd6446x_pcc_plat_data hd6446x_pcc_platform_data = {
++ .slot_id = 1,
++ .io_support = true,
++};
++
++static struct platform_device hp6446x_pcc_device = {
++ .name = "hd6446x_pcc",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(hd6446x_pcc_resources),
++ .resource = hd6446x_pcc_resources,
++ .dev.platform_data = &hd6446x_pcc_platform_data,
++};
++
+ static void dac_audio_start(struct dac_audio_pdata *pdata)
+ {
+ u16 v;
+@@ -108,6 +142,7 @@ static struct platform_device *hp6xx_devices[] __initdata = {
+ &cf_ide_device,
+ &jornadakbd_device,
+ &dac_audio_device,
++ &hp6446x_pcc_device,
+ };
+
+ static void __init hp6xx_init_irq(void)
+@@ -126,6 +161,8 @@ static void __init hp6xx_setup(char **cmdline_p)
+ u8 v8;
+ u16 v;
+
++ __set_io_port_base(0);
++
+ v = inw(HD64461_STBCR);
+ v |= HD64461_STBCR_SURTST | HD64461_STBCR_SIRST |
+ HD64461_STBCR_STM1ST | HD64461_STBCR_STM0ST |
+diff --git a/arch/sh/cchips/hd6446x/hd64461.c b/arch/sh/cchips/hd6446x/hd64461.c
+index 81764882d87d..965486584ee5 100644
+--- a/arch/sh/cchips/hd6446x/hd64461.c
++++ b/arch/sh/cchips/hd6446x/hd64461.c
+@@ -4,7 +4,9 @@
+ * Hitachi HD64461 companion chip support
+ */
+
++#include <linux/clkdev.h>
+ #include <linux/sched.h>
++#include <linux/sh_clk.h>
+ #include <linux/module.h>
+ #include <linux/kernel.h>
+ #include <linux/param.h>
+@@ -45,7 +47,7 @@ static void hd64461_mask_and_ack_irq(struct irq_data *data)
+ hd64461_mask_irq(data);
+
+ #ifdef CONFIG_HD64461_ENABLER
+- if (data->irq == HD64461_IRQBASE + 13)
++ if (data->irq == HD64461_IRQ_PCC1)
+ __raw_writeb(0x00, HD64461_PCC1CSCR);
+ #endif
+ }
+@@ -72,6 +74,51 @@ static void hd64461_irq_demux(struct irq_desc *desc)
+ }
+ }
+
++static int hd64461_clk_enable(struct clk *clk)
++{
++ u16 reg = __raw_readw(HD64461_STBCR);
++
++ printk("clk enable: %d\n", clk->enable_bit);
++
++ __raw_writew(reg & ~(1 << clk->enable_bit), HD64461_STBCR);
++
++ return 0;
++}
++
++static void hd64461_clk_disable(struct clk *clk)
++{
++ u16 reg = __raw_readw(HD64461_STBCR);
++
++ printk("clk disable: %d\n", clk->enable_bit);
++ //panic("clk disable: %d\n", clk->enable_bit);
++
++
++ __raw_writew(reg | (1 << clk->enable_bit), HD64461_STBCR);
++}
++
++static struct sh_clk_ops hd64461_clk_ops = {
++ .enable = hd64461_clk_enable,
++ .disable = hd64461_clk_disable,
++};
++
++static struct clk hd64461_clk[] = {
++ {
++ .enable_bit = 5,
++ .ops = &hd64461_clk_ops,
++ .flags = CLK_ENABLE_ON_INIT,
++ },
++ {
++ .enable_bit = 6,
++ .ops = &hd64461_clk_ops,
++ .flags = CLK_ENABLE_ON_INIT,
++ },
++};
++
++static struct clk_lookup hd64461_clk_lookup[] = {
++ CLKDEV_CON_ID("pcc1", &hd64461_clk[0]),
++ CLKDEV_CON_ID("pcc0", &hd64461_clk[1]),
++};
++
+ static int __init setup_hd64461(void)
+ {
+ int irq_base, i;
+@@ -106,6 +153,13 @@ static int __init setup_hd64461(void)
+ __raw_writeb(0x00, HD64461_PCC1CSCR);
+ #endif
+
++// for (i = 0; i < ARRAY_SIZE(hd64461_clk); i++)
++// clk_register(&hd64461_clk[i]);
++ clk_register(&hd64461_clk[1]);
++ clkdev_add_table(hd64461_clk_lookup, ARRAY_SIZE(hd64461_clk_lookup));
++
++ printk("done with clk setup\n");
++
+ return 0;
+ }
+
+diff --git a/arch/sh/include/asm/hd64461.h b/arch/sh/include/asm/hd64461.h
+index d2c485fa333b..91823ec07f79 100644
+--- a/arch/sh/include/asm/hd64461.h
++++ b/arch/sh/include/asm/hd64461.h
+@@ -17,9 +17,9 @@
+ #define HD64461_IOBASE 0xb0000000
+ #define HD64461_IO_OFFSET(x) (HD64461_IOBASE + (x))
+ #define HD64461_PCC0_BASE HD64461_IO_OFFSET(0x8000000)
+-#define HD64461_PCC0_ATTR (HD64461_PCC0_BASE) /* 0xb80000000 */
+-#define HD64461_PCC0_COMM (HD64461_PCC0_BASE+HD64461_PCC_WINDOW) /* 0xb90000000 */
+-#define HD64461_PCC0_IO (HD64461_PCC0_BASE+2*HD64461_PCC_WINDOW) /* 0xba0000000 */
++#define HD64461_PCC0_ATTR (HD64461_PCC0_BASE) /* 0xb8000000 */
++#define HD64461_PCC0_COMM (HD64461_PCC0_BASE+HD64461_PCC_WINDOW) /* 0xb9000000 */
++#define HD64461_PCC0_IO (HD64461_PCC0_BASE+2*HD64461_PCC_WINDOW) /* 0xba000000 */
+
+ /* Area 5 - Slot 1 - memory card only */
+ #define HD64461_PCC1_BASE HD64461_IO_OFFSET(0x4000000)
+diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig
+index dddb235dd020..f2434ca15c8e 100644
+--- a/drivers/pcmcia/Kconfig
++++ b/drivers/pcmcia/Kconfig
+@@ -159,6 +159,13 @@ config PCMCIA_ALCHEMY_DEVBOARD
+
+ This driver is also available as a module called db1xxx_ss.ko
+
++config PCMCIA_HD6446X_PCC
++ tristate "Hitachi HD6446x PCMCIA socket support"
++ depends on PCMCIA && HD6446X_SERIES
++ help
++ Say Y here to include support for the PC Card Controller part of
++ the Hitachi HD6446x series of Intelligent Peripheral Controllers.
++
+ config PCMCIA_XXS1500
+ tristate "MyCable XXS1500 PCMCIA socket support"
+ depends on PCMCIA && MIPS_XXS1500
+diff --git a/drivers/pcmcia/Makefile b/drivers/pcmcia/Makefile
+index c9d51b150682..764df19be544 100644
+--- a/drivers/pcmcia/Makefile
++++ b/drivers/pcmcia/Makefile
+@@ -33,6 +33,7 @@ obj-$(CONFIG_OMAP_CF) += omap_cf.o
+ obj-$(CONFIG_ELECTRA_CF) += electra_cf.o
+ obj-$(CONFIG_PCMCIA_ALCHEMY_DEVBOARD) += db1xxx_ss.o
+ obj-$(CONFIG_PCMCIA_MAX1600) += max1600.o
++obj-$(CONFIG_PCMCIA_HD6446X_PCC) += hd6446x_pcc.o
+
+ sa1111_cs-y += sa1111_generic.o
+ sa1111_cs-$(CONFIG_ASSABET_NEPONSET) += sa1111_neponset.o
+diff --git a/drivers/pcmcia/hd6446x_pcc.c b/drivers/pcmcia/hd6446x_pcc.c
+new file mode 100644
+index 000000000000..31074f93b55b
+--- /dev/null
++++ b/drivers/pcmcia/hd6446x_pcc.c
+@@ -0,0 +1,453 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * PC Card Controller driver for the Hitachi HD6446x series of Intelligent
++ * Peripheral Controllers.
++ *
++ * Copyright (c) 2023 - 2024 Artur Rojek <contact@artur-rojek.eu>
++ */
++
++#include <linux/clk.h>
++#include <linux/interrupt.h>
++#include <linux/of.h>
++#include <linux/platform_device.h>
++#include <pcmcia/hd6446x_pcc.h>
++#include <pcmcia/ss.h>
++#include <asm/hd64461.h>
++
++#include "mach-common/mach/hp6xx.h"
++
++#define HD6446X_PCC_ISR 0x00
++#define HD6446X_PCC_GCR 0x02
++#define HD6446X_PCC_CSCR 0x04
++#define HD6446X_PCC_CSCIER 0x06
++#define HD6446X_PCC_SCR 0x08
++
++#define HD6446X_PCC_ISR_CD (BIT(2) | BIT(3))
++#define HD6446X_PCC_ISR_VS1 BIT(4)
++#define HD6446X_PCC_ISR_VS2 BIT(5)
++#define HD6446X_PCC_ISR_MWP BIT(6)
++#define HD6446X_PCC_ISR_READY BIT(7)
++
++#define HD6446X_PCC_GCR_PMMOD BIT(3)
++#define HD6446X_PCC_GCR_VCC0 BIT(4)
++#define HD6446X_PCC_GCR_PCCT BIT(5)
++#define HD6446X_PCC_GCR_PCCR BIT(6)
++#define HD6446X_PCC_GCR_DRV BIT(7)
++
++#define HD6446X_PCC_CSCR_BD BIT(0)
++#define HD6446X_PCC_CSCR_BW BIT(1)
++#define HD6446X_PCC_CSCR_RC BIT(2)
++#define HD6446X_PCC_CSCR_CDC BIT(3)
++#define HD6446X_PCC_CSCR_SC BIT(4)
++#define HD6446X_PCC_CSCR_IREQ BIT(5)
++#define HD6446X_PCC_CSCR_SCDI BIT(7)
++
++#define HD6446X_PCC_CSCIER_BDE BIT(0)
++#define HD6446X_PCC_CSCIER_BWE BIT(1)
++#define HD6446X_PCC_CSCIER_RE BIT(2)
++#define HD6446X_PCC_CSCIER_CDE BIT(3)
++#define HD6446X_PCC_CSCIER_SCE BIT(4)
++#define HD6446X_PCC_CSCIER_IREQE_FALLING BIT(6)
++
++#define HD6446X_PCC_SCR_VCC1 BIT(1)
++
++#define HD6446X_PCC_WINDOW 0x1000000 /* 16 MiB */
++
++struct hd6446x_pcc {
++ const struct hd6446x_pcc_plat_data *pdata;
++ void __iomem *reg;
++ void __iomem *base;
++ struct clk *clk;
++ struct pcmcia_socket socket;
++ struct socket_state_t state;
++ bool memory_card;
++};
++
++static int hd64461_pcmcia_socket_set_voltage(struct hd6446x_pcc *pcc, int Vcc)
++{
++ int gcr, scr, stbcr;
++
++ gcr = readb(pcc->reg + HD6446X_PCC_GCR);
++ scr = readb(pcc->reg + HD6446X_PCC_SCR);
++
++ switch (Vcc) {
++ case 0:
++ gcr |= HD6446X_PCC_GCR_VCC0;
++ scr |= HD6446X_PCC_SCR_VCC1;
++ break;
++ case 33:
++ gcr |= HD6446X_PCC_GCR_VCC0;
++ scr &= ~HD6446X_PCC_SCR_VCC1;
++ break;
++ case 50:
++ gcr &= ~HD6446X_PCC_GCR_VCC0;
++ scr &= ~HD6446X_PCC_SCR_VCC1;
++ break;
++ default:
++ printk("Unsupported voltage: %d\n", Vcc);
++ return -EINVAL;
++ }
++
++ writeb(gcr, pcc->reg + HD6446X_PCC_GCR);
++ writeb(scr, pcc->reg + HD6446X_PCC_SCR);
++
++// stbcr = readw(HD64461_STBCR);
++
++ if (Vcc > 0)
++ clk_enable(pcc->clk);
++// stbcr &= ~HD64461_STBCR_SPC0ST;
++ else
++ clk_disable(pcc->clk);
++// stbcr |= HD64461_STBCR_SPC0ST;
++
++// writew(stbcr, HD64461_STBCR);
++
++ return 0;
++}
++
++static int hd64461_pcmcia_socket_init(struct pcmcia_socket *sock)
++{
++ struct hd6446x_pcc *pcc = sock->driver_data;
++ int reg;
++
++ printk("socket_init\n");
++
++// printk("init BCR1: %04x\n", readw(0xffffff60));
++
++ (void)hd64461_pcmcia_socket_set_voltage(pcc, 0);
++
++ reg = readb(HD64461_GPADR);
++ reg &= ~HD64461_GPADR_PCMCIA0;
++ writeb(reg, HD64461_GPADR);
++
++ return 0;
++}
++
++static int hd64461_pcmcia_socket_get_status(struct pcmcia_socket *sock,
++ unsigned int *value)
++{
++// struct hd64461_pcmcia_socket *socket = sock->driver_data;
++ struct hd6446x_pcc *pcc = sock->driver_data;
++ unsigned int status = 0;
++ int reg;
++
++ printk("get_status\n");
++
++ reg = readb(pcc->reg + HD6446X_PCC_ISR);
++<