~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/m68k/virt/platform.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 
  3 #include <linux/platform_device.h>
  4 #include <linux/interrupt.h>
  5 #include <linux/memblock.h>
  6 #include <asm/virt.h>
  7 #include <asm/irq.h>
  8 
  9 #define VIRTIO_BUS_NB   128
 10 
 11 static struct platform_device * __init virt_virtio_init(unsigned int id)
 12 {
 13         const struct resource res[] = {
 14                 DEFINE_RES_MEM(virt_bi_data.virtio.mmio + id * 0x200, 0x200),
 15                 DEFINE_RES_IRQ(virt_bi_data.virtio.irq + id),
 16         };
 17 
 18         return platform_device_register_simple("virtio-mmio", id,
 19                                                res, ARRAY_SIZE(res));
 20 }
 21 
 22 static int __init virt_platform_init(void)
 23 {
 24         const struct resource goldfish_tty_res[] = {
 25                 DEFINE_RES_MEM(virt_bi_data.tty.mmio, 1),
 26                 DEFINE_RES_IRQ(virt_bi_data.tty.irq),
 27         };
 28         /* this is the second gf-rtc, the first one is used by the scheduler */
 29         const struct resource goldfish_rtc_res[] = {
 30                 DEFINE_RES_MEM(virt_bi_data.rtc.mmio + 0x1000, 0x1000),
 31                 DEFINE_RES_IRQ(virt_bi_data.rtc.irq + 1),
 32         };
 33         struct platform_device *pdev1, *pdev2;
 34         struct platform_device *pdevs[VIRTIO_BUS_NB];
 35         unsigned int i;
 36         int ret = 0;
 37 
 38         if (!MACH_IS_VIRT)
 39                 return -ENODEV;
 40 
 41         /* We need this to have DMA'able memory provided to goldfish-tty */
 42         min_low_pfn = 0;
 43 
 44         pdev1 = platform_device_register_simple("goldfish_tty",
 45                                                 PLATFORM_DEVID_NONE,
 46                                                 goldfish_tty_res,
 47                                                 ARRAY_SIZE(goldfish_tty_res));
 48         if (IS_ERR(pdev1))
 49                 return PTR_ERR(pdev1);
 50 
 51         pdev2 = platform_device_register_simple("goldfish_rtc",
 52                                                 PLATFORM_DEVID_NONE,
 53                                                 goldfish_rtc_res,
 54                                                 ARRAY_SIZE(goldfish_rtc_res));
 55         if (IS_ERR(pdev2)) {
 56                 ret = PTR_ERR(pdev2);
 57                 goto err_unregister_tty;
 58         }
 59 
 60         for (i = 0; i < VIRTIO_BUS_NB; i++) {
 61                 pdevs[i] = virt_virtio_init(i);
 62                 if (IS_ERR(pdevs[i])) {
 63                         ret = PTR_ERR(pdevs[i]);
 64                         goto err_unregister_rtc_virtio;
 65                 }
 66         }
 67 
 68         return 0;
 69 
 70 err_unregister_rtc_virtio:
 71         while (i > 0)
 72                 platform_device_unregister(pdevs[--i]);
 73         platform_device_unregister(pdev2);
 74 err_unregister_tty:
 75         platform_device_unregister(pdev1);
 76 
 77         return ret;
 78 }
 79 
 80 arch_initcall(virt_platform_init);
 81 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php