From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Fei Yang <fei.yang@linux.intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
Boon Leong Ong <boon.leong.ong@intel.com>
Cc: linux-kernel@vger.kernel.org, Fei Yang <fei.yang@intel.com>
Subject: Re: [PATCH] IOSF: Add interface for the cases requiring fid
Date: Mon, 11 Apr 2016 13:26:41 +0300 [thread overview]
Message-ID: <1460370401.6620.67.camel@linux.intel.com> (raw)
In-Reply-To: <1460149376-101469-1-git-send-email-fei.yang@linux.intel.com>
On Fri, 2016-04-08 at 14:02 -0700, Fei Yang wrote:
> From: Fei Yang <fei.yang@intel.com>
>
In subject better to use x86/platform/iosf_mbi prefix.
> Some implementations may require an additional step for setting the
> FID
What FID stands for?
> bits to ensure correct transactions over the IOSF side band interface.
> Add the FID support accordingly for such implementations
>
> Change-Id: Ic0227f9e74133a3203aa08e8471939f905d19622
This should not be here.
> --- a/arch/x86/include/asm/iosf_mbi.h
> +++ b/arch/x86/include/asm/iosf_mbi.h
> @@ -88,6 +89,32 @@ int iosf_mbi_write(u8 port, u8 opcode, u32 offset,
> u32 mdr);
> */
> int iosf_mbi_modify(u8 port, u8 opcode, u32 offset, u32 mdr, u32
> mask);
>
> +/**
> + * iosf_mbi_read_with_fid() - MailBox Interface read command
> requiring fid
> + * @fid: fid bits
> + * @port: port indicating subunit being accessed
> + * @opcode: port specific read or write opcode
> + * @offset: register address offset
> + * @mdr: register data to be read
> + *
> + * Locking is handled by spinlock - cannot sleep.
> + * Return: Nonzero on error
> + */
> +int iosf_mbi_read_with_fid(u32 fid, u8 port, u8 opcode, u32 offset,
> u32 *mdr);
> +
> +/**
> + * iosf_mbi_write_with_fid() - MailBox unmasked write command
> requiring fid
> + * @fid: fid bits
> + * @port: port indicating subunit being accessed
> + * @opcode: port specific read or write opcode
> + * @offset: register address offset
> + * @mdr: register data to be written
> + *
> + * Locking is handled by spinlock - cannot sleep.
> + * Return: Nonzero on error
> + */
> +int iosf_mbi_write_with_fid(u32 fid, u8 port, u8 opcode, u32 offset,
> u32 mdr);
> +
> #else /* CONFIG_IOSF_MBI is not enabled */
> static inline
> bool iosf_mbi_available(void)
> diff --git a/arch/x86/platform/intel/iosf_mbi.c
> b/arch/x86/platform/intel/iosf_mbi.c
> index edf2c54..af182c1 100644
> --- a/arch/x86/platform/intel/iosf_mbi.c
> +++ b/arch/x86/platform/intel/iosf_mbi.c
> @@ -98,6 +98,24 @@ fail_write:
> return result;
> }
>
> +static int iosf_mbi_pci_write_fid(u32 fid)
Function name should continue already used pattern, i.e.
…_write_mcrp()
> +{
> + int result;
> +
> + if (!mbi_pdev)
> + return -ENODEV;
> +
> + result = pci_write_config_dword(mbi_pdev, MBI_MCRP_OFFSET,
> fid);
The function of one line.
So, please, inline it directly where it's used.
> + if (result < 0)
> + goto fail_fid_write;
> +
> + return 0;
> +
> +fail_fid_write:
> + dev_err(&mbi_pdev->dev, "PCI config access failed with %d\n",
> result);
> + return result;
> +}
> +
> int iosf_mbi_read(u8 port, u8 opcode, u32 offset, u32 *mdr)
> {
> u32 mcr, mcrx;
> @@ -183,6 +201,61 @@ int iosf_mbi_modify(u8 port, u8 opcode, u32
> offset, u32 mdr, u32 mask)
> }
> EXPORT_SYMBOL(iosf_mbi_modify);
>
> +/*
> + * Some IP blocks require fid to access their registers.
Any user?
This API doesn't make much sense without user.
> + * fid value is programmed through MCRP register, see above function
> + * iosf_mbi_pci_write_fid() for details.
> + */
> +int iosf_mbi_read_with_fid(u32 fid, u8 port, u8 opcode, u32 offset,
> u32 *mdr)
Name kinda fuzzy. How user should know which one to choose? Does fid ==
0 work for some cases? We have to think about API and naming.
> +{
> + u32 mcr, mcrx;
> + unsigned long flags;
> + int ret;
> +
> + /*Access to the GFX unit is handled by GPU code */
Spaces.
> + if (port == BT_MBI_UNIT_GFX) {
> + WARN_ON(1);
> + return -EPERM;
> + }
> +
> + mcr = iosf_mbi_form_mcr(opcode, port, offset & MBI_MASK_LO);
> + mcrx = offset & MBI_MASK_HI;
> +
> + spin_lock_irqsave(&iosf_mbi_lock, flags);
> + ret = iosf_mbi_pci_write_fid(fid);
> + if (!ret)
> + ret = iosf_mbi_pci_read_mdr(mcrx, mcr, mdr);
> + spin_unlock_irqrestore(&iosf_mbi_lock, flags);
> +
> + return ret;
> +}
> +EXPORT_SYMBOL(iosf_mbi_read_with_fid);
> +
> +int iosf_mbi_write_with_fid(u32 fid, u8 port, u8 opcode, u32 offset,
> u32 mdr)
> +{
> + u32 mcr, mcrx;
> + unsigned long flags;
> + int ret;
> +
> + /*Access to the GFX unit is handled by GPU code */
Ditto.
> + if (port == BT_MBI_UNIT_GFX) {
> + WARN_ON(1);
> + return -EPERM;
> + }
> +
> + mcr = iosf_mbi_form_mcr(opcode, port, offset & MBI_MASK_LO);
> + mcrx = offset & MBI_MASK_HI;
> +
> + spin_lock_irqsave(&iosf_mbi_lock, flags);
> + ret = iosf_mbi_pci_write_fid(fid);
> + if (!ret)
> + ret = iosf_mbi_pci_write_mdr(mcrx, mcr, mdr);
> + spin_unlock_irqrestore(&iosf_mbi_lock, flags);
Both of them quite similar to already exist _write()/_read(). Is it
possible to combine them out?
> +
> + return ret;
> +}
> +EXPORT_SYMBOL(iosf_mbi_write_with_fid);
> +
> bool iosf_mbi_available(void)
> {
> /* Mbi isn't hot-pluggable. No remove routine is provided */
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
next prev parent reply other threads:[~2016-04-11 10:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-08 21:02 [PATCH] IOSF: Add interface for the cases requiring fid Fei Yang
2016-04-11 10:26 ` Andy Shevchenko [this message]
2016-04-12 0:18 ` Yang, Fei
2016-04-13 13:28 ` Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1460370401.6620.67.camel@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=boon.leong.ong@intel.com \
--cc=fei.yang@intel.com \
--cc=fei.yang@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=rafael.j.wysocki@intel.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.