From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S969754AbdEYO55 (ORCPT ); Thu, 25 May 2017 10:57:57 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:50348 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S969158AbdEYO5z (ORCPT ); Thu, 25 May 2017 10:57:55 -0400 Date: Thu, 25 May 2017 16:57:43 +0200 From: Greg Kroah-Hartman To: Mika Westerberg Cc: Andreas Noever , Michael Jamet , Yehezkel Bernat , Lukas Wunner , Amir Levy , Andy Lutomirski , Mario.Limonciello@dell.com, Jared.Dominguez@dell.com, Andy Shevchenko , linux-kernel@vger.kernel.org Subject: Re: [PATCH 22/24] thunderbolt: Add support for host and device NVM firmware upgrade Message-ID: <20170525145743.GA6432@kroah.com> References: <20170518143914.60902-1-mika.westerberg@linux.intel.com> <20170518143914.60902-23-mika.westerberg@linux.intel.com> <20170525132834.GJ16244@kroah.com> <20170525143940.GU8541@lahna.fi.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170525143940.GU8541@lahna.fi.intel.com> User-Agent: Mutt/1.8.2 (2017-04-18) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 25, 2017 at 05:39:40PM +0300, Mika Westerberg wrote: > On Thu, May 25, 2017 at 03:28:34PM +0200, Greg Kroah-Hartman wrote: > > On Thu, May 18, 2017 at 05:39:12PM +0300, Mika Westerberg wrote: > > > +static int tb_switch_nvm_add(struct tb_switch *sw) > > > +{ > > > + struct nvmem_device *nvm_dev; > > > + struct tb_switch_nvm *nvm; > > > + u32 val; > > > + int ret; > > > + > > > + if (!sw->dma_port) > > > + return 0; > > > + > > > + nvm = kzalloc(sizeof(*nvm), GFP_KERNEL); > > > + if (!nvm) > > > + return -ENOMEM; > > > + > > > + nvm->id = ida_simple_get(&nvm_ida, 0, 0, GFP_KERNEL); > > > + > > > + /* > > > + * If the switch is in safe-mode the only accessible portion of > > > + * the NVM is the non-active one where userspace is expected to > > > + * write new functional NVM. > > > + */ > > > + if (!sw->safe_mode) { > > > + u32 nvm_size, hdr_size; > > > + > > > + ret = dma_port_flash_read(sw->dma_port, NVM_FLASH_SIZE, &val, > > > + sizeof(val)); > > > + if (ret) > > > + goto err_ida; > > > + > > > + hdr_size = sw->generation < 3 ? SZ_8K : SZ_16K; > > > + nvm_size = (SZ_1M << (val & 7)) / 8; > > > + nvm_size = (nvm_size - hdr_size) / 2; > > > + > > > + ret = dma_port_flash_read(sw->dma_port, NVM_VERSION, &val, > > > + sizeof(val)); > > > + if (ret) > > > + goto err_ida; > > > + > > > + nvm->major = val >> 16 & 0xff; > > > + nvm->minor = val >> 8 & 0xff; > > > + > > > + nvm_dev = register_nvmem(sw, nvm->id, nvm_size, true); > > > + if (IS_ERR(nvm_dev)) { > > > + ret = PTR_ERR(nvm_dev); > > > + goto err_ida; > > > + } > > > + nvm->active = nvm_dev; > > > + } > > > + > > > + nvm_dev = register_nvmem(sw, nvm->id, NVM_MAX_SIZE, false); > > > + if (IS_ERR(nvm_dev)) { > > > + ret = PTR_ERR(nvm_dev); > > > + goto err_nvm_active; > > > + } > > > + nvm->non_active = nvm_dev; > > > + > > > + sw->nvm = nvm; > > > + > > > + ret = sysfs_create_group(&sw->dev.kobj, &nvm_group); > > > > Why are you adding this to the sw device? And doing so _after_ it was > > announced to userspace? Why can't you make it part of the device's > > default groups so that the driver core can handle it properly? > > I was thinking those attributes should show up only when we have > successfully created the two NVMem devices. But maybe I can add those > conditionally to the device default groups and make the attributes > return error if the NVM device creation fails. Or have the device files only show up if there is an nvm device (however this is hooked up, I didn't spend the time to look at it deeply.) The is_visible() callback in the attribute is there just for that. good luck! greg k-h