[meta-ti] Jacob Stiffler : linux: add new method for cmem injection

2016-09-16 Thread Arago Project git
Module: meta-ti
Branch: krogoth
Commit: bf58916a108025475bd7b66d92e1e3f93f0a687d
URL:
http://arago-project.org/git/meta-ti.git?a=commit;h=bf58916a108025475bd7b66d92e1e3f93f0a687d

Author: Jacob Stiffler 
Date:   Wed Sep 14 00:21:17 2016 +

linux: add new method for cmem injection

* Add new method to perform CMEM DT injection as it is required to
  customize at a finer level than machine.
* Now CMEM injection can be performed per DT.

Signed-off-by: Jacob Stiffler 
Signed-off-by: Denys Dmytriyenko 

---

 recipes-kernel/linux/cmem.inc  |   78 +---
 recipes-kernel/linux/files/dra7xx/cmem-am571x.dtsi |   29 +++
 2 files changed, 95 insertions(+), 12 deletions(-)

diff --git a/recipes-kernel/linux/cmem.inc b/recipes-kernel/linux/cmem.inc
index fc0bf48..b60909c 100644
--- a/recipes-kernel/linux/cmem.inc
+++ b/recipes-kernel/linux/cmem.inc
@@ -1,18 +1,72 @@
-SRC_URI += "file://cmem.dtsi"
+# Add concept of machine variants to split DTBs into subsets
+#
+# Use these for temporary overrides
+CMEM_MACHINE = "${MACHINE}"
+CMEM_MACHINE_am57xx-evm = "am571x am572x"
+CMEM_MACHINE_am57xx-hs-evm = "am571x am572x"
 
+# Set cmem.dtsi per machine or machine variant
+CMEM_DTSI = "cmem.dtsi"
+CMEM_DTSI_am571x = "cmem-am571x.dtsi"
+
+# Split device trees between variants
+CMEM_DEVICETREE = "${KERNEL_DEVICETREE}"
+CMEM_DEVICETREE_am571x = "am571x-idk.dtb am571x-idk-lcd-osd.dtb 
am571x-idk-lcd-osd101t2587.dtb"
+CMEM_DEVICETREE_am572x = "am57xx-beagle-x15.dtb am57xx-beagle-x15-revb1.dtb 
am57xx-evm.dtb am57xx-evm-reva3.dtb am572x-idk.dtb \
+  am572x-idk-lcd-osd.dtb 
am572x-idk-lcd-osd101t2587.dtb"
+
+
+# Flag to enable CMEM injection
 RESERVE_CMEM ?= "0"
 
