From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751404AbdEBS7K (ORCPT ); Tue, 2 May 2017 14:59:10 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:41824 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751201AbdEBS7I (ORCPT ); Tue, 2 May 2017 14:59:08 -0400 Subject: Re: [PATCH v6 07/23] drivers/fsi: Implement slave initialisation To: Joel Stanley References: <20170410194706.64280-1-cbostic@linux.vnet.ibm.com> <20170410194706.64280-8-cbostic@linux.vnet.ibm.com> Cc: Rob Herring , Mark Rutland , Russell King , rostedt@goodmis.org, mingo@redhat.com, Greg KH , devicetree , linux-arm-kernel@lists.infradead.org, Jeremy Kerr , Linux Kernel Mailing List , Andrew Jeffery , Alistair Popple , Benjamin Herrenschmidt From: Christopher Bostic Date: Tue, 2 May 2017 13:58:59 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 x-cbid: 17050218-0028-0000-0000-000007828E5F X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00007013; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000208; SDB=6.00855302; UDB=6.00423285; IPR=6.00634464; BA=6.00005322; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00015273; XFM=3.00000014; UTC=2017-05-02 18:59:05 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17050218-0029-0000-0000-0000358AE92B Message-Id: <7c0b7c6d-6d1b-b36d-b886-1130c35d0964@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-05-02_13:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1705020098 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 5/2/17 1:24 AM, Joel Stanley wrote: > On Tue, Apr 11, 2017 at 5:16 AM, Christopher Bostic > wrote: >> From: Jeremy Kerr >> >> Implement fsi_slave_init: if we can read a chip ID, create fsi_slave >> devices and register with the driver core. >> >> Includes changes from Chris Bostic . >> >> Signed-off-by: Jeremy Kerr >> Signed-off-by: Chris Bostic >> Signed-off-by: Joel Stanley >> --- >> drivers/fsi/fsi-core.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 64 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c >> index 6e1cfdf..c705ca2 100644 >> --- a/drivers/fsi/fsi-core.c >> +++ b/drivers/fsi/fsi-core.c >> @@ -17,9 +17,12 @@ >> #include >> #include >> #include >> +#include >> >> #include "fsi-master.h" >> >> +#define FSI_SLAVE_SIZE_23b 0x800000 >> + >> static DEFINE_IDA(master_ida); >> >> struct fsi_slave { >> @@ -114,11 +117,70 @@ static int fsi_slave_write(struct fsi_slave *slave, uint32_t addr, >> addr, val, size); >> } >> >> +static void fsi_slave_release(struct device *dev) >> +{ >> + struct fsi_slave *slave = to_fsi_slave(dev); >> + >> + kfree(slave); >> +} >> + >> static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id) >> { >> - /* todo: initialise slave device, perform engine scan */ >> + struct fsi_slave *slave; >> + uint32_t chip_id; >> + uint8_t crc; >> + int rc; >> + >> + /* Currently, we only support single slaves on a link, and use the >> + * full 23-bit address range >> + */ >> + if (id != 0) >> + return -EINVAL; >> + >> + rc = fsi_master_read(master, link, id, 0, &chip_id, sizeof(chip_id)); >> + if (rc) { >> + dev_warn(&master->dev, "can't read slave %02x:%02x %d\n", >> + link, id, rc); > When I boot a system with this driver loaded, I get his warning: > > [ 9.740000] usbhid: USB HID core driver > [ 9.840000] fsi0: can't read slave 00:00 -5 > [ 9.840000] NET: Registered protocol family 10 > > Two things: > > There's a space in front of "fsi0". Hi Joel, Will correct. > > This warning isn't useful at that point. The slave is not readable as > the FSI master is not present (the P9 hasn't been turned on). Can we > avoid printing the warning at boot? Yes agreed. Will remove the warning in that case. Thanks, Chris > > Cheers, > > Joel > >> + return -ENODEV; >> + } >> + chip_id = be32_to_cpu(chip_id); >> + >> + crc = fsi_crc4(0, chip_id, 32); >> + if (crc) { >> + dev_warn(&master->dev, "slave %02x:%02x invalid chip id CRC!\n", >> + link, id); >> + return -EIO; >> + } >> + >> + dev_info(&master->dev, "fsi: found chip %08x at %02x:%02x:%02x\n", >> + chip_id, master->idx, link, id); >> + >> + /* We can communicate with a slave; create the slave device and >> + * register. >> + */ >> + slave = kzalloc(sizeof(*slave), GFP_KERNEL); >> + if (!slave) >> + return -ENOMEM; >> + >> + slave->master = master; >> + slave->dev.parent = &master->dev; >> + slave->dev.release = fsi_slave_release; >> + slave->link = link; >> + slave->id = id; >> + slave->size = FSI_SLAVE_SIZE_23b; >> + >> + dev_set_name(&slave->dev, "slave@%02x:%02x", link, id); >> + rc = device_register(&slave->dev); >> + if (rc < 0) { >> + dev_warn(&master->dev, "failed to create slave device: %d\n", >> + rc); >> + put_device(&slave->dev); >> + return rc; >> + } >> + >> + /* todo: perform engine scan */ >> >> - return -ENODEV; >> + return rc; >> } >> >> /* FSI master support */ >> -- >> 1.8.2.2 >>