From patchwork Mon May 22 11:12:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 765331 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wWbch02mZz9s4q for ; Mon, 22 May 2017 21:13:24 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933087AbdEVLMU (ORCPT ); Mon, 22 May 2017 07:12:20 -0400 Received: from goliath.siemens.de ([192.35.17.28]:43678 "EHLO goliath.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752317AbdEVLMR (ORCPT ); Mon, 22 May 2017 07:12:17 -0400 Received: from mail1.siemens.de (mail1.siemens.de [139.23.33.14]) by goliath.siemens.de (8.15.2/8.15.2) with ESMTPS id v4MBCBQG017521 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 22 May 2017 13:12:11 +0200 Received: from md1f2u6c.ww002.siemens.net.net ([139.25.68.37]) by mail1.siemens.de (8.15.2/8.15.2) with ESMTP id v4MBCAIU003976; Mon, 22 May 2017 13:12:11 +0200 From: Jan Kiszka To: Giuseppe Cavallaro , Alexandre Torgue , David Miller Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Andy Shevchenko Subject: [PATCH 3/3] stmmac: pci: Use dmi_system_id table for retrieving PHY addresses Date: Mon, 22 May 2017 13:12:09 +0200 Message-Id: X-Mailer: git-send-email 2.12.0 In-Reply-To: References: In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Avoids reimplementation of DMI matching in stmmac_pci_find_phy_addr. Signed-off-by: Jan Kiszka --- drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 77 ++++++++++++++---------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c index ffa59b76e884..23ef235c6c0d 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c @@ -31,65 +31,78 @@ * with PHY. */ struct stmmac_pci_dmi_data { - const char *name; - const char *asset_tag; - unsigned int func; + int func; int phy_addr; }; typedef int (*stmmac_setup)(struct pci_dev *, struct plat_stmmacenet_data *); -static struct stmmac_pci_dmi_data quark_pci_dmi_data[] = { +static const struct stmmac_pci_dmi_data galileo_stmmac_dmi_data[] = { { - .name = "Galileo", .func = 6, .phy_addr = 1, }, + {-1, -1}, +}; + +static const struct stmmac_pci_dmi_data iot2040_stmmac_dmi_data[] = { { - .name = "GalileoGen2", .func = 6, .phy_addr = 1, }, { - .name = "SIMATIC IOT2000", - .asset_tag = "6ES7647-0AA00-0YA2", - .func = 6, + .func = 7, .phy_addr = 1, }, + {-1, -1}, +}; + +static const struct dmi_system_id quark_pci_dmi[] = { { - .name = "SIMATIC IOT2000", - .asset_tag = "6ES7647-0AA00-1YA2", - .func = 6, - .phy_addr = 1, + .matches = { + DMI_EXACT_MATCH(DMI_BOARD_NAME, "Galileo"), + }, + .driver_data = (void *)galileo_stmmac_dmi_data, }, { - .name = "SIMATIC IOT2000", - .asset_tag = "6ES7647-0AA00-1YA2", - .func = 7, - .phy_addr = 1, + .matches = { + DMI_EXACT_MATCH(DMI_BOARD_NAME, "GalileoGen2"), + }, + .driver_data = (void *)galileo_stmmac_dmi_data, + }, + { + .matches = { + DMI_EXACT_MATCH(DMI_BOARD_NAME, "SIMATIC IOT2000"), + DMI_EXACT_MATCH(DMI_BOARD_ASSET_TAG, + "6ES7647-0AA00-0YA2"), + }, + .driver_data = (void *)galileo_stmmac_dmi_data, + }, + { + .matches = { + DMI_EXACT_MATCH(DMI_BOARD_NAME, "SIMATIC IOT2000"), + DMI_EXACT_MATCH(DMI_BOARD_ASSET_TAG, + "6ES7647-0AA00-1YA2"), + }, + .driver_data = (void *)iot2040_stmmac_dmi_data, }, {} }; static int stmmac_pci_find_phy_addr(struct pci_dev *pdev, - struct stmmac_pci_dmi_data *dmi_data) + const struct dmi_system_id *dmi_list) { - const char *name = dmi_get_system_info(DMI_BOARD_NAME); - const char *asset_tag = dmi_get_system_info(DMI_BOARD_ASSET_TAG); - unsigned int func = PCI_FUNC(pdev->devfn); - struct stmmac_pci_dmi_data *dmi; + const struct stmmac_pci_dmi_data *dmi_data; + const struct dmi_system_id *dmi_id; + int func = PCI_FUNC(pdev->devfn); - if (!name) + dmi_id = dmi_first_match(dmi_list); + if (!dmi_id) return -ENODEV; - for (dmi = dmi_data; dmi->name && *dmi->name; dmi++) { - if (!strcmp(dmi->name, name) && dmi->func == func) { - /* If asset tag is provided, match on it as well. */ - if (dmi->asset_tag && strcmp(dmi->asset_tag, asset_tag)) - continue; - return dmi->phy_addr; - } - } + for (dmi_data = dmi_id->driver_data; dmi_data->func >= 0; dmi_data++) + if (dmi_data->func == func) + return dmi_data->phy_addr; return -ENODEV; } @@ -153,7 +166,7 @@ static int quark_default_setup(struct pci_dev *pdev, * Refuse to load the driver and register net device if MAC controller * does not connect to any PHY interface. */ - ret = stmmac_pci_find_phy_addr(pdev, quark_pci_dmi_data); + ret = stmmac_pci_find_phy_addr(pdev, quark_pci_dmi); if (ret < 0) { /* * Galileo boards with old firmware don't support DMI. We always