From nobody Mon Apr 24 09:43:06 2023 X-Original-To: dev-commits-src-main@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 4Q4gDC2by8z46ZvN; Mon, 24 Apr 2023 09:43:07 +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 4Q4gDB6l10z3DS4; Mon, 24 Apr 2023 09:43:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1682329387; 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=621yRpFpWUaYdAvXnH2BGNrHfIIqNysoQtcgL4Le9iI=; b=Iiz+aBbLCFKE7xFabwVnbTaDp0eRkloJGQ1SSw1efB6aRGRAykv30CjLohF1W2CNiIXgdA jGrjUhTF8mkHrjGBVoDpoox04GBOo1/KRuQbf5sqVZhPOBaMqmsTO9wF8urcvMFeyTLSzt W93ZMvz6pC6REo22Q2lT2lcGpo4wPiJqNN52yAahRF4a0TWOqy+SSS08b/9w1yQvAnzCAe bxiXr6do9xDKxHinuwO8uZASt0XTBN9D5sJGi9wptXiu7Xyti4GbR0HJjD0iIq4yg3khZF mmRxeNj1CJ/GL4Gs3p4ipdeyS8+5sGvrtODb3OnFjWrtXoQ6wgBXgoRwbCg3Rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1682329387; 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=621yRpFpWUaYdAvXnH2BGNrHfIIqNysoQtcgL4Le9iI=; b=ZptOGAPC3D+GkdtGAVJeIfvmHJB4qcMxh7dSfNcXFzQn4m8AUGejPM0pSub6eGMzT7YXf8 QJXAYxQIZMHxozFNlHiQDYvPHXIMBMrQ5p5LTujshWXJsFbLKmMqpbxjGO18JXn17KQ88a BgsqUtc8MTFJWUZRjQ4VV6rgGw+KySBc483/1KNS1905hCZsMRJWPG68rq4XNXaFd5bTsi /jaAR0NmCkUkjIIUqaLY4Dlog74khWngnRkPS1bWtpkFpkrmEGVvJ3ggbe6E/RekBKjrpW /0P6ddn7rMF6HBZ76tprvbTnS+vfoKMzV3YrWiTVLJPhFAgOjWdzi0PVl84UZg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1682329387; a=rsa-sha256; cv=none; b=n/IWSmde/p5eBpc4v4ljfjgrdZgFKbhkaVgzgkVfQDRE1rA7P3aqajUIcU39chGGSyN5nj +9rCpSRGukeLINry8V51I0GLdV3AlybDFWTx3RG3DO1Ufvik64h6oGY7oGrcY6H/Oq7dRl 8EOMIssLJ6XrdJP5pvgBnc5KVE6GLpiN2sMdYLiQoGacZjBl5/h1xjKVSIYEq35dRi4Z1W fDhEwHoH1Ok+H4W8ZX3aWkXxTtxwfSFvo9Gp3DC7rEBtUyBKuM8WzxIjn0aj7FFPF2S2Ef jHz/M6APegow1EpEgNxz1Dwa+d/H+X5taWNFMMKGXbrQhJsxoFLr7RlHaFqIPQ== 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 4Q4gDB4CSDzL9d; Mon, 24 Apr 2023 09:43: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 33O9h6la088218; Mon, 24 Apr 2023 09:43:06 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 33O9h6jw088217; Mon, 24 Apr 2023 09:43:06 GMT (envelope-from git) Date: Mon, 24 Apr 2023 09:43:06 GMT Message-Id: <202304240943.33O9h6jw088217@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Vladimir Kondratyev Subject: git: 3c0867343819 - main - spibus: extend API: add cs_delay ivar, KEEP_CS and NO_SLEEP flags List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: wulf X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3c086734381945f6d779a98582d8eae3edca0b68 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=3c086734381945f6d779a98582d8eae3edca0b68 commit 3c086734381945f6d779a98582d8eae3edca0b68 Author: Val Packett AuthorDate: 2023-04-24 09:41:52 +0000 Commit: Vladimir Kondratyev CommitDate: 2023-04-24 09:41:52 +0000 spibus: extend API: add cs_delay ivar, KEEP_CS and NO_SLEEP flags These feature are required for an upcoming Apple MacBook topcase (HID over SPI) driver: A delay after toggling CS is required to avoid anomalies like an extra junk byte in front of the message. Keeping CS asserted is required to be able to read a status report after writing a command. (The device won't return the status if CS was deasserted.) Sleep is not allowed in the interrupt context where the Apple input driver runs its transactions. Use a flag to tell the SPI driver to avoid mtx_sleep. Reviewed by: manu (ok to SPI part of larger patch) MFC afret: 1 month Differential revision: https://reviews.freebsd.org/D29534 --- sys/dev/spibus/spi.h | 4 ++++ sys/dev/spibus/spibus.c | 6 ++++++ sys/dev/spibus/spibusvar.h | 3 +++ 3 files changed, 13 insertions(+) diff --git a/sys/dev/spibus/spi.h b/sys/dev/spibus/spi.h index 4cb5c8905b61..fc5b4ab2c148 100644 --- a/sys/dev/spibus/spi.h +++ b/sys/dev/spibus/spi.h @@ -34,9 +34,13 @@ struct spi_command { uint32_t tx_data_sz; void *rx_data; uint32_t rx_data_sz; + uint32_t flags; }; #define SPI_COMMAND_INITIALIZER { 0 } +#define SPI_FLAG_KEEP_CS 0x1 /* Keep chip select asserted */ +#define SPI_FLAG_NO_SLEEP 0x2 /* Prevent driver from sleeping (use polling) */ + #define SPI_CHIP_SELECT_HIGH 0x1 /* Chip select high (else low) */ #ifdef FDT diff --git a/sys/dev/spibus/spibus.c b/sys/dev/spibus/spibus.c index b0b2b5eb73ad..40ebb916a649 100644 --- a/sys/dev/spibus/spibus.c +++ b/sys/dev/spibus/spibus.c @@ -146,6 +146,9 @@ spibus_read_ivar(device_t bus, device_t child, int which, uintptr_t *result) case SPIBUS_IVAR_CLOCK: *(uint32_t *)result = devi->clock; break; + case SPIBUS_IVAR_CS_DELAY: + *(uint32_t *)result = devi->cs_delay; + break; } return (0); } @@ -174,6 +177,9 @@ spibus_write_ivar(device_t bus, device_t child, int which, uintptr_t value) return (EINVAL); devi->mode = (uint32_t)value; break; + case SPIBUS_IVAR_CS_DELAY: + devi->cs_delay = (uint32_t)value; + break; default: return (EINVAL); } diff --git a/sys/dev/spibus/spibusvar.h b/sys/dev/spibus/spibusvar.h index 58a7bf784787..db94d30831e6 100644 --- a/sys/dev/spibus/spibusvar.h +++ b/sys/dev/spibus/spibusvar.h @@ -43,6 +43,7 @@ struct spibus_ivar uint32_t cs; uint32_t mode; uint32_t clock; + uint32_t cs_delay; struct resource_list rl; }; @@ -52,6 +53,7 @@ enum { SPIBUS_IVAR_CS, /* chip select that we're on */ SPIBUS_IVAR_MODE, /* SPI mode (0-3) */ SPIBUS_IVAR_CLOCK, /* maximum clock freq for device */ + SPIBUS_IVAR_CS_DELAY, /* delay in microseconds after toggling chip select */ }; #define SPIBUS_ACCESSOR(A, B, T) \ @@ -71,6 +73,7 @@ spibus_set_ ## A(device_t dev, T t) \ SPIBUS_ACCESSOR(cs, CS, uint32_t) SPIBUS_ACCESSOR(mode, MODE, uint32_t) SPIBUS_ACCESSOR(clock, CLOCK, uint32_t) +SPIBUS_ACCESSOR(cs_delay, CS_DELAY, uint32_t) extern driver_t spibus_driver; extern driver_t ofw_spibus_driver;