Bläddra i källkod

h8300: add qemu support, kernel randomely crashes, but a starting point

Waldemar Brodkorb 6 dagar sedan
förälder
incheckning
fe25fed962

+ 2 - 1
target/config/Config.in.rootfs

@@ -67,7 +67,8 @@ config ADK_TARGET_ROOTFS_SQUASHFS
 	select ADK_TARGET_QEMU_WITH_BLOCK if ADK_TARGET_QEMU
 	depends on ADK_TARGET_WITH_MTD \
 		|| ADK_TARGET_SYSTEM_QEMU_MICROBLAZE_S3ADSP1800 \
-		|| ADK_TARGET_SYSTEM_QEMU_MICROBLAZE_ML605
+		|| ADK_TARGET_SYSTEM_QEMU_MICROBLAZE_ML605 \
+		|| ADK_TARGET_SYSTEM_QEMU_H8300
 	help
 	  highly compressed read-only filesystem for MTD flash systems.
 

+ 25 - 0
target/h8300/Makefile

@@ -18,6 +18,15 @@ endif
 ifeq ($(ADK_TARGET_KERNEL_VMLINUX_SREC),y)
 KERNEL:=$(LINUX_DIR)/arch/h8300/boot/vmlinux.srec
 endif
+ifeq ($(ADK_TARGET_KERNEL_VMLINUX_BIN),y)
+KERNEL:=$(LINUX_DIR)/arch/h8300/boot/vmlinux.bin
+OSTRIP:=
+endif
+
+QEMU_ARGS:=${ADK_QEMU_ARGS}
+ifeq ($(ADK_TARGET_SYSTEM_QEMU_H8300),y)
+QEMU_ARGS+=-M edosk2674 -append "console=ttySC2,38400"
+endif
 
 # target helper text
 ifeq ($(ADK_TARGET_FS),archive)
@@ -53,6 +62,15 @@ targethelp:
 	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
 	@echo "The RootFS tarball is: $(FW_DIR)/$(ROOTFSUSERTARBALL)"
 endif
+ifeq ($(ADK_TARGET_FS),squashfs)
+targethelp:
+	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
+	@echo "The RootFS image is: $(FW_DIR)/$(ROOTFSSQUASHFS)"
+ifeq ($(ADK_TARGET_QEMU),y)
+	@echo "Start qemu with following options:"
+	@echo 'qemu-system-h8300 $(QEMU_ARGS) -nographic -kernel $(FW_DIR)/$(TARGET_KERNEL) -pflash $(FW_DIR)/$(ROOTFSSQUASHFS)'
+endif
+endif
 
 kernel-strip:
 ifneq ($(OSTRIP),)
@@ -63,6 +81,10 @@ endif
 
 kernel-install: kernel-strip
 	@cp $(BUILD_DIR)/$(TARGET_KERNEL) $(FW_DIR)/$(TARGET_KERNEL)
+ifeq ($(ADK_TARGET_FS),squashfs)
+	env PATH=$(HOST_PATH) qemu-img create -f raw $(FW_DIR)/$(ROOTFSSQUASHFS) 4M
+	dd conv=notrunc if=$(BUILD_DIR)/root.squashfs of=$(FW_DIR)/$(ROOTFSSQUASHFS)
+endif
 
 # filesystem specific targets
 ifeq ($(ADK_TARGET_FS),archive)
@@ -80,3 +102,6 @@ endif
 ifeq ($(ADK_TARGET_FS),nfsroot)
 imageinstall: kernel-install $(FW_DIR)/$(ROOTFSUSERTARBALL) targethelp
 endif
+ifeq ($(ADK_TARGET_FS),squashfs)
+imageinstall: $(BUILD_DIR)/root.squashfs kernel-install targethelp
+endif

+ 9 - 0
target/h8300/kernel/qemu-h8300

@@ -0,0 +1,9 @@
+CONFIG_H8300=y
+CONFIG_H8300_BUILTIN_DTB="edosk2674"
+CONFIG_H8S_EDOSK2674=y
+CONFIG_SERIAL_SH_SCI_NR_UARTS=4
+CONFIG_LDISC_AUTOLOAD=y
+CONFIG_MTD=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_PHYSMAP=y

+ 11 - 0
target/h8300/systems/qemu-h8300

