Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'm68k-for-v7.1-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k

Pull m68k updates from Geert Uytterhoeven:

- Add support for QEMU virt-ctrl, and use it for system reset
and power off on the virt platform

- defconfig updates

- Miscellaneous fixes and improvements

* tag 'm68k-for-v7.1-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k:
m68k: virt: Switch to qemu-virt-ctrl driver
power: reset: Add QEMU virt-ctrl driver
m68k: defconfig: Update defconfigs for v7.0-rc1
m68k: emu: Replace unbounded sprintf() in nfhd_init_one()
m68k: uapi: Add ucontext.h
m68k: defconfig: hp300: Enable monochrome and 16-color linux logos
m68k: q40: Remove commented out code

+178 -64
+6
MAINTAINERS
··· 21592 21592 F: drivers/firmware/qemu_fw_cfg.c 21593 21593 F: include/uapi/linux/qemu_fw_cfg.h 21594 21594 21595 + QEMU VIRT MACHINE SYSTEM CONTROLLER DRIVER 21596 + M: Kuan-Wei Chiu <visitorckw@gmail.com> 21597 + L: linux-pm@vger.kernel.org 21598 + S: Maintained 21599 + F: drivers/power/reset/qemu-virt-ctrl.c 21600 + 21595 21601 QLOGIC QL41xxx FCOE DRIVER 21596 21602 M: Saurav Kashyap <skashyap@marvell.com> 21597 21603 M: Javed Hasan <jhasan@marvell.com>
+2
arch/m68k/Kconfig.machine
··· 133 133 select GOLDFISH_TIMER 134 134 select GOLDFISH_TTY 135 135 select M68040 136 + select POWER_RESET 137 + select POWER_RESET_QEMU_VIRT_CTRL 136 138 select RTC_CLASS 137 139 select RTC_DRV_GOLDFISH 138 140 select TTY
+2
arch/m68k/configs/amiga_defconfig
··· 386 386 CONFIG_FRAMEBUFFER_CONSOLE=y 387 387 CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y 388 388 CONFIG_LOGO=y 389 + CONFIG_LOGO_LINUX_MONO=y 390 + CONFIG_LOGO_LINUX_VGA16=y 389 391 CONFIG_SOUND=m 390 392 CONFIG_DMASOUND_PAULA=m 391 393 CONFIG_HID=m
+1 -1
arch/m68k/configs/apollo_defconfig
··· 344 344 CONFIG_FRAMEBUFFER_CONSOLE=y 345 345 CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y 346 346 CONFIG_LOGO=y 347 - # CONFIG_LOGO_LINUX_VGA16 is not set 347 + CONFIG_LOGO_LINUX_MONO=y 348 348 # CONFIG_LOGO_LINUX_CLUT224 is not set 349 349 CONFIG_HID=m 350 350 CONFIG_HIDRAW=y
+2
arch/m68k/configs/atari_defconfig
··· 366 366 CONFIG_FB_ATARI=y 367 367 CONFIG_FRAMEBUFFER_CONSOLE=y 368 368 CONFIG_LOGO=y 369 + CONFIG_LOGO_LINUX_MONO=y 370 + CONFIG_LOGO_LINUX_VGA16=y 369 371 CONFIG_SOUND=m 370 372 CONFIG_DMASOUND_ATARI=m 371 373 CONFIG_HID=m
+2 -2
arch/m68k/configs/hp300_defconfig
··· 346 346 CONFIG_FRAMEBUFFER_CONSOLE=y 347 347 CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y 348 348 CONFIG_LOGO=y 349 - # CONFIG_LOGO_LINUX_MONO is not set 350 - # CONFIG_LOGO_LINUX_VGA16 is not set 349 + CONFIG_LOGO_LINUX_MONO=y 350 + CONFIG_LOGO_LINUX_VGA16=y 351 351 CONFIG_HID=m 352 352 CONFIG_HIDRAW=y 353 353 CONFIG_UHID=m
+2
arch/m68k/configs/mac_defconfig
··· 365 365 CONFIG_FB_MAC=y 366 366 CONFIG_FRAMEBUFFER_CONSOLE=y 367 367 CONFIG_LOGO=y 368 + CONFIG_LOGO_LINUX_MONO=y 369 + CONFIG_LOGO_LINUX_VGA16=y 368 370 CONFIG_HID=m 369 371 CONFIG_HIDRAW=y 370 372 CONFIG_UHID=m
+2
arch/m68k/configs/multi_defconfig
··· 445 445 CONFIG_FRAMEBUFFER_CONSOLE=y 446 446 CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y 447 447 CONFIG_LOGO=y 448 + CONFIG_LOGO_LINUX_MONO=y 449 + CONFIG_LOGO_LINUX_VGA16=y 448 450 CONFIG_SOUND=m 449 451 CONFIG_DMASOUND_ATARI=m 450 452 CONFIG_DMASOUND_PAULA=m
+2
arch/m68k/configs/q40_defconfig
··· 353 353 CONFIG_FB=y 354 354 CONFIG_FRAMEBUFFER_CONSOLE=y 355 355 CONFIG_LOGO=y 356 + CONFIG_LOGO_LINUX_MONO=y 357 + CONFIG_LOGO_LINUX_VGA16=y 356 358 CONFIG_SOUND=m 357 359 CONFIG_DMASOUND_Q40=m 358 360 CONFIG_HID=m
+2 -1
arch/m68k/emu/nfblock.c
··· 132 132 dev->disk->minors = 16; 133 133 dev->disk->fops = &nfhd_ops; 134 134 dev->disk->private_data = dev; 135 - sprintf(dev->disk->disk_name, "nfhd%u", dev_id); 135 + snprintf(dev->disk->disk_name, sizeof(dev->disk->disk_name), "nfhd%u", 136 + dev_id); 136 137 set_capacity(dev->disk, (sector_t)blocks * (bsize / 512)); 137 138 err = add_disk(dev->disk); 138 139 if (err)
+4 -1
arch/m68k/include/asm/ucontext.h arch/m68k/include/uapi/asm/ucontext.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 */ 1 + /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 2 #ifndef _M68K_UCONTEXT_H 3 3 #define _M68K_UCONTEXT_H 4 + 5 + #include <asm/sigcontext.h> 6 + #include <asm/signal.h> 4 7 5 8 typedef int greg_t; 6 9 #define NGREG 18
-15
arch/m68k/q40/config.c
··· 74 74 { 75 75 /* useful for early debugging stages - writes kernel messages into SRAM */ 76 76 if (MACH_IS_Q40 && !strncmp(arg, "mem", 3)) { 77 - /*pr_info("using NVRAM debug, q40_mem_cptr=%p\n",q40_mem_cptr);*/ 78 77 _cpleft = 2000 - ((long)q40_mem_cptr-0xff020000) / 4; 79 78 register_console(&q40_console_driver); 80 79 } ··· 81 82 } 82 83 83 84 early_param("debug", q40_debug_setup); 84 - 85 - #if 0 86 - void printq40(char *str) 87 - { 88 - int l = strlen(str); 89 - char *p = q40_mem_cptr; 90 - 91 - while (l-- > 0 && _cpleft-- > 0) { 92 - *p = *str++; 93 - p += 4; 94 - } 95 - q40_mem_cptr = p; 96 - } 97 - #endif 98 85 99 86 static int halted; 100 87
+1 -41
arch/m68k/virt/config.c
··· 13 13 14 14 struct virt_booter_data virt_bi_data; 15 15 16 - #define VIRT_CTRL_REG_FEATURES 0x00 17 - #define VIRT_CTRL_REG_CMD 0x04 18 - 19 - static struct resource ctrlres; 20 - 21 - enum { 22 - CMD_NOOP, 23 - CMD_RESET, 24 - CMD_HALT, 25 - CMD_PANIC, 26 - }; 27 - 28 16 static void virt_get_model(char *str) 29 17 { 30 18 /* str is 80 characters long */ ··· 21 33 (u8)(virt_bi_data.qemu_version >> 16), 22 34 (u8)(virt_bi_data.qemu_version >> 8)); 23 35 } 24 - 25 - static void virt_halt(void) 26 - { 27 - void __iomem *base = (void __iomem *)virt_bi_data.ctrl.mmio; 28 - 29 - iowrite32be(CMD_HALT, base + VIRT_CTRL_REG_CMD); 30 - local_irq_disable(); 31 - while (1) 32 - ; 33 - } 34 - 35 36 static void virt_reset(void) 36 37 { 37 - void __iomem *base = (void __iomem *)virt_bi_data.ctrl.mmio; 38 - 39 - iowrite32be(CMD_RESET, base + VIRT_CTRL_REG_CMD); 40 - local_irq_disable(); 41 - while (1) 42 - ; 38 + do_kernel_restart(NULL); 43 39 } 44 40 45 41 /* ··· 85 113 virt_bi_data.tty.mmio); 86 114 setup_earlycon(earlycon); 87 115 88 - ctrlres = (struct resource) 89 - DEFINE_RES_MEM_NAMED(virt_bi_data.ctrl.mmio, 0x100, 90 - "virtctrl"); 91 - 92 - if (request_resource(&iomem_resource, &ctrlres)) { 93 - pr_err("Cannot allocate virt controller resource\n"); 94 - return; 95 - } 96 - 97 116 mach_init_IRQ = virt_init_IRQ; 98 117 mach_sched_init = virt_sched_init; 99 118 mach_get_model = virt_get_model; 100 119 mach_reset = virt_reset; 101 - mach_halt = virt_halt; 102 - 103 - register_platform_power_off(virt_halt); 104 120 }
+17 -3
arch/m68k/virt/platform.c
··· 30 30 DEFINE_RES_MEM(virt_bi_data.rtc.mmio + 0x1000, 0x1000), 31 31 DEFINE_RES_IRQ(virt_bi_data.rtc.irq + 1), 32 32 }; 33 - struct platform_device *pdev1, *pdev2; 33 + const struct resource virt_ctrl_res[] = { 34 + DEFINE_RES_MEM(virt_bi_data.ctrl.mmio, 0x100), 35 + }; 36 + struct platform_device *pdev1, *pdev2, *pdev3; 34 37 struct platform_device *pdevs[VIRTIO_BUS_NB]; 35 38 unsigned int i; 36 39 int ret = 0; ··· 60 57 goto err_unregister_tty; 61 58 } 62 59 60 + pdev3 = platform_device_register_simple("qemu-virt-ctrl", 61 + PLATFORM_DEVID_NONE, 62 + virt_ctrl_res, 63 + ARRAY_SIZE(virt_ctrl_res)); 64 + if (IS_ERR(pdev3)) { 65 + ret = PTR_ERR(pdev3); 66 + goto err_unregister_rtc; 67 + } 68 + 63 69 for (i = 0; i < VIRTIO_BUS_NB; i++) { 64 70 pdevs[i] = virt_virtio_init(i); 65 71 if (IS_ERR(pdevs[i])) { 66 72 ret = PTR_ERR(pdevs[i]); 67 - goto err_unregister_rtc_virtio; 73 + goto err_unregister_virtio; 68 74 } 69 75 } 70 76 71 77 return 0; 72 78 73 - err_unregister_rtc_virtio: 79 + err_unregister_virtio: 74 80 while (i > 0) 75 81 platform_device_unregister(pdevs[--i]); 82 + platform_device_unregister(pdev3); 83 + err_unregister_rtc: 76 84 platform_device_unregister(pdev2); 77 85 err_unregister_tty: 78 86 platform_device_unregister(pdev1);
+10
drivers/power/reset/Kconfig
··· 354 354 help 355 355 This driver supports reset or low power mode handling for Mellanox BlueField. 356 356 357 + config POWER_RESET_QEMU_VIRT_CTRL 358 + tristate "QEMU Virt Machine System Controller" 359 + depends on HAS_IOMEM 360 + help 361 + This driver supports the system reset and power off functionality 362 + provided by the QEMU 'virt-ctrl' device. 363 + 364 + Say Y here if you are running Linux on a QEMU virtual machine that 365 + provides this controller, such as the m68k virt machine. 366 + 357 367 endif
+1
drivers/power/reset/Makefile
··· 41 41 obj-$(CONFIG_POWER_RESET_SC27XX) += sc27xx-poweroff.o 42 42 obj-$(CONFIG_NVMEM_REBOOT_MODE) += nvmem-reboot-mode.o 43 43 obj-$(CONFIG_POWER_MLXBF) += pwr-mlxbf.o 44 + obj-$(CONFIG_POWER_RESET_QEMU_VIRT_CTRL) += qemu-virt-ctrl.o
+122
drivers/power/reset/qemu-virt-ctrl.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * QEMU Virt Machine System Controller Driver 4 + * 5 + * Copyright (C) 2026 Kuan-Wei Chiu <visitorckw@gmail.com> 6 + */ 7 + 8 + #include <linux/io.h> 9 + #include <linux/module.h> 10 + #include <linux/mod_devicetable.h> 11 + #include <linux/platform_device.h> 12 + #include <linux/reboot.h> 13 + 14 + /* Registers */ 15 + #define VIRT_CTRL_REG_FEATURES 0x00 16 + #define VIRT_CTRL_REG_CMD 0x04 17 + 18 + /* Commands */ 19 + #define CMD_NOOP 0 20 + #define CMD_RESET 1 21 + #define CMD_HALT 2 22 + #define CMD_PANIC 3 23 + 24 + struct qemu_virt_ctrl { 25 + void __iomem *base; 26 + struct notifier_block reboot_nb; 27 + }; 28 + 29 + static inline void virt_ctrl_write32(u32 val, void __iomem *addr) 30 + { 31 + if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) 32 + iowrite32be(val, addr); 33 + else 34 + iowrite32(val, addr); 35 + } 36 + 37 + static int qemu_virt_ctrl_power_off(struct sys_off_data *data) 38 + { 39 + struct qemu_virt_ctrl *ctrl = data->cb_data; 40 + 41 + virt_ctrl_write32(CMD_HALT, ctrl->base + VIRT_CTRL_REG_CMD); 42 + 43 + return NOTIFY_DONE; 44 + } 45 + 46 + static int qemu_virt_ctrl_restart(struct sys_off_data *data) 47 + { 48 + struct qemu_virt_ctrl *ctrl = data->cb_data; 49 + 50 + virt_ctrl_write32(CMD_RESET, ctrl->base + VIRT_CTRL_REG_CMD); 51 + 52 + return NOTIFY_DONE; 53 + } 54 + 55 + static int qemu_virt_ctrl_reboot_notify(struct notifier_block *nb, 56 + unsigned long action, void *data) 57 + { 58 + struct qemu_virt_ctrl *ctrl = container_of(nb, struct qemu_virt_ctrl, reboot_nb); 59 + 60 + if (action == SYS_HALT) 61 + virt_ctrl_write32(CMD_HALT, ctrl->base + VIRT_CTRL_REG_CMD); 62 + 63 + return NOTIFY_DONE; 64 + } 65 + 66 + static int qemu_virt_ctrl_probe(struct platform_device *pdev) 67 + { 68 + struct qemu_virt_ctrl *ctrl; 69 + int ret; 70 + 71 + ctrl = devm_kzalloc(&pdev->dev, sizeof(*ctrl), GFP_KERNEL); 72 + if (!ctrl) 73 + return -ENOMEM; 74 + 75 + ctrl->base = devm_platform_ioremap_resource(pdev, 0); 76 + if (IS_ERR(ctrl->base)) 77 + return PTR_ERR(ctrl->base); 78 + 79 + ret = devm_register_sys_off_handler(&pdev->dev, 80 + SYS_OFF_MODE_RESTART, 81 + SYS_OFF_PRIO_DEFAULT, 82 + qemu_virt_ctrl_restart, 83 + ctrl); 84 + if (ret) 85 + return dev_err_probe(&pdev->dev, ret, 86 + "cannot register restart handler\n"); 87 + 88 + ret = devm_register_sys_off_handler(&pdev->dev, 89 + SYS_OFF_MODE_POWER_OFF, 90 + SYS_OFF_PRIO_DEFAULT, 91 + qemu_virt_ctrl_power_off, 92 + ctrl); 93 + if (ret) 94 + return dev_err_probe(&pdev->dev, ret, 95 + "cannot register power-off handler\n"); 96 + 97 + ctrl->reboot_nb.notifier_call = qemu_virt_ctrl_reboot_notify; 98 + ret = devm_register_reboot_notifier(&pdev->dev, &ctrl->reboot_nb); 99 + if (ret) 100 + return dev_err_probe(&pdev->dev, ret, "cannot register reboot notifier\n"); 101 + 102 + return 0; 103 + } 104 + 105 + static const struct platform_device_id qemu_virt_ctrl_id[] = { 106 + { "qemu-virt-ctrl", 0 }, 107 + { } 108 + }; 109 + MODULE_DEVICE_TABLE(platform, qemu_virt_ctrl_id); 110 + 111 + static struct platform_driver qemu_virt_ctrl_driver = { 112 + .probe = qemu_virt_ctrl_probe, 113 + .driver = { 114 + .name = "qemu-virt-ctrl", 115 + }, 116 + .id_table = qemu_virt_ctrl_id, 117 + }; 118 + module_platform_driver(qemu_virt_ctrl_driver); 119 + 120 + MODULE_AUTHOR("Kuan-Wei Chiu <visitorckw@gmail.com>"); 121 + MODULE_DESCRIPTION("QEMU Virt Machine System Controller Driver"); 122 + MODULE_LICENSE("GPL");