Patches for Kumar's powerpc-next tree
Subsystems (4)
cover Patches for Kumar's powerpc-next tree
Hi Kumar,
Here is updated series, with your comments addressed. Patches are rebased on top of your current powerpc-next branch.
[PATCH 1/7] [POWERPC] sysdev: implement FSL GTM support
- added "depends on" to the Kconfig
- reverted to arch_initcall
- added Context: tip to the documentation
- reset_timer -> set_timer
reset_utimer -> set_exact_timer + improved kerneldoc
- put_timer now stops the timer
[PATCH 2/7] [POWERPC] QE: add support for QE USB clocks routing [PATCH 3/7] [POWERPC] QE: prepare QE PIO code for GPIO LIB support [PATCH 4/7] [POWERPC] QE: implement support for the GPIO LIB API ^ reverted to arch_initcall
[PATCH 5/7] [POWERPC] 83xx: new board support: MPC8360E-RDK
[PATCH 6/7] [POWERPC] booting-without-of: add FHCI USB, FSL MCU, FSL UPM and GPIO LEDs bindings [PATCH 7/7] [POWERPC] qe_lib: switch to the cpm_muram implementation
^ now it doesn't touch ucc_{slow,fast}.c
Thanks,
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
PATCH 1/7 sysdev: implement FSL GTM support
GTM stands for General-purpose Timers Module and able to generate timer{1,2,3,4} interrupts. These timers are used by the drivers that need time precise interrupts (like for USB transactions scheduling for the Freescale USB Host controller as found in some QE and CPM chips), or these timers could be used as wakeup events from the CPU deep-sleep mode.
Things unimplemented:
1. Cascaded (32 bit) timers (1-2, 3-4).
This is straightforward to implement when needed, two timers should be marked as "requested" and configured as appropriate.
2. Super-cascaded (64 bit) timers (1-2-3-4).
This is also straightforward to implement when needed, all timers should be marked as "requested" and configured as appropriate.
--- Documentation/powerpc/booting-without-of.txt | 32 ++ arch/powerpc/Kconfig | 6 + arch/powerpc/sysdev/Makefile | 1 + arch/powerpc/sysdev/fsl_gtm.c | 434 ++++++++++++++++++++++++++ include/asm-powerpc/fsl_gtm.h | 47 +++ 5 files changed, 520 insertions(+), 0 deletions(-) create mode 100644 arch/powerpc/sysdev/fsl_gtm.c create mode 100644 include/asm-powerpc/fsl_gtm.h
Documentation/powerpc/booting-without-of.txt +32 -0
@@ -61,6 +61,7 @@ Table of Contents r) Freescale Display Interface Unit s) Freescale on board FPGA t) Freescael MSI interrupt controller + u) Freescale General-purpose Timers Module VII - Marvell Discovery mv64[345]6x System Controller chips 1) The /system-controller node
@@ -2910,6 +2911,37 @@ platforms are moved over to use the flattened-device-tree model. interrupt-parent = <&mpic>; }; + u) Freescale General-purpose Timers Module + + Required properties: + - compatible : should be + "fsl,<chip>-gtm", "fsl,gtm" for SOC GTMs + "fsl,<chip>-qe-gtm", "fsl,qe-gtm", "fsl,gtm" for QE GTMs + "fsl,<chip>-cpm2-gtm", "fsl,cpm2-gtm", "fsl,gtm" for CPM2 GTMs + - reg : should contain gtm registers location and length (0x40). + - interrupts : should contain four interrupts. + - interrupt-parent : interrupt source phandle. + - clock-frequency : specifies the frequency driving the timer. + + Example: + + timer@500 { + compatible = "fsl,mpc8360-gtm", "fsl,gtm"; + reg = <0x500 0x40>; + interrupts = <90 8 78 8 84 8 72 8>; + interrupt-parent = <&ipic>; + /* filled by u-boot */ + clock-frequency = <0>; + }; + + timer@440 { + compatible = "fsl,mpc8360-qe-gtm", "fsl,qe-gtm", "fsl,gtm"; + reg = <0x440 0x40>; + interrupts = <12 13 14 15>; + interrupt-parent = <&qeic>; + /* filled by u-boot */ + clock-frequency = <0>; + }; VII - Marvell Discovery mv64[345]6x System Controller chips ===========================================================
arch/powerpc/Kconfig +6 -0
@@ -538,6 +538,12 @@ config FSL_LBC help Freescale Localbus support +config FSL_GTM + bool + depends on PPC_83xx || QUICC_ENGINE || CPM2 + help + Freescale General-purpose Timers support + # Yes MCA RS/6000s exist but Linux-PPC does not currently support any config MCA bool
arch/powerpc/sysdev/Makefile +1 -0
@@ -14,6 +14,7 @@ obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o obj-$(CONFIG_FSL_SOC) += fsl_soc.o obj-$(CONFIG_FSL_PCI) += fsl_pci.o $(fsl-msi-obj-y) obj-$(CONFIG_FSL_LBC) += fsl_lbc.o +obj-$(CONFIG_FSL_GTM) += fsl_gtm.o obj-$(CONFIG_RAPIDIO) += fsl_rio.o obj-$(CONFIG_TSI108_BRIDGE) += tsi108_pci.o tsi108_dev.o obj-$(CONFIG_QUICC_ENGINE) += qe_lib/
arch/powerpc/sysdev/fsl_gtm.c new file +434 -0
434 lines not on this page · raw message
include/asm-powerpc/fsl_gtm.h new file +47 -0
47 lines not on this page · raw message
Signature · 1 line
1.5.5.1
Kumar Gala
AppliedRe: [PATCH 1/7] [POWERPC] sysdev: implement FSL GTM support
Quoted 24 lines · Anton Vorontsov
GTM stands for General-purpose Timers Module and able to generate timer{1,2,3,4} interrupts. These timers are used by the drivers that need time precise interrupts (like for USB transactions scheduling for the Freescale USB Host controller as found in some QE and CPM chips), or these timers could be used as wakeup events from the CPU deep-sleep mode.
Things unimplemented:
1. Cascaded (32 bit) timers (1-2, 3-4).
This is straightforward to implement when needed, two timers should be marked as "requested" and configured as appropriate.
2. Super-cascaded (64 bit) timers (1-2-3-4).
This is also straightforward to implement when needed, all timers should be marked as "requested" and configured as appropriate.Signed-off-by Anton Vorontsov <[email protected]>---
Documentation/powerpc/booting-without-of.txt | 32 ++ arch/powerpc/Kconfig | 6 + arch/powerpc/sysdev/Makefile | 1 + arch/powerpc/sysdev/fsl_gtm.c | 434 +++++++++++++++++ +++++++++ include/asm-powerpc/fsl_gtm.h | 47 +++ 5 files changed, 520 insertions(+), 0 deletions(-)
Quoted 2 lines
create mode 100644
arch/powerpc/sysdev/fsl_gtm.c
create mode 100644include/asm-powerpc/fsl_gtm.h
applied.
- k
PATCH 2/7 QE: add support for QE USB clocks routing
In reply to Anton VorontsovThis patch adds a function to the qe_lib to setup QE USB clocks routing. To setup clocks safely, cmxgcr register needs locking, so I just reused ucc_lock since it was used only to protect cmxgcr.
The idea behind placing clocks routing functions into the qe_lib is that later we'll hopefully switch to the generic Linux Clock API, thus, for example, FHCI driver may be used for QE and CPM chips without nasty #ifdefs.
This patch also fixes QE_USB_RESTART_TX command definition in the qe.h.
--- arch/powerpc/sysdev/qe_lib/Kconfig | 4 ++ arch/powerpc/sysdev/qe_lib/Makefile | 1 + arch/powerpc/sysdev/qe_lib/ucc.c | 7 ++-- arch/powerpc/sysdev/qe_lib/usb.c | 55 +++++++++++++++++++++++++++++++++++ include/asm-powerpc/qe.h | 23 ++++++++++++++- 5 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 arch/powerpc/sysdev/qe_lib/usb.c
arch/powerpc/sysdev/qe_lib/Kconfig +4 -0
@@ -20,3 +20,7 @@ config UCC bool default y if UCC_FAST || UCC_SLOW +config QE_USB + bool + help + QE USB Host Controller support
arch/powerpc/sysdev/qe_lib/Makefile +1 -0
@@ -6,3 +6,4 @@ obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_ic.o qe_io.o obj-$(CONFIG_UCC) += ucc.o obj-$(CONFIG_UCC_SLOW) += ucc_slow.o obj-$(CONFIG_UCC_FAST) += ucc_fast.o +obj-$(CONFIG_QE_USB) += usb.o
arch/powerpc/sysdev/qe_lib/ucc.c +4 -3
@@ -26,7 +26,8 @@#include <asm/qe.h> #include <asm/ucc.h> -static DEFINE_SPINLOCK (ucc_lock); +DEFINE_SPINLOCK (cmxgcr_lock); +EXPORT_SYMBOL (cmxgcr_lock);int ucc_set_qe_mux_mii_mng (unsigned int ucc_num) {
@@ -35,10 +36,10 @@ int ucc_set_qe_mux_mii_mng(unsigned int ucc_num)if (ucc_num >UCC_MAX_NUM -1 )return -EINVAL ; -spin_lock_irqsave (&ucc_lock, flags); +spin_lock_irqsave (&cmxgcr_lock, flags);clrsetbits_be32 (&qe_immr->qmx.cmxgcr,QE_CMXGCR_MII_ENET_MNG , ucc_num <<QE_CMXGCR_MII_ENET_MNG_SHIFT ); -spin_unlock_irqrestore (&ucc_lock, flags); +spin_unlock_irqrestore (&cmxgcr_lock, flags);return 0 ; }
arch/powerpc/sysdev/qe_lib/usb.c new file +55 -0
55 lines not on this page · raw message
include/asm-powerpc/qe.h +22 -1
@@ -16,6 +16,7 @@#define _ASM_POWERPC_QE_H#ifdef __KERNEL__ +#include <linux/spinlock.h> #include <asm/immap_qe.h> #define QE_NUM_OF_SNUM 28
@@ -74,6 +75,13 @@ enum qe_clock { QE_CLK_DUMMY }; +static inline bool qe_clock_is_brg (enum qe_clock clk) +{ +return clk >=QE_BRG1 && clk <=QE_BRG16 ; +} + +extern spinlock_t cmxgcr_lock; +/* Export QE common operations */ extern void qe_reset (void );extern int par_io_init (struct device_node *np);
@@ -156,6 +164,9 @@ int qe_upload_firmware(const struct qe_firmware *firmware);/* Obtain information on the uploaded firmware */ struct qe_firmware_info *qe_get_firmware_info (void ); +/* QE USB */ +int qe_usb_clock_set (enum qe_clock clk,int rate); +/* Buffer descriptors */ struct qe_bd {__be16 status;
@@ -254,6 +265,16 @@ enum comm_dir {#define QE_CMXGCR_MII_ENET_MNG 0x00007000#define QE_CMXGCR_MII_ENET_MNG_SHIFT 12#define QE_CMXGCR_USBCS 0x0000000f +#define QE_CMXGCR_USBCS_CLK3 0x1 +#define QE_CMXGCR_USBCS_CLK5 0x2 +#define QE_CMXGCR_USBCS_CLK7 0x3 +#define QE_CMXGCR_USBCS_CLK9 0x4 +#define QE_CMXGCR_USBCS_CLK13 0x5 +#define QE_CMXGCR_USBCS_CLK17 0x6 +#define QE_CMXGCR_USBCS_CLK19 0x7 +#define QE_CMXGCR_USBCS_CLK21 0x8 +#define QE_CMXGCR_USBCS_BRG9 0x9 +#define QE_CMXGCR_USBCS_BRG10 0xa/* QE CECR Commands. */
@@ -283,7 +304,7 @@ enum comm_dir {#define QE_HPAC_START_TX 0x0000060b#define QE_HPAC_START_RX 0x0000070b#define QE_USB_STOP_TX 0x0000000a -#define QE_USB_RESTART_TX 0x0000000b +#define QE_USB_RESTART_TX 0x0000000c#define QE_QMC_STOP_TX 0x0000000c#define QE_QMC_STOP_RX 0x0000000d#define QE_SS7_SU_FIL_RESET 0x0000000e
Signature · 1 line
1.5.5.1
Kumar Gala
AppliedRe: [PATCH 2/7] [POWERPC] QE: add support for QE USB clocks routing
Quoted 13 lines · Anton Vorontsov
This patch adds a function to the
qe_libto setup QE USB clocks routing. To setup clocks safely, cmxgcr register needs locking, so I just reuseducc_locksince it was used only to protect cmxgcr.The idea behind placing clocks routing functions into the
qe_libis that later we'll hopefully switch to the generic Linux Clock API, thus, for example, FHCI driver may be used for QE and CPM chips without nasty #ifdefs.This patch also fixes
QE_USB_RESTART_TXcommand definition in theqe.h.Signed-off-by Anton Vorontsov <[email protected]>Acked-by Timur Tabi <[email protected]>---
Quoted 8 lines
arch/powerpc/sysdev/qe_lib/Kconfig | 4 ++ arch/powerpc/sysdev/qe_lib/Makefile | 1 + arch/powerpc/sysdev/qe_lib/ucc.c | 7 ++-- arch/powerpc/sysdev/qe_lib/usb.c | 55 ++++++++++++++++++++++++++ +++++++++ include/asm-powerpc/qe.h | 23 ++++++++++++++- 5 files changed, 86 insertions(+), 4 deletions(-)create mode 100644
arch/powerpc/sysdev/qe_lib/usb.c
applied.
- k
PATCH 3/7 QE: prepare QE PIO code for GPIO LIB support
In reply to Anton Vorontsov- split and export __par_io_config_pin() out of par_io_config_pin(), so we could use the prefixed version with GPIO LIB API;
- rename struct port_regs to qe_pio_regs, and place it into qe.h;
- rename #define NUM_OF_PINS to QE_PIO_PINS, and place it into qe.h.
--- arch/powerpc/sysdev/qe_lib/qe_io.c | 94 +++++++++++++++++------------------- include/asm-powerpc/qe.h | 19 +++++++ 2 files changed, 64 insertions(+), 49 deletions(-)
arch/powerpc/sysdev/qe_lib/qe_io.c +45 -49
@@ -28,21 +28,7 @@#undef DEBUG -#define NUM_OF_PINS 32 - -struct port_regs { -__be32 cpodr;/* Open drain register */ -__be32 cpdata;/* Data register */ -__be32 cpdir1;/* Direction register */ -__be32 cpdir2;/* Direction register */ -__be32 cppar1;/* Pin assignment register */ -__be32 cppar2;/* Pin assignment register */ -#ifdef CONFIG_PPC_85xx -u8 pad[8 ]; -#endif -}; - -static struct port_regs __iomem *par_io; +static struct qe_pio_regs __iomem *par_io;static int num_par_io_ports =0 ;int par_io_init (struct device_node *np)
@@ -64,69 +50,79 @@ int par_io_init(struct device_node *np)return 0 ; } -int par_io_config_pin (u8 port,u8 pin,int dir,int open_drain, -int assignment,int has_irq) +void __par_io_config_pin (struct qe_pio_regs __iomem *par_io,u8 pin,int dir, +int open_drain,int assignment,int has_irq) { -u32 pin_mask1bit, pin_mask2bits, new_mask2bits, tmp_val; - -if (!par_io) -return -1 ; +u32 pin_mask1bit; +u32 pin_mask2bits; +u32 new_mask2bits; +u32 tmp_val;/* calculate pin location for single and 2 bits information */ - pin_mask1bit = (u32) (1 << (NUM_OF_PINS - (pin +1 ))); + pin_mask1bit = (u32) (1 << (QE_PIO_PINS - (pin +1 )));/* Set open drain, if required */ - tmp_val =in_be32 (&par_io[port].cpodr); + tmp_val =in_be32 (&par_io->cpodr);if (open_drain) -out_be32 (&par_io[port].cpodr, pin_mask1bit | tmp_val); +out_be32 (&par_io->cpodr, pin_mask1bit | tmp_val);else -out_be32 (&par_io[port].cpodr, ~pin_mask1bit & tmp_val); +out_be32 (&par_io->cpodr, ~pin_mask1bit & tmp_val);/* define direction */ - tmp_val = (pin > (NUM_OF_PINS /2 ) -1 ) ? -in_be32 (&par_io[port].cpdir2) : -in_be32 (&par_io[port].cpdir1); + tmp_val = (pin > (QE_PIO_PINS /2 ) -1 ) ? +in_be32 (&par_io->cpdir2) : +in_be32 (&par_io->cpdir1);/* get all bits mask for 2 bit per port */ - pin_mask2bits = (u32) (0x3 << (NUM_OF_PINS - - (pin % (NUM_OF_PINS /2 ) +1 ) *2 )); + pin_mask2bits = (u32) (0x3 << (QE_PIO_PINS - + (pin % (QE_PIO_PINS /2 ) +1 ) *2 ));/* Get the final mask we need for the right definition */ - new_mask2bits = (u32) (dir << (NUM_OF_PINS - - (pin % (NUM_OF_PINS /2 ) +1 ) *2 )); + new_mask2bits = (u32) (dir << (QE_PIO_PINS - + (pin % (QE_PIO_PINS /2 ) +1 ) *2 ));/* clear and set 2 bits mask */ -if (pin > (NUM_OF_PINS /2 ) -1 ) { -out_be32 (&par_io[port].cpdir2, +if (pin > (QE_PIO_PINS /2 ) -1 ) { +out_be32 (&par_io->cpdir2, ~pin_mask2bits & tmp_val); tmp_val &= ~pin_mask2bits; -out_be32 (&par_io[port].cpdir2, new_mask2bits | tmp_val); +out_be32 (&par_io->cpdir2, new_mask2bits | tmp_val); }else { -out_be32 (&par_io[port].cpdir1, +out_be32 (&par_io->cpdir1, ~pin_mask2bits & tmp_val); tmp_val &= ~pin_mask2bits; -out_be32 (&par_io[port].cpdir1, new_mask2bits | tmp_val); +out_be32 (&par_io->cpdir1, new_mask2bits | tmp_val); }/* define pin assignment */ - tmp_val = (pin > (NUM_OF_PINS /2 ) -1 ) ? -in_be32 (&par_io[port].cppar2) : -in_be32 (&par_io[port].cppar1); + tmp_val = (pin > (QE_PIO_PINS /2 ) -1 ) ? +in_be32 (&par_io->cppar2) : +in_be32 (&par_io->cppar1); - new_mask2bits = (u32) (assignment << (NUM_OF_PINS - - (pin % (NUM_OF_PINS /2 ) +1 ) *2 )); + new_mask2bits = (u32) (assignment << (QE_PIO_PINS - + (pin % (QE_PIO_PINS /2 ) +1 ) *2 ));/* clear and set 2 bits mask */ -if (pin > (NUM_OF_PINS /2 ) -1 ) { -out_be32 (&par_io[port].cppar2, +if (pin > (QE_PIO_PINS /2 ) -1 ) { +out_be32 (&par_io->cppar2, ~pin_mask2bits & tmp_val); tmp_val &= ~pin_mask2bits; -out_be32 (&par_io[port].cppar2, new_mask2bits | tmp_val); +out_be32 (&par_io->cppar2, new_mask2bits | tmp_val); }else { -out_be32 (&par_io[port].cppar1, +out_be32 (&par_io->cppar1, ~pin_mask2bits & tmp_val); tmp_val &= ~pin_mask2bits; -out_be32 (&par_io[port].cppar1, new_mask2bits | tmp_val); +out_be32 (&par_io->cppar1, new_mask2bits | tmp_val); } +} +EXPORT_SYMBOL (__par_io_config_pin); + +int par_io_config_pin (u8 port,u8 pin,int dir,int open_drain, +int assignment,int has_irq) +{ +if (!par_io || port >= num_par_io_ports) +return -EINVAL ; +__par_io_config_pin (&par_io[port], pin, dir, open_drain, assignment, + has_irq);return 0 ; }EXPORT_SYMBOL (par_io_config_pin);
@@ -137,10 +133,10 @@ int par_io_data_set(u8 port, u8 pin, u8 val)if (port >= num_par_io_ports)return -EINVAL ; -if (pin >=NUM_OF_PINS ) +if (pin >=QE_PIO_PINS )return -EINVAL ;/* calculate pin location */ - pin_mask = (u32) (1 << (NUM_OF_PINS -1 - pin)); + pin_mask = (u32) (1 << (QE_PIO_PINS -1 - pin)); tmp_val =in_be32 (&par_io[port].cpdata);
include/asm-powerpc/qe.h +19 -0
@@ -84,8 +84,27 @@ extern spinlock_t cmxgcr_lock;/* Export QE common operations */ extern void qe_reset (void ); + +/* QE PIO */ +#define QE_PIO_PINS 32 + +struct qe_pio_regs { +__be32 cpodr;/* Open drain register */ +__be32 cpdata;/* Data register */ +__be32 cpdir1;/* Direction register */ +__be32 cpdir2;/* Direction register */ +__be32 cppar1;/* Pin assignment register */ +__be32 cppar2;/* Pin assignment register */ +#ifdef CONFIG_PPC_85xx +u8 pad[8 ]; +#endif +}; +extern int par_io_init (struct device_node *np);extern int par_io_of_config (struct device_node *np); +extern void __par_io_config_pin (struct qe_pio_regs __iomem *par_io,u8 pin, +int dir,int open_drain,int assignment, +int has_irq);extern int par_io_config_pin (u8 port,u8 pin,int dir,int open_drain,int assignment,int has_irq);extern int par_io_data_set (u8 port,u8 pin,u8 val);
Signature · 1 line
1.5.5.1
Kumar Gala
AppliedRe: [PATCH 3/7] [POWERPC] QE: prepare QE PIO code for GPIO LIB support
Quoted 6 lines · Anton Vorontsov
- split and export
__par_io_config_pin()out ofpar_io_config_pin(), so we
could use the prefixed version with GPIO LIB API;
- rename structport_regstoqe_pio_regs, and place it intoqe.h;
- rename #defineNUM_OF_PINStoQE_PIO_PINS, and place it intoqe.h.
Quoted 7 lines
Signed-off-by Anton Vorontsov <[email protected]>Acked-by Timur Tabi <[email protected]>---
arch/powerpc/sysdev/qe_lib/qe_io.c| 94 +++++++++++++++++------------------- include/asm-powerpc/qe.h | 19 +++++++ 2 files changed, 64 insertions(+), 49 deletions(-)
applied.
- k
PATCH 4/7 QE: implement support for the GPIO LIB API
In reply to Anton VorontsovThis is needed to access QE GPIOs via Linux GPIO API.
--- Documentation/powerpc/booting-without-of.txt | 27 +++++ arch/powerpc/sysdev/qe_lib/Kconfig | 9 ++ arch/powerpc/sysdev/qe_lib/Makefile | 1 + arch/powerpc/sysdev/qe_lib/gpio.c | 148 ++++++++++++++++++++++++++ include/asm-powerpc/qe.h | 2 + 5 files changed, 187 insertions(+), 0 deletions(-) create mode 100644 arch/powerpc/sysdev/qe_lib/gpio.c
Documentation/powerpc/booting-without-of.txt +27 -0
@@ -1739,6 +1739,33 @@ platforms are moved over to use the flattened-device-tree model. ...... }; + Note that "par_io" nodes are obsolete, and should not be used for + the new device trees. Instead, each Par I/O bank should be represented + via its own gpio-controller node: + + Required properties: + - #gpio-cells : should be "2". + - compatible : should be "fsl,<chip>-qe-pario-bank", + "fsl,mpc8323-qe-pario-bank". + - reg : offset to the register set and its length. + - gpio-controller : node to identify gpio controllers. + + Example: + qe_pio_a: gpio-controller@1400 { + #gpio-cells = <2>; + compatible = "fsl,mpc8360-qe-pario-bank", + "fsl,mpc8323-qe-pario-bank"; + reg = <0x1400 0x18>; + gpio-controller; + }; + + qe_pio_e: gpio-controller@1460 { + #gpio-cells = <2>; + compatible = "fsl,mpc8360-qe-pario-bank", + "fsl,mpc8323-qe-pario-bank"; + reg = <0x1460 0x18>; + gpio-controller; + }; vi) Pin configuration nodes
arch/powerpc/sysdev/qe_lib/Kconfig +9 -0
@@ -24,3 +24,12 @@ config QE_USB bool help QE USB Host Controller support + +config QE_GPIO + bool "QE GPIO support" + depends on QUICC_ENGINE + select GENERIC_GPIO + select HAVE_GPIO_LIB + help + Say Y here if you're going to use hardware that connects to the + QE GPIOs.
arch/powerpc/sysdev/qe_lib/Makefile +1 -0
@@ -7,3 +7,4 @@ obj-$(CONFIG_UCC) += ucc.o obj-$(CONFIG_UCC_SLOW) += ucc_slow.o obj-$(CONFIG_UCC_FAST) += ucc_fast.o obj-$(CONFIG_QE_USB) += usb.o +obj-$(CONFIG_QE_GPIO) += gpio.o
arch/powerpc/sysdev/qe_lib/gpio.c new file +148 -0
148 lines not on this page · raw message
include/asm-powerpc/qe.h +2 -0
@@ -102,6 +102,8 @@ struct qe_pio_regs {extern int par_io_init (struct device_node *np);extern int par_io_of_config (struct device_node *np); +#define QE_PIO_DIR_IN 2 +#define QE_PIO_DIR_OUT 1extern void __par_io_config_pin (struct qe_pio_regs __iomem *par_io,u8 pin,int dir,int open_drain,int assignment,int has_irq);
Signature · 1 line
1.5.5.1
Re: [PATCH 4/7] [POWERPC] QE: implement support for the GPIO LIB API
Quoted 5 lines · Anton Vorontsov
This is needed to access QE GPIOs via Linux GPIO API.
Signed-off-by Anton Vorontsov <[email protected]>Acked-by Timur Tabi <[email protected]>---
Quoted 8 lines
Documentation/powerpc/booting-without-of.txt | 27 +++++ arch/powerpc/sysdev/qe_lib/Kconfig | 9 ++ arch/powerpc/sysdev/qe_lib/Makefile | 1 + arch/powerpc/sysdev/qe_lib/gpio.c | 148 +++++++++++++++++ +++++++++ include/asm-powerpc/qe.h | 2 + 5 files changed, 187 insertions(+), 0 deletions(-)create mode 100644
arch/powerpc/sysdev/qe_lib/gpio.c
didn't we talk about putting this is drivers/gpio/ ?
- k
Re: [PATCH 4/7] [POWERPC] QE: implement support for the GPIO LIB API
Quoted 17 lines · Kumar Gala
Quoted 5 lines · Anton Vorontsov
This is needed to access QE GPIOs via Linux GPIO API.
Signed-off-by Anton Vorontsov <[email protected]>Acked-by Timur Tabi <[email protected]>---
Quoted 8 lines
Documentation/powerpc/booting-without-of.txt | 27 +++++ arch/powerpc/sysdev/qe_lib/Kconfig | 9 ++ arch/powerpc/sysdev/qe_lib/Makefile | 1 + arch/powerpc/sysdev/qe_lib/gpio.c | 148 +++++++++++++++++ +++++++++ include/asm-powerpc/qe.h | 2 + 5 files changed, 187 insertions(+), 0 deletions(-)create mode 100644
arch/powerpc/sysdev/qe_lib/gpio.c
Quoted 1 line
didn't we talk about putting this is
drivers/gpio/?
:-)
Yes, we did. And David Brownell politely suggested to not do this, and instead leave it in arch/ as do all other arches for their SOC GPIOs.
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
Re: [PATCH 4/7] [POWERPC] QE: implement support for the GPIO LIB API
Quoted 18 lines · Anton Vorontsov
Quoted 17 lines · Kumar Gala
Quoted 13 lines · Anton Vorontsov
This is needed to access QE GPIOs via Linux GPIO API.
Signed-off-by Anton Vorontsov <[email protected]>Acked-by Timur Tabi <[email protected]>---
Documentation/powerpc/booting-without-of.txt | 27 +++++ arch/powerpc/sysdev/qe_lib/Kconfig | 9 ++ arch/powerpc/sysdev/qe_lib/Makefile | 1 + arch/powerpc/sysdev/qe_lib/gpio.c | 148 +++++++++++++++++ +++++++++ include/asm-powerpc/qe.h | 2 + 5 files changed, 187 insertions(+), 0 deletions(-)create mode 100644
arch/powerpc/sysdev/qe_lib/gpio.c
Quoted 7 lines
Quoted 1 line
didn't we talk about putting this is
drivers/gpio/?:-)
Yes, we did. And David Brownell politely suggested to not do this, and instead leave it in
arch/as do all other arches for their SOC GPIOs.
Ping?
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
PATCH 5/7 83xx: new board support: MPC8360E-RDK
In reply to Anton VorontsovThis is patch adds board file, device tree, and defconfig for the new board, made by Freescale Semiconductor Inc. and Logic Product Development.
Currently supported:
1. UEC{1,2,7,4};
2. I2C;
3. SPI;
4. NS16550 serial;
5. PCI and miniPCI;
6. Intel NOR StrataFlash X16 64Mbit PC28F640P30T85;
7. Graphics controller, Fujitsu MB86277.
Not supported in this patch:
1. StMICRO NAND512W3A2BN6E, 512 Mbit (supported with FSL UPM NAND driver);
2. FHCI USB (supported with FHCI driver).
3. QE Serial UCCs (tested to not work with ucc_uart driver, reason unknown, yet);
4. ADC AD7843 (tested to work, but support via device tree depends on major SPI rework, GPIO API, etc);
--- arch/powerpc/boot/dts/mpc836x_rdk.dts | 397 ++++++++ arch/powerpc/configs/83xx/mpc836x_rdk_defconfig | 1128 +++++++++++++++++++++++ arch/powerpc/platforms/83xx/Kconfig | 11 + arch/powerpc/platforms/83xx/Makefile | 1 + arch/powerpc/platforms/83xx/mpc836x_rdk.c | 102 ++ 5 files changed, 1639 insertions(+), 0 deletions(-) create mode 100644 arch/powerpc/boot/dts/mpc836x_rdk.dts create mode 100644 arch/powerpc/configs/83xx/mpc836x_rdk_defconfig create mode 100644 arch/powerpc/platforms/83xx/mpc836x_rdk.c
arch/powerpc/boot/dts/mpc836x_rdk.dts new file +397 -0
@@ -0,0 +1,397 @@ +/* + * MPC8360E RDK Device Tree Source + * + * Copyright 2006 Freescale Semiconductor Inc. + * Copyright 2007-2008 MontaVista Software, Inc. + * + * Author: Anton Vorontsov <[email protected]> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + compatible = "fsl,mpc8360rdk"; + + aliases { + serial0 = &serial0; + serial1 = &serial1; + serial2 = &serial2; + serial3 = &serial3; + ethernet0 = &enet0; + ethernet1 = &enet1; + ethernet2 = &enet2; + ethernet3 = &enet3; + pci0 = &pci0; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + PowerPC,8360@0 { + device_type = "cpu"; + reg = <0>; + d-cache-line-size = <32>; + i-cache-line-size = <32>; + d-cache-size = <32768>; + i-cache-size = <32768>; + /* filled by u-boot */ + timebase-frequency = <0>; + bus-frequency = <0>; + clock-frequency = <0>; + }; + }; + + memory { + device_type = "memory"; + /* filled by u-boot */ + reg = <0 0>; + }; + + soc@e0000000 { + #address-cells = <1>; + #size-cells = <1>; + device_type = "soc"; + compatible = "fsl,mpc8360-immr", "fsl,immr", "fsl,soc", + "simple-bus"; + ranges = <0 0xe0000000 0x200000>; + reg = <0xe0000000 0x200>; + /* filled by u-boot */ + bus-frequency = <0>; + + wdt@200 { + compatible = "mpc83xx_wdt"; + reg = <0x200 0x100>; + }; + + i2c@3000 { + #address-cells = <1>; + #size-cells = <0>; + cell-index = <0>; + compatible = "fsl-i2c"; + reg = <0x3000 0x100>; + interrupts = <14 8>; + interrupt-parent = <&ipic>; + dfsrr; + }; + + i2c@3100 { + #address-cells = <1>; + #size-cells = <0>; + cell-index = <1>; + compatible = "fsl-i2c"; + reg = <0x3100 0x100>; + interrupts = <16 8>; + interrupt-parent = <&ipic>; + dfsrr; + }; + + serial0: serial@4500 { + device_type = "serial"; + compatible = "ns16550"; + reg = <0x4500 0x100>; + interrupts = <9 8>; + interrupt-parent = <&ipic>; + /* filled by u-boot */ + clock-frequency = <0>; + }; + + serial1: serial@4600 { + device_type = "serial"; + compatible = "ns16550"; + reg = <0x4600 0x100>; + interrupts = <10 8>; + interrupt-parent = <&ipic>; + /* filled by u-boot */ + clock-frequency = <0>; + }; + + crypto@30000 { + compatible = "fsl,sec2-crypto"; + reg = <0x30000 0x10000>; + interrupts = <11 8>; + interrupt-parent = <&ipic>; + num-channels = <4>; + channel-fifo-len = <24>; + exec-units-mask = <0x7e>; + /* + * desc mask is for rev1.x, we need runtime fixup + * for >=2.x + */ + descriptor-types-mask = <0x1010ebf>; + }; + + ipic: interrupt-controller@700 { + #address-cells = <0>; + #interrupt-cells = <2>; + compatible = "fsl,pq2pro-pic", "fsl,ipic"; + interrupt-controller; + reg = <0x700 0x100>; + }; + + qe_pio_b: gpio-controller@1418 { + #gpio-cells = <2>; + compatible = "fsl,mpc8360-qe-pario-bank", + "fsl,mpc8323-qe-pario-bank"; + reg = <0x1418 0x18>; + gpio-controller; + }; + + qe_pio_e: gpio-controller@1460 { + #gpio-cells = <2>; + compatible = "fsl,mpc8360-qe-pario-bank", + "fsl,mpc8323-qe-pario-bank"; + reg = <0x1460 0x18>; + gpio-controller; + }; + + qe@100000 { + #address-cells = <1>; + #size-cells = <1>; + device_type = "qe"; + compatible = "fsl,qe", "simple-bus"; + ranges = <0 0x100000 0x100000>; + reg = <0x100000 0x480>; + /* filled by u-boot */ + clock-frequency = <0>; + bus-frequency = <0>; + brg-frequency = <0>; + + muram@10000 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "fsl,qe-muram", "fsl,cpm-muram"; + ranges = <0 0x10000 0xc000>; + + data-only@0 { + compatible = "fsl,qe-muram-data", + "fsl,cpm-muram-data"; + reg = <0 0xc000>; + }; + }; + + timer@440 { + compatible = "fsl,mpc8360-qe-gtm", + "fsl,qe-gtm", "fsl,gtm"; + reg = <0x440 0x40>; + interrupts = <12 13 14 15>; + interrupt-parent = <&qeic>; + /* filled by u-boot */ + clock-frequency = <0>; + }; + + spi@4c0 { + cell-index = <0>; + compatible = "fsl,spi"; + reg = <0x4c0 0x40>; + interrupts = <2>; + interrupt-parent = <&qeic>; + mode = "cpu-qe"; + }; + + spi@500 { + cell-index = <1>; + compatible = "fsl,spi"; + reg = <0x500 0x40>; + interrupts = <1>; + interrupt-parent = <&qeic>; + mode = "cpu-qe"; + }; + + enet0: ucc@2000 { + device_type = "network"; + compatible = "ucc_geth"; + cell-index = <1>; + reg = <0x2000 0x200>; + interrupts = <32>; + interrupt-parent = <&qeic>; + rx-clock-name = "none"; + tx-clock-name = "clk9"; + phy-handle = <&phy2>; + phy-connection-type = "rgmii-rxid"; + /* filled by u-boot */ + local-mac-address = [ 00 00 00 00 00 00 ]; + }; + + enet1: ucc@3000 { + device_type = "network"; + compatible = "ucc_geth"; + cell-index = <2>; + reg = <0x3000 0x200>; + interrupts = <33>; + interrupt-parent = <&qeic>; + rx-clock-name = "none"; + tx-clock-name = "clk4"; + phy-handle = <&phy4>; + phy-connection-type = "rgmii-rxid"; + /* filled by u-boot */ + local-mac-address = [ 00 00 00 00 00 00 ]; + }; + + enet2: ucc@2600 { + device_type = "network"; + compatible = "ucc_geth"; + cell-index = <7>; + reg = <0x2600 0x200>; + interrupts = <42>; + interrupt-parent = <&qeic>; + rx-clock-name = "clk20"; + tx-clock-name = "clk19"; + phy-handle = <&phy1>; + phy-connection-type = "mii"; + /* filled by u-boot */ + local-mac-address = [ 00 00 00 00 00 00 ]; + }; + + enet3: ucc@3200 { + device_type = "network"; + compatible = "ucc_geth"; + cell-index = <4>; + reg = <0x3200 0x200>; + interrupts = <35>; + interrupt-parent = <&qeic>; + rx-clock-name = "clk8"; + tx-clock-name = "clk7"; + phy-handle = <&phy3>; + phy-connection-type = "mii"; + /* filled by u-boot */ + local-mac-address = [ 00 00 00 00 00 00 ]; + }; + + mdio@2120 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "fsl,ucc-mdio"; + reg = <0x2120 0x18>; + + phy1: ethernet-phy@1 { + device_type = "ethernet-phy"; + compatible = "national,DP83848VV"; + reg = <1>; + }; + + phy2: ethernet-phy@2 { + device_type = "ethernet-phy"; + compatible = "broadcom,BCM5481UA2KMLG"; + reg = <2>; + }; + + phy3: ethernet-phy@3 { + device_type = "ethernet-phy"; + compatible = "national,DP83848VV"; + reg = <3>; + }; + + phy4: ethernet-phy@4 { + device_type = "ethernet-phy"; + compatible = "broadcom,BCM5481UA2KMLG"; + reg = <4>; + }; + }; + + serial2: ucc@2400 { + device_type = "serial"; + compatible = "ucc_uart"; + reg = <0x2400 0x200>; + cell-index = <5>; + port-number = <0>; + rx-clock-name = "brg7"; + tx-clock-name = "brg8"; + interrupts = <40>; + interrupt-parent = <&qeic>; + soft-uart; + }; + + serial3: ucc@3400 { + device_type = "serial"; + compatible = "ucc_uart"; + reg = <0x3400 0x200>; + cell-index = <6>; + port-number = <1>; + rx-clock-name = "brg13"; + tx-clock-name = "brg14"; + interrupts = <41>; + interrupt-parent = <&qeic>; + soft-uart; + }; + + qeic: interrupt-controller@80 { + #address-cells = <0>; + #interrupt-cells = <1>; + compatible = "fsl,qe-ic"; + interrupt-controller; + reg = <0x80 0x80>; + big-endian; + interrupts = <32 8 33 8>; + interrupt-parent = <&ipic>; + }; + }; + }; + + localbus@e0005000 { + #address-cells = <2>; + #size-cells = <1>; + compatible = "fsl,mpc8360-localbus", "fsl,pq2pro-localbus", + "simple-bus"; + reg = <0xe0005000 0xd8>; + ranges = <0 0 0xff800000 0x0800000 + 1 0 0x60000000 0x0001000 + 2 0 0x70000000 0x4000000>; + + flash@0,0 { + compatible = "intel,PC28F640P30T85", "cfi-flash"; + reg = <0 0 0x800000>; + bank-width = <2>; + device-width = <1>; + }; + + display@2,0 { + device_type = "display"; + compatible = "fujitsu,MB86277", "fujitsu,mint"; + reg = <2 0 0x4000000>; + fujitsu,sh3; + little-endian; + /* filled by u-boot */ + address = <0>; + depth = <0>; + width = <0>; + height = <0>; + linebytes = <0>; + /* linux,opened; - added by uboot */ + }; + }; + + pci0: pci@e0008500 { + #address-cells = <3>; + #size-cells = <2>; + #interrupt-cells = <1>; + device_type = "pci"; + compatible = "fsl,mpc8360-pci", "fsl,mpc8349-pci"; + reg = <0xe0008500 0x100>; + ranges = <0x02000000 0 0x90000000 0x90000000 0 0x10000000 + 0x42000000 0 0x80000000 0x80000000 0 0x10000000 + 0x01000000 0 0xe0300000 0xe0300000 0 0x00100000>; + interrupts = <66 8>; + interrupt-parent = <&ipic>; + interrupt-map-mask = <0xf800 0 0 7>; + interrupt-map = </* miniPCI0 IDSEL 0x14 AD20 */ + 0xa000 0 0 1 &ipic 18 8 + 0xa000 0 0 2 &ipic 19 8 + + /* PCI1 IDSEL 0x15 AD21 */ + 0xa800 0 0 1 &ipic 19 8 + 0xa800 0 0 2 &ipic 20 8 + 0xa800 0 0 3 &ipic 21 8 + 0xa800 0 0 4 &ipic 18 8>; + /* filled by u-boot */ + bus-range = <0 0>; + clock-frequency = <0>; + }; +};
arch/powerpc/configs/83xx/mpc836x_rdk_defconfig new file +1128 -0
1,128 lines not on this page · raw message
arch/powerpc/platforms/83xx/Kconfig +11 -0
@@ -58,6 +58,17 @@ config MPC836x_MDS help This option enables support for the MPC836x MDS Processor Board. +config MPC836x_RDK + bool "Freescale/Logic MPC836x RDK" + select DEFAULT_UIMAGE + select QUICC_ENGINE + select QE_GPIO + select FSL_GTM + select FSL_LBC + help + This option enables support for the MPC836x RDK Processor Board, + also known as ZOOM PowerQUICC Kit. + config MPC837x_MDS bool "Freescale MPC837x MDS" select DEFAULT_UIMAGE
arch/powerpc/platforms/83xx/Makefile +1 -0
@@ -8,6 +8,7 @@ obj-$(CONFIG_MPC832x_RDB) += mpc832x_rdb.o obj-$(CONFIG_MPC834x_MDS) += mpc834x_mds.o obj-$(CONFIG_MPC834x_ITX) += mpc834x_itx.o obj-$(CONFIG_MPC836x_MDS) += mpc836x_mds.o +obj-$(CONFIG_MPC836x_RDK) += mpc836x_rdk.o obj-$(CONFIG_MPC832x_MDS) += mpc832x_mds.o obj-$(CONFIG_MPC837x_MDS) += mpc837x_mds.o obj-$(CONFIG_SBC834x) += sbc834x.o
arch/powerpc/platforms/83xx/mpc836x_rdk.c new file +102 -0
102 lines not on this page · raw message
Signature · 1 line
1.5.5.1
Re: [PATCH 5/7] [POWERPC] 83xx: new board support: MPC8360E-RDK
Quoted 2 lines · Anton Vorontsov
3. QE Serial UCCs (tested to not work with
ucc_uartdriver, reason unknown, yet);
How far did you get on debugging this?
Signature · 2 lines
Timur Tabi Linux Kernel Developer @ Freescale
Re: [PATCH 5/7] [POWERPC] 83xx: new board support: MPC8360E-RDK
Quoted 6 lines · Timur Tabi
Quoted 2 lines · Anton Vorontsov
3. QE Serial UCCs (tested to not work with
ucc_uartdriver, reason unknown, yet);How far did you get on debugging this?
Right up to an oscilloscope. :-) With latest QE ram update I can see that ucc_uart is able to transmit the data, but receiver is unable get anything (RDK has two ucc_uarts with rs485 transceivers, I looped them back).
Anyway, I would probably spent more time on it if I didn't have to always rebase&resend this over and over again without any substantial changes. :-)
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
PATCH 6/7 booting-without-of: add FHCI USB, FSL MCU, FSL UPM and GPIO LEDs bindings
In reply to Anton VorontsovThis patch adds few bindings for the new drivers to be submitted through appropriate maintainers.
--- Documentation/powerpc/booting-without-of.txt | 125 ++++++++++++++++++++++++++ 1 files changed, 125 insertions(+), 0 deletions(-)
Documentation/powerpc/booting-without-of.txt +125 -0
@@ -62,6 +62,10 @@ Table of Contents s) Freescale on board FPGA t) Freescael MSI interrupt controller u) Freescale General-purpose Timers Module + v) Freescale QUICC Engine USB Controller + w) Freescale MCU with MPC8349E-mITX compatible firmware + x) Freescale Localbus UPM programmed to work with NAND flash + y) LEDs on GPIOs VII - Marvell Discovery mv64[345]6x System Controller chips 1) The /system-controller node
@@ -2970,6 +2974,127 @@ platforms are moved over to use the flattened-device-tree model. clock-frequency = <0>; }; + v) Freescale QUICC Engine USB Controller + + Required properties: + - compatible : should be "fsl,<chip>-qe-usb", "fsl,mpc8323-qe-usb"; + - reg : the first two cells should contain gtm registers location and + length, the next two two cells should contain PRAM location and + length. + - interrupts : should contain USB interrupt. + - interrupt-parent : interrupt source phandle. + - fsl,fullspeed-clock : specifies the full speed USB clock source in + "clk<num>" or "brg<num>" format. + - fsl,lowspeed-clock : specifies the low speed USB clock source in + "clk<num>" or "brg<num>" format. + - fsl,usb-mode : should be "host". + - linux,hub-power-budget : optional, USB power budget for the root hub + in mA. + - gpios : should specify GPIOs in this order: USBOE, USBTP, USBTN, USBRP, + USBRN, SPEED (optional), and POWER (optional). + + Example: + + usb@6c0 { + compatible = "fsl,mpc8360-qe-usb", "fsl,mpc8323-qe-usb"; + reg = <0x6c0 0x40 0x8b00 0x100>; + interrupts = <11>; + interrupt-parent = <&qeic>; + fsl,fullspeed-clock = "clk21"; + fsl,usb-mode = "host"; + gpios = <&qe_pio_b 2 0 /* USBOE */ + &qe_pio_b 3 0 /* USBTP */ + &qe_pio_b 8 0 /* USBTN */ + &qe_pio_b 9 0 /* USBRP */ + &qe_pio_b 11 0 /* USBRN */ + &qe_pio_e 20 0 /* SPEED */ + &qe_pio_e 21 0 /* POWER */>; + }; + + w) Freescale MCU with MPC8349E-mITX compatible firmware + + Required properties: + - compatible : "fsl,<mcu-chip>-<board>", "fsl,mcu-mpc8349emitx"; + - reg : should specify I2C address (0x0a). + - #address-cells : should be 0. + - #size-cells : should be 0. + - #gpio-cells : should be 2. + - gpio-controller : should be present; + + Example: + + mcu_pio: mcu@0a { + #address-cells = <0>; + #size-cells = <0>; + #gpio-cells = <2>; + compatible = "fsl,mc9s08qg8-mpc8349emitx", + "fsl,mcu-mpc8349emitx"; + reg = <0x0a>; + gpio-controller; + }; + + x) Freescale Localbus UPM programmed to work with NAND flash + + Required properties: + - #address-cells : should be 0; + - #size-cells : should be 0; + - compatible : "fsl,upm-nand". + - reg : should specify localbus chip select and size used for the chip. + - fsl,upm-addr-offset : UPM pattern offset for the address latch. + - fsl,upm-cmd-offset : UPM pattern offset for the command latch. + - gpios : may specify optional GPIO connected to the Ready-Not-Busy pin. + + Example: + + upm@1,0 { + #address-cells = <0>; + #size-cells = <0>; + compatible = "fsl,upm-nand"; + reg = <1 0 1>; + fsl,upm-addr-offset = <16>; + fsl,upm-cmd-offset = <8>; + gpios = <&qe_pio_e 18 0>; + + flash { + #address-cells = <1>; + #size-cells = <1>; + compatible = "stmicro,NAND512W3A2BN6E"; + + partition@0 { + ... + }; + }; + }; + + y) LEDs on GPIOs + + Required properties: + - compatible : should be "linux,gpio-led". + - linux,name : LED name. + - linux,active-low : property should be present if LED wired as + active-low. + - linux,default-trigger : Linux default trigger for this LED. + - linux,brightness : default brightness. + - gpios : should specify LED GPIO. + + Example: + + led@0 { + compatible = "linux,gpio-led"; + linux,name = "pwr"; + linux,brightness = <1>; + linux,active-low; + gpios = <&mcu_pio 0>; + }; + + led@1 { + compatible = "linux,gpio-led"; + linux,name = "hdd"; + linux,default-trigger = "ide-disk"; + linux,active-low; + gpios = <&mcu_pio 1>; + }; + VII - Marvell Discovery mv64[345]6x System Controller chips ===========================================================
Signature · 1 line
1.5.5.1
Re: [PATCH 6/7] [POWERPC] booting-without-of: add FHCI USB, FSL MCU, FSL UPM and GPIO LEDs bindings
Quoted 6 lines
+ - fsl,fullspeed-clock : specifies the full speed USB clock
source in(quoted diff) +2
-0+ "clk<num>" or "brg<num>" format. + - fsl,lowspeed-clock : specifies the low speed USB clock sourcein
+ "clk<num>" or "brg<num>" format.
What format is "<num>" in?
Quoted 1 line
+ - fsl,usb-mode : should be "host".
If that's the only possible value, this property is unnecessary, no? It probably would make sense to make this optional (and default to "host") anyway.
Quoted 3 lines
+ - linux,hub-power-budget : optional, USB power budget for the
root hub
+ in mA.
Why is this linux-specific?
Documentation/powerpc/booting-without-of.txt platforms are moved over to use the flattened-device-tree model. · line 3036
Quoted 9 lines
Documentation/powerpc/booting-without-of.txt +8
-0+ w) Freescale MCU with MPC8349E-mITX compatible firmware + + Required properties: + - compatible : "fsl,<mcu-chip>-<board>", "fsl,mcu-mpc8349emitx"; + - reg : should specify I2C address (0x0a). + - #address-cells : should be 0. + - #size-cells : should be 0. + x) Freescale Localbus UPM programmed to work with NAND flash
Similar here, except this one is never a GPIO controller.
If the point to have #a = #s = 0 is to not have a unit-address in the child nodes: you should do that simply by not specifying a "reg" in the child nodes.
Quoted 1 line
+ y) LEDs on GPIOs
This one is so full of "linux," stuff that I won't review it -- I wouldn't know where to start, sorry.
Segher
Re: [PATCH 6/7] [POWERPC] booting-without-of: add FHCI USB, FSL MCU, FSL UPM and GPIO LEDs bindings
Quoted 7 lines · Segher Boessenkool
Quoted 6 lines
+ - fsl,fullspeed-clock : specifies the full speed USB clock
source in(quoted diff) +2
-0+ "clk<num>" or "brg<num>" format. + - fsl,lowspeed-clock : specifies the low speed USB clock sourcein
+ "clk<num>" or "brg<num>" format.
Quoted 5 lines
What format is "<num>" in?
Quoted 1 line
+ - fsl,usb-mode : should be "host".
If that's the only possible value,
This could be "peripheral" and "otg" in future.
Quoted 22 lines
this property is unnecessary,
no? It probably would make sense to make this optional (and default to "host") anyway.Quoted 3 lines
+ - linux,hub-power-budget : optional, USB power budget for the
root hub
+ in mA.Why is this linux-specific?
Review
Quoted 9 lines
(quoted diff) +8
-0+ w) Freescale MCU with MPC8349E-mITX compatible firmware + + Required properties: + - compatible : "fsl,<mcu-chip>-<board>", "fsl,mcu-mpc8349emitx"; + - reg : should specify I2C address (0x0a). + - #address-cells : should be 0. + - #size-cells : should be 0. + x) Freescale Localbus UPM programmed to work with NAND flashSimilar here, except this one is never a GPIO controller.
Quoted 8 lines
If the point to have #a = #s = 0 is to not have a unit-address in the child nodes: you should do that simply by not specifying a "reg" in the child nodes.
Quoted 1 line
+ y) LEDs on GPIOs
This one is so full of "linux," stuff that I won't review it -- I wouldn't know where to start, sorry.
How about this version? (diff against the previous version is here, and new full version will follow)
Doubts:
1. I removed linux,name and now Linux will use node's name. Is this okay, or "name" property would be better?
2. I can't thinkout replacement for the linux,default-trigger, this is really linux-specific. The value could be anything Linux implements currently or will implement in the future...
Documentation/powerpc/booting-without-of.txt +23 -34
@@ -2951,18 +2951,22 @@ platforms are moved over to use the flattened-device-tree model. Required properties: - compatible : should be "fsl,<chip>-qe-usb", "fsl,mpc8323-qe-usb"; - - reg : the first two cells should contain gtm registers location and + - reg : the first two cells should contain usb registers location and length, the next two two cells should contain PRAM location and length. - interrupts : should contain USB interrupt. - interrupt-parent : interrupt source phandle. - - fsl,fullspeed-clock : specifies the full speed USB clock source in - "clk<num>" or "brg<num>" format. - - fsl,lowspeed-clock : specifies the low speed USB clock source in - "clk<num>" or "brg<num>" format. - - fsl,usb-mode : should be "host". - - linux,hub-power-budget : optional, USB power budget for the root hub - in mA. + - fsl,fullspeed-clock : specifies the full speed USB clock source: + "none": clock source is disabled + "brg1" through "brg16": clock source is BRG1-BRG16, respectively + "clk1" through "clk24": clock source is CLK1-CLK24, respectively + - fsl,lowspeed-clock : specifies the low speed USB clock source: + "none": clock source is disabled + "brg1" through "brg16": clock source is BRG1-BRG16, respectively + "clk1" through "clk24": clock source is CLK1-CLK24, respectively + - fsl,usb-mode : (optional) so far acceptable value is "host" only + (this is default mode if property is absent). + - hub-power-budget : optional, USB power budget for the root hub, in mA. - gpios : should specify GPIOs in this order: USBOE, USBTP, USBTN, USBRP, USBRN, SPEED (optional), and POWER (optional).
@@ -2974,7 +2978,6 @@ platforms are moved over to use the flattened-device-tree model. interrupts = <11>; interrupt-parent = <&qeic>; fsl,fullspeed-clock = "clk21"; - fsl,usb-mode = "host"; gpios = <&qe_pio_b 2 0 /* USBOE */ &qe_pio_b 3 0 /* USBTP */ &qe_pio_b 8 0 /* USBTN */
@@ -2989,16 +2992,12 @@ platforms are moved over to use the flattened-device-tree model. Required properties: - compatible : "fsl,<mcu-chip>-<board>", "fsl,mcu-mpc8349emitx"; - reg : should specify I2C address (0x0a). - - #address-cells : should be 0. - - #size-cells : should be 0. - #gpio-cells : should be 2. - gpio-controller : should be present; Example: mcu_pio: mcu@0a { - #address-cells = <0>; - #size-cells = <0>; #gpio-cells = <2>; compatible = "fsl,mc9s08qg8-mpc8349emitx", "fsl,mcu-mpc8349emitx";
@@ -3009,8 +3008,6 @@ platforms are moved over to use the flattened-device-tree model. x) Freescale Localbus UPM programmed to work with NAND flash Required properties: - - #address-cells : should be 0; - - #size-cells : should be 0; - compatible : "fsl,upm-nand". - reg : should specify localbus chip select and size used for the chip. - fsl,upm-addr-offset : UPM pattern offset for the address latch.
@@ -3020,8 +3017,6 @@ platforms are moved over to use the flattened-device-tree model. Example: upm@1,0 { - #address-cells = <0>; - #size-cells = <0>; compatible = "fsl,upm-nand"; reg = <1 0 1>; fsl,upm-addr-offset = <16>;
@@ -3042,30 +3037,24 @@ platforms are moved over to use the flattened-device-tree model. y) LEDs on GPIOs Required properties: - - compatible : should be "linux,gpio-led". - - linux,name : LED name. - - linux,active-low : property should be present if LED wired as - active-low. - - linux,default-trigger : Linux default trigger for this LED. - - linux,brightness : default brightness. + - compatible : should be "gpio-led". + - default-brightness : (optional) default brightness: 1 on, 0 off. + Assumed off if property doesn't present. + - linux,default-trigger : (optional) Linux default trigger for this LED. - gpios : should specify LED GPIO. Example: - led@0 { - compatible = "linux,gpio-led"; - linux,name = "pwr"; - linux,brightness = <1>; - linux,active-low; - gpios = <&mcu_pio 0>; + pwr-led@0 { + compatible = "gpio-led"; + default-brightness = <1>; + gpios = <&mcu_pio 0 1>; }; - led@1 { - compatible = "linux,gpio-led"; - linux,name = "hdd"; + hdd-led@1 { + compatible = "gpio-led"; linux,default-trigger = "ide-disk"; - linux,active-low; - gpios = <&mcu_pio 1>; + gpios = <&mcu_pio 1 0>; }; VII - Marvell Discovery mv64[345]6x System Controller chips
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
PATCH 6/7 booting-without-of: add FHCI USB, FSL MCU, FSL UPM and GPIO LEDs bindings
This patch adds few bindings for the new drivers to be submitted through appropriate maintainers.
--- Documentation/powerpc/booting-without-of.txt | 114 ++++++++++++++++++++++++++ 1 files changed, 114 insertions(+), 0 deletions(-)
Documentation/powerpc/booting-without-of.txt +114 -0
@@ -62,6 +62,10 @@ Table of Contents s) Freescale on board FPGA t) Freescael MSI interrupt controller u) Freescale General-purpose Timers Module + v) Freescale QUICC Engine USB Controller + w) Freescale MCU with MPC8349E-mITX compatible firmware + x) Freescale Localbus UPM programmed to work with NAND flash + y) LEDs on GPIOs VII - Marvell Discovery mv64[345]6x System Controller chips 1) The /system-controller node
@@ -2943,6 +2947,116 @@ platforms are moved over to use the flattened-device-tree model. clock-frequency = <0>; }; + v) Freescale QUICC Engine USB Controller + + Required properties: + - compatible : should be "fsl,<chip>-qe-usb", "fsl,mpc8323-qe-usb"; + - reg : the first two cells should contain usb registers location and + length, the next two two cells should contain PRAM location and + length. + - interrupts : should contain USB interrupt. + - interrupt-parent : interrupt source phandle. + - fsl,fullspeed-clock : specifies the full speed USB clock source: + "none": clock source is disabled + "brg1" through "brg16": clock source is BRG1-BRG16, respectively + "clk1" through "clk24": clock source is CLK1-CLK24, respectively + - fsl,lowspeed-clock : specifies the low speed USB clock source: + "none": clock source is disabled + "brg1" through "brg16": clock source is BRG1-BRG16, respectively + "clk1" through "clk24": clock source is CLK1-CLK24, respectively + - fsl,usb-mode : (optional) so far acceptable value is "host" only + (this is default mode if property is absent). + - hub-power-budget : optional, USB power budget for the root hub, in mA. + - gpios : should specify GPIOs in this order: USBOE, USBTP, USBTN, USBRP, + USBRN, SPEED (optional), and POWER (optional). + + Example: + + usb@6c0 { + compatible = "fsl,mpc8360-qe-usb", "fsl,mpc8323-qe-usb"; + reg = <0x6c0 0x40 0x8b00 0x100>; + interrupts = <11>; + interrupt-parent = <&qeic>; + fsl,fullspeed-clock = "clk21"; + gpios = <&qe_pio_b 2 0 /* USBOE */ + &qe_pio_b 3 0 /* USBTP */ + &qe_pio_b 8 0 /* USBTN */ + &qe_pio_b 9 0 /* USBRP */ + &qe_pio_b 11 0 /* USBRN */ + &qe_pio_e 20 0 /* SPEED */ + &qe_pio_e 21 0 /* POWER */>; + }; + + w) Freescale MCU with MPC8349E-mITX compatible firmware + + Required properties: + - compatible : "fsl,<mcu-chip>-<board>", "fsl,mcu-mpc8349emitx"; + - reg : should specify I2C address (0x0a). + - #gpio-cells : should be 2. + - gpio-controller : should be present; + + Example: + + mcu_pio: mcu@0a { + #gpio-cells = <2>; + compatible = "fsl,mc9s08qg8-mpc8349emitx", + "fsl,mcu-mpc8349emitx"; + reg = <0x0a>; + gpio-controller; + }; + + x) Freescale Localbus UPM programmed to work with NAND flash + + Required properties: + - compatible : "fsl,upm-nand". + - reg : should specify localbus chip select and size used for the chip. + - fsl,upm-addr-offset : UPM pattern offset for the address latch. + - fsl,upm-cmd-offset : UPM pattern offset for the command latch. + - gpios : may specify optional GPIO connected to the Ready-Not-Busy pin. + + Example: + + upm@1,0 { + compatible = "fsl,upm-nand"; + reg = <1 0 1>; + fsl,upm-addr-offset = <16>; + fsl,upm-cmd-offset = <8>; + gpios = <&qe_pio_e 18 0>; + + flash { + #address-cells = <1>; + #size-cells = <1>; + compatible = "stmicro,NAND512W3A2BN6E"; + + partition@0 { + ... + }; + }; + }; + + y) LEDs on GPIOs + + Required properties: + - compatible : should be "gpio-led". + - default-brightness : (optional) default brightness: 1 on, 0 off. + Assumed off if property doesn't present. + - linux,default-trigger : (optional) Linux default trigger for this LED. + - gpios : should specify LED GPIO. + + Example: + + pwr-led@0 { + compatible = "gpio-led"; + default-brightness = <1>; + gpios = <&mcu_pio 0 1>; + }; + + hdd-led@1 { + compatible = "gpio-led"; + linux,default-trigger = "ide-disk"; + gpios = <&mcu_pio 1 0>; + }; + VII - Marvell Discovery mv64[345]6x System Controller chips ===========================================================
Signature · 1 line
1.5.5.1
PATCH 7/7 qe_lib: switch to the cpm_muram implementation
In reply to Anton VorontsovThis is very trivial patch. We're transitioning to the cpm_muram_* calls. That's it.
Less trivial changes:
- BD_SC_* defines were defined in the cpm.h and qe.h, so to avoid redefines we remove BD_SC from the qe.h and use cpm.h along with cpm_muram_* prototypes;
- qe_muram_dump was unused and thus removed;
- added some code to the cpm_common.c to support legacy QE bindings (data-only node name).
- For convenience, define qe_* calls to cpm_*. So drivers need not to be changed.
--- arch/powerpc/sysdev/Makefile | 1 + arch/powerpc/sysdev/cpm_common.c | 16 +++++- arch/powerpc/sysdev/qe_lib/qe.c | 92 -------------------------------------- include/asm-powerpc/cpm.h | 1 + include/asm-powerpc/qe.h | 36 +++----------- 5 files changed, 23 insertions(+), 123 deletions(-)
arch/powerpc/sysdev/Makefile +1 -0
@@ -42,6 +42,7 @@ endif ifeq ($(ARCH),powerpc) obj-$(CONFIG_CPM) += cpm_common.o obj-$(CONFIG_CPM2) += cpm2.o cpm2_pic.o +obj-$(CONFIG_QUICC_ENGINE) += cpm_common.o obj-$(CONFIG_PPC_DCR) += dcr.o obj-$(CONFIG_8xx) += mpc8xx_pic.o cpm1.o obj-$(CONFIG_UCODE_PATCH) += micropatch.o
arch/powerpc/sysdev/cpm_common.c +13 -3
@@ -85,9 +85,13 @@ int __init cpm_muram_init(void) np =of_find_compatible_node (NULL ,NULL ,"fsl,cpm-muram-data" );if (!np) { -printk (KERN_ERR "Cannot find CPM muram data node" ); - ret = -ENODEV ; - goto out; +/* try legacy bindings */ + np =of_find_node_by_name (NULL ,"data-only" ); +if (!np) { +printk (KERN_ERR "Cannot find CPM muram data node" ); + ret = -ENODEV ; + goto out; + } } muram_pbase =of_translate_address (np, zero);
@@ -189,6 +193,12 @@ void __iomem *cpm_muram_addr(unsigned long offset) }EXPORT_SYMBOL (cpm_muram_addr); +unsigned long cpm_muram_offset (void __iomem *addr) +{ +return addr - (void __iomem *)muram_vbase; +} +EXPORT_SYMBOL (cpm_muram_offset); +/** * cpm_muram_dma - turn a muram virtual address into a DMA address * @offset: virtual address from cpm_muram_addr() to convert
arch/powerpc/sysdev/qe_lib/qe.c +0 -92
104 lines not on this page · raw message
include/asm-powerpc/cpm.h +1 -0
@@ -96,6 +96,7 @@ unsigned long cpm_muram_alloc(unsigned long size, unsigned long align);int cpm_muram_free (unsigned long offset);unsigned long cpm_muram_alloc_fixed (unsigned long offset,unsigned long size);void __iomem *cpm_muram_addr (unsigned long offset); +unsigned long cpm_muram_offset (void __iomem *addr);dma_addr_t cpm_muram_dma (void __iomem *addr);int cpm_command (u32 command,u8 opcode);
include/asm-powerpc/qe.h +8 -28
@@ -17,6 +17,7 @@#ifdef __KERNEL__#include <linux/spinlock.h> +#include <asm/cpm.h> #include <asm/immap_qe.h> #define QE_NUM_OF_SNUM 28
@@ -118,20 +119,13 @@ unsigned int qe_get_brg_clk(void);int qe_setbrg (enum qe_clock brg,unsigned int rate,unsigned int multiplier);int qe_get_snum (void );void qe_put_snum (u8 snum); -unsigned long qe_muram_alloc (int size,int align); -int qe_muram_free (unsigned long offset); -unsigned long qe_muram_alloc_fixed (unsigned long offset,int size); -void qe_muram_dump (void ); - -static inline void __iomem *qe_muram_addr (unsigned long offset) -{ -return (void __iomem *)&qe_immr->muram[offset]; -} - -static inline unsigned long qe_muram_offset (void __iomem *addr) -{ -return addr - (void __iomem *)qe_immr->muram; -} +/* we actually use cpm_muram implementation, define this for convenience */ +#define qe_muram_init cpm_muram_init +#define qe_muram_alloc cpm_muram_alloc +#define qe_muram_alloc_fixed cpm_muram_alloc_fixed +#define qe_muram_free cpm_muram_free +#define qe_muram_addr cpm_muram_addr +#define qe_muram_offset cpm_muram_offset/* Structure that defines QE firmware binary files. *
@@ -198,20 +192,6 @@ struct qe_bd {#define BD_STATUS_MASK 0xffff0000#define BD_LENGTH_MASK 0x0000ffff -#define BD_SC_EMPTY 0x8000/* Receive is empty */ -#define BD_SC_READY 0x8000/* Transmit is ready */ -#define BD_SC_WRAP 0x2000/* Last buffer descriptor */ -#define BD_SC_INTRPT 0x1000/* Interrupt on change */ -#define BD_SC_LAST 0x0800/* Last buffer in frame */ -#define BD_SC_CM 0x0200/* Continous mode */ -#define BD_SC_ID 0x0100/* Rec'd too many idles */ -#define BD_SC_P 0x0100/* xmt preamble */ -#define BD_SC_BR 0x0020/* Break received */ -#define BD_SC_FR 0x0010/* Framing error */ -#define BD_SC_PR 0x0008/* Parity error */ -#define BD_SC_OV 0x0002/* Overrun */ -#define BD_SC_CD 0x0001/* ?? */ -/* Alignment */ #define QE_INTR_TABLE_ALIGN 16/* ??? */ #define QE_ALIGNMENT_OF_BD 8
Signature · 1 line
1.5.5.1
Kumar Gala
AppliedRe: [PATCH 7/7] [POWERPC] qe_lib: switch to the cpm_muram implementation
Quoted 16 lines · Anton Vorontsov
This is very trivial patch. We're transitioning to the cpm_muram_* calls. That's it.
Less trivial changes:
- BD_SC_* defines were defined in thecpm.handqe.h, so to avoid redefines
we removeBD_SCfrom theqe.hand usecpm.halong with cpm_muram_* prototypes;
-qe_muram_dumpwas unused and thus removed;
- added some code to thecpm_common.cto support legacy QE bindings (data-only node name).
- For convenience, define qe_* calls to cpm_*. So drivers need not to be
changed.Signed-off-by Anton Vorontsov <[email protected]>
Quoted 8 lines
---
arch/powerpc/sysdev/Makefile | 1 + arch/powerpc/sysdev/cpm_common.c | 16 +++++- arch/powerpc/sysdev/qe_lib/qe.c | 92 -------------------------------------- include/asm-powerpc/cpm.h | 1 + include/asm-powerpc/qe.h | 36 +++----------- 5 files changed, 23 insertions(+), 123 deletions(-)
applied.
- k
Quoted 4 lines · Anton Vorontsov
Hi Kumar,
Here is updated series, with your comments addressed. Patches are rebased on top of your current powerpc-next branch.
Are there any issues with this series? If not, Kumar, could you please apply this except this patch:
Quoted 1 line
[PATCH 6/7] [POWERPC] booting-without-of: add FHCI USB, FSL MCU, FSL UPM and GPIO LEDs bindings
It'll need more discussion, obviously.
Thanks,
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2