* [PATCHv2 2/6] mm/cma: Cleanup highmem check
From: Laura Abbott @ 2016-11-02 21:00 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20161102210054.16621-1-labbott@redhat.com>
6b101e2a3ce4 ("mm/CMA: fix boot regression due to physical address of
high_memory") added checks to use __pa_nodebug on x86 since
CONFIG_DEBUG_VIRTUAL complains about high_memory not being linearlly
mapped. arm64 is now getting support for CONFIG_DEBUG_VIRTUAL as well.
Rather than add an explosion of arches to the #ifdef, switch to an
alternate method to calculate the physical start of highmem using
the page before highmem starts. This avoids the need for the #ifdef and
extra __pa_nodebug calls.
Signed-off-by: Laura Abbott <labbott@redhat.com>
---
mm/cma.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/mm/cma.c b/mm/cma.c
index 384c2cb..71a2ec1 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -235,18 +235,13 @@ int __init cma_declare_contiguous(phys_addr_t base,
phys_addr_t highmem_start;
int ret = 0;
-#ifdef CONFIG_X86
/*
- * high_memory isn't direct mapped memory so retrieving its physical
- * address isn't appropriate. But it would be useful to check the
- * physical address of the highmem boundary so it's justifiable to get
- * the physical address from it. On x86 there is a validation check for
- * this case, so the following workaround is needed to avoid it.
+ * We can't use __pa(high_memory) directly, since high_memory
+ * isn't a valid direct map VA, and DEBUG_VIRTUAL will (validly)
+ * complain. Find the boundary by adding one to the last valid
+ * address.
*/
- highmem_start = __pa_nodebug(high_memory);
-#else
- highmem_start = __pa(high_memory);
-#endif
+ highmem_start = __pa(high_memory - 1) + 1;
pr_debug("%s(size %pa, base %pa, limit %pa alignment %pa)\n",
__func__, &size, &base, &limit, &alignment);
--
2.10.1
^ permalink raw reply related
* [PATCHv2 1/6] lib/Kconfig.debug: Add ARCH_HAS_DEBUG_VIRTUAL
From: Laura Abbott @ 2016-11-02 21:00 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20161102210054.16621-1-labbott@redhat.com>
DEBUG_VIRTUAL currently depends on DEBUG_KERNEL && X86. arm64 is getting
the same support. Rather than add a list of architectures, switch this
to ARCH_HAS_DEBUG_VIRTUAL and let architectures select it as
appropriate.
Suggested-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Laura Abbott <labbott@redhat.com>
---
arch/x86/Kconfig | 1 +
lib/Kconfig.debug | 5 ++++-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index bada636..f533321 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -23,6 +23,7 @@ config X86
select ARCH_CLOCKSOURCE_DATA
select ARCH_DISCARD_MEMBLOCK
select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
+ select ARCH_HAS_DEBUG_VIRTUAL
select ARCH_HAS_DEVMEM_IS_ALLOWED
select ARCH_HAS_ELF_RANDOMIZE
select ARCH_HAS_FAST_MULTIPLIER
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index b01e547..5050530 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -603,9 +603,12 @@ config DEBUG_VM_PGFLAGS
If unsure, say N.
+config ARCH_HAS_DEBUG_VIRTUAL
+ bool
+
config DEBUG_VIRTUAL
bool "Debug VM translations"
- depends on DEBUG_KERNEL && X86
+ depends on DEBUG_KERNEL && ARCH_HAS_DEBUG_VIRTUAL
help
Enable some costly sanity checks in virtual to page code. This can
catch mistakes with virt_to_page() and friends.
--
2.10.1
^ permalink raw reply related
* [PATCHv2 0/6] CONFIG_DEBUG_VIRTUAL for arm64
From: Laura Abbott @ 2016-11-02 21:00 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
This is v2 of the series to add CONFIG_DEBUG_VIRTUAL support from arm64. This
has been split out into a number of patches:
Patch #1 Adds ARCH_HAS_DEBUG_VIRTUAL to avoid the need for adding arch
dependencies for DEBUG_VIRTUAL. This touches arch/x86/Kconfig
Patch #2 Cleans up cma to not rely on __pa_nodebug and have an #ifdef inline
in the function.
Patch #3 Adjust some macros in arm64 memory.h to be under __ASSEMBLY__
protection
Patch #4 Adds a cast for virt_to_pfn since __virt_to_phys for DEBUG_VIRTUAL no
longer has a cast.
Patch #5 Switches to using __pa_symbol for _end to avoid erroneously triggering
a bounds error with the debugging.
Patch #6 is the actual implementation of DEBUG_VIRTUAL. The biggest change from
the RFCv1 is the addition of __phys_addr_symbol. This is to handle several
places where the physical address of _end is needed. x86 avoids this problem by
doing its bounds check based on the entire possible image space which is well
beyond where _end would end up.
There are a few dependencies outside of arm64, so I don't know if
it will be easier for this to eventually go through arm64 or the mm tree.
Thanks,
Laura
Laura Abbott (6):
lib/Kconfig.debug: Add ARCH_HAS_DEBUG_VIRTUAL
mm/cma: Cleanup highmem check
arm64: Move some macros under #ifndef __ASSEMBLY__
arm64: Add cast for virt_to_pfn
arm64: Use __pa_symbol for _end
arm64: Add support for CONFIG_DEBUG_VIRTUAL
arch/arm64/Kconfig | 1 +
arch/arm64/include/asm/memory.h | 50 ++++++++++++++++++++++++-----------------
arch/arm64/mm/Makefile | 2 ++
arch/arm64/mm/init.c | 4 ++--
arch/arm64/mm/physaddr.c | 34 ++++++++++++++++++++++++++++
arch/x86/Kconfig | 1 +
lib/Kconfig.debug | 5 ++++-
mm/cma.c | 15 +++++--------
8 files changed, 79 insertions(+), 33 deletions(-)
create mode 100644 arch/arm64/mm/physaddr.c
--
2.10.1
^ permalink raw reply
* Use of GICv3/ITS with PCIe host-generic driver - resizing ITS MAPD?
From: Marc Zyngier @ 2016-11-02 20:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CY1PR07MB2506C9B4133B1CE185AD0260D8A00@CY1PR07MB2506.namprd07.prod.outlook.com>
On Wed, Nov 02 2016 at 09:36:14 AM, Alan Douglas <adouglas@cadence.com> wrote:
> Hi Marc,
>
>> > When setting up bus 0, the ITS device is created, and
>> > its_build_map_cmd() sets the size of the ITS MAPD based on the number
>> > of interrupts claimed by bus 0. When subsequent buses are enumerated,
>> > the ITS device will be reused, however we do not increase the number
>> > of supported interrupts to allow for the additional interrupts claimed
>> > by the additional devices being enumerated. (This can be seen in
>> > its_msi_prepare(), which is called for each device which has MSI/MSI-X
>> > enabled, and will reuse an existing ITS. )
>>
>> Am I right in understanding that all the PCIe devices in your system end-up
>> aliasing to the same RequesterID? If so, that's a major issue. The ITS is
>> designed so that each device exposes its *own* RID, and have its own
>> Interrupt Translation Table (ITT).
>>
>> In your case, you seem to first discover the root port, which is not upstream
>> of anything, so it doesn't alias with anything at that point. We allocate the
>> corresponding ITT, and it's all fine. Until we start probing the rest, and ugly
>> things happen.
>>
> Yes, your understanding is correct. I will dig into this a bit
> further to see what is wrong then send an update. I suspect my DTS
> msi mapping.
Right. That would explain a lot of what you're seeing. In general, and
unless you have some funky remapping going on, you're better off having
a very straightforward msi-map property in your RC node (such as example
#1 in Documentation/devicetree/bindings/pci/pci-msi.txt).
Thanks,
M.
--
Jazz is not dead. It just smells funny.
^ permalink raw reply
* [PATCH 1/1] KVM: ARM64: Fix the issues when PMCCFILTR is configured
From: Wei Huang @ 2016-11-02 20:55 UTC (permalink / raw)
To: linux-arm-kernel
KVM calls kvm_pmu_set_counter_event_type() when PMCCFILTR is configured.
But this function can't deals with PMCCFILTR correctly because the evtCount
bit of PMCCFILTR, which is reserved 0, conflits with the SW_INCR event
type of other PMXEVTYPER<n> registers. To fix it, when eventsel == 0, KVM
shouldn't return immediately, but instead it needs to check further if
select_idx is ARMV8_PMU_CYCLE_IDX.
Another issue is that KVM shouldn't copy the eventsel bits of PMCCFILTER
directly to attr.config. Istead it shoudl convert the request to
perf_event of type 0x11 (i.e. the "cpu cycle" event type).
Signed-off-by: Wei Huang <wei@redhat.com>
---
virt/kvm/arm/pmu.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/virt/kvm/arm/pmu.c b/virt/kvm/arm/pmu.c
index 6e9c40e..13cc812 100644
--- a/virt/kvm/arm/pmu.c
+++ b/virt/kvm/arm/pmu.c
@@ -379,7 +379,8 @@ void kvm_pmu_set_counter_event_type(struct kvm_vcpu *vcpu, u64 data,
eventsel = data & ARMV8_PMU_EVTYPE_EVENT;
/* Software increment event does't need to be backed by a perf event */
- if (eventsel == ARMV8_PMU_EVTYPE_EVENT_SW_INCR)
+ if (eventsel == ARMV8_PMU_EVTYPE_EVENT_SW_INCR &&
+ select_idx != ARMV8_PMU_CYCLE_IDX)
return;
memset(&attr, 0, sizeof(struct perf_event_attr));
@@ -391,7 +392,7 @@ void kvm_pmu_set_counter_event_type(struct kvm_vcpu *vcpu, u64 data,
attr.exclude_kernel = data & ARMV8_PMU_EXCLUDE_EL1 ? 1 : 0;
attr.exclude_hv = 1; /* Don't count EL2 events */
attr.exclude_host = 1; /* Don't count host events */
- attr.config = eventsel;
+ attr.config = (select_idx == ARMV8_PMU_CYCLE_IDX) ? 0x011 : eventsel;
counter = kvm_pmu_get_counter_value(vcpu, select_idx);
/* The initial sample period (overflow count) of an event. */
--
2.7.4
^ permalink raw reply related
* [RFC PATCH v2 1/1] PCI/ACPI: xgene: Add ECAM quirk for X-Gene PCIe controller
From: Duc Dang @ 2016-11-02 20:54 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20161102165329.GB10528@bhelgaas-glaptop.roam.corp.google.com>
On Wed, Nov 2, 2016 at 9:53 AM, Bjorn Helgaas <helgaas@kernel.org> wrote:
>
> Hi Duc,
>
> On Tue, Oct 25, 2016 at 06:24:32PM -0700, Duc Dang wrote:
> > PCIe controllers in X-Gene SoCs is not ECAM compliant: software
> > needs to configure additional controller's register to address
> > device at bus:dev:function.
> >
> > This patch depends on "ECAM quirks handling for ARM64 platforms"
> > series (http://www.spinics.net/lists/arm-kernel/msg530692.html,
> > the series was also modified by Bjorn) to address the limitation
> > above for X-Gene PCIe controller.
> >
> > The quirk will only be applied for X-Gene PCIe MCFG table with
> > OEM revison 1, 2, 3 or 4 (PCIe controller v1 and v2 on X-Gene SoCs).
>
> The quirks here contain some hard-coded address space consumed by
> ECAM. The ECAM quirk itself is not a generic description of that
> address space in the sense of a PCI BAR or an ACPI _CRS method, i.e.,
> the quirk description is not enough to keep other parts of the kernel
> from treating the address space as "available".
Your concern here is the controller register region that I declared as
hard-coded array of resource (xgene_vx_csr_res) is not owned by the
root bridge? So unlike DT case where kernel discovers and knows
exactly who owns this resource (and we can also use
platform_get_resource to get the resource); in ACPI case with ECAM
quirk, kernel knows who requests this resource but does not know who
owns it? Do I understand correctly?
>
> Can you add a note here in the changelog about how you are describing
> this space generically? The standard solution is a PNP0C02 device
> with _CRS that describes it.
>
> It would be ideal if you could open a bugzilla at bugzilla.kernel.org
> and attach there a dmesg log, /proc/iomem contents, and DSDT. This
> would show both the generic PNP0C02 piece and the ECAM quirk piece.
We don't have PNP0C02 device in our ACPI Table. Do you want me add a
PNP0C02 device into our firmware and check/document the difference in
/proc/iomem output?
>
> BTW, I did refresh and re-push the pci/ecam-v6 branch where I'm
> collecting this stuff, so if you want to rebase your patch on top of
> that and test it, that would be great.
Thanks, I will definitely do that.
>
> > Signed-off-by: Duc Dang <dhdang@apm.com>
> > ---
> > v2 changes:
> > 1. Get rid of pci-xgene-ecam.c file and fold quirk code into pci-xgene.c
> > 2. Redefine fixup array for X-Gene
> > 3. Use devm_ioremap_resource to map csr_base
> >
> > drivers/acpi/pci_mcfg.c | 30 ++++++++
> > drivers/pci/host/pci-xgene.c | 165 ++++++++++++++++++++++++++++++++++++++++++-
> > include/linux/pci-ecam.h | 5 ++
> > 3 files changed, 197 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
> > index bb2c508..9dfc937 100644
> > --- a/drivers/acpi/pci_mcfg.c
> > +++ b/drivers/acpi/pci_mcfg.c
> > @@ -96,6 +96,36 @@ struct mcfg_fixup {
> > THUNDER_ECAM_MCFG(2, 12),
> > THUNDER_ECAM_MCFG(2, 13),
> > #endif
> > +#ifdef CONFIG_PCI_XGENE
> > +#define XGENE_V1_ECAM_MCFG(rev, seg) \
> > + {"APM ", "XGENE ", rev, seg, MCFG_BUS_ANY, \
> > + &xgene_v1_pcie_ecam_ops }
> > +#define XGENE_V2_1_ECAM_MCFG(rev, seg) \
> > + {"APM ", "XGENE ", rev, seg, MCFG_BUS_ANY, \
> > + &xgene_v2_1_pcie_ecam_ops }
> > +#define XGENE_V2_2_ECAM_MCFG(rev, seg) \
> > + {"APM ", "XGENE ", rev, seg, MCFG_BUS_ANY, \
> > + &xgene_v2_2_pcie_ecam_ops }
> > +
> > + /* X-Gene SoC with v1 PCIe controller */
> > + XGENE_V1_ECAM_MCFG(1, 0),
> > + XGENE_V1_ECAM_MCFG(1, 1),
> > + XGENE_V1_ECAM_MCFG(1, 2),
> > + XGENE_V1_ECAM_MCFG(1, 3),
> > + XGENE_V1_ECAM_MCFG(1, 4),
> > + XGENE_V1_ECAM_MCFG(2, 0),
> > + XGENE_V1_ECAM_MCFG(2, 1),
> > + XGENE_V1_ECAM_MCFG(2, 2),
> > + XGENE_V1_ECAM_MCFG(2, 3),
> > + XGENE_V1_ECAM_MCFG(2, 4),
> > + /* X-Gene SoC with v2.1 PCIe controller */
> > + XGENE_V2_1_ECAM_MCFG(3, 0),
> > + XGENE_V2_1_ECAM_MCFG(3, 1),
> > + /* X-Gene SoC with v2.2 PCIe controller */
> > + XGENE_V2_2_ECAM_MCFG(4, 0),
> > + XGENE_V2_2_ECAM_MCFG(4, 1),
> > + XGENE_V2_2_ECAM_MCFG(4, 2),
> > +#endif
> > };
> >
> > static char mcfg_oem_id[ACPI_OEM_ID_SIZE];
> > diff --git a/drivers/pci/host/pci-xgene.c b/drivers/pci/host/pci-xgene.c
> > index 1de23d7..d6aa642 100644
> > --- a/drivers/pci/host/pci-xgene.c
> > +++ b/drivers/pci/host/pci-xgene.c
> > @@ -27,6 +27,8 @@
> > #include <linux/of_irq.h>
> > #include <linux/of_pci.h>
> > #include <linux/pci.h>
> > +#include <linux/pci-acpi.h>
> > +#include <linux/pci-ecam.h>
> > #include <linux/platform_device.h>
> > #include <linux/slab.h>
> >
> > @@ -64,6 +66,7 @@
> > /* PCIe IP version */
> > #define XGENE_PCIE_IP_VER_UNKN 0
> > #define XGENE_PCIE_IP_VER_1 1
> > +#define XGENE_PCIE_IP_VER_2 2
> >
> > struct xgene_pcie_port {
> > struct device_node *node;
> > @@ -97,7 +100,15 @@ static inline u32 pcie_bar_low_val(u32 addr, u32 flags)
> > */
> > static void __iomem *xgene_pcie_get_cfg_base(struct pci_bus *bus)
> > {
> > - struct xgene_pcie_port *port = bus->sysdata;
> > + struct pci_config_window *cfg;
> > + struct xgene_pcie_port *port;
> > +
> > + if (acpi_disabled)
> > + port = bus->sysdata;
> > + else {
> > + cfg = bus->sysdata;
> > + port = cfg->priv;
> > + }
> >
> > if (bus->number >= (bus->primary + 1))
> > return port->cfg_base + AXI_EP_CFG_ACCESS;
> > @@ -111,10 +122,18 @@ static void __iomem *xgene_pcie_get_cfg_base(struct pci_bus *bus)
> > */
> > static void xgene_pcie_set_rtdid_reg(struct pci_bus *bus, uint devfn)
> > {
> > - struct xgene_pcie_port *port = bus->sysdata;
> > + struct pci_config_window *cfg;
> > + struct xgene_pcie_port *port;
> > unsigned int b, d, f;
> > u32 rtdid_val = 0;
> >
> > + if (acpi_disabled)
> > + port = bus->sysdata;
> > + else {
> > + cfg = bus->sysdata;
> > + port = cfg->priv;
> > + }
> > +
> > b = bus->number;
> > d = PCI_SLOT(devfn);
> > f = PCI_FUNC(devfn);
> > @@ -158,7 +177,15 @@ static void __iomem *xgene_pcie_map_bus(struct pci_bus *bus, unsigned int devfn,
> > static int xgene_pcie_config_read32(struct pci_bus *bus, unsigned int devfn,
> > int where, int size, u32 *val)
> > {
> > - struct xgene_pcie_port *port = bus->sysdata;
> > + struct pci_config_window *cfg;
> > + struct xgene_pcie_port *port;
> > +
> > + if (acpi_disabled)
> > + port = bus->sysdata;
> > + else {
> > + cfg = bus->sysdata;
> > + port = cfg->priv;
> > + }
> >
> > if (pci_generic_config_read32(bus, devfn, where & ~0x3, 4, val) !=
> > PCIBIOS_SUCCESSFUL)
> > @@ -189,6 +216,138 @@ static int xgene_pcie_config_read32(struct pci_bus *bus, unsigned int devfn,
> > .write = pci_generic_config_write32,
> > };
> >
> > +#ifdef CONFIG_ACPI
> > +static struct resource xgene_v1_csr_res[] = {
> > + [0] = DEFINE_RES_MEM(0x1f2b0000UL, SZ_64K),
> > + [1] = DEFINE_RES_MEM(0x1f2c0000UL, SZ_64K),
> > + [2] = DEFINE_RES_MEM(0x1f2d0000UL, SZ_64K),
> > + [3] = DEFINE_RES_MEM(0x1f500000UL, SZ_64K),
> > + [4] = DEFINE_RES_MEM(0x1f510000UL, SZ_64K),
> > +};
> > +
> > +static int xgene_v1_pcie_ecam_init(struct pci_config_window *cfg)
> > +{
> > + struct acpi_device *adev = to_acpi_device(cfg->parent);
> > + struct acpi_pci_root *root = acpi_driver_data(adev);
> > + struct device *dev = cfg->parent;
> > + struct xgene_pcie_port *port;
> > + struct resource *csr;
> > +
> > + port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
> > + if (!port)
> > + return -ENOMEM;
> > +
> > + csr = &xgene_v1_csr_res[root->segment];
> > + port->csr_base = devm_ioremap_resource(dev, csr);
> > + if (IS_ERR(port->csr_base)) {
> > + kfree(port);
> > + return -ENOMEM;
> > + }
> > +
> > + port->cfg_base = cfg->win;
> > + port->version = XGENE_PCIE_IP_VER_1;
> > +
> > + cfg->priv = port;
> > +
> > + return 0;
> > +}
> > +
> > +struct pci_ecam_ops xgene_v1_pcie_ecam_ops = {
> > + .bus_shift = 16,
> > + .init = xgene_v1_pcie_ecam_init,
> > + .pci_ops = {
> > + .map_bus = xgene_pcie_map_bus,
> > + .read = xgene_pcie_config_read32,
> > + .write = pci_generic_config_write,
> > + }
> > +};
> > +
> > +static struct resource xgene_v2_1_csr_res[] = {
> > + [0] = DEFINE_RES_MEM(0x1f2b0000UL, SZ_64K),
> > + [1] = DEFINE_RES_MEM(0x1f2c0000UL, SZ_64K),
> > +};
> > +
> > +static int xgene_v2_1_pcie_ecam_init(struct pci_config_window *cfg)
> > +{
> > + struct acpi_device *adev = to_acpi_device(cfg->parent);
> > + struct acpi_pci_root *root = acpi_driver_data(adev);
> > + struct device *dev = cfg->parent;
> > + struct xgene_pcie_port *port;
> > + struct resource *csr;
> > +
> > + port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
> > + if (!port)
> > + return -ENOMEM;
> > +
> > + csr = &xgene_v2_1_csr_res[root->segment];
> > + port->csr_base = devm_ioremap_resource(dev, csr);
> > + if (IS_ERR(port->csr_base)) {
> > + kfree(port);
> > + return -ENOMEM;
> > + }
> > +
> > + port->cfg_base = cfg->win;
> > + port->version = XGENE_PCIE_IP_VER_2;
> > +
> > + cfg->priv = port;
> > +
> > + return 0;
> > +}
> > +
> > +struct pci_ecam_ops xgene_v2_1_pcie_ecam_ops = {
> > + .bus_shift = 16,
> > + .init = xgene_v2_1_pcie_ecam_init,
> > + .pci_ops = {
> > + .map_bus = xgene_pcie_map_bus,
> > + .read = xgene_pcie_config_read32,
> > + .write = pci_generic_config_write,
> > + }
> > +};
> > +
> > +static struct resource xgene_v2_2_csr_res[] = {
> > + [0] = DEFINE_RES_MEM(0x1f2b0000UL, SZ_64K),
> > + [1] = DEFINE_RES_MEM(0x1f500000UL, SZ_64K),
> > + [2] = DEFINE_RES_MEM(0x1f2d0000UL, SZ_64K),
> > +};
> > +
> > +static int xgene_v2_2_pcie_ecam_init(struct pci_config_window *cfg)
> > +{
> > + struct acpi_device *adev = to_acpi_device(cfg->parent);
> > + struct acpi_pci_root *root = acpi_driver_data(adev);
> > + struct device *dev = cfg->parent;
> > + struct xgene_pcie_port *port;
> > + struct resource *csr;
> > +
> > + port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
> > + if (!port)
> > + return -ENOMEM;
> > +
> > + csr = &xgene_v2_2_csr_res[root->segment];
> > + port->csr_base = devm_ioremap_resource(dev, csr);
> > + if (IS_ERR(port->csr_base)) {
> > + kfree(port);
> > + return -ENOMEM;
> > + }
> > +
> > + port->cfg_base = cfg->win;
> > + port->version = XGENE_PCIE_IP_VER_2;
> > +
> > + cfg->priv = port;
> > +
> > + return 0;
> > +}
> > +
> > +struct pci_ecam_ops xgene_v2_2_pcie_ecam_ops = {
> > + .bus_shift = 16,
> > + .init = xgene_v2_2_pcie_ecam_init,
> > + .pci_ops = {
> > + .map_bus = xgene_pcie_map_bus,
> > + .read = xgene_pcie_config_read32,
> > + .write = pci_generic_config_write,
> > + }
> > +};
> > +#endif
> > +
> > static u64 xgene_pcie_set_ib_mask(struct xgene_pcie_port *port, u32 addr,
> > u32 flags, u64 size)
> > {
> > diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h
> > index 35f0e81..40da3e7 100644
> > --- a/include/linux/pci-ecam.h
> > +++ b/include/linux/pci-ecam.h
> > @@ -65,6 +65,11 @@ void __iomem *pci_ecam_map_bus(struct pci_bus *bus, unsigned int devfn,
> > #ifdef CONFIG_PCI_HOST_THUNDER_ECAM
> > extern struct pci_ecam_ops pci_thunder_ecam_ops;
> > #endif
> > +#ifdef CONFIG_PCI_XGENE
> > +extern struct pci_ecam_ops xgene_v1_pcie_ecam_ops;
> > +extern struct pci_ecam_ops xgene_v2_1_pcie_ecam_ops;
> > +extern struct pci_ecam_ops xgene_v2_2_pcie_ecam_ops;
> > +#endif
> >
> > #ifdef CONFIG_PCI_HOST_GENERIC
> > /* for DT-based PCI controllers that support ECAM */
> > --
> > 1.9.1
> >
Regards,
Duc Dang.
^ permalink raw reply
* [RFC][PATCH] arm64: Add support for CONFIG_DEBUG_VIRTUAL
From: Laura Abbott @ 2016-11-02 20:28 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CAKv+Gu8GjehaCrKv2CQbPRg_r6mK3vtFnsuHAJyDkS2n8STEkA@mail.gmail.com>
On 10/29/2016 02:39 AM, Ard Biesheuvel wrote:
> On 28 October 2016 at 23:07, Laura Abbott <labbott@redhat.com> wrote:
>>>>> diff --git a/arch/arm64/mm/physaddr.c b/arch/arm64/mm/physaddr.c
>>>>> new file mode 100644
>>>>> index 0000000..6c271e2
>>>>> --- /dev/null
>>>>> +++ b/arch/arm64/mm/physaddr.c
>>>>> @@ -0,0 +1,17 @@
>>>>> +#include <linux/mm.h>
>>>>> +
>>>>> +#include <asm/memory.h>
>>>>> +
>>>>> +unsigned long __virt_to_phys(unsigned long x)
>>>>> +{
>>>>> + phys_addr_t __x = (phys_addr_t)x;
>>>>> +
>>>>> + if (__x & BIT(VA_BITS - 1)) {
>>>>> + /* The bit check ensures this is the right range */
>>>>> + return (__x & ~PAGE_OFFSET) + PHYS_OFFSET;
>>>>> + } else {
>>>>> + VIRTUAL_BUG_ON(x < kimage_vaddr || x > (unsigned long)_end);
>>>>
>>>>
>>>> IIUC, in (3) you were asking if the last check should be '>' or '>='?
>>>>
>>>> To match high_memory, I suspect the latter, as _end doesn't fall within
>>>> the mapped virtual address space.
>>>>
>>>
>>> I was actually concerned about if _end would be correct with KASLR.
>>> Ard confirmed that it gets fixed up to be correct. I'll change the
>>> check to check for >=.
>>>
>>
>> While testing this, I found two places with __pa(_end) to get bounds,
>> one in arm64 code and one in memblock code. x86 gets away with this
>> because memblock is actually __pa_symbol and x86 does image placement
>> different and can check against the maximum image size. I think
>> including _end in __pa_symbol but excluding it from the generic
>> __virt_to_phys makes sense. It's a bit nicer than doing _end - 1 +
>> 1 everywhere.
>>
>
> Could we redefine __pa_symbol() under CONFIG_DEBUG_VIRTUAL to
> something that checks (x >= kimage_vaddr + TEXT_OFFSET || x <=
> (unsigned long)_end), i.e., reject linear virtual addresses? (Assuming
> my understanding of the meaning of __pa_symbol() is correct)
>
Yes, that's going to be my approach. I originally prototyped this
with just x >= kimage_vaddr but kimage_vaddr + TEXT_OFFSET is
a tighter bound.
Thanks,
Laura
^ permalink raw reply
* [PATCH v5 4/7] Documentation: devicetree: net: add NS2 bindings to amac
From: Sergei Shtylyov @ 2016-11-02 19:52 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20161102172456.GA11881@broadcom.com>
On 11/02/2016 08:24 PM, Jon Mason wrote:
>>> Clean-up the documentation to the bgmac-amac driver, per suggestion by
>>> Rob Herring, and add details for NS2 support.
>>>
>>> Signed-off-by: Jon Mason <jon.mason@broadcom.com>
>>> ---
>>> Documentation/devicetree/bindings/net/brcm,amac.txt | 16 +++++++++++-----
>>> 1 file changed, 11 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/net/brcm,amac.txt b/Documentation/devicetree/bindings/net/brcm,amac.txt
>>> index ba5ecc1..2fefa1a 100644
>>> --- a/Documentation/devicetree/bindings/net/brcm,amac.txt
>>> +++ b/Documentation/devicetree/bindings/net/brcm,amac.txt
>>> @@ -2,11 +2,17 @@ Broadcom AMAC Ethernet Controller Device Tree Bindings
>>> -------------------------------------------------------------
>>>
>>> Required properties:
>>> - - compatible: "brcm,amac" or "brcm,nsp-amac"
>>> - - reg: Address and length of the GMAC registers,
>>> - Address and length of the GMAC IDM registers
>>> - - reg-names: Names of the registers. Must have both "amac_base" and
>>> - "idm_base"
>>> + - compatible: "brcm,amac"
>>> + "brcm,nsp-amac"
>>> + "brcm,ns2-amac"
>>> + - reg: Address and length of the register set for the device. It
>>> + contains the information of registers in the same order as
>>> + described by reg-names
>>> + - reg-names: Names of the registers.
>>> + "amac_base": Address and length of the GMAC registers
>>> + "idm_base": Address and length of the GMAC IDM registers
>>> + "nicpm_base": Address and length of the NIC Port Manager
>>> + registers (required for Northstar2)
>>
>> Why this "_base" suffix? It looks redundant...
>
> Yes. Rob Herring pointed out the same thing. It is ugly, but follows
> the existing binding.
Sorry, I didn't realize you're reformatting the existing bindings while
adding some new text...
> Thanks,
> Jon
MBR, Sergei
^ permalink raw reply
* [PATCH] iommu: arm-smmu: Set SMTNMB_TLBEN in ACR to enable caching of bypass entries
From: Nipun Gupta @ 2016-11-02 19:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <d1c89f6f-1b7a-6180-a376-27505d3b6c9f@arm.com>
Hi Robin,
> -----Original Message-----
> From: Robin Murphy [mailto:robin.murphy at arm.com]
> Sent: Wednesday, November 02, 2016 16:51
> To: Nipun Gupta <nipun.gupta@nxp.com>; will.deacon at arm.com; linux-arm-
> kernel at lists.infradead.org; iommu at lists.linux-foundation.org
> Cc: Stuart Yoder <stuart.yoder@nxp.com>
> Subject: Re: [PATCH] iommu: arm-smmu: Set SMTNMB_TLBEN in ACR to enable
> caching of bypass entries
>
> Hi Nipun,
>
> On 02/11/16 13:35, Nipun Gupta wrote:
> > The SMTNMB_TLBEN in the Auxiliary Configuration Register (ACR)
> > provides an option to enable the updation of TLB in case of bypass
> > transactions due to no stream match in the stream match table. This
> > reduces the latencies of the subsequent transactions with the same stream-id
> which bypasses the SMMU.
> > This provides a significant performance benefit for certain networking
> > workloads.
>
> ...at the cost of increased TLB contention against other workloads.
> However, in the general case we'd expect the system to be fully described, so if
> there aren't any unmatched Stream IDs there hopefully shouldn't be an impact
> to leaving this switched on. I'd be interested to see some actual performance
> numbers, though - you already know my opinion about unsubstantiated quotes
> from the MMU-500 TRM.
With this change we have seen substantial performance improvement of ~9-10%
with DPDK l3fwd application (http://dpdk.org/doc/guides/sample_app_ug/l3_forward.html)
on NXP's LS2088a platform (single core as well as multi-core). Also, with ODP reflector application
(loopback mode - NXP in-house) we have seen 5% improvement in performance on
LS1088 platform.
W.r.t. the read latencies, they are reduced to avg. ~50 platform cycles from avg. ~140
platform cycles per memory read transactions which follow this bypass path (on LS2088
with DPDK l3fwd application).
(Apologies, I cannot share the DPDK/ODP exact performance numbers on the mailing list).
>
> > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
> > ---
> > drivers/iommu/arm-smmu.c | 21 +++++++++++++++------
> > 1 file changed, 15 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index
> > ce2a9d4..7010a5c 100644
> > --- a/drivers/iommu/arm-smmu.c
> > +++ b/drivers/iommu/arm-smmu.c
> > @@ -246,6 +246,7 @@ enum arm_smmu_s2cr_privcfg {
> >
> > #define ARM_MMU500_ACTLR_CPRE (1 << 1)
> >
> > +#define ACR_SMTNMB_TLBEN (1 << 8)
>
> ACR is entirely implementation-defined, so there are no generic field names.
> Please follow the naming convention handily demonstrated in the subsequent
> context line.
>
> > #define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
>
> Actually, can we also please keep these in descending order of bit position like
> everything else?
>
> > #define CB_PAR_F (1 << 0)
> > @@ -1569,18 +1570,26 @@ static void arm_smmu_device_reset(struct
> arm_smmu_device *smmu)
> > for (i = 0; i < smmu->num_mapping_groups; ++i)
> > arm_smmu_write_sme(smmu, i);
> >
> > + /* Get the major rev required for configuring ACR */
>
> That comment is nonsense.
>
> > + reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID7);
> > + major = (reg >> ID7_MAJOR_SHIFT) & ID7_MAJOR_MASK;
> > +
> > /*
> > * Before clearing ARM_MMU500_ACTLR_CPRE, need to
> > * clear CACHE_LOCK bit of ACR first. And, CACHE_LOCK
> > * bit is only present in MMU-500r2 onwards.
> > */
> > - reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID7);
> > - major = (reg >> ID7_MAJOR_SHIFT) & ID7_MAJOR_MASK;
> > - if ((smmu->model == ARM_MMU500) && (major >= 2)) {
> > - reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
> > + reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
> > + if ((smmu->model == ARM_MMU500) && (major >= 2))
> > reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
> > - writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
> > - }
> > +
> > + /*
> > + * Set the SMTNMB_TLBEN in ACR so that the transactions which
> > + * bypass with SMMU due to no stream match found in the SMR table
> > + * are updated in the TLB's.
>
> Or simply, e.g. "Allow unmatched Stream IDs to allocate bypass TLB entries for
> reduced latency". It's already clear from the code what bit's being set where, we
> only need to remember *why*.
>
> > + */
> > + reg |= ACR_SMTNMB_TLBEN;
> > + writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
>
> Are you sure it's perfectly fine to set that implementation-defined bit on any
> SMMU implementation other than the two-and-a-half ARM Ltd. ones which
> happen to share the same meaning? I'm certainly not.
>
> The correct flow would be something like this:
>
> if (smmu->model == ARM_MMU500) {
> reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID7);
> major = (reg >> ID7_MAJOR_SHIFT) & ID7_MAJOR_MASK;
> reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
> if (major >= 2)
> reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
> reg |= ACR_SMTNMB_TLBEN;
> writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
> }
>
> The shape of the current code avoids an extra level of indentation, but once you
> have to have the nested conditional anyway, it might as well all be predicated
> appropriately.
>
Thank you for providing the useful comments. I would incorporate them all in next version :).
Regards,
Nipun
> Robin.
>
> > /* Make sure all context banks are disabled and clear CB_FSR */
> > for (i = 0; i < smmu->num_context_banks; ++i) {
> >
^ permalink raw reply
* [PATCH v1] ARM:dmaengine:sun6i:fix the uninitialized value for v_lli
From: Maxime Ripard @ 2016-11-02 18:58 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20161102053112.GA8109@arx-xi>
On Wed, Nov 02, 2016 at 01:31:12PM +0800, Axl-zhang wrote:
> dma_pool_alloc does not initialize the value of the newly allocated
> block for the v_lli, and the uninitilize value make the tests failed
> which is on pine64 with dmatest.
> we can fix it just change the "|=" to "=" for the v_lli->cfg.
>
> Signed-off-by: Hao Zhang <hao5781286@gmail.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Thanks!
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161102/9194dd7d/attachment.sig>
^ permalink raw reply
* [PATCH] drm/sun4i: Add a few formats
From: Maxime Ripard @ 2016-11-02 18:55 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CAGb2v65SqkU-7W4+JnnnF+RzJO_0-TRq+DykJRf9og1wGc4azQ@mail.gmail.com>
On Sat, Oct 29, 2016 at 06:25:46PM +0800, Chen-Yu Tsai wrote:
> On Thu, Oct 27, 2016 at 10:35 PM, Maxime Ripard
> <maxime.ripard@free-electrons.com> wrote:
> > Hi,
> >
> > On Tue, Oct 25, 2016 at 08:42:26AM +0800, Chen-Yu Tsai wrote:
> >> On Mon, Oct 24, 2016 at 10:40 PM, Maxime Ripard
> >> <maxime.ripard@free-electrons.com> wrote:
> >> > Hi,
> >> >
> >> > On Fri, Oct 21, 2016 at 11:15:32AM +0800, Chen-Yu Tsai wrote:
> >> >> On Tue, Oct 18, 2016 at 4:46 PM, Maxime Ripard
> >> >> <maxime.ripard@free-electrons.com> wrote:
> >> >> > The planes can do more than what was previously exposed. Add support for
> >> >> > them.
> >> >> >
> >> >> > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
> >> >> > ---
> >> >> > drivers/gpu/drm/sun4i/sun4i_backend.c | 20 ++++++++++++++++++++
> >> >> > drivers/gpu/drm/sun4i/sun4i_layer.c | 6 ++++++
> >> >> > 2 files changed, 26 insertions(+)
> >> >> >
> >> >> > diff --git a/drivers/gpu/drm/sun4i/sun4i_backend.c b/drivers/gpu/drm/sun4i/sun4i_backend.c
> >> >> > index afb7ddf660ef..b184a476a480 100644
> >> >> > --- a/drivers/gpu/drm/sun4i/sun4i_backend.c
> >> >> > +++ b/drivers/gpu/drm/sun4i/sun4i_backend.c
> >> >> > @@ -96,6 +96,22 @@ static int sun4i_backend_drm_format_to_layer(struct drm_plane *plane,
> >> >> > *mode = SUN4I_BACKEND_LAY_FBFMT_ARGB8888;
> >> >> > break;
> >> >> >
> >> >> > + case DRM_FORMAT_ARGB4444:
> >> >> > + *mode = SUN4I_BACKEND_LAY_FBFMT_ARGB4444;
> >> >> > + break;
> >> >> > +
> >> >> > + case DRM_FORMAT_ARGB1555:
> >> >> > + *mode = SUN4I_BACKEND_LAY_FBFMT_ARGB1555;
> >> >> > + break;
> >> >> > +
> >> >> > + case DRM_FORMAT_RGBA5551:
> >> >> > + *mode = SUN4I_BACKEND_LAY_FBFMT_RGBA5551;
> >> >> > + break;
> >> >> > +
> >> >> > + case DRM_FORMAT_RGBA4444:
> >> >> > + *mode = SUN4I_BACKEND_LAY_FBFMT_RGBA4444;
> >> >>
> >> >> The A20 manual only lists ARGB4444, not RGBA4444. There might be
> >> >> some discrepancy here. We can deal with them
> >> >
> >> > Hmm, yes, that's weird. But I guess this would be part of porting it
> >> > to the A20.
> >> >
> >> >> Also there are some more formats missing from the list, could you
> >> >> add them as well?
> >> >
> >> > Which one do you refer to?
> >>
> >> RGB556 and RGB655.
> >
> > These formats are not supported by Linux yet though.
>
> I see. Sorry for the noise.
>
> Acked-by: Chen-Yu Tsai <wens@csie.org>
Applied with a more verbose commit log.
Thanks!
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161102/5e496141/attachment.sig>
^ permalink raw reply
* [PATCH v5 3/7] net: phy: broadcom: Add BCM54810 PHY entry
From: Andrew Lunn @ 2016-11-02 18:37 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1478106488-11779-4-git-send-email-jon.mason@broadcom.com>
On Wed, Nov 02, 2016 at 01:08:04PM -0400, Jon Mason wrote:
> The BCM54810 PHY requires some semi-unique configuration, which results
> in some additional configuration in addition to the standard config.
> Also, some users of the BCM54810 require the PHY lanes to be swapped.
> Since there is no way to detect this, add a device tree query to see if
> it is applicable.
>
> Inspired-by: Vikas Soni <vsoni@broadcom.com>
> Signed-off-by: Jon Mason <jon.mason@broadcom.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply
* [PATCH v2 2/4] ARM: dts: sun8i: Add SPI controller node in H3
From: Maxime Ripard @ 2016-11-02 18:36 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20161028065412.23008-3-woogyom.kim@gmail.com>
1;4600;0c
On Fri, Oct 28, 2016 at 03:54:10PM +0900, Milo Kim wrote:
> H3 SPI subsystem is almost same as A31 SPI except buffer size, so those
> DT properties are reusable.
>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Chen-Yu Tsai <wens@csie.org>
> Signed-off-by: Milo Kim <woogyom.kim@gmail.com>
Applied both, thanks!
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161102/ea817932/attachment.sig>
^ permalink raw reply
* [PATCH] ARM: DT: stm32: move dma translation to board files
From: Bruno Herrera @ 2016-11-02 18:24 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <edf05ad5-924d-87d8-fd8d-57e8e0a72052@st.com>
On Wed, Nov 2, 2016 at 2:14 PM, Alexandre Torgue
<alexandre.torgue@st.com> wrote:
>
>
> On 11/02/2016 05:07 PM, Bruno Herrera wrote:
>>
>> Hi
>>
>> On Wed, Nov 2, 2016 at 12:32 PM, Alexandre Torgue
>> <alexandre.torgue@st.com> wrote:
>>>
>>> Hi
>>>
>>> On 10/31/2016 07:58 PM, Rados?aw Pietrzyk wrote:
>>>>
>>>>
>>>> I think wlcore driver searches dma-ranges in its parent that's why sdio
>>>> node needs it.
>>>
>>>
>>>
>>> Yes I agree. In this case it is needed as you have subnode in sdio node.
>>> So IMO empty dma-ranges could be removed from ethernet and usb node, but
>>> kept in future sdio subnode.
>>
>>
>> Now it is clear.
>
> Nice. Can I add your tested-by ?
>
Sure
>>
>>>
>>> Bruno,
>>> Do you plan to push sdio support ?
>>
>>
>> Yes I do, but I'm not sure how long it will take. The I had to
>> change(and hack) the mmci code because I could not get the ID from
>> STM32 SDIO IP.
>> My current WIP is at @
>>
>> https://github.com/mcoquelin-stm32/afboot-stm32/pull/4#issuecomment-247571615
>> I know Andrea Merello is also working on that (and he probably has a
>> more complete patch).
>>
>>>
>>>
>>>
>>>>
>>>> 2016-10-31 17:41 GMT+01:00 Bruno Herrera <bruherrera@gmail.com
>>>> <mailto:bruherrera@gmail.com>>:
>>>>
>>>> On Mon, Oct 31, 2016 at 12:14 PM, Rados?aw Pietrzyk
>>>> <radoslaw.pietrzyk at gmail.com <mailto:radoslaw.pietrzyk@gmail.com>>
>>>> wrote:
>>>> > This is weird because dma ddresses are recalculated using parent's
>>>> > dma-ranges property and soc already has it so there should be
>>>> absolutely no
>>>> > problem.
>>>>
>>>> These are my DTS and DTSI file.
>>>> >
>>>> > 2016-10-31 11:27 GMT+01:00 Bruno Herrera <bruherrera@gmail.com
>>>> <mailto:bruherrera@gmail.com>>:
>>>> >>
>>>> >> On Fri, Oct 28, 2016 at 5:09 AM, Rados?aw Pietrzyk
>>>> >> <radoslaw.pietrzyk@gmail.com
>>>> <mailto:radoslaw.pietrzyk@gmail.com>> wrote:
>>>> >> > Have you defined your sdio node within soc node ?
>>>> >>
>>>> >> It is in the SOC node of the DSTI file.
>>>> >>
>>>> >> >
>>>> >> > 2016-10-27 14:57 GMT+02:00 Bruno Herrera <bruherrera@gmail.com
>>>> <mailto:bruherrera@gmail.com>>:
>>>> >> >>
>>>> >> >> Hi Alex,
>>>> >> >>
>>>> >> >> On Thu, Oct 27, 2016 at 10:21 AM, Alexandre Torgue
>>>> >> >> <alexandre.torgue at st.com <mailto:alexandre.torgue@st.com>>
>>>> wrote:
>>>> >> >> > Hi Bruno,
>>>> >> >> >
>>>> >> >> >
>>>> >> >> > On 10/27/2016 12:43 PM, Bruno Herrera wrote:
>>>> >> >> >>
>>>> >> >> >> Hi Alex,
>>>> >> >> >>
>>>> >> >> >> On Wed, Oct 26, 2016 at 7:09 AM, Alexandre Torgue
>>>> >> >> >> <alexandre.torgue at st.com <mailto:alexandre.torgue@st.com>>
>>>> wrote:
>>>> >> >> >>>
>>>> >> >> >>> Hi Bruno,
>>>> >> >> >>>
>>>> >> >> >>> On 10/25/2016 11:06 PM, Bruno Herrera wrote:
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>> Hi Alexandre,
>>>> >> >> >>>>
>>>> >> >> >>>>>
>>>> >> >> >>>>> stm32f469-disco and stm32f429-eval boards use SDRAM
>>>> start address
>>>> >> >> >>>>> remapping
>>>> >> >> >>>>> (to @0) to boost performances. A DMA translation through
>>>> >> >> >>>>> "dma-ranges"
>>>> >> >> >>>>> property was needed for other masters than the M4 CPU.
>>>> >> >> >>>>> stm32f429-disco doesn't use remapping so doesn't need
>>>> this DMA
>>>> >> >> >>>>> translation.
>>>> >> >> >>>>> This patches moves this DMA translation definition from
>>>> stm32f429
>>>> >> >> >>>>> soc
>>>> >> >> >>>>> file
>>>> >> >> >>>>> to board files.
>>>> >> >> >>>>>
>>>> >> >> >>>>> Signed-off-by: Alexandre TORGUE <alexandre.torgue@st.com
>>>> <mailto:alexandre.torgue@st.com>>
>>>>
>>>> >> >> >>>>>
>>>> >> >> >>>>> diff --git a/arch/arm/boot/dts/stm32429i-eval.dts
>>>> >> >> >>>>> b/arch/arm/boot/dts/stm32429i-eval.dts
>>>> >> >> >>>>> index 13c7cd2..a763c15 100644
>>>> >> >> >>>>> --- a/arch/arm/boot/dts/stm32429i-eval.dts
>>>> >> >> >>>>> +++ b/arch/arm/boot/dts/stm32429i-eval.dts
>>>> >> >> >>>>> @@ -82,6 +82,10 @@
>>>> >> >> >>>>> };
>>>> >> >> >>>>> };
>>>> >> >> >>>>>
>>>> >> >> >>>>> + soc {
>>>> >> >> >>>>> + dma-ranges = <0xc0000000 0x0
>>>> 0x10000000>;
>>>> >> >> >>>>> + };
>>>> >> >> >>>>> +
>>>> >> >> >>>>> usbotg_hs_phy: usbphy {
>>>> >> >> >>>>> #phy-cells = <0>;
>>>> >> >> >>>>> compatible = "usb-nop-xceiv";
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>> Shouldn't also the peripheral dma-ranges property move to
>>>> board
>>>> >> >> >>>> specific
>>>> >> >> >>>> too?
>>>> >> >> >>>> I had this patch for while but I didn't had the time to
>>>> submit:
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>> Well spot I forgot it. Actually, discussing with Arnd
>>>> ysterday on
>>>> >> >> >>> IIRC,
>>>> >> >> >>> empty dma-ranges is not needed. Can you test on your side
>>>> by
>>>> >> >> >>> removing
>>>> >> >> >>> dma-ranges in usb node please ?
>>>> >> >> >>
>>>> >> >> >> Unfortunately will take a time for me to set up this
>>>> environment on
>>>> >> >> >> the STM32F4-EVAL board.
>>>> >> >> >> And on the discovery boards we dont have this scenario.
>>>> That was the
>>>> >> >> >> main reason I did not submit the patch right away.
>>>> >> >> >> My conclusion and I might be wrong but is based on the my
>>>> tests with
>>>> >> >> >> SDIO device at STM32F469I-DISCO board.
>>>> >> >> >>
>>>> >> >> >> I started this issue as discussion at ST Forum but Maxime
>>>> gave me
>>>> >> >> >> the
>>>> >> >> >> hint.
>>>> >> >> >>
>>>> >> >> >>
>>>> >> >> >>
>>>> >> >> >>
>>>> >> >> >>
>>>>
>>>>
>>>> https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fDMA2%20and%20SYSCFG_MEMRMP%20relationship&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=44
>>>>
>>>>
>>>> <https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fDMA2%20and%20SYSCFG_MEMRMP%20relationship&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=44>
>>>> >> >> >>
>>>> >> >> >>> I will push a v2 by removing empty dma-ranges if tests are
>>>> ok in
>>>> >> >> >>> your
>>>> >> >> >>> side.
>>>> >> >> >>
>>>> >> >> >>
>>>> >> >> >> From my understating/conclusion is: when empty
>>>> property(dma-ranges)
>>>> >> >> >> is
>>>> >> >> >> the device node, the mapping will be taken in consideration
>>>> when
>>>> >> >> >> using
>>>> >> >> >> DMA otherwise the mapping is ignored.
>>>> >> >> >> And in the SDIO case it is needed for DEV->MEM(SDRAM) and
>>>> >> >> >> MEM(SDRAM)->DEV. If it is not the case for the devices in
>>>> question
>>>> >> >> >> so
>>>> >> >> >> I suppose it can work without the property.
>>>> >> >> >
>>>> >> >> >
>>>> >> >> > For sure translation has to be done but I'm not sure that an
>>>> empty
>>>> >> >> > "dma-ranges" is needed in device node to activate it. For
>>>> Ethernet
>>>> >> >> > empty
>>>> >> >> > "dma-ranges" is not needed. I will try with usb.
>>>> >> >>
>>>> >> >> In the case of SDIO it is needed. As example this is my
>>>> working SDIO
>>>> >> >> node:
>>>> >> >>
>>>> >> >> sdio: sdio at 40012c00 {
>>>> >> >> compatible = "arm,pl18x", "arm,primecell";
>>>> >> >> arm,primecell-periphid = <0x00480181>;
>>>> >> >> reg = <0x40012c00 0x400>;
>>>> >> >> dmas = <&dma2 6 4 0x10400 0x3>, /* Logical - DevToMem */
>>>> >> >> <&dma2 3 4 0x10400 0x3>; /* Logical - MemToDev */
>>>> >> >> dma-names = "rx", "tx";
>>>> >> >> clocks = <&rcc 0 171>;
>>>> >> >> clock-names = "apb_pclk";
>>>> >> >> interrupts = <49>;
>>>> >> >> status = "disabled";
>>>> >> >> };
>>>> >> >>
>>>> >> >> &sdio {
>>>> >> >> status = "okay";
>>>> >> >> vmmc-supply = <&wlan_en>;
>>>> >> >> bus-width = <4>;
>>>> >> >> max-frequency = <24000000>;
>>>> >> >> pinctrl-names = "default";
>>>> >> >> pinctrl-0 = <&sdio_pins>;
>>>> >> >> ti,non-removable;
>>>> >> >> ti,needs-special-hs-handling;
>>>> >> >> dma-ranges;
>>>> >> >> cap-power-off-card;
>>>> >> >> keep-power-in-suspend;
>>>> >> >>
>>>> >> >> #address-cells = <1>;
>>>> >> >> #size-cells = <0>;
>>>> >> >> wlcore: wlcore at 0 {
>>>> >> >> compatible = "ti,wl1835";
>>>> >> >> reg = <2>;
>>>> >> >> interrupt-parent = <&gpioa>;
>>>> >> >> interrupts = <8 IRQ_TYPE_EDGE_RISING>;
>>>> >> >> };
>>>> >> >> };
>>>> >> >>
>>>> >> >> >
>>>> >> >> > alex
>>>> >> >> >
>>>> >> >> >
>>>> >> >> >>
>>>> >> >> >>>
>>>> >> >> >>> Thanks in advance
>>>> >> >> >>> Alex
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>>>
>>>> >> >> >>>> Author: Bruno Herrera <bruherrera@gmail.com
>>>> <mailto:bruherrera@gmail.com>>
>>>>
>>>> >> >> >>>> Date: Sun Oct 16 14:50:00 2016 -0200
>>>> >> >> >>>>
>>>> >> >> >>>> ARM: DT: STM32: Use dma-ranges property per board not
>>>> at dtsi
>>>> >> >> >>>> file
>>>> >> >> >>>>
>>>> >> >> >>>> diff --git a/arch/arm/boot/dts/stm32429i-eval.dts
>>>> >> >> >>>> b/arch/arm/boot/dts/stm32429i-eval.dts
>>>> >> >> >>>> index 6bfc595..2a22a82 100644
>>>> >> >> >>>> --- a/arch/arm/boot/dts/stm32429i-eval.dts
>>>> >> >> >>>> +++ b/arch/arm/boot/dts/stm32429i-eval.dts
>>>> >> >> >>>> @@ -52,6 +52,10 @@
>>>> >> >> >>>> model = "STMicroelectronics STM32429i-EVAL
>>>> board";
>>>> >> >> >>>> compatible = "st,stm32429i-eval", "st,stm32f429";
>>>> >> >> >>>>
>>>> >> >> >>>> + soc {
>>>> >> >> >>>> + dma-ranges = <0xC0000000 0x0 0x10000000>;
>>>> >> >> >>>> + };
>>>> >> >> >>>> +
>>>> >> >> >>>> chosen {
>>>> >> >> >>>> bootargs = "root=/dev/ram
>>>> rdinit=/linuxrc";
>>>> >> >> >>>> stdout-path = "serial0:115200n8";
>>>> >> >> >>>> @@ -96,6 +100,7 @@
>>>> >> >> >>>>
>>>> >> >> >>>> ðernet0 {
>>>> >> >> >>>> status = "okay";
>>>> >> >> >>>> + dma-ranges;
>>>> >> >> >>>> pinctrl-0 = <ðernet0_mii>;
>>>> >> >> >>>> pinctrl-names = "default";
>>>> >> >> >>>> phy-mode = "mii-id";
>>>> >> >> >>>> @@ -116,6 +121,7 @@
>>>> >> >> >>>> };
>>>> >> >> >>>>
>>>> >> >> >>>> &usbotg_hs {
>>>> >> >> >>>> + dma-ranges;
>>>> >> >> >>>> dr_mode = "host";
>>>> >> >> >>>> phys = <&usbotg_hs_phy>;
>>>> >> >> >>>> phy-names = "usb2-phy";
>>>> >> >> >>>> diff --git a/arch/arm/boot/dts/stm32f429.dtsi
>>>> >> >> >>>> b/arch/arm/boot/dts/stm32f429.dtsi
>>>> >> >> >>>> index 7d624a2..697a133 100644
>>>> >> >> >>>> --- a/arch/arm/boot/dts/stm32f429.dtsi
>>>> >> >> >>>> +++ b/arch/arm/boot/dts/stm32f429.dtsi
>>>> >> >> >>>> @@ -59,7 +59,6 @@
>>>> >> >> >>>> };
>>>> >> >> >>>>
>>>> >> >> >>>> soc {
>>>> >> >> >>>> - dma-ranges = <0xc0000000 0x0 0x10000000>;
>>>> >> >> >>>>
>>>> >> >> >>>> timer2: timer at 40000000 {
>>>> >> >> >>>> compatible = "st,stm32-timer";
>>>> >> >> >>>> @@ -472,13 +471,11 @@
>>>> >> >> >>>> st,syscon = <&syscfg 0x4>;
>>>> >> >> >>>> snps,pbl = <8>;
>>>> >> >> >>>> snps,mixed-burst;
>>>> >> >> >>>> - dma-ranges;
>>>> >> >> >>>> status = "disabled";
>>>> >> >> >>>> };
>>>> >> >> >>>>
>>>> >> >> >>>> usbotg_hs: usb at 40040000 {
>>>> >> >> >>>> compatible = "snps,dwc2";
>>>> >> >> >>>> - dma-ranges;
>>>> >> >> >>>> reg = <0x40040000 0x40000>;
>>>> >> >> >>>> interrupts = <77>;
>>>> >> >> >>>> clocks = <&rcc 0 29>;
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>>> diff --git a/arch/arm/boot/dts/stm32f429.dtsi
>>>> >> >> >>>>> b/arch/arm/boot/dts/stm32f429.dtsi
>>>> >> >> >>>>> index 0596d60..3a1cfdd 100644
>>>> >> >> >>>>> --- a/arch/arm/boot/dts/stm32f429.dtsi
>>>> >> >> >>>>> +++ b/arch/arm/boot/dts/stm32f429.dtsi
>>>> >> >> >>>>> @@ -59,8 +59,6 @@
>>>> >> >> >>>>> };
>>>> >> >> >>>>>
>>>> >> >> >>>>> soc {
>>>> >> >> >>>>> - dma-ranges = <0xc0000000 0x0
>>>> 0x10000000>;
>>>> >> >> >>>>> -
>>>> >> >> >>>>> timer2: timer at 40000000 {
>>>> >> >> >>>>> compatible = "st,stm32-timer";
>>>> >> >> >>>>> reg = <0x40000000 0x400>;
>>>> >> >> >>>>> diff --git a/arch/arm/boot/dts/stm32f469-disco.dts
>>>> >> >> >>>>> b/arch/arm/boot/dts/stm32f469-disco.dts
>>>> >> >> >>>>> index 9e73656..c2213c0 100644
>>>> >> >> >>>>> --- a/arch/arm/boot/dts/stm32f469-disco.dts
>>>> >> >> >>>>> +++ b/arch/arm/boot/dts/stm32f469-disco.dts
>>>> >> >> >>>>> @@ -64,6 +64,10 @@
>>>> >> >> >>>>> aliases {
>>>> >> >> >>>>> serial0 = &usart3;
>>>> >> >> >>>>> };
>>>> >> >> >>>>> +
>>>> >> >> >>>>> + soc {
>>>> >> >> >>>>> + dma-ranges = <0xc0000000 0x0
>>>> 0x10000000>;
>>>> >> >> >>>>> + };
>>>> >> >> >>>>> };
>>>> >> >> >>>>>
>>>> >> >> >>>>> &clk_hse {
>>>> >> >> >>>>> --
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>> Br.,
>>>> >> >> >>>> Bruno
>>>> >> >> >>>>
>>>> >> >> >>>
>>>> >> >> >
>>>> >> >>
>>>> >> >> _______________________________________________
>>>> >> >> linux-arm-kernel mailing list
>>>> >> >> linux-arm-kernel at lists.infradead.org
>>>> <mailto:linux-arm-kernel@lists.infradead.org>
>>>> >> >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>>>> <http://lists.infradead.org/mailman/listinfo/linux-arm-kernel>
>>>> >> >
>>>> >> >
>>>> >
>>>> >
>>>>
>>>>
>>>
>
^ permalink raw reply
* [PATCH v7 RESEND 1/2] ASoC: samsung: Add DT bindings documentation for TM2 sound subsystem
From: Krzysztof Kozlowski @ 2016-11-02 18:24 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1478102558-12524-1-git-send-email-s.nawrocki@samsung.com>
On Wed, Nov 02, 2016 at 05:02:37PM +0100, Sylwester Nawrocki wrote:
> This patch adds DT binding documentation for Exnos5433 based TM2
> and TM2E boards sound subsystem.
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Acked-by: Rob Herring <robh@kernel.org>
> ---
> Changes since v5:
> - none.
>
> Changes since v4:
> - indentation changes.
>
> Changes since v2:
> - none.
>
> Changes since initial version:
> - dropped clocks, clock-names properties, instead properties from
> the CODEC node will be used,
> - property renames: 'samsung,model' -> 'model', 'samsung,i2s-controller'
> -> 'i2s-controller', 'samsung,speaker-amplifier' -> 'audio-amplifier',
> - added 'audio-codec' property.
> ---
> .../bindings/sound/samsung,tm2-audio.txt | 38 ++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/sound/samsung,tm2-audio.txt
>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Best regards,
Krzysztof
^ permalink raw reply
* [PATCH] ARM: DT: stm32: move dma translation to board files
From: Bruno Herrera @ 2016-11-02 18:23 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CAFvLkMSViXggGr0Set0qnQan_+bXUNzJx5WtZHP-Jyje=ZzDVw@mail.gmail.com>
On Wed, Nov 2, 2016 at 4:05 PM, Rados?aw Pietrzyk
<radoslaw.pietrzyk@gmail.com> wrote:
> Have you tried with
>
> sdio {
> ...
> compatible = "arm,primecell";
> arm,primecell-periphid = <id_to_define>;
> ...
> }
>
> This should register proper amba device and give it an ID you wish.
I'm using this:
sdio: sdio at 40012c00 {
compatible = "arm,pl18x", "arm,primecell";
arm,primecell-periphid = <0x00480181>;
reg = <0x40012c00 0x400>;
dmas = <&dma2 6 4 0x10400 0x3>, /* Logical - DevToMem */
<&dma2 3 4 0x10400 0x3>; /* Logical - MemToDev */
dma-names = "rx", "tx";
clocks = <&rcc 0 171>;
clock-names = "apb_pclk";
interrupts = <49>;
status = "disabled";
};
And on the driver side I added this:
/* STM32 variants */
{
.id = 0x00480181,
.mask = 0xf0ffffff,
.data = &variant_stm32f4x9,
},
My .id field is the .id from variant_ux500 plus one (and what I
believe is not valid).
And I cannot read the ID from STM32 IP because it always return zero.
Maybe someone from ST(@Alex) can get the real ID. ;)
>
> 2016-11-02 17:07 GMT+01:00 Bruno Herrera <bruherrera@gmail.com>:
>>
>> Hi
>>
>> On Wed, Nov 2, 2016 at 12:32 PM, Alexandre Torgue
>> <alexandre.torgue@st.com> wrote:
>> > Hi
>> >
>> > On 10/31/2016 07:58 PM, Rados?aw Pietrzyk wrote:
>> >>
>> >> I think wlcore driver searches dma-ranges in its parent that's why sdio
>> >> node needs it.
>> >
>> >
>> > Yes I agree. In this case it is needed as you have subnode in sdio node.
>> > So IMO empty dma-ranges could be removed from ethernet and usb node, but
>> > kept in future sdio subnode.
>>
>> Now it is clear.
>>
>> >
>> > Bruno,
>> > Do you plan to push sdio support ?
>>
>> Yes I do, but I'm not sure how long it will take. The I had to
>> change(and hack) the mmci code because I could not get the ID from
>> STM32 SDIO IP.
>> My current WIP is at @
>>
>> https://github.com/mcoquelin-stm32/afboot-stm32/pull/4#issuecomment-247571615
>> I know Andrea Merello is also working on that (and he probably has a
>> more complete patch).
>>
>> >
>> >
>> >
>> >>
>> >> 2016-10-31 17:41 GMT+01:00 Bruno Herrera <bruherrera@gmail.com
>> >> <mailto:bruherrera@gmail.com>>:
>> >>
>> >> On Mon, Oct 31, 2016 at 12:14 PM, Rados?aw Pietrzyk
>> >> <radoslaw.pietrzyk at gmail.com <mailto:radoslaw.pietrzyk@gmail.com>>
>> >> wrote:
>> >> > This is weird because dma ddresses are recalculated using
>> >> parent's
>> >> > dma-ranges property and soc already has it so there should be
>> >> absolutely no
>> >> > problem.
>> >>
>> >> These are my DTS and DTSI file.
>> >> >
>> >> > 2016-10-31 11:27 GMT+01:00 Bruno Herrera <bruherrera@gmail.com
>> >> <mailto:bruherrera@gmail.com>>:
>> >> >>
>> >> >> On Fri, Oct 28, 2016 at 5:09 AM, Rados?aw Pietrzyk
>> >> >> <radoslaw.pietrzyk@gmail.com
>> >> <mailto:radoslaw.pietrzyk@gmail.com>> wrote:
>> >> >> > Have you defined your sdio node within soc node ?
>> >> >>
>> >> >> It is in the SOC node of the DSTI file.
>> >> >>
>> >> >> >
>> >> >> > 2016-10-27 14:57 GMT+02:00 Bruno Herrera <bruherrera@gmail.com
>> >> <mailto:bruherrera@gmail.com>>:
>> >> >> >>
>> >> >> >> Hi Alex,
>> >> >> >>
>> >> >> >> On Thu, Oct 27, 2016 at 10:21 AM, Alexandre Torgue
>> >> >> >> <alexandre.torgue at st.com <mailto:alexandre.torgue@st.com>>
>> >> wrote:
>> >> >> >> > Hi Bruno,
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > On 10/27/2016 12:43 PM, Bruno Herrera wrote:
>> >> >> >> >>
>> >> >> >> >> Hi Alex,
>> >> >> >> >>
>> >> >> >> >> On Wed, Oct 26, 2016 at 7:09 AM, Alexandre Torgue
>> >> >> >> >> <alexandre.torgue at st.com <mailto:alexandre.torgue@st.com>>
>> >> wrote:
>> >> >> >> >>>
>> >> >> >> >>> Hi Bruno,
>> >> >> >> >>>
>> >> >> >> >>> On 10/25/2016 11:06 PM, Bruno Herrera wrote:
>> >> >> >> >>>>
>> >> >> >> >>>>
>> >> >> >> >>>> Hi Alexandre,
>> >> >> >> >>>>
>> >> >> >> >>>>>
>> >> >> >> >>>>> stm32f469-disco and stm32f429-eval boards use SDRAM
>> >> start address
>> >> >> >> >>>>> remapping
>> >> >> >> >>>>> (to @0) to boost performances. A DMA translation
>> >> through
>> >> >> >> >>>>> "dma-ranges"
>> >> >> >> >>>>> property was needed for other masters than the M4 CPU.
>> >> >> >> >>>>> stm32f429-disco doesn't use remapping so doesn't need
>> >> this DMA
>> >> >> >> >>>>> translation.
>> >> >> >> >>>>> This patches moves this DMA translation definition from
>> >> stm32f429
>> >> >> >> >>>>> soc
>> >> >> >> >>>>> file
>> >> >> >> >>>>> to board files.
>> >> >> >> >>>>>
>> >> >> >> >>>>> Signed-off-by: Alexandre TORGUE
>> >> <alexandre.torgue@st.com
>> >> <mailto:alexandre.torgue@st.com>>
>> >>
>> >> >> >> >>>>>
>> >> >> >> >>>>> diff --git a/arch/arm/boot/dts/stm32429i-eval.dts
>> >> >> >> >>>>> b/arch/arm/boot/dts/stm32429i-eval.dts
>> >> >> >> >>>>> index 13c7cd2..a763c15 100644
>> >> >> >> >>>>> --- a/arch/arm/boot/dts/stm32429i-eval.dts
>> >> >> >> >>>>> +++ b/arch/arm/boot/dts/stm32429i-eval.dts
>> >> >> >> >>>>> @@ -82,6 +82,10 @@
>> >> >> >> >>>>> };
>> >> >> >> >>>>> };
>> >> >> >> >>>>>
>> >> >> >> >>>>> + soc {
>> >> >> >> >>>>> + dma-ranges = <0xc0000000 0x0
>> >> 0x10000000>;
>> >> >> >> >>>>> + };
>> >> >> >> >>>>> +
>> >> >> >> >>>>> usbotg_hs_phy: usbphy {
>> >> >> >> >>>>> #phy-cells = <0>;
>> >> >> >> >>>>> compatible = "usb-nop-xceiv";
>> >> >> >> >>>>
>> >> >> >> >>>>
>> >> >> >> >>>>
>> >> >> >> >>>> Shouldn't also the peripheral dma-ranges property move
>> >> to
>> >> board
>> >> >> >> >>>> specific
>> >> >> >> >>>> too?
>> >> >> >> >>>> I had this patch for while but I didn't had the time to
>> >> submit:
>> >> >> >> >>>
>> >> >> >> >>>
>> >> >> >> >>>
>> >> >> >> >>> Well spot I forgot it. Actually, discussing with Arnd
>> >> ysterday on
>> >> >> >> >>> IIRC,
>> >> >> >> >>> empty dma-ranges is not needed. Can you test on your side
>> >> by
>> >> >> >> >>> removing
>> >> >> >> >>> dma-ranges in usb node please ?
>> >> >> >> >>
>> >> >> >> >> Unfortunately will take a time for me to set up this
>> >> environment on
>> >> >> >> >> the STM32F4-EVAL board.
>> >> >> >> >> And on the discovery boards we dont have this scenario.
>> >> That was the
>> >> >> >> >> main reason I did not submit the patch right away.
>> >> >> >> >> My conclusion and I might be wrong but is based on the my
>> >> tests with
>> >> >> >> >> SDIO device at STM32F469I-DISCO board.
>> >> >> >> >>
>> >> >> >> >> I started this issue as discussion at ST Forum but Maxime
>> >> gave me
>> >> >> >> >> the
>> >> >> >> >> hint.
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >>
>> >>
>> >> https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fDMA2%20and%20SYSCFG_MEMRMP%20relationship&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=44
>> >>
>> >>
>> >> <https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fDMA2%20and%20SYSCFG_MEMRMP%20relationship&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=44>
>> >> >> >> >>
>> >> >> >> >>> I will push a v2 by removing empty dma-ranges if tests
>> >> are
>> >> ok in
>> >> >> >> >>> your
>> >> >> >> >>> side.
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >> From my understating/conclusion is: when empty
>> >> property(dma-ranges)
>> >> >> >> >> is
>> >> >> >> >> the device node, the mapping will be taken in
>> >> consideration
>> >> when
>> >> >> >> >> using
>> >> >> >> >> DMA otherwise the mapping is ignored.
>> >> >> >> >> And in the SDIO case it is needed for DEV->MEM(SDRAM) and
>> >> >> >> >> MEM(SDRAM)->DEV. If it is not the case for the devices in
>> >> question
>> >> >> >> >> so
>> >> >> >> >> I suppose it can work without the property.
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > For sure translation has to be done but I'm not sure that
>> >> an
>> >> empty
>> >> >> >> > "dma-ranges" is needed in device node to activate it. For
>> >> Ethernet
>> >> >> >> > empty
>> >> >> >> > "dma-ranges" is not needed. I will try with usb.
>> >> >> >>
>> >> >> >> In the case of SDIO it is needed. As example this is my
>> >> working SDIO
>> >> >> >> node:
>> >> >> >>
>> >> >> >> sdio: sdio at 40012c00 {
>> >> >> >> compatible = "arm,pl18x", "arm,primecell";
>> >> >> >> arm,primecell-periphid = <0x00480181>;
>> >> >> >> reg = <0x40012c00 0x400>;
>> >> >> >> dmas = <&dma2 6 4 0x10400 0x3>, /* Logical - DevToMem */
>> >> >> >> <&dma2 3 4 0x10400 0x3>; /* Logical - MemToDev */
>> >> >> >> dma-names = "rx", "tx";
>> >> >> >> clocks = <&rcc 0 171>;
>> >> >> >> clock-names = "apb_pclk";
>> >> >> >> interrupts = <49>;
>> >> >> >> status = "disabled";
>> >> >> >> };
>> >> >> >>
>> >> >> >> &sdio {
>> >> >> >> status = "okay";
>> >> >> >> vmmc-supply = <&wlan_en>;
>> >> >> >> bus-width = <4>;
>> >> >> >> max-frequency = <24000000>;
>> >> >> >> pinctrl-names = "default";
>> >> >> >> pinctrl-0 = <&sdio_pins>;
>> >> >> >> ti,non-removable;
>> >> >> >> ti,needs-special-hs-handling;
>> >> >> >> dma-ranges;
>> >> >> >> cap-power-off-card;
>> >> >> >> keep-power-in-suspend;
>> >> >> >>
>> >> >> >> #address-cells = <1>;
>> >> >> >> #size-cells = <0>;
>> >> >> >> wlcore: wlcore at 0 {
>> >> >> >> compatible = "ti,wl1835";
>> >> >> >> reg = <2>;
>> >> >> >> interrupt-parent = <&gpioa>;
>> >> >> >> interrupts = <8 IRQ_TYPE_EDGE_RISING>;
>> >> >> >> };
>> >> >> >> };
>> >> >> >>
>> >> >> >> >
>> >> >> >> > alex
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >>
>> >> >> >> >>>
>> >> >> >> >>> Thanks in advance
>> >> >> >> >>> Alex
>> >> >> >> >>>
>> >> >> >> >>>
>> >> >> >> >>>>
>> >> >> >> >>>> Author: Bruno Herrera <bruherrera@gmail.com
>> >> <mailto:bruherrera@gmail.com>>
>> >>
>> >> >> >> >>>> Date: Sun Oct 16 14:50:00 2016 -0200
>> >> >> >> >>>>
>> >> >> >> >>>> ARM: DT: STM32: Use dma-ranges property per board
>> >> not
>> >> at dtsi
>> >> >> >> >>>> file
>> >> >> >> >>>>
>> >> >> >> >>>> diff --git a/arch/arm/boot/dts/stm32429i-eval.dts
>> >> >> >> >>>> b/arch/arm/boot/dts/stm32429i-eval.dts
>> >> >> >> >>>> index 6bfc595..2a22a82 100644
>> >> >> >> >>>> --- a/arch/arm/boot/dts/stm32429i-eval.dts
>> >> >> >> >>>> +++ b/arch/arm/boot/dts/stm32429i-eval.dts
>> >> >> >> >>>> @@ -52,6 +52,10 @@
>> >> >> >> >>>> model = "STMicroelectronics STM32429i-EVAL
>> >> board";
>> >> >> >> >>>> compatible = "st,stm32429i-eval",
>> >> "st,stm32f429";
>> >> >> >> >>>>
>> >> >> >> >>>> + soc {
>> >> >> >> >>>> + dma-ranges = <0xC0000000 0x0
>> >> 0x10000000>;
>> >> >> >> >>>> + };
>> >> >> >> >>>> +
>> >> >> >> >>>> chosen {
>> >> >> >> >>>> bootargs = "root=/dev/ram
>> >> rdinit=/linuxrc";
>> >> >> >> >>>> stdout-path = "serial0:115200n8";
>> >> >> >> >>>> @@ -96,6 +100,7 @@
>> >> >> >> >>>>
>> >> >> >> >>>> ðernet0 {
>> >> >> >> >>>> status = "okay";
>> >> >> >> >>>> + dma-ranges;
>> >> >> >> >>>> pinctrl-0 = <ðernet0_mii>;
>> >> >> >> >>>> pinctrl-names = "default";
>> >> >> >> >>>> phy-mode = "mii-id";
>> >> >> >> >>>> @@ -116,6 +121,7 @@
>> >> >> >> >>>> };
>> >> >> >> >>>>
>> >> >> >> >>>> &usbotg_hs {
>> >> >> >> >>>> + dma-ranges;
>> >> >> >> >>>> dr_mode = "host";
>> >> >> >> >>>> phys = <&usbotg_hs_phy>;
>> >> >> >> >>>> phy-names = "usb2-phy";
>> >> >> >> >>>> diff --git a/arch/arm/boot/dts/stm32f429.dtsi
>> >> >> >> >>>> b/arch/arm/boot/dts/stm32f429.dtsi
>> >> >> >> >>>> index 7d624a2..697a133 100644
>> >> >> >> >>>> --- a/arch/arm/boot/dts/stm32f429.dtsi
>> >> >> >> >>>> +++ b/arch/arm/boot/dts/stm32f429.dtsi
>> >> >> >> >>>> @@ -59,7 +59,6 @@
>> >> >> >> >>>> };
>> >> >> >> >>>>
>> >> >> >> >>>> soc {
>> >> >> >> >>>> - dma-ranges = <0xc0000000 0x0
>> >> 0x10000000>;
>> >> >> >> >>>>
>> >> >> >> >>>> timer2: timer at 40000000 {
>> >> >> >> >>>> compatible = "st,stm32-timer";
>> >> >> >> >>>> @@ -472,13 +471,11 @@
>> >> >> >> >>>> st,syscon = <&syscfg 0x4>;
>> >> >> >> >>>> snps,pbl = <8>;
>> >> >> >> >>>> snps,mixed-burst;
>> >> >> >> >>>> - dma-ranges;
>> >> >> >> >>>> status = "disabled";
>> >> >> >> >>>> };
>> >> >> >> >>>>
>> >> >> >> >>>> usbotg_hs: usb at 40040000 {
>> >> >> >> >>>> compatible = "snps,dwc2";
>> >> >> >> >>>> - dma-ranges;
>> >> >> >> >>>> reg = <0x40040000 0x40000>;
>> >> >> >> >>>> interrupts = <77>;
>> >> >> >> >>>> clocks = <&rcc 0 29>;
>> >> >> >> >>>>
>> >> >> >> >>>>
>> >> >> >> >>>>> diff --git a/arch/arm/boot/dts/stm32f429.dtsi
>> >> >> >> >>>>> b/arch/arm/boot/dts/stm32f429.dtsi
>> >> >> >> >>>>> index 0596d60..3a1cfdd 100644
>> >> >> >> >>>>> --- a/arch/arm/boot/dts/stm32f429.dtsi
>> >> >> >> >>>>> +++ b/arch/arm/boot/dts/stm32f429.dtsi
>> >> >> >> >>>>> @@ -59,8 +59,6 @@
>> >> >> >> >>>>> };
>> >> >> >> >>>>>
>> >> >> >> >>>>> soc {
>> >> >> >> >>>>> - dma-ranges = <0xc0000000 0x0
>> >> 0x10000000>;
>> >> >> >> >>>>> -
>> >> >> >> >>>>> timer2: timer at 40000000 {
>> >> >> >> >>>>> compatible = "st,stm32-timer";
>> >> >> >> >>>>> reg = <0x40000000 0x400>;
>> >> >> >> >>>>> diff --git a/arch/arm/boot/dts/stm32f469-disco.dts
>> >> >> >> >>>>> b/arch/arm/boot/dts/stm32f469-disco.dts
>> >> >> >> >>>>> index 9e73656..c2213c0 100644
>> >> >> >> >>>>> --- a/arch/arm/boot/dts/stm32f469-disco.dts
>> >> >> >> >>>>> +++ b/arch/arm/boot/dts/stm32f469-disco.dts
>> >> >> >> >>>>> @@ -64,6 +64,10 @@
>> >> >> >> >>>>> aliases {
>> >> >> >> >>>>> serial0 = &usart3;
>> >> >> >> >>>>> };
>> >> >> >> >>>>> +
>> >> >> >> >>>>> + soc {
>> >> >> >> >>>>> + dma-ranges = <0xc0000000 0x0
>> >> 0x10000000>;
>> >> >> >> >>>>> + };
>> >> >> >> >>>>> };
>> >> >> >> >>>>>
>> >> >> >> >>>>> &clk_hse {
>> >> >> >> >>>>> --
>> >> >> >> >>>>
>> >> >> >> >>>>
>> >> >> >> >>>>
>> >> >> >> >>>>
>> >> >> >> >>>> Br.,
>> >> >> >> >>>> Bruno
>> >> >> >> >>>>
>> >> >> >> >>>
>> >> >> >> >
>> >> >> >>
>> >> >> >> _______________________________________________
>> >> >> >> linux-arm-kernel mailing list
>> >> >> >> linux-arm-kernel at lists.infradead.org
>> >> <mailto:linux-arm-kernel@lists.infradead.org>
>> >> >> >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>> >> <http://lists.infradead.org/mailman/listinfo/linux-arm-kernel>
>> >> >> >
>> >> >> >
>> >> >
>> >> >
>> >>
>> >>
>> >
>
>
^ permalink raw reply
* [PATCH] drm/sun4i: Fix error handling
From: Maxime Ripard @ 2016-11-02 18:14 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <c15282b4-e88a-06b1-527d-96aedce8b7eb@wanadoo.fr>
Hi,
On Sun, Oct 30, 2016 at 12:53:02PM +0100, Christophe JAILLET wrote:
> BTW, memory allocation in 'sun4i_layers_init()' looks spurious, especially
> the use of 'layer' in the for loop.
> Just my 2 cents.
What do you mean by it's spurious?
> I also forgot to say that we could propagate the error code returned by
> sun4i_layers_init instead of returning -EINVAL unconditionally
Indeed. Can you send a patch for that?
Thanks,
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161102/4e98b055/attachment.sig>
^ permalink raw reply
* [PATCH V2 2/2] ARM: dts: add new compatible stream for i.MX6QP mmdc
From: Frank Li @ 2016-11-02 18:00 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1478109604-18323-1-git-send-email-Frank.Li@nxp.com>
mmdc of i.MX6QP are little difference with i.MX6Q.
added new compatible stream fsl,imx6qp-mmdc
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
No change for this patch.
suspend resume code need fsl,imx6q-mmdc
arch/arm/boot/dts/imx6qp.dtsi | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm/boot/dts/imx6qp.dtsi b/arch/arm/boot/dts/imx6qp.dtsi
index 886dbf2..e0fdd0f 100644
--- a/arch/arm/boot/dts/imx6qp.dtsi
+++ b/arch/arm/boot/dts/imx6qp.dtsi
@@ -85,5 +85,12 @@
pcie: pcie at 0x01000000 {
compatible = "fsl,imx6qp-pcie", "snps,dw-pcie";
};
+
+ aips-bus at 02100000 {
+ mmdc0: mmdc at 021b0000 { /* MMDC0 */
+ compatible = "fsl,imx6qp-mmdc", "fsl,imx6q-mmdc";
+ reg = <0x021b0000 0x4000>;
+ };
+ };
};
};
--
2.5.2
^ permalink raw reply related
* [PATCH v2 1/2] ARM: imx: mmdc perf function support i.MX6QP
From: Frank Li @ 2016-11-02 18:00 UTC (permalink / raw)
To: linux-arm-kernel
i.MX6QP added new reigster bit PROFILE_SEL in MADPCR0.
need set it at perf start.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
V1 to V2: remove fsl_mmdc_devtype
arch/arm/mach-imx/mmdc.c | 38 ++++++++++++++++++++++++++++++++------
1 file changed, 32 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-imx/mmdc.c b/arch/arm/mach-imx/mmdc.c
index d82d14c..032cbe0 100644
--- a/arch/arm/mach-imx/mmdc.c
+++ b/arch/arm/mach-imx/mmdc.c
@@ -44,6 +44,7 @@
#define DBG_RST 0x2
#define PRF_FRZ 0x4
#define CYC_OVF 0x8
+#define PROFILE_SEL 0x10
#define MMDC_MADPCR0 0x410
#define MMDC_MADPSR0 0x418
@@ -55,10 +56,29 @@
#define MMDC_NUM_COUNTERS 6
+#define FSL_MMDC_QUIRK_PROFILE_SEL 0x1
+
#define to_mmdc_pmu(p) container_of(p, struct mmdc_pmu, pmu)
static int ddr_type;
+struct fsl_mmdc_devtype_data {
+ int driver_data;
+};
+
+static struct fsl_mmdc_devtype_data imx6q_data = {
+};
+
+static struct fsl_mmdc_devtype_data imx6qp_data = {
+ .driver_data = FSL_MMDC_QUIRK_PROFILE_SEL,
+};
+
+static const struct of_device_id imx_mmdc_dt_ids[] = {
+ { .compatible = "fsl,imx6q-mmdc", .data = (void *)&imx6q_data},
+ { .compatible = "fsl,imx6qp-mmdc", .data = (void *)&imx6qp_data},
+ { /* sentinel */ }
+};
+
#ifdef CONFIG_PERF_EVENTS
static DEFINE_IDA(mmdc_ida);
@@ -83,6 +103,7 @@ struct mmdc_pmu {
struct device *dev;
struct perf_event *mmdc_events[MMDC_NUM_COUNTERS];
struct hlist_node node;
+ struct fsl_mmdc_devtype_data *devtype_data;
};
/*
@@ -307,6 +328,7 @@ static void mmdc_pmu_event_start(struct perf_event *event, int flags)
struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu);
struct hw_perf_event *hwc = &event->hw;
void __iomem *mmdc_base, *reg;
+ int val;
mmdc_base = pmu_mmdc->mmdc_base;
reg = mmdc_base + MMDC_MADPCR0;
@@ -321,7 +343,12 @@ static void mmdc_pmu_event_start(struct perf_event *event, int flags)
local64_set(&hwc->prev_count, 0);
writel(DBG_RST, reg);
- writel(DBG_EN, reg);
+
+ val = DBG_EN;
+ if (pmu_mmdc->devtype_data->driver_data & FSL_MMDC_QUIRK_PROFILE_SEL)
+ val |= PROFILE_SEL;
+
+ writel(val, reg);
}
static int mmdc_pmu_event_add(struct perf_event *event, int flags)
@@ -436,6 +463,8 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
char *name;
int mmdc_num;
int ret;
+ const struct of_device_id *of_id =
+ of_match_device(imx_mmdc_dt_ids, &pdev->dev);
pmu_mmdc = kzalloc(sizeof(*pmu_mmdc), GFP_KERNEL);
if (!pmu_mmdc) {
@@ -450,6 +479,8 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
name = devm_kasprintf(&pdev->dev,
GFP_KERNEL, "mmdc%d", mmdc_num);
+ pmu_mmdc->devtype_data = (struct fsl_mmdc_devtype_data *)of_id->data;
+
hrtimer_init(&pmu_mmdc->hrtimer, CLOCK_MONOTONIC,
HRTIMER_MODE_REL);
pmu_mmdc->hrtimer.function = mmdc_pmu_timer_handler;
@@ -524,11 +555,6 @@ int imx_mmdc_get_ddr_type(void)
return ddr_type;
}
-static const struct of_device_id imx_mmdc_dt_ids[] = {
- { .compatible = "fsl,imx6q-mmdc", },
- { /* sentinel */ }
-};
-
static struct platform_driver imx_mmdc_driver = {
.driver = {
.name = "imx-mmdc",
--
2.5.2
^ permalink raw reply related
* [PATCH] drm/sun4i: Fix error handling
From: Maxime Ripard @ 2016-11-02 17:57 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20161030084926.15303-1-christophe.jaillet@wanadoo.fr>
On Sun, Oct 30, 2016 at 09:49:26AM +0100, Christophe JAILLET wrote:
> 'sun4i_layers_init()' returns an error pointer in case of error, not
> NULL. So test it with IS_ERR.
>
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Applied, thanks!
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161102/a688de85/attachment.sig>
^ permalink raw reply
* [PATCH v7] spi: sun4i: Allow transfers larger than FIFO size
From: Maxime Ripard @ 2016-11-02 17:47 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20161027224712.GY25322@sirena.org.uk>
Hi Mark,
On Thu, Oct 27, 2016 at 11:47:12PM +0100, Mark Brown wrote:
> > > If the concern from the previous reviews to do with not using DMA is
> > > there some reason it's hard to do DMA?
>
> > I think just like Alexandru that it is orthogonal. But to really
> > answer, no, it's not difficult. There's just been some fundamental
> > disagreement on whether DMA was supposed to be optional or not that
> > stalled everything I guess.
>
> Oh, I seem to remember some patches adding DMA support that were doing
> some strange special snowflake thing with ignoring errors now that I
> think about it but that's not this one... why did nobody ever follow up
> on those?
I have no idea. I think last time we discussed this was last
July. Especially with this in now, there's probably no rush anyway.
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161102/b6ac813a/attachment.sig>
^ permalink raw reply
* [PATCH v5 2/7] Documentation: devicetree: add PHY lane swap binding
From: Andrew Lunn @ 2016-11-02 17:39 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1478106488-11779-3-git-send-email-jon.mason@broadcom.com>
On Wed, Nov 02, 2016 at 01:08:03PM -0400, Jon Mason wrote:
> Add the documentation for PHY lane swapping. This is a boolean entry to
> notify the phy device drivers that the TX/RX lanes need to be swapped.
>
> Signed-off-by: Jon Mason <jon.mason@broadcom.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply
* [PATCH] iommu/arm-smmu: Check that iommu_fwspecs are ours
From: Robin Murphy @ 2016-11-02 17:31 UTC (permalink / raw)
To: linux-arm-kernel
We seem to have forgotten to check that iommu_fwspecs actually belong to
us before we go ahead and dereference their private data. Oops.
Fixes: 021bb8420d44 ("iommu/arm-smmu: Wire up generic configuration support")
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
---
drivers/iommu/arm-smmu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index ef978db2bb54..ef0f8d635a3b 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -1390,7 +1390,7 @@ static int arm_smmu_add_device(struct device *dev)
fwspec = dev->iommu_fwspec;
if (ret)
goto out_free;
- } else if (fwspec) {
+ } else if (fwspec && fwspec->ops == &arm_smmu_ops) {
smmu = arm_smmu_get_by_node(to_of_node(fwspec->iommu_fwnode));
} else {
return -ENODEV;
--
2.10.2.dirty
^ permalink raw reply related
* [PATCH v5 4/7] Documentation: devicetree: net: add NS2 bindings to amac
From: Jon Mason @ 2016-11-02 17:24 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <ab064a45-0172-fa28-4ac6-0d3159a26506@cogentembedded.com>
On Wed, Nov 02, 2016 at 08:18:51PM +0300, Sergei Shtylyov wrote:
> Hello.
>
> On 11/02/2016 08:08 PM, Jon Mason wrote:
>
> >Clean-up the documentation to the bgmac-amac driver, per suggestion by
> >Rob Herring, and add details for NS2 support.
> >
> >Signed-off-by: Jon Mason <jon.mason@broadcom.com>
> >---
> > Documentation/devicetree/bindings/net/brcm,amac.txt | 16 +++++++++++-----
> > 1 file changed, 11 insertions(+), 5 deletions(-)
> >
> >diff --git a/Documentation/devicetree/bindings/net/brcm,amac.txt b/Documentation/devicetree/bindings/net/brcm,amac.txt
> >index ba5ecc1..2fefa1a 100644
> >--- a/Documentation/devicetree/bindings/net/brcm,amac.txt
> >+++ b/Documentation/devicetree/bindings/net/brcm,amac.txt
> >@@ -2,11 +2,17 @@ Broadcom AMAC Ethernet Controller Device Tree Bindings
> > -------------------------------------------------------------
> >
> > Required properties:
> >- - compatible: "brcm,amac" or "brcm,nsp-amac"
> >- - reg: Address and length of the GMAC registers,
> >- Address and length of the GMAC IDM registers
> >- - reg-names: Names of the registers. Must have both "amac_base" and
> >- "idm_base"
> >+ - compatible: "brcm,amac"
> >+ "brcm,nsp-amac"
> >+ "brcm,ns2-amac"
> >+ - reg: Address and length of the register set for the device. It
> >+ contains the information of registers in the same order as
> >+ described by reg-names
> >+ - reg-names: Names of the registers.
> >+ "amac_base": Address and length of the GMAC registers
> >+ "idm_base": Address and length of the GMAC IDM registers
> >+ "nicpm_base": Address and length of the NIC Port Manager
> >+ registers (required for Northstar2)
>
> Why this "_base" suffix? It looks redundant...
Yes. Rob Herring pointed out the same thing. It is ugly, but follows
the existing binding.
Thanks,
Jon
>
> [...]
>
> MBR, Sergei
>
^ permalink raw reply
* [PATCH v5 4/7] Documentation: devicetree: net: add NS2 bindings to amac
From: Sergei Shtylyov @ 2016-11-02 17:18 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1478106488-11779-5-git-send-email-jon.mason@broadcom.com>
Hello.
On 11/02/2016 08:08 PM, Jon Mason wrote:
> Clean-up the documentation to the bgmac-amac driver, per suggestion by
> Rob Herring, and add details for NS2 support.
>
> Signed-off-by: Jon Mason <jon.mason@broadcom.com>
> ---
> Documentation/devicetree/bindings/net/brcm,amac.txt | 16 +++++++++++-----
> 1 file changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/net/brcm,amac.txt b/Documentation/devicetree/bindings/net/brcm,amac.txt
> index ba5ecc1..2fefa1a 100644
> --- a/Documentation/devicetree/bindings/net/brcm,amac.txt
> +++ b/Documentation/devicetree/bindings/net/brcm,amac.txt
> @@ -2,11 +2,17 @@ Broadcom AMAC Ethernet Controller Device Tree Bindings
> -------------------------------------------------------------
>
> Required properties:
> - - compatible: "brcm,amac" or "brcm,nsp-amac"
> - - reg: Address and length of the GMAC registers,
> - Address and length of the GMAC IDM registers
> - - reg-names: Names of the registers. Must have both "amac_base" and
> - "idm_base"
> + - compatible: "brcm,amac"
> + "brcm,nsp-amac"
> + "brcm,ns2-amac"
> + - reg: Address and length of the register set for the device. It
> + contains the information of registers in the same order as
> + described by reg-names
> + - reg-names: Names of the registers.
> + "amac_base": Address and length of the GMAC registers
> + "idm_base": Address and length of the GMAC IDM registers
> + "nicpm_base": Address and length of the NIC Port Manager
> + registers (required for Northstar2)
Why this "_base" suffix? It looks redundant...
[...]
MBR, Sergei
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox