Subject: [PATCH v2 0/9] serial: samsung: rework clock lookup and add device tree support

From: [email-masked] (Greg KH)
Date: Mon, 24 Oct 2011 11:05:11 +0200

On Mon, Oct 24, 2011 at 10:27:47AM +0200, Kukjin Kim wrote:
> On 10/10/11 12:07, Thomas Abraham wrote:
> >Changes since v1:
> >- Included the missing dt bindings documentation in the last patch.
> >- Rebased and tested with linux 3.1-rc9 on linux-samsung-soc tree.
> >- Commit messages are modified to be elaborate.
> >- No changes in code.
> >
> >
> >This patchset reworks the lookup of parent clocks for baud rate generator in
> >the uart controller and adds support for device tree based discovery for the
> >uart controller.
> >
> >The Samsung uart driver was dependent on the clock names supplied in the
> >platform data. This dependency had to be first removed to add device tree based
> >discovery support for Samsung uart driver. In the process of reworking the clock
> >lookup logic, several changes had to be made which in turn made parts of the
> >driver redundant and such portions of the driver have been removed in this
> >patchset. As a result, all the SoC specific extensions have been deleted.
> >
> >Patch 1 modifies the driver to keep a copy of the location of the platform data
> >in the driver's private data. This makes device tree support addition
> >non-intrusive.
> >
> >Patch 2 moves the complicated clock divider handling for fclk source clock for
> >s3c2440 SoC into platform code. The fclk clock can be easily managed by
> >representing it as a clock in the platform code. fclk clock handling was
> >specific to s3c2440 and moving this out of the driver makes the rest of the
> >clock handling in the driver almost identical for all SoC's supported by the
> >driver.
> >
> >Patch 3 modifies the driver to lookup source clocks for baud rate generator
> >by using generic clock names. The generic clock name used by the driver is
> >'clk_uart_baud' appended with the parent number of the clock. For instance,
> >the second parent clock source option for baud rate generator is named as
> >'clk_uart_baud2'.
> >
> >The driver stops depending on the set_clock and get_clock callbacks in the
> >SoC specific extensions. Instead, the driver is modified to lookup parent
> >clock rates and decide/calculate the best parent clock source for the baud
> >rate generator (best clock would have the least delta when compared to buad
> >rate requested).
> >
> >In this process, four new members are added in the driver's private data
> >structure. The 'def_clk_sel' member is a platform set bit-value that specifies
> >the possible parents that the driver is allowed to use for baud rate clock.
> >A bit set at a particular bit position selects that parent clock source.
> >Example: If bit number 2 is set in 'def_clk_sel', then parent clock source '2'
> >can be a possible parent clock for baud rate generator. The 'num_clks'
> >is the number of possible parent clocks that the SoC supports. The
> >'clksel_mask' and 'clksel_shift' members are used to operate on the parent clock
> >selection bit field int the uart controller's contol register.
> >
> >Patch 4 removes all uses and instances of 'struct s3c24xx_uart_clksrc'. This
> >structure was used to pass source clock 'names' between platform code, driver
> >and SoC specific extensions. By moving away from using platform specified clock
> >names in the driver, all uses and instances of 'struct s3c24xx_uart_clksrc'
> >is removed.
> >
> >Patch 5 removes all the SoC specific get_clksrc and set_clksrc callbacks. These
> >callbacks were using SoC specific clock names to communicate the clock to be
> >set or retrieved. These callbacks are removed as they are no longer required.
> >
> >Patch 6 reworks the uart clocks in platform code of all Samsung SoC's. The
> >driver would use generic clock names and this patch creates aliases to uart
> >clocks with generic clock names as the alias name.
> >
> >Patch 7 merges all the SoC specific port reset functions into one common port
> >reset function and moves the common function into the common Samsung uart
> >driver. All the SoC specific port reset functions perform the same operation
> >allowing all of them to be converged.
> >
> >Patch 8 collapses all the SoC specific probe functions and associated driver
> >private data into the Samsung common uart driver. With get_clksrc, set_clksrc
> >and reset_port functions removed from SoC specific extensions, all the remains
> >in those extensions is the probe function along with SoC specific driver data.
> >These are merged into the common Samsung uart driver and all the SoC specific
> >extensions are deleted.
> >
> >Patch 9 adds device tree based discovery support for the uart driver.
> >
> >
> >This patchset is based on the following tree
> >https://github.com/kgene/linux-samsung.git  branch: for-next
> >
> >with the following two patches applied
> >[PATCH] serial: samsung: Add unified interrupt handler for s3c64xx and later SoC's
> >[PATCH] ARM: SAMSUNG: Remove uart irq handling from plaform code
> >
> >and tested on the following boards.
> >SMDK2440, SMDK2416, SMDK6410, SMDK6440, SMDK6450, SMDKC100, SMDKV210, SMDKV310.
> >
> >This patchset has dependency on the following patchset:
> >[PATCH V2 0/2] Add a common macro for creating struct clk_lookup entries
> >
> >
> >Thomas Abraham (9):
> >   serial: samsung: Keep a copy of the location of platform data in driver's private data
> >   serial: samsung: move handling of fclk/n clock to platform code
> >   serial: samsung: switch to clkdev based clock lookup
> >   serial: samsung: remove struct 's3c24xx_uart_clksrc' and all uses of it
> >   serial: samsung: remove all uses of get_clksrc and set_clksrc
> >   arm: samsung: register uart clocks to clock lookup list
> >   serial: samsung: merge all SoC specific port reset functions
> >   serial: samsung: merge probe() function from all SoC specific extensions
> >   serial: samsung: add device tree support
> >
> >  .../devicetree/bindings/serial/samsung_uart.txt    |   14 +
> >  arch/arm/mach-exynos4/clock.c                      |  106 ++--
> >  arch/arm/mach-exynos4/init.c                       |   21 +-
> >  arch/arm/mach-s3c2410/mach-bast.c                  |   22 -
> >  arch/arm/mach-s3c2410/mach-vr1000.c                |   24 -
> >  arch/arm/mach-s3c2410/s3c2410.c                    |    6 +
> >  arch/arm/mach-s3c2412/clock.c                      |    7 +
> >  arch/arm/mach-s3c2440/clock.c                      |   44 ++
> >  arch/arm/mach-s3c2440/mach-anubis.c                |   22 +-
> >  arch/arm/mach-s3c2440/mach-at2440evb.c             |   22 +-
> >  arch/arm/mach-s3c2440/mach-osiris.c                |   24 +-
> >  arch/arm/mach-s3c2440/mach-rx1950.c                |   18 +-
> >  arch/arm/mach-s3c2440/mach-rx3715.c                |   19 +-
> >  arch/arm/mach-s3c64xx/clock.c                      |   37 +-
> >  arch/arm/mach-s5p64x0/clock-s5p6440.c              |   32 +-
> >  arch/arm/mach-s5p64x0/clock-s5p6450.c              |   32 +-
> >  arch/arm/mach-s5p64x0/init.c                       |   31 -
> >  arch/arm/mach-s5pc100/clock.c                      |   33 +-
> >  arch/arm/mach-s5pv210/clock.c                      |  107 ++--
> >  arch/arm/mach-s5pv210/init.c                       |   19 -
> >  arch/arm/plat-s3c24xx/s3c2443-clock.c              |   23 +-
> >  arch/arm/plat-samsung/include/plat/regs-serial.h   |   45 +-
> >  drivers/tty/serial/Kconfig                         |   45 +--
> >  drivers/tty/serial/Makefile                        |    5 -
> >  drivers/tty/serial/s3c2410.c                       |  115 ----
> >  drivers/tty/serial/s3c2412.c                       |  149 -----
> >  drivers/tty/serial/s3c2440.c                       |  178 ------
> >  drivers/tty/serial/s3c6400.c                       |  149 -----
> >  drivers/tty/serial/s5pv210.c                       |  158 -----
> >  drivers/tty/serial/samsung.c                       |  639 ++++++++++++--------
> >  drivers/tty/serial/samsung.h                       |   32 +-
> >  31 files changed, 752 insertions(+), 1426 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/serial/samsung_uart.txt
> >  delete mode 100644 drivers/tty/serial/s3c2410.c
> >  delete mode 100644 drivers/tty/serial/s3c2412.c
> >  delete mode 100644 drivers/tty/serial/s3c2440.c
> >  delete mode 100644 drivers/tty/serial/s3c6400.c
> >  delete mode 100644 drivers/tty/serial/s5pv210.c
> 
> (Cc'ed Greg KH)
> 
> Looks good for me, and I need to get the ack from Greg before applying.
> 
> Greg, if you're ok, I'd like to send this series to upstream via
> Samsung tree for supporting device tree because this touches a lot
> of arch/arm/ Samsung stuff. If any problems, please let me know.

No objection from me, feel free to take this through your tree.

greg k-h