All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/4] net: stmmac: Enable Intel Quark SoC X1000 Ethernet support
@ 2014-09-11  8:38 Kweh Hock Leong
  2014-09-11  8:38 ` [PATCH v2 1/4] net: stmmac: enhance to support multiple device instances Kweh Hock Leong
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Kweh Hock Leong @ 2014-09-11  8:38 UTC (permalink / raw)
  To: David S. Miller, Giuseppe Cavallaro, rayagond
  Cc: Vince Bridgers, Srinivas Kandagatla, Chen-Yu Tsai, netdev, LKML,
	Ong Boon Leong, Kweh Hock Leong

From: "Kweh, Hock Leong" <hock.leong.kweh@intel.com>

Hi,

Intel Quark X1000 SoC has 2 Ethernet controllers integrated on chip and they are
PCI devices. We adopted the stmmac_pci driver and added on code to support Intel
Quark SoC X1000 by creating the patchset below. The patchset has been built and
tested on Galileo board and found to be working as expected.

We believe that the changes are transparent to other non Intel Quark platform. 
Please help to review the code change and feedback if there is any concern.

Thank you very much.

---
changelog v2:
[PATCH 1/4]
* fix indentation to align with the 1st column of openning parenthesis
* replace the static variable instance_id by using pci bus & devfn number
[PATCH 2/4]
* replace the static variable instance_id by using pci bus & devfn number
[PATCH 3/4]
* replace the static variable instance_id by using pci bus & devfn number

Kweh, Hock Leong (4):
  net: stmmac: enhance to support multiple device instances
  net: stmmac: better code manageability with platform data struct
  net: stmmac: add support for Intel Quark X1000
  net: stmmac: add MSI support for Intel Quark X1000

 drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c |  194 +++++++++++++++++++---
 1 file changed, 171 insertions(+), 23 deletions(-)

-- 
1.7.9.5


^ permalink raw reply	[flat|nested] 13+ messages in thread
* RE: [PATCH v2 3/4] net: stmmac: add support for Intel Quark X1000
@ 2014-10-01 11:06 Kweh, Hock Leong
  0 siblings, 0 replies; 13+ messages in thread
From: Kweh, Hock Leong @ 2014-10-01 11:06 UTC (permalink / raw)
  To: 'David Miller'
  Cc: 'peppe.cavallaro@st.com',
	'rayagond@vayavyalabs.com',
	'vbridgers2013@gmail.com',
	'srinivas.kandagatla@st.com', 'wens@csie.org',
	'netdev@vger.kernel.org',
	'linux-kernel@vger.kernel.org',
	Ong, Boon Leong

> -----Original Message-----
> From: Kweh, Hock Leong
> Sent: Thursday, September 18, 2014 11:18 AM
> > From: David Miller [mailto:davem@davemloft.net]
> > Sent: Wednesday, September 17, 2014 12:56 PM
> > Are you kidding me?  It's a perfect way to identify this device, it
> > properly uses PCI_CLASS_NETWORK_ETHERNET (0x0200) in both cases and
> > this will not match any other function on this PCI device at all.
> >
> > Please do as I suggested and use the PCI class for the differentiation
> > and matching during probing.
> 
> Hi David,
> 
> Thanks for your feedback so far. Appreciate it.
> 
> Sorry to my poorly written description that may have caused some confusion.
> My sincere apology here.
> Unfortunately, I don't really grasp your idea clearly based on your responses
> which I appreciate them a lot.
> Sorry for the long description below but I hope to clearly pen down my
> thinking process so that you can follow my thinking incrementally without
> being confused.
> 
> So, let's roll back a bit so that with my following description, you can help
> correct me if my understanding of using PCI function ID to differentiate PHY
> port that is associated with each Ethernet controller is wrong:
> 
> The high-level idea about the change that I made for STMMAC IP inside
> Quark is as follow:
> 
> (1) Based on Quark-specific PCI ID declared inside stmmac_id_table[],  the
> probe() function is
>        called to continue setting-up STMMAC for Quark.
> 
> @@ -228,11 +303,13 @@ static int stmmac_pci_resume(struct pci_dev *pdev)
> 
>  #define STMMAC_VENDOR_ID 0x700
>  #define STMMAC_DEVICE_ID 0x1108
> +#define STMMAC_QUARK_X1000_ID 0x0937
> 
>  static const struct pci_device_id stmmac_id_table[] = {
>  	{PCI_DEVICE(STMMAC_VENDOR_ID, STMMAC_DEVICE_ID),
> PCI_ANY_ID,
>  			PCI_ANY_ID, CHIP_STMICRO},
>  	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_MAC),
> CHIP_STMICRO},
> +	{PCI_VDEVICE(INTEL, STMMAC_QUARK_X1000_ID),
> CHIP_QUARK_X1000},
>  	{}
>  };
> 
> (2) Back-ground on STMMAC hardware configuration on Intel Galileo Gen 1 &
> Gen 2 platforms:
> Intel Quark SoC has 2 MAC controller as described by lspci output below:
> 
> 00:14.6 Class 0200: 8086:0937    ====> 1st MAC controller
> 00:14.7 Class 0200: 8086:0937    ====> 2nd MAC controller
> 
> These Galileo boards use the same Intel Quark SoC and there is only one PHY
> connect to the 1st MAC [00:14.6 Class 0200: 8086:0937] The 2nd MAC [00:14.7
> Class 0200: 8086:0937] is NOT connected to any PHY at all.
> 
> So, it appears to me that the only way that I can differentiate between 1st &
> 2nd MAC are based on PCI function ID, i.e. 14.6 & 14.7. Therefore, within the
> probe() function, for Intel Quark SoC only, the function performs next-level
> discovery of 1st or 2nd MAC controller through quark_run_time_config()
> function.
> For other PCI ID (currently STMICRO_MAC) there is NO next-level discovery
> involved as rt_config is NULL.
> Changes shown below:
> 
> static struct platform_data platform_info[] = { @@ -59,15 +65,76 @@ static
> struct platform_data platform_info[] = {
>  		.phy_reset = NULL,
>  		.phy_mask = 0,
>  		.pbl = 32,
> +		.fixed_burst = 0,
>  		.burst_len = DMA_AXI_BLEN_256,
> +		.rt_config = NULL,  ===================> no 2nd-level
> discovery for other PCI ID
> +	},
> +	[CHIP_QUARK_X1000] = {
> +		.phy_addr = 1,
> +		.interface = PHY_INTERFACE_MODE_RMII,
> +		.clk_csr = 2,
> +		.has_gmac = 1,
> +		.force_sf_dma_mode = 1,
> +		.multicast_filter_bins = HASH_TABLE_SIZE,
> +		.unicast_filter_entries = 1,
> +		.phy_reset = NULL,
> +		.phy_mask = 0,
> +		.pbl = 16,
> +		.fixed_burst = 1,
> +		.burst_len = DMA_AXI_BLEN_256,
> +		.rt_config = &quark_run_time_config,       ==========>
> Quark specific 2nd-level discovery
> +	},
> +};
> 
> (3) Within quark_run_time_config(), due to the only way to differentiate 1st
> or 2nd MAC controller according to difference in function ID explained above,
> the following changes are made:
> 
> +static void quark_run_time_config(int chip_id, struct pci_dev *pdev) {
> +	const char *board_name =
> dmi_get_system_info(DMI_BOARD_NAME);
> +	int i;
> +	int func_num = PCI_FUNC(pdev->devfn);
> +
> +	if (!board_name)
> +		return;
> +
> +	for (i = 0; i < ARRAY_SIZE(quark_x1000_phy_info); i++) {
> +		if ((!strcmp(quark_x1000_phy_info[i].board_name,
> board_name)) &&
> +		    quark_x1000_phy_info[i].pci_func_num == func_num)
> +			platform_info[chip_id].phy_addr =
> +				quark_x1000_phy_info[i].phy_address;
> +	}
> +}
> 
> The reasons for the above proposed condition checks, i.e. "board name" &
> "pci function name" are below:
>   a) As described above, the only difference in both instance of STMMAC IP
> inside Intel Quark SoC is the function ID,
>        so I have proposed to use function ID to be the decision point here to
> differentiate 1st MAC from 2nd MAC.
>   b) Allow future expansion of any other Intel Quark platforms with specific
> need to fix PHY address
>   c) A PHY address set as "-1"  is to mark that the PHY (associated with
> function ID) is not connected to MAC, which
>       is being used here for the 2 Galileo boards -> 2nd MAC port not connected
> with PHY.
> 
> 
> Finally, based on the above description, it appears to me that using PCI
> function ID to decode seems viable for Intel Quark specific hardware
> configuration.
> 
> Appreciate your time and any feedback is very much appreciated.
> 
> Thanks.
> 
> 
> Regards,
> Wilson


Hi Guys,

Just gently ping for the discussion to carry on before forgetting the context.
Anyone have any better idea or comments or concern to this topic?
Hope the above explanation clear out your doubt.


Regards,
Wilson


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2014-10-01 11:06 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-11  8:38 [PATCH v2 0/4] net: stmmac: Enable Intel Quark SoC X1000 Ethernet support Kweh Hock Leong
2014-09-11  8:38 ` [PATCH v2 1/4] net: stmmac: enhance to support multiple device instances Kweh Hock Leong
2014-09-11  8:38 ` [PATCH v2 2/4] net: stmmac: better code manageability with platform data struct Kweh Hock Leong
2014-09-11  8:38 ` [PATCH v2 3/4] net: stmmac: add support for Intel Quark X1000 Kweh Hock Leong
2014-09-12 22:14   ` David Miller
2014-09-15 12:42     ` Kweh, Hock Leong
2014-09-16 19:00       ` David Miller
2014-09-17  2:41         ` Kweh, Hock Leong
2014-09-17  4:55           ` David Miller
2014-09-17  9:11             ` Kweh, Hock Leong
2014-09-17 15:57               ` David Miller
2014-09-11  8:38 ` [PATCH v2 4/4] net: stmmac: add MSI " Kweh Hock Leong
2014-10-01 11:06 [PATCH v2 3/4] net: stmmac: add " Kweh, Hock Leong

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.