From patchwork Tue Aug 1 09:23:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 109119 Delivered-To: patch@linaro.org Received: by 10.140.101.6 with SMTP id t6csp1266941qge; Tue, 1 Aug 2017 02:28:53 -0700 (PDT) X-Received: by 10.98.133.134 with SMTP id m6mr6844700pfk.97.1501579732947; Tue, 01 Aug 2017 02:28:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1501579732; cv=none; d=google.com; s=arc-20160816; b=mXVC8BZ6genA0FePRpjDoE8vd4g6Rp9zsCTI4dfrpToGDXKmK5ER9IryBy4NkcdC3W kYPw6EoHdYUGmeoP8ZI20KBDmti15WyUZX6k7AuOoQI6DiSc6ZnKHFCwk9GbL4uaWJFx 7zKBKnK3JSFOCf3ez2ZSgxu80UUrUFK48mycifEkUGFi+pQ4aonyH0ufNp6U6wE6PP8S rDsWzAh43ZedULWLkva/KRqI6QrByff35HDfMhOiIHsaAs/6KK/CYSZrhopjdY5V4qhF /7BwsKtIH7j6jdeLtSUCVUGoYXg7DYV8ZrWYJGg9NW8Etl5WJkPMv2dBgxsJphX1kO3t DiBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=5yW0VvkLs8GiGelDjLmtjnsvvVajGGBRrTGzj+V14yI=; b=lzn4oZrvMvxR8tKYTvrUgMPJ2AvQCERnzC6ay7ljNMtR5qQrGzpOecJSmKKljtqLLJ HHyBWm5cHdv1UlF+lj7mSqsN28KEREmqZN8MarTYim7DZ28PY0TuY42Yq5O6h3mzsdgu Gm981usRjcNmo+fw555N/wsJ2qk4DLSyDoQ4/QQ5kuB3MPezK2enUsF/NMQVMeQaawib xhomM+GlHM2XxZMo1X16aIuRZ/2qCOK6mbWT+d50AP8HzLxMMwvtTZ7dkS5A2cRGeefo r+hVzxzdTsnfgucbypDjefsPowJ0lGnqOs2rmtTbqHOh0/igaawJavB2qc+8zBTcNvql FSAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=S1rYX8SQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 32si16891423plb.992.2017.08.01.02.28.52; Tue, 01 Aug 2017 02:28:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.b=S1rYX8SQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751612AbdHAJ2t (ORCPT + 26 others); Tue, 1 Aug 2017 05:28:49 -0400 Received: from mail-pg0-f54.google.com ([74.125.83.54]:32918 "EHLO mail-pg0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750832AbdHAJ2r (ORCPT ); Tue, 1 Aug 2017 05:28:47 -0400 Received: by mail-pg0-f54.google.com with SMTP id c14so5786707pgn.0 for ; Tue, 01 Aug 2017 02:28:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=5yW0VvkLs8GiGelDjLmtjnsvvVajGGBRrTGzj+V14yI=; b=S1rYX8SQIGje+Rk8PhPSsC8miRi+b1elPOp2kdRrFX8+RksiyMVvRM7L7kACDQK0Tl THr1hThlosaIfXGwtPB+jKxin/yhq0FJwUD6IAm0tRFvFxXMonaOB7zBPs7FttQvsjze EcHRclcVu4yhT0fR1tDZboVkNWY/estLMTzm4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=5yW0VvkLs8GiGelDjLmtjnsvvVajGGBRrTGzj+V14yI=; b=ieQDA0v5y6HY+o8eYm6YViVX0FWp08sdoAIBtzmrKwCaStCB7dNRCJH4F3TFeVQ/kd JLnukl91mbTFOhZb2ZnXffNqoF1da4J6PK2sh+o27fZKpKwIKkIt9tnPDJXX7/8hDHzt Hl5FXefNmcrtmfLRrSaAw0XHNOjk5U56TupxBp2aj27CXyni2O+cS1G/igv0vhxEFhLF xdYGE4+q1sv02m2uCguJzwO/a0an3MxneSgQaTIhAycc1hfdvTcPU3AIL9roF7+Jfqjj goQFsWhxSLGgGw3MeZ5FoYnANlEqUiLA8BqY7T5oOD8hcku5f9tLEGQPWH9wE9BMryYU 48SQ== X-Gm-Message-State: AIVw113PlgfJnR4d2MNr0GCglFzpQ3HwZItlSZaOLEer8azpXdJaYzQO gKy9s2PhH+P2lazY X-Received: by 10.98.245.6 with SMTP id n6mr16466567pfh.113.1501579726401; Tue, 01 Aug 2017 02:28:46 -0700 (PDT) Received: from localhost ([122.172.27.66]) by smtp.gmail.com with ESMTPSA id r9sm15160168pgf.83.2017.08.01.02.28.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Aug 2017 02:28:45 -0700 (PDT) From: Viresh Kumar To: Greg Kroah-Hartman Cc: Viresh Kumar , Vincent Guittot , Mark Brown , Stephen Boyd , Rajendra Nayak , Shiraz Hashim , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, robdclark@gmail.com, Jonathan Corbet , linux-doc@vger.kernel.org Subject: [PATCH V3 0/8] drivers: Boot Constraints core Date: Tue, 1 Aug 2017 14:53:41 +0530 Message-Id: X-Mailer: git-send-email 2.13.0.71.gd7076ec9c9cb Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Greg, Here is V3 of the boot constraints core based on the feedbacks I have received during V2. This tested on real hardware (Qcom dragonboard 410c) with a display controller configured from bootloader to display a flash screen. Obviously it doesn't work seamlessly without this series and works just fine with it. Rajendra Nayak helped getting this tested on Qcom hardware. Problem statement: Some devices are powered ON by the bootloader before the bootloader handovers control to Linux. It maybe important for those devices to keep working until the time a Linux device driver probes the device and reconfigure its resources. A typical example of that can be the LCD controller, which is used by the bootloaders to show image(s) while the platform is booting into Linux. The LCD controller can be using some resources, like clk, regulators, etc, that are shared between several devices. These shared resources should be configured to satisfy need of all the users. If another device's (X) driver gets probed before the LCD controller driver in this case, then it may end up reconfiguring these resources to ranges satisfying the current users (only device X) and that can make the LCD screen unstable. Of course we can have more complex cases where the same resource is getting used by two devices while the kernel boots and the order in which devices get probed wouldn't matter as the other device will surely break then. There are also cases where the resources may not be shared, but the kernel will disable them forcefully as no users may have appeared until a certain point in kernel boot. This makes sure that the resources stay enabled. A wide variety of constraints can be satisfied using the new framework. Proposed solution: This patchset introduces the concept of boot-constraints, which are set by platform specific drivers (for now at least) at early init (like subsys_initcall) and the kernel will satisfy them until the time driver for such a device is probed (successfully or unsuccessfully). Once the driver is probed, the driver core removes the constraints set for the device. This series implements clk, regulator and PM domain constraints for now. The last patch isn't up for merge yet, and is used to test the boot constraint framework on Qcom 410c along with some of the display controller patches from Rob's series [1] to make sure the controller's registers are configured properly. Rebased over: drivers/driver-core-next (some debugfs dependencies) Pushed here: git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/linux.git device/boot-constraints V2->V3: - Removed DT support as we aren't sure about how to define the bindings yet. - Added CLK and PM domain constraint types. - A new directory is added for boot constraints, which will also contain platform specific drivers in future. - Deferred devices are still supported, just that it wouldn't be called from generic code anymore but platform specific code. - Tested on Qcom 410c dragonboard with display flash screen (Rajendra). - Usual renaming/commit-log-updates/etc changes done. V1->V2: - Add support for setting constraints for devices created from DT. - Allow handling deferred devices earlier then late_init. - Remove 'default y' line from kconfig. - Drop '=" after boot_constraints_disable kernel param. - Dropped the dummy testing patch now. -- viresh [1] https://marc.info/?l=dri-devel&m=149979722606563&w=2 Rajendra Nayak (1): drivers: boot_constraint: Add Qualcomm display controller constraints Viresh Kumar (7): drivers: Add boot constraints core drivers: boot_constraint: Add boot_constraints_disable kernel parameter drivers: boot_constraint: Add support for supply constraints drivers: boot_constraint: Add support for clk constraints drivers: boot_constraint: Add support for PM constraints drivers: boot_constraint: Add debugfs support drivers: boot_constraint: Manage deferrable constraints Documentation/admin-guide/kernel-parameters.txt | 3 + drivers/base/Kconfig | 10 + drivers/base/Makefile | 1 + drivers/base/base.h | 1 + drivers/base/boot_constraints/Makefile | 3 + drivers/base/boot_constraints/clk.c | 74 ++++++ drivers/base/boot_constraints/core.c | 300 ++++++++++++++++++++++++ drivers/base/boot_constraints/core.h | 50 ++++ drivers/base/boot_constraints/deferrable_dev.c | 192 +++++++++++++++ drivers/base/boot_constraints/pm.c | 32 +++ drivers/base/boot_constraints/qcom-display.c | 107 +++++++++ drivers/base/boot_constraints/supply.c | 108 +++++++++ drivers/base/dd.c | 32 ++- include/linux/boot_constraint.h | 68 ++++++ 14 files changed, 974 insertions(+), 7 deletions(-) create mode 100644 drivers/base/boot_constraints/Makefile create mode 100644 drivers/base/boot_constraints/clk.c create mode 100644 drivers/base/boot_constraints/core.c create mode 100644 drivers/base/boot_constraints/core.h create mode 100644 drivers/base/boot_constraints/deferrable_dev.c create mode 100644 drivers/base/boot_constraints/pm.c create mode 100644 drivers/base/boot_constraints/qcom-display.c create mode 100644 drivers/base/boot_constraints/supply.c create mode 100644 include/linux/boot_constraint.h -- 2.13.0.71.gd7076ec9c9cb