From nobody Tue Mar 29 22:59:58 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 0BA491A34A16; Tue, 29 Mar 2022 22:59:59 +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 4KSlQ63NKGz4TV5; Tue, 29 Mar 2022 22:59:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648594798; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=drWSZv6PocmCyQ3VF+WHgji3sSEO+JWBAikcRTEn9Pk=; b=KEHGzCfx6+RvT0KRZHadF6av5OZwD/gpw2BRl0Nv8We1uCwYuA8mWFIhbUtge/vkbBkzI6 3eKAm+skmujrgP3Mo1yT/wr82K5E/qi2uiHeuIIgKurRXq7VfyMm7VWCGK4srvMYl5KVdN jB+1om0v8AHjZQ/zEIHn06RhbX+3wZ0W9JlN2+YrBEe+X0rF31xXOpYSUH4X+qEd4EgYux HLWaCZBgB8AiJ+7kNEKTMpk4zofdYMa2EzbQ7cgo9xjipR7sS/oQZCjMWdeWWl7pNPUpNk FTw3ExTfJB0dyTRXlc9uzlTqSuZv90NCeVp9QFkPCZ7SrrsqHdstJMsCbl71Sw== 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 1B5CC27889; Tue, 29 Mar 2022 22:59:58 +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 22TMxwSJ049943; Tue, 29 Mar 2022 22:59:58 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 22TMxw12049942; Tue, 29 Mar 2022 22:59:58 GMT (envelope-from git) Date: Tue, 29 Mar 2022 22:59:58 GMT Message-Id: <202203292259.22TMxw12049942@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Marcin Wojtas Subject: git: 993cd606c238 - stable/13 - sdhci_xenon: add ACPI support List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org 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/stable/13 X-Git-Reftype: branch X-Git-Commit: 993cd606c238a847a1b1710267483c27df9812cd Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648594798; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=drWSZv6PocmCyQ3VF+WHgji3sSEO+JWBAikcRTEn9Pk=; b=UZiYdMJbRdlCjFo5W34cPCXzYzXrESB7gIRemFKoMOh9vpPqPHGsT3WGhe5gEvTBa1HV5o yn7tuQ1d/V0ASzD6w7D6+fx1STlvtE15q6USV3W6UkocpKuvKZwiXxatMEuEfacypZHgz/ sjK1ES/U2bIksD8rUBwEw6p9pUHDUWUBvEucs24d9wxYt99j8uD4bh1fzKcSPYYN95Twjp CPa3Zokzv7DDo9t+fgLMjqCVKTTnKexKE76y7tatk7JysdLiq+MRASFUL+9ZfLwO+U6g9Z jhONxykJDv6VTDTNbfVhknWt77oBF48QhIwC0FiVbgsvb+gfN8Br6HqcPUzpnA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1648594798; a=rsa-sha256; cv=none; b=ZZH8XvfrrxQA1+J/q/U6Li6C0BWaeRff2tduC4QTLmCZnwuJJk79LcaLi851W2QpAfq4pD UoerWYQsLCDsKzZqKrljQuNKteZqLut98M8CK6aBuMbYZFCc+WqzLQtBXNyQJ621L/KIqY LvpYm3axPSEVetfD3TZ4iKyl/0+r56EgKM+YFO6MRiHR7fvxhbzbrFaaZlQPhc9AbItCCC tGt5CNdKHJ4OC0xUOf8VzVGPHTnwx67jMRYZfZLV1W43avUcdiOoehjtVTb0qvV9ZmRzC2 HNPOAILjYYvdWIT9J7hG8gSHVRludHU7VYJIk1pclFmL/3NEnawwg7r0UIXq4A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by mw: URL: https://cgit.FreeBSD.org/src/commit/?id=993cd606c238a847a1b1710267483c27df9812cd commit 993cd606c238a847a1b1710267483c27df9812cd Author: Bartlomiej Grzesik AuthorDate: 2021-07-21 14:36:11 +0000 Commit: Marcin Wojtas CommitDate: 2022-03-29 22:24:27 +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 (cherry picked from commit adbce5ff747b6372b6cda915d06fe52b4a67b4d8) --- 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 f1a2efe16448..89dae243011f 100644 --- a/sys/conf/files.arm64 +++ b/sys/conf/files.arm64 @@ -264,6 +264,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