* [PATCH v2 1/2] bmips: add BCM6358 support @ 2016-02-21 11:41 Álvaro Fernández Rojas [not found] ` <1456054881-26787-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-02-21 11:41 UTC (permalink / raw) To: linux-mips, ralf, linux-kernel, devicetree, f.fainelli, jogo, cernekee Cc: Álvaro Fernández Rojas BCM6358 has a shared TLB which conflicts with current SMP support, so it must be disabled for now. BCM6358 uses >= 0xfffe0000 addresses for internal registers, which need to be remapped (by using a simplified version of BRCM63xx ioremap.h). Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> --- v2: Use a different approach for remapping internal registers arch/mips/bmips/setup.c | 29 +++++++++++++++++------ arch/mips/include/asm/mach-bmips/ioremap.h | 37 ++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c index 3553528..f834a86 100644 --- a/arch/mips/bmips/setup.c +++ b/arch/mips/bmips/setup.c @@ -18,6 +18,7 @@ #include <linux/of_fdt.h> #include <linux/of_platform.h> #include <linux/smp.h> +#include <linux/types.h> #include <asm/addrspace.h> #include <asm/bmips.h> #include <asm/bootinfo.h> @@ -35,9 +36,12 @@ static const unsigned long kbase = VMLINUX_LOAD_ADDRESS & 0xfff00000; +phys_addr_t bmips_internal_registers; + struct bmips_quirk { - const char *compatible; - void (*quirk_fn)(void); + const char *compatible; + void (*quirk_fn)(void); + const phys_addr_t regs; }; static void kbase_setup(void) @@ -95,17 +99,27 @@ static void bcm6328_quirks(void) bcm63xx_fixup_cpu1(); } +static void bcm6358_quirks(void) +{ + /* + * BCM6358 needs special handling for its shared TLB, so + * disable SMP for now + */ + bmips_smp_enabled = 0; +} + static void bcm6368_quirks(void) { bcm63xx_fixup_cpu1(); } static const struct bmips_quirk bmips_quirk_list[] = { - { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, - { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, - { "brcm,bcm6328", &bcm6328_quirks }, - { "brcm,bcm6368", &bcm6368_quirks }, - { "brcm,bcm63168", &bcm6368_quirks }, + { "brcm,bcm3384-viper", &bcm3384_viper_quirks, 0 }, + { "brcm,bcm33843-viper", &bcm3384_viper_quirks, 0 }, + { "brcm,bcm6328", &bcm6328_quirks, 0 }, + { "brcm,bcm6358", &bcm6358_quirks, 0xfffe0000 }, + { "brcm,bcm6368", &bcm6368_quirks, 0 }, + { "brcm,bcm63168", &bcm6368_quirks, 0 }, { }, }; @@ -162,6 +176,7 @@ void __init plat_mem_setup(void) for (q = bmips_quirk_list; q->quirk_fn; q++) { if (of_flat_dt_is_compatible(of_get_flat_dt_root(), q->compatible)) { + bmips_internal_registers = q->regs; q->quirk_fn(); } } diff --git a/arch/mips/include/asm/mach-bmips/ioremap.h b/arch/mips/include/asm/mach-bmips/ioremap.h new file mode 100644 index 0000000..5ffca94 --- /dev/null +++ b/arch/mips/include/asm/mach-bmips/ioremap.h @@ -0,0 +1,37 @@ +#ifndef __ASM_MACH_BMIPS_IOREMAP_H +#define __ASM_MACH_BMIPS_IOREMAP_H + +#include <linux/types.h> + +extern phys_addr_t bmips_internal_registers; + +static inline phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr, + phys_addr_t size) +{ + return phys_addr; +} + +static inline int is_bmips_internal_registers(phys_addr_t offset) +{ + if (bmips_internal_registers != 0 && offset >= bmips_internal_registers) + return 1; + else + return 0; +} + +static inline void __iomem *plat_ioremap(phys_addr_t offset, + unsigned long size, + unsigned long flags) +{ + if (is_bmips_internal_registers(offset)) + return (void __iomem *) offset; + + return NULL; +} + +static inline int plat_iounmap(const volatile void __iomem *addr) +{ + return is_bmips_internal_registers((unsigned long) addr); +} + +#endif /* __ASM_MACH_BMIPS_IOREMAP_H */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1456054881-26787-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v2 1/2] bmips: add BCM6358 support [not found] ` <1456054881-26787-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-03-03 20:09 ` Florian Fainelli 2016-04-03 9:56 ` [PATCH v3 " Álvaro Fernández Rojas 1 sibling, 0 replies; 17+ messages in thread From: Florian Fainelli @ 2016-03-03 20:09 UTC (permalink / raw) To: Álvaro Fernández Rojas, linux-mips-6z/3iImG2C8G8FEW9MqTrA, ralf-6z/3iImG2C8G8FEW9MqTrA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w On 21/02/16 03:41, Álvaro Fernández Rojas wrote: > BCM6358 has a shared TLB which conflicts with current SMP support, so it must > be disabled for now. > BCM6358 uses >= 0xfffe0000 addresses for internal registers, which need to be > remapped (by using a simplified version of BRCM63xx ioremap.h). > > Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > v2: Use a different approach for remapping internal registers > > arch/mips/bmips/setup.c | 29 +++++++++++++++++------ > arch/mips/include/asm/mach-bmips/ioremap.h | 37 ++++++++++++++++++++++++++++++ > 2 files changed, 59 insertions(+), 7 deletions(-) > create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h > > diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c > index 3553528..f834a86 100644 > --- a/arch/mips/bmips/setup.c > +++ b/arch/mips/bmips/setup.c > @@ -18,6 +18,7 @@ > #include <linux/of_fdt.h> > #include <linux/of_platform.h> > #include <linux/smp.h> > +#include <linux/types.h> > #include <asm/addrspace.h> > #include <asm/bmips.h> > #include <asm/bootinfo.h> > @@ -35,9 +36,12 @@ > > static const unsigned long kbase = VMLINUX_LOAD_ADDRESS & 0xfff00000; > > +phys_addr_t bmips_internal_registers; > + > struct bmips_quirk { > - const char *compatible; > - void (*quirk_fn)(void); > + const char *compatible; > + void (*quirk_fn)(void); > + const phys_addr_t regs; > }; That does not scale very well to having some sort of generic quirk function here. > > static void kbase_setup(void) > @@ -95,17 +99,27 @@ static void bcm6328_quirks(void) > bcm63xx_fixup_cpu1(); > } > > +static void bcm6358_quirks(void) > +{ > + /* > + * BCM6358 needs special handling for its shared TLB, so > + * disable SMP for now > + */ > + bmips_smp_enabled = 0; > +} > + > static void bcm6368_quirks(void) > { > bcm63xx_fixup_cpu1(); > } > > static const struct bmips_quirk bmips_quirk_list[] = { > - { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, > - { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, > - { "brcm,bcm6328", &bcm6328_quirks }, > - { "brcm,bcm6368", &bcm6368_quirks }, > - { "brcm,bcm63168", &bcm6368_quirks }, > + { "brcm,bcm3384-viper", &bcm3384_viper_quirks, 0 }, > + { "brcm,bcm33843-viper", &bcm3384_viper_quirks, 0 }, > + { "brcm,bcm6328", &bcm6328_quirks, 0 }, > + { "brcm,bcm6358", &bcm6358_quirks, 0xfffe0000 }, > + { "brcm,bcm6368", &bcm6368_quirks, 0 }, > + { "brcm,bcm63168", &bcm6368_quirks, 0 }, > { }, > }; > > @@ -162,6 +176,7 @@ void __init plat_mem_setup(void) > for (q = bmips_quirk_list; q->quirk_fn; q++) { > if (of_flat_dt_is_compatible(of_get_flat_dt_root(), > q->compatible)) { > + bmips_internal_registers = q->regs; > q->quirk_fn(); > } > } > diff --git a/arch/mips/include/asm/mach-bmips/ioremap.h b/arch/mips/include/asm/mach-bmips/ioremap.h > new file mode 100644 > index 0000000..5ffca94 > --- /dev/null > +++ b/arch/mips/include/asm/mach-bmips/ioremap.h > @@ -0,0 +1,37 @@ > +#ifndef __ASM_MACH_BMIPS_IOREMAP_H > +#define __ASM_MACH_BMIPS_IOREMAP_H > + > +#include <linux/types.h> > + > +extern phys_addr_t bmips_internal_registers; > + > +static inline phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr, > + phys_addr_t size) > +{ > + return phys_addr; > +} > + > +static inline int is_bmips_internal_registers(phys_addr_t offset) > +{ > + if (bmips_internal_registers != 0 && offset >= bmips_internal_registers) > + return 1; Humm, we should probably just use a hardcoded constant here, and just pick one which works for all SoCs, so the 3368 base address for instance: 0xfff8_0000 seems like a good candidate, and also works for other DSL SoCs too. -- Florian -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v3 1/2] bmips: add BCM6358 support [not found] ` <1456054881-26787-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-03-03 20:09 ` Florian Fainelli @ 2016-04-03 9:56 ` Álvaro Fernández Rojas [not found] ` <1459677376-10449-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-04-04 8:09 ` [PATCH v4 1/2] bmips: add BCM6358 support Álvaro Fernández Rojas 1 sibling, 2 replies; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-04-03 9:56 UTC (permalink / raw) To: linux-mips-6z/3iImG2C8G8FEW9MqTrA, ralf-6z/3iImG2C8G8FEW9MqTrA, devicetree-u79uwXL29TY76Z2rM5mHXA, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w, robh-DgEjT+Ai2ygdnm+yROfE0A Cc: Álvaro Fernández Rojas BCM6358 has a shared TLB which conflicts with current SMP support, so it must be disabled for now. BCM6358 uses >= 0xfffe0000 addresses for internal registers, which need to be remapped (by using a simplified version of BRCM63xx ioremap.h). However, 0xfff80000 is a better address since it also covers BCM3368, leaving the possibility to add it in the future. Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --- v3: Use a hardcoded constant for is_bmips_internal_registers (BCM3368 base address) v2: Use a different approach for remapping internal registers arch/mips/bmips/setup.c | 10 +++++++++ arch/mips/include/asm/mach-bmips/ioremap.h | 33 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c index 3553528..38b5bd5 100644 --- a/arch/mips/bmips/setup.c +++ b/arch/mips/bmips/setup.c @@ -95,6 +95,15 @@ static void bcm6328_quirks(void) bcm63xx_fixup_cpu1(); } +static void bcm6358_quirks(void) +{ + /* + * BCM6358 needs special handling for its shared TLB, so + * disable SMP for now + */ + bmips_smp_enabled = 0; +} + static void bcm6368_quirks(void) { bcm63xx_fixup_cpu1(); @@ -104,6 +113,7 @@ static const struct bmips_quirk bmips_quirk_list[] = { { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, { "brcm,bcm6328", &bcm6328_quirks }, + { "brcm,bcm6358", &bcm6358_quirks }, { "brcm,bcm6368", &bcm6368_quirks }, { "brcm,bcm63168", &bcm6368_quirks }, { }, diff --git a/arch/mips/include/asm/mach-bmips/ioremap.h b/arch/mips/include/asm/mach-bmips/ioremap.h new file mode 100644 index 0000000..29c7a7b --- /dev/null +++ b/arch/mips/include/asm/mach-bmips/ioremap.h @@ -0,0 +1,33 @@ +#ifndef __ASM_MACH_BMIPS_IOREMAP_H +#define __ASM_MACH_BMIPS_IOREMAP_H + +#include <linux/types.h> + +static inline phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr, phys_addr_t size) +{ + return phys_addr; +} + +static inline int is_bmips_internal_registers(phys_addr_t offset) +{ + if (offset >= 0xfff80000) + return 1; + + return 0; +} + +static inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size, + unsigned long flags) +{ + if (is_bmips_internal_registers(offset)) + return (void __iomem *)offset; + + return NULL; +} + +static inline int plat_iounmap(const volatile void __iomem *addr) +{ + return is_bmips_internal_registers((unsigned long)addr); +} + +#endif /* __ASM_MACH_BMIPS_IOREMAP_H */ -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1459677376-10449-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* [PATCH v3 2/2] bmips: add device tree example for BCM6358 [not found] ` <1459677376-10449-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-04-03 9:56 ` Álvaro Fernández Rojas 2016-04-04 5:16 ` Rob Herring 0 siblings, 1 reply; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-04-03 9:56 UTC (permalink / raw) To: linux-mips-6z/3iImG2C8G8FEW9MqTrA, ralf-6z/3iImG2C8G8FEW9MqTrA, devicetree-u79uwXL29TY76Z2rM5mHXA, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w, robh-DgEjT+Ai2ygdnm+yROfE0A Cc: Álvaro Fernández Rojas This adds a device tree example for SFR Neufbox4 (Sercomm version), which also serves as a real example for brcm,bcm6358-leds. Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --- v3: Device tree fixes - Use interrupt-controller instead of periph_intc. - Use led@# instead of naming the LEDs. v2: Remove led0 alias and use stdout-path only .../devicetree/bindings/mips/brcm/soc.txt | 2 +- arch/mips/bmips/Kconfig | 4 + arch/mips/boot/dts/brcm/Makefile | 2 + arch/mips/boot/dts/brcm/bcm6358.dtsi | 111 +++++++++++++++++++++ arch/mips/boot/dts/brcm/bcm96358nb4ser.dts | 46 +++++++++ 5 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 arch/mips/boot/dts/brcm/bcm6358.dtsi create mode 100644 arch/mips/boot/dts/brcm/bcm96358nb4ser.dts diff --git a/Documentation/devicetree/bindings/mips/brcm/soc.txt b/Documentation/devicetree/bindings/mips/brcm/soc.txt index 7bab90c..e58a4f6 100644 --- a/Documentation/devicetree/bindings/mips/brcm/soc.txt +++ b/Documentation/devicetree/bindings/mips/brcm/soc.txt @@ -4,7 +4,7 @@ Required properties: - compatible: "brcm,bcm3384", "brcm,bcm33843" "brcm,bcm3384-viper", "brcm,bcm33843-viper" - "brcm,bcm6328", "brcm,bcm6368", + "brcm,bcm6328", "brcm,bcm6358", "brcm,bcm6368", "brcm,bcm7125", "brcm,bcm7346", "brcm,bcm7358", "brcm,bcm7360", "brcm,bcm7362", "brcm,bcm7420", "brcm,bcm7425" diff --git a/arch/mips/bmips/Kconfig b/arch/mips/bmips/Kconfig index e2c4fd6..264328d 100644 --- a/arch/mips/bmips/Kconfig +++ b/arch/mips/bmips/Kconfig @@ -21,6 +21,10 @@ config DT_BCM93384WVG_VIPER bool "BCM93384WVG Viper CPU (EXPERIMENTAL)" select BUILTIN_DTB +config DT_BCM96358NB4SER + bool "BCM96358NB4SER" + select BUILTIN_DTB + config DT_BCM96368MVWG bool "BCM96368MVWG" select BUILTIN_DTB diff --git a/arch/mips/boot/dts/brcm/Makefile b/arch/mips/boot/dts/brcm/Makefile index eabeb60..fda9d38 100644 --- a/arch/mips/boot/dts/brcm/Makefile +++ b/arch/mips/boot/dts/brcm/Makefile @@ -1,5 +1,6 @@ dtb-$(CONFIG_DT_BCM93384WVG) += bcm93384wvg.dtb dtb-$(CONFIG_DT_BCM93384WVG_VIPER) += bcm93384wvg_viper.dtb +dtb-$(CONFIG_DT_BCM96358NB4SER) += bcm96358nb4ser.dtb dtb-$(CONFIG_DT_BCM96368MVWG) += bcm96368mvwg.dtb dtb-$(CONFIG_DT_BCM9EJTAGPRB) += bcm9ejtagprb.dtb dtb-$(CONFIG_DT_BCM97125CBMB) += bcm97125cbmb.dtb @@ -14,6 +15,7 @@ dtb-$(CONFIG_DT_BCM97435SVMB) += bcm97435svmb.dtb dtb-$(CONFIG_DT_NONE) += \ bcm93384wvg.dtb \ bcm93384wvg_viper.dtb \ + bcm96358nb4ser.dtb \ bcm96368mvwg.dtb \ bcm9ejtagprb.dtb \ bcm97125cbmb.dtb \ diff --git a/arch/mips/boot/dts/brcm/bcm6358.dtsi b/arch/mips/boot/dts/brcm/bcm6358.dtsi new file mode 100644 index 0000000..5ac1ef0 --- /dev/null +++ b/arch/mips/boot/dts/brcm/bcm6358.dtsi @@ -0,0 +1,111 @@ +/ { + #address-cells = <1>; + #size-cells = <1>; + compatible = "brcm,bcm6358"; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + mips-hpt-frequency = <150000000>; + + cpu@0 { + compatible = "brcm,bmips4350"; + device_type = "cpu"; + reg = <0>; + }; + + cpu@1 { + compatible = "brcm,bmips4350"; + device_type = "cpu"; + reg = <1>; + }; + }; + + clocks { + periph_clk: periph_clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <50000000>; + }; + }; + + aliases { + uart0 = &uart0; + uart1 = &uart1; + }; + + cpu_intc: cpu_intc { + #address-cells = <0>; + compatible = "mti,cpu-interrupt-controller"; + + interrupt-controller; + #interrupt-cells = <1>; + }; + + ubus { + #address-cells = <1>; + #size-cells = <1>; + + compatible = "simple-bus"; + ranges; + + periph_cntl: syscon@fffe0000 { + compatible = "syscon"; + reg = <0xfffe0000 0xc>; + little-endian; + }; + + reboot: syscon-reboot@fffe0008 { + compatible = "syscon-reboot"; + regmap = <&periph_cntl>; + offset = <0x8>; + mask = <0x1>; + }; + + periph_intc: interrupt-controller@fffe000c { + compatible = "brcm,bcm3380-l2-intc"; + reg = <0xfffe0010 0x4 0xfffe000c 0x4>, + <0xfffe003c 0x4 0xfffe0038 0x4>; + + interrupt-controller; + #interrupt-cells = <1>; + + interrupt-parent = <&cpu_intc>; + interrupts = <2>; + }; + + leds0: led-controller@fffe00d0 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "brcm,bcm6358-leds"; + reg = <0xfffe00d0 0x8>; + + status = "disabled"; + }; + + uart0: serial@fffe0100 { + compatible = "brcm,bcm6345-uart"; + reg = <0xfffe0100 0x18>; + + interrupt-parent = <&periph_intc>; + interrupts = <2>; + + clocks = <&periph_clk>; + + status = "disabled"; + }; + + uart1: serial@fffe0120 { + compatible = "brcm,bcm6345-uart"; + reg = <0xfffe0120 0x18>; + + interrupt-parent = <&periph_intc>; + interrupts = <3>; + + clocks = <&periph_clk>; + + status = "disabled"; + }; + }; +}; diff --git a/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts b/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts new file mode 100644 index 0000000..f412117 --- /dev/null +++ b/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts @@ -0,0 +1,46 @@ +/dts-v1/; + +/include/ "bcm6358.dtsi" + +/ { + compatible = "sfr,nb4-ser", "brcm,bcm6358"; + model = "SFR Neufbox 4 (Sercomm)"; + + memory@0 { + device_type = "memory"; + reg = <0x00000000 0x02000000>; + }; + + chosen { + stdout-path = &uart0; + }; +}; + +&leds0 { + status = "ok"; + + led@0 { + reg = <0>; + active-low; + label = "nb4-ser:white:alarm"; + }; + led@2 { + reg = <2>; + active-low; + label = "nb4-ser:white:tv"; + }; + led@3 { + reg = <3>; + active-low; + label = "nb4-ser:white:tel"; + }; + led@4 { + reg = <4>; + active-low; + label = "nb4-ser:white:adsl"; + }; +}; + +&uart0 { + status = "okay"; +}; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v3 2/2] bmips: add device tree example for BCM6358 2016-04-03 9:56 ` [PATCH v3 2/2] bmips: add device tree example for BCM6358 Álvaro Fernández Rojas @ 2016-04-04 5:16 ` Rob Herring 0 siblings, 0 replies; 17+ messages in thread From: Rob Herring @ 2016-04-04 5:16 UTC (permalink / raw) To: Álvaro Fernández Rojas Cc: linux-mips, ralf, devicetree, f.fainelli, jogo, cernekee On Sun, Apr 03, 2016 at 11:56:16AM +0200, Álvaro Fernández Rojas wrote: > This adds a device tree example for SFR Neufbox4 (Sercomm version), which > also serves as a real example for brcm,bcm6358-leds. > > Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> > --- > v3: Device tree fixes > - Use interrupt-controller instead of periph_intc. > - Use led@# instead of naming the LEDs. > v2: Remove led0 alias and use stdout-path only > > .../devicetree/bindings/mips/brcm/soc.txt | 2 +- > arch/mips/bmips/Kconfig | 4 + > arch/mips/boot/dts/brcm/Makefile | 2 + > arch/mips/boot/dts/brcm/bcm6358.dtsi | 111 +++++++++++++++++++++ > arch/mips/boot/dts/brcm/bcm96358nb4ser.dts | 46 +++++++++ > 5 files changed, 164 insertions(+), 1 deletion(-) > create mode 100644 arch/mips/boot/dts/brcm/bcm6358.dtsi > create mode 100644 arch/mips/boot/dts/brcm/bcm96358nb4ser.dts Acked-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v4 1/2] bmips: add BCM6358 support 2016-04-03 9:56 ` [PATCH v3 " Álvaro Fernández Rojas [not found] ` <1459677376-10449-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-04-04 8:09 ` Álvaro Fernández Rojas [not found] ` <1459757353-14683-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 1 sibling, 1 reply; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-04-04 8:09 UTC (permalink / raw) To: linux-mips, ralf, devicetree, f.fainelli, jogo, cernekee, robh Cc: Álvaro Fernández Rojas BCM6358 has a shared TLB which conflicts with current SMP support, so it must be disabled for now. BCM6358 uses >= 0xfffe0000 addresses for internal registers, which need to be remapped (by using a simplified version of BRCM63xx ioremap.h). However, 0xfff80000 is a better address, since it also covers BCM3368, leaving the possibility to add it in the future. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> --- v4: no changes, resend v3: Use a hardcoded constant for is_bmips_internal_registers (BCM3368 base address) v2: Use a different approach for remapping internal registers arch/mips/bmips/setup.c | 10 +++++++++ arch/mips/include/asm/mach-bmips/ioremap.h | 33 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c index 3553528..38b5bd5 100644 --- a/arch/mips/bmips/setup.c +++ b/arch/mips/bmips/setup.c @@ -95,6 +95,15 @@ static void bcm6328_quirks(void) bcm63xx_fixup_cpu1(); } +static void bcm6358_quirks(void) +{ + /* + * BCM6358 needs special handling for its shared TLB, so + * disable SMP for now + */ + bmips_smp_enabled = 0; +} + static void bcm6368_quirks(void) { bcm63xx_fixup_cpu1(); @@ -104,6 +113,7 @@ static const struct bmips_quirk bmips_quirk_list[] = { { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, { "brcm,bcm6328", &bcm6328_quirks }, + { "brcm,bcm6358", &bcm6358_quirks }, { "brcm,bcm6368", &bcm6368_quirks }, { "brcm,bcm63168", &bcm6368_quirks }, { }, diff --git a/arch/mips/include/asm/mach-bmips/ioremap.h b/arch/mips/include/asm/mach-bmips/ioremap.h new file mode 100644 index 0000000..29c7a7b --- /dev/null +++ b/arch/mips/include/asm/mach-bmips/ioremap.h @@ -0,0 +1,33 @@ +#ifndef __ASM_MACH_BMIPS_IOREMAP_H +#define __ASM_MACH_BMIPS_IOREMAP_H + +#include <linux/types.h> + +static inline phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr, phys_addr_t size) +{ + return phys_addr; +} + +static inline int is_bmips_internal_registers(phys_addr_t offset) +{ + if (offset >= 0xfff80000) + return 1; + + return 0; +} + +static inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size, + unsigned long flags) +{ + if (is_bmips_internal_registers(offset)) + return (void __iomem *)offset; + + return NULL; +} + +static inline int plat_iounmap(const volatile void __iomem *addr) +{ + return is_bmips_internal_registers((unsigned long)addr); +} + +#endif /* __ASM_MACH_BMIPS_IOREMAP_H */ -- 2.1.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1459757353-14683-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* [PATCH v4 2/2] bmips: add device tree example for BCM6358 [not found] ` <1459757353-14683-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-04-04 8:09 ` Álvaro Fernández Rojas [not found] ` <1459757353-14683-2-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-04-09 10:56 ` [PATCH 1/2] bmips: add BCM6358 support Álvaro Fernández Rojas 1 sibling, 1 reply; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-04-04 8:09 UTC (permalink / raw) To: linux-mips-6z/3iImG2C8G8FEW9MqTrA, ralf-6z/3iImG2C8G8FEW9MqTrA, devicetree-u79uwXL29TY76Z2rM5mHXA, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w, robh-DgEjT+Ai2ygdnm+yROfE0A Cc: Álvaro Fernández Rojas This adds a device tree example for SFR Neufbox4 (Sercomm version), which also serves as a real example for brcm,bcm6358-leds. Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --- v4: Device tree improvements: - Switch to native-endian for syscon. - Switch to bcm6345-l1-intc interrupt controller. - Add ehci and ohci nodes. v3: Device tree fixes - Use interrupt-controller instead of periph_intc. - Use led@# instead of naming the LEDs. v2: Remove led0 alias and use stdout-path only .../devicetree/bindings/mips/brcm/soc.txt | 2 +- arch/mips/bmips/Kconfig | 4 + arch/mips/boot/dts/brcm/Makefile | 2 + arch/mips/boot/dts/brcm/bcm6358.dtsi | 130 +++++++++++++++++++++ arch/mips/boot/dts/brcm/bcm96358nb4ser.dts | 46 ++++++++ 5 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 arch/mips/boot/dts/brcm/bcm6358.dtsi create mode 100644 arch/mips/boot/dts/brcm/bcm96358nb4ser.dts diff --git a/Documentation/devicetree/bindings/mips/brcm/soc.txt b/Documentation/devicetree/bindings/mips/brcm/soc.txt index 7bab90c..e58a4f6 100644 --- a/Documentation/devicetree/bindings/mips/brcm/soc.txt +++ b/Documentation/devicetree/bindings/mips/brcm/soc.txt @@ -4,7 +4,7 @@ Required properties: - compatible: "brcm,bcm3384", "brcm,bcm33843" "brcm,bcm3384-viper", "brcm,bcm33843-viper" - "brcm,bcm6328", "brcm,bcm6368", + "brcm,bcm6328", "brcm,bcm6358", "brcm,bcm6368", "brcm,bcm7125", "brcm,bcm7346", "brcm,bcm7358", "brcm,bcm7360", "brcm,bcm7362", "brcm,bcm7420", "brcm,bcm7425" diff --git a/arch/mips/bmips/Kconfig b/arch/mips/bmips/Kconfig index e2c4fd6..264328d 100644 --- a/arch/mips/bmips/Kconfig +++ b/arch/mips/bmips/Kconfig @@ -21,6 +21,10 @@ config DT_BCM93384WVG_VIPER bool "BCM93384WVG Viper CPU (EXPERIMENTAL)" select BUILTIN_DTB +config DT_BCM96358NB4SER + bool "BCM96358NB4SER" + select BUILTIN_DTB + config DT_BCM96368MVWG bool "BCM96368MVWG" select BUILTIN_DTB diff --git a/arch/mips/boot/dts/brcm/Makefile b/arch/mips/boot/dts/brcm/Makefile index eabeb60..fda9d38 100644 --- a/arch/mips/boot/dts/brcm/Makefile +++ b/arch/mips/boot/dts/brcm/Makefile @@ -1,5 +1,6 @@ dtb-$(CONFIG_DT_BCM93384WVG) += bcm93384wvg.dtb dtb-$(CONFIG_DT_BCM93384WVG_VIPER) += bcm93384wvg_viper.dtb +dtb-$(CONFIG_DT_BCM96358NB4SER) += bcm96358nb4ser.dtb dtb-$(CONFIG_DT_BCM96368MVWG) += bcm96368mvwg.dtb dtb-$(CONFIG_DT_BCM9EJTAGPRB) += bcm9ejtagprb.dtb dtb-$(CONFIG_DT_BCM97125CBMB) += bcm97125cbmb.dtb @@ -14,6 +15,7 @@ dtb-$(CONFIG_DT_BCM97435SVMB) += bcm97435svmb.dtb dtb-$(CONFIG_DT_NONE) += \ bcm93384wvg.dtb \ bcm93384wvg_viper.dtb \ + bcm96358nb4ser.dtb \ bcm96368mvwg.dtb \ bcm9ejtagprb.dtb \ bcm97125cbmb.dtb \ diff --git a/arch/mips/boot/dts/brcm/bcm6358.dtsi b/arch/mips/boot/dts/brcm/bcm6358.dtsi new file mode 100644 index 0000000..5dc8432 --- /dev/null +++ b/arch/mips/boot/dts/brcm/bcm6358.dtsi @@ -0,0 +1,130 @@ +/ { + #address-cells = <1>; + #size-cells = <1>; + compatible = "brcm,bcm6358"; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + mips-hpt-frequency = <150000000>; + + cpu@0 { + compatible = "brcm,bmips4350"; + device_type = "cpu"; + reg = <0>; + }; + + cpu@1 { + compatible = "brcm,bmips4350"; + device_type = "cpu"; + reg = <1>; + }; + }; + + clocks { + periph_clk: periph_clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <50000000>; + }; + }; + + aliases { + uart0 = &uart0; + uart1 = &uart1; + }; + + cpu_intc: cpu_intc { + #address-cells = <0>; + compatible = "mti,cpu-interrupt-controller"; + + interrupt-controller; + #interrupt-cells = <1>; + }; + + ubus { + #address-cells = <1>; + #size-cells = <1>; + + compatible = "simple-bus"; + ranges; + + periph_cntl: syscon@fffe0000 { + compatible = "syscon"; + reg = <0xfffe0000 0xc>; + native-endian; + }; + + reboot: syscon-reboot@fffe0008 { + compatible = "syscon-reboot"; + regmap = <&periph_cntl>; + offset = <0x8>; + mask = <0x1>; + }; + + periph_intc: interrupt-controller@fffe000c { + compatible = "brcm,bcm6345-l1-intc"; + reg = <0xfffe000c 0x8>, + <0xfffe0038 0x8>; + + interrupt-controller; + #interrupt-cells = <1>; + + interrupt-parent = <&cpu_intc>; + interrupts = <2>, <3>; + }; + + leds0: led-controller@fffe00d0 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "brcm,bcm6358-leds"; + reg = <0xfffe00d0 0x8>; + + status = "disabled"; + }; + + uart0: serial@fffe0100 { + compatible = "brcm,bcm6345-uart"; + reg = <0xfffe0100 0x18>; + + interrupt-parent = <&periph_intc>; + interrupts = <2>; + + clocks = <&periph_clk>; + + status = "disabled"; + }; + + uart1: serial@fffe0120 { + compatible = "brcm,bcm6345-uart"; + reg = <0xfffe0120 0x18>; + + interrupt-parent = <&periph_intc>; + interrupts = <3>; + + clocks = <&periph_clk>; + + status = "disabled"; + }; + + ehci0: usb@fffe1300 { + compatible = "brcm,bcm6358-ehci", "generic-ehci"; + reg = <0xfffe1300 0x100>; + big-endian; + interrupt-parent = <&periph_intc>; + interrupts = <10>; + status = "disabled"; + }; + + ohci0: usb@fffe1400 { + compatible = "brcm,bcm6358-ohci", "generic-ohci"; + reg = <0xfffe1400 0x100>; + big-endian; + no-big-frame-no; + interrupt-parent = <&periph_intc>; + interrupts = <5>; + status = "disabled"; + }; + }; +}; diff --git a/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts b/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts new file mode 100644 index 0000000..f412117 --- /dev/null +++ b/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts @@ -0,0 +1,46 @@ +/dts-v1/; + +/include/ "bcm6358.dtsi" + +/ { + compatible = "sfr,nb4-ser", "brcm,bcm6358"; + model = "SFR Neufbox 4 (Sercomm)"; + + memory@0 { + device_type = "memory"; + reg = <0x00000000 0x02000000>; + }; + + chosen { + stdout-path = &uart0; + }; +}; + +&leds0 { + status = "ok"; + + led@0 { + reg = <0>; + active-low; + label = "nb4-ser:white:alarm"; + }; + led@2 { + reg = <2>; + active-low; + label = "nb4-ser:white:tv"; + }; + led@3 { + reg = <3>; + active-low; + label = "nb4-ser:white:tel"; + }; + led@4 { + reg = <4>; + active-low; + label = "nb4-ser:white:adsl"; + }; +}; + +&uart0 { + status = "okay"; +}; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1459757353-14683-2-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v4 2/2] bmips: add device tree example for BCM6358 [not found] ` <1459757353-14683-2-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-04-07 17:57 ` Rob Herring 0 siblings, 0 replies; 17+ messages in thread From: Rob Herring @ 2016-04-07 17:57 UTC (permalink / raw) To: Álvaro Fernández Rojas Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA, ralf-6z/3iImG2C8G8FEW9MqTrA, devicetree-u79uwXL29TY76Z2rM5mHXA, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w On Mon, Apr 04, 2016 at 10:09:13AM +0200, Álvaro Fernández Rojas wrote: > This adds a device tree example for SFR Neufbox4 (Sercomm version), which > also serves as a real example for brcm,bcm6358-leds. > > Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > v4: Device tree improvements: > - Switch to native-endian for syscon. > - Switch to bcm6345-l1-intc interrupt controller. > - Add ehci and ohci nodes. > v3: Device tree fixes > - Use interrupt-controller instead of periph_intc. > - Use led@# instead of naming the LEDs. > v2: Remove led0 alias and use stdout-path only > > .../devicetree/bindings/mips/brcm/soc.txt | 2 +- > arch/mips/bmips/Kconfig | 4 + > arch/mips/boot/dts/brcm/Makefile | 2 + > arch/mips/boot/dts/brcm/bcm6358.dtsi | 130 +++++++++++++++++++++ > arch/mips/boot/dts/brcm/bcm96358nb4ser.dts | 46 ++++++++ > 5 files changed, 183 insertions(+), 1 deletion(-) > create mode 100644 arch/mips/boot/dts/brcm/bcm6358.dtsi > create mode 100644 arch/mips/boot/dts/brcm/bcm96358nb4ser.dts > > diff --git a/Documentation/devicetree/bindings/mips/brcm/soc.txt b/Documentation/devicetree/bindings/mips/brcm/soc.txt > index 7bab90c..e58a4f6 100644 > --- a/Documentation/devicetree/bindings/mips/brcm/soc.txt > +++ b/Documentation/devicetree/bindings/mips/brcm/soc.txt > @@ -4,7 +4,7 @@ Required properties: > > - compatible: "brcm,bcm3384", "brcm,bcm33843" > "brcm,bcm3384-viper", "brcm,bcm33843-viper" > - "brcm,bcm6328", "brcm,bcm6368", > + "brcm,bcm6328", "brcm,bcm6358", "brcm,bcm6368", > "brcm,bcm7125", "brcm,bcm7346", "brcm,bcm7358", "brcm,bcm7360", > "brcm,bcm7362", "brcm,bcm7420", "brcm,bcm7425" > > diff --git a/arch/mips/bmips/Kconfig b/arch/mips/bmips/Kconfig > index e2c4fd6..264328d 100644 > --- a/arch/mips/bmips/Kconfig > +++ b/arch/mips/bmips/Kconfig > @@ -21,6 +21,10 @@ config DT_BCM93384WVG_VIPER > bool "BCM93384WVG Viper CPU (EXPERIMENTAL)" > select BUILTIN_DTB > > +config DT_BCM96358NB4SER > + bool "BCM96358NB4SER" > + select BUILTIN_DTB > + > config DT_BCM96368MVWG > bool "BCM96368MVWG" > select BUILTIN_DTB > diff --git a/arch/mips/boot/dts/brcm/Makefile b/arch/mips/boot/dts/brcm/Makefile > index eabeb60..fda9d38 100644 > --- a/arch/mips/boot/dts/brcm/Makefile > +++ b/arch/mips/boot/dts/brcm/Makefile > @@ -1,5 +1,6 @@ > dtb-$(CONFIG_DT_BCM93384WVG) += bcm93384wvg.dtb > dtb-$(CONFIG_DT_BCM93384WVG_VIPER) += bcm93384wvg_viper.dtb > +dtb-$(CONFIG_DT_BCM96358NB4SER) += bcm96358nb4ser.dtb > dtb-$(CONFIG_DT_BCM96368MVWG) += bcm96368mvwg.dtb > dtb-$(CONFIG_DT_BCM9EJTAGPRB) += bcm9ejtagprb.dtb > dtb-$(CONFIG_DT_BCM97125CBMB) += bcm97125cbmb.dtb > @@ -14,6 +15,7 @@ dtb-$(CONFIG_DT_BCM97435SVMB) += bcm97435svmb.dtb > dtb-$(CONFIG_DT_NONE) += \ > bcm93384wvg.dtb \ > bcm93384wvg_viper.dtb \ > + bcm96358nb4ser.dtb \ > bcm96368mvwg.dtb \ > bcm9ejtagprb.dtb \ > bcm97125cbmb.dtb \ > diff --git a/arch/mips/boot/dts/brcm/bcm6358.dtsi b/arch/mips/boot/dts/brcm/bcm6358.dtsi > new file mode 100644 > index 0000000..5dc8432 > --- /dev/null > +++ b/arch/mips/boot/dts/brcm/bcm6358.dtsi > @@ -0,0 +1,130 @@ > +/ { > + #address-cells = <1>; > + #size-cells = <1>; > + compatible = "brcm,bcm6358"; > + > + cpus { > + #address-cells = <1>; > + #size-cells = <0>; > + > + mips-hpt-frequency = <150000000>; I guess this is already defined for MIPS, but there is a generic timer freq property defined in ePAPR. > + > + cpu@0 { > + compatible = "brcm,bmips4350"; > + device_type = "cpu"; > + reg = <0>; > + }; > + > + cpu@1 { > + compatible = "brcm,bmips4350"; > + device_type = "cpu"; > + reg = <1>; > + }; > + }; > + > + clocks { > + periph_clk: periph_clk { No underscores in node names. > + compatible = "fixed-clock"; > + #clock-cells = <0>; > + clock-frequency = <50000000>; > + }; > + }; > + > + aliases { > + uart0 = &uart0; > + uart1 = &uart1; Alias names should be serialN. > + }; > + > + cpu_intc: cpu_intc { This should also be "interrupt-controller". > + #address-cells = <0>; > + compatible = "mti,cpu-interrupt-controller"; > + > + interrupt-controller; > + #interrupt-cells = <1>; > + }; > + > + ubus { > + #address-cells = <1>; > + #size-cells = <1>; > + > + compatible = "simple-bus"; > + ranges; Would be preferred to limit this to 0xfffe0000 (or appropriate range) if in fact all peripherals fall within this range. > + > + periph_cntl: syscon@fffe0000 { > + compatible = "syscon"; > + reg = <0xfffe0000 0xc>; > + native-endian; > + }; > + > + reboot: syscon-reboot@fffe0008 { > + compatible = "syscon-reboot"; > + regmap = <&periph_cntl>; > + offset = <0x8>; > + mask = <0x1>; > + }; > + > + periph_intc: interrupt-controller@fffe000c { > + compatible = "brcm,bcm6345-l1-intc"; > + reg = <0xfffe000c 0x8>, > + <0xfffe0038 0x8>; > + > + interrupt-controller; > + #interrupt-cells = <1>; > + > + interrupt-parent = <&cpu_intc>; > + interrupts = <2>, <3>; > + }; > + > + leds0: led-controller@fffe00d0 { > + #address-cells = <1>; > + #size-cells = <0>; > + compatible = "brcm,bcm6358-leds"; > + reg = <0xfffe00d0 0x8>; > + > + status = "disabled"; > + }; > + > + uart0: serial@fffe0100 { > + compatible = "brcm,bcm6345-uart"; > + reg = <0xfffe0100 0x18>; > + > + interrupt-parent = <&periph_intc>; > + interrupts = <2>; > + > + clocks = <&periph_clk>; > + > + status = "disabled"; > + }; > + > + uart1: serial@fffe0120 { > + compatible = "brcm,bcm6345-uart"; > + reg = <0xfffe0120 0x18>; > + > + interrupt-parent = <&periph_intc>; > + interrupts = <3>; > + > + clocks = <&periph_clk>; > + > + status = "disabled"; > + }; > + > + ehci0: usb@fffe1300 { Why the numbering? Is there more than 1 EHCI? > + compatible = "brcm,bcm6358-ehci", "generic-ehci"; Is this documented? > + reg = <0xfffe1300 0x100>; > + big-endian; > + interrupt-parent = <&periph_intc>; > + interrupts = <10>; > + status = "disabled"; > + }; > + > + ohci0: usb@fffe1400 { More than 1 OHCI? > + compatible = "brcm,bcm6358-ohci", "generic-ohci"; Is this documented? > + reg = <0xfffe1400 0x100>; > + big-endian; > + no-big-frame-no; > + interrupt-parent = <&periph_intc>; > + interrupts = <5>; > + status = "disabled"; > + }; > + }; > +}; > diff --git a/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts b/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts > new file mode 100644 > index 0000000..f412117 > --- /dev/null > +++ b/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts > @@ -0,0 +1,46 @@ > +/dts-v1/; > + > +/include/ "bcm6358.dtsi" > + > +/ { > + compatible = "sfr,nb4-ser", "brcm,bcm6358"; Is sfr,nb4-ser documented? > + model = "SFR Neufbox 4 (Sercomm)"; > + > + memory@0 { > + device_type = "memory"; > + reg = <0x00000000 0x02000000>; > + }; > + > + chosen { > + stdout-path = &uart0; > + }; > +}; > + > +&leds0 { > + status = "ok"; > + > + led@0 { > + reg = <0>; > + active-low; > + label = "nb4-ser:white:alarm"; > + }; > + led@2 { > + reg = <2>; > + active-low; > + label = "nb4-ser:white:tv"; > + }; > + led@3 { > + reg = <3>; > + active-low; > + label = "nb4-ser:white:tel"; > + }; > + led@4 { > + reg = <4>; > + active-low; > + label = "nb4-ser:white:adsl"; > + }; > +}; > + > +&uart0 { > + status = "okay"; > +}; > -- > 2.1.4 > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/2] bmips: add BCM6358 support [not found] ` <1459757353-14683-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-04-04 8:09 ` [PATCH v4 2/2] bmips: add device tree example for BCM6358 Álvaro Fernández Rojas @ 2016-04-09 10:56 ` Álvaro Fernández Rojas 2016-04-09 10:56 ` [PATCH 2/2] bmips: add device tree example for BCM6358 Álvaro Fernández Rojas 1 sibling, 1 reply; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-04-09 10:56 UTC (permalink / raw) To: linux-mips-6z/3iImG2C8G8FEW9MqTrA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, ralf-6z/3iImG2C8G8FEW9MqTrA, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w, robh-DgEjT+Ai2ygdnm+yROfE0A, simon-A6De1vDTPLDsq35pWSNszA Cc: Álvaro Fernández Rojas BCM6358 has a shared TLB which conflicts with current SMP support, so it must be disabled for now. BCM6358 uses >= 0xfffe0000 addresses for internal registers, which need to be remapped (by using a simplified version of BRCM63xx ioremap.h). However, 0xfff80000 is a better address, since it also covers BCM3368, leaving the possibility to add it in the future. Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --- v5: no changes, resend v4: no changes, resend v3: Use a hardcoded constant for is_bmips_internal_registers (BCM3368 base address) v2: Use a different approach for remapping internal registers arch/mips/bmips/setup.c | 10 +++++++++ arch/mips/include/asm/mach-bmips/ioremap.h | 33 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c index 3553528..38b5bd5 100644 --- a/arch/mips/bmips/setup.c +++ b/arch/mips/bmips/setup.c @@ -95,6 +95,15 @@ static void bcm6328_quirks(void) bcm63xx_fixup_cpu1(); } +static void bcm6358_quirks(void) +{ + /* + * BCM6358 needs special handling for its shared TLB, so + * disable SMP for now + */ + bmips_smp_enabled = 0; +} + static void bcm6368_quirks(void) { bcm63xx_fixup_cpu1(); @@ -104,6 +113,7 @@ static const struct bmips_quirk bmips_quirk_list[] = { { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, { "brcm,bcm6328", &bcm6328_quirks }, + { "brcm,bcm6358", &bcm6358_quirks }, { "brcm,bcm6368", &bcm6368_quirks }, { "brcm,bcm63168", &bcm6368_quirks }, { }, diff --git a/arch/mips/include/asm/mach-bmips/ioremap.h b/arch/mips/include/asm/mach-bmips/ioremap.h new file mode 100644 index 0000000..29c7a7b --- /dev/null +++ b/arch/mips/include/asm/mach-bmips/ioremap.h @@ -0,0 +1,33 @@ +#ifndef __ASM_MACH_BMIPS_IOREMAP_H +#define __ASM_MACH_BMIPS_IOREMAP_H + +#include <linux/types.h> + +static inline phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr, phys_addr_t size) +{ + return phys_addr; +} + +static inline int is_bmips_internal_registers(phys_addr_t offset) +{ + if (offset >= 0xfff80000) + return 1; + + return 0; +} + +static inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size, + unsigned long flags) +{ + if (is_bmips_internal_registers(offset)) + return (void __iomem *)offset; + + return NULL; +} + +static inline int plat_iounmap(const volatile void __iomem *addr) +{ + return is_bmips_internal_registers((unsigned long)addr); +} + +#endif /* __ASM_MACH_BMIPS_IOREMAP_H */ -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 2/2] bmips: add device tree example for BCM6358 2016-04-09 10:56 ` [PATCH 1/2] bmips: add BCM6358 support Álvaro Fernández Rojas @ 2016-04-09 10:56 ` Álvaro Fernández Rojas [not found] ` <1460199408-18738-2-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-04-09 10:56 UTC (permalink / raw) To: linux-mips, linux-kernel, devicetree, ralf, f.fainelli, jogo, cernekee, robh, simon Cc: Álvaro Fernández Rojas This adds a device tree example for SFR Neufbox4 (Sercomm version), which also serves as a real example for brcm,bcm6358-leds. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> --- v5: more device tree improvements - There is just ohci/ehci node. - Avoid using underscores in node names. - Use interrupt-controller for cpu_intc. - Rename uart aliases to serial. v4: Device tree improvements: - Switch to native-endian for syscon. - Switch to bcm6345-l1-intc interrupt controller. - Add ehci and ohci nodes. v3: Device tree fixes - Use interrupt-controller instead of periph_intc. - Use led@# instead of naming the LEDs. v2: Remove led0 alias and use stdout-path only .../devicetree/bindings/mips/brcm/soc.txt | 2 +- arch/mips/bmips/Kconfig | 4 + arch/mips/boot/dts/brcm/Makefile | 2 + arch/mips/boot/dts/brcm/bcm6358.dtsi | 130 +++++++++++++++++++++ arch/mips/boot/dts/brcm/bcm96358nb4ser.dts | 46 ++++++++ 5 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 arch/mips/boot/dts/brcm/bcm6358.dtsi create mode 100644 arch/mips/boot/dts/brcm/bcm96358nb4ser.dts diff --git a/Documentation/devicetree/bindings/mips/brcm/soc.txt b/Documentation/devicetree/bindings/mips/brcm/soc.txt index 7bab90c..e58a4f6 100644 --- a/Documentation/devicetree/bindings/mips/brcm/soc.txt +++ b/Documentation/devicetree/bindings/mips/brcm/soc.txt @@ -4,7 +4,7 @@ Required properties: - compatible: "brcm,bcm3384", "brcm,bcm33843" "brcm,bcm3384-viper", "brcm,bcm33843-viper" - "brcm,bcm6328", "brcm,bcm6368", + "brcm,bcm6328", "brcm,bcm6358", "brcm,bcm6368", "brcm,bcm7125", "brcm,bcm7346", "brcm,bcm7358", "brcm,bcm7360", "brcm,bcm7362", "brcm,bcm7420", "brcm,bcm7425" diff --git a/arch/mips/bmips/Kconfig b/arch/mips/bmips/Kconfig index e2c4fd6..264328d 100644 --- a/arch/mips/bmips/Kconfig +++ b/arch/mips/bmips/Kconfig @@ -21,6 +21,10 @@ config DT_BCM93384WVG_VIPER bool "BCM93384WVG Viper CPU (EXPERIMENTAL)" select BUILTIN_DTB +config DT_BCM96358NB4SER + bool "BCM96358NB4SER" + select BUILTIN_DTB + config DT_BCM96368MVWG bool "BCM96368MVWG" select BUILTIN_DTB diff --git a/arch/mips/boot/dts/brcm/Makefile b/arch/mips/boot/dts/brcm/Makefile index eabeb60..fda9d38 100644 --- a/arch/mips/boot/dts/brcm/Makefile +++ b/arch/mips/boot/dts/brcm/Makefile @@ -1,5 +1,6 @@ dtb-$(CONFIG_DT_BCM93384WVG) += bcm93384wvg.dtb dtb-$(CONFIG_DT_BCM93384WVG_VIPER) += bcm93384wvg_viper.dtb +dtb-$(CONFIG_DT_BCM96358NB4SER) += bcm96358nb4ser.dtb dtb-$(CONFIG_DT_BCM96368MVWG) += bcm96368mvwg.dtb dtb-$(CONFIG_DT_BCM9EJTAGPRB) += bcm9ejtagprb.dtb dtb-$(CONFIG_DT_BCM97125CBMB) += bcm97125cbmb.dtb @@ -14,6 +15,7 @@ dtb-$(CONFIG_DT_BCM97435SVMB) += bcm97435svmb.dtb dtb-$(CONFIG_DT_NONE) += \ bcm93384wvg.dtb \ bcm93384wvg_viper.dtb \ + bcm96358nb4ser.dtb \ bcm96368mvwg.dtb \ bcm9ejtagprb.dtb \ bcm97125cbmb.dtb \ diff --git a/arch/mips/boot/dts/brcm/bcm6358.dtsi b/arch/mips/boot/dts/brcm/bcm6358.dtsi new file mode 100644 index 0000000..f9d8d39 --- /dev/null +++ b/arch/mips/boot/dts/brcm/bcm6358.dtsi @@ -0,0 +1,130 @@ +/ { + #address-cells = <1>; + #size-cells = <1>; + compatible = "brcm,bcm6358"; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + mips-hpt-frequency = <150000000>; + + cpu@0 { + compatible = "brcm,bmips4350"; + device_type = "cpu"; + reg = <0>; + }; + + cpu@1 { + compatible = "brcm,bmips4350"; + device_type = "cpu"; + reg = <1>; + }; + }; + + clocks { + periph_clk: periph-clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <50000000>; + }; + }; + + aliases { + serial0 = &uart0; + serial1 = &uart1; + }; + + cpu_intc: interrupt-controller { + #address-cells = <0>; + compatible = "mti,cpu-interrupt-controller"; + + interrupt-controller; + #interrupt-cells = <1>; + }; + + ubus { + #address-cells = <1>; + #size-cells = <1>; + + compatible = "simple-bus"; + ranges; + + periph_cntl: syscon@fffe0000 { + compatible = "syscon"; + reg = <0xfffe0000 0xc>; + native-endian; + }; + + reboot: syscon-reboot@fffe0008 { + compatible = "syscon-reboot"; + regmap = <&periph_cntl>; + offset = <0x8>; + mask = <0x1>; + }; + + periph_intc: interrupt-controller@fffe000c { + compatible = "brcm,bcm6345-l1-intc"; + reg = <0xfffe000c 0x8>, + <0xfffe0038 0x8>; + + interrupt-controller; + #interrupt-cells = <1>; + + interrupt-parent = <&cpu_intc>; + interrupts = <2>, <3>; + }; + + leds0: led-controller@fffe00d0 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "brcm,bcm6358-leds"; + reg = <0xfffe00d0 0x8>; + + status = "disabled"; + }; + + uart0: serial@fffe0100 { + compatible = "brcm,bcm6345-uart"; + reg = <0xfffe0100 0x18>; + + interrupt-parent = <&periph_intc>; + interrupts = <2>; + + clocks = <&periph_clk>; + + status = "disabled"; + }; + + uart1: serial@fffe0120 { + compatible = "brcm,bcm6345-uart"; + reg = <0xfffe0120 0x18>; + + interrupt-parent = <&periph_intc>; + interrupts = <3>; + + clocks = <&periph_clk>; + + status = "disabled"; + }; + + ehci: usb@fffe1300 { + compatible = "brcm,bcm6358-ehci", "generic-ehci"; + reg = <0xfffe1300 0x100>; + big-endian; + interrupt-parent = <&periph_intc>; + interrupts = <10>; + status = "disabled"; + }; + + ohci: usb@fffe1400 { + compatible = "brcm,bcm6358-ohci", "generic-ohci"; + reg = <0xfffe1400 0x100>; + big-endian; + no-big-frame-no; + interrupt-parent = <&periph_intc>; + interrupts = <5>; + status = "disabled"; + }; + }; +}; diff --git a/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts b/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts new file mode 100644 index 0000000..f412117 --- /dev/null +++ b/arch/mips/boot/dts/brcm/bcm96358nb4ser.dts @@ -0,0 +1,46 @@ +/dts-v1/; + +/include/ "bcm6358.dtsi" + +/ { + compatible = "sfr,nb4-ser", "brcm,bcm6358"; + model = "SFR Neufbox 4 (Sercomm)"; + + memory@0 { + device_type = "memory"; + reg = <0x00000000 0x02000000>; + }; + + chosen { + stdout-path = &uart0; + }; +}; + +&leds0 { + status = "ok"; + + led@0 { + reg = <0>; + active-low; + label = "nb4-ser:white:alarm"; + }; + led@2 { + reg = <2>; + active-low; + label = "nb4-ser:white:tv"; + }; + led@3 { + reg = <3>; + active-low; + label = "nb4-ser:white:tel"; + }; + led@4 { + reg = <4>; + active-low; + label = "nb4-ser:white:adsl"; + }; +}; + +&uart0 { + status = "okay"; +}; -- 2.1.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1460199408-18738-2-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 2/2] bmips: add device tree example for BCM6358 [not found] ` <1460199408-18738-2-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-04-11 19:33 ` Rob Herring 0 siblings, 0 replies; 17+ messages in thread From: Rob Herring @ 2016-04-11 19:33 UTC (permalink / raw) To: Álvaro Fernández Rojas Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, ralf-6z/3iImG2C8G8FEW9MqTrA, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w, simon-A6De1vDTPLDsq35pWSNszA On Sat, Apr 09, 2016 at 12:56:48PM +0200, Álvaro Fernández Rojas wrote: > This adds a device tree example for SFR Neufbox4 (Sercomm version), which > also serves as a real example for brcm,bcm6358-leds. > > Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > v5: more device tree improvements > - There is just ohci/ehci node. > - Avoid using underscores in node names. > - Use interrupt-controller for cpu_intc. > - Rename uart aliases to serial. > v4: Device tree improvements: > - Switch to native-endian for syscon. > - Switch to bcm6345-l1-intc interrupt controller. > - Add ehci and ohci nodes. > v3: Device tree fixes > - Use interrupt-controller instead of periph_intc. > - Use led@# instead of naming the LEDs. > v2: Remove led0 alias and use stdout-path only > > .../devicetree/bindings/mips/brcm/soc.txt | 2 +- > arch/mips/bmips/Kconfig | 4 + > arch/mips/boot/dts/brcm/Makefile | 2 + > arch/mips/boot/dts/brcm/bcm6358.dtsi | 130 +++++++++++++++++++++ > arch/mips/boot/dts/brcm/bcm96358nb4ser.dts | 46 ++++++++ > 5 files changed, 183 insertions(+), 1 deletion(-) > create mode 100644 arch/mips/boot/dts/brcm/bcm6358.dtsi > create mode 100644 arch/mips/boot/dts/brcm/bcm96358nb4ser.dts Acked-by: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/2] bmips: add BCM6358 support @ 2016-01-17 11:28 Álvaro Fernández Rojas [not found] ` <1453030101-14794-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-01-17 11:28 UTC (permalink / raw) To: linux-mips, ralf, linux-kernel, devicetree, f.fainelli, jogo, cernekee Cc: Álvaro Fernández Rojas BCM6358 has a shared TLB which conflicts with current SMP support, so it must be disabled for now. BCM6358 uses >= 0xfff00000 addresses for internal registers, which need to be remapped (by using a simplified version of BRCM63xx ioremap.h). Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> --- arch/mips/bmips/setup.c | 10 +++++++++ arch/mips/include/asm/mach-bmips/ioremap.h | 33 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c index 3553528..38b5bd5 100644 --- a/arch/mips/bmips/setup.c +++ b/arch/mips/bmips/setup.c @@ -95,6 +95,15 @@ static void bcm6328_quirks(void) bcm63xx_fixup_cpu1(); } +static void bcm6358_quirks(void) +{ + /* + * BCM6358 needs special handling for its shared TLB, so + * disable SMP for now + */ + bmips_smp_enabled = 0; +} + static void bcm6368_quirks(void) { bcm63xx_fixup_cpu1(); @@ -104,6 +113,7 @@ static const struct bmips_quirk bmips_quirk_list[] = { { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, { "brcm,bcm6328", &bcm6328_quirks }, + { "brcm,bcm6358", &bcm6358_quirks }, { "brcm,bcm6368", &bcm6368_quirks }, { "brcm,bcm63168", &bcm6368_quirks }, { }, diff --git a/arch/mips/include/asm/mach-bmips/ioremap.h b/arch/mips/include/asm/mach-bmips/ioremap.h new file mode 100644 index 0000000..b1a75f8 --- /dev/null +++ b/arch/mips/include/asm/mach-bmips/ioremap.h @@ -0,0 +1,33 @@ +#ifndef __ASM_MACH_BMIPS_IOREMAP_H +#define __ASM_MACH_BMIPS_IOREMAP_H + +#include <linux/types.h> + +static inline phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr, phys_addr_t size) +{ + return phys_addr; +} + +static inline int is_bmips_internal_registers(phys_addr_t offset) +{ + if (offset >= 0xfff00000) + return 1; + + return 0; +} + +static inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size, + unsigned long flags) +{ + if (is_bmips_internal_registers(offset)) + return (void __iomem *)offset; + + return NULL; +} + +static inline int plat_iounmap(const volatile void __iomem *addr) +{ + return is_bmips_internal_registers((unsigned long)addr); +} + +#endif /* __ASM_MACH_BMIPS_IOREMAP_H */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1453030101-14794-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 1/2] bmips: add BCM6358 support [not found] ` <1453030101-14794-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-01-18 6:49 ` Florian Fainelli [not found] ` <0BC6030C-7485-4193-B86D-E690BF673952-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Florian Fainelli @ 2016-01-18 6:49 UTC (permalink / raw) To: Álvaro Fernández Rojas, linux-mips-6z/3iImG2C8G8FEW9MqTrA, ralf-6z/3iImG2C8G8FEW9MqTrA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w On January 17, 2016 3:28:20 AM PST, "Álvaro Fernández Rojas" <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >BCM6358 has a shared TLB which conflicts with current SMP support, so >it must >be disabled for now. >BCM6358 uses >= 0xfff00000 addresses for internal registers, which need >to be >remapped (by using a simplified version of BRCM63xx ioremap.h). > >Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >--- > arch/mips/bmips/setup.c | 10 +++++++++ >arch/mips/include/asm/mach-bmips/ioremap.h | 33 >++++++++++++++++++++++++++++++ > 2 files changed, 43 insertions(+) > create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h > >diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c >index 3553528..38b5bd5 100644 >--- a/arch/mips/bmips/setup.c >+++ b/arch/mips/bmips/setup.c >@@ -95,6 +95,15 @@ static void bcm6328_quirks(void) > bcm63xx_fixup_cpu1(); > } > >+static void bcm6358_quirks(void) >+{ >+ /* >+ * BCM6358 needs special handling for its shared TLB, so >+ * disable SMP for now >+ */ >+ bmips_smp_enabled = 0; >+} That part looks good. >+ > static void bcm6368_quirks(void) > { > bcm63xx_fixup_cpu1(); >@@ -104,6 +113,7 @@ static const struct bmips_quirk bmips_quirk_list[] >= { > { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, > { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, > { "brcm,bcm6328", &bcm6328_quirks }, >+ { "brcm,bcm6358", &bcm6358_quirks }, > { "brcm,bcm6368", &bcm6368_quirks }, > { "brcm,bcm63168", &bcm6368_quirks }, > { }, <snip> >+ >+static inline int is_bmips_internal_registers(phys_addr_t offset) >+{ >+ if (offset >= 0xfff00000) >+ return 1; >+ >+ return 0; That should probably be refined to be looking at the SoC/CPU you are running on, using eventually of_machine_is_compatible on the SoC-specific compatible string. For instance, on 6368 and newer, the physical register offset moves to PA 0x1000_0000. Thanks! -- Florian -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <0BC6030C-7485-4193-B86D-E690BF673952-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 1/2] bmips: add BCM6358 support [not found] ` <0BC6030C-7485-4193-B86D-E690BF673952-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-01-18 9:42 ` Álvaro Fernández Rojas 2016-01-18 13:35 ` Jonas Gorski ` (2 more replies) 0 siblings, 3 replies; 17+ messages in thread From: Álvaro Fernández Rojas @ 2016-01-18 9:42 UTC (permalink / raw) To: Florian Fainelli Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA, ralf-6z/3iImG2C8G8FEW9MqTrA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w I can refine it to support a custom offset for each cpu instead of a generic one, but defining a custom offset for new SoCs such as BCM6368 or BCM6328 would actually break them, since that way the address wouldn't be remapped to 0xb0000000. See: https://github.com/torvalds/linux/blob/master/arch/mips/include/asm/io.h#L213 In those CPUs the remapping is done automatically (from 0x10000000 to 0xb0000000), since the registers are located in the low 512MB of address space (0x1fffffffULL). However, the older CPUs such as BCM6358 (or BCM3368) need that custom ioremap, since those registers aren't located in the low 512MB of address space. If you want, I can do something like this: https://gist.github.com/Noltari/bc5fe029c52cf053a454 And after that we could add other CPUs such as the BCM3368, which needs a different offset: "{ "brcm,bcm3368", 0xfff80000 }" What do you think? Should we keep a generic offset (0xfff00000) or should we add SoC specific compatible strings with each custom offset? Regards, Álvaro. > El 18 ene 2016, a las 7:49, Florian Fainelli <f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió: > >> On January 17, 2016 3:28:20 AM PST, "Álvaro Fernández Rojas" <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> BCM6358 has a shared TLB which conflicts with current SMP support, so >> it must >> be disabled for now. >> BCM6358 uses >= 0xfff00000 addresses for internal registers, which need >> to be >> remapped (by using a simplified version of BRCM63xx ioremap.h). >> >> Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >> --- >> arch/mips/bmips/setup.c | 10 +++++++++ >> arch/mips/include/asm/mach-bmips/ioremap.h | 33 >> ++++++++++++++++++++++++++++++ >> 2 files changed, 43 insertions(+) >> create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h >> >> diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c >> index 3553528..38b5bd5 100644 >> --- a/arch/mips/bmips/setup.c >> +++ b/arch/mips/bmips/setup.c >> @@ -95,6 +95,15 @@ static void bcm6328_quirks(void) >> bcm63xx_fixup_cpu1(); >> } >> >> +static void bcm6358_quirks(void) >> +{ >> + /* >> + * BCM6358 needs special handling for its shared TLB, so >> + * disable SMP for now >> + */ >> + bmips_smp_enabled = 0; >> +} > > That part looks good. > >> + >> static void bcm6368_quirks(void) >> { >> bcm63xx_fixup_cpu1(); >> @@ -104,6 +113,7 @@ static const struct bmips_quirk bmips_quirk_list[] >> = { >> { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, >> { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, >> { "brcm,bcm6328", &bcm6328_quirks }, >> + { "brcm,bcm6358", &bcm6358_quirks }, >> { "brcm,bcm6368", &bcm6368_quirks }, >> { "brcm,bcm63168", &bcm6368_quirks }, >> { }, > > <snip> > >> + >> +static inline int is_bmips_internal_registers(phys_addr_t offset) >> +{ >> + if (offset >= 0xfff00000) >> + return 1; >> + >> + return 0; > > That should probably be refined to be looking at the SoC/CPU you are running on, using eventually of_machine_is_compatible on the SoC-specific compatible string. For instance, on 6368 and newer, the physical register offset moves to PA 0x1000_0000. > > Thanks! > > -- > Florian -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] bmips: add BCM6358 support 2016-01-18 9:42 ` Álvaro Fernández Rojas @ 2016-01-18 13:35 ` Jonas Gorski 2016-01-18 19:22 ` Florian Fainelli [not found] ` <BF36180D-DB32-42A5-AFF7-2B282F5A81DC-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2 siblings, 0 replies; 17+ messages in thread From: Jonas Gorski @ 2016-01-18 13:35 UTC (permalink / raw) To: Álvaro Fernández Rojas Cc: Florian Fainelli, MIPS Mailing List, Ralf Baechle, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Kevin Cernekee Hi, On 18 January 2016 at 10:42, Álvaro Fernández Rojas <noltari@gmail.com> wrote: > I can refine it to support a custom offset for each cpu instead of a generic one, but defining a custom offset for new SoCs such as BCM6368 or BCM6328 would actually break them, since that way the address wouldn't be remapped to 0xb0000000. > See: https://github.com/torvalds/linux/blob/master/arch/mips/include/asm/io.h#L213 > In those CPUs the remapping is done automatically (from 0x10000000 to 0xb0000000), since the registers are located in the low 512MB of address space (0x1fffffffULL). > > However, the older CPUs such as BCM6358 (or BCM3368) need that custom ioremap, since those registers aren't located in the low 512MB of address space. > If you want, I can do something like this: https://gist.github.com/Noltari/bc5fe029c52cf053a454 > And after that we could add other CPUs such as the BCM3368, which needs a different offset: "{ "brcm,bcm3368", 0xfff80000 }" > > What do you think? Should we keep a generic offset (0xfff00000) or should we add SoC specific compatible strings with each custom offset? How about using the arm approach [1] and adding support for registering static mappings? That way we avoid adding a custom plat_ioremap() and keep the amount of bmips code to a minimum. Jonas [1]: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ed8fd2186a4e4f3b98434093b56f9b793d48443e https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=101eeda38c0ab8a4f916176e325d9e036d981a24 ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] bmips: add BCM6358 support 2016-01-18 9:42 ` Álvaro Fernández Rojas 2016-01-18 13:35 ` Jonas Gorski @ 2016-01-18 19:22 ` Florian Fainelli [not found] ` <BF36180D-DB32-42A5-AFF7-2B282F5A81DC-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2 siblings, 0 replies; 17+ messages in thread From: Florian Fainelli @ 2016-01-18 19:22 UTC (permalink / raw) To: Álvaro Fernández Rojas Cc: linux-mips, ralf, linux-kernel, devicetree, jogo, cernekee (please don't top post) Le 18/01/2016 01:42, Álvaro Fernández Rojas a écrit : > I can refine it to support a custom offset for each cpu instead of a generic one, but defining a custom offset for new SoCs such as BCM6368 or BCM6328 would actually break them, since that way the address wouldn't be remapped to 0xb0000000. > See: https://github.com/torvalds/linux/blob/master/arch/mips/include/asm/io.h#L213 > In those CPUs the remapping is done automatically (from 0x10000000 to 0xb0000000), since the registers are located in the low 512MB of address space (0x1fffffffULL). These registers are always accessible AFAIR, either through KSEG3 (0xFF00_0000), or through KSEG1 (0xB000_0000) for newer SoCs, and in arch/mips/include/asm/io.h, the first thing we do is call plat_ioremap(), if the address returned is valid, we just bail out and do not execute the snippet you are indicating. > > However, the older CPUs such as BCM6358 (or BCM3368) need that custom ioremap, since those registers aren't located in the low 512MB of address space. > If you want, I can do something like this: https://gist.github.com/Noltari/bc5fe029c52cf053a454 > And after that we could add other CPUs such as the BCM3368, which needs a different offset: "{ "brcm,bcm3368", 0xfff80000 }" > > What do you think? Should we keep a generic offset (0xfff00000) or should we add SoC specific compatible strings with each custom offset? I would prefer we maintain the existing logic from arch/mips/include/asm/mach-bcm63xx/ioremap.h. If needed we could do this in a two level step, where plat_ioremap() calls a helper function, and this helper function has been scanning the Device Tree for the bus register space. Jonas' suggestion works too. > > Regards, > Álvaro. > >> El 18 ene 2016, a las 7:49, Florian Fainelli <f.fainelli@gmail.com> escribió: >> >>> On January 17, 2016 3:28:20 AM PST, "Álvaro Fernández Rojas" <noltari@gmail.com> wrote: >>> BCM6358 has a shared TLB which conflicts with current SMP support, so >>> it must >>> be disabled for now. >>> BCM6358 uses >= 0xfff00000 addresses for internal registers, which need >>> to be >>> remapped (by using a simplified version of BRCM63xx ioremap.h). >>> >>> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> >>> --- >>> arch/mips/bmips/setup.c | 10 +++++++++ >>> arch/mips/include/asm/mach-bmips/ioremap.h | 33 >>> ++++++++++++++++++++++++++++++ >>> 2 files changed, 43 insertions(+) >>> create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h >>> >>> diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c >>> index 3553528..38b5bd5 100644 >>> --- a/arch/mips/bmips/setup.c >>> +++ b/arch/mips/bmips/setup.c >>> @@ -95,6 +95,15 @@ static void bcm6328_quirks(void) >>> bcm63xx_fixup_cpu1(); >>> } >>> >>> +static void bcm6358_quirks(void) >>> +{ >>> + /* >>> + * BCM6358 needs special handling for its shared TLB, so >>> + * disable SMP for now >>> + */ >>> + bmips_smp_enabled = 0; >>> +} >> >> That part looks good. >> >>> + >>> static void bcm6368_quirks(void) >>> { >>> bcm63xx_fixup_cpu1(); >>> @@ -104,6 +113,7 @@ static const struct bmips_quirk bmips_quirk_list[] >>> = { >>> { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, >>> { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, >>> { "brcm,bcm6328", &bcm6328_quirks }, >>> + { "brcm,bcm6358", &bcm6358_quirks }, >>> { "brcm,bcm6368", &bcm6368_quirks }, >>> { "brcm,bcm63168", &bcm6368_quirks }, >>> { }, >> >> <snip> >> >>> + >>> +static inline int is_bmips_internal_registers(phys_addr_t offset) >>> +{ >>> + if (offset >= 0xfff00000) >>> + return 1; >>> + >>> + return 0; >> >> That should probably be refined to be looking at the SoC/CPU you are running on, using eventually of_machine_is_compatible on the SoC-specific compatible string. For instance, on 6368 and newer, the physical register offset moves to PA 0x1000_0000. >> >> Thanks! >> >> -- >> Florian -- Florian ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <BF36180D-DB32-42A5-AFF7-2B282F5A81DC-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 1/2] bmips: add BCM6358 support [not found] ` <BF36180D-DB32-42A5-AFF7-2B282F5A81DC-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-01-19 0:03 ` Florian Fainelli 0 siblings, 0 replies; 17+ messages in thread From: Florian Fainelli @ 2016-01-19 0:03 UTC (permalink / raw) To: Álvaro Fernández Rojas Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA, ralf-6z/3iImG2C8G8FEW9MqTrA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, jogo-p3rKhJxN3npAfugRpC6u6w, cernekee-Re5JQEeQqe8AvxtiuMwx3w Le 18/01/2016 01:42, Álvaro Fernández Rojas a écrit : > I can refine it to support a custom offset for each cpu instead of a generic one, but defining a custom offset for new SoCs such as BCM6368 or BCM6328 would actually break them, since that way the address wouldn't be remapped to 0xb0000000. > See: https://github.com/torvalds/linux/blob/master/arch/mips/include/asm/io.h#L213 > In those CPUs the remapping is done automatically (from 0x10000000 to 0xb0000000), since the registers are located in the low 512MB of address space (0x1fffffffULL). I see what you mean by that now, we can indeed drop these registers from plat_ioremap() since the fallback already takes care of that for us. > > However, the older CPUs such as BCM6358 (or BCM3368) need that custom ioremap, since those registers aren't located in the low 512MB of address space. > If you want, I can do something like this: https://gist.github.com/Noltari/bc5fe029c52cf053a454 > And after that we could add other CPUs such as the BCM3368, which needs a different offset: "{ "brcm,bcm3368", 0xfff80000 }" > > What do you think? Should we keep a generic offset (0xfff00000) or should we add SoC specific compatible strings with each custom offset? > > Regards, > Álvaro. > >> El 18 ene 2016, a las 7:49, Florian Fainelli <f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió: >> >>> On January 17, 2016 3:28:20 AM PST, "Álvaro Fernández Rojas" <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >>> BCM6358 has a shared TLB which conflicts with current SMP support, so >>> it must >>> be disabled for now. >>> BCM6358 uses >= 0xfff00000 addresses for internal registers, which need >>> to be >>> remapped (by using a simplified version of BRCM63xx ioremap.h). >>> >>> Signed-off-by: Álvaro Fernández Rojas <noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >>> --- >>> arch/mips/bmips/setup.c | 10 +++++++++ >>> arch/mips/include/asm/mach-bmips/ioremap.h | 33 >>> ++++++++++++++++++++++++++++++ >>> 2 files changed, 43 insertions(+) >>> create mode 100644 arch/mips/include/asm/mach-bmips/ioremap.h >>> >>> diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c >>> index 3553528..38b5bd5 100644 >>> --- a/arch/mips/bmips/setup.c >>> +++ b/arch/mips/bmips/setup.c >>> @@ -95,6 +95,15 @@ static void bcm6328_quirks(void) >>> bcm63xx_fixup_cpu1(); >>> } >>> >>> +static void bcm6358_quirks(void) >>> +{ >>> + /* >>> + * BCM6358 needs special handling for its shared TLB, so >>> + * disable SMP for now >>> + */ >>> + bmips_smp_enabled = 0; >>> +} >> >> That part looks good. >> >>> + >>> static void bcm6368_quirks(void) >>> { >>> bcm63xx_fixup_cpu1(); >>> @@ -104,6 +113,7 @@ static const struct bmips_quirk bmips_quirk_list[] >>> = { >>> { "brcm,bcm3384-viper", &bcm3384_viper_quirks }, >>> { "brcm,bcm33843-viper", &bcm3384_viper_quirks }, >>> { "brcm,bcm6328", &bcm6328_quirks }, >>> + { "brcm,bcm6358", &bcm6358_quirks }, >>> { "brcm,bcm6368", &bcm6368_quirks }, >>> { "brcm,bcm63168", &bcm6368_quirks }, >>> { }, >> >> <snip> >> >>> + >>> +static inline int is_bmips_internal_registers(phys_addr_t offset) >>> +{ >>> + if (offset >= 0xfff00000) >>> + return 1; >>> + >>> + return 0; >> >> That should probably be refined to be looking at the SoC/CPU you are running on, using eventually of_machine_is_compatible on the SoC-specific compatible string. For instance, on 6368 and newer, the physical register offset moves to PA 0x1000_0000. >> >> Thanks! >> >> -- >> Florian -- Florian -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2016-04-11 19:33 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-02-21 11:41 [PATCH v2 1/2] bmips: add BCM6358 support Álvaro Fernández Rojas [not found] ` <1456054881-26787-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-03-03 20:09 ` Florian Fainelli 2016-04-03 9:56 ` [PATCH v3 " Álvaro Fernández Rojas [not found] ` <1459677376-10449-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-04-03 9:56 ` [PATCH v3 2/2] bmips: add device tree example for BCM6358 Álvaro Fernández Rojas 2016-04-04 5:16 ` Rob Herring 2016-04-04 8:09 ` [PATCH v4 1/2] bmips: add BCM6358 support Álvaro Fernández Rojas [not found] ` <1459757353-14683-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-04-04 8:09 ` [PATCH v4 2/2] bmips: add device tree example for BCM6358 Álvaro Fernández Rojas [not found] ` <1459757353-14683-2-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-04-07 17:57 ` Rob Herring 2016-04-09 10:56 ` [PATCH 1/2] bmips: add BCM6358 support Álvaro Fernández Rojas 2016-04-09 10:56 ` [PATCH 2/2] bmips: add device tree example for BCM6358 Álvaro Fernández Rojas [not found] ` <1460199408-18738-2-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-04-11 19:33 ` Rob Herring -- strict thread matches above, loose matches on Subject: below -- 2016-01-17 11:28 [PATCH 1/2] bmips: add BCM6358 support Álvaro Fernández Rojas [not found] ` <1453030101-14794-1-git-send-email-noltari-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-01-18 6:49 ` Florian Fainelli [not found] ` <0BC6030C-7485-4193-B86D-E690BF673952-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-01-18 9:42 ` Álvaro Fernández Rojas 2016-01-18 13:35 ` Jonas Gorski 2016-01-18 19:22 ` Florian Fainelli [not found] ` <BF36180D-DB32-42A5-AFF7-2B282F5A81DC-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2016-01-19 0:03 ` Florian Fainelli
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).