From owner-dev-commits-src-main@freebsd.org Wed Sep 29 14:20:06 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3F809675417; Wed, 29 Sep 2021 14:20:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4HKJRp1B1fz3q5f; Wed, 29 Sep 2021 14:20:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 09F1F19996; Wed, 29 Sep 2021 14:20:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 18TEK53g045864; Wed, 29 Sep 2021 14:20:05 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 18TEK5pl045861; Wed, 29 Sep 2021 14:20:05 GMT (envelope-from git) Date: Wed, 29 Sep 2021 14:20:05 GMT Message-Id: <202109291420.18TEK5pl045861@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Marcin Wojtas Subject: git: adbce5ff747b - main - sdhci_xenon: add ACPI support MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mw X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: adbce5ff747b6372b6cda915d06fe52b4a67b4d8 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Sep 2021 14:20:06 -0000 The branch main has been updated by mw: URL: https://cgit.FreeBSD.org/src/commit/?id=adbce5ff747b6372b6cda915d06fe52b4a67b4d8 commit adbce5ff747b6372b6cda915d06fe52b4a67b4d8 Author: Bartlomiej Grzesik AuthorDate: 2021-07-21 14:36:11 +0000 Commit: Marcin Wojtas CommitDate: 2021-09-29 14:19:28 +0000 sdhci_xenon: add ACPI support Add support for ACPI device probing for SDHCI controller found on Marvell chips. Reviewed by: mw Sponsored by: Semihalf Differential revision: https://reviews.freebsd.org/D31600 --- sys/conf/files.arm64 | 1 + sys/dev/sdhci/sdhci_xenon_acpi.c | 140 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64 index 0d33e315db65..9dd071b97e37 100644 --- a/sys/conf/files.arm64 +++ b/sys/conf/files.arm64 @@ -275,6 +275,7 @@ dev/psci/smccc.c standard dev/safexcel/safexcel.c optional safexcel fdt dev/sdhci/sdhci_xenon.c optional sdhci_xenon sdhci +dev/sdhci/sdhci_xenon_acpi.c optional sdhci_xenon sdhci acpi dev/sdhci/sdhci_xenon_fdt.c optional sdhci_xenon sdhci fdt dev/uart/uart_cpu_arm64.c optional uart diff --git a/sys/dev/sdhci/sdhci_xenon_acpi.c b/sys/dev/sdhci/sdhci_xenon_acpi.c new file mode 100644 index 000000000000..1bd4c03c67e4 --- /dev/null +++ b/sys/dev/sdhci/sdhci_xenon_acpi.c @@ -0,0 +1,140 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2021 Semihalf + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include + +#ifdef EXT_RESOURCES +#include +#endif + +#include +#include + +#include "mmcbr_if.h" +#include "sdhci_if.h" + +#include "opt_mmccam.h" +#include "opt_soc.h" + +static char *sdhci_xenon_hids[] = { + "MRVL0002", + "MRVL0003", + "MRVL0004", + NULL +}; + +static int +sdhci_xenon_acpi_probe(device_t dev) +{ + device_t bus; + int err; + + bus = device_get_parent(dev); + + err = ACPI_ID_PROBE(bus, dev, sdhci_xenon_hids, NULL); + if (err <= 0) { + device_set_desc(dev, "Armada Xenon SDHCI controller"); + return (err); + } + + return (ENXIO); +} + +static int +sdhci_xenon_acpi_attach(device_t dev) +{ + struct sdhci_xenon_softc *sc; + struct sdhci_slot *slot; + struct mmc_helper mmc_helper; + + sc = device_get_softc(dev); + memset(&mmc_helper, 0, sizeof(mmc_helper)); + + slot = malloc(sizeof(*slot), M_DEVBUF, M_ZERO | M_WAITOK); + if (!slot) + return (ENOMEM); + + /* + * Don't use regularators. + * In ACPI mode the firmware takes care of them for us + */ + sc->skip_regulators = true; + sc->slot = slot; + + if (mmc_parse(dev, &mmc_helper, &slot->host) != 0) + return (ENXIO); + + if (mmc_helper.props & MMC_PROP_NON_REMOVABLE) { + slot->opt |= SDHCI_NON_REMOVABLE; + if (bootverbose) + device_printf(dev, "Non-removable media\n"); + } + + sc->wp_inverted = mmc_helper.props & MMC_PROP_WP_INVERTED; + + return (sdhci_xenon_attach(dev)); +} + +static device_method_t sdhci_xenon_acpi_methods[] = { + /* device_if */ + DEVMETHOD(device_probe, sdhci_xenon_acpi_probe), + DEVMETHOD(device_attach, sdhci_xenon_acpi_attach), + DEVMETHOD(device_detach, sdhci_xenon_detach), + + DEVMETHOD(sdhci_get_card_present, sdhci_generic_get_card_present), + + DEVMETHOD_END +}; + +DEFINE_CLASS_1(sdhci_xenon, sdhci_xenon_acpi_driver, sdhci_xenon_acpi_methods, + sizeof(struct sdhci_xenon_softc), sdhci_xenon_driver); + +static devclass_t sdhci_xenon_acpi_devclass; + +DRIVER_MODULE(sdhci_xenon, acpi, sdhci_xenon_acpi_driver, + sdhci_xenon_acpi_devclass, NULL, NULL); + +#ifndef MMCCAM +MMC_DECLARE_BRIDGE(sdhci_xenon_acpi); +#endif