Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp4816282imm; Mon, 15 Oct 2018 23:53:25 -0700 (PDT) X-Google-Smtp-Source: ACcGV63WZCp6rmMtVzmA08f/IhwH9o7ZzITle8808R6buC67uMnLvVvrky4bbQxOy7mv6OX/U7Mp X-Received: by 2002:a65:5147:: with SMTP id g7-v6mr19378094pgq.252.1539672804950; Mon, 15 Oct 2018 23:53:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539672804; cv=none; d=google.com; s=arc-20160816; b=GEgDOpozn9DROnL2cYtcIuTbjQT+Z5SdKHeQlmo6LSbBtjGejS8vX48Nw3RInupQNn QhjUEi650bvxmqw3HrEJbdRlrSBQ6zTm9xCyCXAqIkJRywLtJIBqjZWKc9FKqvk9zbEx 4fxvKu1z6TSYDotnub9ITdnoeXYCOUi8Z5sWRNhhhefAq1XubKyO6XQE8TRIvlATISg4 tqvz26GAEEBluy0mf3Gn7sadUu2bQTZ9/0/ECUBg/IrNTu7L/rXebWoAb+/fGmap11YT zXWu5+b6LypKMzafRIDzb0NN6UgUjEExiWvozLjaKelJ0wEOKB1e0OHWfvu0OSsEqE/A f8QQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:references:message-id :content-transfer-encoding:cc:date:in-reply-to:from:subject :mime-version; bh=XNHbzUw3/qGmq5SvhE8NUPedSjegVf8ShlFuZAarKaw=; b=H/QPACC0MUAj12jFO+vjhLDB1fjM2TwSkk194Yh3h2N2YYPelm+Mkq2Yz1LKGeIftv 9JKq/nTt+CGa1Qz33EtN/c19xjYm7xMSHaUrY74cxgx/PIdypMFZCaBMLLPwEffCtZRR EOcaKsLakPwWraMUmlE1tJP+LIbrCQqVobkR00YDTyOSNmvSc2K1fuI1kMLUC4/j8SOj ekTGVky9v5VRzWlMR0GJDC994a3z1Bemklgf5P6yD5+4/yID7NPNHS0f9DwJdRMQqovC 6+zfIOLAyo9BOpEcW05xwcz2T9UKF6+YvVQzucH/tIt4/QYfE8FAzDYSfq6WV3dS4tC6 O4qw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j15-v6si13005457pgi.552.2018.10.15.23.52.41; Mon, 15 Oct 2018 23:53:24 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727447AbeJPOlI convert rfc822-to-8bit (ORCPT + 99 others); Tue, 16 Oct 2018 10:41:08 -0400 Received: from coyote.holtmann.net ([212.227.132.17]:52408 "EHLO mail.holtmann.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727289AbeJPOlI (ORCPT ); Tue, 16 Oct 2018 10:41:08 -0400 Received: from marcel-macbook.fritz.box (p4FF9F655.dip0.t-ipconnect.de [79.249.246.85]) by mail.holtmann.org (Postfix) with ESMTPSA id 3FE52CF367; Tue, 16 Oct 2018 08:59:30 +0200 (CEST) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.0 \(3445.100.39\)) Subject: Re: [PATCH v4 1/2] Bluetooth: Add device_get_bd_address() From: Marcel Holtmann In-Reply-To: <20181015185128.GT22824@google.com> Date: Tue, 16 Oct 2018 08:52:07 +0200 Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Sinan Kaya , Balakrishna Godavarthi , Sakari Ailus , Marcin Wojtas , Andy Shevchenko Andy Shevchenko , Johan Hedberg , LKML , Bluez mailing list , Loic Poulain , Brian Norris Content-Transfer-Encoding: 8BIT Message-Id: <8D254888-52A9-4201-882C-EDE71EE4CF5C@holtmann.org> References: <20180927004810.124185-1-mka@chromium.org> <20180927004810.124185-2-mka@chromium.org> <20180927171305.GG22824@google.com> <20181004173338.GL22824@google.com> <9B742DB5-F584-4A47-A04B-4F72EB17519C@holtmann.org> <20181015185128.GT22824@google.com> To: Matthias Kaehlcke X-Mailer: Apple Mail (2.3445.100.39) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Matthias, >>>>>> void bt_sock_reclassify_lock(struct sock *sk, int proto); >>>>>> >>>>>> +int device_get_bd_address(struct device *dev, bdaddr_t *bd_addr); >>>>> >>>>> Maybe change the API name to start with bt_ and get rid of device_? >>>> >>>> device_ indicates that we get the BD_ADDR for a 'struct device' and >>>> not for e.g. a 'struct fwnode_handle'. >>>> >>>> Anyway with this version of the patch fwnode_get_bd_address() has been >>>> scrapped and it might never be introduced again, so I'm open to change >>>> the name to bt_ if there is a general preference for it. >>> >>> Marcel, can you live with this being added to the Bluetooth code base >>> instead of property? Also if you'd prefer the function to be named >>> bt_get_bd_address() let me know. >> >> explain to me again why this is useful? > > The official binding for providing the BD_ADDR through the device tree > is the property 'local-bd-address'. device_get_bd_address() provides a > common API to retrieve the BD_ADDR instead of requiring BT drivers to > use the lower level fwnode_property_read_u8_array(). It also avoids > repeating the check for an all zeroes BD_ADDR in multiple drivers. > >> I am failing to see the benefit if this is not part of the property.h API. > > My understanding is that the intention of property.h it to provide an > API for common property types used by drivers from different > subsystems, hence the implementation 'lives' in drivers/base. > Obtaining the BD_ADDR is clearly limited to the Bluetooth subsystem, > and drivers/base doesn't seem to be the right place for it. It's true, > device_get_mac_address() lives in the common property code, but that > doesn't necessarily mean it really should be there and we should do > the same. I agree with Sakari that the the approach taken by V4L2 > (drivers/media/v4l2-core/v4l2-fwnode.c) seems more appropriate. > > That said I wouldn't raise opposition if the maintainers of > drivers/base agreed to add device_get_mac_address() there, however so > far several recent authors of property.[ch] have raised objections. so if this is not in drivers/base/ then what is the point in making each driver do this? If it is a common property, then it can be well handled in the Bluetooth core when setting up the hardware. This whole BD_ADDR via DT is stupid anyway. Just so that is clear up-front. It has been a total hack and fully relies on boot loaders doing too much magic and then using DT to hide this magic. The BD_ADDR is required to be unique and that means no user will ever create a DT with that set. The boot loader always has to read some magic value and then convert it and merge it into the actual DT provided to the kernel. The clean part would be just to have proper APIs to read the memory of the persistent / programmed BD_ADDR and then access that. That all said, we have hdev->set_bdaddr address and the HCI_QUIRK_INVALID_BDADDR to mark the controller as not fully set up. And then actually user space can deal with getting the correct address and providing it. The code is already there that handles all of this if the BD_ADDR comes from user space. Actually hacking this into the driver and doing that in the hdev->setup callback is quirky to begin with. A user space provided address will just overwrite that. If you really want to make this generic, then introduce HCI_QUIRK_USE_BDADDR_PROPERTY that a driver can set and then do that all in hci_dev_do_open() so that if no user space provided BD_ADDR is available, it is read from local-bt-address property and if that is not available or empty, then mark the the device as unconfigured. I am intentionally saying unconfigured when you set HCI_QUIRK_USE_BDADDR_PROPERTY since I assume that the logic that we have behind HCI_QUIRK_INVALID_BDADDR is implied and whatever address comes back via Read_BD_Address is invalid. Otherwise this hardware should not set HCI_QUIRK_USE_BDADDR_PROPERTY at all. Regards Marcel