@@ -0,0 +1,11 @@
+config ADK_TARGET_SYSTEM_QEMU_H8300
+	bool "Qemu H8300"
+	select ADK_TARGET_CPU_H8S
+	select ADK_TARGET_QEMU
+	select ADK_TARGET_WITH_SERIAL
+	select ADK_TARGET_WITH_NET
+	select ADK_TARGET_WITH_NETDEVICE
+	select ADK_TARGET_KERNEL_VMLINUX_BIN
+	help
+	  Qemu Emulator for H8300.
+

+ 2 - 0
target/linux/config/Config.in.serial

@@ -313,9 +313,11 @@ config ADK_LINUX_KERNEL_SERIAL_SH_SCI
 	select ADK_LINUX_KERNEL_SERIAL_SH_SCI_CONSOLE
 	depends on ADK_TARGET_SYSTEM_SIM_H8300H \
 		|| ADK_TARGET_SYSTEM_SIM_H8S \
+		|| ADK_TARGET_SYSTEM_QEMU_H8300 \
 		|| ADK_TARGET_SYSTEM_HITACHI_EDOSK2674
 	default y if ADK_TARGET_SYSTEM_SIM_H8300H
 	default y if ADK_TARGET_SYSTEM_SIM_H8S
+	default y if ADK_TARGET_SYSTEM_QEMU_H8300
 	default y if ADK_TARGET_SYSTEM_HITACHI_EDOSK2674
 	default n
 	help

+ 0 - 72
target/linux/patches/4.4.302/h8300-net.patch

