From d11ced1e1fb93676942e51618eb53c140f541890 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 8 May 2017 22:14:28 +0200 Subject: [PATCH 029/192] arm_coreboot: Support EHCI. --- gentpl.py | 2 +- grub-core/Makefile.core.def | 2 ++ grub-core/bus/usb/ehci-fdt.c | 45 ++++++++++++++++++++++++++++++++++++++++++++ grub-core/bus/usb/usbtrans.c | 2 +- include/grub/usb.h | 4 ++++ 5 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 grub-core/bus/usb/ehci-fdt.c diff --git a/gentpl.py b/gentpl.py index ed268178b..da67965a4 100644 --- a/gentpl.py +++ b/gentpl.py @@ -63,7 +63,7 @@ GROUPS["cmos"] = GROUPS["x86"][:] + ["mips_loongson", "mips_qemu_mips", "sparc64_ieee1275", "powerpc_ieee1275"] GROUPS["cmos"].remove("i386_efi"); GROUPS["cmos"].remove("x86_64_efi"); GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"] -GROUPS["usb"] = GROUPS["pci"] +GROUPS["usb"] = GROUPS["pci"] + ["arm_coreboot"] # If gfxterm is main output console integrate it into kernel GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot", "arm_coreboot" ] diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 4745eb4d9..5ce506597 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -593,8 +593,10 @@ module = { module = { name = ehci; common = bus/usb/ehci.c; + arm_coreboot = bus/usb/ehci-fdt.c; pci = bus/usb/ehci-pci.c; enable = pci; + enable = arm_coreboot; }; module = { diff --git a/grub-core/bus/usb/ehci-fdt.c b/grub-core/bus/usb/ehci-fdt.c new file mode 100644 index 000000000..29b50bdd5 --- /dev/null +++ b/grub-core/bus/usb/ehci-fdt.c @@ -0,0 +1,45 @@ +/* ehci.c - EHCI Support. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +static grub_err_t +ehci_attach(const struct grub_fdtbus_dev *dev) +{ + grub_dprintf ("ehci", "Found generic-ehci\n"); + + grub_ehci_init_device (grub_fdtbus_map_reg (dev, 0, 0)); + return 0; +} + +struct grub_fdtbus_driver ehci = +{ + .compatible = "generic-ehci", + .attach = ehci_attach +}; + +void +grub_ehci_pci_scan (void) +{ + grub_fdtbus_register (&ehci); +} diff --git a/grub-core/bus/usb/usbtrans.c b/grub-core/bus/usb/usbtrans.c index 9266e4931..85f081fff 100644 --- a/grub-core/bus/usb/usbtrans.c +++ b/grub-core/bus/usb/usbtrans.c @@ -18,7 +18,7 @@ */ #include -#include +#include #include #include #include diff --git a/include/grub/usb.h b/include/grub/usb.h index 11d96481f..512ae1dd0 100644 --- a/include/grub/usb.h +++ b/include/grub/usb.h @@ -321,5 +321,9 @@ grub_usb_err_t grub_usb_check_transfer (grub_usb_transfer_t trans, grub_size_t *actual); void grub_usb_cancel_transfer (grub_usb_transfer_t trans); +void +grub_ehci_init_device (volatile void *regs); +void +grub_ehci_pci_scan (void); #endif /* GRUB_USB_H */ -- 2.13.4