From nobody Wed Feb 11 02:10:35 2026 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EB0A393DED for ; Tue, 13 Jan 2026 17:45:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768326302; cv=none; b=CdVG4Sy73gR63NGVIJF/uk6ype5h/IfowmBNJNFGsO8/2OIflmwxr9GXbiK3on3ebDNpHigx50JeYNWiIlCeEywQ7B6CfFEO+6Gfs9VxpfKTZFU9Zbbsa/IXvdMoplE8vhx3gsMuUXz+tmyeDmKDzMArWCB38lg/rBvXvK5EGtQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768326302; c=relaxed/simple; bh=gru4oOn5Z4uZPsJ0ld3fd8SL8rSg/YQgIjZocoovrQc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=K/U6ZECw5qYoqzpOd5y/J2jeNrxun8haPlQWYpM8ps++pEOS2QGi+oVl/4l3LzFSxYZ9YRQk9bd+dJjDP4nM/O3M37duJzDkCbTPqRlugRwjKdXk6eJxFDFLbZjiaqlx+3VLn/zJbjyvdkVRnHLPzPVyXeh8U3RXmWxlM5Ee/mE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tomeuvizoso.net; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tomeuvizoso.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-b87113bd83bso453849666b.1 for ; Tue, 13 Jan 2026 09:45:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768326299; x=1768931099; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=eavvu1t15qKvDTI2jSsLTlj8ivnyPIJR0TkymEC1eF0=; b=e2pvoUEh/HvoHC1ZEaQZD1nOb71p+2OYbWgKmg2kWG+NEGPSJm45t/GyNMG/pieQEL IFf/qz8JK5AiYYbC8OXeFTRVIZQ61QDsIMKkOWwmS4Fb9coVk9lRBTjDXlk+xaIGjgPN DwUeTE1nxVXWLcfStpLiJfFw2hVdPcwWOrRZ9XWZXrR2yoo2Z2dtQ7C6Yc9OU/tAzwL8 O2hJJXaADGqRqg3c99en3Wtsp7L8g2ctqthrgxEXJVEZp8iz49xd8BjzEUh6dfyf2SOG GZAUHaMpS1iCgV0vthK3YNeEyXN7jOA11KNYYzn+uRSZZ4zqxr6ka3cD4VVHN0i80Jsx uWPw== X-Forwarded-Encrypted: i=1; AJvYcCUMxPPaRwmJlK8wb3Q3lo1t5AkjNHfbEhuMeRGuhKxDxjYq3c9q0+oiN0HE1ReSD9H9eV9QglN8whOTQjA=@vger.kernel.org X-Gm-Message-State: AOJu0YwNRRY23AZTwW2/MBfVmjc0CCkPsHgsWi4OmDwHYwFq7OZSnT3r Q/rzZDgOw8/oST5kCBBuGzeo4u4H6aloKEzmpQdZEzOcXHbaAGmM5dlB X-Gm-Gg: AY/fxX6Qvey5zJ4zSRNoTlRCT6psuuyjyn4/Sp0tOqXXL0evQlBaq+v+pfKOLb06O8c DaFsPkjhqNXmFdE5vK2V2mKbYlw8ArkVQgoqY7WF5LLnhUuFur8jbmRLknU6rop70S3ZdBwWWob 5OFnmLjUg1m12l3ivHnhHxTUgHtqOkqsnSUQ4FYVgfkbeJSx+kW8Hcsb8IcxmXLrgC4PJOcnI4e kKK/pE9rIxgK+pm68aA9bcMWDvgChjK6mIHOsyy5VXC9OUx7CRDcJVbSDdgdPeHagAilZIidAYH 0KgofEr4EBooyl/YFyxUK8nXynNa38RXRsLeFfg7hX1yrCEIBNzHEWpwksD7W4GGRMyQFu1dnAQ CyOcmQA1E9CfytHY7KrYYcxyZScmfgOC06cUtbgWM7zJmSWKvjbZiOyGEpfdFfUxjv6+zRM6aYk mBKASY/xlA76yBilOaz06xvdf9uHINEHeOGNdDl40zaoDODg== X-Google-Smtp-Source: AGHT+IHjwdSSN4mTRKXDjSC9xCBKsqwskTn4GwaR+B+tRXZTp9WDKqbrL/GHsxrwpYwUo4qku7MY+g== X-Received: by 2002:a17:907:7742:b0:b87:1eaf:377c with SMTP id a640c23a62f3a-b871eaf3facmr466107266b.38.1768326298728; Tue, 13 Jan 2026 09:44:58 -0800 (PST) Received: from [10.42.0.1] (cst-prg-36-231.cust.vodafone.cz. [46.135.36.231]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6507be655aesm20873259a12.17.2026.01.13.09.44.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Jan 2026 09:44:57 -0800 (PST) From: Tomeu Vizoso Date: Tue, 13 Jan 2026 18:44:39 +0100 Subject: [PATCH 5/5] accel/thames: Add IOCTL for memory synchronization Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260113-thames-v1-5-99390026937c@tomeuvizoso.net> References: <20260113-thames-v1-0-99390026937c@tomeuvizoso.net> In-Reply-To: <20260113-thames-v1-0-99390026937c@tomeuvizoso.net> To: Nishanth Menon , "Andrew F. Davis" , Randolph Sapp , Jonathan Humphreys , Andrei Aldea , Chirag Shilwant , Vignesh Raghavendra , Tero Kristo , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Oded Gabbay , Jonathan Corbet , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, Tomeu Vizoso X-Mailer: b4 0.14.2 The DSP cores have their own access to the memory bus, and it isn't cache coherent with the CPUs. Add IOCTLs so userspace can mark when the caches need to be flushed, and also when a writer job needs to be waited for before the buffer can be accessed from the CPU. Initially based on the same IOCTLs from the Etnaviv driver. Signed-off-by: Tomeu Vizoso --- drivers/accel/thames/thames_drv.c | 2 ++ drivers/accel/thames/thames_gem.c | 52 +++++++++++++++++++++++++++++++++++= ++++ drivers/accel/thames/thames_gem.h | 4 +++ 3 files changed, 58 insertions(+) diff --git a/drivers/accel/thames/thames_drv.c b/drivers/accel/thames/thame= s_drv.c index bf7355832241d5a671e196f465d891effaa4a8fb..9b72db433fbb8f9239a16a047a5= 2520f0a01d125 100644 --- a/drivers/accel/thames/thames_drv.c +++ b/drivers/accel/thames/thames_drv.c @@ -76,6 +76,8 @@ static const struct drm_ioctl_desc thames_drm_driver_ioct= ls[] =3D { THAMES_IOCTL(BO_CREATE, bo_create), THAMES_IOCTL(BO_MMAP_OFFSET, bo_mmap_offset), THAMES_IOCTL(SUBMIT, submit), + THAMES_IOCTL(BO_PREP, bo_prep), + THAMES_IOCTL(BO_FINI, bo_fini), }; =20 DEFINE_DRM_ACCEL_FOPS(thames_accel_driver_fops); diff --git a/drivers/accel/thames/thames_gem.c b/drivers/accel/thames/thame= s_gem.c index a153e73a15253e0f955d74020b4765a1fa833fc4..2ad5a62bea275eb38a96b9d9bea= 804ed94ffb011 100644 --- a/drivers/accel/thames/thames_gem.c +++ b/drivers/accel/thames/thames_gem.c @@ -353,3 +353,55 @@ int thames_ioctl_bo_mmap_offset(struct drm_device *dde= v, void *data, struct drm_ =20 return 0; } + +int thames_ioctl_bo_prep(struct drm_device *ddev, void *data, struct drm_f= ile *file) +{ + struct drm_thames_bo_prep *args =3D data; + struct drm_gem_object *gem_obj; + struct drm_gem_shmem_object *shmem_obj; + unsigned long timeout =3D drm_timeout_abs_to_jiffies(args->timeout_ns); + long ret =3D 0; + + if (args->reserved !=3D 0) + return -EINVAL; + + gem_obj =3D drm_gem_object_lookup(file, args->handle); + if (!gem_obj) + return -ENOENT; + + ret =3D dma_resv_wait_timeout(gem_obj->resv, DMA_RESV_USAGE_WRITE, true, = timeout); + if (!ret) + ret =3D timeout ? -ETIMEDOUT : -EBUSY; + + shmem_obj =3D &to_thames_bo(gem_obj)->base; + + dma_sync_sgtable_for_cpu(ddev->dev, shmem_obj->sgt, DMA_FROM_DEVICE); + + drm_gem_object_put(gem_obj); + + return ret; +} + +int thames_ioctl_bo_fini(struct drm_device *ddev, void *data, struct drm_f= ile *file) +{ + struct drm_thames_bo_fini *args =3D data; + struct drm_gem_shmem_object *shmem_obj; + struct thames_gem_object *thames_obj; + struct drm_gem_object *gem_obj; + + if (args->reserved !=3D 0) + return -EINVAL; + + gem_obj =3D drm_gem_object_lookup(file, args->handle); + if (!gem_obj) + return -ENOENT; + + thames_obj =3D to_thames_bo(gem_obj); + shmem_obj =3D &thames_obj->base; + + dma_sync_sgtable_for_device(ddev->dev, shmem_obj->sgt, DMA_TO_DEVICE); + + drm_gem_object_put(gem_obj); + + return 0; +} diff --git a/drivers/accel/thames/thames_gem.h b/drivers/accel/thames/thame= s_gem.h index 785843c40a89a9e84ab634aad77e9ec46111693e..e5a8278e98c578c2903cf23aea1= bf887be0389e8 100644 --- a/drivers/accel/thames/thames_gem.h +++ b/drivers/accel/thames/thames_gem.h @@ -29,6 +29,10 @@ int thames_ioctl_bo_create(struct drm_device *ddev, void= *data, struct drm_file =20 int thames_ioctl_bo_mmap_offset(struct drm_device *ddev, void *data, struc= t drm_file *file); =20 +int thames_ioctl_bo_prep(struct drm_device *ddev, void *data, struct drm_f= ile *file); + +int thames_ioctl_bo_fini(struct drm_device *ddev, void *data, struct drm_f= ile *file); + int thames_context_create(struct thames_file_priv *priv); =20 void thames_context_destroy(struct thames_file_priv *priv); --=20 2.52.0