-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/…
…arm/arm-soc Pull ARM SoC driver specific changes from Olof Johansson: "A collection of mostly SoC-specific driver updates: - a handful of pincontrol and setup changes - new drivers for hwmon and reset controller for vexpress - timing support updates for OMAP (gpmc and other interfaces) - plus a collection of smaller cleanups" * tag 'drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (21 commits) ARM: ux500: fix pin warning ARM: OMAP2+: tusb6010: generic timing calculation ARM: OMAP2+: smc91x: generic timing calculation ARM: OMAP2+: onenand: generic timing calculation ARM: OMAP2+: gpmc: generic timing calculation ARM: OMAP2+: gpmc: handle additional timings ARM: OMAP2+: nand: remove redundant rounding gpio: samsung: use pr_* instead of printk ARM: ux500: fixup magnetometer pins ARM: ux500: add STM pin configuration ARM: ux500: 8500: add pinctrl support for uart1 and uart2 ARM: ux500: cosmetic fixups for uart0 gpio: samsung: Fix input mode setting function for GPIO int ARM: SAMSUNG: Insert bitmap_gpio_int member in samsung_gpio_chip ARM: ux500: 8500: define SDI sleep states ARM: vexpress: Reset driver ARM: ux500: 8500: update SKE keypad pinctrl table hwmon: Versatile Express hwmon driver ARM: ux500: delete duplicate macro ARM: ux500: 8500: add IDLE pin configuration for SPI ...
- Loading branch information
Showing
17 changed files
with
1,525 additions
and
372 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
GPMC (General Purpose Memory Controller): | ||
========================================= | ||
|
||
GPMC is an unified memory controller dedicated to interfacing external | ||
memory devices like | ||
* Asynchronous SRAM like memories and application specific integrated | ||
circuit devices. | ||
* Asynchronous, synchronous, and page mode burst NOR flash devices | ||
NAND flash | ||
* Pseudo-SRAM devices | ||
|
||
GPMC is found on Texas Instruments SoC's (OMAP based) | ||
IP details: http://www.ti.com/lit/pdf/spruh73 section 7.1 | ||
|
||
|
||
GPMC generic timing calculation: | ||
================================ | ||
|
||
GPMC has certain timings that has to be programmed for proper | ||
functioning of the peripheral, while peripheral has another set of | ||
timings. To have peripheral work with gpmc, peripheral timings has to | ||
be translated to the form gpmc can understand. The way it has to be | ||
translated depends on the connected peripheral. Also there is a | ||
dependency for certain gpmc timings on gpmc clock frequency. Hence a | ||
generic timing routine was developed to achieve above requirements. | ||
|
||
Generic routine provides a generic method to calculate gpmc timings | ||
from gpmc peripheral timings. struct gpmc_device_timings fields has to | ||
be updated with timings from the datasheet of the peripheral that is | ||
connected to gpmc. A few of the peripheral timings can be fed either | ||
in time or in cycles, provision to handle this scenario has been | ||
provided (refer struct gpmc_device_timings definition). It may so | ||
happen that timing as specified by peripheral datasheet is not present | ||
in timing structure, in this scenario, try to correlate peripheral | ||
timing to the one available. If that doesn't work, try to add a new | ||
field as required by peripheral, educate generic timing routine to | ||
handle it, make sure that it does not break any of the existing. | ||
Then there may be cases where peripheral datasheet doesn't mention | ||
certain fields of struct gpmc_device_timings, zero those entries. | ||
|
||
Generic timing routine has been verified to work properly on | ||
multiple onenand's and tusb6010 peripherals. | ||
|
||
A word of caution: generic timing routine has been developed based | ||
on understanding of gpmc timings, peripheral timings, available | ||
custom timing routines, a kind of reverse engineering without | ||
most of the datasheets & hardware (to be exact none of those supported | ||
in mainline having custom timing routine) and by simulation. | ||
|
||
gpmc timing dependency on peripheral timings: | ||
[<gpmc_timing>: <peripheral timing1>, <peripheral timing2> ...] | ||
|
||
1. common | ||
cs_on: t_ceasu | ||
adv_on: t_avdasu, t_ceavd | ||
|
||
2. sync common | ||
sync_clk: clk | ||
page_burst_access: t_bacc | ||
clk_activation: t_ces, t_avds | ||
|
||
3. read async muxed | ||
adv_rd_off: t_avdp_r | ||
oe_on: t_oeasu, t_aavdh | ||
access: t_iaa, t_oe, t_ce, t_aa | ||
rd_cycle: t_rd_cycle, t_cez_r, t_oez | ||
|
||
4. read async non-muxed | ||
adv_rd_off: t_avdp_r | ||
oe_on: t_oeasu | ||
access: t_iaa, t_oe, t_ce, t_aa | ||
rd_cycle: t_rd_cycle, t_cez_r, t_oez | ||
|
||
5. read sync muxed | ||
adv_rd_off: t_avdp_r, t_avdh | ||
oe_on: t_oeasu, t_ach, cyc_aavdh_oe | ||
access: t_iaa, cyc_iaa, cyc_oe | ||
rd_cycle: t_cez_r, t_oez, t_ce_rdyz | ||
|
||
6. read sync non-muxed | ||
adv_rd_off: t_avdp_r | ||
oe_on: t_oeasu | ||
access: t_iaa, cyc_iaa, cyc_oe | ||
rd_cycle: t_cez_r, t_oez, t_ce_rdyz | ||
|
||
7. write async muxed | ||
adv_wr_off: t_avdp_w | ||
we_on, wr_data_mux_bus: t_weasu, t_aavdh, cyc_aavhd_we | ||
we_off: t_wpl | ||
cs_wr_off: t_wph | ||
wr_cycle: t_cez_w, t_wr_cycle | ||
|
||
8. write async non-muxed | ||
adv_wr_off: t_avdp_w | ||
we_on, wr_data_mux_bus: t_weasu | ||
we_off: t_wpl | ||
cs_wr_off: t_wph | ||
wr_cycle: t_cez_w, t_wr_cycle | ||
|
||
9. write sync muxed | ||
adv_wr_off: t_avdp_w, t_avdh | ||
we_on, wr_data_mux_bus: t_weasu, t_rdyo, t_aavdh, cyc_aavhd_we | ||
we_off: t_wpl, cyc_wpl | ||
cs_wr_off: t_wph | ||
wr_cycle: t_cez_w, t_ce_rdyz | ||
|
||
10. write sync non-muxed | ||
adv_wr_off: t_avdp_w | ||
we_on, wr_data_mux_bus: t_weasu, t_rdyo | ||
we_off: t_wpl, cyc_wpl | ||
cs_wr_off: t_wph | ||
wr_cycle: t_cez_w, t_ce_rdyz | ||
|
||
|
||
Note: Many of gpmc timings are dependent on other gpmc timings (a few | ||
gpmc timings purely dependent on other gpmc timings, a reason that | ||
some of the gpmc timings are missing above), and it will result in | ||
indirect dependency of peripheral timings to gpmc timings other than | ||
mentioned above, refer timing routine for more details. To know what | ||
these peripheral timings correspond to, please see explanations in | ||
struct gpmc_device_timings definition. And for gpmc timings refer | ||
IP details (link above). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
Versatile Express hwmon sensors | ||
------------------------------- | ||
|
||
Requires node properties: | ||
- "compatible" value : one of | ||
"arm,vexpress-volt" | ||
"arm,vexpress-amp" | ||
"arm,vexpress-temp" | ||
"arm,vexpress-power" | ||
"arm,vexpress-energy" | ||
- "arm,vexpress-sysreg,func" when controlled via vexpress-sysreg | ||
(see Documentation/devicetree/bindings/arm/vexpress-sysreg.txt | ||
for more details) | ||
|
||
Optional node properties: | ||
- label : string describing the monitored value | ||
|
||
Example: | ||
energy@0 { | ||
compatible = "arm,vexpress-energy"; | ||
arm,vexpress-sysreg,func = <13 0>; | ||
label = "A15 Jcore"; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
Kernel driver vexpress | ||
====================== | ||
|
||
Supported systems: | ||
* ARM Ltd. Versatile Express platform | ||
Prefix: 'vexpress' | ||
Datasheets: | ||
* "Hardware Description" sections of the Technical Reference Manuals | ||
for the Versatile Express boards: | ||
http://infocenter.arm.com/help/topic/com.arm.doc.subset.boards.express/index.html | ||
* Section "4.4.14. System Configuration registers" of the V2M-P1 TRM: | ||
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0447-/index.html | ||
|
||
Author: Pawel Moll | ||
|
||
Description | ||
----------- | ||
|
||
Versatile Express platform (http://www.arm.com/versatileexpress/) is a | ||
reference & prototyping system for ARM Ltd. processors. It can be set up | ||
from a wide range of boards, each of them containing (apart of the main | ||
chip/FPGA) a number of microcontrollers responsible for platform | ||
configuration and control. Theses microcontrollers can also monitor the | ||
board and its environment by a number of internal and external sensors, | ||
providing information about power lines voltages and currents, board | ||
temperature and power usage. Some of them also calculate consumed energy | ||
and provide a cumulative use counter. | ||
|
||
The configuration devices are _not_ memory mapped and must be accessed | ||
via a custom interface, abstracted by the "vexpress_config" API. | ||
|
||
As these devices are non-discoverable, they must be described in a Device | ||
Tree passed to the kernel. Details of the DT binding for them can be found | ||
in Documentation/devicetree/bindings/hwmon/vexpress.txt. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.