@@ -1,72 +0,0 @@
-diff -Nur linux-4.4.302.orig/arch/h8300/boot/dts/edosk2674.dts linux-4.4.302/arch/h8300/boot/dts/edosk2674.dts
---- linux-4.4.302.orig/arch/h8300/boot/dts/edosk2674.dts	2022-02-03 09:27:54.000000000 +0100
-+++ linux-4.4.302/arch/h8300/boot/dts/edosk2674.dts	2022-02-14 05:05:26.253691787 +0100
-@@ -104,4 +104,9 @@
- 		clocks = <&fclk>;
- 		clock-names = "sci_ick";
- 	};
-+        ethernet: ethernet@f80000 {                                             
-+                compatible = "smsc,lan91c94";                                   
-+                reg = <0xf80000 0xfbffff>;                                      
-+                interrupts = <16 0>;                                            
-+        };                
- };
-diff -Nur linux-4.4.302.orig/drivers/net/ethernet/smsc/Kconfig linux-4.4.302/drivers/net/ethernet/smsc/Kconfig
---- linux-4.4.302.orig/drivers/net/ethernet/smsc/Kconfig	2022-02-03 09:27:54.000000000 +0100
-+++ linux-4.4.302/drivers/net/ethernet/smsc/Kconfig	2022-02-14 04:21:54.546112552 +0100
-@@ -7,7 +7,7 @@
- 	default y
- 	depends on ARM || ARM64 || ATARI_ETHERNAT || BLACKFIN || COLDFIRE || \
- 		   ISA || M32R || MAC || MIPS || MN10300 || NIOS2 || PCI || \
--		   PCMCIA || SUPERH || XTENSA
-+		   PCMCIA || SUPERH || XTENSA || H8300
- 	---help---
- 	  If you have a network (Ethernet) card belonging to this class, say Y.
- 
-@@ -36,9 +36,8 @@
- 	tristate "SMC 91C9x/91C1xxx support"
- 	select CRC32
- 	select MII
--	depends on !OF || GPIOLIB
- 	depends on ARM || ARM64 || ATARI_ETHERNAT || BLACKFIN || COLDFIRE || \
--		   M32R || MIPS || MN10300 || NIOS2 || SUPERH || XTENSA
-+		   M32R || MIPS || MN10300 || NIOS2 || SUPERH || XTENSA || H8300
- 	---help---
- 	  This is a driver for SMC's 91x series of Ethernet chipsets,
- 	  including the SMC91C94 and the SMC91C111. Say Y if you want it
-diff -Nur linux-4.4.302.orig/drivers/net/ethernet/smsc/smc91x.c linux-4.4.302/drivers/net/ethernet/smsc/smc91x.c
---- linux-4.4.302.orig/drivers/net/ethernet/smsc/smc91x.c	2022-02-03 09:27:54.000000000 +0100
-+++ linux-4.4.302/drivers/net/ethernet/smsc/smc91x.c	2022-02-14 05:31:18.727485106 +0100
-@@ -61,7 +61,7 @@
- 
- /* Debugging level */
- #ifndef SMC_DEBUG
--#define SMC_DEBUG		0
-+#define SMC_DEBUG		1
- #endif
- 
- 
-@@ -2204,6 +2204,7 @@
- };
- MODULE_DEVICE_TABLE(of, smc91x_match);
- 
-+#if defined(CONFIG_GPIOLIB)
- /**
-  * of_try_set_control_gpio - configure a gpio if it exists
-  */
-@@ -2228,6 +2229,15 @@
- 
- 	return 0;
- }
-+#else
-+static int try_toggle_control_gpio(struct device *dev,
-+                                  struct gpio_desc **desc,
-+                                  const char *name, int index,
-+                                  int value, unsigned int nsdelay)
-+{
-+	return 0;
-+}
-+#endif
- #endif
- 
- /*

+ 96 - 18
target/linux/patches/4.4.302/h8300.patch

@@ -1,6 +1,37 @@
-diff -Nur linux-4.4.88.orig/arch/h8300/Kconfig.cpu linux-4.4.88/arch/h8300/Kconfig.cpu
---- linux-4.4.88.orig/arch/h8300/Kconfig.cpu	2017-09-13 23:10:05.000000000 +0200
-+++ linux-4.4.88/arch/h8300/Kconfig.cpu	2017-09-17 21:15:32.584654434 +0200
+diff -Nur linux-4.4.302.orig/arch/h8300/boot/dts/edosk2674.dts linux-4.4.302/arch/h8300/boot/dts/edosk2674.dts
+--- linux-4.4.302.orig/arch/h8300/boot/dts/edosk2674.dts	2022-02-03 09:27:54.000000000 +0100
++++ linux-4.4.302/arch/h8300/boot/dts/edosk2674.dts	2026-08-27 14:19:08.312619408 +0200
+@@ -104,4 +104,15 @@
+ 		clocks = <&fclk>;
+ 		clock-names = "sci_ick";
+ 	};
++	flash: flash@0 {
++		compatible = "cfi-flash";
++		reg = <0x000000 0x400000>;
++		bank-width = <2>;
++		device-width = <2>;
++	};
++        ethernet: ethernet@f80000 {                                             
++                compatible = "smsc,lan91c94";                                   
++                reg = <0xf80000 0xfbffff>;                                      
++                interrupts = <16 0>;                                            
++        };                
+ };
+diff -Nur linux-4.4.302.orig/arch/h8300/boot/dts/h8300h_sim.dts linux-4.4.302/arch/h8300/boot/dts/h8300h_sim.dts
+--- linux-4.4.302.orig/arch/h8300/boot/dts/h8300h_sim.dts	2022-02-03 09:27:54.000000000 +0100
++++ linux-4.4.302/arch/h8300/boot/dts/h8300h_sim.dts	2026-08-27 14:17:11.028444049 +0200
+@@ -37,7 +37,7 @@
+ 
+ 	memory@400000 {
+ 		device_type = "memory";
+-		reg = <0x400000 0x400000>;
++		reg = <0x400000 0x800000>;
+ 	};
+ 
+ 	cpus {
+diff -Nur linux-4.4.302.orig/arch/h8300/Kconfig.cpu linux-4.4.302/arch/h8300/Kconfig.cpu
+--- linux-4.4.302.orig/arch/h8300/Kconfig.cpu	2022-02-03 09:27:54.000000000 +0100
++++ linux-4.4.302/arch/h8300/Kconfig.cpu	2026-08-27 14:17:11.028444049 +0200
 @@ -96,4 +96,8 @@
          hex "Load offset"
  	default 0
@@ -10,22 +41,69 @@ diff -Nur linux-4.4.88.orig/arch/h8300/Kconfig.cpu linux-4.4.88/arch/h8300/Kconf
 +	default 0x400000
 +
  endmenu
-diff -Nur linux-4.4.96.orig/arch/h8300/boot/dts/h8300h_sim.dts linux-4.4.96/arch/h8300/boot/dts/h8300h_sim.dts
---- linux-4.4.96.orig/arch/h8300/boot/dts/h8300h_sim.dts	2017-11-02 09:40:50.000000000 +0100
-+++ linux-4.4.96/arch/h8300/boot/dts/h8300h_sim.dts	2017-11-18 21:59:54.665879649 +0100
-@@ -37,7 +37,7 @@
+diff -Nur linux-4.4.302.orig/drivers/net/ethernet/smsc/Kconfig linux-4.4.302/drivers/net/ethernet/smsc/Kconfig
+--- linux-4.4.302.orig/drivers/net/ethernet/smsc/Kconfig	2022-02-03 09:27:54.000000000 +0100
++++ linux-4.4.302/drivers/net/ethernet/smsc/Kconfig	2026-08-27 14:17:21.080457216 +0200
+@@ -7,7 +7,7 @@
+ 	default y
+ 	depends on ARM || ARM64 || ATARI_ETHERNAT || BLACKFIN || COLDFIRE || \
+ 		   ISA || M32R || MAC || MIPS || MN10300 || NIOS2 || PCI || \
+-		   PCMCIA || SUPERH || XTENSA
++		   PCMCIA || SUPERH || XTENSA || H8300
+ 	---help---
+ 	  If you have a network (Ethernet) card belonging to this class, say Y.
  
- 	memory@400000 {
- 		device_type = "memory";
--		reg = <0x400000 0x400000>;
-+		reg = <0x400000 0x800000>;
- 	};
+@@ -36,9 +36,8 @@
+ 	tristate "SMC 91C9x/91C1xxx support"
+ 	select CRC32
+ 	select MII
+-	depends on !OF || GPIOLIB
+ 	depends on ARM || ARM64 || ATARI_ETHERNAT || BLACKFIN || COLDFIRE || \
+-		   M32R || MIPS || MN10300 || NIOS2 || SUPERH || XTENSA
++		   M32R || MIPS || MN10300 || NIOS2 || SUPERH || XTENSA || H8300
+ 	---help---
+ 	  This is a driver for SMC's 91x series of Ethernet chipsets,
+ 	  including the SMC91C94 and the SMC91C111. Say Y if you want it
+diff -Nur linux-4.4.302.orig/drivers/net/ethernet/smsc/smc91x.c linux-4.4.302/drivers/net/ethernet/smsc/smc91x.c
+--- linux-4.4.302.orig/drivers/net/ethernet/smsc/smc91x.c	2022-02-03 09:27:54.000000000 +0100
++++ linux-4.4.302/drivers/net/ethernet/smsc/smc91x.c	2026-08-27 14:17:21.080457216 +0200
+@@ -61,7 +61,7 @@
  
- 	cpus {
-diff -Nur linux-4.4.96.orig/drivers/tty/serial/sh-sci.c linux-4.4.96/drivers/tty/serial/sh-sci.c
---- linux-4.4.96.orig/drivers/tty/serial/sh-sci.c	2017-11-02 09:40:50.000000000 +0100
-+++ linux-4.4.96/drivers/tty/serial/sh-sci.c	2017-11-18 22:15:05.951976319 +0100
-@@ -898,8 +898,6 @@
+ /* Debugging level */
+ #ifndef SMC_DEBUG
+-#define SMC_DEBUG		0
++#define SMC_DEBUG		1
+ #endif
+ 
+ 
+@@ -2204,6 +2204,7 @@
+ };
+ MODULE_DEVICE_TABLE(of, smc91x_match);
+ 
++#if defined(CONFIG_GPIOLIB)
+ /**
+  * of_try_set_control_gpio - configure a gpio if it exists
+  */
+@@ -2228,6 +2229,15 @@
+ 
+ 	return 0;
+ }
++#else
++static int try_toggle_control_gpio(struct device *dev,
++                                  struct gpio_desc **desc,
++                                  const char *name, int index,
++                                  int value, unsigned int nsdelay)
++{
++	return 0;
++}
++#endif
+ #endif
+ 
+ /*
+diff -Nur linux-4.4.302.orig/drivers/tty/serial/sh-sci.c linux-4.4.302/drivers/tty/serial/sh-sci.c
+--- linux-4.4.302.orig/drivers/tty/serial/sh-sci.c	2022-02-03 09:27:54.000000000 +0100
++++ linux-4.4.302/drivers/tty/serial/sh-sci.c	2026-08-27 14:17:11.028444049 +0200
+@@ -889,8 +889,6 @@
  		/* overrun error */
  		if (tty_insert_flip_char(tport, 0, TTY_OVERRUN))
  			copied++;
@@ -34,7 +112,7 @@ diff -Nur linux-4.4.96.orig/drivers/tty/serial/sh-sci.c linux-4.4.96/drivers/tty
  	}
  
  	if (status & SCxSR_FER(port)) {
-@@ -972,7 +970,6 @@
+@@ -963,7 +961,6 @@
  		tty_insert_flip_char(tport, 0, TTY_OVERRUN);
  		tty_flip_buffer_push(tport);