-do_setup_cmem() {
-if [ "${RESERVE_CMEM}" == "1" ]
-then
-cp ${WORKDIR}/cmem.dtsi ${S}/arch/arm/boot/dts/${MACHINE}-cmem.dtsi
-
-for dtb in ${KERNEL_DEVICETREE}
-do
-dts=`echo $dtb | sed -e 's|dtb$|dts|'`
-echo "#include \"${MACHINE}-cmem.dtsi\"" >> 
${S}/arch/arm/boot/dts/$dts
-done
-fi
+# Add correct cmem.dtsi to SRC_URI for each variant for a given machine
+python() {
+old_overrides = d.getVar('OVERRIDES', False)
+
+# Initialize with empty string to simplify logic to append to SRC_URI
+cmem_dtsi = set([''])
+
+for cmem_machine in (d.getVar('CMEM_MACHINE', True) or '').split():
+# Create copy of data for additional override
+localdata = bb.data.createCopy(d)
+localdata.setVar('OVERRIDES', '%s:%s' % (cmem_machine, old_overrides))
+bb.data.update_data(localdata)
+
+cmem_dtsi.add(localdata.getVar('CMEM_DTSI', True))
+
+d.appendVar('SRC_URI', ' file://'.join(cmem_dtsi))
+}
+
+python do_setup_cmem() {
+import shutil
+
+old_overrides = d.getVar('OVERRIDES', False)
+
+if d.getVar('RESERVE_CMEM', True) is '1':
+for cmem_machine in (d.getVar('CMEM_MACHINE', True) or '').split():
+# Create copy of data for additional override
+localdata = bb.data.createCopy(d)
+localdata.setVar('OVERRIDES', '%s:%s' % (cmem_machine, 
old_overrides))
+bb.data.update_data(localdata)
+
+# Get source directory and dtsi filename
+src_dir  = localdata.getVar('WORKDIR', True)
+src_dtsi = localdata.getVar('CMEM_DTSI', True)
+
+# Get destination directory and destination dtsi filename which 
adds
+#   the MACHINE prefix.
+dst_dir  = os.path.join(localdata.getVar('S', True), 
'arch/arm/boot/dts')
+dst_dtsi = localdata.expand('${MACHINE}-${CMEM_DTSI}')
+
+# Copy cmem.dtsi into source tree
+shutil.copy(os.path.join(src_dir,src_dtsi), 
os.path.join(dst_dir,dst_dtsi))
+
+# Inject dtsi into each dts in list
+for dtb in (localdata.getVar('CMEM_DEVICETREE', True) or 
'').split():
+dts = dtb[:-4] + '.dts'
+
+with open(os.path.join(dst_dir,dts), 'a') as dts_file:
+dts_file.write('\n#include "%s"\n' % dst_dtsi)
 }
 
 do_patch[postfuncs] += "do_setup_cmem"
diff --git a/recipes-kernel/linux/files/dra7xx/cmem-am571x.dtsi 
b/recipes-kernel/linux/files/dra7xx/cmem-am571x.dtsi
new file mode 100644
index 000..ebd6129
--- /dev/null
+++ b/recipes-kernel/linux/files/dra7xx/cmem-am571x.dtsi
@@ -0,0 +1,29 @@
+/ {
+reserved-memory {
+#address-cells = <2>;
+#size-cells = <2>;
+ranges;
+
+cmem_block_mem_0: cmem_block_mem@a000 {
+reg = <0x0 0xa000 0x0 0x0c00>;
+no-map;
+status = "okay";
+};
+};
+
+cmem {
+compatible = "ti,cmem";
+#address-cells = <1>;
+#size-cells = <0>;
+
+   #pool-size-cells = <2>;
+
+status = "okay";
+
+

[meta-ti] Jacob Stiffler : linux: add new method for cmem injection

2016-09-16 Thread Arago Project git
Module: meta-ti
Branch: master
Commit: 0623707d8084b2856b74a1b40aa2dee361f6b933
URL:
http://arago-project.org/git/meta-ti.git?a=commit;h=0623707d8084b2856b74a1b40aa2dee361f6b933

Author: Jacob Stiffler 
Date:   Wed Sep 14 00:21:17 2016 +

linux: add new method for cmem injection

* Add new method to perform CMEM DT injection as it is required to
  customize at a finer level than machine.
* Now CMEM injection can be performed per DT.

Signed-off-by: Jacob Stiffler 
Signed-off-by: Denys Dmytriyenko 

---

 recipes-kernel/linux/cmem.inc  |   78 +---
 recipes-kernel/linux/files/dra7xx/cmem-am571x.dtsi |   29 +++
 2 files changed, 95 insertions(+), 12 deletions(-)

diff --git a/recipes-kernel/linux/cmem.inc b/recipes-kernel/linux/cmem.inc
index fc0bf48..b60909c 100644
--- a/recipes-kernel/linux/cmem.inc
+++ b/recipes-kernel/linux/cmem.inc
@@ -1,18 +1,72 @@
-SRC_URI += "file://cmem.dtsi"
+# Add concept of machine variants to split DTBs into subsets
+#
+# Use these for temporary overrides
+CMEM_MACHINE = "${MACHINE}"
+CMEM_MACHINE_am57xx-evm = "am571x am572x"
+CMEM_MACHINE_am57xx-hs-evm = "am571x am572x"
 
+# Set cmem.dtsi per machine or machine variant
+CMEM_DTSI = "cmem.dtsi"
+CMEM_DTSI_am571x = "cmem-am571x.dtsi"
+
+# Split device trees between variants
+CMEM_DEVICETREE = "${KERNEL_DEVICETREE}"
+CMEM_DEVICETREE_am571x = "am571x-idk.dtb am571x-idk-lcd-osd.dtb 
am571x-idk-lcd-osd101t2587.dtb"
+CMEM_DEVICETREE_am572x = "am57xx-beagle-x15.dtb am57xx-beagle-x15-revb1.dtb 
am57xx-evm.dtb am57xx-evm-reva3.dtb am572x-idk.dtb \
+  am572x-idk-lcd-osd.dtb 
am572x-idk-lcd-osd101t2587.dtb"
+
+
+# Flag to enable CMEM injection
 RESERVE_CMEM ?= "0"
 
-do_setup_cmem() {
-if [ "${RESERVE_CMEM}" == "1" ]
-then
-cp ${WORKDIR}/cmem.dtsi ${S}/arch/arm/boot/dts/${MACHINE}-cmem.dtsi
-
-for dtb in ${KERNEL_DEVICETREE}
-do
-dts=`echo $dtb | sed -e 's|dtb$|dts|'`
-echo "#include \"${MACHINE}-cmem.dtsi\"" >> 
${S}/arch/arm/boot/dts/$dts
-done
-fi
+# Add correct cmem.dtsi to SRC_URI for each variant for a given machine
+python() {
+old_overrides = d.getVar('OVERRIDES', False)
+
+# Initialize with empty string to simplify logic to append to SRC_URI
+cmem_dtsi = set([''])
+
+for cmem_machine in (d.getVar('CMEM_MACHINE', True) or '').split():
+# Create copy of data for additional override
+localdata = bb.data.createCopy(d)
+localdata.setVar('OVERRIDES', '%s:%s' % (cmem_machine, old_overrides))
+bb.data.update_data(localdata)
+
+cmem_dtsi.add(localdata.getVar('CMEM_DTSI', True))
+
+d.appendVar('SRC_URI', ' file://'.join(cmem_dtsi))
+}
+
+python do_setup_cmem() {
+import shutil
+
+old_overrides = d.getVar('OVERRIDES', False)
+
+if d.getVar('RESERVE_CMEM', True) is '1':
+for cmem_machine in (d.getVar('CMEM_MACHINE', True) or '').split():
+# Create copy of data for additional override
+localdata = bb.data.createCopy(d)
+localdata.setVar('OVERRIDES', '%s:%s' % (cmem_machine, 
old_overrides))
+bb.data.update_data(localdata)
+
+# Get source directory and dtsi filename
+src_dir  = localdata.getVar('WORKDIR', True)
+src_dtsi = localdata.getVar('CMEM_DTSI', True)
+
+# Get destination directory and destination dtsi filename which 
adds
+#   the MACHINE prefix.
+dst_dir  = os.path.join(localdata.getVar('S', True), 
'arch/arm/boot/dts')
+dst_dtsi = localdata.expand('${MACHINE}-${CMEM_DTSI}')
+
+# Copy cmem.dtsi into source tree
+shutil.copy(os.path.join(src_dir,src_dtsi), 
os.path.join(dst_dir,dst_dtsi))
+
+# Inject dtsi into each dts in list
+for dtb in (localdata.getVar('CMEM_DEVICETREE', True) or 
'').split():
+dts = dtb[:-4] + '.dts'
+
+with open(os.path.join(dst_dir,dts), 'a') as dts_file:
+dts_file.write('\n#include "%s"\n' % dst_dtsi)
 }
 
 do_patch[postfuncs] += "do_setup_cmem"
diff --git a/recipes-kernel/linux/files/dra7xx/cmem-am571x.dtsi 
b/recipes-kernel/linux/files/dra7xx/cmem-am571x.dtsi
new file mode 100644
index 000..ebd6129
--- /dev/null
+++ b/recipes-kernel/linux/files/dra7xx/cmem-am571x.dtsi
@@ -0,0 +1,29 @@
+/ {
+reserved-memory {
+#address-cells = <2>;
+#size-cells = <2>;
+ranges;
+
+cmem_block_mem_0: cmem_block_mem@a000 {
+reg = <0x0 0xa000 0x0 0x0c00>;
+no-map;
+status = "okay";
+};
+};
+
+cmem {
+compatible = "ti,cmem";
+#address-cells = <1>;
+#size-cells = <0>;
+
+   #pool-size-cells = <2>;
+
+status = "okay";
+
+