From nobody Sun Aug 16 17:17:15 2026 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 4hNN1m1HLsz6pLny for ; Sun, 16 Aug 2026 17:17:16 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hNN1l2J2Dz3YBw for ; Sun, 16 Aug 2026 17:17:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786900635; 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=x4nHFgFYHk15uZfR4Hl/Vbi0W2XXsUXnJnQA8KiYdug=; b=ZxaRJ19oikQ0rJgHGjUfe7Ct4YlUTnRFldZP3tRS2GDR0c1JweUotUKbGgVmTFexn50gus jvbqcaw0Im2WoY24iOdsZBfwLEeM3IR//PnVktxPKGxbPc0bL8isIYrvDzURgPX7LaKtKY IBjKjDDZc9eiagezm1OkVhsMzAPjBnD6M4FhO9I9JrrQsZ2eI7agAoHwwf00dWHJVxQFD3 1TbNwdk9qkuQ8046HLVl+1s6PNbhPltppegMui9sZhcF195TMawjTZYoC69RJNume33CGs StPeRrWnFPnLz4JoZU+9ACJjyCOwExbIL2tCJkol8CkZNu17y5OTf2jPuZ9usA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786900635; a=rsa-sha256; cv=none; b=vo9/UWpZXhT6XPC7caySux3StoBtewBwzKIOQEVDOtWylRvN9FIgujqnWyjcGKOV/DyK1g oVDwUpsVhujlXCblhM9OsLZdhZf7pUZHUtpLMi/Rk85HsuvlUWig4gxzg5Pyr6KQd8NGkP 48/RB0llLqIYSitFt/LKys0aatkwmS+doP8UtUnhDo3VDAugQsToqeorK9rXNFMSFW3N5U U++jkbEdsBYdNBnUBnkFoBOTdkUcOosrW3b/DUVeISe0NyAScJN6wFR5ylPstRVcnG4cgl RggqSpiw/YPQ4b/+Lxm0RmqH8wm8yTFK4d+6qMVRNyq5gOd0mcseBq0b8qOceg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786900635; 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=x4nHFgFYHk15uZfR4Hl/Vbi0W2XXsUXnJnQA8KiYdug=; b=Zq6bxDpGHkNV0Tsh+5NZ4T9+wjLxxcRNAOjaj4oI2m2vyWr17mWPd4MllEvfI9vcCh0tjN QQ/S58alGIumWuIty7Q2GbedCqtb6NiKS8dkXiw0v7qkbIUWbDnmN24YQIYK6lN7EeAuSu u7qQCF3BcTh68aEHqo2rpbniikfispI/pjs+YV2m4905WO2CoiXlbjg9alwROTUfiWCOuc KZDO0WlrBZ2RWIFeR9arYVotBKkr+jEJNoFVOyoPjy18zZfcvlUPRW+ZDLDcPfyeU5NTc+ 4lJsDLNm9C9L9i5GoDM2bbuB/5HUvI/4b5oGX5TlIRd6MnPZtQoWuzTeeAaXoA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hNN1l0hJnzdGQ for ; Sun, 16 Aug 2026 17:17:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 316c2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 16 Aug 2026 17:17:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bojan Novk=?utf-8?Q?ovi=C4=87?= Subject: git: 550db3d6f502 - main - sdhci: Initial support for the SpacemiT K1 sdhci controller 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bnovkov X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 550db3d6f502946f6cf01eeb34f53e70395ddc6f Auto-Submitted: auto-generated Date: Sun, 16 Aug 2026 17:17:15 +0000 Message-Id: <6a81f09b.316c2.5a6e8b31@gitrepo.freebsd.org> The branch main has been updated by bnovkov: URL: https://cgit.FreeBSD.org/src/commit/?id=550db3d6f502946f6cf01eeb34f53e70395ddc6f commit 550db3d6f502946f6cf01eeb34f53e70395ddc6f Author: Bojan Novković AuthorDate: 2026-05-19 21:07:12 +0000 Commit: Bojan Novković CommitDate: 2026-08-16 17:15:52 +0000 sdhci: Initial support for the SpacemiT K1 sdhci controller Reviewed by: mhorne Differential Revision: https://reviews.freebsd.org/D57178 --- sys/dev/sdhci/sdhci_fdt_spacemit.c | 134 +++++++++++++++++++++++++++++++++++++ sys/riscv/spacemit/files.spacemit | 2 + 2 files changed, 136 insertions(+) diff --git a/sys/dev/sdhci/sdhci_fdt_spacemit.c b/sys/dev/sdhci/sdhci_fdt_spacemit.c new file mode 100644 index 000000000000..d516ce60f889 --- /dev/null +++ b/sys/dev/sdhci/sdhci_fdt_spacemit.c @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2026 Bojan Novković + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include "mmcbr_if.h" +#include "sdhci_if.h" + +#include "opt_mmccam.h" +#include "opt_soc.h" + +static struct ofw_compat_data compat_data[] = { + { "spacemit,k1-sdhci", 1 }, + { NULL, 0 } +}; + +static int +sdhci_fdt_spacemit_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + if (ofw_bus_has_prop(dev, "no-sd")) { + /* XXX: only attach to the SD card for now. */ + device_printf(dev, "MMC and SDIO aren't supported yet\n"); + return (ENXIO); + } + + device_set_desc(dev, "SpacemiT K1 SDHCI controller"); + + return (BUS_PROBE_DEFAULT); +} + +static int +sdhci_fdt_spacemit_attach(device_t dev) +{ + struct sdhci_fdt_softc *sc; + clk_t clk_core; + hwreset_t rst; + + sc = device_get_softc(dev); + sc->quirks = SDHCI_QUIRK_PRESET_VALUE_BROKEN | + SDHCI_QUIRK_BROKEN_TIMEOUT_VAL; + + if (clk_get_by_ofw_name(dev, 0, "core", &clk_core)) { + device_printf(dev, "cannot get core clock\n"); + return (ENXIO); + } + if (clk_get_by_ofw_name(dev, 0, "io", &sc->clk_core)) { + device_printf(dev, "cannot get io clock\n"); + return (ENXIO); + } + if (hwreset_get_by_ofw_name(dev, 0, "sdh", &rst) != 0) { + device_printf(dev, "cannot get device reset\n"); + return (ENXIO); + } + + if (hwreset_deassert(rst) != 0) { + device_printf(dev, "cannot reset device\n"); + return (ENXIO); + } + if (clk_enable(clk_core) != 0) { + device_printf(dev, "cannot enable core clock\n"); + return (ENXIO); + } + if (clk_enable(sc->clk_core) != 0) { + device_printf(dev, "cannot enable io clock\n"); + return (ENXIO); + } + + return (sdhci_fdt_attach(dev)); +} + +static int +sdhci_fdt_spacemit_set_clock(device_t dev, struct sdhci_slot *slot, int clock) +{ + struct sdhci_fdt_softc *sc = device_get_softc(dev); + uint64_t freq; + + sc = device_get_softc(dev); + + clk_set_freq(sc->clk_core, clock, CLK_SET_ROUND_ANY); + clk_get_freq(sc->clk_core, &freq); + + return ((int)freq); +} + +static device_method_t sdhci_fdt_spacemit_methods[] = { + /* device_if */ + DEVMETHOD(device_probe, sdhci_fdt_spacemit_probe), + DEVMETHOD(device_attach, sdhci_fdt_spacemit_attach), + + DEVMETHOD(sdhci_set_clock, sdhci_fdt_spacemit_set_clock), + DEVMETHOD_END +}; +extern driver_t sdhci_fdt_driver; + +DEFINE_CLASS_1(sdhci_spacemit, sdhci_fdt_spacemit_driver, sdhci_fdt_spacemit_methods, + sizeof(struct sdhci_fdt_softc), sdhci_fdt_driver); +DRIVER_MODULE(sdhci_spacemit, simplebus, sdhci_fdt_spacemit_driver, NULL, NULL); + +#ifndef MMCCAM +MMC_DECLARE_BRIDGE(sdhci_fdt_spacemit); +#endif diff --git a/sys/riscv/spacemit/files.spacemit b/sys/riscv/spacemit/files.spacemit index b4ab14e9240b..2b0d5cfdb343 100644 --- a/sys/riscv/spacemit/files.spacemit +++ b/sys/riscv/spacemit/files.spacemit @@ -1,3 +1,5 @@ dev/clk/spacemit/k1_clk.c optional k1_ccu fdt dev/clk/spacemit/k1_pll.c optional k1_ccu fdt dev/clk/spacemit/k1_apmu.c optional k1_ccu fdt + +dev/sdhci/sdhci_fdt_spacemit.c optional fdt sdhci sdhci_spacemit