Device Tree support for SH7751 based board
Subsystems (15)
Yoshinori Sato
maintainerv4 cover Device Tree support for SH7751 based board
This is an updated version of something I wrote about 7 years ago. Minimum support for R2D-plus and LANDISK.
I think R2D-1 will work if you add AX88796 to dts.
And board-specific functions and SCI's SPI functions are not supported.
You can get it working with qemu found here.
https://gitlab.com/yoshinori.sato/qemu/-/tree/landisk
v4 changes.
- cpg-sh7750: use clk-divider and clk-gate.
- pci-sh7751: unified header files to old PCI driver.
- irq-renesas-sh7751: IPR registers direct mapping.
- irq-renesas-sh7751irl: useful register bit mapping.
- sm501 and sm501fb: re-write dt parser.
- j2_minus: fix build error.
- dt-binding schema: fix some errors.
- *.dts: cleanup.
v3 changes.
- Rewrite clk drivers.
- Added sh_tmu to OF support.
- Cleanup PCI stuff.
- Update sm501 and sm501fb OF support.
- Update devicetree and documents.
v2 changes.
- Rebasing v6,6-rc1
- re-write irqchip driver.
- Add binding documents.
- Cleanup review comment.
Yoshinori Sato (37):
sh: passing FDT address to kernel startup.
sh: Kconfig unified OF supported targets.
sh: Enable OF support for build and configuration.
dt-bindings: interrupt-controller: Add header for Renesas SH3/4 INTC.
sh: GENERIC_IRQ_CHIP support for CONFIG_OF=y
sh: kernel/setup Update DT support.
sh: Fix COMMON_CLK support in CONFIG_OF=y.
clocksource: sh_tmu: CLOCKSOURCE support.
dt-bindings: timer: renesas,tmu: add renesas,tmu-sh7750
sh: Common PCI framework support
sh: Add old PCI drivers compatible stub.
pci: pci-sh7751: Add SH7751 PCI driver
dt-bindings: pci: pci-sh7751: Add SH7751 PCI
dt-bindings: clock: sh7750-cpg: Add renesas,sh7750-cpg header.
clk: Compatible with narrow registers
clk: renesas: Add SH7750/7751 CPG Driver
irqchip: Add SH7751 INTC driver
dt-bindings: interrupt-controller: renesas,sh7751-intc: Add
json-schema
irqchip: SH7751 IRL external encoder with enable gate.
dt-bindings: interrupt-controller: renesas,sh7751-irl-ext: Add
json-schema
serial: sh-sci: fix SH4 OF support.
dt-bindings: serial: renesas,scif: Add scif-sh7751.
dt-bindings: display: smi,sm501: SMI SM501 binding json-schema
mfd: sm501: Convert platform_data to OF property
dt-binding: sh: cpus: Add SH CPUs json-schema
dt-bindings: vendor-prefix: Add new vendor iodata and smi.
dt-bindings: ata: ata-generic: Add new targets
dt-bindings: soc: renesas: sh: Add SH7751 based target
sh: SH7751R SoC Internal peripheral definition dtsi.
sh: add RTS7751R2D Plus DTS
sh: Add IO DATA LANDISK dts
sh: Add IO DATA USL-5P dts
sh: j2_mimas_v2.dts update
sh: Add dtbs target support.
sh: RTS7751R2D Plus OF defconfig
sh: LANDISK OF defconfig
sh: j2_defconfig: update
.../devicetree/bindings/ata/ata-generic.yaml | 2 +
.../bindings/clock/renesas,sh7750-cpg.yaml | 103 ++++
.../bindings/display/smi,sm501.yaml | 138 +++++
.../renesas,sh7751-intc.yaml | 105 ++++
.../renesas,sh7751-irl-ext.yaml | 83 +++
.../bindings/pci/renesas,sh7751-pci.yaml | 123 +++++
.../bindings/serial/renesas,scif.yaml | 1 +
.../devicetree/bindings/sh/cpus.yaml | 73 +++
.../devicetree/bindings/soc/renesas/sh.yaml | 32 ++
.../bindings/timer/renesas,tmu.yaml | 11 +-
.../devicetree/bindings/vendor-prefixes.yaml | 4 +
arch/sh/Kconfig | 11 +-
arch/sh/boards/Kconfig | 25 +-
arch/sh/boards/of-generic.c | 28 +-
arch/sh/boot/compressed/head_32.S | 5 +-
arch/sh/boot/dts/Makefile | 5 +
arch/sh/boot/dts/j2_mimas_v2.dts | 2 +-
arch/sh/boot/dts/landisk.dts | 74 +++
arch/sh/boot/dts/rts7751r2dplus.dts | 158 ++++++
arch/sh/boot/dts/sh7751r.dtsi | 151 ++++++
arch/sh/boot/dts/usl-5p.dts | 84 +++
arch/sh/configs/j2_defconfig | 11 +-
arch/sh/configs/landisk-of_defconfig | 111 ++++
arch/sh/configs/rts7751r2dplus-of_defconfig | 93 ++++
arch/sh/drivers/Makefile | 2 +
arch/sh/drivers/pci/pci-sh4.h | 183 +------
arch/sh/include/asm/io.h | 40 +-
arch/sh/include/asm/irq.h | 10 +-
arch/sh/include/asm/pci-sh4.h | 183 +++++++
.../{drivers/pci => include/asm}/pci-sh7751.h | 0
.../{drivers/pci => include/asm}/pci-sh7780.h | 0
arch/sh/include/asm/pci.h | 4 +
arch/sh/kernel/cpu/Makefile | 6 +-
arch/sh/kernel/cpu/irq/imask.c | 17 +
arch/sh/kernel/cpu/sh4/Makefile | 3 +
arch/sh/kernel/setup.c | 36 +-
arch/sh/kernel/time.c | 12 +
drivers/clk/clk-divider.c | 56 +-
drivers/clk/clk-gate.c | 56 +-
drivers/clk/renesas/Kconfig | 16 +-
drivers/clk/renesas/Makefile | 1 +
drivers/clk/renesas/clk-sh7750.c | 498 ++++++++++++++++++
drivers/clocksource/sh_tmu.c | 161 ++++--
drivers/irqchip/Kconfig | 15 +
drivers/irqchip/Makefile | 3 +
drivers/irqchip/irq-renesas-sh7751.c | 290 ++++++++++
drivers/irqchip/irq-renesas-sh7751irl.c | 227 ++++++++
drivers/mfd/sm501.c | 70 +++
drivers/pci/controller/Kconfig | 9 +
drivers/pci/controller/Makefile | 1 +
drivers/pci/controller/pci-sh7751.c | 293 +++++++++++
drivers/tty/serial/Kconfig | 2 +-
drivers/tty/serial/sh-sci.c | 6 +-
drivers/video/fbdev/sm501fb.c | 70 ++-
include/dt-bindings/clock/sh7750-cpg.h | 26 +
include/dt-bindings/display/sm501.h | 25 +
.../interrupt-controller/sh_intc.h | 16 +
include/linux/clk-provider.h | 22 +-
include/linux/sh_intc.h | 7 +-
include/linux/sm501.h | 3 +-
60 files changed, 3438 insertions(+), 364 deletions(-)
create mode 100644 Documentation/devicetree/bindings/clock/renesas,sh7750-cpg.yaml
create mode 100644 Documentation/devicetree/bindings/display/smi,sm501.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/renesas,sh7751-intc.yaml
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/renesas,sh7751-irl-ext.yaml
create mode 100644 Documentation/devicetree/bindings/pci/renesas,sh7751-pci.yaml
create mode 100644 Documentation/devicetree/bindings/sh/cpus.yaml
create mode 100644 Documentation/devicetree/bindings/soc/renesas/sh.yaml
create mode 100644 arch/sh/boot/dts/landisk.dts
create mode 100644 arch/sh/boot/dts/rts7751r2dplus.dts
create mode 100644 arch/sh/boot/dts/sh7751r.dtsi
create mode 100644 arch/sh/boot/dts/usl-5p.dts
create mode 100644 arch/sh/configs/landisk-of_defconfig
create mode 100644 arch/sh/configs/rts7751r2dplus-of_defconfig
create mode 100644 arch/sh/include/asm/pci-sh4.h
rename arch/sh/{drivers/pci => include/asm}/pci-sh7751.h (100%)
rename arch/sh/{drivers/pci => include/asm}/pci-sh7780.h (100%)
create mode 100644 drivers/clk/renesas/clk-sh7750.c
create mode 100644 drivers/irqchip/irq-renesas-sh7751.c
create mode 100644 drivers/irqchip/irq-renesas-sh7751irl.c
create mode 100644 drivers/pci/controller/pci-sh7751.c
create mode 100644 include/dt-bindings/clock/sh7750-cpg.h
create mode 100644 include/dt-bindings/display/sm501.h
create mode 100644 include/dt-bindings/interrupt-controller/sh_intc.hSignature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 1/37 sh: passing FDT address to kernel startup.
R4 is caller saved in SH ABI.
Save it so it doesn't get corrupted until it's needed for initialization.
--- arch/sh/boot/compressed/head_32.S | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
arch/sh/boot/compressed/head_32.S +3 -2
@@ -15,7 +15,8 @@ startup: /* Load initial status register */ mov.l init_sr, r1 ldc r1, sr - + /* Save FDT address */ + mov r4, r13 /* Move myself to proper location if necessary */ mova 1f, r0 mov.l 1f, r2
@@ -84,7 +85,7 @@ l1: /* Jump to the start of the decompressed kernel */ mov.l kernel_start_addr, r0 jmp @r0 - nop + mov r13,r4 .align 2 bss_start_addr:
Signature · 1 line
2.39.2
Re: [PATCH v4 01/37] sh: passing FDT address to kernel startup.
Quoted 23 lines · Yoshinori Sato
R4 is caller saved in SH ABI.
Save it so it doesn't get corrupted until it's needed for initialization.Signed-off-by Yoshinori Sato <[email protected]>--- arch/sh/boot/compressed/head_32.S | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)arch/sh/boot/compressed/head_32.S +2
-1@@ -15,7 +15,8 @@ startup: /* Load initial status register */ mov.l init_sr, r1 ldc r1, sr - + /* Save FDT address */ + mov r4, r13 /* Move myself to proper location if necessary */ mova 1f, r0 mov.l 1f, r2
arch/sh/boot/compressed/head_32.S l1: · line 88
Quoted 5 lines
arch/sh/boot/compressed/head_32.S +1
-1@@ -84,7 +85,7 @@ l1: /* Jump to the start of the decompressed kernel */ mov.l kernel_start_addr, r0 jmp @r0 - nop + mov r13,r4
Space after comma still missing...
[...]
MBR, Sergey
Yoshinori Sato
maintainerPATCH v4 2/37 sh: Kconfig unified OF supported targets.
In reply to Yoshinori SatoTargets that support OF should be treated as one board.
--- arch/sh/boards/Kconfig | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-)
arch/sh/boards/Kconfig +15 -10
@@ -19,16 +19,10 @@ config SH_DEVICE_TREE select TIMER_OF select COMMON_CLK select GENERIC_CALIBRATE_DELAY - -config SH_JCORE_SOC - bool "J-Core SoC" - select SH_DEVICE_TREE - select CLKSRC_JCORE_PIT - select JCORE_AIC - depends on CPU_J2 - help - Select this option to include drivers core components of the - J-Core SoC, including interrupt controllers and timers. + select GENERIC_IOMAP + select GENERIC_IRQ_CHIP + select SYS_SUPPORTS_PCI + select GENERIC_PCI_IOMAP if PCI config SH_SOLUTION_ENGINE bool "SolutionEngine"
@@ -293,6 +287,7 @@ config SH_LANDISK bool "LANDISK" depends on CPU_SUBTYPE_SH7751R select HAVE_PCI + select SYS_SUPPORTS_PCI help I-O DATA DEVICE, INC. "LANDISK Series" support.
@@ -369,6 +364,16 @@ config SH_APSH4AD0A help Select AP-SH4AD-0A if configuring for an ALPHAPROJECT AP-SH4AD-0A. +config SH_OF_BOARD + bool "General Open Firmware boards" + select SH_DEVICE_TREE + select CLKSRC_JCORE_PIT if CPU_J2 + select JCORE_AIC if CPU_J2 + select HAVE_PCI if CPU_SUBTYPE_SH7751R + help + This board means general OF supported targets. + + source "arch/sh/boards/mach-r2d/Kconfig" source "arch/sh/boards/mach-highlander/Kconfig" source "arch/sh/boards/mach-sdk7780/Kconfig"
Signature · 1 line
2.39.2
Re: [PATCH v4 02/37] sh: Kconfig unified OF supported targets.
arch/sh/boards/Kconfig config SH_DEVICE_TREE · line 25
Quoted 7 lines · Yoshinori Sato
arch/sh/boards/Kconfig +4
-3- help - Select this option to include drivers core components of the - J-Core SoC, including interrupt controllers and timers. + select GENERIC_IOMAP + select GENERIC_IRQ_CHIP + select SYS_SUPPORTS_PCI + select GENERIC_PCI_IOMAP if PCI
I have not looked again, but as far as I remember, you should be able to remove the 'select GENERIC_IOMAP' now that my patches got merged, and just get the simpler and more efficient default from asm-generic/ioremap.h.
You'll still need GENERIC_PCI_IOMAP, but that has no downsides.
Arnd
Yoshinori Sato
maintainerPATCH v4 3/37 sh: Enable OF support for build and configuration.
In reply to Yoshinori SatoIRQ, CLK and PCI will be migrated to a common driver framework. So if OF, disable the SH specific drivers.
--- arch/sh/Kconfig | 11 ++++++----- arch/sh/drivers/Makefile | 2 ++ arch/sh/kernel/cpu/Makefile | 9 +++++++-- arch/sh/kernel/cpu/sh4/Makefile | 3 +++ 4 files changed, 18 insertions(+), 7 deletions(-)
arch/sh/Kconfig +6 -5
@@ -65,10 +65,10 @@ config SUPERH select MODULES_USE_ELF_RELA select NEED_SG_DMA_LENGTH select NO_DMA if !MMU && !DMA_COHERENT - select NO_GENERIC_PCI_IOPORT_MAP if PCI + select NO_GENERIC_PCI_IOPORT_MAP if !SH_DEVICE_TREE select OLD_SIGACTION select OLD_SIGSUSPEND - select PCI_DOMAINS if PCI + select PCI_DOMAINS if PCI && !SH_DEVICE_TREE select PERF_EVENTS select PERF_USE_VMALLOC select RTC_LIB
@@ -152,7 +152,7 @@ menu "System type" # config CPU_SH2 bool - select SH_INTC + select SH_INTC if !SH_DEVICE_TREE config CPU_SH2A bool
@@ -178,7 +178,7 @@ config CPU_SH4 select CPU_HAS_INTEVT select CPU_HAS_SR_RB select CPU_HAS_FPU if !CPU_SH4AL_DSP - select SH_INTC + select SH_INTC if !SH_DEVICE_TREE select SYS_SUPPORTS_SH_TMU config CPU_SH4A
@@ -521,6 +521,7 @@ config SH_PCLK_FREQ config SH_CLK_CPG def_bool y + depends on !COMMON_CLK config SH_CLK_CPG_LEGACY depends on SH_CLK_CPG
@@ -665,7 +666,7 @@ config BUILTIN_DTB_SOURCE kernel. config ZERO_PAGE_OFFSET - hex + hex "Zero page offset" default "0x00010000" if PAGE_SIZE_64KB || SH_RTS7751R2D || \ SH_7751_SOLUTION_ENGINE default "0x00004000" if PAGE_SIZE_16KB || SH_SH03
arch/sh/drivers/Makefile +2 -0
@@ -5,6 +5,8 @@ obj-y += dma/ platform_early.o +ifndef CONFIG_SH_DEVICE_TREE obj-$(CONFIG_PCI) += pci/ +endif obj-$(CONFIG_PUSH_SWITCH) += push-switch.o obj-$(CONFIG_HEARTBEAT) += heartbeat.o
arch/sh/kernel/cpu/Makefile +7 -2
@@ -16,6 +16,11 @@ obj-$(CONFIG_ARCH_SHMOBILE) += shmobile/ # Common interfaces. obj-$(CONFIG_SH_ADC) += adc.o +ifndef CONFIG_COMMON_CLK +obj-y += clock.o obj-$(CONFIG_SH_CLK_CPG_LEGACY) += clock-cpg.o - -obj-y += irq/ init.o clock.o fpu.o pfc.o proc.o +endif +ifndef CONFIG_GENERIC_IRQ_CHIP +obj-y += irq/ +endif +obj-y += init.o fpu.o pfc.o proc.o
arch/sh/kernel/cpu/sh4/Makefile +3 -0
@@ -15,6 +15,7 @@ perf-$(CONFIG_CPU_SUBTYPE_SH7750) := perf_event.o perf-$(CONFIG_CPU_SUBTYPE_SH7750S) := perf_event.o perf-$(CONFIG_CPU_SUBTYPE_SH7091) := perf_event.o +ifndef CONFIG_SH_DEVICE_TREE # CPU subtype setup obj-$(CONFIG_CPU_SUBTYPE_SH7750) += setup-sh7750.o obj-$(CONFIG_CPU_SUBTYPE_SH7750R) += setup-sh7750.o
@@ -29,5 +30,7 @@ ifndef CONFIG_CPU_SH4A clock-$(CONFIG_CPU_SH4) := clock-sh4.o endif +endif # CONFIG_SH_DEVICE_TREE + obj-y += $(clock-y) obj-$(CONFIG_PERF_EVENTS) += $(perf-y)
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 4/37 dt-bindings: interrupt-controller: Add header for Renesas SH3/4 INTC.
In reply to Yoshinori SatoRenesas SH7751 Interrupt controller priority register define.
--- .../dt-bindings/interrupt-controller/sh_intc.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 include/dt-bindings/interrupt-controller/sh_intc.h
include/dt-bindings/interrupt-controller/sh_intc.h new file +16 -0
@@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +* +* SH3/4 INTC EVT - IRQ conversion +*/ + +#define evt2irq (evt) ((evt) >> 5) + +#define IPRA 0 +#define IPRB 4 +#define IPRC 8 +#define IPRD 12 +#define INTPRI00 256 +#define IPR_B12 12 +#define IPR_B8 8 +#define IPR_B4 4 +#define IPR_B0 0
Signature · 1 line
2.39.2
Re: [PATCH v4 04/37] dt-bindings: interrupt-controller: Add header for Renesas SH3/4 INTC.
Quoted 4 lines · Yoshinori Sato
Renesas SH7751 Interrupt controller priority register define.
Signed-off-by Yoshinori Sato <[email protected]>---
I never received any answer to my comments and I do not see all of them addressed.
I don't understand exactly why... old patches were called RFC, but this one is not.
No one likes to repeat himself, so I will just ask - please implement entire feedback from all previous revisions.
Including the missing testing (proper get_maintainers.pl).
Otherwise it will be a string NAK.
include/dt-bindings/interrupt-controller/sh_intc.h
Quoted 9 lines
.../dt-bindings/interrupt-controller/sh_intc.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 include/dt-bindings/interrupt-controller/sh_intc.hinclude/dt-bindings/interrupt-controller/sh_intc.h new file +0
-0
Naming based on compatible.
include/dt-bindings/interrupt-controller/sh_intc.h line 4
Quoted 5 lines
include/dt-bindings/interrupt-controller/sh_intc.h new file +4
-0@@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +* +* SH3/4 INTC EVT - IRQ conversion +*/
Missing guards.
include/dt-bindings/interrupt-controller/sh_intc.h line 16
Quoted 12 lines
include/dt-bindings/interrupt-controller/sh_intc.h new file +12
-0+ +#define evt2irq (evt) ((evt) >> 5) + +#define IPRA 0 +#define IPRB 4 +#define IPRC 8 +#define IPRD 12 +#define INTPRI00 256 +#define IPR_B12 12 +#define IPR_B8 8 +#define IPR_B4 4 +#define IPR_B0 0
That's not a binding and I think we told this.
Best regards,
Krzysztof
Yoshinori Sato
maintainerPATCH v4 5/37 sh: GENERIC_IRQ_CHIP support for CONFIG_OF=y
In reply to Yoshinori SatoRemove unused function prototype.
Add helper update_sr_imask. use for SH7751 irq driver. Add stub intc_finalize.
--- arch/sh/include/asm/irq.h | 10 ++++++++-- arch/sh/kernel/cpu/Makefile | 5 +---- arch/sh/kernel/cpu/irq/imask.c | 17 +++++++++++++++++ include/linux/sh_intc.h | 7 ++++++- 4 files changed, 32 insertions(+), 7 deletions(-)
arch/sh/include/asm/irq.h +8 -2
@@ -16,8 +16,8 @@/* * Simple Mask Register Support */ -extern void make_maskreg_irq (unsigned int irq); -extern unsigned short *irq_mask_register; + +void update_sr_imask (unsigned int irq,unsigned int enable);/* * PINT IRQs
@@ -54,4 +54,10 @@ extern void irq_finish(unsigned int irq);#include <asm-generic/irq.h> +/* SH3/4 INTC stuff */ +/* IRL level 0 - 15 */ +#define NR_IRL 15 +/* IRL0 -> IRQ16 */ +#define IRL_BASE_IRQ 16 +#endif /* __ASM_SH_IRQ_H */
arch/sh/kernel/cpu/Makefile +1 -4
@@ -20,7 +20,4 @@ ifndef CONFIG_COMMON_CLK obj-y += clock.o obj-$(CONFIG_SH_CLK_CPG_LEGACY) += clock-cpg.o endif -ifndef CONFIG_GENERIC_IRQ_CHIP -obj-y += irq/ -endif -obj-y += init.o fpu.o pfc.o proc.o +obj-y += init.o fpu.o pfc.o proc.o irq/
arch/sh/kernel/cpu/irq/imask.c +17 -0
@@ -51,6 +51,7 @@ static inline void set_interrupt_registers(int ip) : "t"); } +#ifndef CONFIG_GENERIC_IRQ_CHIP static void mask_imask_irq (struct irq_data *data) {unsigned int irq = data->irq;
@@ -83,3 +84,19 @@ void make_imask_irq(unsigned int irq)irq_set_chip_and_handler_name (irq, &imask_irq_chip, handle_level_irq, "level"); } +#else +void update_sr_imask (unsigned int irq,unsigned int enable) +{ +if (enable) { +set_bit (irq, imask_mask); + interrupt_priority =IMASK_PRIORITY - +find_first_bit (imask_mask,IMASK_PRIORITY ); + }else { +clear_bit (irq, imask_mask); +if (interrupt_priority <IMASK_PRIORITY - irq) + interrupt_priority =IMASK_PRIORITY - irq; + } +set_interrupt_registers (interrupt_priority); +} +EXPORT_SYMBOL (update_sr_imask); +#endif
include/linux/sh_intc.h +6 -1
@@ -139,8 +139,13 @@ struct intc_desc symbol __initdata = { \int register_intc_controller (struct intc_desc *desc);int intc_set_priority (unsigned int irq,unsigned int prio);int intc_irq_lookup (const char *chipname,intc_enum enum_id); +#ifndef CONFIG_SH_DEVICE_TREE void intc_finalize (void ); - +#else +static inline void intc_finalize (void ) +{ +} +#endif #ifdef CONFIG_INTC_USERIMASK int register_intc_userimask (unsigned long addr);#else
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 6/37 sh: kernel/setup Update DT support.
In reply to Yoshinori SatoFix extrnal fdt initialize and bootargs.
--- arch/sh/kernel/setup.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-)
arch/sh/kernel/setup.c +25 -11
@@ -30,6 +30,7 @@#include <linux/memblock.h> #include <linux/of.h> #include <linux/of_fdt.h> +#include <linux/libfdt.h> #include <linux/uaccess.h> #include <uapi/linux/mount.h> #include <asm/io.h>
@@ -74,7 +75,13 @@ extern int root_mountflags;#define RAMDISK_PROMPT_FLAG 0x8000#define RAMDISK_LOAD_FLAG 0x4000 +#if defined(CONFIG_OF ) && !defined(CONFIG_USE_BUILTIN_DTB ) +#define CHOSEN_BOOTARGS +#endif + +#ifndef CHOSEN_BOOTARGS static char __initdata command_line[COMMAND_LINE_SIZE ] = {0 , }; +#endif static struct resource code_resource = { .name ="Kernel code" ,
@@ -99,6 +106,8 @@ unsigned long memory_limit = 0;static struct resource mem_resources[MAX_NUMNODES ]; +static void *dt_virt; +int l1i_cache_shape, l1d_cache_shape, l2_cache_shape;static int __init early_parse_mem (char *p)
@@ -244,7 +253,6 @@ void __init __weak plat_early_device_setup(void)void __ref sh_fdt_init (phys_addr_t dt_phys) {static int done =0 ; -void *dt_virt;/* Avoid calling an __init function on secondary cpus. */ if (done)return ;
@@ -269,8 +277,17 @@ void __ref sh_fdt_init(phys_addr_t dt_phys)void __init setup_arch (char **cmdline_p) { +#ifdef CONFIG_OF +#ifdef CONFIG_USE_BUILTIN_DTB +unflatten_and_copy_device_tree (); +#else +memblock_reserve (__pa (dt_virt),fdt_totalsize (dt_virt)); +unflatten_device_tree (); +#endif +#endif enable_mmu (); +#ifndef CONFIG_OF ROOT_DEV =old_decode_dev (ORIG_ROOT_DEV ); printk(KERN_NOTICE "Boot params:\n"
@@ -299,6 +316,9 @@ void __init setup_arch(char **cmdline_p) bss_resource.start =virt_to_phys (__bss_start); bss_resource.end =virt_to_phys (__bss_stop)-1 ; +#endif + +#ifndef CHOSEN_BOOTARGS #ifdef CONFIG_CMDLINE_OVERWRITE strscpy (command_line,CONFIG_CMDLINE ,sizeof (command_line));#else
@@ -307,11 +327,13 @@ void __init setup_arch(char **cmdline_p)strlcat (command_line," " ,sizeof (command_line));strlcat (command_line,CONFIG_CMDLINE ,sizeof (command_line));#endif -#endif - +#endif /* CONFIG_CMDLINE_OVERWRITE */ /* Save unparsed command line copy for /proc/cmdline */ memcpy (boot_command_line, command_line,COMMAND_LINE_SIZE ); *cmdline_p = command_line; +#else + *cmdline_p = boot_command_line; +#endif parse_early_param ();
@@ -322,14 +344,6 @@ void __init setup_arch(char **cmdline_p)/* Let earlyprintk output early console messages */ sh_early_platform_driver_probe ("earlyprintk" ,1 ,1 ); -#ifdef CONFIG_OF_EARLY_FLATTREE -#ifdef CONFIG_USE_BUILTIN_DTB -unflatten_and_copy_device_tree (); -#else -unflatten_device_tree (); -#endif -#endif -paging_init ();/* Perform the machine specific initialisation */
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 7/37 sh: Fix COMMON_CLK support in CONFIG_OF=y.
In reply to Yoshinori SatoInitialize the clock and timer using the COMMON_CLK procedure. sh's earlytimer mechanism doesn't work properly in OF, so timer initialization is delayed.
If CONFIG_OF=y, perform the general timer initialization procedure.
--- arch/sh/boards/of-generic.c | 28 ++++------------------------ arch/sh/kernel/time.c | 12 ++++++++++++ 2 files changed, 16 insertions(+), 24 deletions(-)
arch/sh/boards/of-generic.c +4 -24
@@ -8,6 +8,7 @@#include <linux/of.h> #include <linux/of_clk.h> #include <linux/of_fdt.h> +#include <linux/of_platform.h> #include <linux/clocksource.h> #include <linux/irqchip.h> #include <asm/machvec.h>
@@ -98,16 +99,7 @@ static void sh_of_smp_probe(void)#endif -static void noop (void ) -{ -} - -static int noopi (void ) -{ -return 0 ; -} - -static void __init sh_of_mem_reserve (void ) +static void __init sh_of_mem_init (void ) {early_init_fdt_reserve_self ();early_init_fdt_scan_reserved_mem ();
@@ -140,25 +132,13 @@ static void __init sh_of_init_irq(void)irqchip_init (); } -static int __init sh_of_clk_init (void ) -{ -#ifdef CONFIG_COMMON_CLK -/* Disabled pending move to COMMON_CLK framework. */ -pr_info ("SH generic board support: scanning for clk providers\n" ); -of_clk_init (NULL ); -#endif -return 0 ; -} - static struct sh_machine_vector __initmv sh_of_generic_mv = { .mv_setup = sh_of_setup, .mv_name ="devicetree" ,/* replaced by DT root's model */ .mv_irq_demux = sh_of_irq_demux, .mv_init_irq = sh_of_init_irq, - .mv_clk_init = sh_of_clk_init, - .mv_mode_pins = noopi, - .mv_mem_init = noop, - .mv_mem_reserve = sh_of_mem_reserve, + .mv_mode_pins = generic_mode_pins, + .mv_mem_init = sh_of_mem_init, };struct sh_clk_ops ;
arch/sh/kernel/time.c +12 -0
@@ -19,7 +19,9 @@#include <asm/clock.h> #include <asm/rtc.h> #include <asm/platform_early.h> +#include <linux/of_clk.h> +#ifndef CONFIG_SH_DEVICE_TREE static void __init sh_late_time_init (void ) {/*
@@ -43,3 +45,13 @@ void __init time_init(void) late_time_init = sh_late_time_init; } +#else +/* CONFIG_SH_DEVICE_TREE */ +void __init time_init (void ) +{ +pr_info ("SH generic board support: scanning for clk providers\n" ); + +of_clk_init (NULL ); +timer_probe (); +} +#endif
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 8/37 clocksource: sh_tmu: CLOCKSOURCE support.
In reply to Yoshinori SatoAllows initialization as CLOCKSOURCE.
--- drivers/clocksource/sh_tmu.c | 161 +++++++++++++++++++++++------------ 1 file changed, 106 insertions(+), 55 deletions(-)
drivers/clocksource/sh_tmu.c +106 -55
@@ -17,6 +17,8 @@#include <linux/irq.h> #include <linux/module.h> #include <linux/of.h> +#include <linux/of_address.h> +#include <linux/of_irq.h> #include <linux/platform_device.h> #include <linux/pm_domain.h> #include <linux/pm_runtime.h>
@@ -65,6 +67,7 @@ struct sh_tmu_device {bool has_clockevent;bool has_clocksource; +const char *name; };#define TSTR -1/* shared register */
@@ -148,8 +151,8 @@ static int __sh_tmu_enable(struct sh_tmu_channel *ch)/* enable clock */ ret =clk_enable (ch->tmu->clk);if (ret) { -dev_err (&ch->tmu->pdev->dev,"ch%u: cannot enable clock\n" , - ch->index); +pr_err ("%s ch%u: cannot enable clock\n" , + ch->tmu->name, ch->index);return ret; }
@@ -174,9 +177,10 @@ static int sh_tmu_enable(struct sh_tmu_channel *ch)if (ch->enable_count++ >0 )return 0 ; -pm_runtime_get_sync (&ch->tmu->pdev->dev); -dev_pm_syscore_device (&ch->tmu->pdev->dev, true); - +if (ch->tmu->pdev) { +pm_runtime_get_sync (&ch->tmu->pdev->dev); +dev_pm_syscore_device (&ch->tmu->pdev->dev, true); + }return __sh_tmu_enable (ch); }
@@ -202,8 +206,10 @@ static void sh_tmu_disable(struct sh_tmu_channel *ch)__sh_tmu_disable (ch); -dev_pm_syscore_device (&ch->tmu->pdev->dev, false); -pm_runtime_put (&ch->tmu->pdev->dev); +if (ch->tmu->pdev) { +dev_pm_syscore_device (&ch->tmu->pdev->dev, false); +pm_runtime_put (&ch->tmu->pdev->dev); + } } static void sh_tmu_set_next(struct sh_tmu_channel *ch, unsigned long delta,
@@ -245,7 +251,7 @@ static irqreturn_t sh_tmu_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -static struct sh_tmu_channel *cs_to_sh_tmu (struct clocksource *cs) +static inline struct sh_tmu_channel *cs_to_sh_tmu (struct clocksource *cs) { return container_of(cs, struct sh_tmu_channel, cs); }
@@ -292,7 +298,8 @@ static void sh_tmu_clocksource_suspend(struct clocksource *cs)if (--ch->enable_count ==0 ) {__sh_tmu_disable (ch); -dev_pm_genpd_suspend (&ch->tmu->pdev->dev); +if (ch->tmu->pdev) +dev_pm_genpd_suspend (&ch->tmu->pdev->dev); } }
@@ -304,7 +311,8 @@ static void sh_tmu_clocksource_resume(struct clocksource *cs)return ;if (ch->enable_count++ ==0 ) { -dev_pm_genpd_resume (&ch->tmu->pdev->dev); +if (ch->tmu->pdev) +dev_pm_genpd_resume (&ch->tmu->pdev->dev);__sh_tmu_enable (ch); } }
@@ -324,14 +332,14 @@ static int sh_tmu_register_clocksource(struct sh_tmu_channel *ch, cs->mask =CLOCKSOURCE_MASK (32 ); cs->flags =CLOCK_SOURCE_IS_CONTINUOUS ; -dev_info (&ch->tmu->pdev->dev,"ch%u: used as clock source\n" , - ch->index); +pr_info ("%s ch%u: used as clock source\n" , + ch->tmu->name, ch->index);clocksource_register_hz (cs, ch->tmu->rate);return 0 ; } -static struct sh_tmu_channel *ced_to_sh_tmu (struct clock_event_device *ced) +static inline struct sh_tmu_channel *ced_to_sh_tmu (struct clock_event_device *ced) { return container_of(ced, struct sh_tmu_channel, ced); }
@@ -364,8 +372,8 @@ static int sh_tmu_clock_event_set_state(struct clock_event_device *ced,if (clockevent_state_oneshot (ced) ||clockevent_state_periodic (ced))sh_tmu_disable (ch); -dev_info (&ch->tmu->pdev->dev,"ch%u: used for %s clock events\n" , - ch->index, periodic ?"periodic" :"oneshot" ); +pr_info ("%s ch%u: used for %s clock events\n" , + ch->tmu->name, ch->index, periodic ?"periodic" :"oneshot" );sh_tmu_clock_event_start (ch, periodic);return 0 ; }
@@ -403,7 +411,8 @@ static void sh_tmu_clock_event_resume(struct clock_event_device *ced) }static void sh_tmu_register_clockevent (struct sh_tmu_channel *ch, -const char *name) +const char *name, +struct device_node *np) {struct clock_event_device *ced = &ch->ced;int ret;
@@ -417,30 +426,32 @@ static void sh_tmu_register_clockevent(struct sh_tmu_channel *ch, ced->set_state_shutdown = sh_tmu_clock_event_shutdown; ced->set_state_periodic = sh_tmu_clock_event_set_periodic; ced->set_state_oneshot = sh_tmu_clock_event_set_oneshot; - ced->suspend = sh_tmu_clock_event_suspend; - ced->resume = sh_tmu_clock_event_resume; - -dev_info (&ch->tmu->pdev->dev,"ch%u: used for clock events\n" , - ch->index); +if (ch->tmu->pdev) { + ced->suspend = sh_tmu_clock_event_suspend; + ced->resume = sh_tmu_clock_event_resume; + } +pr_info ("%s ch%u: used for clock events\n" , + ch->tmu->name, ch->index);clockevents_config_and_register (ced, ch->tmu->rate,0x300 ,0xffffffff ); ret =request_irq (ch->irq, sh_tmu_interrupt,IRQF_TIMER |IRQF_IRQPOLL |IRQF_NOBALANCING , -dev_name (&ch->tmu->pdev->dev), ch); + ch->tmu->name, ch);if (ret) { -dev_err (&ch->tmu->pdev->dev,"ch%u: failed to request irq %d\n" , - ch->index, ch->irq); +pr_err ("%s ch%u: failed to request irq %d\n" , + ch->tmu->name, ch->index, ch->irq);return ; } }static int sh_tmu_register (struct sh_tmu_channel *ch,const char *name, +struct device_node *np,bool clockevent,bool clocksource) {if (clockevent) { ch->tmu->has_clockevent = true; -sh_tmu_register_clockevent (ch, name); +sh_tmu_register_clockevent (ch, name, np); }else if (clocksource) { ch->tmu->has_clocksource = true;sh_tmu_register_clocksource (ch, name);
@@ -451,7 +462,8 @@ static int sh_tmu_register(struct sh_tmu_channel *ch, const char *name,static int sh_tmu_channel_setup (struct sh_tmu_channel *ch,unsigned int index,bool clockevent,bool clocksource, -struct sh_tmu_device *tmu) +struct sh_tmu_device *tmu, +struct device_node *np) {/* Skip unused channels. */ if (!clockevent && !clocksource)
@@ -465,53 +477,59 @@ static int sh_tmu_channel_setup(struct sh_tmu_channel *ch, unsigned int index,else ch->base = tmu->mapbase +8 + ch->index *12 ; - ch->irq =platform_get_irq (tmu->pdev, index); +if (tmu->pdev) + ch->irq =platform_get_irq (tmu->pdev, index); +else + ch->irq =of_irq_get (np, index);if (ch->irq <0 )return ch->irq; ch->cs_enabled = false; ch->enable_count =0 ; -return sh_tmu_register (ch,dev_name (&tmu->pdev->dev), +return sh_tmu_register (ch, tmu->name, np, clockevent, clocksource); } -static int sh_tmu_map_memory (struct sh_tmu_device *tmu) +static int sh_tmu_map_memory (struct sh_tmu_device *tmu,struct device_node *np) {struct resource *res; - res =platform_get_resource (tmu->pdev,IORESOURCE_MEM ,0 ); -if (!res) { -dev_err (&tmu->pdev->dev,"failed to get I/O memory\n" ); -return -ENXIO ; - } +if (tmu->pdev) { + res =platform_get_resource (tmu->pdev,IORESOURCE_MEM ,0 ); +if (!res) { +pr_err ("sh_tmu failed to get I/O memory\n" ); +return -ENXIO ; + } + + tmu->mapbase =ioremap (res->start,resource_size (res)); + }else + tmu->mapbase =of_iomap (np,0 ); - tmu->mapbase =ioremap (res->start,resource_size (res));if (tmu->mapbase ==NULL )return -ENXIO ;return 0 ; } -static int sh_tmu_parse_dt (struct sh_tmu_device *tmu) +static int sh_tmu_parse_dt (struct sh_tmu_device *tmu,struct device_node *np) { -struct device_node *np = tmu->pdev->dev.of_node; - tmu->model =SH_TMU ; tmu->num_channels =3 ;of_property_read_u32 (np,"#renesas,channels" , &tmu->num_channels);if (tmu->num_channels !=2 && tmu->num_channels !=3 ) { -dev_err (&tmu->pdev->dev,"invalid number of channels %u\n" , - tmu->num_channels); +pr_err ("%s: invalid number of channels %u\n" , + tmu->name, tmu->num_channels);return -EINVAL ; }return 0 ; } -static int sh_tmu_setup (struct sh_tmu_device *tmu,struct platform_device *pdev) +static int sh_tmu_setup (struct sh_tmu_device *tmu, +struct platform_device *pdev,struct device_node *np) {unsigned int i;int ret;
@@ -520,8 +538,13 @@ static int sh_tmu_setup(struct sh_tmu_device *tmu, struct platform_device *pdev)raw_spin_lock_init (&tmu->lock); -if (IS_ENABLED (CONFIG_OF ) && pdev->dev.of_node) { - ret =sh_tmu_parse_dt (tmu); +if (pdev) + tmu->name =dev_name (&pdev->dev); +else + tmu->name =of_node_full_name (np); + +if (IS_ENABLED (CONFIG_OF ) && np) { + ret =sh_tmu_parse_dt (tmu, np);if (ret <0 )return ret; }else if (pdev->dev.platform_data) {
@@ -531,14 +554,17 @@ static int sh_tmu_setup(struct sh_tmu_device *tmu, struct platform_device *pdev) tmu->model = id->driver_data; tmu->num_channels =hweight8 (cfg->channels_mask); }else { -dev_err (&tmu->pdev->dev,"missing platform data\n" ); +pr_err ("%s missing platform data\n" , tmu->name);return -ENXIO ; }/* Get hold of clock. */ - tmu->clk =clk_get (&tmu->pdev->dev,"fck" ); +if (pdev) + tmu->clk =clk_get (&tmu->pdev->dev,"fck" ); +else + tmu->clk =of_clk_get (np,0 );if (IS_ERR (tmu->clk)) { -dev_err (&tmu->pdev->dev,"cannot get clock\n" ); +pr_err ("%s: cannot get clock\n" , tmu->name);return PTR_ERR (tmu->clk); }
@@ -555,9 +581,9 @@ static int sh_tmu_setup(struct sh_tmu_device *tmu, struct platform_device *pdev)clk_disable (tmu->clk);/* Map the memory resource. */ - ret =sh_tmu_map_memory (tmu); + ret =sh_tmu_map_memory (tmu, np);if (ret <0 ) { -dev_err (&tmu->pdev->dev,"failed to remap I/O memory\n" ); +pr_err ("%s: failed to remap I/O memory\n" , tmu->name); goto err_clk_unprepare; }
@@ -575,12 +601,12 @@ static int sh_tmu_setup(struct sh_tmu_device *tmu, struct platform_device *pdev)*/ for (i =0 ; i < tmu->num_channels; ++i) { ret =sh_tmu_channel_setup (&tmu->channels[i], i, - i ==0 , i ==1 , tmu); + i ==0 , i ==1 , tmu, np);if (ret <0 ) goto err_unmap; } - -platform_set_drvdata (pdev, tmu); +if (pdev) +platform_set_drvdata (pdev, tmu);return 0 ;
@@ -594,6 +620,7 @@ static int sh_tmu_setup(struct sh_tmu_device *tmu, struct platform_device *pdev)return ret; } +#ifndef CONFIG_SH_DEVICE_TREE static int sh_tmu_probe (struct platform_device *pdev) {struct sh_tmu_device *tmu =platform_get_drvdata (pdev);
@@ -613,7 +640,7 @@ static int sh_tmu_probe(struct platform_device *pdev)if (tmu ==NULL )return -ENOMEM ; - ret =sh_tmu_setup (tmu, pdev); + ret =sh_tmu_setup (tmu, pdev, pdev->dev.of_node);if (ret) {kfree (tmu);pm_runtime_idle (&pdev->dev);
@@ -631,7 +658,26 @@ static int sh_tmu_probe(struct platform_device *pdev)return 0 ; } +#else +static int __init sh_tmu_of_register (struct device_node *np) +{ +struct sh_tmu_device *tmu; +int ret; + + tmu =kzalloc (sizeof (*tmu),GFP_KERNEL ); +if (tmu ==NULL ) +return -ENOMEM ; + + ret =sh_tmu_setup (tmu,NULL , np); +if (ret) { +kfree (tmu); +pr_warn ("%pOF: Timer register failed (%d)" , np, ret); + } +return ret; +} +#endif +#ifndef CONFIG_SH_DEVICE_TREE static const struct platform_device_id sh_tmu_id_table[] = { {"sh-tmu" ,SH_TMU }, { "sh-tmu-sh3", SH_TMU_SH3 },
@@ -665,12 +711,17 @@ static void __exit sh_tmu_exit(void) platform_driver_unregister(&sh_tmu_device_driver); } +subsys_initcall (sh_tmu_init); +module_exit (sh_tmu_exit); +#endif +#ifdef CONFIG_SUPERH +#ifdef CONFIG_SH_DEVICE_TREE +TIMER_OF_DECLARE (sh_tmu,"renesas,tmu" , sh_tmu_of_register); +#else sh_early_platform_init ("earlytimer" , &sh_tmu_device_driver);#endif - -subsys_initcall (sh_tmu_init); -module_exit (sh_tmu_exit); +#endif MODULE_AUTHOR ("Magnus Damm" );MODULE_DESCRIPTION ("SuperH TMU Timer Driver" );
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 9/37 dt-bindings: timer: renesas,tmu: add renesas,tmu-sh7750
In reply to Yoshinori SatoAdd SH7750 TMU entry.
--- .../devicetree/bindings/timer/renesas,tmu.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/timer/renesas,tmu.yaml +10 -1
@@ -21,6 +21,7 @@ properties: compatible: items: - enum: + - renesas,tmu-sh7750 # SH7750 - renesas,tmu-r8a7740 # R-Mobile A1 - renesas,tmu-r8a774a1 # RZ/G2M - renesas,tmu-r8a774b1 # RZ/G2N
@@ -46,7 +47,14 @@ properties: interrupts: minItems: 2 - maxItems: 3 + maxItems: 4 + + interrupt-names: + items: + - const: tuni0 + - const: tuni1 + - const: tuni2 + - const: ticpi2 clocks: maxItems: 1
@@ -84,6 +92,7 @@ if: - renesas,tmu-r8a7740 - renesas,tmu-r8a7778 - renesas,tmu-r8a7779 + - renesas,tmu-sh7750 then: required: - resets
Signature · 1 line
2.39.2
Re: [PATCH v4 09/37] dt-bindings: timer: renesas,tmu: add renesas,tmu-sh7750
Quoted 3 lines · Yoshinori Sato
Add SH7750 TMU entry.
Signed-off-by Yoshinori Sato <[email protected]>
Still not tested.
I repeated it multiple times. Please answer below, whether you understand it:
Please use scripts/get_maintainers.pl to get a list of necessary people and lists to CC. It might happen, that command when run on an older kernel, gives you outdated entries. Therefore please be sure you base your patches on recent Linux kernel.
You missed at least devicetree list (maybe more), so this won't be tested by automated tooling. Performing review on untested code might be a waste of time, thus I will skip this patch entirely till you follow the process allowing the patch to be tested.
Please kindly resend and include all necessary To/Cc entries.
Quoted 19 lines
--- .../devicetree/bindings/timer/renesas,tmu.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)Documentation/devicetree/bindings/timer/renesas,tmu.yaml +1
-0@@ -21,6 +21,7 @@ properties: compatible: items: - enum: + - renesas,tmu-sh7750 # SH7750 - renesas,tmu-r8a7740 # R-Mobile A1 - renesas,tmu-r8a774a1 # RZ/G2M - renesas,tmu-r8a774b1 # RZ/G2N@@ -46,7 +47,14 @@ properties: interrupts:
Documentation/devicetree/bindings/timer/renesas,tmu.yaml properties: · line 57
Quoted 10 lines
Documentation/devicetree/bindings/timer/renesas,tmu.yaml +8
-1minItems: 2 - maxItems: 3 + maxItems: 4 + + interrupt-names: + items: + - const: tuni0 + - const: tuni1 + - const: tuni2 + - const: ticpi2
Other variants should be constrained to three items.
Best regards,
Krzysztof
Re: [PATCH v4 09/37] dt-bindings: timer: renesas,tmu: add renesas,tmu-sh7750
Hi Krzysztof,
Quoted 19 lines · Krzysztof Kozlowski
Quoted 18 lines · Yoshinori Sato
Add SH7750 TMU entry.
Signed-off-by Yoshinori Sato <[email protected]>Documentation/devicetree/bindings/timer/renesas,tmu.yaml +1
-0@@ -21,6 +21,7 @@ properties: compatible: items: - enum: + - renesas,tmu-sh7750 # SH7750 - renesas,tmu-r8a7740 # R-Mobile A1 - renesas,tmu-r8a774a1 # RZ/G2M - renesas,tmu-r8a774b1 # RZ/G2N@@ -46,7 +47,14 @@ properties:
Quoted 13 lines
Documentation/devicetree/bindings/timer/renesas,tmu.yaml properties: · line 57
Quoted 11 lines
Documentation/devicetree/bindings/timer/renesas,tmu.yaml +8
-1interrupts: minItems: 2 - maxItems: 3 + maxItems: 4 + + interrupt-names: + items: + - const: tuni0 + - const: tuni1 + - const: tuni2 + - const: ticpi2Other variants should be constrained to three items.
Actually that is not true: the number of interrupts depends on the instance, not on the SoC. The fourth interrupt is present on some instances on other SoCs, too, but was never described before, as the driver doesn't support it yet (I know this is not a good reason). Of course none of this is obvious to the casual reviewer if it is not mentioned in the patch description...
I'm working on making this more clear, and adding support for missing variants.
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Re: [PATCH v4 09/37] dt-bindings: timer: renesas,tmu: add renesas,tmu-sh7750
Quoted 43 lines · Geert Uytterhoeven
Hi Krzysztof,
Quoted 19 lines · Krzysztof Kozlowski
Quoted 18 lines · Yoshinori Sato
Add SH7750 TMU entry.
Signed-off-by Yoshinori Sato <[email protected]>Documentation/devicetree/bindings/timer/renesas,tmu.yaml +1
-0@@ -21,6 +21,7 @@ properties: compatible: items: - enum: + - renesas,tmu-sh7750 # SH7750 - renesas,tmu-r8a7740 # R-Mobile A1 - renesas,tmu-r8a774a1 # RZ/G2M - renesas,tmu-r8a774b1 # RZ/G2N@@ -46,7 +47,14 @@ properties:Quoted 13 lines
Documentation/devicetree/bindings/timer/renesas,tmu.yaml properties: · line 57
Quoted 11 lines
Documentation/devicetree/bindings/timer/renesas,tmu.yaml +8
-1interrupts: minItems: 2 - maxItems: 3 + maxItems: 4 + + interrupt-names: + items: + - const: tuni0 + - const: tuni1 + - const: tuni2 + - const: ticpi2Other variants should be constrained to three items.
Actually that is not true: the number of interrupts depends on the instance, not on the SoC. The fourth interrupt is present on some instances on other SoCs, too, but was never described before, as the driver doesn't support it yet (I know this is not a good reason). Of course none of this is obvious to the casual reviewer if it is not mentioned in the patch description...
Quoted 2 lines
I'm working on making this more clear, and adding support for missing variants.
OK, thanks for explanation.
Best regards,
Krzysztof
Yoshinori Sato
maintainerPATCH v4 10/37 sh: Common PCI framework support
In reply to Yoshinori SatoWhen CONFIG_OF=y, a common PCI framework is used.
The new driver also needs to reference PCI headers, so move the necessary header files to a public location rather than a private one.
---
arch/sh/include/asm/io.h | 40 +++++++++++++------
.../sh/{drivers/pci => include/asm}/pci-sh4.h | 7 ++--
.../{drivers/pci => include/asm}/pci-sh7751.h | 0
.../{drivers/pci => include/asm}/pci-sh7780.h | 0
arch/sh/include/asm/pci.h | 4 ++
5 files changed, 36 insertions(+), 15 deletions(-)
rename arch/sh/{drivers/pci => include/asm}/pci-sh4.h (99%)
rename arch/sh/{drivers/pci => include/asm}/pci-sh7751.h (100%)
rename arch/sh/{drivers/pci => include/asm}/pci-sh7780.h (100%)arch/sh/include/asm/io.h +28 -12
@@ -150,6 +150,7 @@ __BUILD_MEMORY_STRING(__raw_, q, u64)*/ #undef CONF_SLOWDOWN_IO +#ifndef CONFIG_GENERIC_IOMAP /* * On SuperH I/O ports are memory mapped, so we access them using normal * load/store instructions. sh_io_port_base is the virtual address to
@@ -163,11 +164,7 @@ static inline void __set_io_port_base(unsigned long pbase)barrier (); } -#ifdef CONFIG_GENERIC_IOMAP -#define __ioport_map ioport_map -#else extern void __iomem *__ioport_map (unsigned long addr,unsigned int size); -#endif #ifdef CONF_SLOWDOWN_IO #define SLOW_DOWN_IO __raw_readw(sh_io_port_base)
@@ -239,12 +236,6 @@ __BUILD_IOPORT_STRING(w, u16) __BUILD_IOPORT_STRING(l, u32) __BUILD_IOPORT_STRING(q, u64) -#else /* !CONFIG_HAS_IOPORT_MAP */ - -#include <asm/io_noioport.h> - -#endif -#define inb (addr) inb(addr)#define inw (addr) inw(addr)#define inl (addr) inl(addr)
@@ -265,6 +256,21 @@ __BUILD_IOPORT_STRING(q, u64)#define outsb outsb#define outsw outsw#define outsl outsl +#else /* !CONFIG_GENERIC_IOMAP */ +#define __ioport_map ioport_map +#endif + +#else /* !CONFIG_HAS_IOPORT_MAP */ + +#define insb insb +#define insw insw +#define insl insl +#define outsb outsb +#define outsw outsw +#define outsl outsl +#include <asm/io_noioport.h> + +#endif #define IO_SPACE_LIMIT 0xffffffff
@@ -311,10 +317,20 @@ unsigned long long poke_real_address_q(unsigned long long addr,#define xlate_dev_mem_ptr (p) __va(p)#define unxlate_dev_mem_ptr (p, v) do { } while (0) -#include <asm-generic/io.h> -#define ARCH_HAS_VALID_PHYS_ADDR_RANGE int valid_phys_addr_range (phys_addr_t addr,size_t size);int valid_mmap_phys_addr_range (unsigned long pfn,size_t size); + +#ifdef __KERNEL__ +#define PCI_IOBASE ((void __iomem *)0xfe240000UL) + +#define HAVE_ARCH_PIO_SIZE +#define PIO_OFFSET 0xfe240000UL +#define PIO_MASK 0x3ffffUL +#define PIO_RESERVED 0x40000UL +#endif /* __KERNEL__ */ + +#include <asm-generic/io.h> +#endif /* __ASM_SH_IO_H */
arch/sh/include/asm/pci-sh4.h renamed from arch/sh/drivers/pci/pci-sh4.h +4 -3
@@ -5,9 +5,9 @@#if defined(CONFIG_CPU_SUBTYPE_SH7780 ) || \ defined(CONFIG_CPU_SUBTYPE_SH7785 ) || \ defined(CONFIG_CPU_SUBTYPE_SH7763 ) -#include "pci-sh7780.h" +#include <asm/pci-sh7780.h> #else -#include "pci-sh7751.h" +#include <asm/pci-sh7751.h> #endif #include <asm/io.h>
@@ -153,6 +153,7 @@#define SH4_PCIPDTR_PB0 0x000000001/* Port 0 Enable */ #define SH4_PCIPDR 0x220/* Port IO Data Register */ +#ifndef CONFIG_PCI_HOST_COMMON /* arch/sh/kernel/drivers/pci/ops-sh4.c */ extern struct pci_ops sh4_pci_ops;int pci_fixup_pcic (struct pci_channel *chan);
@@ -178,5 +179,5 @@ static inline unsigned long pci_read_reg(struct pci_channel *chan, {return __raw_readl (chan->reg_base + reg); } - +#endif #endif /* __PCI_SH4_H */
arch/sh/include/asm/pci-sh7751.h renamed from arch/sh/drivers/pci/pci-sh7751.h +0 -0
arch/sh/include/asm/pci-sh7780.h renamed from arch/sh/drivers/pci/pci-sh7780.h +0 -0
arch/sh/include/asm/pci.h +4 -0
@@ -2,6 +2,7 @@#ifndef __ASM_SH_PCI_H#define __ASM_SH_PCI_H +#ifndef CONFIG_SH_DEVICE_TREE /* Can be used to override the logic in pci_scan_bus for skipping already-configured bus numbers - to be used for buggy BIOSes or architectures with incomplete PCI setup by the loader */
@@ -88,4 +89,7 @@ static inline int pci_proc_domain(struct pci_bus *bus)return hose->need_domain_info; } +#else /* CONFIG_SH_DEVICE_TREE */ +#include <asm-generic/pci.h> +#endif #endif /* __ASM_SH_PCI_H */
Signature · 1 line
2.39.2
Re: [PATCH v4 10/37] sh: Common PCI framework support
Quoted 11 lines · Yoshinori Sato
When
CONFIG_OF=y, a common PCI framework is used.
The new driver also needs to reference PCI headers, so move the necessary header files to a public location rather than a private one.Signed-off-by Yoshinori Sato <[email protected]>--- arch/sh/include/asm/io.h | 40 +++++++++++++------ .../sh/{drivers/pci => include/asm}/pci-sh4.h | 7 ++-- .../{drivers/pci => include/asm}/pci-sh7751.h | 0 .../{drivers/pci => include/asm}/pci-sh7780.h | 0 arch/sh/include/asm/pci.h | 4 ++
I think ideally the PCI host driver should be moved to drivers/pci/controller, but I'm not sure if that solves your problem here. There should normally be no need to put driver specific headers into a global location.
Quoted 1 line
#define
IO_SPACE_LIMIT0xffffffff
The IO_SPACE_LIMIT is wrong here, as most of the address space is not actually reserved for port I/O. Usually you want just 64KB here, but you can also make this PIO_MASK I think.
arch/sh/include/asm/io.h unsigned long long poke_real_address_q(unsigned long long addr, · line 332
Quoted 8 lines
arch/sh/include/asm/io.h +8
-0+#ifdef __KERNEL__ +#define PCI_IOBASE ((void __iomem *)0xfe240000UL) + +#define HAVE_ARCH_PIO_SIZE +#define PIO_OFFSET 0xfe240000UL +#define PIO_MASK 0x3ffffUL +#define PIO_RESERVED 0x40000UL +#endif /* __KERNEL__ */
As far as I understand the generic iomap code, this does not work because PIO_OFFSET has to be smaller than PIO_RESERVED. Once you remove the GENERIC_IOMAP hack, it should no longer matter.
Arnd
Yoshinori Sato
maintainerPATCH v4 11/37 sh: Add old PCI drivers compatible stub.
In reply to Yoshinori SatoPlace the stub so that the old driver can reference the moved header file.
--- arch/sh/drivers/pci/pci-sh4.h | 1 + 1 file changed, 1 insertion(+) create mode 100644 arch/sh/drivers/pci/pci-sh4.h
arch/sh/drivers/pci/pci-sh4.h new file +1 -0
@@ -0,0 +1 @@ +#include <asm/pci-sh4.h>
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 12/37 pci: pci-sh7751: Add SH7751 PCI driver
In reply to Yoshinori SatoRenesas SH7751 CPU Internal PCI Controller driver.
--- drivers/pci/controller/Kconfig | 9 + drivers/pci/controller/Makefile | 1 + drivers/pci/controller/pci-sh7751.c | 293 ++++++++++++++++++++++++++++ 3 files changed, 303 insertions(+) create mode 100644 drivers/pci/controller/pci-sh7751.c
drivers/pci/controller/Kconfig +9 -0
@@ -353,6 +353,15 @@ config PCIE_XILINX_CPM Say 'Y' here if you want kernel support for the Xilinx Versal CPM host bridge. +config PCI_SH7751 + bool "Renesas SH7751 PCI controller" + depends on OF + depends on CPU_SUBTYPE_SH7751 || CPU_SUBTYPE_SH7751R || COMPILE_TEST + select PCI_HOST_COMMON + help + Say 'Y' here if you want kernel to support the Renesas SH7751 PCI + Host Bridge driver. + source "drivers/pci/controller/cadence/Kconfig" source "drivers/pci/controller/dwc/Kconfig" source "drivers/pci/controller/mobiveil/Kconfig"
drivers/pci/controller/Makefile +1 -0
@@ -40,6 +40,7 @@ obj-$(CONFIG_PCI_LOONGSON) += pci-loongson.o obj-$(CONFIG_PCIE_HISI_ERR) += pcie-hisi-error.o obj-$(CONFIG_PCIE_APPLE) += pcie-apple.o obj-$(CONFIG_PCIE_MT7621) += pcie-mt7621.o +obj-$(CONFIG_PCI_SH7751) += pci-sh7751.o # pcie-hisi.o quirks are needed even without CONFIG_PCIE_DW obj-y += dwc/
drivers/pci/controller/pci-sh7751.c new file +293 -0
293 lines not on this page · raw message
Signature · 1 line
2.39.2
Re: [PATCH v4 12/37] pci: pci-sh7751: Add SH7751 PCI driver
Quoted 1 line · Yoshinori Sato
Renesas SH7751 CPU Internal PCI Controller driver.
I sent comments on this that seem to have been mostly ignored:
https://lore.kernel.org/r/20231016172742.GA1215127@bhelgaas
After this series, we have both:
arch/sh/drivers/pci/pci-sh7751.c
drivers/pci/controller/pci-sh7751.c
They don't *look* very similar, so maybe we need both. But I don't know what the difference is.
Also git am complains when applying this series (also mentioned in the previous email above):
Applying: sh: passing FDT address to kernel startup. .git/rebase-apply/patch:25: trailing whitespace.
warning: 1 line adds whitespace errors.
Applying: irqchip: SH7751 IRL external encoder with enable gate. .git/rebase-apply/patch:33: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
Quoted 7 lines
Signed-off-by Yoshinori Sato <[email protected]>--- drivers/pci/controller/Kconfig | 9 + drivers/pci/controller/Makefile | 1 + drivers/pci/controller/pci-sh7751.c | 293 ++++++++++++++++++++++++++++ 3 files changed, 303 insertions(+) create mode 100644 drivers/pci/controller/pci-sh7751.c
Bjorn
Yoshinori Sato
maintainerPATCH v4 13/37 dt-bindings: pci: pci-sh7751: Add SH7751 PCI
In reply to Yoshinori SatoRenesas SH7751 PCI Controller json-schema.
--- .../bindings/pci/renesas,sh7751-pci.yaml | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 Documentation/devicetree/bindings/pci/renesas,sh7751-pci.yaml
Documentation/devicetree/bindings/pci/renesas,sh7751-pci.yaml new file +123 -0
@@ -0,0 +1,123 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pci/renesas,sh7751-pci.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas SH7751 PCI Host controller + +maintainers: + - Yoshinori Sato <[email protected]> + +allOf: + - $ref: /schemas/pci/pci-bus.yaml# + +properties: + compatible: + items: + - enum: + - renesas,sh7751-pci + + reg: + minItems: 3 + maxItems: 3 + + "#interrupt-cells": + const: 1 + + "#address-cells": + const: 3 + + "#size-cells": + const: 2 + + ranges: true + + interrupt-controller: true + + renesas,bcr1: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + SH7751 PCIC PCIBCR1 value. This value makes add the value of BSC's BCR1. + + renesas,mcrmask: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + SH7751 PCIC PCIMCR value. This value makes clear bit in the value of BSC's MCR. + + renesas,intm: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + SH7751 PCIC PCIINTM value. + + renesas,aintm: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + SH7751 PCIC PCIIANTM value. + + renesas,lsr: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + SH7751 PCIC PCILSR0 and PCILSR1 values. + First word is PCILSR0, Second word is PCILSR1. + + renesas,lar: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + SH7751 PCIC PCILSA0 and PCILAR1 values. + First word is PCILAR0, Second word is PCILAR1. + + renesas,dmabt: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + SH7751 PCIC PCIDMABT value. + + renesas,pintm: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + SH7751 PCIC PCIPINTM value. + + renesas,config: + $ref: /schemas/types.yaml#/definitions/uint32-array + description: | + SH7751 PCIC PCICONFIG values array. Register Number and value pair list. + +required: + - compatible + - reg + - "#interrupt-cells" + - "#address-cells" + - "#size-cells" + - ranges + - interrupt-map + - interrupt-map-mask + +unevaluatedProperties: false + +examples: + - | + pci@fe200000 { + compatible = "renesas,sh7751-pci"; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; + ranges = <0x02000000 0 0xfd000000 0xfd000000 0 0x01000000>, + <0x01000000 0 0x00000000 0xfe240000 0 0x00040000>; + reg = <0xfe200000 0x0400>, + <0x0c000000 0x04000000>, + <0xff800000 0x0030>; + #interrupt-cells = <1>; + interrupt-map = <0x0000 0 0 1 &julianintc 5>, + <0x0000 0 0 2 &julianintc 6>, + <0x0000 0 0 3 &julianintc 7>, + <0x0000 0 0 4 &julianintc 8>, + <0x0800 0 0 1 &julianintc 6>, + <0x0800 0 0 2 &julianintc 7>, + <0x0800 0 0 3 &julianintc 8>, + <0x0800 0 0 4 &julianintc 5>, + <0x1000 0 0 1 &julianintc 7>, + <0x1000 0 0 2 &julianintc 8>, + <0x1000 0 0 3 &julianintc 5>, + <0x1000 0 0 4 &julianintc 6>; + interrupt-map-mask = <0x1800 0 0 7>; + };
Signature · 1 line
2.39.2
Re: [PATCH v4 13/37] dt-bindings: pci: pci-sh7751: Add SH7751 PCI
Quoted 4 lines · Yoshinori Sato
Renesas SH7751 PCI Controller json-schema.
Signed-off-by Yoshinori Sato <[email protected]>---
NAK, not tested. If it is not ready for review - please add some prefix "DO NOT MERGE" etc.
Please use scripts/get_maintainers.pl to get a list of necessary people and lists to CC. It might happen, that command when run on an older kernel, gives you outdated entries. Therefore please be sure you base your patches on recent Linux kernel.
You missed at least devicetree list (maybe more), so this won't be tested by automated tooling. Performing review on untested code might be a waste of time, thus I will skip this patch entirely till you follow the process allowing the patch to be tested.
Please kindly resend and include all necessary To/Cc entries.
Best regards,
Krzysztof
Yoshinori Sato
maintainerPATCH v4 14/37 dt-bindings: clock: sh7750-cpg: Add renesas,sh7750-cpg header.
In reply to Yoshinori SatoSH7750 CPG Clock output define.
--- .../bindings/clock/renesas,sh7750-cpg.yaml | 103 ++++++++++++++++++ include/dt-bindings/clock/sh7750-cpg.h | 26 +++++ 2 files changed, 129 insertions(+) create mode 100644 Documentation/devicetree/bindings/clock/renesas,sh7750-cpg.yaml create mode 100644 include/dt-bindings/clock/sh7750-cpg.h
Documentation/devicetree/bindings/clock/renesas,sh7750-cpg.yaml new file +103 -0
@@ -0,0 +1,103 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/clock/renesas,sh7750-cpg.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas SH7750/7751 Clock Pulse Generator (CPG) + +maintainers: + - Yoshinori Sato <[email protected]> + +description: + The Clock Pulse Generator (CPG) generates core clocks for the SoC. It + includes PLLs, and variable ratio dividers. + + The CPG may also provide a Clock Domain for SoC devices, in combination with + the CPG Module Stop (MSTP) Clocks. + +properties: + compatible: + enum: + - renesas,sh7750-cpg # SH7750 + - renesas,sh7750s-cpg # SH775S + - renesas,sh7750r-cpg # SH7750R + - renesas,sh7751-cpg # SH7751 + - renesas,sh7751r-cpg # SH7751R + + reg: true + + reg-names: true + + clocks: true + + clock-names: true + + '#clock-cells': + const: 1 + + renesas,mode: + description: Board-specific settings of the MD[0-2] pins on SoC + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 6 + + '#power-domain-cells': + const: 0 + +required: + - compatible + - reg + - reg-names + - clocks + - clock-names + - '#clock-cells' + +allOf: + - if: + properties: + compatible: + contains: + enum: + - renesas,sh7750-cpg + - renesas,sh7750s-cpg + then: + properties: + reg: + maxItems: 1 + reg-names: + items: + - const: FRQCR + + - if: + properties: + compatible: + contains: + enum: + - renesas,sh7750r-cpg + - renesas,sh7751-cpg + - renesas,sh7751r-cpg + then: + properties: + reg: + maxItems: 2 + reg-names: + items: + - const: FRQCR + - const: CLKSTP00 + +additionalProperties: false + +examples: + - | + #include <dt-bindings/clock/sh7750-cpg.h> + cpg: clock-controller@ffc00000 { + #clock-cells = <1>; + #power-domain-cells = <0>; + compatible = "renesas,sh7751r-cpg"; + clocks = <&xtal>; + clock-names = "xtal"; + reg = <0xffc00000 20>, <0xfe0a0000 16>; + reg-names = "FRQCR", "CLKSTP00"; + renesas,mode = <0>; + };
include/dt-bindings/clock/sh7750-cpg.h new file +26 -0
@@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +* +* Copyright 2023 Yoshinori Sato +*/ + +#ifndef __DT_BINDINGS_CLOCK_SH7750_H__ +#define __DT_BINDINGS_CLOCK_SH7750_H__ + +#define SH7750_CPG_PLLOUT 0 + +#define SH7750_CPG_FCK 1 +#define SH7750_CPG_BCK 2 +#define SH7750_CPG_ICK 3 + +#define SH7750_MSTP_SCI 4 +#define SH7750_MSTP_RTC 5 +#define SH7750_MSTP_TMU012 6 +#define SH7750_MSTP_SCIF 7 +#define SH7750_MSTP_DMAC 8 +#define SH7750_MSTP_UBC 9 +#define SH7750_MSTP_SQ 10 +#define SH7750_CSTP_INTC 11 +#define SH7750_CSTP_TMU34 12 +#define SH7750_CSTP_PCIC 13 + +#endif
Signature · 1 line
2.39.2
Re: [PATCH v4 14/37] dt-bindings: clock: sh7750-cpg: Add renesas,sh7750-cpg header.
Quoted 3 lines · Yoshinori Sato
SH7750 CPG Clock output define.
Signed-off-by Yoshinori Sato <[email protected]>
My comments about lack of testing by automation apply to all the patches, so I will skip commenting. All my previous comments apply to this and to others.
My comments from previous versions - v1, v2 and v3 including trivialities like full stop in subject, apply as well, so please implement them all for v5.
Best regards,
Krzysztof
Yoshinori Sato
maintainerPATCH v4 15/37 clk: Compatible with narrow registers
In reply to Yoshinori Satodivider and gate only support 32-bit registers.
Older hardware uses narrower registers, so I want to be able to handle 8-bit and 16-bit wide registers.
--- drivers/clk/clk-divider.c | 56 ++++++++++++++++++++++++------------ drivers/clk/clk-gate.c | 56 +++++++++++++++++++++++++++--------- include/linux/clk-provider.h | 22 ++++++++++---- 3 files changed, 97 insertions(+), 37 deletions(-)
drivers/clk/clk-divider.c +37 -19
@@ -26,20 +26,38 @@* parent - fixed parent. No clk_set_parent support */ -static inline u32 clk_div_readl (struct clk_divider *divider) -{ -if (divider->flags &CLK_DIVIDER_BIG_ENDIAN ) -return ioread32be (divider->reg); - -return readl (divider->reg); +static inline u32 clk_div_read (struct clk_divider *divider) +{ +if (divider->flags &CLK_DIVIDER_REG_8BIT ) +return readb (divider->reg); +else if (divider->flags &CLK_DIVIDER_REG_16BIT ) { +if (divider->flags &CLK_DIVIDER_BIG_ENDIAN ) +return ioread16be (divider->reg); +else +return readw (divider->reg); + }else { +if (divider->flags &CLK_DIVIDER_BIG_ENDIAN ) +return ioread32be (divider->reg); +else +return readl (divider->reg); + } } -static inline void clk_div_writel (struct clk_divider *divider,u32 val) +static inline void clk_div_write (struct clk_divider *divider,u32 val) { -if (divider->flags &CLK_DIVIDER_BIG_ENDIAN ) -iowrite32be (val, divider->reg); -else -writel (val, divider->reg); +if (divider->flags &CLK_DIVIDER_REG_8BIT ) +writeb (val, divider->reg); +else if (divider->flags &CLK_DIVIDER_REG_16BIT ) { +if (divider->flags &CLK_DIVIDER_BIG_ENDIAN ) +iowrite16be (val, divider->reg); +else +writew (val, divider->reg); + }else { +if (divider->flags &CLK_DIVIDER_BIG_ENDIAN ) +iowrite32be (val, divider->reg); +else +writel (val, divider->reg); + } } static unsigned int _get_table_maxdiv(const struct clk_div_table *table,
@@ -152,7 +170,7 @@ static unsigned long clk_divider_recalc_rate(struct clk_hw *hw,struct clk_divider *divider =to_clk_divider (hw);unsigned int val; - val =clk_div_readl (divider) >> divider->shift; + val =clk_div_read (divider) >> divider->shift; val &=clk_div_mask (divider->width); return divider_recalc_rate(hw, parent_rate, val, divider->table,
@@ -434,7 +452,7 @@ static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,if (divider->flags &CLK_DIVIDER_READ_ONLY ) {u32 val; - val =clk_div_readl (divider) >> divider->shift; + val =clk_div_read (divider) >> divider->shift; val &=clk_div_mask (divider->width); return divider_ro_round_rate(hw, rate, prate, divider->table,
@@ -455,7 +473,7 @@ static int clk_divider_determine_rate(struct clk_hw *hw,if (divider->flags &CLK_DIVIDER_READ_ONLY ) {u32 val; - val =clk_div_readl (divider) >> divider->shift; + val =clk_div_read (divider) >> divider->shift; val &=clk_div_mask (divider->width); return divider_ro_determine_rate(hw, req, divider->table,
@@ -505,11 +523,11 @@ static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,if (divider->flags &CLK_DIVIDER_HIWORD_MASK ) { val =clk_div_mask (divider->width) << (divider->shift +16 ); }else { - val =clk_div_readl (divider); + val =clk_div_read (divider); val &= ~(clk_div_mask (divider->width) << divider->shift); } val |= (u32 )value << divider->shift; -clk_div_writel (divider, val); +clk_div_write (divider, val);if (divider->lock)spin_unlock_irqrestore (divider->lock, flags);
@@ -538,7 +556,7 @@ struct clk_hw *__clk_hw_register_divider(struct device *dev, struct device_node *np, const char *name, const char *parent_name, const struct clk_hw *parent_hw, const struct clk_parent_data *parent_data, unsigned long flags, - void __iomem *reg, u8 shift, u8 width, u8 clk_divider_flags, + void __iomem *reg, u8 shift, u8 width, u32 clk_divider_flags, const struct clk_div_table *table, spinlock_t *lock) { struct clk_divider *div;
@@ -610,7 +628,7 @@ EXPORT_SYMBOL_GPL(__clk_hw_register_divider);struct clk *clk_register_divider_table (struct device *dev,const char *name,const char *parent_name,unsigned long flags,void __iomem *reg,u8 shift,u8 width, -u8 clk_divider_flags,const struct clk_div_table *table, +u32 clk_divider_flags,const struct clk_div_table *table,spinlock_t *lock) {struct clk_hw *hw;
@@ -664,7 +682,7 @@ struct clk_hw *__devm_clk_hw_register_divider(struct device *dev, struct device_node *np, const char *name, const char *parent_name, const struct clk_hw *parent_hw, const struct clk_parent_data *parent_data, unsigned long flags, - void __iomem *reg, u8 shift, u8 width, u8 clk_divider_flags, + void __iomem *reg, u8 shift, u8 width, u32 clk_divider_flags, const struct clk_div_table *table, spinlock_t *lock) { struct clk_hw **ptr, *hw;
drivers/clk/clk-gate.c +43 -13
90 lines not on this page · raw message
include/linux/clk-provider.h +17 -5
@@ -508,12 +508,16 @@ void of_fixed_clk_setup(struct device_node *np);* CLK_GATE_BIG_ENDIAN - by default little endian register accesses are used for * the gate register. Setting this flag makes the register accesses big * endian. +* CLK_GATE_REG_8BIT - by default 32bit register accesses are used for +* the gate register. Setting this flag makes the register accesses 8bit. +* CLK_GATE_REG_16BIT - by default 32bit register accesses are used for +* the gate register. Setting this flag makes the register accesses 16bit. */ struct clk_gate {struct clk_hw hw;void __iomem *reg;u8 bit_idx; -u8 flags; +u32 flags;spinlock_t *lock; };
@@ -522,6 +526,8 @@ struct clk_gate {#define CLK_GATE_SET_TO_DISABLE BIT(0)#define CLK_GATE_HIWORD_MASK BIT(1)#define CLK_GATE_BIG_ENDIAN BIT(2) +#define CLK_GATE_REG_8BIT BIT(3) +#define CLK_GATE_REG_16BIT BIT(4)extern const struct clk_ops clk_gate_ops; struct clk_hw *__clk_hw_register_gate(struct device *dev,
@@ -675,13 +681,17 @@ struct clk_div_table {* CLK_DIVIDER_BIG_ENDIAN - By default little endian register accesses are used * for the divider register. Setting this flag makes the register accesses * big endian. +* CLK_DIVIDER_REG_8BIT - by default 32bit register accesses are used for +* the gate register. Setting this flag makes the register accesses 8bit. +* CLK_DIVIDER_REG_16BIT - by default 32bit register accesses are used for +* the gate register. Setting this flag makes the register accesses 16bit. */ struct clk_divider {struct clk_hw hw;void __iomem *reg;u8 shift;u8 width; -u8 flags; +u32 flags;const struct clk_div_table *table;spinlock_t *lock; };
@@ -697,6 +707,8 @@ struct clk_divider {#define CLK_DIVIDER_READ_ONLY BIT(5)#define CLK_DIVIDER_MAX_AT_ZERO BIT(6)#define CLK_DIVIDER_BIG_ENDIAN BIT(7) +#define CLK_DIVIDER_REG_8BIT BIT(8) +#define CLK_DIVIDER_REG_16BIT BIT(9)extern const struct clk_ops clk_divider_ops;extern const struct clk_ops clk_divider_ro_ops;
@@ -726,18 +738,18 @@ struct clk_hw *__clk_hw_register_divider(struct device *dev, struct device_node *np, const char *name, const char *parent_name, const struct clk_hw *parent_hw, const struct clk_parent_data *parent_data, unsigned long flags, - void __iomem *reg, u8 shift, u8 width, u8 clk_divider_flags, + void __iomem *reg, u8 shift, u8 width, u32 clk_divider_flags, const struct clk_div_table *table, spinlock_t *lock);struct clk_hw *__devm_clk_hw_register_divider (struct device *dev,struct device_node *np,const char *name,const char *parent_name,const struct clk_hw *parent_hw,const struct clk_parent_data *parent_data,unsigned long flags, -void __iomem *reg,u8 shift,u8 width,u8 clk_divider_flags, +void __iomem *reg,u8 shift,u8 width,u32 clk_divider_flags,const struct clk_div_table *table,spinlock_t *lock);struct clk *clk_register_divider_table (struct device *dev,const char *name,const char *parent_name,unsigned long flags,void __iomem *reg,u8 shift,u8 width, -u8 clk_divider_flags,const struct clk_div_table *table, +u32 clk_divider_flags,const struct clk_div_table *table,spinlock_t *lock);/** * clk_register_divider - register a divider clock with the clock framework
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 16/37 clk: renesas: Add SH7750/7751 CPG Driver
In reply to Yoshinori SatoRenesas SH7750 and SH7751 series CPG driver. This driver supported frequency control and clock gating.
--- drivers/clk/renesas/Kconfig | 16 +- drivers/clk/renesas/Makefile | 1 + drivers/clk/renesas/clk-sh7750.c | 498 +++++++++++++++++++++++++++++++ 3 files changed, 513 insertions(+), 2 deletions(-) create mode 100644 drivers/clk/renesas/clk-sh7750.c
drivers/clk/renesas/Kconfig +14 -2
@@ -1,8 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 config CLK_RENESAS - bool "Renesas SoC clock support" if COMPILE_TEST && !ARCH_RENESAS - default y if ARCH_RENESAS + bool "Renesas SoC clock support" if COMPILE_TEST && !ARCH_RENESAS && !SUPERH + default y if ARCH_RENESAS || SUPERH select CLK_EMEV2 if ARCH_EMEV2 select CLK_RZA1 if ARCH_R7S72100 select CLK_R7S9210 if ARCH_R7S9210
@@ -40,6 +40,9 @@ config CLK_RENESAS select CLK_R9A08G045 if ARCH_R9A08G045 select CLK_R9A09G011 if ARCH_R9A09G011 select CLK_SH73A0 if ARCH_SH73A0 + select CLK_SH7750 if CPU_SUBTYPE_SH7750 || CPU_SUBTYPE_SH7750S || \ + CPU_SUBTYPE_SH7750R || CPU_SUBTYPE_SH7751 || \ + CPU_SUBTYPE_SH7751R if CLK_RENESAS
@@ -193,6 +196,10 @@ config CLK_SH73A0 select CLK_RENESAS_CPG_MSTP select CLK_RENESAS_DIV6 +config CLK_SH7750 + bool "SH7750/7751 family clock support" if COMPILE_TEST + help + This is a driver for SH7750 / SH7751 CPG. # Family config CLK_RCAR_CPG_LIB
@@ -223,6 +230,11 @@ config CLK_RZG2L bool "Renesas RZ/{G2L,G2UL,G3S,V2L} family clock support" if COMPILE_TEST select RESET_CONTROLLER +config CLK_SH7750 + bool "Renesas SH7750/7751 family clock support" if COMPILE_TEST + help + This is a driver for SH7750 / SH7751 CPG. + # Generic config CLK_RENESAS_CPG_MSSR bool "CPG/MSSR clock support" if COMPILE_TEST
drivers/clk/renesas/Makefile +1 -0
@@ -37,6 +37,7 @@ obj-$(CONFIG_CLK_R9A07G054) += r9a07g044-cpg.o obj-$(CONFIG_CLK_R9A08G045) += r9a08g045-cpg.o obj-$(CONFIG_CLK_R9A09G011) += r9a09g011-cpg.o obj-$(CONFIG_CLK_SH73A0) += clk-sh73a0.o +obj-$(CONFIG_CLK_SH7750) += clk-sh7750.o # Family obj-$(CONFIG_CLK_RCAR_CPG_LIB) += rcar-cpg-lib.o
drivers/clk/renesas/clk-sh7750.c new file +498 -0
498 lines not on this page · raw message
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 17/37 irqchip: Add SH7751 INTC driver
In reply to Yoshinori SatoRenesas SH7751 Internal interrupt controller driver.
--- drivers/irqchip/Kconfig | 8 + drivers/irqchip/Makefile | 1 + drivers/irqchip/irq-renesas-sh7751.c | 290 +++++++++++++++++++++++++++ 3 files changed, 299 insertions(+) create mode 100644 drivers/irqchip/irq-renesas-sh7751.c
drivers/irqchip/Kconfig +8 -0
@@ -679,4 +679,12 @@ config SUNPLUS_SP7021_INTC chained controller, routing all interrupt source in P-Chip to the primary controller on C-Chip. +config RENESAS_SH7751_INTC + bool "Renesas SH7751 Interrupt Controller" + depends on SH_DEVICE_TREE || COMPILE_TEST + select IRQ_DOMAIN_HIERARCHY + help + Support for the Renesas SH7751 On-chip interrupt controller. + And external interrupt encoder for some targets. + endmenu
drivers/irqchip/Makefile +1 -0
@@ -120,3 +120,4 @@ obj-$(CONFIG_IRQ_IDT3243X) += irq-idt3243x.o obj-$(CONFIG_APPLE_AIC) += irq-apple-aic.o obj-$(CONFIG_MCHP_EIC) += irq-mchp-eic.o obj-$(CONFIG_SUNPLUS_SP7021_INTC) += irq-sp7021-intc.o +obj-$(CONFIG_RENESAS_SH7751_INTC) += irq-renesas-sh7751.o
drivers/irqchip/irq-renesas-sh7751.c new file +290 -0
290 lines not on this page · raw message
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 18/37 dt-bindings: interrupt-controller: renesas,sh7751-intc: Add json-schema
In reply to Yoshinori SatoRenesas SH7751 INTC json-schema.
--- .../renesas,sh7751-intc.yaml | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/renesas,sh7751-intc.yaml
Documentation/devicetree/bindings/interrupt-controller/renesas,sh7751-intc.yaml new file +105 -0
@@ -0,0 +1,105 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/interrupt-controller/renesas,sh7751-intc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas SH7751 Interrupt Controller + +maintainers: + - Yoshinori Sato <[email protected]> + +properties: + compatible: + items: + - const: renesas,sh7751-intc + + '#interrupt-cells': + const: 1 + + interrupt-controller: true + + reg: + maxItems: 2 + + reg-names: + items: + - const: ICR + - const: INTPRI00 + + renesas,icr-irlm: + type: boolean + description: If true ICR.IRLM=1 + + renesas,ipr-map: + $ref: /schemas/types.yaml#/definitions/uint32-array + description: | + IRQ to IPR mapping definition. + 1st - INTEVT + 2nd - Register + 3rd - bit index + +required: + - compatible + - '#interrupt-cells' + - interrupt-controller + - reg + - reg-names + - renesas,ipr-map + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/sh_intc.h> + shintc: interrupt-controller@ffd00000 { + compatible = "renesas,sh7751-intc"; + #interrupt-cells = <1>; + interrupt-controller; + reg = <0xffd00000 14>, <0xfe080000 128>; + reg-names = "ICR", "INTPRI00"; + renesas,ipr-map = <0x240 IPRD IPR_B12>, /* IRL0 */ + <0x2a0 IPRD IPR_B8>, /* IRL1 */ + <0x300 IPRD IPR_B4>, /* IRL2 */ + <0x360 IPRD IPR_B0>, /* IRL3 */ + <0x400 IPRA IPR_B12>, /* TMU0 */ + <0x420 IPRA IPR_B8>, /* TMU1 */ + <0x440 IPRA IPR_B4>, /* TMU2 TNUI */ + <0x460 IPRA IPR_B4>, /* TMU2 TICPI */ + <0x480 IPRA IPR_B0>, /* RTC ATI */ + <0x4a0 IPRA IPR_B0>, /* RTC PRI */ + <0x4c0 IPRA IPR_B0>, /* RTC CUI */ + <0x4e0 IPRB IPR_B4>, /* SCI ERI */ + <0x500 IPRB IPR_B4>, /* SCI RXI */ + <0x520 IPRB IPR_B4>, /* SCI TXI */ + <0x540 IPRB IPR_B4>, /* SCI TEI */ + <0x560 IPRB IPR_B12>, /* WDT */ + <0x580 IPRB IPR_B8>, /* REF RCMI */ + <0x5a0 IPRB IPR_B4>, /* REF ROVI */ + <0x600 IPRC IPR_B0>, /* H-UDI */ + <0x620 IPRC IPR_B12>, /* GPIO */ + <0x640 IPRC IPR_B8>, /* DMAC DMTE0 */ + <0x660 IPRC IPR_B8>, /* DMAC DMTE1 */ + <0x680 IPRC IPR_B8>, /* DMAC DMTE2 */ + <0x6a0 IPRC IPR_B8>, /* DMAC DMTE3 */ + <0x6c0 IPRC IPR_B8>, /* DMAC DMAE */ + <0x700 IPRC IPR_B4>, /* SCIF ERI */ + <0x720 IPRC IPR_B4>, /* SCIF RXI */ + <0x740 IPRC IPR_B4>, /* SCIF BRI */ + <0x760 IPRC IPR_B4>, /* SCIF TXI */ + <0x780 IPRC IPR_B8>, /* DMAC DMTE4 */ + <0x7a0 IPRC IPR_B8>, /* DMAC DMTE5 */ + <0x7c0 IPRC IPR_B8>, /* DMAC DMTE6 */ + <0x7e0 IPRC IPR_B8>, /* DMAC DMTE7 */ + <0xa00 INTPRI00 IPR_B0>, /* PCIC PCISERR */ + <0xa20 INTPRI00 IPR_B4>, /* PCIC PCIDMA3 */ + <0xa40 INTPRI00 IPR_B4>, /* PCIC PCIDMA2 */ + <0xa60 INTPRI00 IPR_B4>, /* PCIC PCIDMA1 */ + <0xa80 INTPRI00 IPR_B4>, /* PCIC PCIDMA0 */ + <0xaa0 INTPRI00 IPR_B4>, /* PCIC PCIPWON */ + <0xac0 INTPRI00 IPR_B4>, /* PCIC PCIPWDWN */ + <0xae0 INTPRI00 IPR_B4>, /* PCIC PCIERR */ + <0xb00 INTPRI00 IPR_B8>, /* TMU3 */ + <0xb80 INTPRI00 IPR_B12>; /* TMU4 */ + }; +...
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 19/37 irqchip: SH7751 IRL external encoder with enable gate.
In reply to Yoshinori SatoSH7751 have 15 level external interrupt.
It is typically connected to the CPU through a priority encoder that can suppress requests.
This driver provides a way to control those hardware with irqchip.
--- drivers/irqchip/Kconfig | 7 + drivers/irqchip/Makefile | 2 + drivers/irqchip/irq-renesas-sh7751irl.c | 227 ++++++++++++++++++++++++ 3 files changed, 236 insertions(+) create mode 100644 drivers/irqchip/irq-renesas-sh7751irl.c
drivers/irqchip/Kconfig +7 -0
@@ -687,4 +687,11 @@ config RENESAS_SH7751_INTC Support for the Renesas SH7751 On-chip interrupt controller. And external interrupt encoder for some targets. +config RENESAS_SH7751IRL_INTC + bool "Renesas SH7751 based target IRL encoder support." + depends on RENESAS_SH7751_INTC + help + Support for External Interrupt encoder + on the some Renesas SH7751 based target. + endmenu
drivers/irqchip/Makefile +2 -0
@@ -121,3 +121,5 @@ obj-$(CONFIG_APPLE_AIC) += irq-apple-aic.o obj-$(CONFIG_MCHP_EIC) += irq-mchp-eic.o obj-$(CONFIG_SUNPLUS_SP7021_INTC) += irq-sp7021-intc.o obj-$(CONFIG_RENESAS_SH7751_INTC) += irq-renesas-sh7751.o +obj-$(CONFIG_RENESAS_SH7751IRL_INTC) += irq-renesas-sh7751irl.o +
drivers/irqchip/irq-renesas-sh7751irl.c new file +227 -0
227 lines not on this page · raw message
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 20/37 dt-bindings: interrupt-controller: renesas,sh7751-irl-ext: Add json-schema
In reply to Yoshinori SatoRenesas SH7751 external interrupt encoder json-schema.
--- .../renesas,sh7751-irl-ext.yaml | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/renesas,sh7751-irl-ext.yaml
Documentation/devicetree/bindings/interrupt-controller/renesas,sh7751-irl-ext.yaml new file +83 -0
@@ -0,0 +1,83 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/interrupt-controller/renesas,sh7751-irl-ext.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas SH7751 IRL external encoder with enable regs. + +maintainers: + - Yoshinori Sato <[email protected]> + +description: | + This is the generally used external interrupt encoder on SH7751 based boards. + +properties: + compatible: + items: + - const: renesas,sh7751-irl-ext + + reg: + minItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 1 + + '#address-cells': + const: 0 + + '#size-cells': + const: 0 + + renesas,width: + description: Enable register width + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [8, 16, 32] + + renesas,set-to-disable: + $ref: /schemas/types.yaml#/definitions/flag + description: Setting this flag to 1 disables it. + + renesas,enable-bit: + $ref: /schemas/types.yaml#/definitions/uint32-array + description: | + IRL enable register bit mapping + 1st word IRL + 2nd word bit index of enable register + +required: + - compatible + - reg + - interrupt-controller + - '#interrupt-cells' + - renesas,width + - renesas,enable-bit + +additionalProperties: false + +examples: + - | + r2dintc: sh7751irl_encoder@a4000000 { + compatible = "renesas,sh7751-irl-ext"; + reg = <0xa4000000 0x02>; + interrupt-controller; + #address-cells = <0>; + #size-cells = <0>; + #interrupt-cells = <1>; + renesas,width = <16>; + renesas,enable-bit = <0 11>, /* PCI INTD */ + <1 9>, /* CF IDE */ + <2 8>, /* CF CD */ + <3 12>, /* PCI INTC */ + <4 10>, /* SM501 */ + <5 6>, /* KEY */ + <6 5>, /* RTC ALARM */ + <7 4>, /* RTC T */ + <8 7>, /* SDCARD */ + <9 14>, /* PCI INTA */ + <10 13>, /* PCI INTB */ + <11 0>, /* EXT */ + <12 15>; /* TP */ + };
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 21/37 serial: sh-sci: fix SH4 OF support.
In reply to Yoshinori Sato- fix earlycon name.
- fix earlyprintk hung (NULL pointer reference).
--- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/sh-sci.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-)
drivers/tty/serial/Kconfig +1 -1
@@ -658,7 +658,7 @@ config SERIAL_SH_SCI_EARLYCON depends on SERIAL_SH_SCI=y select SERIAL_CORE_CONSOLE select SERIAL_EARLYCON - default ARCH_RENESAS + default ARCH_RENESAS || SUPERH config SERIAL_SH_SCI_DMA bool "DMA support" if EXPERT
drivers/tty/serial/sh-sci.c +3 -3
@@ -2720,7 +2720,7 @@ static int sci_remap_port(struct uart_port *port)if (port->membase)return 0 ; -if (port->dev->of_node || (port->flags &UPF_IOREMAP )) { +if ((port->dev && port->dev->of_node) || (port->flags &UPF_IOREMAP )) { port->membase =ioremap (port->mapbase, sport->reg_size);if (unlikely (!port->membase)) {dev_err (port->dev,"can't remap port#%d\n" , port->line);
@@ -3555,8 +3555,8 @@ static int __init hscif_early_console_setup(struct earlycon_device *device,OF_EARLYCON_DECLARE (sci,"renesas,sci" , sci_early_console_setup);OF_EARLYCON_DECLARE (scif,"renesas,scif" , scif_early_console_setup); -OF_EARLYCON_DECLARE (scif,"renesas,scif-r7s9210" , rzscifa_early_console_setup); -OF_EARLYCON_DECLARE (scif,"renesas,scif-r9a07g044" , rzscifa_early_console_setup); +OF_EARLYCON_DECLARE (rzscifa,"renesas,scif-r7s9210" , rzscifa_early_console_setup); +OF_EARLYCON_DECLARE (rzscifa,"renesas,scif-r9a07g044" , rzscifa_early_console_setup);OF_EARLYCON_DECLARE (scifa,"renesas,scifa" , scifa_early_console_setup);OF_EARLYCON_DECLARE (scifb,"renesas,scifb" , scifb_early_console_setup);OF_EARLYCON_DECLARE (hscif,"renesas,hscif" , hscif_early_console_setup);
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 22/37 dt-bindings: serial: renesas,scif: Add scif-sh7751.
In reply to Yoshinori SatoAdd Renesas SH7751 SCIF.
--- Documentation/devicetree/bindings/serial/renesas,scif.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/serial/renesas,scif.yaml +1 -0
@@ -17,6 +17,7 @@ properties: oneOf: - items: - enum: + - renesas,scif-sh7751 # SH7751 - renesas,scif-r7s72100 # RZ/A1H - const: renesas,scif # generic SCIF compatible UART
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 23/37 dt-bindings: display: smi,sm501: SMI SM501 binding json-schema
In reply to Yoshinori SatoDefine SM501 functions and modes.
--- .../bindings/display/smi,sm501.yaml | 138 ++++++++++++++++++ include/dt-bindings/display/sm501.h | 25 ++++ 2 files changed, 163 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/smi,sm501.yaml create mode 100644 include/dt-bindings/display/sm501.h
Documentation/devicetree/bindings/display/smi,sm501.yaml new file +138 -0
@@ -0,0 +1,138 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/smi,sm501.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Silicon Motion SM501 Mobile Multimedia Companion Chip + +maintainers: + - Yoshinori Sato <[email protected]> + +description: | + These DT bindings describe the SM501. + +properties: + compatible: + const: + smi,sm501 + + reg: + maxItems: 2 + description: | + First entry: System Configuration register + Second entry: IO space (Display Controller register) + + interrupts: + description: SM501 interrupt to the cpu should be described here. + + interrupt-name: true + + mode: + $ref: /schemas/types.yaml#/definitions/string + description: select a video mode + + edid: + description: | + verbatim EDID data block describing attached display. + Data from the detailed timing descriptor will be used to + program the display controller. + + little-endian: + $ref: /schemas/types.yaml#/definitions/flag + description: available on big endian systems, to set different foreign endian. + big-endian: + $ref: /schemas/types.yaml#/definitions/flag + description: available on little endian systems, to set different foreign endian. + + swap-fb-endian: + $ref: /schemas/types.yaml#/definitions/flag + description: swap framebuffer byteorder. + + route-crt-panel: + $ref: /schemas/types.yaml#/definitions/flag + description: Panel output merge to CRT. + + crt: + description: CRT output control + + panel: + description: Panel output control + + bpp: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Color depth + + smi,flags: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Display control flags. + + smi,devices: + $ref: /schemas/types.yaml#/definitions/uint32 + description: SM501 device function select. + + smi,mclk: + $ref: /schemas/types.yaml#/definitions/uint32 + description: mclk frequency. + + smi,m1xclk: + $ref: /schemas/types.yaml#/definitions/uint32 + description: m1xclk frequency. + + smi,misc-timing: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Miscellaneous Timing reg value. + + smi,misc-control: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Miscellaneous Control reg value. + + smi,gpio-low: + $ref: /schemas/types.yaml#/definitions/uint32 + description: GPIO0 to 31 Control reg value. + + smi,gpio-high: + $ref: /schemas/types.yaml#/definitions/uint32 + description: GPIO32 to 63 Control reg value. + + smi,num-i2c: + $ref: /schemas/types.yaml#/definitions/uint32 + description: I2C channel number. + + smi,gpio-i2c: + $ref: /schemas/types.yaml#/definitions/uint32-array + minItems: 5 + description: | + GPIO I2C bus number + 1st field - I2C bus number + 2nd Field - GPIO SDA + 3rd Field - GPIO SCL + 4th Field - Timeout + 5th Field - udelay + +additionalProperties: false + +required: + - compatible + - reg + - interrupts + + +examples: + # MPC5200 + - | + display@1,0 { + compatible = "smi,sm501"; + reg = <0x00000000 0x00800000 + 0x03e00000 0x00200000>; + interrupts = <1 1 3>; + mode = "640x480-32@60"; + edid = [00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 + 00 00 01 04 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 f0 0a 80 fb 20 e0 25 10 32 60 + 02 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bd]; + };
include/dt-bindings/display/sm501.h new file +25 -0
@@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +/* Platform data definitions */ + +#define SM501FB_FLAG_USE_INIT_MODE (1<<0) +#define SM501FB_FLAG_DISABLE_AT_EXIT (1<<1) +#define SM501FB_FLAG_USE_HWCURSOR (1<<2) +#define SM501FB_FLAG_USE_HWACCEL (1<<3) +#define SM501FB_FLAG_PANEL_NO_FPEN (1<<4) +#define SM501FB_FLAG_PANEL_NO_VBIASEN (1<<5) +#define SM501FB_FLAG_PANEL_INV_FPEN (1<<6) +#define SM501FB_FLAG_PANEL_INV_VBIASEN (1<<7) + +#define SM501_USE_USB_HOST (1<<0) +#define SM501_USE_USB_SLAVE (1<<1) +#define SM501_USE_SSP0 (1<<2) +#define SM501_USE_SSP1 (1<<3) +#define SM501_USE_UART0 (1<<4) +#define SM501_USE_UART1 (1<<5) +#define SM501_USE_FBACCEL (1<<6) +#define SM501_USE_AC97 (1<<7) +#define SM501_USE_I2S (1<<8) +#define SM501_USE_GPIO (1<<9) + +#define SM501_USE_ALL (0xffffffff)
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 24/37 mfd: sm501: Convert platform_data to OF property
In reply to Yoshinori SatoVarious parameters of SM501 can be set using platform_data, so parameters cannot be passed in the DeviceTree target. Expands the parameters set in platform_data so that they can be specified using DeviceTree properties.
--- drivers/mfd/sm501.c | 70 +++++++++++++++++++++++++++++++++++ drivers/video/fbdev/sm501fb.c | 70 +++++++++++++++++++++++++++++++++-- include/linux/sm501.h | 3 +- 3 files changed, 138 insertions(+), 5 deletions(-)
drivers/mfd/sm501.c +70 -0
@@ -1370,6 +1370,69 @@ static int sm501_init_dev(struct sm501_devdata *sm)return 0 ; } +#ifdef CONFIG_OF +static void sm501_of_read_reg_init (struct device_node *np, +const char *propname,struct sm501_reg_init *val) +{ +u32 u32_val[2 ]; + +if (!of_property_read_u32_array (np, propname, u32_val,sizeof (u32_val))) { + val->set = u32_val[0 ]; + val->mask = u32_val[1 ]; + } +} + +static int sm501_parse_dt (struct sm501_devdata *sm,struct device_node *np) +{ +struct sm501_platdata *plat; +u32 u32_val; + + plat =devm_kzalloc (sm->dev,sizeof (*plat),GFP_KERNEL ); +if (!plat) +return -ENOMEM ; + + plat->init =devm_kzalloc (sm->dev,sizeof (*plat->init),GFP_KERNEL ); +if (!plat->init) +return -ENOMEM ; + +if (!of_property_read_u32 (np,"smi,devices" , &u32_val)) + plat->init->devices = u32_val; + +if (!of_property_read_u32 (np,"smi,mclk" , &u32_val)) + plat->init->mclk = u32_val; + +if (!of_property_read_u32 (np,"smi,m1xclk" , &u32_val)) + plat->init->m1xclk = u32_val; + +sm501_of_read_reg_init (np,"smi,misc-timing" , &plat->init->misc_timing); +sm501_of_read_reg_init (np,"smi,misc-control" , &plat->init->misc_control); +sm501_of_read_reg_init (np,"smi,gpio-low" , &plat->init->gpio_low); +sm501_of_read_reg_init (np,"smi,gpio-high" , &plat->init->gpio_high); + +#ifdef CONFIG_MFD_SM501_GPIO +if (plat->init->devices &SM501_USE_GPIO ) { +if (!of_property_read_u32_index (np,"smi,num-i2c" ,0 , &u32_val)) + plat->gpio_i2c_nr = u32_val; +else + plat->gpio_i2c_nr =0 ; + } +if (plat->gpio_i2c_nr >0 ) { +int sz_gpio; + + sz_gpio =sizeof (struct sm501_platdata_gpio_i2c ) * plat->gpio_i2c_nr; + plat->gpio_i2c =devm_kzalloc (sm->dev, sz_gpio,GFP_KERNEL ); +if (plat->gpio_i2c ==NULL ) +return -ENOMEM ; + +of_property_read_variable_u32 (np,"smi,gpio-i2c" , + plat->gpio_i2c, sz_gpio /sizeof (int )); + } +#endif /* CONFIG_MFD_SM501_GPIO */ + sm->platdata = plat; +return 0 ; +} +#endif /* CONFIG_OF */ +static int sm501_plat_probe (struct platform_device *dev) {struct sm501_devdata *sm;
@@ -1406,6 +1469,13 @@ static int sm501_plat_probe(struct platform_device *dev) goto err_res; } +#ifdef CONFIG_OF +if (dev->dev.of_node) { + ret =sm501_parse_dt (sm, dev->dev.of_node); +if (ret) + goto err_res; + } +#endif platform_set_drvdata (dev, sm); sm->regs =ioremap (sm->io_res->start,resource_size (sm->io_res));
drivers/video/fbdev/sm501fb.c +66 -4
91 lines not on this page · raw message
include/linux/sm501.h +2 -1
@@ -6,6 +6,8 @@* Vincent Sanders <[email protected]> */ +#include <dt-bindings/display/sm501.h> +extern int sm501_unit_power (struct device *dev,unsigned int unit,unsigned int to);
@@ -35,7 +37,6 @@ extern unsigned long sm501_modify_reg(struct device *dev, unsigned long clear); -/* Platform data definitions */ #define SM501FB_FLAG_USE_INIT_MODE (1<<0)#define SM501FB_FLAG_DISABLE_AT_EXIT (1<<1)
Signature · 1 line
2.39.2
Lee Jones
maintainerRe: [PATCH v4 24/37] mfd: sm501: Convert platform_data to OF property
Quoted 11 lines · Yoshinori Sato
Various parameters of SM501 can be set using
platform_data, so parameters cannot be passed in the DeviceTree target. Expands the parameters set inplatform_dataso that they can be specified using DeviceTree properties.Signed-off-by Yoshinori Sato <[email protected]>--- drivers/mfd/sm501.c | 70 +++++++++++++++++++++++++++++++++++ drivers/video/fbdev/sm501fb.c | 70 +++++++++++++++++++++++++++++++++-- include/linux/sm501.h | 3 +- 3 files changed, 138 insertions(+), 5 deletions(-)
Where are the Device Tree bindings? Do they already exist?
I'd be interested to see how well they fair with the DT maintainers.
drivers/mfd/sm501.c static int sm501_init_dev(struct sm501_devdata *sm) · line 1373
Quoted 9 lines
drivers/mfd/sm501.c +1
-0@@ -1370,6 +1370,69 @@ static int sm501_init_dev(struct sm501_devdata *sm)return 0 ; } +#ifdef CONFIG_OF
I very much dislike #ifery in C files.
Quoted 27 lines
drivers/mfd/sm501.c +27
-0+static void sm501_of_read_reg_init (struct device_node *np, +const char *propname,struct sm501_reg_init *val) +{ +u32 u32_val[2 ]; + +if (!of_property_read_u32_array (np, propname, u32_val,sizeof (u32_val))) { + val->set = u32_val[0 ]; + val->mask = u32_val[1 ]; + } +} + +static int sm501_parse_dt (struct sm501_devdata *sm,struct device_node *np) +{ +struct sm501_platdata *plat; +u32 u32_val; + + plat =devm_kzalloc (sm->dev,sizeof (*plat),GFP_KERNEL ); +if (!plat) +return -ENOMEM ; + + plat->init =devm_kzalloc (sm->dev,sizeof (*plat->init),GFP_KERNEL ); +if (!plat->init) +return -ENOMEM ; + +if (!of_property_read_u32 (np,"smi,devices" , &u32_val)) + plat->init->devices = u32_val; +
drivers/mfd/sm501.c static int sm501_init_dev(struct sm501_devdata *sm) · line 1410
Quoted 10 lines
drivers/mfd/sm501.c +10
-0+if (!of_property_read_u32 (np,"smi,mclk" , &u32_val)) + plat->init->mclk = u32_val; + +if (!of_property_read_u32 (np,"smi,m1xclk" , &u32_val)) + plat->init->m1xclk = u32_val; + +sm501_of_read_reg_init (np,"smi,misc-timing" , &plat->init->misc_timing); +sm501_of_read_reg_init (np,"smi,misc-control" , &plat->init->misc_control); +sm501_of_read_reg_init (np,"smi,gpio-low" , &plat->init->gpio_low); +sm501_of_read_reg_init (np,"smi,gpio-high" , &plat->init->gpio_high);
So all of these properties are optional?
drivers/mfd/sm501.c static int sm501_init_dev(struct sm501_devdata *sm) · line 1417
Quoted 6 lines
drivers/mfd/sm501.c +6
-0+#ifdef CONFIG_MFD_SM501_GPIO +if (plat->init->devices &SM501_USE_GPIO ) { +if (!of_property_read_u32_index (np,"smi,num-i2c" ,0 , &u32_val)) + plat->gpio_i2c_nr = u32_val; +else + plat->gpio_i2c_nr =0 ;
This is already zero, no?
drivers/mfd/sm501.c static int sm501_init_dev(struct sm501_devdata *sm) · line 1422
Quoted 5 lines
drivers/mfd/sm501.c +5
-0+ } +if (plat->gpio_i2c_nr >0 ) { +int sz_gpio; + + sz_gpio =sizeof (struct sm501_platdata_gpio_i2c ) * plat->gpio_i2c_nr;
sizeof(plat->gpio_i2c) * plat->gpio_i2c_nr ?
And put it inside the devm_kzalloc() call.
drivers/mfd/sm501.c static int sm501_init_dev(struct sm501_devdata *sm) · line 1424
Quoted 2 lines
drivers/mfd/sm501.c +2
-0+ plat->gpio_i2c =devm_kzalloc (sm->dev, sz_gpio,GFP_KERNEL ); +if (plat->gpio_i2c ==NULL )
if (!plat->gpio_i2c)
Quoted 15 lines
drivers/mfd/sm501.c +11
-0+return -ENOMEM ; + +of_property_read_variable_u32 (np,"smi,gpio-i2c" , + plat->gpio_i2c, sz_gpio /sizeof (int )); + } +#endif /* CONFIG_MFD_SM501_GPIO */ + sm->platdata = plat; +return 0 ; +} +#endif /* CONFIG_OF */ +static int sm501_plat_probe (struct platform_device *dev) {struct sm501_devdata *sm;
drivers/mfd/sm501.c static int sm501_plat_probe(struct platform_device *dev) · line 1473
Quoted 5 lines
drivers/mfd/sm501.c +2
-0@@ -1406,6 +1469,13 @@ static int sm501_plat_probe(struct platform_device *dev) goto err_res; } +#ifdef CONFIG_OF +if (dev->dev.of_node) {
if (IS_ENABLED(CONFIG_OF) && dev->dev.of_node)
... and let the compiler do the rest.
Quoted 54 lines
drivers/mfd/sm501.c +5
-0+ ret =sm501_parse_dt (sm, dev->dev.of_node); +if (ret) + goto err_res; + } +#endif platform_set_drvdata (dev, sm); sm->regs =ioremap (sm->io_res->start,resource_size (sm->io_res));drivers/video/fbdev/sm501fb.c +38
-0@@ -1932,10 +1932,62 @@ static int sm501fb_start_one(struct sm501fb_info *info,return 0 ; } +#if defined(CONFIG_OF ) +static struct sm501_platdata_fbsub *read_fbsub (struct device_node *np,const char *ch_name) +{ +struct sm501_platdata_fbsub *fbsub =NULL ; +struct fb_videomode *def_mode; +struct device_node *child; +const void *prop; +u32 flags; +u32 bpp; +int len; + + child =of_get_child_by_name (np, ch_name); +if (child ==NULL ) +return NULL ; + + prop =of_get_property (child,"edid" , &len); +if (prop && len ==EDID_LENGTH ) { +struct fb_monspecs *specs; +u8 *edid; + + edid =kmemdup (prop,EDID_LENGTH ,GFP_KERNEL ); +if (edid) { + specs =kzalloc (sizeof (*specs),GFP_KERNEL ); +if (specs) { +fb_edid_to_monspecs (edid, specs); + def_mode = specs->modedb; + } +kfree (specs); + } +kfree (edid); + } + +if (of_property_read_u32 (child,"bpp" , &bpp)) + bpp =0 ; +if (of_property_read_u32 (child,"smi,flags" , &flags)) + flags =0 ; + +if (def_mode || bpp || flags) {
drivers/video/fbdev/sm501fb.c static int sm501fb_start_one(struct sm501fb_info *info, · line 1982
Quoted 10 lines
drivers/video/fbdev/sm501fb.c +10
-0+ fbsub =kzalloc (sizeof (*fbsub),GFP_KERNEL ); +if (fbsub) { + fbsub->def_mode = def_mode; + fbsub->def_bpp = bpp; + fbsub->flags = flags; + } + } +return fbsub; +} +#endif
All of this needs moving to the display driver. And I have suspicions that all of the new code above should live there too.
Quoted 65 lines
drivers/video/fbdev/sm501fb.c +17
-4static int sm501fb_probe (struct platform_device *pdev) { -struct sm501fb_info *info;struct device *dev = &pdev->dev; +struct sm501fb_info *info; +const void *prop; +const char *cp; +int len;int ret;/* allocate our framebuffers */ @@ -1957,9 +2009,7 @@ static int sm501fb_probe(struct platform_device *pdev)int found =0 ;#if defined(CONFIG_OF )struct device_node *np = pdev->dev.parent->of_node; -const u8 *prop; -const char *cp; -int len; +struct sm501_platdata_fbsub *sub; info->pdata = &sm501fb_def_pdata;if (np) {@@ -1974,6 +2024,18 @@ static int sm501fb_probe(struct platform_device *pdev)if (info->edid_data) found = 1; } +if (of_property_read_bool (np,"route-crt-panel" )) + info->pdata->fb_route =SM501_FB_CRT_PANEL ; +else + info->pdata->fb_route =SM501_FB_OWN ; +if (of_property_read_bool (np,"swap-fb-endian" )) + info->pdata->flags |=SM501_FBPD_SWAP_FB_ENDIAN ; + sub =read_fbsub (np,"crt" ); +if (sub) + info->pdata->fb_crt = sub; + sub =read_fbsub (np,"panel" ); +if (sub) + info->pdata->fb_pnl = sub; }#endif if (!found) {include/linux/sm501.h +2
-1@@ -6,6 +6,8 @@* Vincent Sanders <[email protected]> */ +#include <dt-bindings/display/sm501.h> +extern int sm501_unit_power (struct device *dev,unsigned int unit,unsigned int to);@@ -35,7 +37,6 @@ extern unsigned long sm501_modify_reg(struct device *dev, unsigned long clear); -/* Platform data definitions */ #define SM501FB_FLAG_USE_INIT_MODE (1<<0)#define SM501FB_FLAG_DISABLE_AT_EXIT (1<<1)Signature · 1 line
2.39.2
Signature · 1 line
Lee Jones [李琼斯]
Yoshinori Sato
maintainerPATCH v4 25/37 dt-binding: sh: cpus: Add SH CPUs json-schema
In reply to Yoshinori SatoRenesas SH series and compatible ISA CPUs.
--- .../devicetree/bindings/sh/cpus.yaml | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Documentation/devicetree/bindings/sh/cpus.yaml
Documentation/devicetree/bindings/sh/cpus.yaml new file +73 -0
@@ -0,0 +1,73 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sh/cpus.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas SuperH CPUs + +maintainers: + - Yoshinori Sato <[email protected]> + +description: |+ + The device tree allows to describe the layout of CPUs in a system through + the "cpus" node, which in turn contains a number of subnodes (ie "cpu") + defining properties for every cpu. + + Bindings for CPU nodes follow the Devicetree Specification, available from: + + https://www.devicetree.org/specifications/ + +properties: + compatible: + items: + - enum: + - renesas,sh2a + - renesas,sh3 + - renesas,sh4 + - renesas,sh4a + - jcore,j2 + - const: renesas,sh2 + + clock-frequency: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + CPU core clock freqency. + + clocks: true + + clock-names: true + + reg: + $ref: /schemas/types.yaml#/definitions/uint32 + const: 0 + + device_type: true + +required: + - compatible + - reg + - device_type + +additionalProperties: true + +examples: + - | + #include <dt-bindings/clock/sh7750.h> + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu: cpu@0 { + compatible = "renesas,sh4", "renesas,sh2"; + device_type = "cpu"; + reg = <0>; + clocks = <&cpg SH7750_CPG_ICK>; + clock-names = "ick"; + icache-size = <16384>; + icache-line-size = <32>; + dcache-size = <32768>; + dcache-line-size = <32>; + }; + }; +...
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 26/37 dt-bindings: vendor-prefix: Add new vendor iodata and smi.
In reply to Yoshinori SatoAdded.
- IO DATA DEVICE, Inc.
- Silicon Motion Technology Corporation (Silicon Motion, Inc.)
--- Documentation/devicetree/bindings/vendor-prefixes.yaml | 4 ++++ 1 file changed, 4 insertions(+)
Documentation/devicetree/bindings/vendor-prefixes.yaml +4 -0
@@ -671,6 +671,8 @@ patternProperties: description: Inventec "^inversepath,.*": description: Inverse Path + "^iodata,.*": + description: IO DATA DEVICE Inc. "^iom,.*": description: Iomega Corporation "^irondevice,.*":
@@ -1281,6 +1283,8 @@ patternProperties: description: Skyworks Solutions, Inc. "^smartlabs,.*": description: SmartLabs LLC + "^smi,.*": + description: Silicon Motion Technology Corporation "^smsc,.*": description: Standard Microsystems Corporation "^snps,.*":
Signature · 1 line
2.39.2
Re: [PATCH v4 26/37] dt-bindings: vendor-prefix: Add new vendor iodata and smi.
Hi Sato-san,
Quoted 5 lines · Yoshinori Sato
Added.
- IO DATA DEVICE, Inc.
- Silicon Motion Technology Corporation (Silicon Motion, Inc.)Signed-off-by Yoshinori Sato <[email protected]>
Thanks for your patch!
Quoted 12 lines
Documentation/devicetree/bindings/vendor-prefixes.yaml +2
-0@@ -671,6 +671,8 @@ patternProperties: description: Inventec "^inversepath,.*": description: Inverse Path + "^iodata,.*": + description: IO DATA DEVICE Inc. "^iom,.*": description: Iomega Corporation "^irondevice,.*":
Documentation/devicetree/bindings/vendor-prefixes.yaml patternProperties: · line 1290
Quoted 8 lines
Documentation/devicetree/bindings/vendor-prefixes.yaml +2
-0@@ -1281,6 +1283,8 @@ patternProperties: description: Skyworks Solutions, Inc. "^smartlabs,.*": description: SmartLabs LLC + "^smi,.*": + description: Silicon Motion Technology Corporation "^smsc,.*": description: Standard Microsystems Corporation "^snps,.*":
Please split this in two parts, one adding "iodata" (for which I have already provided my Rb-tag in v3), one adding "smi".
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Yoshinori Sato
maintainerPATCH v4 27/37 dt-bindings: ata: ata-generic: Add new targets
In reply to Yoshinori SatoAdded new ata-generic target.
- iodata,usl-5p-ata
- renesas,rts7751r2d-ata
Each boards have simple IDE Interface. Use ATA generic driver.
--- Documentation/devicetree/bindings/ata/ata-generic.yaml | 2 ++ 1 file changed, 2 insertions(+)
Documentation/devicetree/bindings/ata/ata-generic.yaml +2 -0
@@ -18,6 +18,8 @@ properties: - enum: - arm,vexpress-cf - fsl,mpc8349emitx-pata + - iodata,usl-5p-ata + - renesas,rts7751r2d-ata - const: ata-generic reg:
Signature · 1 line
2.39.2
Re: [PATCH v4 27/37] dt-bindings: ata: ata-generic: Add new targets
Quoted 11 lines · Yoshinori Sato
Added new ata-generic target.
- iodata,usl-5p-ata
- renesas,rts7751r2d-ataEach boards have simple IDE Interface. Use ATA generic driver.
Signed-off-by Yoshinori Sato <[email protected]>--- Documentation/devicetree/bindings/ata/ata-generic.yaml | 2 ++ 1 file changed, 2 insertions(+)
Please resend DT bindings to the DT list if you want them reviewed. IOW, use the output of get_maintainer.pl.
Rob
Yoshinori Sato
maintainerPATCH v4 28/37 dt-bindings: soc: renesas: sh: Add SH7751 based target
In reply to Yoshinori Sato--- .../devicetree/bindings/soc/renesas/sh.yaml | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/renesas/sh.yaml
Documentation/devicetree/bindings/soc/renesas/sh.yaml new file +32 -0
@@ -0,0 +1,32 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/soc/renesas/sh.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas SuperH Platform + +maintainers: + - Yoshinori Sato <[email protected]> + +properties: + $nodename: + const: '/' + compatible: + oneOf: + - description: RTS7751R2D Plus + items: + - enum: + - renesas,rts7751r2d # Renesas SH4 2D graphics board + - const: renesas,sh7751r + + - description: Julian board + items: + - enum: + - iodata,landisk # LANDISK HDL-U + - iodata,usl-5p # USL-5P + - const: renesas,sh7751r + +additionalProperties: true + +...
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 29/37 sh: SH7751R SoC Internal peripheral definition dtsi.
In reply to Yoshinori SatoSH7751R internal peripherals device tree.
--- arch/sh/boot/dts/sh7751r.dtsi | 151 ++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 arch/sh/boot/dts/sh7751r.dtsi
arch/sh/boot/dts/sh7751r.dtsi new file +151 -0
@@ -0,0 +1,151 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Device Tree Source for the SH7751R SoC + */ + +#include <dt-bindings/interrupt-controller/sh_intc.h> +#include <dt-bindings/clock/sh7750-cpg.h> + +/ { + #address-cells = <1>; + #size-cells = <1>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + compatible = "renesas,sh4", "renesas,sh2"; + device_type = "cpu"; + reg = <0>; + clocks = <&cpg SH7750_CPG_ICK>; + clock-names = "ick"; + icache-size = <16384>; + icache-line-size = <32>; + dcache-size = <32768>; + dcache-line-size = <32>; + }; + }; + + xtal: oscillator { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = <0>; + clock-output-names = "xtal"; + }; + + soc { + compatible = "simple-bus"; + interrupt-parent = <&shintc>; + #address-cells = <1>; + #size-cells = <1>; + ranges; + + cpg: clock-controller@ffc00000 { + #clock-cells = <1>; + #power-domain-cells = <0>; + compatible = "renesas,sh7751r-cpg"; + clocks = <&xtal>; + clock-names = "xtal"; + reg = <0xffc00000 20>, <0xfe0a0000 16>; + reg-names = "FRQCR", "CLKSTP00"; + renesas,mode = <0>; + }; + + shintc: interrupt-controller@ffd00000 { + compatible = "renesas,sh7751-intc"; + #interrupt-cells = <1>; + interrupt-controller; + reg = <0xffd00000 20>, <0xfe080000 128>; + reg-names = "ICR", "INTPRI00"; + renesas,ipr-map = <0x240 IPRD IPR_B12>, /* IRL0 */ + <0x2a0 IPRD IPR_B8>, /* IRL1 */ + <0x300 IPRD IPR_B4>, /* IRL2 */ + <0x360 IPRD IPR_B0>, /* IRL3 */ + <0x400 IPRA IPR_B12>, /* TMU0 */ + <0x420 IPRA IPR_B8>, /* TMU1 */ + <0x440 IPRA IPR_B4>, /* TMU2 TNUI */ + <0x460 IPRA IPR_B4>, /* TMU2 TICPI */ + <0x480 IPRA IPR_B0>, /* RTC ATI */ + <0x4a0 IPRA IPR_B0>, /* RTC PRI */ + <0x4c0 IPRA IPR_B0>, /* RTC CUI */ + <0x4e0 IPRB IPR_B4>, /* SCI ERI */ + <0x500 IPRB IPR_B4>, /* SCI RXI */ + <0x520 IPRB IPR_B4>, /* SCI TXI */ + <0x540 IPRB IPR_B4>, /* SCI TEI */ + <0x560 IPRB IPR_B12>, /* WDT */ + <0x580 IPRB IPR_B8>, /* REF RCMI */ + <0x5a0 IPRB IPR_B4>, /* REF ROVI */ + <0x600 IPRC IPR_B0>, /* H-UDI */ + <0x620 IPRC IPR_B12>, /* GPIO */ + <0x640 IPRC IPR_B8>, /* DMAC DMTE0 */ + <0x660 IPRC IPR_B8>, /* DMAC DMTE1 */ + <0x680 IPRC IPR_B8>, /* DMAC DMTE2 */ + <0x6a0 IPRC IPR_B8>, /* DMAC DMTE3 */ + <0x6c0 IPRC IPR_B8>, /* DMAC DMAE */ + <0x700 IPRC IPR_B4>, /* SCIF ERI */ + <0x720 IPRC IPR_B4>, /* SCIF RXI */ + <0x740 IPRC IPR_B4>, /* SCIF BRI */ + <0x760 IPRC IPR_B4>, /* SCIF TXI */ + <0x780 IPRC IPR_B8>, /* DMAC DMTE4 */ + <0x7a0 IPRC IPR_B8>, /* DMAC DMTE5 */ + <0x7c0 IPRC IPR_B8>, /* DMAC DMTE6 */ + <0x7e0 IPRC IPR_B8>, /* DMAC DMTE7 */ + <0xa00 INTPRI00 IPR_B0>, /* PCIC PCISERR */ + <0xa20 INTPRI00 IPR_B4>, /* PCIC PCIDMA3 */ + <0xa40 INTPRI00 IPR_B4>, /* PCIC PCIDMA2 */ + <0xa60 INTPRI00 IPR_B4>, /* PCIC PCIDMA1 */ + <0xa80 INTPRI00 IPR_B4>, /* PCIC PCIDMA0 */ + <0xaa0 INTPRI00 IPR_B4>, /* PCIC PCIPWON */ + <0xac0 INTPRI00 IPR_B4>, /* PCIC PCIPWDWN */ + <0xae0 INTPRI00 IPR_B4>, /* PCIC PCIERR */ + <0xb00 INTPRI00 IPR_B8>, /* TMU3 */ + <0xb80 INTPRI00 IPR_B12>; /* TMU4 */ + }; + + /* sci0 is rarely used, so it is not defined here. */ + scif1: serial@ffe80000 { + compatible = "renesas,scif-sh7751", "renesas,scif"; + reg = <0xffe80000 0x100>; + interrupts = <evt2irq(0x700)>, + <evt2irq(0x720)>, + <evt2irq(0x760)>, + <evt2irq(0x740)>; + interrupt-names = "eri", "rxi", "txi", "bri"; + clocks = <&cpg SH7750_MSTP_SCIF>; + clock-names = "fck"; + power-domains = <&cpg>; + status = "disabled"; + }; + + /* Normally ch0 and ch1 are used, so we will define ch0 to ch2 here. */ + tmu0: timer@ffd80000 { + compatible = "renesas,tmu-sh7750", "renesas,tmu"; + reg = <0xffd80000 12>; + interrupts = <evt2irq(0x400)>, + <evt2irq(0x420)>, + <evt2irq(0x440)>, + <evt2irq(0x460)>; + interrupt-names = "tuni0", "tuni1", "tuni2", "ticpi2"; + clocks = <&cpg SH7750_MSTP_TMU012>; + clock-names = "fck"; + power-domains = <&cpg>; + #renesas,channels = <3>; + }; + + pcic: pci@fe200000 { + compatible = "renesas,sh7751-pci"; + #address-cells = <3>; + #size-cells = <2>; + #interrupt-cells = <1>; + device_type = "pci"; + bus-range = <0 0>; + ranges = <0x02000000 0 0xfd000000 0xfd000000 0 0x01000000>, + <0x01000000 0 0x00000000 0xfe240000 0 0x00040000>; + reg = <0xfe200000 0x0400>, + <0x0c000000 0x04000000>, + <0xff800000 0x0030>; + status = "disabled"; + }; + }; +};
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 30/37 sh: add RTS7751R2D Plus DTS
In reply to Yoshinori SatoRenesas RTS7751R2D Plus devicetree.
--- arch/sh/boot/dts/rts7751r2dplus.dts | 158 ++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 arch/sh/boot/dts/rts7751r2dplus.dts
arch/sh/boot/dts/rts7751r2dplus.dts new file +158 -0
@@ -0,0 +1,158 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Device Tree Source for the Renesas RTS7751R2D Plus + */ + +/dts-v1/; + +#include "sh7751r.dtsi" +#include <dt-bindings/display/sm501.h> + +/ { + model = "Renesas RTS7715R2D Plus"; + compatible = "renesas,rts7751r2d", "renesas,sh7751r"; + + aliases { + serial0 = &scif1; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + memory@c000000 { + device_type = "memory"; + reg = <0x0c000000 0x4000000>; + }; + + r2dintc: sh7751irl_encoder@a4000000 { + compatible = "renesas,sh7751-irl-ext"; + reg = <0xa4000000 0x02>; + interrupt-controller; + #address-cells = <0>; + #size-cells = <0>; + #interrupt-cells = <1>; + renesas,width = <16>; + renesas,enable-bit = <0 11>, /* PCI INTD */ + <1 9>, /* CF IDE */ + <2 8>, /* CF CD */ + <3 12>, /* PCI INTC */ + <4 10>, /* SM501 */ + <5 6>, /* KEY */ + <6 5>, /* RTC ALARM */ + <7 4>, /* RTC T */ + <8 7>, /* SDCARD */ + <9 14>, /* PCI INTA */ + <10 13>, /* PCI INTB */ + <11 0>, /* EXT */ + <12 15>; /* TP */ + }; + + display@0 { + compatible = "smi,sm501"; + reg = <0x10000000 0x03e00000 + 0x13e00000 0x00200000>; + interrupt-parent = <&r2dintc>; + interrupts = <4>; + mode = "640x480-16@60"; + little-endian; + smi,devices = <(SM501_USE_USB_HOST | SM501_USE_UART0)>; + interrupt-name = "sm501"; + swap-fb-endian; + + crt { + smi,flags = <(SM501FB_FLAG_USE_INIT_MODE | + SM501FB_FLAG_DISABLE_AT_EXIT | + SM501FB_FLAG_USE_HWCURSOR | + SM501FB_FLAG_USE_HWACCEL)>; + }; + + panel { + bpp = <16>; + edid = [00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 + 00 00 01 04 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 f0 0a 80 fb 20 e0 25 10 32 60 + 02 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bd]; + smi,flags = <(SM501FB_FLAG_USE_INIT_MODE | + SM501FB_FLAG_DISABLE_AT_EXIT | + SM501FB_FLAG_USE_HWCURSOR | + SM501FB_FLAG_USE_HWACCEL)>; + }; + }; + + compact-flash@b4001000 { + compatible = "renesas,rts7751r2d-ata", "ata-generic"; + reg = <0xb4001000 0x0e>, <0xb400080c 2>; + reg-shift = <1>; + interrupt-parent = <&r2dintc>; + interrupts = <1>; + }; + + flash@0 { + compatible = "cfi-flash"; + reg = <0x00000000 0x02000000>; + device-width = <2>; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "U-Boot"; + reg = <0x00000000 0x00040000>; + }; + + partition@1 { + label = "Environemt"; + reg = <0x00040000 0x00040000>; + }; + + partition@2 { + label = "Kernel"; + reg = <0x00080000 0x001c0000>; + }; + + partition@3 { + label = "Flash_FS"; + reg = <0x00240000 0x00dc0000>; + }; + }; +}; + +&xtal { + clock-frequency = <22222222>; +}; + +&cpg { + renesas,mode = <5>; +}; + +&scif1 { + status = "okay"; +}; + +&pcic { + interrupt-parent = <&r2dintc>; + renesas,bcr1 = <0x40080000>; + renesas,intm = <0x0000c3ff>; + renesas,aintm = <0x0000380f>; + renesas,config = <1 0xfb900047>, <4 0xab000001>; + renesas,mcrmask = <0x40000004>; + + interrupt-map = <0x0000 0 0 1 &r2dintc 9>, + <0x0000 0 0 2 &r2dintc 10>, + <0x0000 0 0 3 &r2dintc 3>, + <0x0000 0 0 4 &r2dintc 0>, + <0x0800 0 0 1 &r2dintc 10>, + <0x0800 0 0 2 &r2dintc 3>, + <0x0800 0 0 3 &r2dintc 0>, + <0x0800 0 0 4 &r2dintc 9>, + <0x1000 0 0 1 &r2dintc 3>, + <0x1000 0 0 2 &r2dintc 0>, + <0x1000 0 0 3 &r2dintc 9>, + <0x1000 0 0 4 &r2dintc 10>; + interrupt-map-mask = <0x1800 0 0 7>; + status = "okay"; +};
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 31/37 sh: Add IO DATA LANDISK dts
In reply to Yoshinori SatoIO DATA DEVICE Inc. LANDISK HDL-U devicetree.
--- arch/sh/boot/dts/landisk.dts | 74 ++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 arch/sh/boot/dts/landisk.dts
arch/sh/boot/dts/landisk.dts new file +74 -0
@@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Device Tree Source for the IO DATA DEVICE LANDISK + */ + +/dts-v1/; + +#include "sh7751r.dtsi" + +/ { + model = "IO DATA Device LANDISK"; + compatible = "iodata,landisk", "renesas,sh7751r"; + + aliases { + serial0 = &scif1; + }; + + chosen { + stdout-path = "serial0:9600n8"; + }; + + memory@c000000 { + device_type = "memory"; + reg = <0x0c000000 0x4000000>; + }; + + julianintc: sh7751irl_encoder@b0000005 { + compatible = "renesas,sh7751-irl-ext"; + reg = <0xb0000005 0x01>; + interrupt-controller; + #interrupt-cells = <1>; + renesas,width = <8>; + renesas,enable-bit = <5 0>, /* PCI INTA */ + <6 1>, /* PCI INTB */ + <7 2>, /* PCI INTC */ + <8 3>, /* PCI INTD */ + <9 4>, /* ATA */ + <10 5>, /* CF */ + <11 6>, /* Power Switch */ + <12 7>; /* Button */ + }; +}; + +&xtal { + clock-frequency = <22222222>; +}; + +&cpg { + renesas,mode = <5>; +}; + +&scif1 { + status = "okay"; +}; + +&pcic { + renesas,bcr1 = <0x00080000>; + renesas,config = <6 0xd0000000>; + renesas,mcrmask = <0x40000004>; + interrupt-map = <0x0000 0 0 1 &julianintc 5>, + <0x0000 0 0 2 &julianintc 6>, + <0x0000 0 0 3 &julianintc 7>, + <0x0000 0 0 4 &julianintc 8>, + <0x0800 0 0 1 &julianintc 6>, + <0x0800 0 0 2 &julianintc 7>, + <0x0800 0 0 3 &julianintc 8>, + <0x0800 0 0 4 &julianintc 5>, + <0x1000 0 0 1 &julianintc 7>, + <0x1000 0 0 2 &julianintc 8>, + <0x1000 0 0 3 &julianintc 5>, + <0x1000 0 0 4 &julianintc 6>; + interrupt-map-mask = <0x1800 0 0 7>; + status = "okay"; +};
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 32/37 sh: Add IO DATA USL-5P dts
In reply to Yoshinori SatoIO DATA DEVICE Inc. USL-5P devicetree.
--- arch/sh/boot/dts/usl-5p.dts | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 arch/sh/boot/dts/usl-5p.dts
arch/sh/boot/dts/usl-5p.dts new file +84 -0
@@ -0,0 +1,84 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Device Tree Source for the IO DATA DEVICE USL-5P + */ + +/dts-v1/; + +#include "sh7751r.dtsi" + +/ { + model = "IO-DATA Device USL-5P"; + compatible = "iodata,usl-5p", "renesas,sh7751r"; + + aliases { + serial0 = &scif1; + }; + + chosen { + stdout-path = "serial0:9600n8"; + }; + + memory@c000000 { + device_type = "memory"; + reg = <0x0c000000 0x4000000>; + }; + + julianintc: sh7751irl_encoder@b0000005 { + compatible = "renesas,sh7751-irl-ext"; + reg = <0xb0000005 0x01>; + interrupt-controller; + #interrupt-cells = <1>; + #address-cells = <0>; + #size-cells = <0>; + renesas,width = <8>; + renesas,enable-bit = <5 0>, /* PCI INTA */ + <6 1>, /* PCI INTB */ + <7 2>, /* PCI INTC */ + <8 3>, /* PCI INTD */ + <9 4>, /* ATA */ + <10 5>, /* CF */ + <11 6>, /* Power Switch */ + <12 7>; /* Button */ + }; + + compact-flash@b4000040 { + compatible = "iodata,usl-5p-ata", "ata-generic"; + reg = <0xb4000040 0x0e>, <0xb400002c 2>; + reg-shift = <1>; + interrupt-parent = <&julianintc>; + interrupts = <10>; + }; +}; + +&xtal { + clock-frequency = <22222222>; +}; + +&cpg { + renesas,mode = <5>; +}; + +&scif1 { + status = "okay"; +}; + +&pcic { + renesas,bcr1 = <0x00080000>; + renesas,config = <6 0xd0000000>; + renesas,mcrmask = <0x40000004>; + interrupt-map = <0x0000 0 0 1 &julianintc 5>, + <0x0000 0 0 2 &julianintc 6>, + <0x0000 0 0 3 &julianintc 7>, + <0x0000 0 0 4 &julianintc 8>, + <0x0800 0 0 1 &julianintc 6>, + <0x0800 0 0 2 &julianintc 7>, + <0x0800 0 0 3 &julianintc 8>, + <0x0800 0 0 4 &julianintc 5>, + <0x1000 0 0 1 &julianintc 7>, + <0x1000 0 0 2 &julianintc 8>, + <0x1000 0 0 3 &julianintc 5>, + <0x1000 0 0 4 &julianintc 6>; + interrupt-map-mask = <0x1800 0 0 7>; + status = "okay"; +};
Signature · 1 line
2.39.2
Re: [PATCH v4 32/37] sh: Add IO DATA USL-5P dts
Quoted 14 lines · Yoshinori Sato
IO DATA DEVICE Inc. USL-5P devicetree.
Signed-off-by Yoshinori Sato <[email protected]>--- arch/sh/boot/dts/usl-5p.dts | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 arch/sh/boot/dts/usl-5p.dtsarch/sh/boot/dts/usl-5p.dts new file +0
-0@@ -0,0 +1,84 @@
[...]
arch/sh/boot/dts/usl-5p.dts line 27
Quoted 1 line
arch/sh/boot/dts/usl-5p.dts new file +1
-0+ julianintc: sh7751irl_encoder@b0000005 {
The node name should be "interrupt-controller", according to clause 2.2.2
in the DT spec.
Quoted 6 lines
arch/sh/boot/dts/usl-5p.dts new file +6
-0+ compatible = "renesas,sh7751-irl-ext"; + reg = <0xb0000005 0x01>; + interrupt-controller; + #interrupt-cells = <1>; + #address-cells = <0>; + #size-cells = <0>;
arch/sh/boot/dts/usl-5p.dts line 43
Quoted 10 lines
arch/sh/boot/dts/usl-5p.dts new file +10
-0+ renesas,width = <8>; + renesas,enable-bit = <5 0>, /* PCI INTA */ + <6 1>, /* PCI INTB */ + <7 2>, /* PCI INTC */ + <8 3>, /* PCI INTD */ + <9 4>, /* ATA */ + <10 5>, /* CF */ + <11 6>, /* Power Switch */ + <12 7>; /* Button */ + };
[...]
MBR, Sergey
Re: [PATCH v4 32/37] sh: Add IO DATA USL-5P dts
On 11/14/23 12:02 PM, Sergei Shtylyov wrote:
[...]
Quoted 15 lines
Quoted 14 lines
IO DATA DEVICE Inc. USL-5P devicetree.
Signed-off-by Yoshinori Sato <[email protected]>--- arch/sh/boot/dts/usl-5p.dts | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 arch/sh/boot/dts/usl-5p.dtsarch/sh/boot/dts/usl-5p.dts new file +0
-0@@ -0,0 +1,84 @@[...]
Quoted 4 lines
arch/sh/boot/dts/usl-5p.dts line 27
Quoted 1 line
arch/sh/boot/dts/usl-5p.dts new file +1
-0+ julianintc: sh7751irl_encoder@b0000005 {The node name should be "interrupt-controller", according to clause 2.2.2
in the DT spec.
Likewise for the other boards...
Quoted 10 lines
Quoted 10 lines
arch/sh/boot/dts/usl-5p.dts new file +9
-0+ compatible = "renesas,sh7751-irl-ext"; + reg = <0xb0000005 0x01>; + interrupt-controller; + #interrupt-cells = <1>; + #address-cells = <0>; + #size-cells = <0>; + renesas,width = <8>; + renesas,enable-bit = <5 0>, /* PCI INTA */ + <6 1>, /* PCI INTB */
Quoted 8 lines
Quoted 7 lines
arch/sh/boot/dts/usl-5p.dts new file +7
-0+ <7 2>, /* PCI INTC */ + <8 3>, /* PCI INTD */ + <9 4>, /* ATA */ + <10 5>, /* CF */ + <11 6>, /* Power Switch */ + <12 7>; /* Button */ + };[...]
MBR, Sergey
Yoshinori Sato
maintainerPATCH v4 33/37 sh: j2_mimas_v2.dts update
In reply to Yoshinori Sato--- arch/sh/boot/dts/j2_mimas_v2.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/sh/boot/dts/j2_mimas_v2.dts +1 -1
@@ -16,7 +16,7 @@ cpus { cpu@0 { device_type = "cpu"; - compatible = "jcore,j2"; + compatible = "jcore,j2", "renesas,sh2"; reg = <0>; clock-frequency = <50000000>; d-cache-size = <8192>;
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 34/37 sh: Add dtbs target support.
In reply to Yoshinori Sato--- arch/sh/boot/dts/Makefile | 5 +++++ 1 file changed, 5 insertions(+)
arch/sh/boot/dts/Makefile +5 -0
@@ -1,2 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only obj-$(CONFIG_USE_BUILTIN_DTB) += $(addsuffix .dtb.o, $(CONFIG_BUILTIN_DTB_SOURCE)) + +dtb-$(CONFIG_CPU_J2) += j2_mimas_v2.dtb +dtb-$(CONFIG_CPU_SUBTYPE_SH7751R) += landisk.dtb +dtb-$(CONFIG_CPU_SUBTYPE_SH7751R) += rts7751r2dplus.dtb +dtb-$(CONFIG_CPU_SUBTYPE_SH7751R) += usl-5p.dtb
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 35/37 sh: RTS7751R2D Plus OF defconfig
In reply to Yoshinori Sato--- arch/sh/configs/rts7751r2dplus-of_defconfig | 93 +++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 arch/sh/configs/rts7751r2dplus-of_defconfig
arch/sh/configs/rts7751r2dplus-of_defconfig new file +93 -0
@@ -0,0 +1,93 @@ +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_NAMESPACES=y +CONFIG_EXPERT=y +CONFIG_PROFILING=y +CONFIG_CPU_SUBTYPE_SH7751R=y +CONFIG_MEMORY_START=0x0c000000 +CONFIG_SH_OF_BOARD=y +CONFIG_HEARTBEAT=y +CONFIG_ZERO_PAGE_OFFSET=0x00010000 +CONFIG_MODULES=y +CONFIG_FLATMEM_MANUAL=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IPV6 is not set +CONFIG_PCI=y +CONFIG_HOTPLUG_PCI=y +CONFIG_PCI_SH7751=y +CONFIG_UEVENT_HELPER=y +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_PHYSMAP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_SD=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_ATA=y +CONFIG_PATA_OF_PLATFORM=y +CONFIG_NETDEVICES=y +CONFIG_8139CP=y +CONFIG_8139TOO=y +# CONFIG_8139TOO_PIO is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_EARLYCON=y +CONFIG_HW_RANDOM=y +CONFIG_SPI=y +CONFIG_SPI_SH_SCI=y +CONFIG_MFD_SM501=y +CONFIG_FB=y +CONFIG_FB_SH_MOBILE_LCDC=m +CONFIG_FB_SM501=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +# CONFIG_LOGO_SUPERH_MONO is not set +# CONFIG_LOGO_SUPERH_VGA16 is not set +CONFIG_SOUND=y +CONFIG_SND=m +CONFIG_SND_YMFPCI=m +CONFIG_HID_A4TECH=y +CONFIG_HID_BELKIN=y +CONFIG_HID_CHERRY=y +CONFIG_HID_CHICONY=y +CONFIG_HID_CYPRESS=y +CONFIG_HID_EZKEY=y +CONFIG_HID_GYRATION=y +CONFIG_HID_ITE=y +CONFIG_HID_KENSINGTON=y +CONFIG_HID_REDRAGON=y +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MONTEREY=y +CONFIG_HID_PANTHERLORD=y +CONFIG_HID_PETALYNX=y +CONFIG_HID_SAMSUNG=y +CONFIG_HID_SUNPLUS=y +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_R9701=y +CONFIG_RENESAS_SH7751_INTC=y +CONFIG_RENESAS_SH7751IRL_INTC=y +CONFIG_EXT2_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_PROC_KCORE=y +CONFIG_TMPFS=y +CONFIG_MINIX_FS=y +CONFIG_NLS_CODEPAGE_932=y +CONFIG_CRC_T10DIF=y +CONFIG_DEBUG_FS=y +# CONFIG_FTRACE is not set
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 36/37 sh: LANDISK OF defconfig
In reply to Yoshinori Sato--- arch/sh/configs/landisk-of_defconfig | 111 +++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 arch/sh/configs/landisk-of_defconfig
arch/sh/configs/landisk-of_defconfig new file +111 -0
@@ -0,0 +1,111 @@ +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_NAMESPACES=y +CONFIG_EXPERT=y +CONFIG_KEXEC=y +CONFIG_CPU_SUBTYPE_SH7751R=y +CONFIG_MEMORY_START=0x0c000000 +CONFIG_SH_OF_BOARD=y +CONFIG_HEARTBEAT=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_FLATMEM_MANUAL=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_PNP=y +# CONFIG_IPV6 is not set +CONFIG_NETFILTER=y +CONFIG_ATALK=m +CONFIG_PCI=y +CONFIG_PCI_SH7751=y +CONFIG_PCCARD=y +CONFIG_YENTA=y +CONFIG_UEVENT_HELPER=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_ATA=y +CONFIG_PATA_ARTOP=y +CONFIG_PATA_OF_PLATFORM=y +CONFIG_ATA_GENERIC=y +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_NETDEVICES=y +CONFIG_TUN=m +CONFIG_8139CP=y +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_EARLYCON=y +CONFIG_HW_RANDOM=y +CONFIG_SOUND=m +CONFIG_HID_A4TECH=m +CONFIG_HID_BELKIN=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_EZKEY=m +CONFIG_HID_GYRATION=m +CONFIG_HID_ITE=y +CONFIG_HID_KENSINGTON=y +CONFIG_HID_REDRAGON=y +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_PANTHERLORD=m +CONFIG_HID_PETALYNX=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SUNPLUS=m +CONFIG_USB_HID=m +CONFIG_USB=y +CONFIG_USB_MON=y +CONFIG_USB_EHCI_HCD=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_PRINTER=m +CONFIG_USB_STORAGE=m +CONFIG_USB_STORAGE_DATAFAB=m +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +CONFIG_USB_SISUSBVGA=m +CONFIG_RENESAS_SH7751_INTC=y +CONFIG_RENESAS_SH7751IRL_INTC=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +CONFIG_REISERFS_FS=y +CONFIG_ISO9660_FS=m +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_NTFS_FS=m +CONFIG_NTFS_RW=y +CONFIG_TMPFS=y +CONFIG_ROMFS_FS=y +CONFIG_UFS_FS=m +CONFIG_NFS_FS=m +CONFIG_NFSD=m +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_932=y +CONFIG_INIT_STACK_NONE=y +CONFIG_CRC_T10DIF=y +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_FTRACE is not set +CONFIG_SH_STANDARD_BIOS=y
Signature · 1 line
2.39.2
Yoshinori Sato
maintainerPATCH v4 37/37 sh: j2_defconfig: update
In reply to Yoshinori SatoI've changed some symbols related to DeviceTree,
so let's take care of those changes.
--- arch/sh/configs/j2_defconfig | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-)
arch/sh/configs/j2_defconfig +3 -8
@@ -1,18 +1,15 @@ -CONFIG_SMP=y CONFIG_SYSVIPC=y CONFIG_POSIX_MQUEUE=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_CPU_SUBTYPE_J2=y CONFIG_MEMORY_START=0x10000000 -CONFIG_MEMORY_SIZE=0x04000000 CONFIG_CPU_BIG_ENDIAN=y -CONFIG_SH_DEVICE_TREE=y -CONFIG_SH_JCORE_SOC=y +CONFIG_SH_OF_BOARD=y CONFIG_HZ_100=y +CONFIG_SMP=y CONFIG_CMDLINE_OVERWRITE=y CONFIG_CMDLINE="console=ttyUL0 earlycon" -CONFIG_BINFMT_ELF_FDPIC=y CONFIG_BINFMT_FLAT=y CONFIG_NET=y CONFIG_PACKET=y
@@ -21,7 +18,6 @@ CONFIG_INET=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y CONFIG_NETDEVICES=y -CONFIG_SERIAL_EARLYCON=y CONFIG_SERIAL_UARTLITE=y CONFIG_SERIAL_UARTLITE_CONSOLE=y CONFIG_I2C=y
@@ -30,8 +26,6 @@ CONFIG_SPI_JCORE=y CONFIG_WATCHDOG=y CONFIG_MMC=y CONFIG_MMC_SPI=y -CONFIG_CLKSRC_JCORE_PIT=y -CONFIG_JCORE_AIC=y CONFIG_EXT4_FS=y CONFIG_VFAT_FS=y CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
@@ -40,3 +34,4 @@ CONFIG_NLS_DEFAULT="utf8" CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ASCII=y CONFIG_NLS_UTF8=y +CONFIG_INIT_STACK_NONE=y
Signature · 1 line
2.39.2
John Paul Adrian Glaubitz
maintainerHi Yoshinori!
Quoted 8 lines · Yoshinori Sato
This is an updated version of something I wrote about 7 years ago. Minimum support for R2D-plus and LANDISK.
I think R2D-1 will work if you add AX88796 to dts.
And board-specific functions and SCI's SPI functions are not supported.You can get it working with qemu found here.
https://gitlab.com/yoshinori.sato/qemu/-/tree/landisk
Quoted 9 lines
v4 changes.
- cpg-sh7750: use clk-divider and clk-gate.
- pci-sh7751: unified header files to old PCI driver.
- irq-renesas-sh7751: IPR registers direct mapping.
- irq-renesas-sh7751irl: useful register bit mapping.
- sm501 and sm501fb: re-write dt parser.
-j2_minus: fix build error.
- dt-binding schema: fix some errors.
- *.dts: cleanup.
Thanks a lot for the updated version!
Unfortunately, I still cannot download this series with the "b4" utility for some reason. Can you tell how you generated and sent the patches?
Thanks,
Adrian
Signature · 4 lines
.''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
John Paul Adrian Glaubitz
maintainerQuoted 21 lines · John Paul Adrian Glaubitz
Hi Yoshinori!
Quoted 8 lines · Yoshinori Sato
This is an updated version of something I wrote about 7 years ago. Minimum support for R2D-plus and LANDISK.
I think R2D-1 will work if you add AX88796 to dts.
And board-specific functions and SCI's SPI functions are not supported.You can get it working with qemu found here.
https://gitlab.com/yoshinori.sato/qemu/-/tree/landiskQuoted 9 lines
v4 changes.
- cpg-sh7750: use clk-divider and clk-gate.
- pci-sh7751: unified header files to old PCI driver.
- irq-renesas-sh7751: IPR registers direct mapping.
- irq-renesas-sh7751irl: useful register bit mapping.
- sm501 and sm501fb: re-write dt parser.
-j2_minus: fix build error.
- dt-binding schema: fix some errors.
- *.dts: cleanup.
Quoted 4 lines
Thanks a lot for the updated version!
Unfortunately, I still cannot download this series with the "b4" utility for some reason. Can you tell how you generated and sent the patches?
Never mind. It was an issue on my side, your patch set is fine and applies without problems on top of v6.7-rc1. Will try later this week whether it still boots on my SH7785LCR.
Adrian
Signature · 4 lines
.''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913