Lines Matching +full:tegra124 +full:- +full:xusb
1 /*-
211 #define IPFS_WR4(_sc, _r, _v) bus_write_4((_sc)->mem_res_ipfs, (_r), (_v))
212 #define IPFS_RD4(_sc, _r) bus_read_4((_sc)->mem_res_ipfs, (_r))
213 #define FPCI_WR4(_sc, _r, _v) bus_write_4((_sc)->mem_res_fpci, (_r), (_v))
214 #define FPCI_RD4(_sc, _r) bus_read_4((_sc)->mem_res_fpci, (_r))
216 #define LOCK(_sc) mtx_lock(&(_sc)->mtx)
217 #define UNLOCK(_sc) mtx_unlock(&(_sc)->mtx)
219 mtx_sleep(sc, &sc->mtx, 0, "tegra_xhci", timeout);
221 mtx_init(&_sc->mtx, device_get_nameunit(_sc->dev), "tegra_xhci", MTX_DEF)
222 #define LOCK_DESTROY(_sc) mtx_destroy(&_sc->mtx)
223 #define ASSERT_LOCKED(_sc) mtx_assert(&_sc->mtx, MA_OWNED)
224 #define ASSERT_UNLOCKED(_sc) mtx_assert(&_sc->mtx, MA_NOTOWNED)
302 "avddio-pex-supply",
303 "dvddio-pex-supply",
304 "avdd-usb-supply",
305 "avdd-pll-utmip-supply",
306 "avdd-pll-erefe-supply",
307 "avdd-usb-ss-pll-supply",
308 "hvdd-usb-ss-supply",
309 "hvdd-usb-ss-pll-e-supply",
314 "usb2-0",
315 "usb2-1",
316 "usb2-2",
317 "usb3-0",
330 "dvddio-pex-supply",
331 "hvddio-pex-supply",
332 "avdd-usb-supply",
333 "avdd-pll-utmip-supply",
334 "avdd-pll-uerefe-supply",
335 "dvdd-usb-ss-pll-supply",
336 "hvdd-usb-ss-pll-e-supply",
341 "usb2-0",
342 "usb2-1",
343 "usb2-2",
344 "usb2-3",
345 "usb3-0",
346 "usb3-1",
359 {"nvidia,tegra124-xusb", (uintptr_t)&tegra124_soc},
360 {"nvidia,tegra210-xusb", (uintptr_t)&tegra210_soc},
387 for (i = 0; sc->soc->regulator_names[i] != NULL; i++) {
388 if (i >= nitems(sc->regulators)) {
389 device_printf(sc->dev,
393 rv = regulator_get_by_ofw_property(sc->dev, 0,
394 sc->soc->regulator_names[i], sc->regulators + i);
396 device_printf(sc->dev,
398 sc->soc->regulator_names[i]);
403 rv = hwreset_get_by_ofw_name(sc->dev, 0, "xusb_host",
404 &sc->hwreset_xusb_host);
406 device_printf(sc->dev, "Cannot get 'xusb_host' reset\n");
409 rv = hwreset_get_by_ofw_name(sc->dev, 0, "xusb_ss",
410 &sc->hwreset_xusb_ss);
412 device_printf(sc->dev, "Cannot get 'xusb_ss' reset\n");
417 for (i = 0; sc->soc->phy_names[i] != NULL; i++) {
418 if (i >= nitems(sc->phys)) {
419 device_printf(sc->dev,
423 rv = phy_get_by_ofw_name(sc->dev, 0, sc->soc->phy_names[i],
424 sc->phys + i);
426 device_printf(sc->dev, "Cannot get '%s' phy.\n",
427 sc->soc->phy_names[i]);
432 rv = clk_get_by_ofw_name(sc->dev, 0, "xusb_host",
433 &sc->clk_xusb_host);
435 device_printf(sc->dev, "Cannot get 'xusb_host' clock\n");
438 rv = clk_get_by_ofw_name(sc->dev, 0, "xusb_falcon_src",
439 &sc->clk_xusb_falcon_src);
441 device_printf(sc->dev, "Cannot get 'xusb_falcon_src' clock\n");
444 rv = clk_get_by_ofw_name(sc->dev, 0, "xusb_ss",
445 &sc->clk_xusb_ss);
447 device_printf(sc->dev, "Cannot get 'xusb_ss' clock\n");
450 rv = clk_get_by_ofw_name(sc->dev, 0, "xusb_hs_src",
451 &sc->clk_xusb_hs_src);
453 device_printf(sc->dev, "Cannot get 'xusb_hs_src' clock\n");
456 rv = clk_get_by_ofw_name(sc->dev, 0, "xusb_fs_src",
457 &sc->clk_xusb_fs_src);
459 device_printf(sc->dev, "Cannot get 'xusb_fs_src' clock\n");
463 rv = clk_get_by_name(sc->dev, "xusb_gate", &sc->clk_xusb_gate);
465 device_printf(sc->dev, "Cannot get 'xusb_gate' clock\n");
476 rv = hwreset_assert(sc->hwreset_xusb_host);
478 device_printf(sc->dev, "Cannot reset 'xusb_host' reset\n");
481 rv = hwreset_assert(sc->hwreset_xusb_ss);
483 device_printf(sc->dev, "Cannot reset 'xusb_ss' reset\n");
488 for (i = 0; i < nitems(sc->regulators); i++) {
489 if (sc->regulators[i] == NULL)
491 rv = regulator_enable(sc->regulators[i]);
493 device_printf(sc->dev,
495 sc->soc->regulator_names[i]);
500 /* Power off XUSB host and XUSB SS domains. */
503 device_printf(sc->dev, "Cannot powerdown 'xusba' domain\n");
508 device_printf(sc->dev, "Cannot powerdown 'xusbc' domain\n");
512 /* Setup XUSB ss_src clock first */
513 clk_set_freq(sc->clk_xusb_ss, TEGRA_XHCI_SS_HIGH_SPEED, 0);
517 /* The XUSB gate clock must be enabled before XUSBA can be powered. */
518 rv = clk_enable(sc->clk_xusb_gate);
520 device_printf(sc->dev,
525 /* Power on XUSB host and XUSB SS domains. */
527 sc->clk_xusb_host, sc->hwreset_xusb_host);
529 device_printf(sc->dev, "Cannot powerup 'xusbc' domain\n");
533 sc->clk_xusb_ss, sc->hwreset_xusb_ss);
535 device_printf(sc->dev, "Cannot powerup 'xusba' domain\n");
540 rv = clk_enable(sc->clk_xusb_falcon_src);
542 device_printf(sc->dev,
546 rv = clk_enable(sc->clk_xusb_fs_src);
548 device_printf(sc->dev,
552 rv = clk_enable(sc->clk_xusb_hs_src);
554 device_printf(sc->dev,
560 for (i = 0; i < nitems(sc->phys); i++) {
561 if (sc->phys[i] == NULL)
563 rv = phy_enable(sc->phys[i]);
565 device_printf(sc->dev, "Cannot enable '%s' phy\n",
566 sc->soc->phy_names[i]);
597 device_printf(sc->dev,
605 device_printf(sc->dev,
616 for (i = 250; i > 0; i--) {
623 device_printf(sc->dev,
643 rv = clk_set_freq(sc->clk_xusb_falcon_src, req_data * 1000ULL,
646 rv = clk_get_freq(sc->clk_xusb_falcon_src, &freq);
654 rv = clk_set_freq(sc->clk_xusb_ss, req_data * 1000ULL,
657 rv = clk_get_freq(sc->clk_xusb_ss, &freq);
695 device_printf(sc->dev,
701 device_printf(sc->dev,
718 device_printf(sc->dev,
719 "XUSB CPU firmware hang!!! CPUCTL: 0x%08X\n",
758 device_printf(sc->dev,
759 "XUSB CPU is already loaded, CPUCTL: 0x%08X\n",
764 fw = firmware_get(sc->soc->fw_name);
766 device_printf(sc->dev, "Cannot read xusb firmware\n");
771 fw_hdr = (const struct tegra_xusb_fw_hdr *)fw->data;
772 fw_size = fw_hdr->fwimg_len;
774 fw_vaddr = kmem_alloc_contig(fw_size, M_WAITOK, 0, -1UL, PAGE_SIZE, 0,
778 memcpy(fw_vaddr, fw->data, fw_size);
781 sc->fw_vaddr = fw_vaddr;
782 sc->fw_size = fw_size;
796 code_tags = howmany(fw_hdr->boot_codetag, XUSB_CSB_IMEM_BLOCK_SIZE);
797 code_size = howmany(fw_hdr->boot_codesize, XUSB_CSB_IMEM_BLOCK_SIZE);
806 /* Program FALCON auto-fill range and block count */
814 for (i = 500; i > 0; i--) {
821 device_printf(sc->dev, "Timedout while wating for DMA, "
828 CSB_WR4(sc, XUSB_FALCON_BOOTVEC, fw_hdr->boot_codetag);
832 for (i = 50; i > 0; i--) {
838 device_printf(sc->dev, "Timedout while wating for FALCON cpu, "
843 fw_timespec.tv_sec = fw_hdr->fwimg_created_time;
846 device_printf(sc->dev,
849 (fw_hdr->version_id >> 24) & 0xFF,(fw_hdr->version_id >> 15) & 0xFF,
850 fw_hdr->version_id & 0xFFFF,
864 base_addr = rman_get_start(sc->xhci_softc.sc_io_res);
907 if (ofw_bus_search_compatible(dev, compat_data)->ocd_data != 0) {
922 xsc = &sc->xhci_softc;
929 if (sc->xhci_inited) {
930 usb_callout_drain(&xsc->sc_callout);
934 if (xsc->sc_irq_res && xsc->sc_intr_hdl) {
935 bus_teardown_intr(dev, xsc->sc_irq_res, xsc->sc_intr_hdl);
936 xsc->sc_intr_hdl = NULL;
938 if (xsc->sc_irq_res) {
940 rman_get_rid(xsc->sc_irq_res), xsc->sc_irq_res);
941 xsc->sc_irq_res = NULL;
943 if (xsc->sc_io_res != NULL) {
945 rman_get_rid(xsc->sc_io_res), xsc->sc_io_res);
946 xsc->sc_io_res = NULL;
948 if (sc->xhci_inited)
950 if (sc->irq_hdl_mbox != NULL)
951 bus_teardown_intr(dev, sc->irq_res_mbox, sc->irq_hdl_mbox);
952 if (sc->fw_vaddr != NULL)
953 kmem_free(sc->fw_vaddr, sc->fw_size);
967 sc->dev = dev;
968 sc->soc = (struct xhci_soc *)ofw_bus_search_compatible(dev,
969 compat_data)->ocd_data;
971 xsc = &sc->xhci_softc;
987 xsc->sc_io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
989 if (xsc->sc_io_res == NULL) {
996 sc->mem_res_fpci = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
998 if (sc->mem_res_fpci == NULL) {
1005 sc->mem_res_ipfs = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
1007 if (sc->mem_res_ipfs == NULL) {
1015 xsc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
1017 if (xsc->sc_irq_res == NULL) {
1023 sc->irq_res_mbox = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
1025 if (sc->irq_res_mbox == NULL) {
1033 device_printf(dev, "Could not initialize XUSB hardware\n");
1040 device_printf(sc->dev, "Could not enable XUSB firmware\n");
1045 xsc->sc_bus.parent = dev;
1046 xsc->sc_bus.devices = xsc->sc_devices;
1047 xsc->sc_bus.devices_max = XHCI_MAX_DEVICES;
1049 xsc->sc_io_tag = rman_get_bustag(xsc->sc_io_res);
1050 xsc->sc_io_hdl = rman_get_bushandle(xsc->sc_io_res);
1051 xsc->sc_io_size = rman_get_size(xsc->sc_io_res);
1052 strlcpy(xsc->sc_vendor, "Nvidia", sizeof(xsc->sc_vendor));
1055 xsc->sc_bus.bdev = device_add_child(sc->dev, "usbus", DEVICE_UNIT_ANY);
1056 if (xsc->sc_bus.bdev == NULL) {
1057 device_printf(sc->dev, "Could not add USB device\n");
1061 device_set_ivars(xsc->sc_bus.bdev, &xsc->sc_bus);
1062 device_set_desc(xsc->sc_bus.bdev, "Nvidia USB 3.0 controller");
1064 rv = xhci_init(xsc, sc->dev, 1);
1066 device_printf(sc->dev, "USB init failed: %d\n", rv);
1069 sc->xhci_inited = true;
1072 device_printf(sc->dev,
1077 rv = bus_setup_intr(dev, sc->irq_res_mbox, INTR_TYPE_MISC | INTR_MPSAFE,
1078 NULL, intr_mbox, sc, &sc->irq_hdl_mbox);
1081 xsc->sc_intr_hdl = NULL;
1085 rv = bus_setup_intr(dev, xsc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
1086 NULL, (driver_intr_t *)xhci_interrupt, xsc, &xsc->sc_intr_hdl);
1089 xsc->sc_intr_hdl = NULL;
1094 rv = device_probe_and_attach(xsc->sc_bus.bdev);
1096 device_printf(sc->dev, "Could not initialize USB: %d\n", rv);